그래디언트는 함숫값이 가장 가파르게 증가하는 방향을 가리킨다.
따라서 현재 위치에서 그래디언트를 구한 후, 그 반대 방향으로 이동하면 Loss를 줄일 수 있다.
1. 계산 속도가 느리다.
Loss 함수가 모든 데이터를 고려하고 있다.
최소점에 수렴하기까지 매우 오랜 시간이 걸린다.
2. 좋지 않은 Local Minimum에 빠질 수 있다.
Local Minimum : 주변의 작은 영역에서는 가장 낮은 값을 가지지만, 전체 영역에서 반드시 가장 낮은 값은 아닌 지점.
Global Minimum(전체 영역에서 가장 낮은 값)과 상반되는 개념.
Local Minimum 해결방법
확률적 경사 하강법 [Stochastic Gradient Descent]
단 하나의 데이터만을 무작위로 선택하여 손실값을 계산한다.
SGD 해결방법
Mini-Batch Gradient Descent
SGD는 단 하나의 데이터만을 고려하기 때문에, 대규모 데이터셋에서 문제가 발생할 수 있다.
예) 100만개 중 1개만 사용 -> 99만 9,999개의 데이터는 무시 => 편향된 업데이트 초래
복수의 데이터를 Loss계산에 포함시킨다.
Batch Size가 2일 때, 주머니에서 두 개의 데이터를 무작위로 뽑아 그 평균을 Loss로 삼고 그래디언트를 계산하여 파라미터를 업데이트한다. 그 후, 남은 데이터 중 다시 두 개를 무작위로 선택하여 계산-업데이트 과정을 반복한다.
Batch Size가 1이면 SGD와 같고, 사이즈를 키울수록 GD에 가까워진다.
일반적으로 배치사이즈가 커질 수록 Validation Error가 증가한다.
1. Linear Scaling Rule
배치 사이즈를 키울 때 Learning Rate도 비례하여 키운다.
2. Learning Rate Warmup
학습 초기에 Learning Rate를 0에서 시작하여 점진적으로 증가시킨다.
이제 구현을 해보자!!
[link]
현재 시점의 그래디언트만을 고려하고 있어 개선의 여지가 있다.
이를 더 발전시킨 방법으로 Momentum, RMSProp, Adam 이 있다.
이 알고리즘들은 과거의 그래디언트 정보도 활용하여 더 효과적인 학습을 수행한다.
다음 장에서 이 알고리즘에 대해 알아보자!!
참고!
*웨이트 초기화
파라미터의 초깃값이 최소점으로부터 멀리 떨어져 있을수록 최적값에 도달하기 위해 더 많은 업데이트가 필요하다.
이는 학습 시간을 늘리고 모델의 성능에 부정적인 영향을 미칠 수 있다.
웨이트 초기화 방법
1. Yann LeCun
2. Kaiming He
3. Xavier
공통적으로 웨이트를 평균 0인 랜덤한 값으로 초기화하며, 웨이트의 분산은 각 방식에 따라 다르게 설정한다.
* 순전파
입력 데이터가 신경망의 입력층에서 출력층까지 층층이 전달되며 계산되는 과정
입력되는 데이터의 수가 많아질 수록 분산을 작게하여 웨이트를 0에 더 가깝게 초기화
* 역전파
그래디언트를 계산할 때는 출력층에서 입력층 방향으로 웨이트가 곱해지고 더해지는 연산이 수행된다.