文章目录
🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于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)
Wij∼U(−ϵ,ϵ)
或
W
i
j
∼
N
(
0
,
σ
2
)
W_{ij} \sim \mathcal{N}(0, \sigma^2)
Wij∼N(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)
W∼U(−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)
W∼N(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)
W∼U(−nin6,nin6)
或
W
∼
N
(
0
,
2
n
i
n
)
W \sim \mathcal{N}\left(0, \frac{2}{n_{in}}\right)
W∼N(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)
公式:
- 生成一个随机矩阵 A A A。
- 通过QR分解得到正交矩阵 Q Q Q。
- 缩放 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)
W∼U(−nin3,nin3)
或
W
∼
N
(
0
,
1
n
i
n
)
W \sim \mathcal{N}\left(0, \frac{1}{n_{in}}\right)
W∼N(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)
W∼N(0,nin⋅scale2)
或
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)
W∼U(−nin⋅scale6,nin⋅scale6)
解释:
- N ( 0 , 2 n i n ⋅ scale ) \mathcal{N}\left(0, \frac{2}{n_{in} \cdot \text{scale}}\right) N(0,nin⋅scale2) 表示从均值为0、方差为 2 n i n ⋅ scale \frac{2}{n_{in} \cdot \text{scale}} nin⋅scale2 的正态分布中随机采样。
- 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(−nin⋅scale6,nin⋅scale6) 表示从区间 [ − 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] [−nin⋅scale6,nin⋅scale6] 的均匀分布中随机采样。
原因:通过调整缩放因子,适应不同的网络和激活函数,使初始化更具灵活性。
8、参数初始化的重要性
适当的参数初始化方法可以加速模型训练,提高模型性能,并避免一些常见的问题,如梯度消失或爆炸。以下是常见问题及其解决方案:
- 梯度消失:初始化时权重过小,导致梯度在反向传播过程中逐渐变小,最终接近零。
- 解决方案:使用He初始化或Xavier初始化,确保权重的初始方差适中。
- 梯度爆炸:初始化时权重过大,导致梯度在反向传播过程中逐渐变大,最终趋于无穷大。
- 解决方案:使用适当的初始化方法,如Xavier初始化,确保权重的初始方差适中。
- 模型收敛慢:权重初始化不当,导致模型需要更多的迭代次数才能收敛。
- 解决方案:根据激活函数选择合适的初始化方法,如使用ReLU激活函数时选择He初始化。
通过理解和应用适当的参数初始化方法,可以显著提高神经网络的训练效率和性能。在实际应用中,可以通过实验来验证不同初始化方法的效果,并结合其他优化技术(如学习率调整、正则化方法等)进行调优。