신경망 Neural Network
- 비선형모델인 신경망(neural network)
- 선형 모델이 숨겨져있다
- 선형모델 + 비선형 함수의 결합
선형 모델
O
: outputX
: input dataW
: 가중치 행렬b
: y절편- 데이터가 바뀌면 결과값도 바뀐다
- 출력 벡터 차원은 $d$에서 $p$로 바뀐다
- $X$ (n x d) $\times$ W (d x p) → $O$ (n x p)
- $x_1 \Rightarrow o_1$ 화살표는 p개
softmax
$$
softmax(o) = (\frac{exp(o_1)}{\sum_{k=1}^{p}exp(o_k)}, ...,\frac{exp(o_p)}{\sum_{p}^{k=1}exp(o_k)})
$$
- 출력벡터 $o$에
softmax
함수를 합성하면 확률벡터가 되므로 특정 클래스 k에 속할 확률로 해석할 수 있다 softmax
함수는 모델의 출력을 확률로 해석할 수 있게 변환해주는 연산- 분류 문제를 풀 때 선형모델과
softmax
함수를 결합해 예측 softmax(o) = softmax(Wx + b)
softmax
함수를 통해 $\textbf{R}^p$에 있는 벡터를 확률벡터로 변환할 수 있다- 예시: [1, 2, 0] → [0.24, 0.67, 0.09]
import numpy as np
def softmax(vec):
# max 값 빼준다 -> overflow 방지
# max 빼주면, 값이 [-max ~ 0]을 가지게 되고, 이는 exp에서 0 ~ 1 사이 값을 뱉는다
denumerator = np.exp(vec - np.max(vec, axis=-1, keepdims=True))
numerator = np.sum(denumerator, axis=-1, keepdims=True)
val = denumerator / numerator
return val
vec = np.array([[1, 2, 0], [-1, 0, 1], [-10, 0, 10]])
softmax(vec)
'''
array([[2.44728471e-01, 6.65240956e-01, 9.00305732e-02],
[9.00305732e-02, 2.44728471e-01, 6.65240956e-01],
[2.06106005e-09, 4.53978686e-05, 9.99954600e-01]])
'''
- 추론을 할 때는 one-hot vector로 최대값을 가진 주소만 1로 출력하는 연산을 사용하기 때문에 softmax 사용하지 않는다
one_hot(softmax(o))
- 사용안함,one_hot(o)
로 사용한다
Activation function
- 신경망은 선형모델과 활성함수(activation function)를 합성한 함수
- activation function은 비선형 함수
- 활성함수 적용할 때 다른 주소의 출력값을 고려하지 않고, 각각의 값에 적용된다 (≠ softmax)
$$
H = (\sigma(z_1), ..., \sigma(z_n)) \quad \quad \sigma(z) = \sigma(Wx + b)
$$
- 활성함수 $\sigma$는 비선형함수로 잠재벡터 $z = (z_1, ..., z_q)$의 각 노드에 개별적으로 적용해 새로운 잠재벡터(hidden vector) $H = (\sigma(z_1), ..., \sigma(z_n))$를 만든다
- 활성함수는 $\textbf{R}$ 위에 정의된 비선형(nonlinear) 함수로서 딥러닝에서 매우 중요한 개념
- 활성함수를 쓰지 않으면 딥러닝은 선형모형과 차이가 없다
sigmoid
함수나tanh
함수는 전통적으로 많이 쓰이던 함수지만, 딥러닝에서는ReLU
함수를 많이 쓰고 있다- [상식]
tanh
미분을hyperbolic tanh
이라고 한다
2-layer neural network
- 가중치 행렬이 2개
- 잠재벡터 $H$에서 가중치 행렬 $W^{(2)}$와 $b^{(2)}$를 통해 다시 한 번 선형변환해서 출력하게 되면, $(W^{(2)}, W^{(1)})$를 parameter로 가진 2-layer 신경망이다
multi-layer perceptron (MLP)
- 신경망이 여러층 합성된 함수
- 딥러닝의 기본적인 모형
forward propagation
순전파- 학습하는 것이 아니다
- 주어진 입력 왔을 때 출력을 내뱉는 과정
층을 여러개 쌓는 이유
- 이론적으로는 2-layer network로도 임의의 연속 함수 근사 가능
- 이를 universal approximation theorem이라고 부른다
- 그러나 층이 깊을수록 목적함수를 근사하는데 필요한 뉴런(노드)의 숫자가 훨씬 빨리 줄어들어 좀 더 효율적으로 학습 가능하다
- 층이 깊으면 복잡한 함수도 근사 가능하다 하지만 최적화가 쉬운 것은 아니다
- deep network → 적은 뉴런, 노드로도 복잡한 패턴 표현 가능하다
- 층이 얇으면 필요한 뉴런의 숫자가 기하급수적으로 늘어서 넓은(wide) 신경망이 되어야한다
- 예를 들면, VGG 같은 경우?
- 3x3x3 = 27이 7x7 = 49보다 작다!
Backpropagation
- 딥러닝은 역전파(backpropagation) 알고리즘을 이용해 각 층에 사용된 파라미터를 학습한다
$$
{W^{(l)},b^{(l)}}_{l=1}^L
$$
- 손실함수를 $L$이라 했을 때 역전파는 $\sigma L/\sigma W ^{(l)}$ 정보 계산할 때 사용된다 (손실함수에 대한 미분)
- 각 층 파라미터의 gradient vector는 윗층부터 역순으로 계산
Chain Rule
- 역전파 알고리즘은 합성함수 미분법인 연쇄법칙
chain-rule
기반 자동 미분auto-differentiation
사용 chain-rule
이란?- $$
z = (x+y)^2
\
w = x+y
\
\frac{\partial z}{\partial x} = \frac{\partial z}{\partial w} \frac{\partial w}{\partial x}
$$ - 각 노드의 tensor 값 컴퓨터가 기억해야 미분 계산 가능하다
- 메모리 많이 사용한다
예제: 2-layer neural network
'부스트캠프 AI Tech > AI_Math' 카테고리의 다른 글
[07] 통계학 (0) | 2022.01.17 |
---|---|
[06] 확률론 (0) | 2022.01.16 |
[04] 확률적 경사하강법 SGD (0) | 2022.01.15 |
[03] 경사하강법 (0) | 2022.01.15 |
[02] 행렬 (0) | 2022.01.15 |