参考文章:
常用的非线性激励函数
从线性到非线性
常见的非线性激励函数
在神经网络中为什么要引入非线性激励函数?
为了回答上述这个问题,我们先抛出一个与之相关的问题:什么叫线性?
线性就是利用形如:
f
(
x
)
=
w
x
+
b
f ( x ) = w x + b
f(x)=wx+b 的表达式来表示输入与输出的关系。假如输入
x
x
x 与输出
f
(
x
)
f ( x )
f(x) 存在线性的关系,我们用表达式
f
(
x
)
=
w
x
+
b
f ( x ) = w x + b
f(x)=wx+b 可以很好的表征出这种关系。但是,一旦这种客观的、我们要求解的关系中本就含有非线性关系的话,还用线性表达式去拟合(你可以理解为去表征输入与输出的关系)的话,就会出现非常严重欠拟合现象(无法表示或者表示存在严重误差)。同时,如果单纯使用线性拟合相当于其实只有一层是
因为神经网络,存在大量的非线性关系的数据,所以需要引入非线程激励函数!
Sigmoid
- 优点:映射数据在[0, 1]之间;梯度下降明显;
- 缺点:容易引起梯度消失;输出不是以0为中心; e x p ( ) e x p ( ) exp()计算成本高
激活函数
导数
注意: Sigmoid 函数趋近 0 和 1 的时候变化率会变得平坦,也就是说,Sigmoid 的梯度趋近于 0。神经网络使用 Sigmoid 激活函数进行反向传播时,输出接近 0 或 1 的神经元其梯度趋近于 0。这些神经元叫作饱和神经元。因此,这些神经元的权重不会更新。此外,与此类神经元相连的神经元的权重也更新得很慢。该问题叫作梯度消失。因此,想象一下,如果一个大型神经网络包含 Sigmoid 神经元,而其中很多个都处于饱和状态,那么该网络无法执行反向传播。
tahn
ReLU
- 优点:能快速收敛;能缓解梯度消失问题;提供神经网络稀疏表达能力;计算效率高;
- 缺点:随着训练的进行,可能回出现神经元死亡,权重无法更新;不以0为中心;如果 x < 0 x < 0 x<0,形成死区;
当输入 x<0 时,输出为 0,当 x> 0 时,输出为 x。该激活函数使网络更快速地收敛。它不会饱和,即它可以对抗梯度消失问题,至少在正区域(x> 0 时)可以这样,因此神经元至少在一半区域中不会把所有零进行反向传播。由于使用了简单的阈值化(thresholding),ReLU 计算效率很高.
神经网络的组成
神经网络的构建
深度:神经网络的层数,当层数越多,深度越大。
广度:神经网络的宽度。
神经网络的配件
损失函数
softmax
可以使分类问题的预测结果更明显。
Cost entropy交叉熵
目标为[0,1]范围内的回归。
学习率与动量
学习率
在批量梯度下降的场景下,学习率表示每次梯度下降的过程速度。在决定好的梯度的情况下,学习率所朝向的方向是不变的(可以理解为)
动量
动量梯度下降也是一种神经网络的优化方法,我们知道在梯度下降的过程中,虽然损失的整体趋势是越来越接近0,但过程往往是非常曲折的,如下图所示:
特别是在使用mini-batch后,由于单次参与训练的图片少了,这种“曲折”被放大了好几倍。动量梯度下降所解决的曲折指的是求得的dw、db偏离正常值导致成本时高时低,求得最优W和b的过程变慢。
对于那些当前的梯度方向与上一次梯度方向相同的参数,那么进行加强,即这些方向上更快了;对于那些当前的梯度方向与上一次梯度方向不同的参数,那么进行削减,即在这些方向上减慢了。这样就减少了梯度变化的震荡,可以更平稳的求出极值点。
对抗过拟合
1、 正则化
通过正则化的方式,增加一个惩罚值。当正则化的值较大时将使损失函数更大。用于平缓一些参数值(L2)或者抵消一些无用的参数值(L1)
2、dropout
dropout通过随机的方式屏蔽掉一些神经元的输出来减少过拟合,一般是通过随机将50%神经元的参数输出置为0来实现。为了避免因为输出的减少导致卷积值得减少,通常将剩余还在输出的神经元。
3、Fine-tuning
在实践中,由于数据集不够大,很少有人从头开始训练网络。常见的做法是使用预训练的网络(例如在ImageNet上训练的分类1000类的网络)来重新fine-tuning(也叫微调),或者当做特征提取器。单独的调节某些层作为,将前部的层作为特征的提取器。
课后问题:
1、Pooling和Dropout都是为了防止过拟合,两者有何不同?
Pooling的本质是减少特征的个数,在Pooling过后只取出较为明显的特征,用于取出模型的重要特征(max pooling)。
Dropout中也是相当于变相的减少了特征的个数。(一般加在全连接层后面)为了减少模型的过拟合。