【漫话机器学习系列】185.神经网络参数的标准初始化(Normalized Initialization of Neural Network Parameter

神经网络参数的标准初始化

1. 引言

在深度学习中,神经网络的权重初始化对训练效果和收敛速度有着至关重要的影响。如果初始化不当,可能会导致梯度消失或梯度爆炸问题,使得网络难以训练。因此,研究合适的初始化方法是深度学习中的一个重要课题。本文将介绍 神经网络参数的标准初始化(Normalized Initialization of Neural Network Parameters) ,并解析其数学公式与实际应用。


2. 神经网络权重初始化的重要性

在训练神经网络时,权重通常是随机初始化的,而不可能全部设为零。若所有权重初始值均为零,则神经元的输出也会完全相同,导致神经网络无法学习不同的特征。

然而,如果权重的初始值过大或过小,则可能会导致:

  • 梯度消失(Vanishing Gradient) :在反向传播过程中,梯度逐层传递,如果权重较小,则梯度会逐步衰减,导致前层权重更新缓慢甚至停止更新,影响模型训练。
  • 梯度爆炸(Exploding Gradient) :若权重初值过大,反向传播时梯度可能指数级增长,导致训练不稳定。

因此,我们需要合理选择权重的初始化方法,使得神经网络可以更快收敛,并且避免梯度消失或爆炸问题。


3. 归一化初始化方法(Normalized Initialization)

为了避免上述问题,LeCun 等人提出了一种归一化初始化方法,即 标准初始化(Normalized Initialization) 。其核心思想是:

将全连接层的参数 <math xmlns="http://www.w3.org/1998/Math/MathML"> W i , j W_{i,j} </math>Wi,j 初始化为一个均匀分布的随机值,其范围取决于神经元的输入数量 m 和输出数量 n

数学表达式如下:

<math xmlns="http://www.w3.org/1998/Math/MathML"> W i , j ∼ U ( − 6 m + n , 6 m + n ) W_{i,j} \sim U\left(-\sqrt{\frac{6}{m+n}}, \sqrt{\frac{6}{m+n}}\right) </math>Wi,j∼U(−m+n6 ,m+n6 )

其中:

  • U(a, b) 代表均匀分布,数值范围在 [a, b] 之间。
  • m 代表该层神经元的输入数量。
  • n 代表该层神经元的输出数量。
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> 6 m + n \sqrt{\frac{6}{m+n}} </math>m+n6 是归一化系数,它确保初始权重的方差适中,不会过大或过小。

为什么要取 <math xmlns="http://www.w3.org/1998/Math/MathML"> 6 m + n \sqrt{\frac{6}{m+n}} </math>m+n6 作为边界?

  • 这是为了确保不同层之间的激活值在初始状态下具有相似的方差,从而防止梯度消失或梯度爆炸。
  • 这个公式来源于均匀分布的方差计算,在合适的假设下,它能够保持网络层输出的方差在一定范围内,避免训练初期数值不稳定的问题。

4. 直观理解

该公式的核心思想是:

  • 输入神经元(m)较多时,为了避免累积过大的加权和,权重范围需要变小。
  • 输出神经元(n)较多时,为了确保神经元之间的激活值分布均匀,权重范围也需要调整。
  • 通过取 m 和 n 的均值(m+n),可以在输入和输出之间取得平衡,使权重初始化更合理。

图像中也清晰地标注了:

  • 红色部分(m):表示输入的个数。
  • 蓝色部分(n):表示输出的个数。

5. 代码实现

在深度学习框架(如 TensorFlow、PyTorch)中,可以很方便地使用标准初始化方法。例如,在 PyTorch 中,可以使用 nn.init.uniform_ 进行初始化:

python 复制代码
import torch
import torch.nn as nn
import torch.nn.init as init

# 定义一个线性层
layer = nn.Linear(in_features=256, out_features=128)

# 归一化初始化
m, n = layer.in_features, layer.out_features
bound = (6 / (m + n)) ** 0.5
init.uniform_(layer.weight, -bound, bound)

# 打印初始化后的权重范围
print(f"Weight initialized in range: (-{bound:.4f}, {bound:.4f})")

运行结果

go 复制代码
Weight initialized in range: (-0.1250, 0.1250)

如果使用 TensorFlow / Keras,可以用 tf.keras.initializers.RandomUniform 进行初始化:

ini 复制代码
import tensorflow as tf

# 归一化初始化
initializer = tf.keras.initializers.RandomUniform(minval=-bound, maxval=bound)

# 应用于Dense层
layer = tf.keras.layers.Dense(128, kernel_initializer=initializer)

6. 其他初始化方法对比

除了标准初始化(Normalized Initialization),还有一些常见的初始化方法:

初始化方法 公式 适用场景
标准初始化(本文方法) <math xmlns="http://www.w3.org/1998/Math/MathML"> W i , j ∼ U ( − 6 m + n , 6 m + n ) W_{i,j} \sim U(-\sqrt{\frac{6}{m+n}}, \sqrt{\frac{6}{m+n}}) </math>Wi,j∼U(−m+n6 ,m+n6 ) 适用于全连接层
Xavier 初始化(Glorot 初始化) <math xmlns="http://www.w3.org/1998/Math/MathML"> W i , j ∼ U ( − 6 m + n , 6 m + n ) W_{i,j} \sim U(-\sqrt{\frac{6}{m+n}}, \sqrt{\frac{6}{m+n}}) </math>Wi,j∼U(−m+n6 ,m+n6 ) 适用于 Sigmoid/Tanh
He 初始化(Kaiming 初始化) <math xmlns="http://www.w3.org/1998/Math/MathML"> W i , j ∼ N ( 0 , 2 m ) W_{i,j} \sim \mathcal{N}(0, \frac{2}{m}) </math>Wi,j∼N(0,m2) 适用于 ReLU 激活函数
LeCun 初始化 <math xmlns="http://www.w3.org/1998/Math/MathML"> W i , j ∼ N ( 0 , 1 m ) W_{i,j} \sim \mathcal{N}(0, \frac{1}{m}) </math>Wi,j∼N(0,m1) 适用于 Leaky ReLU/Sigmoid

可以看到,标准初始化与 Xavier 初始化的公式相同,适用于 Sigmoid/Tanh 激活函数。如果使用 ReLU,则推荐使用 He 初始化,因为它更适合 ReLU 变换的性质。


7. 结论

神经网络的权重初始化是影响训练效果的重要因素,标准初始化方法提供了一种有效的解决方案,使得网络在训练初期保持稳定,避免梯度消失或爆炸。对于不同的网络架构和激活函数,还可以选择 He 初始化或 Xavier 初始化,以获得更优的训练效果。

相关推荐
G皮T3 小时前
【人工智能】ChatGPT、DeepSeek-R1、DeepSeek-V3 辨析
人工智能·chatgpt·llm·大语言模型·deepseek·deepseek-v3·deepseek-r1
九年义务漏网鲨鱼3 小时前
【大模型学习 | MINIGPT-4原理】
人工智能·深度学习·学习·语言模型·多模态
元宇宙时间4 小时前
Playfun即将开启大型Web3线上活动,打造沉浸式GameFi体验生态
人工智能·去中心化·区块链
开发者工具分享4 小时前
文本音频违规识别工具排行榜(12选)
人工智能·音视频
产品经理独孤虾4 小时前
人工智能大模型如何助力电商产品经理打造高效的商品工业属性画像
人工智能·机器学习·ai·大模型·产品经理·商品画像·商品工业属性
老任与码4 小时前
Spring AI Alibaba(1)——基本使用
java·人工智能·后端·springaialibaba
蹦蹦跳跳真可爱5894 小时前
Python----OpenCV(图像増强——高通滤波(索贝尔算子、沙尔算子、拉普拉斯算子),图像浮雕与特效处理)
人工智能·python·opencv·计算机视觉
雷羿 LexChien5 小时前
从 Prompt 管理到人格稳定:探索 Cursor AI 编辑器如何赋能 Prompt 工程与人格风格设计(上)
人工智能·python·llm·编辑器·prompt
两棵雪松5 小时前
如何通过向量化技术比较两段文本是否相似?
人工智能
heart000_15 小时前
128K 长文本处理实战:腾讯混元 + 云函数 SCF 构建 PDF 摘要生成器
人工智能·自然语言处理·pdf