티스토리 뷰

 

 

 

 

Introduction to Machine Learning with Python

Chapter 2. 지도학습


경사 하강법 (Gradient Descent)

 
  • 경사하강법은 예측함수를 만들고, 훈련데이터에 대한 예측결과 오류를 점점 줄여나가는 방법이다.
  • 선형회귀에서 속성이 하나일 때, 즉 키가 입력값이고 몸무계가 목표값일 때를 예로 들자.

    ˆy=wx+b

  • 이 경우, 목표값인 y 에 예측값인 ˆy 가 최대한 근접하도록 wb 값을 구해야 한다.

  • yˆy 의 오류를 수치화한 값이 앞에서 배운 MSE(Mean Squared Error) 이다.

    MSE=1NN1i=0(yiˆyi)2 =1NN1i=0(yi(wxi+b))2

  • 경사하강법의 목표는 오류(비용 또는 손실) 값인 MSE 를 최소화하는 w, b 값을 찾는 것이다. 그런데 위의 수식을 보면 x 와 y 의 값은 데이터에서 주어진 상수이므로, 오류는 w 와 b 의 2차함수임을 알 수 있다.

    오류를 나타내는 용어는 여러가지이다. 오류(error), 비용(cost), 손실(loss) 등이다. 이를 비용함수(cost function) 이라는 용어로도 사용하는데, 이것은 w 와 b 의 값을 인자로 보기 때문이다.

 

(출처: https://hackernoon.com/gradient-descent-aynk-7cbe95a778da)

 
  • 위의 그림을 보며 설명해 보자. 그림에서 J(w) 는 MSE 를 의미한다. 다른 말로는 비용함수 라고도 한다.
  • w 값에 따라 비용함수의 값이 변하는데, 최종적으로 제일 아래부분에 도달하는 w 값을 찾아야 한다.
  • 경사하강법에서는 w 와 b 에 대해 초기값을 지정하고 시작한다. 예를 들어 w=5, b=1 과 같다. 까만 점이 w=5 라고 가정하면 그 부분에서의 기울기값 만큼 반대방향 으로 w 값을 바꾸어주면 된다.
  • 이렇게 단계적으로 w 값을 바꿔가면서 비용값을 최소화 시키는 방법이 경사를 따라 내려가는 것과 비슷하다고 해서 경사하강법이란 이름으로 부른다.
 
  • 위 그림에서 기울기 값은 아래와 같이 구한다.

    MSEw=2NN1i=0(yiˆyi)xi

  • 기울기 만큼 w 값을 줄여나가야 하므로 새로운 w 값은 아래와 같다.

    wwηMSEw=w+2NηN1i=0(yiˆyi)xi

  • 여기서 η 는 학습률(learning rate)로서 한번에 얼마만큼 w 값을 바꿔나갈 지를 지정한 값이다. 보통은 아주 작은 값으로 지정한다.

  • 이런 과정을 여러번 반복하면 결국 비용함수를 최소화하는 w 값을 근사적으로 얻을 수 있다.

 
  • 위에서 선형회귀를 예로 들었지만, sigmoid 함수로 예측함수를 지정하면 로지스틱 회귀가 된다.

    ^yi=11+e(wxi+b)

  • 속성이 하나가 아니라 m 개일 때로 일반화 하면 아래와 같다. (속성계수인 w 값도 m 개가 된다.)

    ^yi=m1j=0wjxij+b
    or
    ^yi=m1j=0f(wjxij+b)

 
  • 경사하강법은 신경망딥러닝의 핵심 알고리즘이다. 딥러닝을 이해하려면 경사하강법에 대한 이해는 필수이다.
  • sklearn.linear_model 에 있는 SGDRegressor 와 SGDClassifier 를 활용할 수 있다. 이들은 기존 선형 알고리즘과 결과는 동일하며 단지 내부 알고리즘에 차이가 있을 뿐이다.
  • 경사하강법은 w 값을 변경하는 시기와 관련되어 아래 세가지로 구분한다.
    1. 배치(Batch) 경사하강법 : 샘플을 한번에 모두 넣어 w 값을 한번 바꾼다. 이를 epoch(시대) 수 만큼 반복한다.
    2. 확률적(Stochastic) 경사하강법 : 샘플 하나를 적용할 때 마다 w 값을 바꾼다.
    3. 미니배치(Mini batch) 경사하강법 : 샘플을 여러 세트로 나누어 한 세트를 적용할 때 마다 w 값을 바꾼다. 모든 세트가 끝나면, epoch 만큼 반복한다.
 

[참고] 경사하강법의 일반해

  • 아래 수식을 활용하면 Numpy 를 사용하여 선형회귀나 로지스틱회귀를 구현할 수 있다.

^yi=f(m1j=0wjxij+b)
Loss=1NN1i=0(yiˆyi)2
Losswj=2NN1i=0[(yiˆyi)fxij]
Δwj=ηLosswj=η2NN1i=0[(yiˆyi)fxij]
Δb=ηLossb=η2NN1i=0[(yiˆyi)f]

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함