gradient에 - 를 붙이면 함수값을 감소시킬 수 있는 방향을 가리키게 된다. → decreasing gradient
실제 데이터셋을 보고 MSE를 통해 Loss와 Cost를 정의한다.
Loss와 Cost는 아래로 볼록한 Convex한 function의 형태인데 gradient를 이용해 Optimization(최적화)을 한다.
그리고 그 최적화를 이루는 방법을 Gradient descent method라고 한다.
좌측이 이상적인 Gradient Descent의 모습이다.
gradient를 구했을 때, gradient를 그대로 반영해서 weight를 그대로 업데이트 시키면 발산하게 될 수 있다.
따라서 gradient에 작은 값(learning rate)을 곱해줘야 우리가 생각하는 이상적인 gradient descent의 모습을 볼 수 있다.
Stochastic gradient descent
- 10만개의 데이터가 있다면 한번에 한 개의 데이터를 통해 gradient를 구하고 update를 하는 것을 반복
Mini-batch gradient descent
- bath size 크기의 데이터를 활용하여 gradient를 구하고 update를 하는 것을 반복
Batch gradient descent
- 한번에 데이터를 다 써서 gradient를 update
batch size는 중요하다!
Flat minimizer (small batch size)
Flat Minimun: training function에서 잘 되면 testing function에서도 어느정도 잘 된다. → generalization이 잘 된다.
Sharp minimizer (large batch size)
Sharp Minimum: training function에서 local minimum에 도달 했어도 testing function에서 약간만 멀어져 있어도 굉장히 높은 값이 나온다. → training 단계에서 얻어진 accuracy나 loss값들이 test 데이터 기준으로는 동작을 잘 안할 수 있다.⇒ batch size를 줄이게 되면 generalization이 좋아진다.
더 빨리 학습을 시키기 위한 Optimization technique
1. Gradient descent
적절한 learning rate를 설정하는 것이 어렵고 아래 그림처럼 불안정한 학습과정을 보인다.
또한 local minima에 빠질 수 도 있다.
2. Momentum
한번 gradient가 흐르면 다음번 gradient의 방향이 다르더라도 이전 gradient 방향을 반영하자는 아이디어
3. NAG
momentum은 현재 주어진 파라미터에서 gradient를 계산하고 그 gradient를 가지고 momentum을 accumulation을 하지만
NAG는 a라고 불리는 현재 정보가 있으면 그 방향(모멘텀 방향)으로 이동하고 이동한 위치에서 계산한 gradient를 가지고 accumulation을 한다.
→ momentum은 관성으로 인해 최적값을 지나칠 수 있다는 단점이 존재하는데, NAG는 학습이 어느정도 진행되었다면 최적값을 지나치는 문제를 방지할 수 있다.
4. Adagrad
파라미터가 많이 변한 것에 대해서는 적게 변화시키고 파라미터가 적게 변한 것은 많이 변화시키도록 한다.
G가 계속 커진다는 문제점이 있다. 따라서 뒤로가면 갈수록 학습이 안되는 현상이 발생한다.
5. Adadelta
Adagrad의 문제점을 해결하고자 하였다.
현재 timestep t가 주어졌을 때 window size만큼의 파라미터 제곱의 변화를 보겠다.
window size를 100으로 잡는다면 이전 100개동안의 g 정보를 들고 있어야 한다.
GPT3 같은 1000억개의 파라미터를 갖고있는 모델을 사용한다면 g 자체도 1000억개의 파라미터인 것이다.
learning rate를 사용하지 않기 때문에 거의 사용되지 않는다.
5. RMSprop
gradient를 누적하는 것이 아닌 EMA(Exponentially weighted moving average: 지수 가중 이동 평균)을 사용하여 최근의 gradient들이 더 크게 반영되도록 하는 방식이다.
6. Adam
Momentum과 AdaGrad가 합쳐져 방향과 보폭을 적절하게 조절하는 optimizer이다.