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

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

  • 对于单层神经网络,将权重 和偏置 初始化为零是可行的。
  • 但对于多层神经网络 ,这样做会导致所有神经元输出完全相同,无法学习不同特征。
  • 原因
    • 每个输入 输入到第一层的所有神经元;
    • 若所有 都为 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);
  • 为下一节编写深度神经网络程序打下基础。
相关推荐
米小虾3 分钟前
2026 AI智能体十大趋势:从工具到伙伴,Agent正在重塑什么?
人工智能
We0 AI7 分钟前
2026 年 SEO 友好型网站构建器对比:We0 AI、Webflow、WordPress、10Web,谁更适合被收录?
人工智能·#ai建站
天国梦9 分钟前
中学生居家英语听力训练深度解析:从核心痛点到AI赋能的全链路方案
人工智能·学习
智恒百亿15 分钟前
RTX 5090 深度解析:8 卡智算集群多卡协同痛点完整解决方案
人工智能
树獭非懒15 分钟前
七、智能体的Reflection机制:让AI学会三省吾身
人工智能·llm·agent
字节跳动视频云技术团队18 分钟前
不止于 4K,火山引擎画质增强让视频从清晰走向细腻
人工智能·音视频开发
中微极客27 分钟前
解锁LLM开发全栈能力:Python + LangChain + RAG 工程实战指南
人工智能·python·langchain
CCC:CarCrazeCurator31 分钟前
A100作为深度学习基础计算节点的原因
人工智能·深度学习
米小虾37 分钟前
操作系统正在被AI重写:从谷歌到微软,为什么所有人都在押注"Agent OS"?
人工智能
ACP广源盛1392462567343 分钟前
IX8024@ACP# 搭配此芯 AI 服务器 + 爱芯元智产品完整方案
大数据·运维·服务器·人工智能·分布式·嵌入式硬件