지난 시간에 최적화를 공부했습니다. 왜 최적화를 공부했을까요? 최적화를 이해하면 그라디언트 디센트가 목적함수(손실함수)를 최소화하는 방향으로 모델 파라미터 $w$를 조정하는 과정을 이해할 수 있습니다.

(모델 파라미터: Weight, Bias / 하이퍼 파라미터: Learning Rate)

 

최적화를 판단해서 그라디언트 디센트를 할지 말지 결정할 수도 있습니다. 하지만, 최적화 판단을 GD전에 하는 것은 비효율적이기 때문에 실제로는 사용하지 않는다고 설명드렸습니다. 

 

우리가 아직까지 우리가 배운 선형회귀 모델은 아주 단순해서 Convex를 확인하는 알고리즘 필요 없습니다. 어차피 Convex한 모델만 합니다.  $L(w)$는 $w$에 대한 함수인데, 우리가 현재까지 배운 $L(w)$는 선형회귀의 평균제곱합(MSE)이였습니다. 그리고 이 MSE는 겨우 $w$에 대한 2차 함수이고 계수도 $x^2$으로 다 양수니까 Convex 하다는 겁니다. 최고차항이 2차이고 2차항의 계수가 양수니까요.

 

그래도 지금 최적화에 대한 기본적인 이해를 가져가면 딥러닝을 공부할 때 Convex 하지 않은 목적함수에서 Global Minimum을 어떻게 찾는지에 대해서 더 쉽게 이해할 수 있다고 말씀드렸습니다.

 

이번 강에서는 그라디언트 디센트에 대해서 본격적으로 알아보겠습니다. 알고리즘 기본원리와 종류에 대해 가봅시다.~

강의보기: https://www.youtube.com/watch?v=tDcHML8FW1M

 

그라디언트 디센트 알고리즘

 

기본 알고리즘

우리의 목적함수 MSE는 아래와 같습니다. 

$$ L(w) = \frac {1}{N}\sum_{i=1}^{N}(w^Tx_i - y_i)^2 $$

위 $L(w)$를 $w$에 대해 미분하면 아래와 같이 됩니다. 

$$ \nabla L(w) = \frac {2}{N}\sum_{i=1}^{N}(w^Tx_i - y_i) x_i $$

주로 $x$를 미분해 와서 머릿속이 조금 복잡해지지만, 충분히 하실 수 있습니다.

Gradient Descent Algorithm

 

$x$가 아니라 $w$에 대한 거라는 것만 익숙해지신다면, 위 그림 이해는 쉽습니다. 2차 함수만 이해하면 됩니다. 제 경험상 많은 분들이 그라디언트 디센트 부분은 금방 이해하시더라고요.

무작위 시작점 $w_0$가 그림의 그래프에서 최소점보다 오른쪽에 있으면 $w$에 대한 미분값은 양수가 되어 $w_0$부터 시작하여 점점 작아집니다. 이를 $w$에 대한 미분 값 $\nabla L(w)$가 $\epsilon$ 보다 작거나 같을 때까지 반복한다는 거죠.

 

$w_0$가 그림의 그래프에서 최소점보다 왼쪽에 있을 때도 현재 알고리즘이 맞는지 각자 생각해 보도록 합시다. 

 

Learning Rate(LR) $\gamma$

우리가 처음 배우는 Hyper Parameter입니다. 다른 종류의 파라미터가 하나 더 있었습니다. 네 맞습니다. 모델 파라미터였습니다. $w$와 $b$, Weight와 Bias였습니다. 우리가 모델을 만들기 위해서 구해야 하는 값이죠. Hyper Parameter는 모델을 만들 수 있도록 조정할 수 있는 값들입니다. 하이퍼 파라미터를 구하는 방법이 뭘까요?

별다른 방법이 없습니다. 그냥 성능이 잘 나온다 싶은 놈을 고르면 됩니다. 여러 개 넣어보거나 경험적 지식으로 후보군을 선정해서 돌려본 다음에 성능이 잘 나온 걸로 고르면 됩니다. 하이퍼 파라미터를 선택하는 방법에 대해서는 Youtube 강의 14강에서 다뤘습니다. 궁금하신 분들은 Youtube 강의 14강 2분 9초부터 3분까지 들으시면 됩니다.

https://www.youtube.com/watch?v=w8q1LnX3yRQ

 

아무튼 그라디언트 디센트에서 LR이 너무 크면 $w$ 값이 최소점으로 수렴하지 못하고 최소점의 왼쪽, 오른쪽으로 진동하며 움직일 수 있고, 너무 작으면 수렴하는데 너무 많은 시간이 걸릴 수 있습니다.

여기까지 대부분 학습하는 분들이 잘 이해해서 자세한 설명은 생략하겠습니다. 부족하다 느껴지시는 분들은 유트브 강의를 보시면 좀 더 도움이 되실 겁니다.

그라디언트 디센트 알고리즘의 종류

Batch, Stochastics, Mini Batch 3가지가 있습니다.

 

Batch GD

위 그림에서 아래 부분입니다. 가장 기본적인 부분이죠. 잘 봐야 할 부분은 아래와 같습니다.

$$ L(w) = \frac {2}{N}\sum_{i=1}^{N}(w^Tx_i - y_i) x_i $$

$\sum$가 있으니, 모든 데이터에 대해서 다 더해준 값의 평균을 미분해 준다는 겁니다. 모든 데이터에 대해서 하니까 이 전에 배운 Direct Solution 보다는 속도면에서 괜찮을지 몰라도 맘에는 안 듭니다. 더 빠르게 할 수 있는 방법이 있을 거 같습니다.

 

Stochastics GD

Stochastics는 주식하시는 분들은 대부분 들어보셨을 것 같습니다. 확률적이라는 뜻입니다. 위 Stochasitcs 식에서 보면 Batch와 결정적 차이가 있습니다. 네. 맞습니다. $\sum$이 없습니다. 데이터 하나에 대해 바로 $w$를 업데이트합니다. 그리고 정해진 값만큼 반복하거나 $w$값에 업데이트가 없을 때까지 반복합니다.

따라서, 운이 좋으면 BGD에 비해서 빠르게 괜찮은 Global Minimum으로 수렴하지만, 운이 없으면 Local Minimum에 빠질 수 있습니다. 따라서 데이터를 적용할 때마다 잘 섞어줄 필요가 있습니다.

무슨 소리냐고요? 이해가 잘 안 갈 때 가장 좋은 방법은 극단적인 예시를 보는 겁니다.

위 SGD 그림에서 그래프를 봅시다. 파란색 동그라미가 데이터 포인트라고 하고 epoch가 4라고 가정하겠습니다. 그리고 빨간 선은 BGD로 구한 우리의 빨간 선입니다. 만약 우리가 SGD를 하면서 4개의 Point를 분홍색으로 고른다면, 많은 데이터 포인트에 대해서 다 고려할 필요 없이 4개의 포인트 만으로도 빨간 선과 거의 유사한 선을 구할 것입니다. 아주 빠르게 수렴할 수 있다는 겁니다.

하지만 만약 4개의 포인트를 빨간색으로 고른다면 초록색 선으로 수렴해 버릴 겁니다. Local Minimum에 빠지는 거죠. 그래서 데이터를 잘 섞어줄 필요가 있는 겁니다. 이해가 가셨나요? Youtube를 보신다면 더 잘 이해하실 수 있을 겁니다.

 

Mini Batch GD

예상하셨겠지만 BGD와 SGD의 절충안입니다. BGD는 한 번에 전체 데이터를 고려해서 하고, SGD는 한번에 하나의 데이터르 고려해서 합니다. 절충안인 Mini Batch는 적절한 데이터 수로 그룹핑해서 돌립니다. 총 데이터 수가 100개 일 때 10개 데이터 포인트를 골라서 정해진 epoch만큼 진행한다는 겁니다.

Batch Size를 어떻게 정할까요? 네, 이것도 하이퍼 파라미터이고 별다른 방법이 업습니다. 데이터마다 다를 수 있기 때문입니다.

세 개 GD 알고리즘 성능

 

세개 알고리즘에 대한 아주 유명한 그림입니다. 위의 수식과 설명을 이해하셨다면 이 그림의 의미를 분명히 이해하셨을 겁니다. 뭔가 답답하신 분들은 Youtube 강의를 보시면 될 것 같습니다. 저는 개인적으로 혼자 생각해 보시는 것을 강력히 추천드립니다.

Over Fitting

데이터가 너무 부족하거나 내재된 편향이 있을 때 오버피팅이 발생할 수 있습니다. 데이터가 적을 때 우리의 회귀선이 모든 데이터 포인트를 지나가게 한다면 어떨까요?

 

현재 주어진 데이터(훈련데이터)는 완벽하게 설명하고 있다고 볼 수 있습니다. 그런데 새로운 데이터는요(테스트 데이터, 실제데이터)? 선 위에 없을 확률이 높아집니다. 그런데 현재 데이터를 모두 선위에 두려고 복잡한 다항식을 만들었다면 계속해서 다르게 찍히는 새로운 데이터의 경향성과 관계가 없을 확률도 높아지는 겁니다.

오버피팅은 다시 다룰 예정이니 이 정도만 하고 마치겠습니다.

 

감사합니다.

+ Recent posts