기록하는삶

[딥러닝/DL Basic] 최적화(Optimization) 관련 용어 정리 (2) _ Gradient_decent methods 본문

AI/DL Basic

[딥러닝/DL Basic] 최적화(Optimization) 관련 용어 정리 (2) _ Gradient_decent methods

mingchin 2022. 2. 7. 18:36
728x90
반응형

1) batch_size

일반적으로 모델을 학습시킬 때 전체 데이터에 대해서 한 번에 학습을 진행하는 것이 아니라 n개의 조각으로 전체의 데이터를 분할 해 여러 번에 걸쳐 학습 및 backpropagation을 진행하게 되는데, 이때 각 n개의 조각이 갖는 데이터의 수가 batch_size이다. 주로 연산 효율을 위해 2의 거듭제곱 단위인 32, 64, 128등을 사용하며, 각 조각들을 mini batch라 칭한다.

이러한 mini batch들을 사용하는 이유로는 gpu 등의 device의 메모리 한계, 모델 성능의 degredation 방지 등이 있다. 실제로 너무 큰 사이즈의 batch를 사용하는 경우 물리적으로 out of memory 문제에 마주칠 가능성도 높지만, 더 작은 배치 사이즈를 사용했을 때보다 generalization이 잘 되지 않을 가능성이 높다고 한다. 그렇다고 배치사이즈를 1로 설정한다면 연산을 해야하는 횟수가 너무 많아져 학습 시간이 지나치게 길어질 가능성이 있으니, 각 상황에 맞는 적절한 배치 사이즈를 찾아내는 것 역시 중요한 일 중 하나이다.

2017년 발표된 논문에서 배치 사이즈를 작게 가져갈수록 Flat minimum을 가질 확률이 높으며, 이는 곧 generalization이 잘 될 확률이 더 높다는 것을 연구를 통해 밝히기도 했다고 한다.

2) Gradient_decent methods

딥러닝의 학습 과정에서 각 mini batch마다 forward-propagation을 마치게 되면 일어나는 backpropagation에 대해서도 학습 효율과 성능을 높이기 위한 많은 방법들이 제안되었다. 이 역시도 일종의 하이퍼파라미터로, 상황과 목적에 맞게 적절하게 선택해야하지만 일반적인 경우 보편적으로 성능이 우수한 Adam을 가장 많이 사용한다고 한다. 그래도 몇 가지 방법론에 대해 이해해보자.

① (Stochastic) gradient decent

가장 기초가 되는 방법으로, 기존 값에서 그 위치의 loss function에 대한 기울기의 값에 적당한 에타값(learning rate 혹은 step size)를 곱해 빼주는 방식으로 극소를 찾는 방법이다. 이때 학습이 잘 진행되기 위해서는 learning rate을 너무 크지도, 작지도 않게 잘 찾는 것이 핵심인데 이것이 어려운 일이다. 이에 아래의 다른 방법들이 연구, 제안되었다.

② Momentum

Momentum은 '가속도'를 의미한다. 수식의 의미는 weight를 업데이트 해나갈 때 단순히 t시점의 gradient만 활용하는 것이 아니라, 이전 시점의 gradient의 정보를 포함시켜 (t+1)시점의 weight를 결정하는 것을 말한다. 이때 t시점의 gradient에 곱해지는 (베타)값을 momentum이라 부르고, 이 또한 사람이 정해줘야하는 하이퍼파라미터 중 하나다. 각 미니배치를 학습할 때마다 gradient의 variance가 발생하더라도, 이전 시점의 gradient들이 가지던 방향성을 (어느정도) 보존한다는 점에서 의미가 있고 학습이 더 잘, 빠르게 진행된다고 한다.

③ NAG(Nesterov Accelerated Gradient)

 

Momentum과 거의 유사하지만, t시점의 gradient를 직접 더해 accumulation을 구하는 Momentum과 달리, 이전까지의 accumulation된 방향으로 한 번 이동한 지점에서 t시점의 gradient를 구한 뒤 이를 이전까지의 accumulation에 다시 더해주는 방식이다. 이 방법은 Momentum이 local minimum을 지나친 경우(t시점의 기울기의 부호와 (t+1)시점의 기울기의 부호가 다른 경우) Momentum이 주는 잘못된 정보에 의하여 local minimum에 제대로 수렴하지 못하는 문제를 보완할 수 있다고 한다. 또한 수렴하는 속도 역시도 더 빠르다.

Momentum 사용시 발생할 수 있는 문제

④ Adagrad

각 파라미터에 대한 t시점까지의 gradient 변화량의 제곱합을 이용해, 그 합에 반비례하는 방향으로 파라미터를 업데이트하는 방식이다. 즉, 지금까지 많이 변화한 파라미터는 적게 변화시키고, 적게 변화한 파라미터는 많이 변화시키는 방법이다. 다만 gradient 변화량의 합산인 G_t의 경우 계속해서 증가하기 때문에, t가 커질수록 파라미터의 변화가 전체적으로 줄어들 수밖에 없다는 단점이 있다. 또한 파라미터 수만큼 해당 G_t를 추가적인 메모리를 할당해 파라미터로 관리해야 한다는 것 역시 단점이다. 이를 수정보완한 Adadelta라는 learning rate을 사용하지 않는 기법도 등장했지만, 자주 사용하지 않는다고 한다.

⑤ RMSprop

역시 Adagrad와 유사한데, Geoff Hinton이 자신의 강의에서 제안한 방식이라고 한다. Adadelta와 유사하게 EMA(Exponential Moving Average)를 통해 G_t의 메모리 할당 문제를 해결하고, Adadelta와 달리 stepsize를 사용한 것이 특징이다.

⑥ Adam(Adaptive Moment Estimation)

위에서 언급한 크게 2가지 아이디어,

- 이전까지의 momentum을 반영
- 이전까지의 변화량을 반영

가 모두 적용된 방법이다.
하이라이트 된 4개의 파라미터가 존재하며, 순서대로

- 이전까지의 모멘텀을 얼마나 유지할 것인가(Beta_1)
- 이전까지의 Gradient 변화량의 합을 얼마나 유지할 것인가(Beta_2)
- learning rate(eta)
- 0으로 나누지 않기 위한(numerical stability) 상수(epsilon)

의 의미를 가진다. 일반적인 경우에는 default값을 사용하겠지만, 이를 잘 튜닝하는 것 역시 경우에 따라 필요하다고 한다. 가장 널리 사용되는 최적화 방법론이 바로 adam이다.

동일한 batch에 대해 특정 함수를 예측하게 하면, adam이 가장 빠르고 효과적인 학습을 할 수 있음을 보여주는 예이다. 같은 목적을 이루는데 있어 adam을 사용하는 것이 가장 적은 iteration을 필요로 하는 경우가 많으므로, adam을 가장 많이 사용한다. (각 optimizer가 목적을 이루는데 iteration을 충분히 제공하였을 때, 모델의 최대 성능은 다를 수 있다. 즉, adam만이 정답은 아닐 수 있다.)

728x90
반응형