*This review content is based on course "Deep Learning Specialization" provided by prof. Andrew Ng
Neural Network Basics
Gradient Descent (경사하강법): 개념적 이해
경사하강법은 함수의 값이 낮아지는 방향으로 각 독립변수들의 값을 변형시키며서 함수가 최솟값을 갖도록 하는 독립변수의 값을 탐색하는 방법을 의미하며, 일반적으로 입력된 parameter의 검증(validation)이 필요할 때 사용됩니다.
이러한 정의는 이해하기 쉽지 않습니다. 많은 사람들이 경사하강법을 설명함에 있어서 다음과 같이 비유하곤 합니다.
앞이 보이지 않는 안개가 낀 산을 최단 시간에 내려가는 것과 비슷하다. 최단시간에 산을 내려가기 위해서는 모든 방향으로 산을 더듬어가며 현 위치에서 내려가는 경사가 가장 심한 쪽을 찾고, 한 발자국 이동하고, 다시 그 위치에서 경사가 가장 심한 쪽을 찾고, 한 발자국 이동하고, ... 이러한 과정을 반복하는 것이다.
그렇다면 우리는 경사하강법을 왜 사용하는 것일까요?
일반적으로 경사하강법은 함수의 최솟값을 찾는 문제에 활용됩니다. 함수의 최소, 최대를 찾으려면 '미분계수가 0인 지점을 찾으면 되는 것 아닌가요?'라고 물을 수 있습니다. 우리가 지금까지 다뤄온 간단한 문제들에서는 적어도 그랬습니다. 하지만 미분계수가 0인 지점을 찾는 방식이 아닌 경사하강법을 사용해 함수의 최솟값을 찾아야 하는 주된 이유는 다음과 같습니다.
- 1) 우리가 실제 문제 해결 과정에서 마주하게 되는 함수들은 닫힌 형태(closed form)가 아니거나 함수의 형태가 매우 복잡하여 미분계수와 그 값을 계산할 수 없는 경우가 많이 있습니다.
- 2) 또한 실제 미분계수를 계산하는 과정을 컴퓨터로 구현하는 것에 비해 경사하강법은 훨씬 쉽게 구현할 수 있습니다.
- 3) 추가적으로 데이터의 양이 매우 방대한 경우 경사하강법과 같은 반복 수행이 가능한 접근을 통해 해를 탐색하는 것이 연산량 측면에서 더욱 효율적입니다.
인공지능의 경우 최적의 학습 패턴을 위해 자신의 파라미터를 검증해야 하며 이 과정에서 손실 함수를 계산해야 합니다. 검증 과정에서 손실 함수의 값이 가장 낮은 파라미터를 발견했다면 해당 파라미터가 최적임을 검증하게 되는 것입니다.
Gradient Descent (경사하강법): 수식적 이해
지금까지는 경사하강법에 대한 개념적 이해와 인공지능 도메인에서 왜 경사하강법을 사용하는지에 대해 살펴보았습니다. 다음으로는 경사하강법을 사용해서 어떻게 파라미터 \(w\)와 \(b\)를 학습할 수 있는지 수식적을 유도하여 알아보겠습니다. 우리는 지난 시간에 로지스틱 회귀분석을 통해 비용 함수에 대해 정의해보았습니다. 이에 대하여 모델을 학습하면서 \(w\)와 \(b\) 를 찾고 전체적인 학습 모델의 비용 \(J(w,b)\)를 최소화 할 것입니다.
다시 한 번 강조하지만, 경사하강법은 함수의 기울기(i.e., gradient)를 이용해 \(x\)의 값을 어디로 옮겼을 때 함수가 최솟값을 찾는지 알아보는 방법입니다. 산을 내려오는 과정을 다시 떠올려보시기 바랍니다.
- 기울기가 양수라는 것은 \(x\) 값이 커질수록 함수 값이 커진다는 것을 의미하고, 반대로 기울기가 음수라면 \(x\) 값이 커질수록 함수의 값이 작아진다는 것을 의미합니다. - 방향 성분
- 기울기의 값이 크다는 것은 가파르다는 것을 의미하기도 하지만, 또 한편으로는 \(x\)의 위치가 최솟값/최댓값에 해당하는 \(x\) 좌표로부터 멀리 떨어져 있음을 의미하기도 합니다. - 크기
위와 같은 Gradient의 방향 성분과 크기를 이용하면 경사하강법의 수식을 유도할 수 있습니다.
- 특정 포인트 \(x\) 에서 \(x\) 가 커질수록 함수값이 커지는 중이라면 (즉, gradient의 부호가 양수) 음의 방향으로 \(x\) 를 이동시켜야 할 것이고, 반대로 특정 포인트 \(x\) 에서 \(x\) 가 커질수록 함수값이 작아지는 중이라면 (즉, gradient의 부호가 음수) 양의 방향으로 \(x\) 를 이동시켜야 합니다.
- 이를 수식으로 표현하면 다음과 같습니다
$$ x_{i+1}=x_{i} - 이동 거리 \times 기울기의 부호 $$
- 이를 수식으로 표현하면 다음과 같습니다
그렇다면, 이동 거리는 어떻게 산출해야할까요? 이 때 사용하는 것이 바로 gradient의 크기입니다. 이 문제에 대해 다시 잘 생각해보면 미분 계수 값은 극소값에 가까울수록 그 크기가 작아질 수밖에 없습니다. 산을 내려오는 상황으로 다시 돌아오면, 극소값인 지면에서 가까운 지점에 있을수록 산의 경사는 완만해지는 반면 지면에서부터 멀리 떨어져 산 정상에 가까이 있을수록 산의 경사는 심해지는 것을 볼 수 있습니다. 따라서, 이동거리에 사용할 값을 gradient의 크기에 비례하는 factor를 이용하면 현재 \(x\) 의 값이 극소값에서 멀 때는 한 발자국의 너비를 더 넓게 가져가고, 극소값에 가까워졌을 때는 좁게 가져갈 수 있습니다. 즉, 이동거리는 gradient 값을 직접 활용하되, 발자국의 너비를 얼마나 넓고 좁게할지는 사용자가 조절할 수 있도록 수식을 조정해줌으로써 상황에 맞게 이동거리를 맞춰나갈 수 있게 하면 됩니다. 이 때, 이동 거리의 조정 값을 step size (인공지능에서는 learning rate)라고 부르고, 기호는 \(\alpha\) 로 사용합니다.
다시 로지스틱 회귀분석의 비용함수로 돌아와보겠습니다. 파라미터 \(w\)와 \(b\)로 표현되는 비용함수 \(J\)를 간단한 그래프로 나타내기 위해서 \(b\)를 생략하고, 1차원의 \(w\)가 있다고 가정해보겠습니다.
이 경우, 비용함수는 다음과 같은 형태로 나타낼 수 있으며 Global Optima를 찾기 위해 경사하강법을 적용해 볼 수 있습니다. 앞서 \(x\) 를 기준으로 표현했던 수식을 \(w\)로 바꾸어 표현하면 됩니다.
미분계수 항을 \(dw\)라고 나타낸다면, \(w := w - \alpha dw\)로 나타낼 수 있으며, 여기서 \(\alpha\)는 앞서 정의한 바와 같이 Learning Rate (양수)입니다. 위 그래프에서 처럼 제일 오른쪽 위치에서 경사하강법을 시작한다면, 미분항 \(dw\)는 그 지점에서의 gradient의 부호가 양수이기 때문에 \(w\) 의 값은 점점 감소하므로 Global Optima로 향하게 됩니다.
만약 왼쪽에 위치한 지점을 초기값으로 경사하강법을 시작한다면, 이 지점에서의 gradient의 부호는 음수이기 때문에 \(w\) 의 값은 점점 증가하는 방향으로 이동하면서 결국 Global Optima를 향하게 됩니다.
실제 로지스틱 회귀에서는 \(w, b\)의 파라미터가 존재합니다. 따라서 \(J(w,b)\) 에 대한 경사하강법은 다음과 같습니다.
$$Repeat$$
$$w:=w-\alpha \frac{\partial J(w,b)}{\partial w}$$
$$b:=b-\alpha \frac{\partial J(w,b)}{\partial b}$$
경사하강법의 문제점
모든 방법에는 장점만 있을 수 없습니다. 경사하강법에도 두 가지 대표적인 문제점이 존재합니다.
적절한 크기의 step size (learning rate)는 도대체 어떻게 설정해야?
- step size가 큰 경우(보폭이 넓은 경우): 한 번 이동하는 거리가 커지므로 빠르게 수렴할 수 있다는 장점이 있지만, 너무 크게 설정해버리면 최소값을 계산하도록 수렴하지 못하고 함수 값이 계속 커지는 방향으로 최적화가 진행될 수 있습니다.
- step size가 작은 경우(보폭이 좁은 경우): 한 번 이동하는 거리가 작아지므로 발사하는 문제는 방지할 수 있으나, 최적의 \(x\) 를 탐색하는데 소요되는 시간이 오래걸린다는 단점이 있습니다.
적절한 learning rate를 찾기 위해서는 다양한 값을 시도해 보는 것이 좋습니다. 일반적으로 learning rate를 0.1, 0.01, 0.001로 변화시키며 실험합니다. 이 때 learning rate를 큰 값에서 작은 값으로 감소하며 실험하는 것이 좋습니다. 각 learning rate에 대해 모델을 학습시키고, 손실 함수의 값을 모니터링합니다. 값이 안정적으로 감소하면서 수렴하는 learning rate를 선택하는 것이 좋습니다.
내가 찾던 Global Minimum이 아니네?
경사하강법의 또 다른 문제는 Local Minima 문제입니다. 우리가 찾고 싶은 것은 아래의 그림에서 볼 수 있는 빨간점이 표시하는 Global Minimum이지만, 경사하강법의 알고리즘을 시작하는 위치는 매번 랜덤하기 때문에 어떤 경우에는 Local Minima에 빠져 계속 헤어나오지 못하는 경우도 발생합니다.
딥러닝과 같이 복잡한 모델을 사용하면 error surface가 복잡해져서 Local Minima에 빠지기 쉬운 것으로 알려져 있습니다. 이러한 문제점들을 해결하기 위해 기존의 경사하강법에서 다양한 변형 알고리즘들이 개발되었습니다. 그 중 가장 대표적인 방식이 momentum을 이용하는 것입니다. 관련된 내용은 추후에 별도 포스팅에서 다뤄보겠습니다.
참고 자료
경사하강법(gradient descent) - 공돌이의 수학정리노트 (Angelo's Math Notes)
angeloyeo.github.io
'Course Review > Deep Learning Specialization' 카테고리의 다른 글
[Andrew Ng] Neural Networks & Deep Learning | Week 2 (part 1) (2) | 2024.11.24 |
---|---|
[Andrew Ng] Neural Networks & Deep Learning | Week 1 (6) | 2024.11.16 |