데이터 한 그릇

오차역전파 본문

딥러닝/밑바닥부터 시작하는 딥러닝

오차역전파

장사이언스 2022. 1. 7. 23:53

그래프가 굉장히 많은 파트로 책을 참조해서 보는게 훨씬 좋다.

 

오차역전파

수치 미분을 이용해서 가중치 매개변수의 값을 오차값이 가장 적게 수정하는 과정은 너무 시간이 많이 걸린다.

수치 미분의 과정은 다음과 같았다.

손실 함수 몇 가지(mse, cross_entropy_error)가 있다. x변수와 가중치 w값들을 모두 곱하고 바이어스를 더해서 활성화 함수에 넣어주면 출력 공식 y가 완성이 된다. 이 y를 mse(y), 혹은 cross_entropy_error(y) 로 만들어서 오류에 관련된 하나의 함수로 만들어준다.

이 오류에 대한 함수를 편미분하는 과정을 거치게 된다. 만일 입력 변수가 여러 개이면 x1의 매개변수 w1 에 대해서 편미분 할 수 있다. 만일 초기 w1 value가 있다면 앞서 구한 손실함수에 대해서 현재 w1 값일 때의 순간 기울기를 구한다. 즉 w1일 때의 오차 방향에 대해서 구한다. (w1에 대한 편미분을 통해서 진행). 만일 이 값이 -0.5 가 나왔다면 x1이 h변할 때, 0.5h 만큼 손실 함수 값이 줄어듬을 의미한다. 이 수가 음수이기 때문에 0으로 만들어 주기 위해서 양의 방향으로 기울기를 움직여준다.(learning_rate 만큼)

다른 가중치 매개변수에 대해서도 똑같은 과정을 반복해서 손실 함수를 기준으로 최적의 가중치 매개변수 값들을 찾는다.

이 방식으로도 기울기를 찾을 수 있지만 시간이 많이 걸리기 때문에 오차역전파 방법을 사용하면 된다.

<hr>

연쇄법칙

합성 함수란 여러 함수로 구성된 함수를 의미한다.

z = (x+y)^2 식은 두 가지 함수로 구분할 수 있다.

z = t^2

t = x+Y

이때 연쇄법칙이란 다음과 같다.

합성함수의 미분은 각 함수의 미분의 곱과 같다.

위의 합성함수 예를 든다면 aZ/aX = aZ/aT * aT/aX 가 되고 약분이 되어서aZ/aX = aZ/aX 가 된다.

이 연쇄법칙을 이용해서 역전파를 진행한다.

(그림으로 이해는 교재154 참고)

<HR>

역전파

앞서 연쇄법칙에 의해서 역전파가 이루어짐을 살펴봤는데 역전파도 연산의 종류에 따라서 그 방식이 공식화 되어있다.

덧셈 노드의 역전파

Z = X + Y

Z를 X에 대해서 미분 aZ/aX = 1

Z를 Y에 대해서 미분 aZ/aY = 1

X

-> + -> Z -> L

Y

위의 그림을

순서대로 역전파 공식을 적으면

aL/aZ -> aL/aZ * aZ/aX 이건 위의 계산을 대입하면 aL/aZ * 1이 된다. X에 대한 미분값과 Y에 대한 미분값을 구할 수 있다.

**덧셈 노드 역전파 공식은 연쇄법칙에 의해서 상류에서 흘러오는 값에다가 *1을 해주면 된다.**

곱셉 노드 역전파

Z =XY

편미분하면

aZ/aX = Y

aZ/aY = X

X

-> * -> Z -> L

Y

처음 역전파 값 -> aL/aZ

X역전파 값 -> Y * aL/aZ

Y역전파 값 - > X * aL/aZ

반대 입력값을 곱해주면 된다.

<HR>

활성화 함수 계층 구현하기

우리가 알고 있는 활성화 함수는 ReLU, 시그모이드, SOFTMAX 등등.

각각 공식이 있는데, 이 공식을 활용해서 계산 그래프를 그리면 교재에 나오는 그림들과 같다.

(ReLU,시그모이드,SOFTMAX 등등)

여기는 그림들 때문에 교재를 참조 하는게 훨씬 복습이 빠를 듯.

165PG부터 ~

<HR>

위의 오차 역전파 방법을 이용하면, 손실 함수 기준으로 가중치 매개변수 값들을 찾을 수 있다.(변수 기울기, 개선하기 전).

FORWARD 과정을 거쳐서 각 노드에 값들이 전달이 될 것.

계속 거쳐간 값들이 손실 함수 활성화 함수를 거치면, 손실 함수 식이 도출될 것.(계산을 하면 값이겠지)

노드간 이동된 FORWARD 데이터들과 연쇄법칙을 이용해서 역방향으로 계속 미분해 가다보면, 각 변수의 기울기를 구할 수 있음.

이 기울기는 현재 최적의 기울기가 아님.

오차를 줄이도록 learning_rate 를 곱하여 수정을 해야함.

수정한 이후에 다시 forward를 해서 나아가고 손실 함수 활성화 함수를 거쳐 손실 값 나옴. 이렇게 가중치 매개변수 값들이 수정됨.

 

'딥러닝 > 밑바닥부터 시작하는 딥러닝' 카테고리의 다른 글

합성곱 신경망(CNN)  (0) 2022.01.09
학습 관련 기술들  (0) 2022.01.08
신경망 학습  (0) 2022.01.07
신경망  (0) 2022.01.07
퍼셉트론  (0) 2022.01.07
Comments