神经网络
神经⽹络类型众多,其中最为重要的是多层感知机。多层感知机中的特征神经元模型称为感知机,简单的感知机如下图所⽰:
其中x1, x2, x3 为感知机的输⼊,其输出为:
多层感知机由感知机推⼴⽽来,最主要的特点是有多个神经元层,因此也叫深度神经⽹络。
神经网络为什么使用深层表示?
- 深度神经⽹络是⼀种特征递进式的学习算法,浅层的神经元直接从输⼊数据中学习⼀些低层次的简单特征;⽽深层的特征则基于已学习到的浅层特征继续学习更⾼级的特征。
- 深层的⽹络隐藏单元数量相对较少,隐藏层数⽬较多,如果浅层的⽹络想要达到同样的计算结果则需要指数级增长的单元数量才能达到。
为什么深层神经网络难以训练?
1. 梯度消失
梯度消失是指通过隐藏层从后向前看,梯度会变的越来越⼩,说明前⾯层的学习会显著慢于后⾯层的学习。
在深层神经⽹络中,每⼀个神经元计算得到的梯度都会传递给前⼀层,较浅层的神经元接收到的梯度受到之前所有层梯度的影响。如果计算得到的梯度值⾮常⼩,随着层数增多,求出的梯度更新信息将会以指数形式衰减,就会发⽣梯度消失。
梯度消失的原因:
- 学习率大小
- 隐藏层的层数过多
- 使用了不适合的激活函数
- 网络参数的初始化
梯度消失的解决方案:
- 更换激活函数:sigmoid、tanh激活函数存在梯度消失的问题,sigmoid函数的导数,是在0 ~ 0.25区间,tanh是在0~1区间。在神经网络中,除了最后二分类问题的最后一层会用sigmoid之外,每一层的激活函数一般都是用ReLU。
- 残差连接
- 归一化
2. 梯度爆炸
在深度⽹络或循环神经⽹络等⽹络结构中,梯度可在⽹络更新的过程中不断累积,变成⾮常⼤的梯度,导致⽹络权重值的⼤幅更新,使得⽹络不稳定;在极端情况下,权重值甚⾄会溢出,变为值,再也⽆法更新。
梯度爆炸的原因:
- 隐藏层的层数过多
- 权值初始化值太大
梯度爆炸的解决方案:
- 梯度裁剪:设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。
- 正则化
3. 权重矩阵的退化导致模型的有效⾃由度减少
参数空间中学习的退化速度减慢,导致减少了模型的有效维数,⽹络的可⽤⾃由度对学习中梯度范数的贡献不均衡,随着相乘矩阵的数量(即⽹络深度)的增加,矩阵的乘积变得越来越退化。在有硬饱和边界的⾮线性⽹络中(例如 ReLU),随着深度增加,退化过程会变得越来越快。