Pytorch Note23 参数初始化
全部笔记的汇总贴: Pytorch Note 快乐星球
除了数据的预处理外,在进入网络训练之前,我们还需要作参数的预处理。
参数初始化对模型具有较大的影响,不同的初始化方式可能会导致截然不同的结果,所幸的是很多深度学习的先驱们已经帮我们探索了各种各样的初始化方式,所以我们只需要学会如何对模型的参数进行初始化的赋值即可。
PyTorch 的初始化方式并没有那么显然,如果你使用最原始的方式创建模型,那么你需要定义模型中的所有参数,当然这样你可以非常方便地定义每个变量的初始化方式,但是对于复杂的模型,这并不容易,而且我们推崇使用 Sequential 和 Module 来定义模型,所以这个时候我们就需要知道如何来自定义初始化方式
全0初始化
其实最简单的就是我们可以将参数全部初始化为0
但是实际上我们是不应该采用这一种策略的。首先,我们并不知道训练之后的网络最后权重更新的是多少,但是知道数据在进入网络之前经过了合适的预处理,所以我们可以假设最后的权重有一半是正的,一半是负的,所以将参数全部初始化为0似乎是一个非常好的选择。但这是不对的,因为如果神经网络中每个权重都被初始化成相同的值,那么每个神经元就会计算出相同的结果,在反向传播的时候也会计算出相同的梯度,最后导致所有权重都会有相同的更新。换句话说,如果每个权重都被初始化成相同的值,那么权重之间失去了不对称性。