이번 블로그에서는 복잡한 neural network system에서 gradient를 게산하는 방식인 backpropagation에 대해서 알아보려고 합니다.
머신러닝, 딥러닝을 접하게 된다면 gradient 와 backpropagation에 대해 많이 들을 것입니다. 어려운 개념이지만 아래의 내용들을 통해 이해가 되길 바랍니다.
*Gradients를 구하는 방식
Very tedious
Change loss
use scratch
Not modular
Not feasible on complex models
모델에서 이뤄지는 계산들을 그래프의 형태로 나타낸 것입니다.
위의 그림은 linear classifier model의 loss를 계산하는 과정이고 파트별로 나눠서 graph로 나타낸 것입니다.
*파트별: hypothesis function, loss function, regularization term
강의에서도 말했지만, 단순한 구조에서는 엄청나게 이득이 보이지 않을지라도 모델이 커지고 복잡해지면 이 방식을 유용하게 사용할 겁니다.
Deep network로 많은 layer쌓기와 computational graph를 이용한 계산과정을 통해 모델을 구조화 한 것입니다.
출력층에서 입력층 방향으로 계산하면서 가중치를 업데이트하는 알고리즘입니다.
그러면 이제 예시를 통해 과정을 설명합니다.
1-1) 순방향: compute output
computational graph로 input 값을 계산하여 output 값을 나오게 합니다.
1-2) 역전 방향: Compute derivatives
output부터 inpute까지의 모든 노드를 편미분하여 upstream gradient 만들기
Chain rule이용하여 local gradien만들기
Upstream gradient 곱하기
상위의 노드 gradient 계산하기
즉, input의 gradient를 게산하는 과정
1-3) 그림으로 정리
logistic classifier함수를 computational graph로 나타냄
forward pass를 통해 output게산
backward pass 이용
*sigmoid는 미분의 형태가 간단하여 효율적으로 gradient를 계산
computational graph는 특정 gate의 역할입니다.
4-1) Vector derivative
*입력값과 출력값이 벡터인지 스칼라인지, 그리고 차원에 따라 도함수 형태를 보여줌.
입력값과 출력값이 scalar이면, 미분값도 scalar
입력값이 n차원 vector이고 출력값이 scalar이면, 미분값은 n차원 vector이다.(gradient)
입력값이 n차원 vector이고 출력값이 m차원이면, 미분값은 n x m vector이다.(Jacobian matrix)
4-2) 그림으로 보는 backprop with vectors
기본 조건
input x: x- dim vector
input y: y- dim vector
input z: z- dim vector
output: vector
loss: scalar
upstream gradient
local gradient
downstream gradient
위의 과정과 같은 형태로 x,y,z가 matrix여도 backprop과정을 보입니다.
이상으로 기본적인 backpropagation에 대한 전반적인 내용을 배우게 되었답니다.