数据归一化,权重初始化--学习笔记

  1. 归一化:
    1. 把数据经过处理后使之限定在一定的范围内。
    2. 原因:
      1. 奇异样本数据会引起训练时间增大,并可能引起无法收敛。
      2. 输入数据的范围会影响初始化的效果。
        1. 如激活函数tan只有在某个范围A内有较好的非线性,则输入激活函数的值的范围需要和A有交集,该神经元才能利用到非线性部分(即该神经元是一个有效的状态)。
        2. 一般假设输入范围是[0,1]或[-1,1],然后讨论网络设置,所以需要归一化
      3. 数据比较大则相乘计算得到的梯度也会比较大。当梯度非常大时,则需要学习率需要非常小,如果将输入数据进行归一化,则lr就不必再根据数据范围作调整。
      4. 输入范围不同,对应的w的有效范围就不同。则使用同一梯度对不同w进行搜索时,会更偏向于有效范围小的w
      5. 避免数值问题(比如溢出)
      6. 使网络快速收敛
      7. 样本数据的评价标准不一样,需要对其量纲化,统一评价标准
      8. bp(反向传播)中常采用sigmoid函数作为转移函数,归一化能够防止净输入绝对值过大引起的神经元输出饱和现象 。
    3. 常用的归一化方法:
      1. 最大-最小标准化
      2. z-score标准化
      3. 函数转化
  2. 权重初始化:
    1. 不可全部初始化为0,虽然不知道每个权重最后的值,但因为如果进行了恰当的数据初始化,则可认为有一半的权重是正的,另一半是负的。如果全部初始化为0,则网络计算出来的输出值都一样,则反向传播算法计算出来的梯度值一样,并且参数更新值也一样(w=w−α∗dw)。更一般地说,如果权重初始化为同一个值,网络就一定是对称的。
    2. 将权重初始化为很小的数字是一个普遍的打破网络对称性的解决办法。这个想法是,神经元在一开始都是随机的、独一无二的,所以它们会计算出不同的更新,并将自己整合到整个网络的各个部分。一个权重矩阵的实现可能看起来像W=0.01∗np.random.randn(D,H),其中randn是从均值为0的单位标准高斯分布进行取样。
    3. 警告:并不是数字越小就会表现的越好。比如,如果一个神经网络层的权重非常小,那么在反向传播算法就会计算出很小的梯度(因为梯度gradient是与权重成正比的)。在网络不断的反向传播过程中将极大地减少“梯度信号”,并可能成为深层网络的一个需要注意的问题。
    4. 随机初始化神经元的输出的分布有一个随输入量增加而变化的方差。结果证明,可以通过将其权重向量按其输入的平方根(即输入的数量)进行缩放,从而将每个神经元的输出的方差标准化到1。也就是说推荐的启发式方法(heuristic)是将每个神经元的权重向量按下面的方法进行初始化:w=np.random.randn(n)/sqrt(n),其中nn表示输入的数量。这保证了网络中所有的神经元最初的输出分布大致相同,并在经验上提高了收敛速度。
    5. 稀疏初始化(Sparse Initialazation):解决未校准方差问题的方法是把所有的权重矩阵都设为零,但是为了打破对称性,每个神经元都是随机连接地(从如上面所介绍的一个小的高斯分布中抽取权重)到它下面的一个固定数量的神经元。一个典型的神经元连接的数目可能是小到10个。
    6. 初始化偏差:将偏差初始化为零是很常见的,因为非对称性破坏是由权重的小随机数导致的。因为ReLU具有非线性特点,所以有些人喜欢使用将所有的偏差设定为小的常数值如0.01,因为这样可以确保所有的ReLU单元在最开始就激活触发(fire)并因此能够获得和传播一些梯度值。然而,这是否能够提供持续的改善还不太清楚(实际上一些结果表明这样做反而使得性能更加糟糕),所以更通常的做法是简单地将偏差初始化为0.
    7. 实际操作:建议使用ReLU单元以及 He等人 推荐的公式w=np.random.randn(n)∗sqrt(2.0/n)
    8. BN在训练开始的时候,通过显式地迫使网络上的激活函数让整个网络上采用高斯分布来初始化神经网络.在神经网络中使用批量标准化已经成为一种非常常见的做法。在实践中,使用批量标准化的网络对糟糕的初始化更加健壮。还要需要提到的是,批量标准化可以解释为在网络的每一层进行预处理,但它以可微分的方式整合到网络中。

你可能感兴趣的:(deeplearning,算法,机器学习,人工智能)