:)
CNN - Training 본문
weight를 학습하고 갱신하는 과정을 어떤 방법을 쓰느냐에 따라 다르다.
딥러닝에는 Gradient descent method를 방법을 사용
- 각각의 loss term의 미분 값을 구한 다음 곱해나가면서 기울기 값을 가지고 경사 하강법을 사용해 weight 업데이트하면서 loss 값을 줄이는 방법으로 모델을 학습
SGD - 일반적으로 많이 사용
- 기존 방법은 train db가 100장이 있으면 100장에 대한 iteration forward 돌고 각각의 loss 값을 구해 loss 값에 대한 미분 값을 구해서 한 번에 갱신. 100개 데이터를 다 본 뒤에 100개 데이터에 나온 loss 값을 통해서 gradient를 계산하고 계산한 값을 한 번에 갱신
- 100번을 보는 동안 weight를 갱신할 수 없음. 데이터가 많아질수록 weight가 수렴하기 어려움
- SGD는 각각의 데이터에 대해 Forward 하고 이를 통해 나온 loss값을 가지고 각 weight에 대한 gradient를 계산해서 각 wieght를 갱신
- 이미지 한 장 당 weight를 갱신시키면 노이즈 있는 영상이나 그런 경우에 weight 갱신에 부정적인 영향을 줄 수 있음
- 이런 노이즈가 있다는 단점을 보완 -> mini batch
- 여러 장의 이미지를 한 번에 계산한 다음 그 값을 가지고 weight 갱신
Momentum
- velocity term : 이전 term에서 경사가 하강하는 방향을 그대로 가지고 감. 이전 방향을 고수하는 식으로 loss가 수렴하는 방식.
AdaGrad
- 평균적인 값으로 학습을 진행. 루트 값을 사용하기 때문에 수렴이 느리게 됨.
RMS-prop
- 지수이동평균. AdaGrad 단점을 보완(수렴이 느리게 되는 부분)
Adam
- 많이 쓰고있는 optimizer 중 하나.
Regularization
- overfitting model을 방지하기 위한 방법
- large value의 weight를 가지고 있다면 overfitting되는 경우가 많음. 방지하기 위해 large weight을 penalize
- 작은 value의 weight를 가지게 해서 overfitting의 가능성을 줄인다.
L2 Regularization이 좀 더 smooth한 값을 가짐(제곱을 하기 때문에)
Drop out
- random하게 weight 값을 죽여서 generalize하게 하면서 Overfitting을 피함.
- 학습할 때만 사용
Batch normalization
- convolution을 통해서 나온 값들은 여러가지 range를 가짐.
- batch normalization이 없다면 convolution output이 바로 activation term으로 들어가게 된다. if relu를 사용한다면, out range가 -40~ 10이라면 음수값을 다 죽이게 되므로 학습에 부정적인 영향을 주게 된다.
- activation function에 input이 들어갈 때 그 값들의 범위가 stable 해야함. batch normalization -> 안정적인 분포의 값으로 만들어줌
'AI' 카테고리의 다른 글
Perception 기술 분류 (0) | 2022.05.02 |
---|---|
YOLOv3 시작하기 (0) | 2022.05.02 |
Object Detection (0) | 2022.04.30 |
CNN (0) | 2022.04.26 |
정보이론 (0) | 2022.04.15 |
Comments