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

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

  • 对于单层神经网络,将权重 和偏置 初始化为零是可行的。
  • 但对于多层神经网络 ,这样做会导致所有神经元输出完全相同,无法学习不同特征。
  • 原因
    • 每个输入 输入到第一层的所有神经元;
    • 若所有 都为 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);
  • 为下一节编写深度神经网络程序打下基础。
相关推荐
码视野几秒前
基于 Vue3 + Element Plus 的【青少年心理健康智能测评与 AI 情绪树洞陪护干预系统】设计与实现(含PRD/三端源码/大屏)
前端·vue.js·人工智能·vue3
茶马古道的搬运工3 分钟前
AI 深度技能之-解读Hermes Agent(九)- Hermes Bot
人工智能
桃西西呀3 分钟前
国内金价破 1000,「涨了多少」和「该买多少」是数学问题
人工智能·python·数据分析
2401_865261635 分钟前
亦唐科技:推动国产贴片机技术突破,打造智能制造新标杆
人工智能
智能运维指南5 分钟前
Confluence 停服、数据出境、知识散落:企业知识管理系统如何破局?
大数据·人工智能·microsoft
x868 分钟前
Operit 深度拆解:手机里的开源 AI 操作系统
人工智能·智能手机·开源
钉钉开发者社区9 分钟前
来钉钉,接入 DeepSeek Harness
人工智能·ai·钉钉·钉钉cli
龙虾PRO10 分钟前
大模型时代二进制漏洞攻防体系重构:从 AFL 模糊测试到 AI 智能体的全链路落地路径
人工智能·重构
围炉聊科技12 分钟前
OpenAdapt:录制一次,确定性回放
人工智能·后端·架构
武汉星际互动15 分钟前
边聊边办深度测评:从咨询到办结一站办成
人工智能·政务