神经网络的参数初始化【数学】

🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎人工智能和前端开发。
🦅个人主页:@逐梦苍穹
📕所属专栏:人工智能
🌻gitee地址:xzl的人工智能代码仓库
✈ 您的一键三连,是我创作的最大动力🌹
🛸神经网络参数初始化的PyTorch实现:https://xzl-tech.blog.csdn.net/article/details/140745338

1、零初始化(Zero Initialization)

公式:
W i j = 0 W_{ij} = 0 Wij=0
解释:将所有权重都初始化为零。
原因:简单易行,但会导致所有神经元的激活值和梯度相同,使模型无法有效学习。

2、随机初始化(Random Initialization)

公式:
W i j ∼ U ( − ϵ , ϵ ) W_{ij} \sim \mathcal{U}(-\epsilon, \epsilon) WijU(ϵ,ϵ)

W i j ∼ N ( 0 , σ 2 ) W_{ij} \sim \mathcal{N}(0, \sigma^2) WijN(0,σ2)
解释:

  • U ( − ϵ , ϵ ) \mathcal{U}(-\epsilon, \epsilon) U(ϵ,ϵ) 表示从区间 [ − ϵ , ϵ ] [- \epsilon, \epsilon] [ϵ,ϵ] 的均匀分布中随机采样。
  • N ( 0 , σ 2 ) \mathcal{N}(0, \sigma^2) N(0,σ2) 表示从均值为0、方差为 σ 2 \sigma^2 σ2 的正态分布中随机采样。

原因:打破对称性,使每个神经元有不同的初始值,避免模型陷入无法学习的状态。

3、Xavier初始化(Glorot Initialization)

公式:
W ∼ U ( − 6 n i n + n o u t , 6 n i n + n o u t ) W \sim \mathcal{U}\left(-\sqrt{\frac{6}{n_{in} + n_{out}}}, \sqrt{\frac{6}{n_{in} + n_{out}}}\right) WU(nin+nout6 ,nin+nout6 )

W ∼ N ( 0 , 2 n i n + n o u t ) W \sim \mathcal{N}\left(0, \frac{2}{n_{in} + n_{out}}\right) WN(0,nin+nout2)
解释:

  • U ( − 6 n i n + n o u t , 6 n i n + n o u t ) \mathcal{U}\left(-\sqrt{\frac{6}{n_{in} + n_{out}}}, \sqrt{\frac{6}{n_{in} + n_{out}}}\right) U(nin+nout6 ,nin+nout6 ) 表示从区间 [ − 6 n i n + n o u t , 6 n i n + n o u t ] \left[-\sqrt{\frac{6}{n_{in} + n_{out}}}, \sqrt{\frac{6}{n_{in} + n_{out}}}\right] [nin+nout6 ,nin+nout6 ] 的均匀分布中随机采样。
  • N ( 0 , 2 n i n + n o u t ) \mathcal{N}\left(0, \frac{2}{n_{in} + n_{out}}\right) N(0,nin+nout2) 表示从均值为0、方差为 2 n i n + n o u t \frac{2}{n_{in} + n_{out}} nin+nout2 的正态分布中随机采样。

原因:通过均匀分布或正态分布进行初始化,确保前向传播和反向传播过程中,神经元的输出值不会因为层数增加而导致方差过大或过小。

4、He初始化(He Initialization)

公式:
W ∼ U ( − 6 n i n , 6 n i n ) W \sim \mathcal{U}\left(-\sqrt{\frac{6}{n_{in}}}, \sqrt{\frac{6}{n_{in}}}\right) WU(nin6 ,nin6 )

W ∼ N ( 0 , 2 n i n ) W \sim \mathcal{N}\left(0, \frac{2}{n_{in}}\right) WN(0,nin2)
解释:

  • U ( − 6 n i n , 6 n i n ) \mathcal{U}\left(-\sqrt{\frac{6}{n_{in}}}, \sqrt{\frac{6}{n_{in}}}\right) U(nin6 ,nin6 ) 表示从区间 [ − 6 n i n , 6 n i n ] \left[-\sqrt{\frac{6}{n_{in}}}, \sqrt{\frac{6}{n_{in}}}\right] [nin6 ,nin6 ] 的均匀分布中随机采样。
  • N ( 0 , 2 n i n ) \mathcal{N}\left(0, \frac{2}{n_{in}}\right) N(0,nin2) 表示从均值为0、方差为 2 n i n \frac{2}{n_{in}} nin2 的正态分布中随机采样。

原因:专为ReLU及其变体激活函数设计,确保在使用这些激活函数时,前向传播和反向传播过程中的信号不会过于减弱。

5、正交初始化(Orthogonal Initialization)

公式:

  1. 生成一个随机矩阵 A A A
  2. 通过QR分解得到正交矩阵 Q Q Q
  3. 缩放 Q Q Q 使其适应模型的输入输出大小。

解释:QR分解是一种将矩阵分解为正交矩阵 Q Q Q 和上三角矩阵 R R R 的方法,最终保留正交矩阵 Q Q Q
原因:正交矩阵可以保持输入信号的方差,避免梯度消失或爆炸的问题,特别适用于RNN等需要保持长期依赖的网络。

6、LECUN初始化

公式:
W ∼ U ( − 3 n i n , 3 n i n ) W \sim \mathcal{U}\left(-\sqrt{\frac{3}{n_{in}}}, \sqrt{\frac{3}{n_{in}}}\right) WU(nin3 ,nin3 )

W ∼ N ( 0 , 1 n i n ) W \sim \mathcal{N}\left(0, \frac{1}{n_{in}}\right) WN(0,nin1)
解释:

  • U ( − 3 n i n , 3 n i n ) \mathcal{U}\left(-\sqrt{\frac{3}{n_{in}}}, \sqrt{\frac{3}{n_{in}}}\right) U(nin3 ,nin3 ) 表示从区间 [ − 3 n i n , 3 n i n ] \left[-\sqrt{\frac{3}{n_{in}}}, \sqrt{\frac{3}{n_{in}}}\right] [nin3 ,nin3 ] 的均匀分布中随机采样。
  • N ( 0 , 1 n i n ) \mathcal{N}\left(0, \frac{1}{n_{in}}\right) N(0,nin1) 表示从均值为0、方差为 1 n i n \frac{1}{n_{in}} nin1 的正态分布中随机采样。

原因:专为tanh激活函数设计,确保在使用tanh激活函数时,前向传播和反向传播过程中的信号不会过于减弱。

7、方差缩放初始化(Variance Scaling Initialization)

公式:
W ∼ N ( 0 , 2 n i n ⋅ scale ) W \sim \mathcal{N}\left(0, \frac{2}{n_{in} \cdot \text{scale}}\right) WN(0,ninscale2)

W ∼ U ( − 6 n i n ⋅ scale , 6 n i n ⋅ scale ) W \sim \mathcal{U}\left(-\sqrt{\frac{6}{n_{in} \cdot \text{scale}}}, \sqrt{\frac{6}{n_{in} \cdot \text{scale}}}\right) WU(ninscale6 ,ninscale6 )
解释:

  • N ( 0 , 2 n i n ⋅ scale ) \mathcal{N}\left(0, \frac{2}{n_{in} \cdot \text{scale}}\right) N(0,ninscale2) 表示从均值为0、方差为 2 n i n ⋅ scale \frac{2}{n_{in} \cdot \text{scale}} ninscale2 的正态分布中随机采样。
  • U ( − 6 n i n ⋅ scale , 6 n i n ⋅ scale ) \mathcal{U}\left(-\sqrt{\frac{6}{n_{in} \cdot \text{scale}}}, \sqrt{\frac{6}{n_{in} \cdot \text{scale}}}\right) U(ninscale6 ,ninscale6 ) 表示从区间 [ − 6 n i n ⋅ scale , 6 n i n ⋅ scale ] \left[-\sqrt{\frac{6}{n_{in} \cdot \text{scale}}}, \sqrt{\frac{6}{n_{in} \cdot \text{scale}}}\right] [ninscale6 ,ninscale6 ] 的均匀分布中随机采样。

原因:通过调整缩放因子,适应不同的网络和激活函数,使初始化更具灵活性。

8、参数初始化的重要性

适当的参数初始化方法可以加速模型训练,提高模型性能,并避免一些常见的问题,如梯度消失或爆炸。以下是常见问题及其解决方案:

  1. 梯度消失:初始化时权重过小,导致梯度在反向传播过程中逐渐变小,最终接近零。
    • 解决方案:使用He初始化或Xavier初始化,确保权重的初始方差适中。
  2. 梯度爆炸:初始化时权重过大,导致梯度在反向传播过程中逐渐变大,最终趋于无穷大。
    • 解决方案:使用适当的初始化方法,如Xavier初始化,确保权重的初始方差适中。
  3. 模型收敛慢:权重初始化不当,导致模型需要更多的迭代次数才能收敛。
    • 解决方案:根据激活函数选择合适的初始化方法,如使用ReLU激活函数时选择He初始化。

通过理解和应用适当的参数初始化方法,可以显著提高神经网络的训练效率和性能。在实际应用中,可以通过实验来验证不同初始化方法的效果,并结合其他优化技术(如学习率调整、正则化方法等)进行调优。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逐梦苍穹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值