확률적 경사 하강법
확률적 경사 하강법은 손실 함수의 곡면에서 경사가 가장 가파른 곳으로 내려가다 보면 언젠가 가장 낮은 지점에 도달한다는 가정으로 만들어졌다. 그러나 가정이 단순하기 때문에 다양한 상황에 잘 대처하지 못하고 학습 속도도 느리기 때문에 성능에 한계가 있다.
고정된 학습률
학습률이란 최적화할 때 한 걸음의 폭을 결정하는 스텝의 크기를 말하며 학습 속도를 결정한다. 확률적 경사 하강법은 지정된 학습률을 사용하는 알고리즘이기 때문에 경험적으로 학습률을 조정할 수밖에 없으며, 이는 효율적이지 않고 최적의 학습률을 정하기 어렵다. 또한 학습률이 고정되어 있기 때문에 최적화가 비효율적으로 진행된다. 학습률이 변화할 수 있다면 처음에는 큰 폭으로 이동하다가 최적해에 가까워질수록 이동 폭을 줄여서 안정적으로 수렴할 수 있지만, 학습률이 고정된 경우 최소 지점 근처에서 진동하고 최적해에 가까이 갔을 때 남은 거리보다 학습률이 크기 때문에 최소 지점에 정확히 도달하지 못하며 학습률이 낮아지지 않는 한 영원히 최적해에 도달할 수 없어 모델의 성능은 떨어진다.
일반적으로 학습 초기에는 큰 폭으로 이동해서 최대한 빠르게 내려가고, 어느 정도 내려가면 작은 폭으로 천천히 이동해서 최적해에 조심스럽게 접근하는 것이 좋다. `학습률 감소(learning rate decay)`란 이렇듯 처음에는 높은 학습률로 학습을 시작하고 학습이 진행되는 상황에 따라 학습률을 조금씩 낮추는 방식이다.
경사가 가파를 때 큰 폭으로 이동하면 최소 지점을 지나칠 수 있기 때문에 천천히 이동하는 것이 좋고, 경사가 완만하면 큰 폭으로 빠르게 이동하는 것이 좋다. 이렇듯 학습의 진행 상황이나 곡면의 변화를 알고리즘 내에서 고려해서 학습률을 자동으로 조정하는 방식을 `적응적 학습률(adaptive learning rate)`라고 한다. 여기서 적응적이라는 의미는 어떤 연산 또는 실행이 필요한지 지속해서 판단하면서 연산을 하거나 실행하는 과정을 말한다.
협곡에서 학습이 안되는 문제
협곡 모양의 곡면에서 학습을 진행하는 경우 확률적 경사 하강법은 단계마다 등고선의 직각 방향으로 이동하며 결국 진동만 하고 아래쪽으로는 잘 내려가지 못해 최적해가 있는 곳에 도달하지 못하고 정체된 상태로 학습이 종료될 수 있다. 손실 곡면의 등고선이 장축과 단축 비율이 높은 타원형이 될 때 1차 미분인 기울기만 사용하면 장축을 따라 매끄럽게 진행될 수 없다. 이 경우 2차 미분인 곡률을 사용해야 최적의 경로로 수렴할 수 있지만, 기울기만 사용하는 경우 진행하던 속도에 관성을 추가해서 이동 경로가 덜 진동하게 할 수 있다.
안장점에서 학습 종료
손실 함수 곡면에서 `임계점(critical point)`은 미분값이 0인 지점으로 `최대점(maximum point)`, `최소점(minimum point)`, `안장점(saddle point)`이 된다. 확률적 경사 하강법은 임계점을 만나면 이들을 구분하지 못하고 학습을 종료하는데, 손실 함수 곡면에는 무수히 많은 안장점이 있어 문제다. 임계점에서 `손실(loss)`을 확인해 보면 어느 정도의 구분이 가능하다. 만약 손실이 매우 낮다면 최소점일 가능성이 매우 크고, 손실이 매우 높다면 최대점일 가능성이 크다. 손실이 그 중간쯤 어느 정도 높을 경우 안장점이라고 추정할 수 있다. 또한 안장점은 최대와 최소가 만나는 지점으로 조금만 움직여도 금방 내리막길이 나타나므로, 진행하던 속도에 관성을 주면 안장점에서 쉽게 탈출할 수 있다.
학습 경로의 진동
확률적 경사 하강법에서 미니배치 단위로 그레이디언트를 근사하면 원래의 손실 함수보다 기울기가 자주 바뀌는 거친 표면에서 이동하므로 최적화 경로가 진동한다. 이 경우 그레이디언트가 부정확하기 때문에 최적화 경로는 길어지고 수렴 속도는 느려진다. 최적화 경로가 최적해를 향해 일관성 있게 진행하려면 손실 함수의 표면이 거칠더라도 민감하게 경로를 바꾸지 말아야 한다.
SGD 모멘텀
`SGD 모멘텀(SGD Momentum)`은 최적해를 향해 진행하던 속도에 관성을 주어 SGD의 느린 학습 속도와 협곡과 안장점을 만났을 때 학습이 안되는 문제, 거친 표면에서 진동하는 문제를 해결한 최적화 알고리즘이다.
SGD 모멘텀 핵심 개념
SGD가 가장 가파른 곳으로 내려가는 방식이라면 SGD 모멘텀은 지금까지 진행하던 속도에 관성이 작용하도록 만든 방식이다. 이를 벡터로 표현하면 다음과 같다. 그레이디언트 벡터는 현재 위치에서 가장 가파른 방향이며 속도 벡터는 현재 이동하는 속도를 나타낸다. SGD 모멘텀은 현재의 속도 벡터와 그레이디언트 벡터를 더해서 다음 위치를 정한다.
속도에 관성이 작용하면 지금까지 진행하던 방향과 다른 방향에 내리막길이 나타나더라도 갑자기 방향을 바꾸지 않는다. 관성이 작용하면서 학습 경로가 전체적으로 매끄러워지고 가파른 경사를 만나면 가속도가 생겨 학습이 매우 빨라진다. SGD 모멘텀을 수식으로 나타내면 다음과 같다. 다음 속도는 현재 속도에 마찰 계수를 곱한 뒤 그레이디언트를 더해서 계산한다. 여기서 `마찰 계수(friction coefficient)`는 보통 0.9나 0.99를 사용한다. 또한 파라미터 업데이트 식은 SGD의 파라미터 업데이트 식과 같은 형태이지만 그레이디언트 대신 속도를 사용한다.
관성을 이용한 임계점 탈출과 빠른 학습
진행하던 속도에 관성이 작용하면 진행하던 속도로 계속 진행하려 하기 때문에 안장점을 만나거나 깊이가 얕은 최소 지역에 빠지더라도 그 지점을 벗어날 수 있다. 또한 손실 함수의 표면이 울퉁불퉁해도 튕겨나가지 않고 진행하던 속도를 유지하며 부드럽게 이동할 수 있다. 경사가 가파른 경우에도 속도에 그레이디언트가 더해져 가속도가 생기므로 매우 빠르게 이동한다.
오버 슈팅 문제
SGD 모멘텀은 `오버 슈팅(overshooting)`이 되는 단점이 있다. 오버 슈팅이란, 경사가 가파른 경우 빠른 속도로 내려오다가 최소 지점을 만나면 그레이디언트는 순간적으로 작아지지만 속도는 여전히 커 최소 지점을 지나는 현상이다. 이를 벡터로 표현하면 다음과 같다. 최소 지점이 평평한 평지 위에 있으면 오버 슈팅은 발생하지 않는다. 그러나 최소 지점 주변의 경사가 가파른 경우 속도가 커 오버 슈팅이 발생할 수밖에 없다. 이때 최적해 주변을 평평하게 만들어 주는 정규화 기법을 사용하면 이를 막을 수 있다.
SGD 모멘텀은 두 종류의 식으로 표현이 가능하다. 두 식의 차이점은 속도를 계산할 때 그레이디언트 누적 방향이 반대라는 것이다. 또한 파라미터 업데이트 방향도 반대로 되어있다.
네스테로프 모멘텀
네스테로프 모멘텀 핵심 개념
`네스테로프 모멘텀(Nesterov Momentum)`은 진행하던 속도에 관성을 준다는 점은 SGD 모멘텀과 동일하지만 오버 슈팅을 막기 위해 현재 속도로 한 걸음 미리 가보고 오버 슈팅이 된 만큼 다시 내리막길로 내려간다. 즉, 한 걸음 미리 갔을 때 높이 올라간 만큼 다시 내려오도록 그레이디언트로 교정해준다. 이를 벡터와 수식으로 표현하면 다음과 같다.
마찰계수는 SGD 모멘텀과 동일하게 0.9 혹은 0.99를 사용한다. 다음 속도는 현재 속도에 마찰 계수를 곱한 뒤 현재 속도로 한 걸음 미리 가 본 위치의 그레이디언트를 빼서 계산한다.
오버 슈팅 억제
네스테로프 모멘텀이 오버 슈팅을 억제하는 단계를 벡터로 표현하면 다음과 같다. 이러한 방식을 통해 네스테로프 모멘텀은 관성이 커지더라도 오버 슈팅이 될지 미리 살펴보고 교정하여 오버 슈팅이 억제된다.
그레이디언트 계산 트릭
네스테로프 모멘텀 식에서 한 걸음 미리 갔다가 돌아와야 하기 때문에 계산이 조금 복잡하다. 따라서 계산을 단순화하기 위해 한 걸음 미리 가 본 위치를 현재 위치로 바꾸는 트릭을 사용한다. 결론적으로 SGD 모멘텀 식과 거의 동일한데 두 번째 식에 교정 요소만 추가된 형태이다. 해당 부분이 오버 슈팅을 억제하는 역할을 한다.
AdaGrad
AdaGrad 핵심 개념
`AdaGrad(Adaptive Gradient)`는 손실 함수의 곡면의 변화에 따라 적응적으로 학습률을 정하는 알고리즘이다. 손실 함수의 경사가 가파를 때는 최소 지점을 지나치지 않기 위해 작은 폭으로 이동하는 것이 좋고, 경사가 완만하면 큰 폭으로 빠르게 이동하는 것이 좋다. 이를 위해선 곡면의 변화량에 학습률이 적응적으로 조정되어야 한다. 곡면의 변화가 크다는 것은 기울기의 변화가 크다는 것을 의미하므로, 모든 단계에서 계산했던 기울기를 모아서 크기를 측정해 보면 된다.
SGD의 파라미터 업데이트 식에서 학습률을 곡면의 변화량의 제곱근으로 나눠주면 `적응적 학습률`이 된다. 이는 곡면의 변화가 크면 천천히 학습하고, 변화가 작으면 빠르게 학습한다. 다음 수식은 적응적 학습률이 반영된 파라미터 업데이트 식으로 그레이디언트의 제곱을 누적하는 식과 파라미터 업데이트 식으로 정의된다.
AdaGrad는 모델의 파라미터별로 곡면의 변화량을 계산하기 때문에 파라미터별로 개별 학습률을 갖는 효과가 생긴다. 손실 함수에서 파라미터의 차원별로 곡면의 변화량이 다를 수 있기 때문에 파라미터별로 개별 학습률을 가지면 좀 더 정확하고 빠르게 최적해로 수렴할 수 있다.
학습 초반에 학습이 중단되는 현상
AdaGrad에는 한 가지 치명적인 단점이 있다. 곡면의 변화량을 전체 경로의 기울기 벡터의 크기로 계산하기 때문에 학습이 진행될수록 곡면의 변화량은 점점 커지고 반대로 적응적 학습률은 점점 낮아진다는 것이다. 만약 경사가 매우 가파른 위치에서 학습을 시작한다면, 초반부터 적응적 학습률이 급격하게 감소하기 시작해서 조기에 학습이 중단될 수 있다.
RMSProp
RMSProp의 핵심 개념
`RMSProp(Root Mean Square Propagation)`은 최근 경로의 곡면 변화량에 따라 학습률을 적응적으로 결정하는 알고리즘으로 AdaGrad가 가지고 있던 학습이 조기에 중단되는 문제를 해결한다. 곡면 변화량을 전체 경로가 아닌 최근 경로의 변화량을 측정하면 곡면 변화량이 누적되어 계속해서 증가하는 현상을 없앨 수 있다.
RMSProp은 최근 경로의 곡면 변화량을 측정하기 위해 `지수가중이동평균(Exponential Weighted Moving Average)`을 사용한다. 이를 통한 곡면의 변호량 측정 및 파라미터 업데이트에 대한 수식은 다음과 같다.
최근 경로의 곡면 변화량
RMSProp의 첫 번째 식을 풀어보면 다음과 같다. 현재 시점에서 멀어질수록 가중치가 베타(Beta = 0.9)의 지수승으로 변화하면서 점점 0으로 수렴한다. 따라서 최근 경로의 그레이디언트는 많이 반영되고 오래된 경로의 그레이디언트는 작게 반영된다. 그레이디언트 제곱에 곱해지는 가중치가 지수승으로 변화하기 때문에 지수가중평균이라고 부르며, 단계마다 새로운 그레이디언트 제곱의 비율을 반영하여 평균이 업데이트되기 때문에 지수가중이동평균이라고 부른다.
Adam
Adam의 핵심 개념
`Adam(Adaptive Moment Estimation)`은 SGD 모멘텀과 RMSProp이 결합된 형태로, 진행하던 속도에 관성을 주고 동시에 최근 경로의 곡면의 변화량에 따라 적응적 학습률을 갖는 알고리즘이다. Adam은 최적화 성능이 우수하고 잡음 데이터에 대해 민감하게 반응하지 않는 성질이 있다. 또한 두 알고리즘을 합치면서 초기 경로가 편향되는 RMSProp의 문제를 제거했다. Adam에 대한 수식은 다음과 같다.
첫 번째 식은 `1차 관성(first momentum)`으로 속도에 마찰 계수 대신 가중치를 곱해서 그레이디언트의 지수가중이동평균을 구하는 형태로 수정되었다. 두 번째 식은 `2차 관성(second momentum)`으로 그레이디언트 제곱의 지수가중이동평균을 구하는 식이다. 이는 RMSProp이 첫 번째 식과 동일하다. 세 번째 식은 파라미터 업데이트 식으로 1차 관성과 2차 관성을 사용한다.
학습 초기 경로 편향 문제
초기 경로의 편향 문제는 RMSProp이 가지는 문제이다. 초기 경로의 편향 문제란 위의 식으로 학습을 진행할 경우 첫 번째 단계에서 출발 지점으로부터 멀리 떨어진 곳으로 이동하는 것을 말한다. 초기 경로에 편향이 발생하는 이유는 다음과 같다. 결론적으로 r1이 작아지면 적응적 학습률이 커져서 출발 지점에서 멀리 떨어진 곳으로 이동하게 되고, 운이 나쁘면 최적화에 좋지 않은 곳으로 갈 수도 있다.
Adam은 이 편향을 제거하기 위해 다음과 같이 알고리즘을 개선했다.
이 포스팅은 'Do it! 딥러닝 교과서' 교재를 공부하고 작성한 글입니다.