2022. 3. 6. 17:05ㆍAI/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 |