시작하기에 앞서 본 글은 www.youtube.com/watch?v=573EZkzfnZ0에서 참고하였음을 밝힙니다.
이 글은 편미분을 알고 있다는 가정하에 설명된 글입니다.
Backpropagation (오차 역전파)는 인공신경망에서 노드들의 가중치를 update 하기 위해 사용하는 알고리즘이다.
진행방향이 왼쪽에서 오른쪽 즉, input layer에서 output layer까지 도달하는 과정을 forward propagation (순전파)라고 한다.
그와 반대로 오른쪽에서 왼쪽, output layer에서 input layer로 오는 과정을 backpropagation 혹은 backward propagation (역전파)라고 한다.
여기서 오차 역전파는 당연히 output layer에서 input layer 쪽으로 오는 과정 중에 가중치를 업데이트하는 것이다.
설명하기 쉽도록 예를 들어 설명할 것이다. 간단한 인공신경망을 수식으로 나타내어. f(x) = g(x) + b, g(x) = wx라고 하자. 그림으로 나타내면 다음과 같다.
오차역전파에서 구하고자 하는것은 df/dw, df/db 이다.
이 점을 기억해두고, forward propagation 을 진행한다.
w = 2, x = 1, b = 3 이라고 예를 들어 forward propagation 을 해보자. 이 과정에서는 편미분도 미리 해두어야 한다.
forward propagation 을 하여 편미분을 미리 해두었다.
이 과정에서 미리 편미분을 한 이유는, 위에서 설명한 df/dw 와 df/db 를 알기 위해서이다. 자, 이제 우리가 궁극적으로 알고 싶어하는 df/dw, df/db 를 알게되는 과정을 할 것인데. 이 과정에서는 chain rule 을 이용한다.
chain rule 이란
복합함수의 미분을 계산하는 과정이다.
우리는 forward propagation 에서 편미분을 미리 했기 때문에 dg/dw 와 df/dg 를 알고 있다. 여기서 dg/dw 와 df/dg 를 곱하여 df/dw 를 알 수 있는 것이다!
그렇게 우리는 backpropagation 과정에서 chain rule 을 이용하여 df/dw 와 df/db 를 알 수 있다.
dg/dw * df/dg = df/dw = 1 * 1 = 1.
df/db = 1.
이렇게 df/dw 와 df/db 를 구하였다. 이 편미분값이 의미하는 바는, df/dw 를 예로 들면 w 가 n 만큼 변하였을 때 f 는 df/dw * n 만큼 변화한다는 얘기이다.