Optimization
딥러닝에서 Optimization(최적화)란 손실함수(Loss Function) 값을 최소화하는 파라미터를 구하는 과정이다. 딥러닝에서는 학습 데이터를 입력하여 네트워크 구조를 거쳐 예측값(y^)을 얻습니다. 이 예측값과 실제 정답(y)과의 차이를 비교하는 함수가 손실함수이다.
즉, 모델이 예측한 값과 실젯값의 차이를 최소화하는 네트워크 구조의 파라미터를 찾는 과정이 최적화이다.
Gradient Descent
경사하강법은 함수의 기울기(=gradient)를 이용해서 함수의 최소값 일 때의 값을 찾기 위한 방법이다. 기울기가 양수인 경우는 값이 증가할수록 함수 값도 증가하고, 반대로 음수인 경우에는 값이 증가할수록 함수 값이 감소한다. 그리고 기울기 값이 크다, 기울기가 가파르다는 것은 최소값으로부터 거리가 멀다는 뜻이다.

이 점을 이용해서 기울기가 양수라면 음의 방향으로 를 옮기면 되고, 기울기가 음수라면 양의 방향으로 를 옮기면 된다.
- 이를 공식으로 옮기면 다음과 같다.
식 (1)에서 기울기의 부호는 알 수 있지만, 이동 거리는 어떻게 구해야 할까?
미분 계수(=기울기=gradient)는 극소값에 가까워질수록 값이 작아진다. 따라서, 이동거리에는 미분 계수와 비례하는 값을 이용한다. 그럼 극소값에서 멀 때는 많이 이동하고, 극소값에 가까울 때는 조금씩 이동할 수 있다.
- 이렇게해서 유도되는 최종 공식은 다음과 같다.
보통 함수의 최솟값을 찾고자 할 때, 미분계수를 구함으로써 찾곤 한다(컴퓨터를 사용하는 것이 아닌 그냥 수학 문제를 풀 때). 컴퓨터에서 해당 방법을 사용하지 않는 이유는 다음과 같다.
- 실제 분석에서(특히, 딥러닝 알고리즘을 활용하는 경우) 보게 되는 함수들은 형태가 굉장히 복잡해서 미분계수와 그 근을 계산하기 어려운 경우가 많음
- 미분계수 계산 과정을 컴퓨터로 구현하는 것보다 경사하강법을 구현하는 것이 훨씬 쉬움
- 데이터의 양이 매우 큰 경우 경사하강법과 같은 순차적인 방법이 계산량 측면에서 훨씬 효율적
Step size
적절한 step size 선택은 매우 중요하다. Step size가 큰 경우 이동 거리가 커지므로 빠르게 수렴할 수 있다는 장점이 있지만, 최소값으로 수렴되지 못 하고 함수값이 발산할 여지가 있다.
반면에 step size가 너무 작으면 발산하지는 않겠지만, 최소값을 찾는데 너무 오래 걸릴 여지가 있다.

Gradient Descent의 문제점
1. Local minima
경사하강법의 또 다른 문제는 local minima이다. 우리가 찾고 싶은 건 global minima(함수 전체에서의 최소값)이지만, 어떤 경우에는 local minima에 빠져 벗어나지 못 하는 상황이 발생한다.

하지만 최근에는 실제로 딥러닝이 학습을 할 때, local minima에 빠질 확률이 거의 없다고 한다.
위의 그래프는 가중치(w)가 1개인 모델이지만 실제 딥러닝 모델에서는 w가 수도 없이 많고, 그 수 많은 w가 모두 local minima에 빠져야 w 업데이트가 정지된다. 이는 이론적으로 거의 불가능에 가까운 일이므로, 사실상 local minima는 고려할 필요가 없다.
2. 학습시간
한번 학습할 때마다 모든 데이터셋을 이용한다. 즉, 손실함수의 최솟값을 찾아 나가기 위해 한 칸 전진할 때마다 모든 데이터를 다 훑는다는 것이다. 따라서 학습이 굉장히 오래 걸린다(최솟값을 찾는데 오래 걸린다).
'Data Science > 딥러닝' 카테고리의 다른 글
CNN (0) | 2022.12.03 |
---|---|
Optimizer (0) | 2022.12.03 |
Backpropagation (역전파) (0) | 2022.12.02 |
Activation Function (0) | 2022.11.24 |
Perceptron (0) | 2022.11.24 |