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

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

  • 对于单层神经网络,将权重 和偏置 初始化为零是可行的。
  • 但对于多层神经网络 ,这样做会导致所有神经元输出完全相同,无法学习不同特征。
  • 原因
    • 每个输入 输入到第一层的所有神经元;
    • 若所有 都为 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);
  • 为下一节编写深度神经网络程序打下基础。
相关推荐
Shawn_Shawn4 小时前
mcp学习笔记(一)-mcp核心概念梳理
人工智能·llm·mcp
33三 三like6 小时前
《基于知识图谱和智能推荐的养老志愿服务系统》开发日志
人工智能·知识图谱
芝士爱知识a6 小时前
【工具推荐】2026公考App横向评测:粉笔、华图与智蛙面试App功能对比
人工智能·软件推荐·ai教育·结构化面试·公考app·智蛙面试app·公考上岸
腾讯云开发者8 小时前
港科大熊辉|AI时代的职场新坐标——为什么你应该去“数据稀疏“的地方?
人工智能
工程师老罗8 小时前
YoloV1数据集格式转换,VOC XML→YOLOv1张量
xml·人工智能·yolo
yLDeveloper8 小时前
从模型评估、梯度难题到科学初始化:一步步解析深度学习的训练问题
深度学习
Coder_Boy_8 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
啊森要自信8 小时前
CANN ops-cv:面向计算机视觉的 AI 硬件端高效算子库核心架构与开发逻辑
人工智能·计算机视觉·架构·cann
2401_836235868 小时前
中安未来SDK15:以AI之眼,解锁企业档案的数字化基因
人工智能·科技·深度学习·ocr·生活