初始化方法 | 函数名 | 原理 | 适用场景 | 优点 | 缺点 |
---|---|---|---|---|---|
零初始化 | nn.init.zeros_ | 将所有的权重参数初始化为零 | 不适用(极少情况) | 简单易实现 | 会导致所有神经元学习到相同的特征,造成对称问题,模型无法收敛 |
随机初始化 | nn.init.uniform_ | 在指定的均匀分布范围内随机初始化权重参数 | 简单的前馈神经网络 | 打破对称性,使神经元可以学习不同的特征 | 可能导致梯度消失或梯度爆炸问题 |
高斯初始化 | nn.init.normal_ | 从指定的高斯分布中随机采样来初始化权重参数 | 简单的前馈神经网络 | 打破对称性,使神经元可以学习不同的特征 | 可能导致梯度消失或梯度爆炸问题 |
Xavier初始化 | nn.init.xavier_uniform_ 或 nn.init.xavier_normal_ | 根据输入和输出神经元的数量来调整初始化的范围,使得输入和输出的方差保持一致 | 适用于使用Sigmoid或Tanh激活函数的网络 | 缓解梯度消失和梯度爆炸问题,加快模型收敛速度 | 对于ReLU激活函数效果不佳 |
He初始化 | nn.init.kaiming_uniform_ 或 nn.init.kaiming_normal_ | 考虑了ReLU激活函数的非线性特性,根据输入神经元的数量来调整初始化的范围 | 适用于使用ReLU激活函数的网络 | 缓解梯度消失和梯度爆炸问题,加快模型收敛速度 | 对于Sigmoid或Tanh激活函数效果不佳 |
正交初始化 | nn.init.orthogonal_ | 初始化权重矩阵为正交矩阵 | 循环神经网络(RNN) | 保持梯度在反向传播过程中不会消失或爆炸,有助于RNN的训练 | 计算复杂度较高 |
注意:本文归作者所有,未经作者允许,不得转载