앞서 선형 회귀를 다룰 때 경사 하강법을 간단하게 설명한 적이 있는데,
경사 하강법은 많은 머신 러닝 및 딥러닝 알고리즘에 사용되므로 좀 더 자세히 설명하고 넘어가겠습니다.
데이터 준비
배치 경사 하강법
경사 하강법을 구현하려면 각 모델 파라미터에 대해
비용 함수의 그레이디언트를 계산해야 합니다.
다시 말해서, 모델 파라미터가 조금 변경될 때 비용 함수가 얼마나 바뀌는지를 계산해야 합니다.
배치 경사 하강법에서는 매 경사 하강법 스텝에서 전체 훈련 세트에 대해 계산합니다.
그래서 이 알고리즘을 배치 경사 하강법이라고 합니다.
매 스텝에서 훈련 데이터 전체를 사용하기 때문에 매우 큰 훈련 세트에서는 아주 느립니다.
이 알고리즘을 간단하게 구현해보겠습니다.
여기서 학습률을 바꿔보면 어떨까요? 한 번 확인해보겠습니다.
아래 동영상들은 경사 하강법의 스텝 처음 30개를 보여줍니다.
학습률이 너무 낮은 경우입니다.
기다리면 결국 최적점에 도달하겠지만 너무 오래걸릴 것입니다.
학습률이 적당해보입니다.
학습률이 너무 높습니다.
알고리즘이 이리저리 널뛰면서 스텝마다 최적점에서 점점 멀어져 발산합니다.
적절한 학습률을 찾으려면 그리드 탐색을 사용합니다.
그리드 탐색에서 수렴하는 데 너무 오래 걸리는 모델을 막기 위해 반복 횟수를 제한해야 합니다.
반복 횟수는 어떻게 지정할까요?
너무 작으면 최적점 도달 전에 알고리즘이 멈출 것이고,
너무 크면 모델 파라미터가 더는 변하지 않는 동안 시간을 낭비하게 됩니다.
간단한 해결책은 반복 횟수를 아주 크게 지정하고 그레이디언트 벡터가 아주 작아지면,
즉 벡터의 노름이 어떤 값(허용오차)보다 작아지면 경사 하강법이 거의 최솟값에 도달한 것이므로
알고리즘을 중지하는 방법입니다.
확률적 경사 하강법
배치 경사 하강법의 문제는 매 스텝에서 전체 훈련 세트를 사용해서 그레이디언트를 계산하므로
훈련 세트가 커지면 매우 느려지게 됩니다.
확률적 경사 하강법은 매 스텝에서 한 개의 샘플을 무작위로 선택하고
그 하나의 샘플에 대한 그레이디언트를 계산합니다.
이렇게 하면 매 반복에서 다뤄야 할 데이터가 매우 적기 때문에 한 번에 하나의 샘플을 처리하면
알고리즘이 확실히 훨씬 빠릅니다.
그리고 매 반복에서 하나의 샘플만 메모리에 있으면 되므로
매우 큰 훈련 세트도 훈련시킬 수 있습니다.
반면 확률적이므로 이 알고리즘은 배치 경사 하강법보다 훨씬 불안정합니다.
비용 함수가 최솟값에 다다를 때까지 부드럽게 감소하지 않고 위아래로 요동치며 평균적으로 감소합니다.
시간이 지나면 최솟값에 매우 근접할 수는 있지만
요동이 지속되며 최솟값에 안착하지 못할 것입니다.
따라서 알고리즘이 멈출 때 좋은 파라미터가 구해지겠지만 최적치는 아닙니다.
특히 이 방법을 사용하면 무작위성이 지역 최솟값을 탈출시켜줄 수 있습니다.
지역 최솟값을 탈출시키는 이점이 있지만 전역 최솟값에는 다다르지 못하는 단점이 있는데,
이 딜레마를 해결하는 한 가지 방법은 학습률을 점진적으로 감소시키는 것입니다.
매 반복에서 학습률을 결정하는 함수를 학습 스케쥴 이라고 부릅니다.
학습률이 너무 빨리 줄어들면 지역 최솟값에 갇히거나 최솟값까지 가는 중간에 멈춰버릴 수 있습니다.
학습률이 너무 천천히 줄어들면 오랫동안 최솟값 주변을 맴돌거나
훈련을 너무 일찍 중지해서 지역 최솟값에 머무를 수 있습니다.
다음 코드는 간단한 학습 스케줄을 사용한 확률적 경사 하강법의 구현입니다.
아래 동영상은 확률적 경사 하강법이 어떻게 진행되는지를 보여줍니다.
특히 배치 경사 하강법과는 다르게 계속 그래프가 움직이는 것을 볼 수 있습니다.
미니배치 경사 하강법
이 방식에서는 미니배치라 부르는 임의의 작은 샘플 세트에 대해 그레이디언트를 계산합니다.
확률적 경사 하강법에 비해 미니배치 경사 하강법이 갖는 주요 장점은
행렬 연산에 최적화된 하드웨어(특히 GPU)를 사용해서 얻는 성능 향상입니다.
미니배치를 어느 정도 크게 하면 이 알고리즘은 SGD보다 덜 불규칙하게 움직입니다.
결국 미니배치 경사 하강법이 SGD보다 최솟값에 더 가까이 도달하게 될 것입니다.
하지만 지역 최솟값에서 빠져나오기는 더 힘들 것입니다.
다음 코드는 간단한 미니배치 경사 하강법의 구현입니다.
아래 동영상은 미니배치 경사 하강법이 어떻게 진행되는지를 보여줍니다.
확률적 경사 하강법과 마찬가지로 그래프가 계속 움직입니다.
'DATA > 머신 러닝' 카테고리의 다른 글
[머신 러닝] 차원 축소 (0) | 2022.01.18 |
---|---|
[머신 러닝] 서포트 벡터 머신 (support vector machine) (0) | 2022.01.17 |
[머신 러닝] 분류 (Classification) (0) | 2022.01.15 |
[머신 러닝] 간단한 머신 러닝 프로젝트 해보기 (0) | 2022.01.11 |
[머신 러닝] 행렬 인수분해 (Matrix Factorization) (0) | 2022.01.10 |