ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

深度学习的几种权重初始化

2019-08-10 11:05:43  阅读:456  来源: 互联网

标签:初始化 randn parameters 权重 initialization random 几种 np


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

      主要讨论四种权重初始化方法:把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初始化的依赖。

标签:初始化,randn,parameters,权重,initialization,random,几种,np
来源: https://blog.csdn.net/Amigo_1997/article/details/99058711

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有