权值初始化是搭建神经网络之后的重要步骤。适当的初始化可以加速模型的收敛,而不适当的初始化则会使梯度消失或爆炸,下面主要针对常见的激活函数简要介绍两种权值初始化方法。
- Xavier 方法
该方法主要针对饱和激活函数如 sigmoid 和 tanh 等。pytorch中的调用语句为:
tanh_gain = nn.init.calculate_gain('tanh')
nn.init.xavier_uniform_(m.weight.data, gain=tanh_gain)
- Kaiming 方法
该方法主要针对非饱和的激活函数如 ReLU等。pytorch中的调用语句为:
nn.init.kaiming_normal_(m.weight.data)
一个例子(用kaiming方法初始化一个全连接层的权值):
self.fc = nn.Linear(input_channels, hidden_channels)
nn.init.kaiming_normal_(self.fc.weight)
具体的原理和分析,参见这篇文章:
[PyTorch 学习笔记] 4.1 权值初始化