[밑바닥부터 시작하는 딥러닝1] 02. 순전파 및 역전파

권유진·2022년 1월 1일
0

신경망 학습

훈련데이터로부터 매개변수의 최적값을 자동으로 획득
      \;\;\; \rarr 자동으로 학습할 때 손실함수(Loss)를 지표로 사용!
            \;\;\;\;\;\; \rarr 손실함수를 최소화하는 매개변수를 찾는다.
                  \;\;\;\;\;\;\;\;\; \rarr 미분, 기울기 이용

손실함수

  1. 오차제곱합(SSE; Sum of Squared Error)
    E=12Σk=1n(yktk)2E = \cfrac{1}{2}\Sigma_{k=1}^{n}{(y_k-t_k)^2}
  2. 교차엔트로피(CEE; Cross-Entropy Error)
    E=Σk=1ntkloge(yk+C)E = -\Sigma_{k=1}^{n}{t_k\log_e{(y_k+C)}}
  • 실제로 정답일 때의 예측값의 자연로그 계산(tk=1t_k=1)
  • 정답일 때의 출력이 전체 값을 정함
  • yk=0y_k=0이면 EEinf-\inf이므로 loge\log_e에 C를 더해줌

Gradient Update

  1. Batch Gradient Descent
    모든 학습 데이터를 사용하여 Graident 계산 및 Update
  2. Stochastic Gradient Descent
    한 개의 학습 데이터를 사용하여 Gradient 계산 및 Update
  3. Mini-batch Gradient Descent
    모든 학습 데이터를 Mini-batch로 쪼개어 한 번의 Gradient 계산 및 Update에 한 개의 Mini-batch 사용

\therefore 속도와 최소값의 수렴을 고려하여 미니배치 경사하강법 채택

  • 각 미니배치별 손실함수 = 각 데이터의 손실함수 평균

    SSE=12NΣnΣk(ynktnk)2CEE=1NΣnΣk(tnklogeynk)SSE = -\cfrac{1}{2N}\Sigma_n\Sigma_k{(y_{nk}-t_{nk})^2}\\ CEE = -\cfrac{1}{N}\Sigma_n\Sigma_k{(-t_{nk}\log_e{y_{nk}})}
  • 정확도를 손실함수로 사용하지 않는 이유

    • 매개변수의 미분값이 대부분의 장소에서 0이기 때문
    • 정확도 개선 시 불연속적으로 개선 ex)  333435ex)\; 33 \rarr 34 \rarr 35
    • 계단 함수를 활성화 함수로 사용하지 않는 이유 중 하나
    • 시그모이드 함수는 어디에서도 기울기가 0이 아니기에 적합
      • Gradient Vanishing 문제 보유하고 있긴 함

경사하강법

기울기를 잘 이용해 함수의 최소값을 찾아가는 방법

  • 현 위치에서 기울기를 구해 기울어진 방향으로 일정 거리만큼 이동하기를 반복
    xt=xt1ηx0ft1x_t = x_{t-1} - \eta \cfrac{\partial}{\partial x_0}f_{t-1}
  • 기울기(경사): 모든 변수의 편미분을 벡터로 정리한 것(수치미분을 이용하여 계산)
    • 기울기가 0이라고 최소값인 것은 아니다. (\because 극소점, 안장점)
    • 기울기는 수치미분을 통해 구하는 것은 단순하지만 시간이 오래걸린다.
      • 이를 개선하여 오차역전파법 사용

순전파(Forward Propagation)

  • 올바른 순서대로 학습을 진행
  • 최초 입력값으로부터 각 층마다 존재하는 가중치와 연산하고 활성화 함수를 통과하는 과정을 순서대로 이어나가 최종 layer까지 계산한 후 실제 label과 오차를 계산하는 것

역전파(Backward Propagation)

  • 반대 방향으로 학습을 진행

  • 순전파에서 계산한 오차를 기반으로 기울기를 사용하여 가중치 업데이트를 위해 시행

  • 신호 E에 극소적 미분 yx\cfrac{\partial y}{\partial x}를 곱해 다음 노드로 전달

    • 중첩 시, 연쇄법칙(Chain rule)과 같아짐

(1) 덧셈 노드의 역전파

z=x+yzx=1zy=1z = x+y \\ \cfrac{\partial{z}}{\partial{x}} = 1 \\ \cfrac{\partial{z}}{\partial{y}} = 1

역전파 시, 입력된 값 그대로 출력

(2) 곱셈 노드의 역전파

z=xyzx=yzy=xz = xy \\ \cfrac{\partial{z}}{\partial{x}} = y \\ \cfrac{\partial{z}}{\partial{y}} = x

입력된 신호의 서로 바꾼 값 출력

오차역전파법 사용하여 활성화 함수 구현
(1) ReLU
y={x,  if(x>0)0,  if(x<=0)y = \begin{cases} x, \;if \,(x>0)\\ 0, \; if \,(x<=0) \end{cases}
yx={1,  if(x>0)0,  if(x<=0)\cfrac{\partial y}{\partial x} = \begin{cases} 1, \;if \,(x>0)\\ 0, \; if \,(x<=0) \end{cases}
(2) Sigmoid
Lyy2ex=Ly(11+ex)2ex=Ly11+exex1+ex=Lyy(y)\cfrac{\partial L}{\partial y}y^2e^{-x} = \cfrac{\partial L}{\partial y}(\cfrac{1}{1+e^{-x}})^2e^{-x}\\ = \cfrac{\partial L}{\partial y}\cfrac{1}{1+e^{-x}}\cfrac{e^{-x}}{1+e^{-x}}\\ = \cfrac{\partial L}{\partial y}y(-y)
(3) Affine: 신경망의 순전파 때 사용하는 행렬곱
미니배치 단위로 계산할 때, 형상(shape)은 X = (n,x), Y = (n,y)

(4) Softmax with CEE
(y-t) 형태 = 현재 출력과 정답 레이블의 오차 그대로 드러냄
	-> 앞 계층들은 이를 통해 큰 깨달음 얻음
항등함수 SSE 조합도 (y-t) 형태로 나옴
	-> Softmax&CEE, 항등함수&SSE 사용하는 이유
    

실제 신경망 예시

참고
밑바닥부터 시작하는 딥러닝 <사이토 고키>

profile
데이터사이언스를 공부하는 권유진입니다.

0개의 댓글