머신러닝에서의 경사하강법, 확률적경사하강법
개요
손실 함수의 기울기를 이용해 손실 함수의 극소값을 찾는 알고리즘 중 가장 간단한 방법으로 경사하강법gradient Descent Algorithm이 있다.
설명
단, 이 때의 손실 함수 $L$ 은 데이터 셋 $X$ 가 픽스 된 상태에서 가중치와 바이어스에 대한 함수로 본다. 만약 인풋 데이터가 $\mathbf{x} \in \mathbb{R}^{m}$ 처럼 생겼다면 $L$ 은 $(w_{1} , w_{2} , \cdots , w_{m} , b) \in \mathbb{R}^{m+1}$ 에 대한 함수가 되는 것이다. 같은 데이터라도 가중치와 바이어스에 따라 손실 함수의 값은 달라지고, 손실 함수가 작아진다는 것은 그만큼 좋은 모델을 만들어냈음을 의미한다.
경사하강법은 이러한 함수 $L$ 이 만들어내는 매니폴드를 따라가며 극소값이 되는 최적의 가중치를 찾는다. 이러한 원리를 조금 더 엄밀하게 이해하고 싶다면 수치해석학에서의 경사하강법에 대해 공부해보는 게 좋다.
첫번째로 찍은 가중치와 바이어스의 벡터 $\mathbf{w}_{1} \in \mathbb{R}^{m+1}$ 에 대해 손실 함수의 값을 조금 더 작게 만든 $\mathbf{w}_{2}$ 는 어떤 적절한 양수 $\alpha$ 에 대해 $$ \mathbf{w}_{2} := \mathbf{w}_{1} - \alpha \nabla L (\mathbf{w}_{1} ) $$ 와 같이 계산된다. 이를 반복한 $$ \mathbf{w}_{n+1} := \mathbf{w}_{n} - \alpha \nabla L (\mathbf{w}_{n} ) $$ 는 손실 함수의 값을 점점 더 작게 만들어줄수도 있다. 이렇게 $\mathbf{w}_{n}$ 를 업데이트하는 것을 백프로파게이션backpropagation이라고 한다. 머신 러닝에서는 $\alpha$ 를 러닝 레이트learning Rate, 학습률라고 부르며, 이 값에 따라 경사하강법은 성공할수도 있고 실패할 수도 있다.
성공하는 경우란 위 그림처럼 계산을 반복해가면서 $L$ 이 극소값이 되도록 하는 가중치와 바이어스를 정확하게 찾은 경우다. 특히 그림에서는 극소값인 동시에 최소값이 되는데, 일반적으로 극소값은 극소값일 뿐 최소값인지 확신할 수는 없다.
$\alpha$ 가 크면 값이 성큼성큼 바뀌면서 학습의 속도는 빨라지지만, 지나치게 큰 경우 위와 같이 수렴하지 않을 수 있다. 이러한 현상을 오버슈팅overshooting이라고 한다.
반대로 $\alpha$ 가 너무 작으면 수학적으로야 수렴성을 보장할 수 있겠지만 변화가 너무 작기 때문에 시간이 너무 많이 소요되고, 국소 최소값에 걸리게 된다면 그 근방에서 벗어날 수가 없다.
이것이 경사하강법의 기본적인 개념이고, 실제로는 위와 같은 문제를 보완할 수 있도록 다양한 기법들을 사용한다.
확률적 경사하강법
경사하강법을 미니배치마다 적용시키는 것을 확률적 경사 하강법stochastic gradient descent, SGD이라 한다. 어떤 글에서는 다음과 같이 설명하기도 한다.
하지만 이러한 구분은 실제론 쓸모 없다. 일반적으로 딥러닝에서 미니배치 러닝만이 사용되며, 미니배치 러닝에서 배치 사이즈를 $1$로 두면 그게 온라인 러닝이 되기 때문이다. 따라서 실제 딥러닝에서는 “경사하강법 = 확률적 경사하강법 = 미니배치 경사하강법” 이라고 받아들이면 된다.
"확률적"이라는 말에도 큰 의미를 둘 필요는 없다. 전체 데이터 셋을 모집단이라고 보면 미니배치로 학습하는 것은 표본집단에 대해서 반복적으로 학습하는 것과 같으므로 확률적이라고 부른다고 이해해도 무방하다.