本系列意在长期连载分享,内容上可能也会有所增删改减;
因此如果转载,请务必保留源地址,非常感谢!
知乎专栏:当我们在谈论数据挖掘
引言
Deep Learning 是众多机器学习算法中的一种。它起源于60年代的 Perceptron,经过80年代的 Artificial Neural Network,现阶段被称为 Deep Learning。迄今为止,是“有监督学习”领域最强大的算法类型,暂时还没有“之一”。同时,它也正在往”无监督“和”强化学习“领域扩散。
除了算法效果突出,Deep Learning 另一个特点则是又一个”应用倒逼理论“的例子。Deep Learning 依靠强大的泛化能力在越来越多的应用领域开花,但是却极其缺乏理论依据。不论是模型的解释性、结构的设计、参数的选择等等,现阶段大多是依靠经验、试错。很多在以前或许被称为 Trick 的手段,在 Deep Learning 中却可能是重要的调参方法。
这个系列意在从 DNN(Deep Neural Network)开始,对 Deep Learning 领域一些常见的算法进行介绍及说明。
DNN 的结构
DNN(Deep Neural Network)的基本结构如下。其中表示一个训练样本向量,表示期望的输出向量。
先明确本文后续使用的变量的定义。若将其中相邻的两层 Hidden Layers 提取出来,其表示的含义如下。表示第层第个神经元的输入,表示第层第个神经元的输出,表示第层第个神经元输入对应的偏置。表示从连接到的权重,于是本质就是所有第层输出跟的线性组合。同时,第层到第层的所有权重能写成向量的形式,其中第列表示从发出的权重。
接下来我们分别用分别表示第层所有输入构成的向量、所有输出构成的向量、以及所有偏置构成的向量。于是,与的关系可以表示为,过程说明如下
对于第层第个神经元,其输入与输出的关系如下图,即经过一个激活函数进行了变换。我们也可以将它们的关系描述成向量的形式,即。
因此,一个基础的 DNN 的网络就是下图的形式
Back Propagation
当设计好了 DNN 的结构,且有了训练样本,再给出损失函数的定义,接下来就可以求 DNN 中的参数和了。而所用的算法,本质就是梯度下降法,这里称为 BP(Back Propagation) 算法。需要注意的是,Deep Learning 中所说的 BP 跟传统的 BP 不完全一样,已经简化成纯粹的梯度下降,更容易理解,以下介绍的也是这种方法。
下图先简单地回顾下求导的链式法则。
假设我们的训练样本集合为,且定义损失函数为,其中为损失函数的参数向量,则有
对于 DNN 来说,其实只是包含了和,所以我们的目的就是求和。
我们抽出第与第层的网络,根据链式法则,其实由两部分相乘所得,如下图
对于第一项,可以根据下面的方式计算。
当,即观察对象是中间的两个 Hidden Layer 时,有
当,即观察对象是从输入层到第一个 Hidden Layer时,有
归纳起来,即对于第一项,有
对于第二项,我们将它定义成,即。当,即我们观察的是中间某层 Hidden Layer 时,同样根据链式法则,与有以下关系
其中,每一项分别可以表示为
可得
当,即我们观察的是输出层时
其中,根据的定义计算。如定义为。
归纳起来,即对于第二项,我们写成向量形式,如下。其中表示向量 element-wise 的乘法(感谢 @雨辰 提醒)。
为了更方便理解,其实对于的计算,可以看做是 DNN 网络的反向传播,如下图
此外,我们还需要计算,其推导如下:
因此,整个 Back Propagation 的过程本质就是先第一层正向计算,再从最后一层反向计算,最后求出和。也即其名字所示
综上所示,即 Back Propagation 的流程,传说中 BP 的四个公式也在过程中都推导过了,如下
Mini-batch Gradient Descent
我们都知道 GD(Gradient Descent) 的本质就是希望逐步逼近最优,其迭代公式为
我们最常用的 GD,是使用所有的训练样本来求梯度,即
利用所有的训练样本来求梯度,好处是梯度下降的方向会稳定地朝着极值方向并收敛,不容易受噪声影响;但是问题也比较明显,一个是考虑了所有的数据所有收敛慢,同时容易陷入局部最优。随着数据量的增大,更大的问题就是每更新一次参数,计算量太大;同时,由于考虑了所有数据,收敛就慢。
因此 SGD(Stochastic Gradient Descent) 就应运而生:每次 Iteration 计算梯度并更新参数时只考虑一个样本,对每一个样本执行完这个过程称为一次 Epoch。即
SGD 的好处就是加快了收敛的速度。问题就是由于根据一个样本求的梯度,方向并不一定指向极值方向;甚至可能出现每一次 Iteration 求出的梯度方向差异巨大,最终无法收敛。
因此 Mini-batch GD(Stochastic Gradient Descent) 又应运而生:每次 Iteration 计算梯度并更新参数时考虑 Batch_Size 个样本(称为一个 Batch),对所有样本执行完这个过程称为一次 Epoch。其公式如下,表示本次选择的 Batch,表示 Batch_Size
尾巴
这一部分主要介绍了 DNN 与 Back Propagation,顺带介绍了 Mini-batch GD。其实关于 DNN 还有很多可以说,比如 Activation Function、Weight Decay、Dropout,Mini-batch GD 也有 Rprop、RMSProp 等方法,不过感觉内容还不少,准备独立出来。同时,关于 Deep Learning 的脉络,也即后续怎么写也还在考虑。有建议也欢迎提出。
本系列其他文章:
Supervised Learning:
当我们在谈论 Deep Learning:DNN 与 Backpropagation
当我们在谈论 Deep Learning:DNN 与它的参数们(壹)
当我们在谈论 Deep Learning:DNN 与它的参数们(贰)
当我们在谈论 Deep Learning:DNN 与它的参数们(叁)
当我们在谈论 Deep Learning:CNN 其常见架构(上)
当我们在谈论 Deep Learning:CNN 其常见架构(下)
当我们在谈论 Deep Learning:GAN 与 WGAN
Reference
- 文中 PPT 截图出自李宏毅老师的课件
评论(0)
您还未登录,请登录后发表或查看评论