[AI Math] 딥러닝 학습방법

hyunsooo·2022년 9월 23일
0

이번시간에는 신경망에 대해서 알아보는 시간이다.

  • 신경망은 기본적으로 비선형 모델이다.

  • 선형모델에 대한 수식을 다시 살펴보면 아래와 같다.

[x1x2:xn][w11w12...w1pw21w22...w2p::::wd1wd2...wdp]+[b1b2b3bp]=[o1o2:on]\begin{bmatrix} -x_1-\\ -x_2-\\ :\\ -x_n- \end{bmatrix} \begin{bmatrix} w_{11}&w_{12}&...&w_{1p}\\ w_{21}&w_{22}&...&w_{2p}\\ :&:&:&:\\ w_{d1}&w_{d2}&...&w_{dp} \end{bmatrix} + \begin{bmatrix} b_1&b_2&b_3&\dots&b_p \\ \end{bmatrix} = \begin{bmatrix} -o_1-\\ -o_2-\\ :\\ -o_n- \end{bmatrix}
  • 입력 데이터 XX행렬, 다른 차원으로 표현하도록 하는 연산자 WW행렬과 편향 BB로 이루어져 있다.

softmax

softmax(Wx+b)=(exp(Wxi+bi)k=1pexp(Wxk+bk))softmax(Wx+b) = (\frac{exp(Wx_i+b_i)}{\sum_{k=1}^p exp(Wx_k+b_k)})
  • 소프트맥스 함수는 모델의 출력을 확률로 해석할 수 있게 변환해준다.
denumerator = np.exp(vec - np.max(vec, axis=-1, keepdims=True))

numerator = np.sum(denumerator, axis=-1, keepdims=True)

val = denumerator / numerator

return val
  • numpy로 구현 시 분자에 np.max연산이 있는데 오버플로우 현상을 방지하기 위해 max값을 빼주게 된다.

  • 추론을 하는 경우 가장 큰 값(원-핫벡터)만 필요하기 때문에 소프트맥스를 사용하지 않는다.

  • 보통 softmax는 분류문제에서 사용할 수 있다.

  • 신경망은 이처럼 선형모델과 비선형함수인 활성함수(activation function)을 합성한 함수이다.

활성함수

  • 활성함수는 실수값을 입력값으로 받아서 출력도 실수값으로 나오는 함수이다.

  • 신경망에 활성함수를 사용하지 않으면 선형모델과 같다.

활성함수 종류

  • sigmoid
σ(x)=11+ex\sigma(x) = \frac{1}{1+e^{-x}}
  • tanh
tanh(x)=exexex+extanh(x) = \frac{e^x-e^{-x}}{e^x+e^{-x}}
  • ReLU
ReLU(x)=max{0,x}ReLU(x) = max\{0,x\}

활성함수를 적용한 신경망

z=Wx+bσ(z)=σ(W(1)x+b(1))H=(σ(z1),...,σ(zn))O=HW(2)+b(2)z = Wx + b\\ \sigma(z) = \sigma(W^{(1)}x+b^{(1)})\\ H=(\sigma(z_1),...,\sigma(z_n))\\ O = HW^{(2)} + b^{(2)}
  • 위와 같이 활성함수를 적용한 HHW(2)W^{(2)}를 통해 다시 선형변환을 하게 되는 구조를 2개의 layer를 가진다는 의미로 2층 신경망이라 한다.

층을 여러개 쌓는 이유

  • 이론적으로 2층 신경망으로도 임의의 연속함수를 근사할 수 있다.(universal approximation theorem)

  • 위는 이론적으로는 보장해주지만 실제론 무리가 있다.

  • 층을 깊게 쌓을수록 목적함수를 근사하는데 필요한 뉴런(노드)의 숫자가 빨리 줄어들어 좀 더 효율적으로 학습이 가능하다.

  • 층이 얇으면 한 층에 필요한 뉴런의 숫자가 기하급수적으로 늘어나 넓은(wide) 신경망이 되어야 한다.

  • 주의할것은 층이 깊다고해서 최적화가 잘된다는 것은 아니다.

역전파(backpropagation)

위에서 설명한 흐름은 순전파(forward)라고 표현하기도 한다.

  • 딥러닝은 역전파 알고리즘을 통해 각 층(layer)에 사용된 파라미터(W,bW,b)를 학습한다.

  • 딥러닝 모델은 비선형모델이기 때문에 한층씩 역전파 알고리즘을 적용해야 한다.

  • 역전파 알고리즘은 출력층부터 입력층으로 흐름이 역순으로 계산되기 때문에 역전파라고 부른다.

역전파의 원리

  • 역전파 알고리즘은 합성함수 미분법인 연쇄법칙(chain-rule) 기반을 사용한다.
z=(x+y)2w=x+yz=w2z = (x+y)^2\\ w = x+y\\ z = w^2\\
zx=zwwx=2w1=2(x+y)\frac{\partial z}{\partial x} = \frac{\partial z}{\partial w} \frac{\partial w}{\partial x} = 2w \cdot 1 = 2(x+y)
  • 신경망에서는 아래와 같이 계산할 수 있다.
W(1)L=(W(1)z)(zh)(ho)(oL)\nabla_{W_{(1)}}\mathcal{L} = (\nabla_{W_{(1)}}z)(\nabla_zh)(\nabla_ho)(\nabla_o\mathcal{L})

LWij(1)=l,r,kLololhrhrzkzkWij(1)\frac{\partial\mathcal{L}}{\partial W_{ij}^{(1)}}= \sum_{l,r,k} \frac{\partial\mathcal{L}}{\partial o_l} \frac{\partial\mathcal{o_l}}{\partial h_r} \frac{\partial\mathcal{h_r}}{\partial z_k} \frac{\partial\mathcal{z_k}}{\partial W_{ij}^{(1)}}
  • 역전파는 순전파와 달리 미분값을 저장해야하기 때문에 메모리 측면에서 더 많은 메모리를 요구한다.
profile
지식 공유

0개의 댓글