최적화란?
신경망 학습의 목적은 손실 함수의 값을 가능한 낮추는 매개변수를 찾는 것입니다. 즉, 어떤 목적함수의 값을 최적화시키는 파라미터 조합을 찾는 것을 뜻합니다. 매개변수 공간은 굉장히 넓고, 복잡하기 때문에 최적화 솔루션을 찾는 것은 굉장히 어려운 문제입니다.
여기서! 목적 함수가 1차식 이하로 구성되어있다면, 선형 최적화 문제, 2차식 이상으로 되어있다면, 비선형 최적화 문제라고 합니다.
최적화의 원리?
현재의 손실 함수 값이 감소하는 방향으로 파라미터를 업데이트 시킵니다. 여기서 가장 중요한 이슈는 어느 방향으로 얼만큼 갈 것인지 결정하는 것 입니다.
▶ 경사 하강법(Gradient Descent)
경사 하강법은 최적화 시킬 목적함수 f(x)에 대해서, 시작점을 x0를 정하고, 현재 xi가 주어졌을 때, 그 다음으로 이동할 점인 xi+1은 아래와 같이 계산됩니다.
여기서 γi는 이동할 거리를 조정하는 매개변수 입니다. learning rate라고도 합니다.
※ 왜 저런 식이 나오나요?
목적함수 f(x)에서 어느 방향으로 옮겨야 함수가 최소값을 가지는지 알아보는 방법은 바로 기울기를 이용하는것입니다.미분이 가지는 의미가 바로 기울기죠.(x변화량에 대한 y변화량) 이렇게 기울기를 이용하여 주어진 함수에 대해 최대, 최소 부분을 탐색할 수 있습니다. 아래의 그림을 보시면, 기울기가 양수일 경우, x값이 커질 수록 함수 값이 커지는 것을 의미하고, 기울기가 음수일 경우, x값이 커질수록 함수의 값이 작아지는 것을 뜻합니다. 또한 기울기 값이 크면 더 가파르고, 작으면 완만한 것을 의미합니다.
만약 xt에서 x값이 커질수록 함수값이 증가하는 중이라면, 음의 방향으로 x값을 옮겨야하고, xt에서 x값이 커질수록 함수값이 감소하는 중이라면, 양의 방향으로 x값을 옮겨야합니다.(최솟점을 찾는것이 목표니까요!) 이것을 수식으로 나타내면 아래와 같습니다.
여기서 이동 거리와 극소값의 관계를 다시한번 되짚어보면, 앞에서 말했듯이 기울기가 클수록 더 가파르고, 작을수록 더 완만합니다. 이 말은 즉, 기울기가 클수록 극소값과 더 멀리있다는것을 뜻하고, 작을수록 더 가까이 있는 것을 뜻합니다. 위의 그림에서 예로 들어보면 x값이 1.5일때의 기울기 값이 1일때의 기울기 값보다 큰 것을 알 수 있습니다. 극소점의 x값인 0과의 거리를 따져보면, 기울기가 더 작은 1이 더 가까운 것을 알 수 있죠? 따라서 극소값에서 멀 때는 많이 이동을 하고, 가까울 때는 조금씩 이동을 할 수 있게 합니다. 여기서 기울기 값을 직접 이용을 하는데, 사용자가 조금 더 조절할 수 있게끔(상황에 맞게) 이동거리 매개변수를 추가해줍니다(learning rate라고도 합니다). 따라서 최종 식은 아래와 같습니다.
※ learning rate가 어떤 영향을 미치나요?
learning rate를 다시 한번 정리하자면, 얼마나 빠른속도로 이동할것이냐! 입니다. 만약에 learning rate를 엄청 크게 설정한다면, 원하는 값까지 빠르게 도달할 수 있습니다. 하지만, 자칫하면 오히려 최소값을 계산하도록 수렴하지 못하고, 감수값이 계속 커지게 됩니다(발산하게 됩니다). 반면 너무 작은 경우는 시간이 매우 오래걸린다는 단점이 있습니다. 따라서 적절한 learning rate설정이 중요합니다.
(1) 배치 경사 하강법(Batch Gradient Descent)
전체 학습 데이터를 하나의 배치로 묶어서 학습시키는 경사 하강법입니다. 전체 데이터에 대한 오차 평균을 구하고, 미분을 통해 기울기를 구한 뒤, 최적화를 진행하는 방법입니다. 이 방법은 전체 데이터를 통해 학습시키기 때문에, 업데이트 횟수가 굉장히 적습니다. 또한 모든 데이터를 한번에 처리하기 때문에, 메모리가 많이 필요합니다. 항상 같은 데이터에 대해 기울기를 구하기 때문에 비교적 안정적으로 수렴합니다. Global Minimum을 찾을 수 있습니다.
※ Global Minimum이 뭔가요?
함수가 아래와같이 극소점이 여러 군데 존재하는 경우, 전체 그래프 내에서 극솟점을 Global minimum이라고 합니다. 추가적으로 실제로 얻고 싶은 값은 global minimum인데, local minimum에 빠져서 헤어나오지 못하는 경우를 local minimum문제라고 합니다.
(2) 확률적 경사 하강법(Stochastic Gradient Descent)
파라미터 값을 조정할 때, 전체 데이터가 아닌 하나의 랜덤한 데이터를 선택해서 계산하는 방법입니다. 적은 데이터를 이용하기 때문에 빠르게 계산할 수 있지만, 정확도가 조금 더 낮을 수 있습니다. 아래 그림에 보이는 것 처럼 굉장히 들쭉날쭉한 것을 알 수 있죠. 그리고 하나의 데이터에 사용하다보니, GPU성능을 모두 활용하지 못합니다. 따라서 이후 Mini batch를 이용한 방법이 나오게 됩니다.
(3) 미니 배치 경사 하강법(Mini-Batch Gradient Descent)
배치 경사 하강법과, 확률적 경사 하강법의 중간 정도라고 말할 수 있습니다. 전체 학습 데이터를 배치 사이즈로 나누어, 각 배치 셋을 순차적으로 수행하는 방법입니다. 따라서 BGD보다 빠르고, SGD보다 낮은 오차율을 보입니다. 만약 배치 사이즈가 전체 데이터셋과 같거나, 1이라면 BGD와 SGD와는 다른점이 없습니다. 이 방법은 일반적으로 딥러닝 프레임워크에서 SGD를 쓴다 하면 이함수가 사용된다고 합니다.
(4) 모멘텀(Momentum)
모멘텀은 운동량을 뜻하는 단어입니다. SGD와는 조금 다르게 아래 수식처럼 새로운 변수를 추가해줍니다.
이 v라는 변수는 속도(velocity)를 뜻합니다. 상단에 있는 수식은 기울기 방향으로 힘을 받아 물체가 가속된다는 물리 법칙을 나타냅니다. 또한 av는 물체가 아무런 힘을 받지 않을 때 서서히 하강시키는 역할을 합니다. 즉, 현실 세계에서 지면 마찰 혹은 공기 저항에 해당합니다. (a는 고정된 상수입니다) 따라서 해당 방향으로 공이 구르듯이 갱신됩니다.
따라서 아래 그림처럼 local minimum 문제가 해결될 수 있겠죠! 공을 미끄럼틀에서 밀어버렸을 때, 미끄럼틀의 평평한 부분에 도달했다고 해서, 공이 멈추지 않는것처럼, 이 방법도 동일합니다.
(5) 네스테로프 가속 경사(Nesterov Accelerated Gradient)
모멘텀 방식에서 가속도 계산 방식을 변경한 방법입니다. 기존 모멘텀 방법에서는 global minimum에 도달하려고 계속 loss를 계산하다가, 주변에 x가 안착하지 못하고 계속 발산할 수 있습니다. 따라서 관성을 조절하여 업데이트 크기를 바꾸는 방식을 도입합니다.(NAG는 한 단계를 미리 예측함으로써 불필요한 이동을 줄입니다.)
NAG은 현재 파라미터 위치로부터, vt만큼 떨어진 위치의 기울기를 구합니다. 즉, xi-vi지점의 기울기를 구하는 것이죠. 이것은 즉, xi+1과 같습니다. 따라서 NAG는 한 단계를 미리 예측하려고 한다는 것을 알 수 있습니다. 하지만, 아직 현재 모멘텀을 계산하지 않았기 때문에, vi는 계산할 수 없죠. 따라서 avi-1을 대신 사용한다고 합니다.
(6) AdaGrad(Adaptive Gradient)
기울기를 학습할때 설정하는 learning rate에 초점을 맞춘 방법입니다. 이 값이 너무 작으면 학습 시간이 길어지고, 너무 크면 발산하기 때문에, 학습이 제대로 되지 않습니다. 따라서 학습률의 설정이 매우 중요합니다. AdaGrad는 업데이트 횟수에 따라 학습률을 조절하는 옵션이 추가된 최적화 방법입니다. 즉, 많이 변화하지 않는 변수들은 학습률을 크게하고, 변화하는 변수들에 대해서는 학습률을 적게 설정합니다.(많이 변화한 변수는 최저값에 근접했을 것이라고 가정하기 때문에 작은 크기로 이동하며 세밀하게 값을 조정합니다.)
AdaGrad는 각각의 파라미터에 맞추어 값을 만들어줍니다. 신경망의 총 파라미터가 k개라고 하면, Gi는 k차원의 벡터입니다. 또한 i시점까지의 기울기 제곱의 합입니다. 그렇기 때문에 G값은 계속계속 커지겠죠? 따라서 아래의 파라미터 업데이트 수식에서 분모가 계속 커질것이고, 무한대로 간다면 학습률이 0으로 수렴하게 됩니다. 이렇게 된다면 정상적인 학습이 되지 않는다는 뜻이죠.
'인공지능공부 > 인공지능기본지식' 카테고리의 다른 글
[AI 기본 지식] 손실함수의 모든 것 (0) | 2023.03.22 |
---|---|
[AI 기본 지식] 역전파의 모든 것 (4) | 2021.04.16 |
[AI 기본 지식] 최적화 함수의 모든 것(2) (0) | 2021.04.16 |
[AI 기본 지식] 활성화 함수의 모든 것 (0) | 2021.04.16 |