최적화(Optimization) (2) | 패스트캠퍼스 챌린지 28일차
경사하강법을 모든 데이터를 계산하여 진행하면 비용이 너무나도 크다. 그런 문제로 학습 데이터를 쪼개서 학습하자는 아이디어를 낼 수 있을 것이다. Batch라고 한다면 학습 데이터 전체를 사용하는 방식을 뜻하며, 다른 방향으로 한 개의 샘플만을 사용하여 경사하강법을 진행한다면 Online Gradient Descent라고 부른다. Minibatch는 이 중간에 있는 방법으로, 전체 데이터를 1보다 큰 배치사이즈 만큼 쪼개어서 학습을 진행하는 방식이다. 배치사이즈는 정하기 나름인데, 현실적으로는 가지고 있는 GPU VRAM이 처리할 수 있을 때 까지 줄여가면서 하게 되는 것 같다. 배치사이즈는 보통 2의 제곱수로 정의된다.
경사하강법 자체는 convex 함수에 대해 제대로 작동하겠지만, convex하지 않은 실제 상황에서는 여러 문제가 발생할 수 있다. 가장 먼저 local minima 문제가 있는데, 이는 특정 구간에서만 최소값이 되는 값에 값이 고정되어 버리는 현상이다. 이 외에도 convex라고 생각했던 그래프가 3차원 이상으로 확장시키면 더이상 convex하지 않아버리는 현상 등이 있으며, RNN에서는 특히 long-term dependency 문제가 있다(언어학 통사론에서 filler-gap 사이의 장거리 의존 문제인 long-distance dependency와 별개의 개념이다). Long-term dependency는 개념적으로 설명하면 문장의 길이가 길어지면 초반의 토큰(단어) 정보를 잃어버리는 문제이다. 이러한 일이 일어나는 이유는 편미분 연산이 chain rule로 중첩되면서 경사가 소실되어 버리기 때문이다.
Stochastic Gradient Descent(SGD)는 알고리즘 상으로는 간단하다. 하지만 실제로는 SGD가 현실적으로 문제가 되는 것은 learning rate를 결정하는것에 있어서이다. Learning rate가 너무 낮으면 현실적으로 학습이 불가능할 정도로 학습이 안 되고, 너무 높으면 오히려 학습이 안 되는(loss가 늘어나는) 현상이 일어난다. Learning rate를 결정하는 것은 충분한 실험을 거쳐봐야 한다. 개인적인 경험으로는 선행연구를 참고하여 learning rate를 선정하되, 학습이 진행되지 않으면 텐서 값을 실제로 보면서 learning rate를 수정하는 것이 최선인 듯 하다.
참고로 learning rate 값은 0에서 1사이다. 개념 자체가 편미분값에 곱해져서 그 크기를 줄이기 위함이기 때문에 값이 1 보다 크면 안된다.
SGD 방식은 momentum 접근법과 adaptive 접근법으로 개선되었다. Momentum 접근법은 속도가 너무나도 느린 SGD에 가속도를 붙여서 학습을 가속시키자는 방법이고, adaptive 방식은 모든 파라미터에 학습률이 동일하게 적용될 필요가 없으므로 학습률을 조절하자는 것이다. 이 두 방법을 포괄하여 Adam 방법이 제안되었다. 강의에서는 Adam의 norm이 커지는 문제를 개선한 AdamP를 추천하는데, 아직까지는 Adam을 사용하는 연구가 대부분이다. 그만큼 Adam은 효율이 좋으면서 모델을 잘 근사할 수 있는 SGD 방법이라 할 수 있다.
Adam을 주장한 논문은 Kimgma & Ba(2015)이다. 사용할 때는 이 논문을 인용하면 된다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다. https://bit.ly/37BpXiC