【背景】
从深入了解了当前流行机器学习算法之后,我们可以总结出,一个机器学习算法其实只有两部分:
1、Model <-> Hypothesis <-> 从输入特征
2、Costfunction <-> Objectfuntion <-> 目标函数/损失函数(虽然在深度学习领域这两个函数定义还有所不同,但从机器学习领域这两个函数我们不做过多的分界)
知道机器学习这两个关键部分,我们要介绍一个算法(机器学习), 只需要列出这两个函数就可以了。
机器学习的的本质是利用优化算法(Grandient Descent / Grandient Ascent)来针对目标函数/损失函数进行优化,从而能找到一个局部最优值。而这些局部最优值(模型参数)就组成了我们的Model.
在机器学习中,算法往往不是关键,真正的关键之处在于特征选取,选取特征需要我们人类对问题的深刻理解,经验、思考。(What 's the Model we need? )即我们需要的Model是一个Linear Regression问题解法,Or Logist Regression even more?
在机器学习有这么一个算法:深度学习。其一个优势就是它能自动学习到应该提取什么特征,从而使算法不那么依赖人类,这是神经网络暴露在当今人类视野中的一个方面,但也是让人感觉到一股玄学之所在面。
【神经网络基础】
计算机中的神经网络可以说是仿真人脑的神经单元的应用。与初中生物学习的神经单元结构类似。两者对比图如下所示:
感知机和神经元本质上是一样的,只不过我们说感知机的时候,它的激活函数是阶跃函数,当我们说神经元时,激活函数往往选择为sigmoid函数或tanh函数。计算某个神经元输出的方法和计算一个感知机的输出是一样的。假设神经元的输入是向量
其中sigmoid函数定义如下:
将sigmoid函数代入式(1):
sigmoid函数是一个非线性函数,其值域是(0, 1)。函数图像如下图所示:
sigmoid函数的导数是:
【神经网络架构】
神经网络就是按照一定规则连接起来的多个神经元,以下图全连接神经网络(Full connected, FC)为例对神经网络的架构进行说明。
-
神经元按层来布局,最左边的层叫做输入层,负责接收输入数据,最右边的层叫做输出层,我们可以从这层获取神经网络输出数据。输入层和输出层之间的层叫做隐藏层,因为它们对于外部来说是不可见的
-
同一层神经元之间没有连接
-
第N层的每个神经元和第N-1层的所有神经元相连(Full Conneted),第N-1层神经元的输出就是第N层神经元的输入求和(summation).
-
每个连接都有一个权值(Weight)
【全连接网络前向传播】
从全局上看,神经网络实际上就是一个输入向量
以神经元为单位上来看,欲计算整个神经网络模型
举例说明:
以上图全连接网络的前向传播进行介绍。我们人为地给神经网络编号。以及进行数学符号量化。
(笔者用VISIO制图,_后的数字代表下标如w_41代表
结构说明:
上图中我们以单个数字对神经元进行编号,如图,1,2,3号神经元是输入层的三个节点,4,5,6为隐藏层的三个节点,7,8为输出层的两个节点。全神经网络的性质显而易见:每个节点都与上一层的节点进行连接,如节点4同时与1,2,3节点进行连接。其连接线路(权重)为
为了使式子更直观,我们将式子向量化表示:于是得出式子:
从这个式子可以延伸出两种情况:
1、若全连接网络中只有一层隐藏层,则:
2、若全连接网络中有多层隐藏层,则:
这两条式子则为神经网络的前向传播公式。
因为神经网络的特殊性质,我们知道,神经元的参数传递很大程度可以递归求解。给我们计算机编程带来了便利性。
【全连接网络反向传播】
神经网络的训练就是需要知道一个神经网络的每个连接上的权值是如何知道的,我们可以说神经网络就是一个模型,那么这些权值就是模型中的参数,也就是模型要学习的东西,然而,一个神经网络的连接方式、网络的层数、每层的节点数这些参数,则不是模型学习出来的,而是人为事先设置的,对于这些认为设置的参数,我们称之为超参数(Hyper-Parameters)。而得出模型参数的方法(神经网络的训练算法)就是我们接下来推导的反向传播算法。前后结合,我们还是利用前向传播中的全连接网络进行公式推导。结合前文,我们使用监督学习为例来解释。并且图中每个神经元的激活函数为sigmoid函数。而不同的激活函数计算公式不同。!!!
我们假设每个训练样本为
一个反向传播算法流程基本如下:
1、我们使用前向传播算法,用样本的特征
2、我们按照下面公式计算出每个节点的误差项
2.1、那么对于输出层节点
其中,
2.2、对于隐藏层节点,
其中,
3、最后,更新每个连接上的权值:
其中,
从反向传播的计算过程中,我们直到,这个过程是通过正向传播的结果逆向利用梯度求导的一个流程。故名反向传播。其本质还是利用之前提及的梯度上升/下降进行优化
下文,我们针对本节提及的三条式子进行推导。
【全连接网络反向传播关键公式推导】
反向传播算法是链式求导法则的应用。
按照机器学习的通用套路,我们先确定神经网络的目标函数,然后用随机梯度下降优化算法取求目标函数最小值时的参数值。
我们取网络所有输出层节点的误差平方和作为目标函数:
其中,
接着,我们对目标函数用随机梯度下降算法对目标函数进行优化:
我们看图:
在图中我们得知
化简后的结果中
而对于
case 1、输出层权值训练
对于输出层,
对于
对于
将上述推导结果代入,得:
令
将上述推导代入SGD(随机梯度下降公式),得:
case2、对于隐藏层:
我们事先定义j的所有直接下游节点集合
同样
【总结】
我们利用数学原理对神经网络进行了一次推导,但计算机对于真正意义上的仿真还存在一定的距离。但要真正踏入深度学习领域的大门,还有很长的路子要走。