[딥러닝] 과적합, 오차 역전파, 경사하강법
에 이어 Gradient descent
에 대해 조금 더 자세히 다뤄보고자 한다.
주어진 함수의 최소 값을 찾아 나가는 iterative한 1차 Optimization 알고리즘
Optimization refers to the task of either minimizing or maximizing some function f(x) by altering x.
parameter
(여기선 )값을 변경하여 함수 를 최소화 및 최대화 하는 것을 의미함
보통은 minimizing(최소화)
측면에서 Optimization을 함!
( 최대화 하고싶으면 그냥 앞에 -
붙이면 되니까~ )
최소화 하고자 하는 함수 (여기선 )를
-> objective function
(목적함수)
(cost function
, loss function
, error function
라고도 함)
(이미지 출처: Deep Learning Book by Ian GoodFellow)
기울기(Gradient)의 반대(descent)로 움직인다.
그래서Gradient descent
이다.
그냥 도함수()를 구해 0이 되는 점을 찾으면 간단하지 않을까 생각할 수 있다.
그치만 현실세계에선 그렇지 않다.
아래로 볼록한 함수이다!
Covex
함수의 경우
그러나 현실 세계는 Non-convex
함수에 가깝다.
위에서 언급한 현실세계를 반영하기 위해서는
기울기 기반의 최적화 방법을 사용하는 것이 좋다.
미분계수를 계산하는 과정을 컴퓨터 구현하는 것보다 gradient descent는 더 쉽게 구현 가능함
데이터의 양이 매우 많은 경우 gradient descent와 같은 반복적인 방법을 통해 해를 구하면 계산량 측면에서 더 효율적임!
현재 값 를 통해 다음 값 를 갱신하고자 할 때,
우리가 최소화 해야할 함수는 딥러닝에서 Loss Function
이라고 볼 수 있다.
Loss 함수는 내가 학습해서 나온 결과와 정답 결과의 차이를 나타내는 함수이다.
RMSE (Root Mean Squared Error)
Crossentropy
등이 있다.
아래와 같은 손글씨 숫자 사진이 있다고 해보자.
사람 눈으로 보면 당연히 5라고 쉽게 판단한다.
그런데 컴퓨터에 학습시키기 위해서는 한 pixel씩 뜯어봐야 한다.
여기서는 그렇게 중요한게 아니므로, 뭐 이리저리 하나씩 잘 뜯어가지고 학습 시킨다고 하자.
그러면 예측한 결과 데이터는 0~9까지의 숫자인 10개의 class로 분류될 것이다.
그것을 프로그래밍적으로 나타내고자 한다면,
0 0 0 0 0 1 0 0 0 0
일것이고0.2 0.3 0.1 0.2 0.1 0.99 0.1 0.1 0 0
위의 Loss함수 중 MSE를 사용한다고 했을 때 아래와 같을 것이다.
그리고 우리가 최소화 하고자 하는 그 손실 함수는 바로 이 값이다!
정답과의 차이를 줄여보자는거지~
가중치(weight)를 갱신하면서 줄이는 것이다.
즉, 위에서 언급한 식을 가중치()에 활용한다.
여기서 는 Loss함수를 의미하고,
의 값에 따른 Loss함수의 값을 줄이기 위해 최적화 된 를 찾는 것이다.
는 딥러닝에서 Learning rate
를 의미한다.
즉, 얼마나 이 기울기에 비중을 둘 것인가...
즉, 이 그래프의 y축은 Loss함수고, x축이 weight라고 생각하면 된다.
그리고 이 기울기를 구하기 위해 미분의 chain rule이 사용될 수 있다.
여기서 자세하게 다루진 않겠다.
이제 Gradient descent에서 어느정도 이해가 갔을 것이다.
training set이 엄청 많을텐데, 어떤 기울기를 이용해 갱신을 할 것인가에 따라 크게 3가지로 나뉜다.
training set 전체를 통해 구하는 방법
랜덤하게 하나만 뽑아서 구하자!
일정한 갯수만 뽑아서 계산하자!
아 이정도면 진쨔 자세히 썼다!