[CS231n 정리] Lecture 3_2 - Optimization
Optimization
저번 글에서는 W값이 얼마나 잘되고 잘못되어 있는지에 대해서 loss function으로 확인하는 방법에 대해서 배웠습니다.
이제 얼마나 잘못 되었는지 알았다면 가장 좋은 W값으로 어떻게 찾아갈지에 대해서 다루는 Optimization에 대해서 알아보겠습니다.
Optimization은 산에서 골짜기를 내려는 것과 같습니다. 좋은 위치로 내려가는 것입니다.
즉 loss가 0인 지점으로 찾아 내려가는 것입니다.
그중 하나로 Random search (임의 탐색)이 있습니다.
말 그대로 아무 기준 없이 랜덤으로 weight 값을 변경해보며 가장 좋은 성능을 가지는 weight를 찾는 것입니다.
많이 사용하지는 않는 방법이며 이런 방법이 있다 정도만 알고 있으면 됩니다.
말 그대로 랜덤하게 W를 선택하기 때문에 좋지 않을 경우 15.5%의 정확도가 나오고 최고는 95%로
갭차이는 80%나 되기 때문에 거의 사용하지 않습니다.
두번째 방법은 경사하강법(gradient descent)입니다.
땅 주변에 발을 가져다 대면서 좀 더 낮은곳으로 조금씩 이동하는 방법입니다.
실제로 W값의 기울기를 구하는 방법은 바로 미분입니다.
실제로 구현할 일은 없고 어떠한 방법으로 기울기를 구하는 것이다! 정도만 알면 됩니다.
아래 (f(x+h) - (f(x))/라는 공식을 사용합니다.
이 f(x+h)를 구하기 위해 h의 값을 0.0001이라고 합니다.
이 W의 한 값을 변화하였을때 얻은 값이 1.25322로 변화했다고 가정합니다.
gradient dw란 이 loss값의 차이를 h로 나눈 값입니다. 이러한 방식으로 모든 W에 대해서 이를 반복하면 모든 gradient dw를 구할 수 있습니다. 이 방식을 Numerical gradient라고 합니다.
하지만 이 방식은 각각의 모든 W에 대해서 계산되어야 되기 때문에 굉장히 느립니다.
그렇기에 뉴턴과 라이프니치가 수학적으로 저 미분을 간단하게 할 수 있도록 하였는데
이러한 수학적 접근 방식을 Analytic gradient라고 합니다
요약을 하면 numerical gradient는 정확하지 않고 느리지만 간편하다는 장점이 있습니다.
analytic gradient는 정확하고 빠르지만 에러가 많이 나올 가능성이 있습니다.
Stochastic Gradient Descent
지금까지는 N을 한번에 올려서 계산하였습니다. 근데 N이 수천만개가 넘을 수도 있을경우 매우 비효율적이게 됩니다.
W가 업데이트되려면 처음부터 끝까지 계산을 하고 업데이트가 되는데 수천만개를 계산하고 업데이트하고 또 계산하게 된다면 매우 느리고 비효율적인 과정이 됩니다.
그렇기에 Stochastic Gradient Descent 라는 방식을 많이 사용합니다.
이것은 minibatch를 두어서 데이터 개수를 잘라 사용하는 것입니다.
보통 2의 승수로 사용합니다 (128, 256,512)
그렇기에 256를 가지고 W를 업데이트하고 또 다음 256를 가지고 W를 업데이트 하는 방식입니다.