딥러닝 모델 가중치를 업데이트 방법

채마노마노·2021년 9월 18일
0

딥러닝 이론

목록 보기
1/1

딥러닝에서 모델을 학습시킨다는건 최적화(optimization) 태스크를 수행하는 것과 같다. 여기서 최적화란, 좌측 그래프처럼 정의된 손실 함수(loss funciton)의 최솟값을 찾아나가는 일련의 과정을 말한다. 최적화는 역전파(Backpropagation) 과정 중에 가중치를 업데이트하면서 진행되는데, 이 때

한 스텝마다 이동하는 발자국의 크기, 즉 보폭이 학습률(learning rate)로 정의되고,
앞으로 이동할 방향은 현 지점의 기울기(gradient)를 통해 정의된다.
매 스텝마다 순전파(forward pass)의 끝단에서 계산되는 손실 함수값은 지금까지 업데이트된 가중치들이 얼마나 잘 설정되어 있는지를 나타내는 지표와도 같다.

GD (Gradient Descent)

GD의 기본은 간단합니다. 일단 아무 점이나 하나 잡고 시작해서, 그 점에서의 함수값보다 계속 조금씩 조금씩 값이 작아지는 점으로 옮겨가는 것입니다. 그러면 언젠가는 최소값에 도달할 것이라고 생각할 수 있습니다. 실제로, GD 방식으로는 반드시 극소값(local minimum)에 도달할 수 있다는 것이 증명되어 있습니다. 하지만 전체 최소값(global minimum)으로 갈 수 있다는 보장은 없습니다.

SGD (Stochastic Gradient Descent)

SGD는 전체 데이터가 아닌 training data 중 무작위로 뽑아 error를 계산한 뒤, 가중치를 업데이트 합니다. 장점으로는 속도가 굉장히 빠르다는 장점을 가지고 있다. SGD의 단점으로는 일부의 데이터만 확인하기 때문에 local minima(지역 최소점)과 saddle point(안장점)에 빠질 수도 있다는 치명적인 단점이 존재한다.

BGD (Batch Gradiant Descent) - 여기서 Batch는 모든 데이터를 뜻한다.

모든 학습 데이터의 loss값들의 평균을 계산해서 가중치를 업데이트 하는 방식으로, SGD에 비해 느리지만 안정적이라는 특징을 가지고 있음. 하지만 연산량이 너무 많아지고 훈련이 너무 늦어지는것이 단점이다.

MSGD ( Mini Batch Gradiant Descent)

Mini Batch는 SGD와 BGD의 방법이 결합된 방법으로 서로의 장점을 적절히 섞었다고 보면 됩니다. 일부 데이터 Batch_size ( Batch_size * n = iteration => 1 epoch)들만 선별해 가중치를 평균낸 뒤 업데이트를 하는 방법입니다. 하지만 여전히 local minima(지역 최소점)과 saddle point(안장점)에 빠질 수도 있다는 치명적인 단점이 존재 합니다.

이후 밑의 그림과 같이 여러 옵티마이저들이 등장하기 시작하는데 자주쓰는 adam만 추가적으로 설명을 하겠습니다. ( 그림에서는 각각의 optimizer별 논점만 그 옵티마이저가 발전한 방향성 혹은 특징만 기억하면 될 듯 싶다, 결국엔 사용하는 optimizer는 adam이라서...)

Adam

굉장히 흔히 그리고 강력한 옵티마이저이다. 처음에는 대충은 알았으나 자세히는 모른 상태로 그냥 좋은니까 써!! 이런 상태로 모델에 적용하고 다른 모델을 사용할 때도 당연히 Adam이겠지란 생각으로 사용한 기억이 있다.

방향을 중심으로 한 Momentum 계열과 보폭(데이터의 양)을 중심으로 한 Ada계열이 합쳐져, 보폭도, 방향도 적절하게 조절되는 최강의 옵티마이저가 탄생하게 되었다.

0개의 댓글