Reference
https://iai.postech.ac.kr/teaching/machine-learning
https://iai.postech.ac.kr/teaching/deep-learning
위 링크의 강의 내용에 기반하여 중요하거나 이해가 어려웠던 부분들을 정리하여 작성하였고,
모든 강의 슬라이드의 인용은 저작권자의 허가를 받았습니다.
또한, 모든 내용은 아래 Notion에서 더 편하게 확인하실 수 있습니다.
>>노션 링크<<
Keywords
- Optimization
- Loss Function, Gradient Descent
- Backpropagation
Training(Fitting) ANN: Optimization
Neural Network를 training하는 과정
⇒ MLP 구조의 weight, bias들을 training data로부터 learn(estimate)하겠다.
이러한 Optimization의 관점에서 바라보았을 때, 3가지 정의해야 할 부분이,
Objective function / decision variable: weight (and bias) / constraint 이다.
그냥 간단하게 말해서, 앞에서 했던 것과 동일하게 $f(\omega)$를 minimize하겠다는 것이다.
여기에서 objective function인 $f$와 unknown인 $\omega$는 당연히 우리가 정의해줘야 하는 것이고.
(+ $\omega$에 대한 constraint는 일반적으로 ANN에서 존재하지 않는다. 마지막 줄에서 constraint에 대한 것이 없는 이유가 그것.)
ANN에서는 그러한 Objective Function을 Loss Function(Cost Function)이라고 할 것이며,
여기서 Loss Function은 target value(원래의 y, output값)과 prediction(예측된 y, output값) 사이의 error를 측정하는 함수이다.
결국 그러한 Loss Function을 minimize하는 것이 목적.
위에서 볼 수 있듯, Squared loss와 Cross entropy라는 Loss Function의 예시를 이미 학습하였다.
두 경우 모두, $y^{(i)}$와 $h_\omega(x^{(i)})=\hat{y}^{(i)}$ → target value와 prediction 사이의 error를 어떻게 정의하는 지만 달라질 뿐이고, 둘 사이의 error를 측정하여 그것을 minimize한다는 것은 같다.
그리고 NN을 training, Optimizing 하는 방법으로는, Gradient Descent를 이용할 것.
앞에서 이미 학습했으므로 따로 언급하지 않겠다.
ANN에서의 Gradient Descent에 대해 생각해 보자면,
모든 weight에 대한 Gradient ($\frac{\partial l}{\partial \omega}$)를 계산하여 하나하나 update를 해나가면, 연산량이 너무 많아짐.
→ training에 걸리는 시간이 너무 길어진다!
따라서, ANN의 구조적인 특징들을 이용하여 이를 효율적으로 계산할 것이다. (Back Propagation!)
우선 layer들이 중첩되는 과정에서 이것이 결국 함수들의 합성과 같은 역할을 한다. (ANN의 각 층은 이전 층의 출력을 입력으로 받아 변환하는 함수로 볼 수 있다. 이에 의해 ANN은 여러 층의 뉴런들이 연결된 합성 함수 형태로 볼 수 있다는 것!)
따라서 weight들이 모두 독립적이지 않으며, 각 구성 요소(layer)가 미분가능하므로 Chain rule을 적용할 수 있다.
여기서 미분가능하다는 것에 대해, 이전 장들에서 activation function을 step function에서 sigmoid(tanh, ReLU)로 변경했던 것을 상기하자. 변경한 이유에는 여기서 Chain Rule을 적용하기 위함(Gradient를 계산하기 위함)도 포함되어 있다.
Backpropagation
Forward Propagation (순전파):
initial information (input data, x)로부터, Network의 각각의 layer (hidden unit)에 전파되어, output을 만들어내는 것.
간단히 말해, 이미 Network는 구성되었고, weight, bias가 결정된 상태에서, input data를 집어넣고 Network를 따라 쭉 계산하여 output을 도출하는 것!
Backpropagation (역전파):
Backpropagation은 반대로, 마지막 prediction(output)을 통해 loss(cost)를 계산하여, 그 loss(cost)로부터 network를 반대로 거슬러가 gradient를 계산하는 것.
이 글 자체가 필자 자신의 이해를 돕고, 정리하기 위한 글이므로, 이미 잘 알고 있는 Chain Rule에 대해서는 따로 여기서 정리하지 않겠다.
이 게시글을 보는 사람들 중 Chain Rule에 대해 잘 모르는 사람이 있다면, 다른 더 잘 정리된 자료가 많을 것.
좌측의 식 및 우측의 그림을 보면 알 수 있듯이 Neural Network의 각 layer들 자체가 함수들의 합성이므로,
Chain Rule을 통해 각 Layer에서의 Input, Output에 대한 Gradient를 계산하여 이를 product하면, 최종적으로 맨 처음 input과 마지막 loss에 대한 Gradient를 얻을 수 있음을 알 수 있다.