[파이썬 머신러닝 가이드] 회귀 - 경사 하강법(Gradient Descent)

Q. 어떻게 비용함수가 최소가 되는 w 파라미터를 구할 수 있을까?

 

Gradient Descent

원래 함수의 최대, 최소를 점진적으로 근사하여 찾는 방법.

(점진적으로 반복적인 계산을 통해 w 파라미터 값을 업데이트 하면서 오류 값이 최소가 되는 w 파라미터를 구하는 방식)

반복적으로 비용 함수의 반환 값(예측값과 실제값의 차이)이 작아지는 방향성을 가지고 w 파라미터를 지속해서 보정해 나감.

→ 오류 값이 더이상 작아지지 않으면 그 오류 값을 최소 비용으로 판단하고, 그 때 w 값을 최적 파라미터로 반환

 

**Gradient = 원래 함수가 가장 빠르게 증가하는 방향 → 최솟값 구하려면 - 붙이면 됨.

이 비용함수를 최소화 하는 w0과 w1의 값은, 두 개의 w파라미터인 w0과 w1 각 변수에 순차적으로 편미분을 수행해 얻을 수 있음.

 

 

Q. 구한 편미분 값으로 어떻게 파라미터를 업데이트 할까?

A. 업데이트는 새로운 w1을 이전 w1에서 편미분 결괏값을 마이너스 하면서 적용. (구한 편미분 값 gradient 자체는 원래함수가 가장 빠르게 증가하는 방향을 의미 ( 애초에 미분 자체가 기울기 구하는거고, gradient는 그 중 가장 가파른!)

 

  • 경사하강법의 단점

모든 학습 데이터에 대해 반복적으로 비용함수 최소화를 위한 값을 업데이트 하기 때문에 수행 시간이 매우 오래 걸림

→ 확률적 경사 하강법 (Stochastic Gradient Descent) 사용

 

-batch gradient descent

: 전체 입력 데이터로 w가 업데이트 되는 값을 계산(모든 입력 데이터를 하나의 batch로 한번에)

: 매 스텝마다 batch 전체에 대한 계산 필요. 데이터셋이 너무 커지면 속도가 느려짐.

: 학습률이 너무 작은 경우엔 시간이 오래 걸리고, 너무 큰 경우엔 최적해를 지나쳐 해를 찾지 못할수도

 

-mini-batch gradient descent

: 입력 데이터셋을 작은 크기(mini-batch)의 무작위 부분 집합으로 나누어서 gradient를 구하는 방법

: stochatic g.d보단 불규칙한 움직임이 덜하고, local minimum에서 빠져나오기가 상대적으로 더 어려움.

 

-stochastic gradient descent(sequential learning, online learning)

: 일부 데이터만 이용해 계산 (무작위로 선택한 한 개의 sample에 대해서만 계산)

: 대규모 데이터셋을 처리하는데 유리

: 선택하는 사례의 무작위성으로 움직임이 불규칙

: batch에 비해 local optimum에서 쉽게 빠져나올 수 있음.

: 최적해에 도달하지만(수렴하더라도) 지속적으로 요동

: batch와 마찬가지로 global optimum이라는 보장이 없음 (모든 g.d의 한계)

 

 

  • 피처가 여러 개인 경우

동일하고, X만 그냥 X matrix로 표현.

피처가 M개 있다면 그에 따른 회귀 계수도 M+1개(1개는 w0) 도출됨.

𝑌 ̂ =𝑤_0+𝑤_1∗𝑋_1+𝑤_2∗𝑋_2+… +𝑤_100∗𝑋_100

 

데이터의 개수가 N이고 피처 M개의 입력 행렬을 Xmat, 회귀 계수 w1,w2,…w100을 W 배열로 표기하면,

𝑌 ̂ =𝑛𝑝.𝑑𝑜𝑡(𝑋_(𝑚𝑎𝑡, ) 𝑊^𝑇 )+𝑤0