해당 포스트의 내용을 이해기 위해서는 머신러닝/딥러닝의 구현 원리의 기본은 이해하고 있어야합니다.
- 비용함수, 손실함수, 목적함수에 대한 정의를 계속해서 잊게된다.
- 머신러닝과 딥러닝 알고리즘은 상당히 간단해 보이지만 막상 스스로 구현하려고 하면 쉽지 않다는 것을 알 수 있다.
- 목적함수와 배치 사이즈에 대한 개념이 명확하지 않는다면 Gradient를 구하는 것이 어려울 수 밖에 없다.
- 순전히 내 경험은 그랬기 때문에 바로 잡기 위해서 이렇게 정리하기로 마음먹었다.
손실함수(Loss function, h(θ))
실제 y 값에 비해 가정한 모델 hθ 의 y^(=hθ(x))(추정값)이 얼마나 잘 예측했는지 판단하는 함수이다.
다음과 같은 식을 손실함수(Loss function)이라고 부른다.
- SE(Squared Error, 제곱 오차): (y−y^)2
- AE(Absolute Error, 절대 오차): ∣y−y^∣
- log loss : y⋅log(y^)+(1−y)⋅log(1−y^)
(* 하지만 logloss는 비용함수 형태로 더 많이 사용된다.)
이 값들은 주로 값의 수준에서 논하는 값이다. 모델을 학습할때 사용하는 데이터(관측치)는 하나의 값이 아닌 N개로 이루어져있다. 바로 다음에서 논할 비용함수(Cost function)은 이와 같은 손실함수의 평균으로 정의되고는 한다.
역전파 알고리즘을 구현할 때, 손실함수의 수준에서 연쇄법을 적용하면 조금 더 이해하기 쉽게 구현할 수 있다
비용함수(Cost function, J(θ)), 목적함수
머신러닝 알고리즘에서 최적화는 비용함수의 값이 가장 작아지는 최적의 파라미터를 찾는 과정을 말한다.
이를 달성하기 위해서, 경사하강법(Gradient Descent) 기반의 방식이 가장 기본이 되는 알고리즘이다.
- 목적함수란, 최적화 알고리즘에서 최대값 또는 최소값을 찾아야하는 함수를 말한다.
- 즉, 비용함수는 최적화 알고리즘의 목적함수이다. (편의를 위해서 비용함수로 통일하겠다.)
- 머신러닝/ 딥러닝은 한 번(1 epoch)에 학습 시킬 데이터의 크기(batch size)를 정한다. 한 번에 하나의 관측치를 사용하는 것이 아니기 때문에, 비용함수가 필요하다.
- 비용함수는 손실함수를 사용하여 정의될 수 있다.
J(θ)=N1⋅i=1∑NLossθ(yi,y^i)
다음과 같은 식을 비용함수로 사용한다.
-
MSE(Mean Squared Error, 평균 제곱 오차): N1∑i=1N(yi−y^i)2
-
MAE(Mean Absolute Error, 평균 절대 오차): N1∑i=1N∣yi−y^i∣
-
Binary Cross-entropy (a.k.a logloss) : −N1⋅∑i=1N(yi⋅log(y^i)+(1−yi)⋅log(1−y^i))
-
Multinomial-logloss : −N1⋅∑i=1N∑k=1K(yi,k⋅log(y^i,k)), K 개 범주
-
목적함수로 손실함수의 평균을 사용하거나 sum을 해주는 값을 사용하는 이유는?
- 알고리즘의 Vectorization 결과라고 할 수 있다.
- 하나의 관측치로 학습을 반복하는 것은 하드웨어적으로, 그리고 이론적으로 어려움에 빠질 수 있다.
- 따라서 전체 데이터(Full-batch) 또는 부분 데이터(mini-batch)를 한 번의 학습(1 epoch)에 사용한다.
- 이때, 모델의 가중치들이 어떤 결과를 나타내는지 하나의 충분 통계량이 필요하다. 그래서 평균을 사용해서 하나의 값으로 변형하는 것이다.
정리
- 하나의 관측치 단위로 모델이 학습할 때는, 목적함수로 손실함수를 사용한다. 그리고 가장 일반적인 경사하강법을 사용할 수 있다.
- mini-batch 또는 Full-batch 방식으로 학습할때는, 목적함수로 비용함수를 사용한다. 왜냐하면, 해당 배치의 결과를 하나로 압축해야하기 때문이다.
- 이게 우리가 SGD를 사용하는 이유와 크게 다르지 않다. 가까이서 보면 희극, 멀리서보면 비극인 상황을 기피하기 위해서라고 생각한다.
역전파 알고리즘 풀이 Tip
- 역전파 알고리즘을 직접 구하는것은 상당히 까다로운 문제이다.
- 하지만, 머신러닝/딥러닝 알고리즘을 정확하게 이해하고 구현하기 위해서는 꼭 알아야하는 부분이다.
- 간단한 예제
참조