神经网络之参数初始化

参数初始化

我们在进行梯度下降算法的时候,需要进行参数初始化的操作,那就有一个貌似不重要的的问题,参数如何初始化,是真的随机初始化吗?本章我们就来讨论这个问题。

首先参数初始化应满足如下条件

  • 各层激活值不出现饱和现象
  • 各层激活值不为0

这里你可能会有一个疑问,什么是饱和呢?

  1. 当我们的n趋近于正无穷,激活函数的导数趋近于0,那么我们称之为右饱和。
  2. 当我们的n趋近于负无穷,激活函数的导数趋近于0,那么我们称之为左饱和。

当一个函数既满足左饱和又满足右饱和的时候我们就称之为饱和
对于激活值不为0,也比较好理解,如果我们将参数全部初始化为0,经过相同的操作,最后的值应该是一样的,严重影响模型的性能,深度模型不会用0来作为初始化的值。

常用的参数初始化方法

随机生成小的随机数

将参数初始化为小的随机数,从均值为0,标准方差为1的高斯分布中取样,这样的参数每个维度都来自一个多维的高斯分布。一般而言,参数也不能太小,因为在反向传播的时候会导致过小的梯度,对于深度网络而言就梯度弥散,降低参数的收敛速度。

标准初始化

权重参数从确定的区间均匀的随机选值,从区间[1d,1d][-\frac{1}{\sqrt{d}}, \frac{1}{\sqrt{d}}]的均匀分布中生成当前神经元的权重,其中d是每个神经元的输入数量,

xavier初始化

这种初始化也是一种比较常用的初始化,理想的初始化应该让各层激活值和状态梯度的方差在传播中的方差保持一致。否则更新后激活值的方差若发生改变,将造成数据不稳定。

xavier初始化做出下面三个假设,这3个假设都是关于激活函数的假设。

  • 输入的每个特征的方差一样

激活函数对称,这样就假设每层输入均值为0

f(0)=1(1.1)f'(0)=1 \tag{1.1}

  • 初始时,状态值落在激活函数的线性区间

f(sik)=1(1.2)f'(sik)=1 \tag{1.2}

xavier的取值范围是

[6ni+ni+1,6ni+ni+1](1.3)[-\frac{\sqrt{6}}{\sqrt{n_i+n_{i+1}}}, \frac{\sqrt{6}}{\sqrt{n_i+n_{i+1}}}] \tag{1.3}

  • 这个区间根据1.4所得

(2b)212=2ni+ni+1(1.4)\frac{(2b)^2}{12}=\frac{2}{n_i+n_{i+1}} \tag{1.4}

其中n1n_1ni+1n_{i+1}表示输入和输出的维度。激活值的方差和层数无关,反向传播的方差和层数无关。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×