参考文章:**CSDN 知乎**

什么是参数初始化?

参数初始化是指在神经网络训练开始前,为神经网络的权重和偏置(统称为参数)设定初始值的过程。这些初始值通常通过特定的随机分布(如均匀分布、正态分布)或特定方法(如 Xavier、He 初始化)生成。

为什么要进行参数初始化?

神经网络的训练过程,就是对权重参数不断更新的过程,在训练开始的时候,参数肯定是要有一个初始值,这个初始值就是通过初始化来的。初始值的选择会直接影响到模型的收敛速度和性能。

如果所有权重初始化为相同值(如 0),神经元会学习到相同的特征,导致网络无法有效区分不同神经元的功能。随机初始化打破这种对称性,使神经元学习多样化特征。什么意思呢?在神经网路中,每一个神经元的输出是其输入、权重和偏置、激活函数的函数。

如果权重和偏置都初始化为相同的值,那么在经过相同的输入的时候,再经过同样的激活函数,所有的神经元输出都相同,无法区分不同神经元的作用。

另外、在反向传播中,梯度是根据损失函数对权重的偏导数计算的。如果权重的初始值是相同的,那么同一层中所有神经元的梯度都是一样的,那么参数的更新也是一样的,无法学习到不同的特征。why?

因为当该层所有的神经元的初始权重值是相同的,同样的输入在经过同样的激活函数,那么其前向传播计算出来的输出值也是相同的,假设一个全连接层,激活函数为 $\sigma$,那么神经元的输出 $z$(也就是激活函数的输出)和该层网络的输出 $y$为:

$$ z = Wx+b\\y = \sigma(z) $$

因为权重W和偏置b都是相同的,输入x也是一样的,那么输出z也是相同的。在反向传播的时候,梯度是基于损失函数对权重的偏导数计算的,由于所有神经元的输出相同,它们的激活函数导数(例如 ReLU、sigmoid 等)也相同,因此对权重的梯度也是相同的。如下:

1)损失函数对神经元输出的梯度:

$$ \frac{\partial{L}}{\partial z} = \frac{\partial{L}}{\partial y}\frac{\partial{y}}{\partial z} $$

$\frac{\partial{y}}{\partial z}$就是激活函数 $\sigma$的导数: $\sigma'$,所以上式子变为:

$$ \frac{\partial{L}}{\partial z} = \frac{\partial{L}}{\partial y}\sigma' $$

2)损失函数对权重的梯度:

$$ \frac{\partial{L}}{\partial W} = \frac{\partial{L}}{\partial z}\frac{\partial{z}}{\partial W} $$

带入1)中的公式得到:

$$ \frac{\partial{L}}{\partial W} = \frac{\partial{L}}{\partial y}\sigma'\frac{\partial{z}}{\partial W}=\frac{\partial{L}}{\partial y}\sigma'x $$

因为激活函数是相同的,输出也是相同的所以, $\sigma'$也是相同的,而 $\frac{\partial{L}}{\partial y}$是损失函数对取决于后续层的计算和损失函数,若后续层的计算也就是这样的,那么所有层的 $\frac{\partial{L}}{\partial y}$都是一样的,这样一来,对权重的梯度只取决于输入x,而x又是一样的,那所有权重的梯度也是一样的,最终所有的参数的更新都是一样的,这个就是对称性。

神经网络的强大之处在于不同神经元可以学习数据的不同特征(如边缘、纹理等)。权重初始化相同会导致所有神经元在训练过程中始终保持相同的权重,无法捕捉数据的多样性。

因为不适当的权重初始化会导致每层的输出变化剧烈。例如,如果某一个权重非常小,神经元的输出就可能为负,那么经过激活函数(以RELU为例)之后,输出变为0(ReLU 的“死亡神经元”问题),导致梯度为0,后续参数无法更新,这就是梯度消失。刚开始训练,梯度就没了,后续参数都不更新了,后面再训也是无稽之谈。若权重过大,导致神经元的输出值很大,那么在反向传播的时候,梯度也可能会很大,那么权重更新的幅度就会很大,训练很不稳定,容易出现难以收敛的情况。

好的初始化方法能使网络在训练初期就处于较优的状态,也就是说初始化的参数已经接近最优的参数组合了,网络可以更快的达到最优状态。减少收敛所需迭代次数,提高训练效率。