Loss 최소화, SGD, 가중치 갱신 방법

2022. 3. 6. 17:05AI/Deep learning

    목차
반응형

loss function

loss(x, y, w)

e.g.,

            ∑(w x - y)^2

 

loss 함수의 결과를 최소화 하는 방향으로 w 값을 조절

즉, w (변수별로) 미분하여 기울기가 최소가 되는 곳을 찾으면 됨 

 

 

Regression loss function

L1 loss 

abs

        |w 𝜙(x) - y|

outlier에 둔감

모든 값에 골고로 영향을 받음

 

L2 loss

squared

        (w 𝜙(x) - y)^2

L2는 에러를 더 크게 함

즉, outlier에 더 크게 영향을 받음

 

 

SGD (Stochastic Gradient Descent)

train loss를 최소화 하도록 함

 

GD (Gradient Descent)

f(x) = x^3 – 2x^2 + 2

위 목적 함수의 cost를 최소화 하자. 

    GD

            n

        min ∑ wi(x - bi)^2

           i=1

 

            w random하게 정함

loss(w)
            | \
            |  \
            |   |
            |    \          /
            |     +-      -+
            |       \    /
            |        +--+
            +---------------------- w
                |   |   |   |
                w   w  w  w
               (1)  (2) (4) (3)

입력으로 구해진 loss에 대해 w로 미분

 

            d loss

            ------ = gradient

            d w(1)

 

w(1)의 기울기는 음수 -> 우측으로 이동

w(2)의 기울기도 음수 -> 우측 이동

w(3)의 기울기는 양수 -> 좌측이동

w(4)의 기울기는 0 -> 수렴

 

* w가 0이 되도록 하는 것이 '학습'

 

w 벡터의 모든 변수에 대해 편미분 한 벡터를 기울기라 함

즉, 기울기는 벡터임

 

기울기 (Gradient)

 

w = w – learning_rate * TrainLoss(w)

 

위와 같이 구해진 기울기를 w에서 빼면 됨

기울기가 음수면 w가 우측으로 가게 되고, 

기울기가 양수면 w가 좌측으로 이동하게 됨

 

            w = [0, ..., 0] 초기값(random)

 

            for t in range(T):

                w <- w -  step_size * d TrainLoss(w)

                                      ------------

                                       dw

 

기울기 구하기

(w 𝜙(x) - y)^2 에서

w w1, w2,. ..로 각각 편미분 하는 것

 

GD의 경우 모든 train data에 대해 다 더해서 곱하여 w를 갱신 (, w의 갱신이 오래걸림)

너무 느려서 SGD가 나옴

 

가중치 갱신 방법

  • SGD, batch, mini batch
  • batch
    • 전체 학습 data를 모두 학습한 후 가중치를 계산
    • 모든 loss의 '평균'으로 가중치를 갱신
  • SGD
    • 학습 시마다 loss를 가지로 가중치를 갱신
  • Mini-batch
    • SGD와 batch를 섞은 것
    • 전체 데이터를 N 등분하여 각 등분의 데이터를 학습 후 이들의 loss의 평균으로 가중치를 갱신
  • ADAM
    • Adatpive 하게 learning rate를 고려하는 방식
    • 이전 w 방향을 기억하고 있다가 방향이 갑자기 바뀌지 않도록 update 하는 방식
    • 실험적으로 이렇게 했더니 더 잘 찾더라 라는 것임

 

반응형

'AI > Deep learning' 카테고리의 다른 글

RNN(Recurrent Neural Network)  (0) 2022.03.06
seq2seq  (0) 2022.03.06
DLFS - CH 3  (0) 2021.09.27
텐서(Tensor)  (0) 2021.08.16
data partitioning, hyper-parameter tuning  (0) 2021.08.16