Optimization에 대해서 자세히 알아보겠습니다.

우리가 loss function에 대한 정의를 했을 때, 우리가 원하는 것은 가장 낮은 loss를 가지고 있는 지점(빨간색)에 도달하는 것입니다.
가장 간단한 optimization 알고리즘은 stochastic gradient descent입니다. mini batch 안에서 loss를 계산하고, gradient를 이용해서 weight를 업데이트 합니다.
아주 간단합니다. 하지만, SGD는 문제점을 가지고 있습니다.
Problems with SGD

먼저, 그림처럼 한쪽 방향으로는 아주 느리고 다른 방향으로는 빠르게 loss가 변화하는 경우가 발생할 때 입니다. loss가 수직방향의 가중치 변화에 훨씬 민감한 상태입니다.
현재의 지점에서 bad condition number를 가지고 있다고 표현할 수 있습니다. Hessian matrix의 최대값/최소값의 비율이 좋지 않은 상태입니다.
이런 경우에 SGD를 수행하면 수직방향으로는 빠른 변화가 있고, 수평방향으로는 느린 변화가 있어서 지그재그의 형태를 볼 수 있을 것입니다.(빨간색) 차원이 커질수록 이 문제는 심각해질 것입니다.
condition number
실제 환경에서는 문제를 해결할 때, 수학적 이론에서 적용했던 가정들을 적용시킬 수 없는 경우가 있습니다. 그렇기 때문에 문제의 답을 근사값을 이용해서 구하게 되고, 이것이 얼마나 신뢰할 수 있는지 확인할 필요가 있습니다.
입력값에 대한 작은 변화가 출력값에 큰 변화를 일으키는것은 결과의 신뢰성이 떨어진다고 판단할 수 있습니다. 이렇게 어떤 시스템이 민감한지의 정도를 정량적으로 나타낸 값을 condition number라고 합니다.
Hessian matrix
함수에 대한 이차미분을 표현한 matrix입니다. 함수의 일차미분인 gradient가 0이 되는 지점이 있을 때, 이 지점이 극대점인지 극소점인 saddle point인지 확인할 때 hessian matrix를 이용할 수 있습니다.