Machine Learning

Network Implementation Details

VL_HD 2020. 2. 22. 14:25

데이터를 생성하고, 학습에 사용할 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