우노
[DL] 경사 하강법(Gradient Descent) 본문
경사하강법이란?
-
비용 함수를 최소화하는 매개 변수를 찾기 위해 사용되는 알고리즘입니다.
-
경사하강법의 대략적인 순서는 다음과 같습니다.
- 임의의 매개변수를 정해 비용함수의 시작지점(x축) 으로 지정합니다.
- 해당 매개변수로 모델의 오차를 구한 다음, 비용함수의 시작지점(y축) 으로 지정합니다.
- 시작 지점에서 다음 지점으로 갈 방향을 정하기 위해, 시작 지점의 기울기를 계산합니다.
- 기울기(Gradient)와 보폭(Learning rate)를 사용해 다음 지점으로 이동합니다.
- 위의 과정을 최소값에 도달 할 때 까지 반복합니다.
배치 사이즈란?
- 기울기 업데이트 시, 훈련세트를 몇 개씩 묶어서 사용할 지에 대한 정보입니다.
- 훈련세트의 사이즈가 크다면, 전체 훈련세트를 한 번에 처리해 기울기를 업데이트 하는 것 보단, 아주 작은 훈련세트로 나눠서 배치 단위마다 기울기를 업데이트 하는게 빠를 것입니다.
- 예를 들어, 훈련세트가 5000000일 때, 배치 사이즈를 5000000개라고 한다면, 1개의 묶음이 나오게 되므로 기울기는 1번 업데이트 됩니다.
- 하지만, 훈련세트가 5000000개일 때, 배치 사이즈를 100000개라고 한다면, 50개의 묶음이 나오게 되므로 기울기는 50번 업데이트 됩니다.
- epoch, batch size, iterations의 개념은 따로 정리해두었습니다.
배치 사이즈 정하는 방법
- Batch Size는 보통 2의 n승으로 지정하는데, 메모리에 적재시킬 수 있을 만큼의 Size로 정하는게 좋습니다.
- 전형적인 배치 사이즈는 64 ~ 512 입니다.
- 또한, Batch Size는 가능하면 훈련세트 개수와 딱 맞아 떨어지도록 나누는 것이 좋습니다.
- 마지막 남은 배치 사이즈가 이전 배치 사이즈와 다르면, 해당 배치의 데이터가 학습에 더 큰 비중을 갖게 됩니다.
- 예를 들어, 530 개의 데이터를 100개의 배치로 나누면, 각 배치 속 데이터는 1/100 만큼의 영향력을 갖게 됩니다.
- 그러나 마지막 배치(30개)의 데이터는 1/30의 영향력을 갖게 되어 과평가되는 경향이 있습니다.
- 그렇기 때문에 보통 마지막 배치의 사이즈가 다를 경우는 이를 버리는 방법을 사용합니다.
- Batch Size를 너무 작게하면 학습시간 (forward + backward propagation)이 오래 걸릴 수 있습니다.
- 보통 훈련세트가 2000개보다 작을 때는 나누지 않는게 좋습니다.
- 작은 훈련세트를 갖고 계시는 경우, 전체 훈련세트를 꽤 빨리 처리할 수 있기 때문입니다.
배치 경사하강법 (Batch Gradient Descent, BGD)
- 배치 사이즈가 훈련세트 사이즈와 동일한 경사하강법입니다.
- 따라서, 전체 훈련세트를 한 번에 처리해 기울기를 업데이트 합니다.
- 특징
- 항상 같은 데이터에 대해 경사를 구하기 때문에, 수렴이 안정적입니다. (위 그림 참고)
- 전체 훈련세트를 한 번에 처리하기 때문에, 메모리가 가장 많이 필요하며
- 긴 시간이 소요됩니다.
확률적 경사하강법 (Stochastic Gradient Descent, SGD)
-
배치 사이즈가 1개인 경사하강법입니다.
-
전체 훈련세트 중, 랜덤하게 하나의 데이터를 선택해 기울기를 업데이트하기 때문에 확률적이라고 부릅니다.
-
따라서, 1개의 훈련데이터만 처리해 기울기를 업데이트 합니다.
-
특징
- 수렴에 Shooting이 발생합니다.
- 1개의 데이터마다 비용함수의 기울기는 약간씩 다르기 때문에, 각각의 데이터에 대해 미분을 수행하면 기울기의 방향이 매번 크게 바뀝니다.
- 전역 최저점(Global Minimum)에 수렴하기는 어렵지만, 지역 최저점(Local Minimum)에 빠질 확률을 줄여줍니다.
- 훈련데이터를 1개씩 처리하기 때문에, 벡터화 과정에서 대부분의 속도를 잃으며 GPU의 병렬 처리를 잘 활용하지 못합니다.
- 수렴에 Shooting이 발생합니다.
미니 배치 확률적 경사하강법 (Mini-Batch Stochastic Gradient Descent, MSGD)
- 배치 경사하강법과 확률적 경사하강법의 절충안으로, 전체 훈련세트를 1~M 사이의 적절한 batch size로 나누어 학습하는 것입니다.
- 예를 들어, 전체 훈련세트가 5000000개일 때, 배치 사이즈를 100000개라고 한다면, 50개의 묶음이 나오게 되므로 기울기는 1 Epoch 당 50번 업데이트 됩니다.
- 특징
- 훈련세트의 사이즈가 클 경우, 배치 경사하강법보다 속도가 빠릅니다.
- Shooting이 적당히 발생합니다. (Local Minimum를 어느정도 회피할 수 있습니다.)
정리
-
배치 사이즈는 경사 하강법 1회 업데이트에 사용되는 데이터의 사이즈입니다.
-
배치 사이즈에 따라 아래와 같이 나눌 수 있습니다.
- 배치 경사 하강법 (BGD)
- 배치 크기 == 전체 학습 데이터
- 확률적 경사 하강법 (SGD)
- 배치 크기 == 1
- 미니 배치 확률적 경사 하강법 (MSGD)
- 배치 크기 == 사용자가 지정
- 배치 경사 하강법 (BGD)
-
배치 사이즈는 아래 조건에 따라 정합니다.
- 2의 n승이 좋습니다.
- 메모리 크기를 고려해야합니다.
- 가능하면 전체 데이터 수가 나누어 떨어지도록 정하고, 아니라면 마지막 배치는 버리는게 좋습니다.
- 훈련 세트의 크기가 2000보다 작다면 배치 경사하강법이 빠릅니다.
'AI > Deep Learning' 카테고리의 다른 글
[DL] 간단한 순전파와 역전파 예제 (5) | 2021.01.12 |
---|---|
[DL] 파라미터와 하이퍼파라미터의 차이 (0) | 2021.01.12 |
[DL] Weight matrix 차원 공식 (0) | 2021.01.11 |
[DL] 활성화 함수의 역할 및 종류 (0) | 2021.01.10 |
[DL] Keras 단순 선형 회귀 튜토리얼 (0) | 2020.07.29 |
Comments