본문 바로가기
Deep Learning Specialization

Optimization [Deep Learning Specialization #5]

by ALTERww 2022. 7. 14.
320x100

Coursera의 Deep Learning Specialization - Week 2의 강의를 수강하면서 필기한 내용을 바탕으로 정리한 글입니다.

 

지난 주차에는 Deep NN 향상 기법들을 살펴 보았습니다. 이번 주차에서는 여러 최적화 기법들을 살펴봅시다.

 

Mini-batch Gradient Descent

Training set의 크기가 5백만인 경우, 한 개씩 5백만 회 반복하는 것과 5백만 개를 한 번에 학습하는 것 중 무엇이 좋을까요?

  • 한 개씩 하는 것은 전체 반복이 매우 짧지만, 벡터화를 활용하지 못해 전체 데이터에 대한 소요 시간이 매우 길어집니다. 그리고 전체 데이터의 경향을 반영하기 힘들어집니다.
  • 반대로 5백만 개를 한 번에 하면 성능은 좋아지지만, 전체를 한 번 반복하는 데 소요 시간이 길어집니다. 게다가 GPU를 통한 벡터화를 계산할 때 5백만 개를 한 번에 하려면 하드웨어도 엄청 좋아야 합니다.

두 방법의 장단점을 고려하여 전체 데이터셋을 조금씩 나누어 반복하는 Mini-batch라는 개념을 도입합니다. epoch를 한 번 반복하는 데 소요 시간을 최대한으로 줄이면서, 전체 데이터의 경향을 반영할 수 있는 기법이 되겠습니다.

 

 

Mini-batch Size

미니배치의 크기를 결정하는 것이 중요한 사항이 됩니다.

크기를 m으로 하면, 전체 데이터셋을 하나의 Batch로 보는 Batch Gradient Descent가 됩니다.
이는 한 번 training하는데 소요되는 시간이 오래 걸립니다.

크기를 1로 하면, 한 번에 하나의 데이터를 학습하는 SGD(Stochastic Gradient Descent)가 됩니다.

하지만 이는 벡터화가 의미가 없어지기 때문에 속도 향상이 사라집니다.

따라서 1과 m 사이의 값을 선택합니다. 주로 2의 n승 값을 선택합니다.

 

 

Exponentially Weighted Averages (지수 가중 평균)

오래된 데이터들에 대한 가중치를 줄이고, 최신 데이터들에 대한 가중치를 높이고 싶을 때 이용하는 최적화 기법입니다.

각 시점 t마다 평균을 계산하는 방법이 쓰여져 있는데, t-1 시점의 평균과 새로 들어온 데이터의 합으로 구성됩니다.

각 항 앞에 beta가 곱해지는데, 이 값이 클수록 더 많은 날의 지수 평균을 반영하게 됩니다.

반대로 1-beta는 작아지므로, 새로 들어온 데이터의 영향이 감소하게 되어 좀 더 부드러운 곡선을 그리게 됩니다.

 

 

Bias Correction

초기의 지수 가중 평균을 살펴보면, V0은 0으로 시작해 버리고 새로 들어온 데이터 Θ1은 1-beta가 곱해져 V1은 아주 작은 값으로 시작하게 됩니다. 따라서 모든 Vt를 구하는 식에 (1-beta^t)를 나누는 항을 추가하여 초기 Bias값을 개선합니다. 

시간이 증가하면서 t값이 증가함에 따라, 이 항이 기여하는 영향력은 감소하게 됩니다.

 

 

Momentum

Gradient Descent를 살펴 보면, 학습이 진행됨에 따라 우리는 특정 방향으로의 학습은 천천히 진행하고, 특정 방향으로의 학습은 빨리 진행되기를 원하게 됩니다. 이러한 점을 Momentum이라는 개념을 추가하여 구현하게 됩니다.

기존의 W,b를 갱신하는 과정에서 Velocity(속도)라는 요소를 추가합니다. dW와 db는 가속도로, 매 step에서의 변화량을 의미합니다. 이 변화량이 큰 값을 가지게 되면, 우리가 원하지 않는 방향으로 학습 방향이 튀게 될 수도 있습니다.

이러한 급격한 변화를 막기 위해서, VdW와 Vdb를 고려합니다. 현재 속도에서 dW, db에 의한 약간의 변화만을 부여하도록 하는 것입니다. 여기에서도 beta 파라미터를 이용하지만, 지수 가중 평균에서의 beta와는 완전히 다른 파라미터입니다..

 

 

RMSprop (root-mean-square)

Momentum을 반영한 옵티마이저 RMSprop를 살펴 봅니다.

VdW, Vdb를 SdW, Sdb로 바꾸어 Momentum 요소를 그대로 이용합니다. 단, dW와 db에 제곱을 부여합니다.

그리고 W,b를 갱신할 때 dW, db를 SdW, Sdb의 제곱근으로 나눈 값을 학습률에 곱하게 됩니다. 나누는 값에 10의 -7승 정도로 작은 값인 epsilon을 더해 줍니다.

실제로도 좋은 성능을 보여주는 옵티마이저로, 시계열 데이터에도 많이 이용됩니다.

 

 

Adam : Adaptive Momentum

또 다른 옵타마이저로 Adam이 있습니다. '적응형 모멘텀'이라는 이름을 가지고 있습니다.

먼저 각 mini-batch마다 dW와 db를 계산합니다.

  • Momentum VdW, Vdb를 계산합니다. 
  • RMSprop을 위한 SdW, Sdb를 계산합니다. 단, Momentum에서 사용된 beta와는 다른 값 beta를 이용합니다.
  • Bias Correction을 적용합니다.
  • W, b를 갱신합니다.

파라미터 beta1는 0.9, beta2는 0.999, epsilon은 10의 -8승을 주로 이용하고 학습률 등의 값은 튜닝을 통해 바꾸어 사용합니다. 물론 beta1, beta2, epsilon도 값을 수정하여 훈련할 수 있습니다. 

 

 

Learning Rate Decay (학습률 감쇠)

모델에 충분한 훈련이 진행되어서 목표치에 거의 다다랐을 때, 우리는 W와 b가 큰 변화를 가지길 바라지 않습니다. 천천히 올바른 방향으로 학습되는 것이 더 중요하기 때문입니다.

이를 위해 사용되는 최적화 기법이 Learning Rate Decay입니다. 초기에는 큰 학습률로 크게 변화하고, 목표치에 가까워질 수록 작은 학습률을 적용하여 작은 step으로 변화하게 만듭니다. 

전체 트레이닝 횟수를 의미하는 epoch_num에 반비례하도록 하여 epoch가 진행될 수록 학습률이 감소하도록 만듭니다.

 

 

Saddle Point (안장점) & Plateaus(고원)

안장점이라고 하는 것은 Gradient Descent로 최솟값을 탐색할 때 마주하게 되는 함정에 해당하는데, 어떤 축에서는 최솟값이지만 어떤 축에서는 최댓값이 되는 지점을 의미합니다. J의 기울기는 0이 되는데, Optima가 아닌 것이지요.

혹은 고원처럼 평평한 지점에 도착하게 되어 학습이 정체되는 경우도 존재합니다. 

이 두 케이스는 학습 속도에 악영향을 주기 때문에, 반드시 피해야 할 것입니다.

 

 

댓글