AI/Machine Learning
Neural Networks - Cost function / Back propagation
Linuxias
2018. 2. 5. 18:21
Neural Networks
: Cost function & Back Propagation
아래 내용은 Andrew Ng 교수님의 강의와 자료를 기반으로 학습한 내용을 정리하여 작성하였습니다.
개인의 학습 내용이기에 잘못 해석 및 이해하고 있는 부분도 있을 수 있으니, 다양한 자료를 기반으로 참고하시는 걸 추천드립니다.
지난 글까지 Neural Networks의 Model과 간단한 예제들을 확인해 보았습니다. 이번 글에서는 Neural networks의 Cost function과 오차를 줄이기 위한 방법인 BackPropagation에 대해 알아보겠습니다.
Cost function은 앞서 Linear regression과 Logistic regression에서 그 개념을 살펴보았습니다. 우리가 만든 Model, 즉 hypothesis function이 입력에 대해 원하는 출력을 얼마나 정확하게 나타낼 수 있는지 오차를 표현하는 함수로서 Model이 얼마나 잘 표현되어 있는지를 나타내는 함수였습니다.
Cost function을 알아보기 전에 용어에 대해서 먼저 정리하고 가시죠. 위와 같이 Neural networks가 있을 때 L은 Neural network의 layer의 전체 수이며, sl(l = 1, 2, ... n) 은 Layer l에서 bias를 제외한 전체 unit의 수 입니다. 이 정도는 쉽게 이해 되시죠?
자 이제 Cost function을 보시죠. 아래 Logistic regression과 Neural network의 Cost function이 있습니다. 뭔가 두 Model의 cost function이 비슷해 보이기는 한데, Neural network가 확실히 복잡해 보이긴 합니다. Cost function이 실제 Training data의 출력과 해당 model에서 구해진 출력과 비교한 값의 차이를 보여주는 것입니다.
정확한 수식의 이해는 나중에 기회가 된다면 설명드릴게요, 의미를 알면 좋긴하지만 지금은 일단 Cost function이 이런 형태란 것을 알고가는걸로 만족합시다.
Cost function은 앞서 Linear regression과 Logistic regression에서 그 개념을 살펴보았습니다. 우리가 만든 Model, Learning algorithm이 제대로 동작하기 위해서 우리는 Cost function이 최소화가 되도록 계속해서 반복해 왔습니다. 이번에도 마찬가지로 Cost function이 최소가 되도록 하는 방법에 대해 알아보겠습니다. 앞에서 Cost function을 정의 했었습니다. J를 최소화 하는게 저희가 목표이고, J를 최소화 하기위해선 J와 J를 theta에 대해 편미분한 수식이 필요합니다. 어떻게 정의해야 할까요?
먼저 J를 구하기 위해서는 Forward propagation을 이용합니다. Forward propagation은 Input layer부터 Output layer 방향으로 진행하는 방식으로, 입력으로 제공된 Training data를 이용해서 Cost function을 구할 수 있습니다. 아래와 같이 한 layer 씩 계산해 나아가는 것 입니다. Log 함수를 이용하는 방법은 Logistic regression에서 한번 언급하였습니다. 위의 Cost function은 Non-convex 형태이기에 Convex형태로 만들어 주기 위해 Log 함수를 사용합니다.
그럼 Cost function은 구했으니, Cost function의 편미분을 계산해야 합니다. 이 계산을 위한 방법이 Back propagation으로 한국어로는 역전오류파 라고도 많이 불리고 있습니다. 실제로 이 수식을 이해하기에는 굉장히 어려움이 있을 수 있습니다. 위에서 마지막으로 얻은 a(4)와 실제 training data의 y의 차이를 delta(4)라고 합시다. 그럼 이 delta(4)는 순수하게 결과에 대한 오차란 걸 알 수 있습니다. Neural network을 통해 구해진 결과가 우리는 y이길 원하닌까요. 처음 시작은 여기서 부터입니다. 이 a(4)를 이용해 delta(3) 즉 Layer 3의 오차를 구하고 동일한 방법으로 delta(3)를 이용하여 Layer 2의 오차 delta(2)를 구하게 되는 것이죠.
위에서 delta(4)는 a(4) - y로 표기된 것이 실제 오차이며 그 아래 delta(3), delta(2)가 각 Layer에 대한 오차를 구하는 수식입니다. 흠, 수학적으로 이해하기는 조금 어려운 면이 있긴합니다. 여기선 이렇게 되는구나 정도만 알고 지나가도록 하죠. 그럼 정리해서 Forward propagation은 Input layer -> Output layer 방향으로 연산하였다면, Back propagation은 Output layer -> Input layer 방향으로 진행하여 계산하게 됩니다.
이번 글에서는 여기까지 확인해보고, Neural Network의 추가적인 내용들은 추후에 보완하도록 하겠습니다.