神经网络三之权重参数的初始化技巧

视频教学地址:https://edu.****.net/course/detail/8574

技术交流qq群: 659201069

  神经网络的结构是开发都自己定义的,主要包括神经网络的层数、每层的结点数、层与层之间的连接方式,神经网络的训练过程就是学习参数的过程,而刚开始训练时参数矩阵都是通过一定的方式生产的。下面分别介始常用的参数矩阵的生产方式

基本原则

  一般情况下较大的初始权重经过前向传播过程,到输出层的的输出信号也是较大的对一些**函数如sigmod会过快的导致网络饱和,就会导致学习权重的能力下降,所以一般应避免权重的初始值过大。经实践证明初始权重选在(-1.0,1.0)是最合适的(我也不知道为什么,看了很多网上开源源码都是这么做的,如tensorflow的实例源码、ImageNet相关比赛的源码等)。
  

禁止相同的恒定值

  禁止初始权重设为相同的恒等值(除非你真的清楚自己在做什么),如果这么做,从第一个隐藏层开始,所有结点的输出值都是相同的,在误差反向传播时,必定会平分(不清楚前向传播和反向传播的请参考的另外两篇文章:https://blog.****.net/zhaojianting/article/details/80593318  https://blog.****.net/zhaojianting/article/details/80541732),这将导致权重更新值也是相同的,最终的结果是不管训练多少轮最终的权重都是相同的,也就是所有的输入特征值是同等重要的,这样就失去的神经网络自动抽取高层特证的功能(神经网络的隐藏层的功能就是把输入的特证值一层层合成更高更抽像的组全特征,同时重要特征的权重加大,次要特征权重减小或归0)。
  如果全部初始化为0,情况会更糟。我们看下面的权重更新函数:
  神经网络三之权重参数的初始化技巧
  权重全是0,那么输入信号全是是0,这个公式最终的结果是0,神经网络就失去了学习能力。

采用(-1.0,1.0)均匀分布进行初始化

  这种方法说不出来好与坏,对最终的训练结果没有影响。

更科学的初始化方式

  一条经验规则是,节点的链接越多,会有越多有信号进行叠加输出信号值较大容易造成网络过快饱和,所以链接越多,那么权重的值就应该相应的减小些。
  目前最常用的初始化方法就是在一定的范围进行正态分布采用,均值一般设为0,标准差根据我们上面的经验规则应与链接数量成反比关系(链接数量平方根的倒数)
  神经网络三之权重参数的初始化技巧