데이터를 생성하고, 학습에 사용할 network를 만든 뒤에 세부적인 설정은 어떻게 하여야 하는것일까에대해 이번 포스트에서 다룰 것이다.
-
Select last Layer of Network
-
Select loss function
-
Optimization
딥러닝 알고리즘에서 신경망의 마지막 layer에 사용하는 오차함수 및 활성화 함수의 종류는 다음과 같이 나타낼 수 있다.
Problem |
Activation function |
Loss function |
Binary classification |
Sigmoid |
nn.CrossEntropyLoss() |
Multi class classification |
Softmax |
nn.CrossEntropyLoss() |
Multi label classification |
Sigmoid |
nn.CrossEntropyLoss() |
Regression |
- |
MSE |
Vector Regression |
- |
MSE |
Weight Regularization은 저번 포스트를 참고하면 될것이다.
학습률 선정에도 여러가지 방법이 있다. pytorch에서는 학습속도를 조정하는 기술을 제공한다. 이 기능은 torch.optim.lr_scheduler 패키지에 포함되어 있다.
-
StepLR : 이 스케쥴러는 2가지 매개변수를 갖는다. 학습속도를 변경해야 하는 주기인 step_size와 learning rate의 변경률을 나타내는 gamma이다. lr = 0.1, step_size = 5, gamma = 0.9로 설정되어 있다면 epoch이 5가 될때 learning rate는 0.1 * 0.9인 0.09로 바뀌어 학습이 진행되게 된다.
위의 코드는 SGD와 scheduler를 사용한 예제이다. 또한 learning rate가 epoch이 변함에 따라 변화하여야 하므로 step_lr_scheduler.step()이라는 함수를 for epoch in range(epochs): 안에 넣어두어야 한다.
-
MultiStepLR : StepLR과 비슷하게 작동한다. 하지만 이 스케쥴러는 milestone이라는 매개변수를 이용하여 특정 epoch에 learning rate가 변화하도록 작동된다.
코드 상으로는 milestone = [100, 150] 으로 설정하여 100번쨰 epoch, 150 번째 epoch에 learning rate를 변화하는 방법을 이용했다.
-
ExponentialLR : 위의 스케쥴러와 비슷하게 각 에폭에 대해 gamma 값을 사용한다.
-
ReducaLROpPlateau : 일반적으로 사용되는 방법이다. 학습 오차, 검증오차 또는 정확도와 같은 특정 항목이 saturation이 일어날때 사용된다. 학습률을 초깃값의 2~10배 까지 줄이는것이 일반적인 방법이다.
이상으로 이번 포스팅을 마치도록 하겠다.
'Machine Learning' 카테고리의 다른 글
How to Reduce Overfitting? (0) | 2020.02.22 |
---|---|
Introduction of ML (0) | 2020.02.22 |