Gradient Descent와 국소값(Local minimum) 문제에 대한 설명
# Gradient Descent(GD)에 대해서 쉽게 설명한다면? 왜 꼭 Gradient를 써야할까?
NN(Neural Network, 신경망)을 포함한 대부분의 머신러닝 문제는 학습 단계에서 최적의 parameter(가중치, bias)를 찾아낸다. 여기서 최적의 parameter란 'loss function이 최솟값이 될 때의' parameter 값. loss function이 일반적인 2차 함수이거나 별로 복잡하지 않은 함수라면, 함수가 최소인 지점에서 gradient(2차원 평면의 함수에선 접선의 기울기)가 0이라는 사실을 이용하여 최적의 parameter 값을 정확히, 단번에 찾을 수 있다. 이 같은 최적화 방법을 Least square 방식이라 하고, 단순, 다중, 다항 선형 회귀 모델에서 쓸 수 있다.
그러나 일반적인 문제에서의 loss function은 매우 복잡해 어느 지점이 최솟값이 되는지를 짐작하기 힘들고, 그렇기에 최적의 parameter도 찾기 힘들다. 이런 상황에서 'gradient'를 이용해 loss function이 최솟값을 갖게 하는 parameter를 찾는 방법이 Gradient Descent이다.
초기엔 가중치를 random하게 설정하고, 가중치 값에 대한 loss function의 gradient를 구한 후, 가중치를 gradient의 방향에 대해 '반대로' 갱신한다. gradient는 함수(물리량)가 가장 빠르게 증가하는 방향의 벡터이기 때문이다.
학습률, 즉 learning rate란 갱신하는 양이다. 즉, 가중치를 갱신하기 위해 한 번에 얼마나 학습할지를 나타내는 양이다(한 발자국 크기). learning rate는 학습하기 전에 미리 정해둬야 하는 값이다. 그 값이 너무 작으면 학습 속도가 느려지고, 너무 크면 loss function의 최솟값을 그냥 지나칠 수도 있다(발산).
# Gradient Descent를 더 쉽게 설명한다면?
더 쉽게 GD를 설명하자면, GD란 위 아래로 구불구불한 산길을 눈을 감고 지나면서 지금 밟고 있는 땅의 경사 방향을 토대로 가장 고도가 낮은 지점을 찾아나가는 것이다. 즉 "눈 감고 산 내려가기"
# GD 중에 때때로 loss가 증가하는 이유는?
실제로 사용되는 GD에서는 Local minimum을 피하기 위해 momentum등의 개념을 도입한 최적화(optimization)개념을 사용한다. 각 최적화 기법에 따라 그림과 같이 gradient가 양수인 방향으로, 다시 말해 loss function의 값이 증가하는 방향으로도 가중치가 갱신될 수 있으며, 이 경우 loss가 증가할 수 있다.
# Local minimum 문제에도 불구하고 딥러닝이 잘 되는 이유는? GD가 Local minimum 문제를 피하는 방법은?
원래는 loss function의 Gloabal minimum을 향해 가중치를 갱신해야 하지만, loss function의 Local minimum에 빠지는 문제가 발생할 수도 있다. 그럼에도 불구하고 momentum 개념등을 도입한 RMSProp, Adam 같은 다양한 Optimization 기법이 있기 때문에 Local minimum 문제를 어느 정도 피할 수 있다.
# 찾은 해가 Global minimum인지 아닌지 알 수 있는 방법은?
Global minimum이 정확히 어디에 존재하는지는 알 수 없다. 다만 학습에 사용하지 않은 test 데이터에 대한 성능을 평가하는 것으로 모델이 Global minimum에 가까운지 알 수 있다.