针对梯度消失或者梯度爆炸问题,我们想出了一个不完整的解决方案,虽然不能彻底解决问题,却很有用。有助于我们为神经网络更谨慎地选择随机初始化参数,为了更好地理解它,我们先举一个神经单元权重初始化的例子,然后再演变到整个神经网络。

来看只有一个神经元的情况,然后才是深度网络,如上图,单个神经元可能有4个输入特征,从x1x_1x1​到x4x_4x4​,经过a=g(z)a=g(z)a=g(z)处理,最终得到y^\hat{y}y^​。 稍后讲深度网络时,这些输入表示为a[l]a^{[l]}a[l],暂时我们用xxx表示,根据图,可知z=w1x1+w2x2+...+wnxnz=w_1x_1+w_2x_2+...+w_nx_nz=w1​x1​+w2​x2​+...+wn​xn​,b=0b=0b=0,暂时忽略b。为了预防z值过大或者过小,你可以看到,n越大,我们希望wiw_iwi​越小,因为z是wixiw_ix_iwi​xi​的和。如果你把很多此类项相加,希望每项值更小,最合理的方法就是设置Var(wi)=1nVar(w_i)=\frac{1}{n}Var(wi​)=n1​,Var()代表方差,n表示神经元的输入特征数量,实际上你要做的就是设置某层权重矩阵WWW等于np.random.randn(W.shape)∗np.sqrt(1n[l−1])np.random.randn(W.shape)*np.sqrt(\frac{1}{n^{[l-1]}})np.random.randn(W.shape)∗np.sqrt(n[l−1]1​)结果如果你使用的是Relu激活函数而不是1n\frac{1}{n}n1​,方差Var(wi)Var(w_i)Var(wi​)设置为Var(wi)=2nVar(w_i)=\frac{2}{n}Var(wi​)=n2​效果会更好。

初始化时,尤其hi使用Relu激活函数时,g[l](z)=Relu(z)g^{[l]}(z)=Relu(z)g[l](z)=Relu(z),他取决于你对随机变量的熟悉程度,这是高斯随机变量,然后乘于它的平方根,也就是引用方差Var(wi)Var(w_i)Var(wi​),方差公式中使用n[l−1]n^{[l-1]}n[l−1]是因为这个例子中特征是不变的,但一般情况下,l层上的每个神经元都有n[l−1]n^{[l-1]}n[l−1]个输入。如果激活函数的输入特征被零均值,标准方差为1,z也会调整到相似的范围,这就没解决问题,但它确实降低了梯度消失和梯度爆炸的问题,因为它给权重矩阵W设置了合理值,你也知道,他不能比1大很多,也不能比1小很多,所以梯度没有爆炸或者消失过快。

刚刚提到的函数是Relu激活函数,对于其它激活函数,如Tanh激活函数,常数1比常数2更有用,即np.sqrt(1n[l−1])np.sqrt(\frac{1}{n^{[l-1]}})np.sqrt(n[l−1]1​) ,同时还有其它的公式,如np.sqrt(2n[l−1]+n[l])np.sqrt(\frac{2}{n^{[l-1]}+n^{[l]}})np.sqrt(n[l−1]+n[l]2​)。

实际上,所有这些公式只是给你一个起点,它们给出初始化权重矩阵的方差的默认值,如果你想添加方差,方差参数则是另一个你需要调整的超级参数,可以给公式np.sqrt(2n[l−1])np.sqrt(\frac{2}{n^{[l-1]}})np.sqrt(n[l−1]2​)添加一个乘数参数。有时候调优该超参数的效果一般,这并不是我们想调优的首要超参数,但已经发现调优过程中产生的问题,虽然调优该参数能起到一定作用,但考虑到相比调优其它超级参数的重要性,通常把这个超参数的优先级放的比较低。

希望可以对梯度下降或者梯度消失以及如何为权重矩阵初始化合理值有了一个直观认识,希望你设置的权重矩阵,既不会增长过快,也不会太快下降到0,从而训练出一个权重或梯度不会增长或消失过快的深度网络。我们在训练深度网络时,这也是加快训练速度的技巧。

深度学习的实用层面 —— 1.11 神经网络的权重初始化相关推荐

  1. 吴恩达【优化深度神经网络】笔记01——深度学习的实用层面

    文章目录 引言 一.训练集/验证集/测试集(Train/Dev/Test sets) 1. 数据集选择 2. 补充:交叉验证(cross validation) 二.偏差和方差(Bias/Varian ...

  2. 吴恩达深度学习笔记5-Course2-Week1【深度学习的实用层面】

    改善深层神经网络:超参数调试.正则化以及优化 深度学习的实用层面 一.训练.验证.测试集 样本数据分成以下三个部分: 训练集(train set): 用于对模型进行训练. 验证集(hold-out c ...

  3. 3.深度学习的实用层面

    第一周:深度学习的实用层面 项目进展得一个关键性得因素就是划分高质量得训练集,验证集,测试集.这有助于提高循环迭代得效率.验证集也称为development set 也称为dev set. 验证集主要 ...

  4. 1.11 神经网络的权重初始化-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 1.10 梯度消失与梯度爆炸 回到目录 1.12 梯度的数值逼近 神经网络的权重初始化 (Weight Initialization for Deep Networks) 上 ...

  5. 吴恩达《优化深度神经网络》精炼笔记(1)-- 深度学习的实用层面

    AI有道 不可错过的AI技术公众号 关注 吴恩达的深度学习专项课程的第一门课<神经网络与深度学习>的所有精炼笔记我已经整理完毕.迷路的小伙伴请见文章末尾的推荐阅读: 在接下来的几次笔记中, ...

  6. Coursera吴恩达《优化深度神经网络》课程笔记(1)-- 深度学习的实用层面

    红色石头的个人网站:redstonewill.com Andrew Ng的深度学习专项课程的第一门课<Neural Networks and Deep Learning>的5份笔记我已经整 ...

  7. [DeeplearningAI笔记]改善深层神经网络_深度学习的实用层面1.10_1.12/梯度消失/梯度爆炸/权重初始化...

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.10 梯度消失和梯度爆炸 当训练神经网络,尤其是深度神经网络时,经常会出现的问题是梯度消失或者梯度爆炸,也就是说当你训练深度网络时,导数或坡 ...

  8. 吴恩达深度学习笔记 course 2 1.1~1.14 深度学习的实用层面

    1.1 Train/dev/test sets 在构建一个神经网络的时候我们往往需要设计很多参数,如:layers,learning rates ,acivation functions,hidden ...

  9. 深度学习的实用层面 —— 1.3 机器学习基础

    初始化模型之后,首先要知道算法的偏差高不高,如果偏差较高,试着评估训练集或者训练数据的性能,如果偏差的确很高,甚至无法拟合训练集,那么你要做的就是选择一个新网络,比如含有更多隐层或者隐藏单元的网络,或 ...

最新文章

  1. ISC 2020技术日丨 网络空间危机四伏,如何发现威胁的蛛丝马迹?
  2. BBC称中国人加班时间远超欧美:工作效率未必高
  3. 为什么cp新的so文件替换老的so,程序会core掉的根本原因是什么?
  4. 如何自定义Hibernate脏检查机制
  5. 《DBNotes: Buffer Pool对于缓冲页的链表式管理》
  6. 关于VISIO工具栏、菜单栏消失的解决办法
  7. java宋江,Java编程内功-数据结构与算法「单链表」,
  8. 网络请求中常见的加密机制和加密算法理解
  9. 优秀!结构最清晰的Yolov3 head和loss实现完全解析
  10. 全面IT资源监控 构建新一代数字化校园——天津大学
  11. python unpack_python中struct.pack()函数和struct.unpack()函数
  12. Quarter square 查找表乘法器,手动建立rom
  13. OpenCASCADE Texture Mapping
  14. python mpi4py 读取json_mpi4py 点到点通信总结
  15. 在线java面试题库_Java笔试题库
  16. ERP初学者入门自学笔记
  17. Android轮播图代码
  18. 基于stc8a的ad9833模块的例程的使用
  19. SVN代码回滚到执行版本
  20. 【LeetCode】求中位数(数据流、滑动窗口、两个正序数组)

热门文章

  1. rm -rf * -bash: /bin/rm: 参数列表过长
  2. Davinci DM6446 Codec Engine双核通信环境的搭建
  3. 人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 生成对抗网络
  4. Office文档在线预览/在线编辑解决方案 - 毕升OfficeAPI说明
  5. 这部日本「神作」彻底拉低了我入门AI的门槛
  6. 各种云计算平台和云计算管理平台介绍
  7. AOP Aspect Oriented Programming 面向切面编程 Spring
  8. AI5天训练-视觉生产技术探究和应用
  9. Python中68个内置函数的总结
  10. html手册_HTML手册