博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深度学习的几种权重初始化
阅读量:2080 次
发布时间:2019-04-29

本文共 964 字,大约阅读时间需要 3 分钟。

       因为梯度是指数级变化的,所以深度神经网络很容易出现梯度消失或者梯度爆炸的问题。针对这个问题的很有效的方法是更加谨慎地选择随机初始化参数。

      主要讨论四种权重初始化方法:把w初始化为0、对w随机初始化、Xavier initialization、He initialization(在ReLu网络中最常用)

  1. 把w初始化为0

         parameters= np.zeros()

         如果只是在线性回归的话这样初始化是可以的,但是在神经网络中把w初始化为0是不可以的,因为这样会导致每一层的神经网络学习到的东西是一样的,并且在bp的时候每一层内的神经元也是相同的。

     2.对w随机初始化

        parameters= np.random.randn()*0.01

        早期最常用的方法,乘以0.01是因为要把w随机初始化到一个相对比较小的值。但是随机初始化也有缺点,np.random.randn()其实是一个均值为0,方差为1的高斯分布中采样。当神经网络的层数增多时,会发现越往后面的层的激活函数(如使用tanH)的输出值几乎都接近于0,这会导致梯度消失。

     3.Xavier initialization

      parameters= np.random.randn()* np.sqrt(1 / layers_dims[l - 1])  # layers_dims[l - 1]是前一层神经元的数量

      Xavier initialization就是尽可能的让输入和输出服从相同的分布,这样就能够避免后面层的激活函数的输出值趋向于0。这种方法适用于激活函数是tanh,但不适合于激活函数是ReLu。

     4.He initialization   

     parameters= np.random.randn()* np.sqrt(2 / layers_dims[l - 1])

     这种方法是由何恺明大神提出的,吴恩达老师也经常使用的方法。在激活函数是ReLu中,效果很好,是目前权重初始化最常用的方法。

      实际上,以上这些公式只是给出了权重初始化的一个起点,给出了初始化权重矩阵的默认值,可以给公式添加一个乘数参数,将该参数作为调参的一部分,虽然这个调参应该优先级很低。

    注:使用Batch Normalization Layer可以有效降低深度网络对weight初始化的依赖。

转载地址:http://zekqf.baihongyu.com/

你可能感兴趣的文章
Oracle_spatial的空间操作符
查看>>
SDO_GEOMETRY结构说明
查看>>
oracle 的 SDO_GEOMETRY
查看>>
往oracle中插入geometry的两种方式
查看>>
Oracle Spatial中的Operator操作子 详细说明
查看>>
Oracle Spatial中SDO_Geometry详细说明
查看>>
oracle 聚合函数 LISTAGG ,将多行结果合并成一行
查看>>
Oracle列转行函数 Listagg() 语法详解及应用实例
查看>>
LISTAGG函数的用法
查看>>
Oracle Spatial操作geometry方法
查看>>
IDEA类和方法注释模板设置(非常详细)
查看>>
Java程序初始化的顺序
查看>>
Dubbo和Spring结合配置文件内容解析为bean的过程
查看>>
fastJson注解@JSONField使用的一个实例
查看>>
fastjson的@JSONField注解的一点问题
查看>>
fastjson使用(三) -- 序列化
查看>>
浅谈使用单元素的枚举类型实现单例模式
查看>>
Java 利用枚举实现单例模式
查看>>
Java 动态代理作用是什么?
查看>>
Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM) (清晰,浅显)
查看>>