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

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

  • 对于单层神经网络,将权重 和偏置 初始化为零是可行的。
  • 但对于多层神经网络 ,这样做会导致所有神经元输出完全相同,无法学习不同特征。
  • 原因
    • 每个输入 输入到第一层的所有神经元;
    • 若所有 都为 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);
  • 为下一节编写深度神经网络程序打下基础。
相关推荐
ZhengEnCi15 小时前
09c-斯坦福CS336作业二:系统与分布式训练
人工智能
阿里云大数据AI技术15 小时前
用 SQL 解锁多模态数据分析:Hologres 让图片、语音、视频变成结构化洞察
人工智能
阿里云大数据AI技术16 小时前
EMR Serverless StarRocks 湖仓多模态检索:One SQL on One Data,实现全文 + 标量 + 向量三路混合检索
人工智能
冬奇Lab17 小时前
Skill 系列(02):Skill 安全风险——三类攻击面的实战测试
人工智能·安全·开源
冬奇Lab17 小时前
每日一个开源项目(第138篇):OpenMontage - 把 AI 编程助手变成完整的视频制作团队
人工智能·开源·claude
米小虾18 小时前
智谱港股盘中市值突破万亿港元!GLM-5.2 开源引爆国产 AI 价值重估
人工智能·chatglm (智谱)
阿里云大数据AI技术18 小时前
义乌小商品城基于MaxFrame AI Function的亿级AI 数据产线提速之路
人工智能
甲维斯19 小时前
用AI还原《坦克大战》并3D化升级!
前端·人工智能·游戏开发
IT_陈寒19 小时前
SpringBoot自动配置坑了我一晚上,原来问题出在这
前端·人工智能·后端