深度学习:为什么不能将多层神经网络参数全部初始化为零以及如何进行随机初始化

✅ 一、为什么不能将神经网络参数全部初始化为零?

  • 对于单层神经网络,将权重 和偏置 初始化为零是可行的。
  • 但对于多层神经网络 ,这样做会导致所有神经元输出完全相同,无法学习不同特征。
  • 原因
    • 每个输入 输入到第一层的所有神经元;
    • 若所有 都为 0,则每个神经元计算结果
    • 经过激活函数后,所有隐藏层输出 都相同;
    • 导致梯度更新时所有参数变化一致,模型失去表达能力

🔴 结论:不能将参数都初始化成一样的值(如全零),否则多个神经元之间无区别。


✅ 二、如何进行随机初始化?

  • 常用方法:使用 numpy.random.randn() 进行标准正态分布随机初始化。

  • 例如:

    复制代码
    w[1] = numpy.random.randn(2, 2) * 0.01
  • 解释:

    • numpy.random.randn(2,2):生成一个 2×2 的矩阵,元素服从均值为 0、标准差为 1 的正态分布;
    • 乘以 0.01 是为了缩小初始权重范围,避免梯度爆炸或消失。

✅ 三、randn 函数的一些语法规则

  1. 当括号内没有参数时,返回一个浮点数;
  2. 当括号内有一个参数时,返回一个秩为 1 的数组(向量);
  3. 当括号内有两个及以上参数时,返回对应维度的数组(可表示向量或矩阵);
  4. np.random.standard_normal()np.random.randn() 类似,但输入参数必须是元组(tuple);
  5. np.random.randn() 的输入通常为整数,若为浮点数会自动截断为整数。

✅ 四、为什么要乘以 0.01?

  • 目的是让初始权重更小,从而:
    • 减小激活函数的斜率(如 Sigmoid 在接近 0 处导数最大);
    • 加快反向传播中的梯度下降速度(因为梯度与权重相关);
    • 防止激活值过大导致饱和(如 Sigmoid 接近 0 或 1 时导数趋近于 0,梯度消失);
  • 但也不能太小:
    • 否则可能导致信号在多层传递中逐渐衰减至 0;
    • 激活函数可能失去非线性特性(如 ReLU 变成线性)。

📌 平衡原则:权重不能太大(防爆炸),也不能太小(防消失)


✅ 五、参数初始化的重要性

  • 合适的初始化区间对训练效果至关重要;
  • 应根据神经元连接数量调整初始化方差:
    • 输入连接越多的神经元,其权重应越小;
    • 避免输出过大或过小;
    • 方法称为方差缩放(Variance Scaling),后续会详细讲解。

✅ 六、偏置 是否可以为零?

  • 可以 。因为权重 已经被随机初始化;
  • 每个神经元的计算内容不再相同,因此即使 也无妨。

✅ 七、本节总结

  • 学习了多层神经网络参数初始化的关键问题
  • 理解了为何不能将参数初始化为全零;
  • 掌握了使用 numpy.random.randn() 进行随机初始化的方法;
  • 了解了初始化尺度对训练的影响(如乘以 0.01);
  • 为下一节编写深度神经网络程序打下基础。
相关推荐
YOLO数据集集合10 小时前
光伏板红外-可见光配对缺陷检测数据集 | 光伏板缺陷 红外可见光配准 多模态检测 无人机巡检 目标检测 YOLO格式9094期
人工智能·目标检测·计算机视觉·目标跟踪·红外·无人机视角·太阳能板
知几蜗牛10 小时前
Agent会互相调用了,但A2A 1.0真正解决的是协作边界
人工智能
HIT_Weston10 小时前
227、【AI】【模型部署】基座模型研究:RoPE 旋转位置编码
人工智能·模型部署
Omics Pro10 小时前
1个月2轮融资!长寿虚拟细胞
数据库·人工智能·算法·机器学习·自然语言处理
residual_fan10 小时前
航空发动机故障诊断专用智能体(六):实际机队健康管理中的应用考量与展望
人工智能·算法·数据挖掘·数据分析
知几蜗牛10 小时前
AI越懂你越好吗?五天实验给出一个不舒服的答案
人工智能
能源革命10 小时前
AI 日报 2026-09-19
人工智能
天远Date Lab10 小时前
零信任架构实战:基于天远二手车VIN估值构建自动化资产定价网关
人工智能·ai·工具分享
知几蜗牛10 小时前
AI给面试打分不够,求职者更需要可核对的证据
人工智能
掘金泥石流10 小时前
上下文即服务:AI 应用的竞争,为什么会从入口转向 Context?
人工智能·架构·agent