다른 파트 정리를 보고 싶다면 아래 링크를 확인하세요
1) 인공지능(AI) 맛보기 : https://aigong.tistory.com/334
2) 꼭 알아야 하는 파이썬 기초 지식 : https://aigong.tistory.com/344
3) 핵심만 담은 AI를 위한 수학 지식 : https://aigong.tistory.com/345
4) 인공지능 본격 탐구: 딥러닝 기초 : https://aigong.tistory.com/346
개인적인 호기심때문에 본 강좌를 수강하게 되었습니다. 해당 코스의 boostcourse를 보며 제가 중요하다고 판단된 내용 중 일부만 간단히 정리하는 공간으로 마련하였습니다. 이 내용으로 공부를 하신다기보다 그냥 이런게 있구나 정도로만 판단하시면 좋겠고 모든 저작권은 Edwith / boostcourse / boostcamp 그리고 강연해주신 분들(최성준, 임성빈, 최성철)께 있습니다.
https://www.boostcourse.org/onlyboostcampaitech3
임성빈 (UNIST 인공지능대학원 & 산업공학과) 교수님께서 강의를 해주심.
벡터는 숫자를 원소로 가지는 list or array
일반적으로 표기는 열벡터 but numpy 행벡터를 활용
벡터의 차원 고려
(1) 벡터는 공간에서 한 점을 나타냄.
인공지능에서는 n차원 공간으로 큰 차원을 이야기함
(2) 벡터는 원점으로부터 상대적 위치를 표현
(3) 벡터에 숫자를 곱해주면 길이만 변함.
스칼라곱. 음의 값을 곱하면 반대 방향.
(4) 같은 차원을 가지는 벡터끼리 덧셈, 뺄셈을 계산할 수 있음.
두 벡터의 덧셈/뺄셈은 다른 벡터로부터 상대적 위치이동을 표현함.
(5) 같은 차원을 가지는 벡터끼리 성분곱(Hadamard product)을 계산할 수 있음
(6) 벡터의 노름(norm)은 원점에서부터의 거리를 말함.
L1 Norm, L2 Norm 차원과 상관없음
L1 Norm은 각 성분의 변화량의 절대값을 모두 더한 것
L2 Norm은 피타고라스 정리를 이용해 유클리드 거리를 계산함.
np.linalg.norm을 이용해 구현도 가능
노름의 종류에 따라 기하학적 성질이 달라짐.
L1 노름 상의 원 마름모
ex) Robust 학습, Lasso 회귀
L2 노름 상의 원 원
ex) Laplace 근사, Ridge 회귀
L1, L2 노름을 이용해 두 벡터 사이의 거리/각도 계산 가능
두 벡터 사이의 거리를 계산할 때는 벡터의 뺄셈을 이용.
제 2 코사인 법칙을 이용해 두 벡터 사이의 각도 계산 가능
특히, 이 때의 분자는 x와 y의 내적 inner product를 활용
내적 계산 np.inner(x, y)
내적은 정사영(orthogonal projection)된 벡터의 길이와 관련 있다.
$$Proj(x) = ||x||cos \theta $$
내적은 정사영의 길이를 벡터 y의 길이 ||y||만큼 조정한 값
내적은 두 벡터의 유사도(similarity)를 측정하는데 사용.
데이터/패턴의 유사도 측정시 사용
행렬 (matrix)은 벡터를 원소로 가지는 2차원 배열
numpy 행(row)이 기본 단위
벡터 : 소문자 bold
행렬 : 대문자 bold
행렬은 행(row) & 열(column)이라는 인덱스를 가짐.
행렬의 특정 행(열)을 고정하면 행(열)벡터라 부름.
전치행렬(transpose matrix) 행과 열의 인덱스가 바뀐 행렬
행렬끼리 같은 모양을 가지면 덧셈, 뺄셈을 계산 가능
성분곱은 벡터와 같음
행렬 곱셈 (matrix multiplication) i번째 행벡터와 j번째 열벡터 사이의 내적을 성분으로 가지는 행렬을 계산
행렬곱은 X 행렬의 열의 개수와 Y 행렬의 행의 개수가 같아야함.
numpy에서는 @연산을 사용
행렬의 내적은 수학의 내적과 다름
np.inner
행렬은 벡터공간에서 사용되는 연산자(operator)로 이해
행렬곱을 통해 벡터를 다른 차원의 공간으로 보낼 수 있음
행렬곱을 통해 패턴을 추출할 수 있고 데이터를 압축할 수 있음
모든 선형변환 linear transform은 행렬곱으로 계산
역행렬(inverse matrix)
어떤 행렬 A의 연산을 거꾸로 되돌리는 행렬
역행렬은 행과 열 숫자가 같고 행렬식(determinant)이 0이 아닌 경우에만 계산할 수 있음
numpy.linalg.inv
만약 역행렬을 계산할 수 없다면 유사역행렬(pseudo-inverse) 또는 무어 펜로즈(Moore-Penrose) 역행렬 이용
행과 열의 숫자가 다름
행이 열의 숫자보다 클 때 / 작을 때에 따라 식 순서가 달라짐
numpy.linalg.pinv
선형회귀분석
행이 더 크므로 방정식을 푸는 것이 불가능
미분(differentiation)은 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구로 최적화에서 제일 많이 사용하는 기법
미분은 변화율의 극한(limit)으로 정의
import sympy as sym
sympy.diff를 가지고 미분
sym.diff(sym.poly(x**2 + 2*x + 3), x)
미분은 함수 f의 주어진 점 (x, f(x))에서의 접선의 기울기를 구한다.
한 점에서 접선의 기울기를 알면 어느 방향으로 점을 움직여야 함수값이 증가/감소하는지 알 수 있다.
미분값을 더하면 경사하강법(gradient ascent)라고 하며 함수의 극대값의 위치를 구함.
경사상승/경사하강 방법은 극값 (미분=0)에 도달하면 움직임을 멈춤.
변수가 벡터시
벡터가 입력인 다변수 함수의 경우 편미분(partial differentiation)을 사용
편미분도 sym.diff 활용
각 변수별로 편미분을 계산한 gradient 벡터를 이용하여 경사하강/경사상승법을 사용
비선형모델인 신경망 (Neural Network)에 대해 배워볼 것
분류 문제 softmax 함수는 모델의 출력을 확률로 해석할 수 있게 변환해주는 연산
overflow를 방지하기 위해 numpy.max를 사용
신경망은 선형모델과 활성함수(activation function)를 합성한 함수
활성함수(activation function)는 실수 위에 정의된 비선형(nonlinear) 함수로서 딥러닝에서 매우 중요함
활성함수를 쓰지 않으면 딥러닝은 선형모형과 차이가 없음
Sigmoid, Tanh도 많이 사용하나 ReLU가 가장 많이 사용
Multi-Layer Perceptron (MLP)은 신경망이 여러층 합성된 함수
순전파(forward propagation)
universal approximation theorm
층이 깊어질수록 목적함수를 근사하는데 필요한 뉴런(노드)의 숫자가 훨씬 빨리 줄어들어 좀 더 효율적으로 학습 가능
층이 얇으면 넓은 신경망이 되어야 함.
역전파(backpropagation) 알고리즘을 이용하여 각 층에 사용된 파라미터를 학습
각 층 파라미터의 그래디언트 벡터는 윗층부터 역순으로 계산
역전파 알고리즘은 합성함수 미분법인 연쇄법칙(chain-rule) 기반 자동미분(auto-differentiation)을 사용
순전파 대비 역전파는 미분 값을 저장해야하기 때문에 메모리를 많이 사용
https://d2l.ai/chapter_multilayer-perceptrons/backprop.html
https://ko.d2l.ai/chapter_deep-learning-basics/backprop.html
조건부 확률 P(A|B)는 사건 B가 일어난 상황에서 사건 A가 발생할 확률을 의미함.
베이즈 정리는 조건부확률을 이용하여 정보를 갱신하는 방법을 알려줌.
사후확률 : 데이터를 관찰했을 때 측정할 확률
사전확률 : 데이터가 관찰되지 않았을 때 사전에 주어진 확률 (가설, 가정)
Evidence : 데이터 분포
오탐율이 오르면 테스트의 정밀도(Precision)가 떨어진다.
Confusion Matrix
False Negative 2종 오류의 경우 의료에서는 매우 중요함.
베이즈 정리를 통한 정보의 갱신 (업데이트) - 갱신된 사후확률 계산
데이터가 들어올 때마다 업데이트 정보로 모델 정립이 가능
조건부 확률은 유용한 통계적 해석을 제공하지만 인과관계 (causality)를 추론할 때 함부로 사용해서는 안 됨.
인과관계는 데이터 분포의 변화에 강건한 예측모형을 만들 때 필요. 이 때 높은 정확도를 얻기는 어려움
인과관계를 알아내기 위해서는 중첩요인(confounding factor)의 효과를 제거하고 원인에 해당하는 변수만의 인과관계를 계산해야 함. 만일 Z의 효과를 제거하지 않으면 가짜 연관성 (spurious correlation)이 나옴.
신장 결석 크기에 따른 치료법
단순한 조건부 확률만의 계산만을 하는 것은 위험. 인과관계를 고려해야 함.
Convolution 연산
지금까지 배운 다층신경망(MLP)은 각 뉴런들이 선형모델과 활성함수로 모두 연결된 (fullyHconnected) 구조였습니다
활성화 함수를 제외한 Convolution 연산도 선형변환에 속함.
전체적으로는 +/-에 무관하지만 시스템적으로 그리고 엄밀하게 말하면 cross-correlation이 옳음.
커널은 정의역 내에서 움직여도 변하지 않고(translationHinvariant) 주어진 신호에 국소적(local)으로 적용합니다
https://setosa.io/ev/image-kernels/
다양한 차원에서의 Conv 연산이 가능
시퀀스 데이터
- 소리, 문자열, 주가 등의 데이터를 시퀀스(sequence) 데이터로 분류합니다.
시계열(time-series) 데이터는 시간 순서에 따라 나열된 데이터로 시퀀스 데이터에 속함.
- 독립동등분포(i.i.d) 가정을 잘 위배하기 때문에 순서를 바꾸거나 과거 정보에 손실이 발생하면 데이터의 확률분포도 바뀌게 됨.
- 과거 정보 또는 앞뒤 맥락 없이 미래를 예측하거나 문장을 완성하는 것이 불가능
시퀀스 데이터를 분석할 때 모든 과거 정보가 필요한 것이 아님.
truncation
잠재변수 H를 신경망을 통해 반복해서 사용하여 시퀀스 데이터의 패턴을 학습하는 모델이 RNN
시퀀스 길이가 길어지는 경우 BPTT를 통한 역전파 알고리즘의 계산이 불안정해지므로 길이를 끊는 것이 필요함.
이를 truncated BPTT라고 부름 (gradient vanishing problem)
LSTM, GRU etc