《Python Machine Learning By Example》 Third Edition 第八章笔记
1 本章内容介绍
通过本章我们可以学习到:
- 从浅层神经网络到深度学习概要
- 激活函数
- Dropout和早停
2 从浅层神经网络到深度学习
- 首先介绍人工神经网络,即artificial neural networks (ANNs),脉络:网络中的各层–>激活函数–>反传。
2.1 神经层
- 一个简单的神经网络分为输入层,隐藏层,输出层,如下图所示:
- 每一层都是节点的概念集合,输入层表示特征,输出层表示目标变量,在二分类任务中,输出层可能是一个节点,表示目标为正例的概率;在多分类任务中,输出层可能有跟预测类别个数相同的节点,每个节点的值为该类的概率;在回归任务中,输出层只有一个节点,代表预测值。隐藏层可以看作一组从前一层抽取信息的节点组合。相邻的层间由一条被参数化的边相连,并传递信息,参数为wi,其中w的第一维大小是前一层神经元的个数,第二维则是后一层的神经元个数。
- 在简单的神经网络中,信息仅从输入层往输出层流动,叫做前馈神经网络。逻辑回归实际上就是一种仅有输入层和输出层的简单神经网络,而随着隐藏层的层数的增加,模型就越能学习到输入数据与目标值间的潜在关系。但是,增加隐藏层仅能加强模型的线性表达能力,而非线性表达能力不变,导致模型的上限不足,因此我们引入了激活函数。
2.2 激活函数
- 顾名思义,激活函数可以表示一个节点的激活程度。加入激活函数后,模型就具备了非线性的表达能力,而非线性神经网络被证实可以表示任何函数,神经网络中常见的激活函数有sigmoid(范围0-1),tanh(范围-1到1,也被认为是sigmoid的重新缩放版本)和ReLU(范围0-正无穷),如下图所示:
- 其中,重点是ReLU,因为它的函数特征很好,计算复杂度低,不需要计算指数。在SGD中的收敛速度比tanh和sigmoid快,且不会导致梯度饱和和梯度消失问题。不过缺点是它的函数不是0中心的,在一次更新中,所有参数的更新方向相同,即同为正或同为负(但实际上最优的方向可能是部分参数增加而部分参数减小),因此容易导致ZigZag现象;数据的幅度会随着层数增加而不断扩张;有些神经元可能不会被训练,梯度一直是0(负数部分)。Sigmoid本身是单调的,但是它的导数却不是,因此它容易被困在局部最优值。tanh是Sigmoid的优秀版本,部分地方的导数比Sigmoid大,它是0中心的,因此不会出现ZigZag现象,但是会出现梯度饱和现象以及存在计算复杂等问题。
- 总结来说,在隐藏层经常是使用ReLU,在ReLU表现不好时,也可以尝试Leaky ReLU(在负数部分引入了较小的斜率,如0.01),而Sigmoid和tanh也可以用在隐藏层,但不适合用于深层神经网络。在输出层,线性激活函数可以用于回归任务(因为我们不需要对输出进行任何转换),sigmoid可以用于二分类任务,softmax可以用于多分类任务。
2.3 反向传播
- 那么我们如何利用这些神经层和激活函数来学习到最优的参数呢?与逻辑回归那章类似,这里同样是用梯度下降法来最小化MSE损失,而与之前不同的是,参数的梯度是通过反向传播来计算的,即每次前向传播后,都会通过反向传播来更改参数值。
- 输出层的梯度最先被计算,输入层的梯度最后计算,所谓反传,意味着一层的梯度在计算前一层梯度时会被重复使用,具体地,计算遵循链式求导法则。
- ReLU在零点不可导,在反传中如何处理?特判一下,人为指定一个导数值,如0。
2.4 深度学习
- 在实际应用中,神经网络的隐藏层是非常多的,因此我们接着往网络中加入更多的层数,就来到了深度学习阶段。
- 层数增加了,自然网络学习数据中潜在关系的能力也增加了。
- 计算机视觉被广泛认为是通过深度学习取得巨大突破的一个领域,它的任务包括但不限于图像分类,基于图像的搜索引擎,机器视觉,图像修复等等。
- 自然语言处理则是另外一个深受深度学习模型影响的领域,它的任务有机器翻译,看图说话,情感分析等等。
3 避免过拟合
- 神经网络可以很好地适应各种复杂的数据,但是如果不加控制的话,很容易导致过拟合。有三种常见的方法:正则化,Dropout,早停。
- 1)Dropout意味着在训练阶段,忽略掉隐藏层中的某些结点,即每个结点根据所给定的概率(参数,常设为0.5)来决定是否保留自己。前馈时,被忽略的结点不参与loss的计算,反传时,被忽略的结点不更新参数。原理在于,通过让某些结点失活,可以阻断层与层间结点的相互依赖关系,避免网络变得更复杂。
- 2)早停,即early stopping,顾名思义,当模型无法再继续提升时,就提前停止训练。在每轮训练完,通过验证集来对模型的泛化性能进行评估,如果模型在验证集上的性能不再提升或者反而下降,则发送了过拟合,应及时停止训练。
知识补充
ZigZag现象:即函数值的总体下降方向虽然朝着最优下降方向,但是整个训练路径呈之字形弯折,导致下降缓慢。