Gradient Descent의 변형들을 알아보자!
VAE를 공부하며 정리했던
VAE 이해하기 위한 내용(1)
를 참고하면 더욱 이해하기 수월할 것이다.
1) forward pass output 2) cost 3) backpropagation(gradient descent) 4) parameter update 반복
여기서 컴퓨터 메모리 부담으로 인해 모든 training data를 사용하여 update하지는 않는다. batch를 이용하게 되는데, data를 나누는 것이다. 이 batch별로 loss값을 구하고 update를 하게 되는 것이다.
entire data = 1,000,000 / batch size = 100개 / batch = 10,000개 / iteration = 10,000번 / epoch : 전체 데이터 몇 번 돌지
이 모든건 기계가 학습하기 전, 사람이 정해준다. : 하이퍼 파라미터
- Batch Gradient Descent (데이터가 많지 않은 경우)
: 전체 데이터 한 번 돌고 한 번 업데이트. 즉, batch size= entire data개수로 업데이트 횟수는 epoch수
- Stochastic Gradient Descent SGD (데이터 하나하나 중요할 때)
: batch size=1 데이터 하나하나씩 업데이트
- Minibatch Gradient Descent (주로 이 방법을 사용한다.)
: batch size를 적절히 정하고 학습을 진행하며 업데이트 한다.
Stochastic Gradient Descent로 혼용하여 쓰이기도 한다.
Batch Gradient Descent의 장점은 단순 convex일 때, local minimum이 없기에 잘 찾아간다. 또한 모든 데이터를 사용하여 한 번에 업데이트 하기에, 노이즈에 대한 영향을 덜 받는다. 단점으로는 메모리 공간이 굉장히 많이 요구되고, 속도 또한 느리다. 또한 실시간으로 들어오는 데이터에 대해 학습이 어렵다.
Stochastic Gradient Descent의 장점은 우선 빠르고, 실시간으로 들어오는 새로운 데이터를 배치로 생성해 바로 학습할 수 있다. 하지만 단점은 업데이트할 때 variance가 너무 커서 SGD fluctuation이 발생한다.
Mini-batch Gradient Descent는 random sampling을 통해 batch size만큼 고르고 이를 통해 업데이트를 해간다. 그래서 코딩을 할 때 shuffle=True로 놓고 진행하는 것이다. 배치 사이즈가 작아졌기에 빠른 속도로 학습이 가능하며, 온라인 learning또한 가능하게 된다. variance 또한 상당히 줄어든다. 즉, 노이즈에 대해서도 robust하다.