Pytorch_weight_initialization

Pytorch Weight initialization에 대하여

모두를 위한 딥러닝 - 파이토치 강의 참고

  • 모델을 학습하기 이전에 weight의 초기값을 설정하는 문제는 모델의 학습에 굉장히 중요한 문제였습니다.

  • 초기에 이 문제를 해결하기 위해서 사용했던 방법은 RBM(restricted boltzmann machine)이었습니다.

  • RBM은 layer1과 다음 레이어 layer2를 통해 weight1을 학습한 후 w1을 고정한 상태에서 layer2와 layer3를 통해 weight2를 학습하는 과정을 반복하는 방법입니다.

  • RBM

  • 하지만, 요즘에는 새로운 initialization 방법들이 제안되면서 RBM을 많이 사용하지 않고 있습니다.

  • 대표적으로 간단히 initialization할 수 있는 두 가지 방법인 Xavier / He initialization 에 대해 알아보겠습니다.

  • Xavier initialization

    • Xavier / He initialization 모두 Normal initialization 방법과 Uniform initialization 방법을 가지고 있으며 모두 간단한 수식을 통해 이루어집니다.

    • Xavier Normal initialization

    • nin은 layer의 input수, nout은 layer의 output수를 뜻합니다.


    • Xavier Uniform initialization

    • nin은 layer의 input수, nout은 layer의 output수를 뜻합니다.


  • He initialization

    • He Normal initialization

    • nin은 layer의 input수를 뜻합니다.


    • He Uniform initialization

    • nin은 layer의 input수를 뜻합니다.

  • Pytorch에서는 torch.nn.init패키지를 통해서 사용할 수 있습니다.

  • ReLU에 관해서 작성한 포스트에서 작성한 코드와 달라진 점은 weight를 초기화해주는 부분뿐입니다.

  • 먼저 linear layer를 만들고,

1
2
3
4
linear1 = torch.nn.Linear(784, 256, bias=True)
linear2 = torch.nn.Linear(256, 256, bias=True)
linear3 = torch.nn.Linear(256, 10, bias=True)
relu = torch.nn.ReLU()
  • 다음과 같이 xavier_uniform으로 초기화 할 수 있습니다.
1
2
3
torch.nn.init.xavier_uniform_(linear1.weight)
torch.nn.init.xavier_uniform_(linear2.weight)
torch.nn.init.xavier_uniform_(linear3.weight)
  • ReLU 포스트의 코드와 다른점은 weight initialization뿐이지만 Accuracy가 상승된것을 확인할 수 있습니다.

Full Code

Full Code

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×