感知器学习算法
⑴ 历史上第一个机器学习算法是什么
Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。使用adaboost分类器可以排除一些不必要的训练数据特征,并将关键放在关键的训练数据上面。
⑵ 干货 | 基础机器学习算法
本篇内容主要是面向机器学习初学者,介绍常见的机器学习算法,当然,欢迎同行交流。
哲学要回答的基本问题是从哪里来、我是谁、到哪里去,寻找答案的过程或许可以借鉴机器学习的套路:组织数据->挖掘知识->预测未来。组织数据即为设计特征,生成满足特定格式要求的样本,挖掘知识即建模,而预测未来就是对模型的应用。
特征设计依赖于对业务场景的理解,可分为连续特征、离散特征和组合高阶特征。本篇重点是机器学习算法的介绍,可以分为监督学习和无监督学习两大类。
无监督学习算法很多,最近几年业界比较关注主题模型,LSA->PLSA->LDA 为主题模型三个发展阶段的典型算法,它们主要是建模假设条件上存在差异。LSA假设文档只有一个主题,PLSA 假设各个主题的概率分布不变(theta 都是固定的),LDA 假设每个文档和词的主题概率是可变的。
LDA 算法本质可以借助上帝掷骰子帮助理解,详细内容可参加 Rickjin 写的《 LDA 数据八卦》文章,浅显易懂,顺便也科普了很多数学知识,非常推荐。
监督学习可分为分类和回归,感知器是最简单的线性分类器,现在实际应用比较少,但它是神经网络、深度学习的基本单元。
线性函数拟合数据并基于阈值分类时,很容易受噪声样本的干扰,影响分类的准确性。逻辑回归(Logistic Regression)利用 sigmoid 函数将模型输出约束在 0 到 1 之间,能够有效弱化噪声数据的负面影响,被广泛应用于互联网广告点击率预估。
逻辑回归模型参数可以通过最大似然求解,首先定义目标函数 L ( theta ),然后 log 处理将目标函数的乘法逻辑转化为求和逻辑(最大化似然概率 -> 最小化损失函数),最后采用梯度下降求解。
相比于线性分类去,决策树等非线性分类器具有更强的分类能力,ID3 和 C4.5 是典型的决策树算法,建模流程基本相似,两者主要在增益函数(目标函数)的定义不同。
线性回归和线性分类在表达形式上是类似的,本质区别是分类的目标函数是离散值,而回归的目标函数是连续值。目标函数的不同导致回归通常基于最小二乘定义目标函数,当然,在观测误差满足高斯分布的假设情况下,最小二乘和最大似然可以等价。
当梯度下降求解模型参数时,可以采用 Batch 模式或者 Stochastic 模式,通常而言,Batch 模式准确性更高,Stochastic 模式复杂度更低。
上文已经提到,感知器虽然是最简单的线性分类器,但是可以视为深度学习的基本单元,模型参数可以由自动编码( Auto Encoder )等方法求解。
深度学习的优势之一可以理解为特征抽象,从底层特征学习获得高阶特征,描述更为复杂的信息结构。例如,从像素层特征学习抽象出描述纹理结构的边缘轮廓特征,更进一步学习获得表征物体局部的更高阶特征。
俗话说三个臭皮匠赛过诸葛亮,无论是线性分类还是深度学习,都是单个模型算法单打独斗,有没有一种集百家之长的方法,将模型处理数据的精度更进一步提升呢?当然,Model Ensembe l就是解决这个问题。Bagging 为方法之一,对于给定数据处理任务,采用不同模型/参数/特征训练多组模型参数,最后采用投票或者加权平均的方式输出最终结果。
Boosting为Model Ensemble 的另外一种方法,其思想为模型每次迭代时通过调整错误样本的损失权重提升对数据样本整体的处理精度,典型算法包括 AdaBoost 、GBDT 等。
不同的数据任务场景,可以选择不同的 Model Ensemble 方法,对于深度学习,可以对隐层节点采用 DropOut 的方法实现类似的效果。
介绍了这么多机器学习基础算法,说一说评价模型优劣的基本准则。欠拟合和过拟合是经常出现的两种情况,简单的判定方法是比较训练误差和测试误差的关系,当欠拟合时,可以设计更多特征来提升模型训练精度,当过拟合时,可以优化特征量降低模型复杂度来提升模型测试精度。
特征量是模型复杂度的直观反映,模型训练之前设定输入的特征量是一种方法,另外一种比较常用的方法是在模型训练过程中,将特征参数的正则约束项引入目标函数/损失函数,基于训练过程筛选优质特征。
模型调优是一个细致活,最终还是需要能够对实际场景给出可靠的预测结果,解决实际问题。期待学以致用! 作者 晓惑 本文转自阿里技术,转载需授权
⑶ 多层感知器训练样本过多,预测不准,训练样本小则训练精度好!
文档介绍:
多层感知器学习算法研究
中文摘要
多层感知器是一种单向传播的多层前馈网络模型,由于具有高度的非线性映射能 力,是目前神经网络研究与应用中最基本的网络模型之一,广泛应用于模式识别、图 像处理、函数逼近、优化计算、最优预测和自适应控制等领域。而多层感知器采用的 是BP算法。BP算法的收敛速度慢是个固有的缺点,因为它是建立在基于只具有局 部搜索能力的梯度法之上的,是只具有局部搜索能力的方法,若用于多个极小点的目 标函数时,是无法避免陷入局部极小和速度慢的缺点的。因此,对BP算法的研究一 直以来都是非常重要的课题。
毕业设计课题旨在对多层感知器的学习算法进行研究,并提出一种新的学习算 法。由于BPWE (权值外推BP)算法和TBP (三项BP)算法都是基于权值调整的改 进算法,而考虑将TBP算法中的均衡因子融入到BPWE算法中,从而使后者对权值 的调整由原来的两项增加为三项,从而提出一种新的学习算法TWEBP算法。为了 验证本算法的优点,采用了三个例子,分别对异或问题、三分类问题和函数逼近问题 进行了实验,发现其收敛速度和逃离局部极小点的能力都优于传统算法。
⑷ 什么是LMS算法
LMS算法是指 Least mean square 算法的意思。
全称 Least mean square 算法。是最小均方算法中文。
感知器和自适应线性元件在历史上几乎是同时提出的,并且两者在对权值的调整的算法非常相似。它们都是基于纠错学习规则的学习算法。感知器算法存在如下问题:不能推广到一般的前向网络中;函数不是线性可分时,得不出任何结果。而由美国斯坦福大学的Widrow和Hopf在研究自适应理论时提出的LMS算法,由于其容易实现而很快得到了广泛应用,成为自适应滤波的标准算法。
⑸ 线性模型
这一篇的内容旨在对之前学习过的四种不同线性分类模型( Logistic 回归、softmax回归、感知器和支持向量机 )做一个整理。这些模型的区别主要在于使用了不同的损失函数。
线性模型(Linear Model)是机器学习中应用最广泛的模型,指通过样本特征的线性组合来进行预测的模型。给定一个 维样本 ,其线性组合函数为:
其中 为 维的权重向量, 为偏置。线性回归就是典型的线性模型,直接用 来预测输出目标 。
在分类问题中,由于输出 是一些离散的标签, 的值域为实数,因此无法直接用 来进行预测,需要引入一个 非线性的决策函数(Decision Function) 来预测输出目标:
其中 也称为 判别函数(Discriminant Function) 。
也就是说,一个线性分类模型(Linear Classification Model)或线性分类器(Linear Classifier),是由一个(或多个)线性的判别函数 和非线性的决策函数 组成。
二分类(Binary Classification)的类标签 只有两种取值,通常可设为 。
在二分类中我们只需要一个线性判别函数 。所有满足 的点组成一个分割超平面(Hyperplane),称为决策边界(Decision Boundary)或决策平面(Decision Surface)。决策边界将特征空间一分为二,划分成两个区域,每个区域对应一个类别。
线性模型试图学习到参数 ,使得对于每个样本 尽量满足:
上面两个公式也可以合并,即参数 尽量满足:
接下来我们会看到,对线性模型来说, 这一表达式是十分重要的。
于是我们可以定义: 对于训练集 ,若存在权重向量 ,对所有样本都满足 ,那么训练集 是线性可分的 。
接下来我们考虑多分类的情形,假设一个多类分类问题的类别为 ,常用的方式有以下三种:
若存在类别 ,对所有的其他类别 ,都满足 ,那么 属于类别 。即:
“一对其余”和“一对一”都存在一个缺陷:特征空间中会存在一些难以确定类别的区域,而“argmax”方式很好地解决了这个问题 。下图给出了用这三种方式进行三类分类的示例,其中不同颜色的区域表示预测的类别,红色直线表示判别函数 的直线。在“argmax”方式中,类 和类 的决策边界实际上由 决定,其法向量为 。
在本节中我们采用 以符合Logistic 回归的描述习惯。
为解决连续线枣简早性函数不适合进行分类的问题,我们引入非线性函数 来预测类别标签的后验概率 :
其中 通常称为 激活函数(Activation Function) ,其作用是把线性函数的值域从实数区间“挤压”到了 之间,可以用来表示概率。
在Logistic回归中,我们使用Logistic函数来作为激活函数。标签 的后验概率为:
标签 的后验概率为:
进行变换后得到:
其中 为样本 为正反例后验概率的比值,称为 几率(Odds) ,几率的对数称为对数几率。因此,Logistic 回归也称为 对数几率回归(Logit Regression) 。
Logistic回归采用交叉熵作为损失函数,并使用梯度下降法来对参数进行优化。 其风险函数为:
风险函数 是关于参数 的连续可导的凸函数。因此Logistic回归除咐判了梯度下凳雀降法之外还可以用高阶的优化方法,比如牛顿法,来进行优化。
Softmax回归,也称为多项(multinomial)或多类(multi-class)的Logistic回归,是 Logistic回归在多类分类问题上的推广 。
对于多类问题,类别标签 可以有 个取值。给定一个样本x,Softmax回归预测的属于类别 的条件概率为:
其中 是第 类的权重向量。
Softmax回归的决策函数可以表示为:
给定 个训练样本 , Softmax回归使用交叉熵损失函数来学习最优的参数矩阵 。
采用交叉熵损失函数,Softmax回归模型的风险函数为:
风险函数 关于 的梯度为:
采用梯度下降法,Softmax回归的训练过程为:
感知器可谓是最简单的人工神经网络,只有一个神经元。
感知器是一种简单的两类线性分类模型,其分类准则为:
给定N 个样本的训练集: ,其中 ,感知器学习算法试图找到一组参数 ,使得对于每个样本 有
感知器的学习算法是一种错误驱动的在线学习算法,先初始化一个权重向量 (通常是全零向量),然后每次分错一个样本 时,即 ,就用这个样本来更新权重:
根据感知器的学习策略,可以反推出 感知器的损失函数 为:
采用随机梯度下降,其每次更新的梯度为:
感知器收敛性不再证明,参考之前的笔记 https://www.jianshu.com/p/d83aa6c8068f 。
感知器的学习到的权重向量和训练样本的顺序相关。 在迭代次序上排在后面的错误样本,比前面的错误样本对最终的权重向量影响更大 。比如有1000个训练样本,在迭代100个样本后,感知器已经学习到一个很好的权重向量。在接下来的899个样本上都预测正确,也没有更新权重向量。但是在最后第1000 个样本时预测错误,并更新了权重。这次更新可能反而使得权重向量变差。
为了改善这种情况,可以使用“参数平均”的策略来提高感知器的鲁棒性,也叫 投票感知器 (投票感知器是一种集成模型)。
投票感知器记录第 次更新后得到的权重 在之后的训练过程中正确分类样本的次数 。这样最后的分类器形式为:
投票感知器虽然提高了感知器的泛化能力,但是需要保存 个权重向量。在实际操作中会带来额外的开销。因此,人们经常会使用一个简化的版本,也叫做平均感知器:
其中 为平均的权重向量。
给定N 个样本的训练集: ,其中 ,如果两类样本是线性可分的,即存在一个超平面:
将两类样本分开,那么对于每个样本都有 。
数据集 中每个样本 到分割超平面的距离为:
定义整个数据集 中所有样本到分割超平面的最短距离为间隔(Margin) :
如果间隔 越大,其分割超平面对两个数据集的划分越稳定,不容易受噪声等因素影响。支持向量机的目标是寻找一个超平面 使得 最大,即:
令 ,则上式等价于:
数据集中所有满足 的点,都称为 支持向量 。
接下来的推导不详细叙述了,之前的笔记里已经记录过。
软间隔的优化问题形式如下:
其中 称为 Hinge损失函数 。 可以看作是正则化系数。
其实这一节才是整理的关键,有助于厘清各个分类器之间的联系。
⑹ 为什么感知器选择正负一作为分类的输出,而不是1,2或5,-5
感知启没器学习算法是神羡清经网络中的一个概念,单层感知器是最简单的神经网络,输入层和输出层直接相连。
每一个输入端和其上的权值相乘,然后将这些乘积相加得到乘积和,这个结果与阈值相比较(一般为0),若大于阈值输出端就取1,反之,输出端取-1。
2、权值更新
初始权重向量W=[0,0,0],更新公式W(i)=W(i)+ΔW(i);ΔW(i)=η*(y-y’)*X(i);
η:学习率,介于[0,1]之间
y:输入样本的正确分类
y’:感知器计算出来的分类
通过上面公式不断更新权值,直到达到分类要求。
3、算法步骤
初始化权重向量W,与输入向量做点乘悄派纳,将结果与阈值作比较,得到分类结果1或-1。
⑺ 感知机算法及收敛性证明
感知机算法其实已经很熟悉了,这次看《统计学习方法》权当复习一遍,然后有一橘念个point对我来说是新的—— 感知机算法实际上采用了随机梯度下降 。这其实是一个很显然的点,但我之前看到的资料都是直接说明了超平面参数的更新方式,并从几何直观上解释了这样做是为了让超平面向误分样本点的方向旋转,而未从梯度的角度来解释,这里补充一下这个角度。
感知机(perceptron)是二分类线性分类模型,其输入空间(特征空间)是 ,输出空间是 ,前伍简由输入空间到输出空间的如下函数:
称为感知机。 和 分别是感知机的权值和偏置。
感知机的损失函数定义为 所有误分类点到超平面的距离慧裤之和 ,即:
其中 表示误分类点的集合,若 固定,则损失函数梯度为:
采用随机梯度下降法,每次随机选取一个误分类点 ,对 进行更新:
其中 称为学习率。
感知机算法流程如下:
(1)选取初值 。
(2)在训练集中选取数据 。
(3)如果 ,则更新参数:
(4)转至(2)直至训练集中无误分点。
所谓感知机算法的收敛性,就是说只要给定而分类问题是线性可分的,那么按上述感知机算法进行操作,在有限次迭代后一定可以找到一个可将样本完全分类正确的超平面。
首先,为了方便推导,我们将偏置 并入权重向量 ,记作 ,同样将输入向量加以扩充,记作 ,显然, 。
既然样本是线性可分的,我们可以假设有一个满足条件 的超平面 将样本点完全正确分开,且存在 ,对所有 ,有:
令 ,则感知机算法在训练集上误分类次数 满足:
证明:
结合上述两个结论,可以得到:
从而感知机算法的收敛性得证。
⑻ 感知机(Perceptron)
在之前的文章中我们已经讲过了逻辑回归分类器,现在趁热打铁总结一下与逻辑回归非常相似的感知机模型。感知机模型是一个非常古老的分类算法,现在很少会单独使用它,但是它的原理简单有效,很值得学习和理解,从原理上来说,感知机模型是神经网络和支持向量机的基础,理解了感知机有利于理解支持向量机和神经网络的原理。
在 广义线性模型(4)逻亩旁辑回归 中我们说逻辑回归可以视为包含一个线性回归和一个值域映射两个过程,如果拿逻辑回归与感知机作比较的话,可以说感知机也同样包括这两个过程,只不过它的值域映射比逻辑回归简单很多,感知机直接将线性模型的输出映射为+1和-1,即需要预测的两个类别上,正可谓简单粗暴。所以说,感知机也是线性模型,用来处理线性可分的二分类问题,同样属于判别模型。
感知机假设数据线性可分的,希望通过学习得到一个线性的决策边界,将训练数据集正样本点和负样本点完全正确分开的分离,在决策边界一侧为正样本,另一侧为负样本,这个思路跟逻辑回归是一样的。
感知机模型可以表示为下式,其中 函数将线性模型的输出映射为预测类别:
由点到超平面的距离计算方法可知: 代表了样本点到决策边界的距离(文章没有用 的形式,抛弃了常数项的问题,其实是不准确的,若有看官,还请不要介意);
同时我们可知, 的样本类别输出值取为1,满足 的样本类别输出值取为-1,因此正确分类的样本满足 ,而错误分类的样本满足 , 表示了错误分类的样本到决策超平面的距离,感知机损失函数的优化目标,就是期望使错误分类的所有样本到超平面的距离之和最小(正样本+1,负样本-1这样的定义方式使得定义损失函数变得很方便),损失函数为:
式中,M为样本中所有错误分类样本点的集合。实际上,我们会把损失函数中参数的L2正则项 扔掉,认为它不会影响优化结果,即得到损失函数:
为什么可以不考虑 呢? 搜索解空间的时候, 会一直在变化啊?我觉得这个挺难理解的,根据资料及猜测,我觉得勉强能接受的原因为:
确定了损失函数的形式,接下来就要进行损失函数的优化,还是使用梯度下降,由于损失函数中只有错误分类的样本点才参与计算,所以不需要使用普通的批量梯度下降了,我们选择使用 随机梯度下降 , 每次迭代只使用一个错误分类的样本来对参数进行更新 。
感知机的学习算法的原始形式即直接使用梯度下降,其学习过程为:
可以发现,在原始形式中,每一轮迭代都需要判断各个样本点是不是错误分类点,既对于每个样本点 都需要计算 ,向量内积 的时间复杂度为 ,因此总的时间复杂度为 ,其中N为样本点数量,k为迭代次数(虽然每次迭代不需要全部遍历N个样本,不过表达时间复杂度时可以去掉因子保留变量,表示成 ),这个时间复杂度还是比较高的,有没有更快捷的计算方法呢?我们来看看感知机的学习算法的对偶形式。
什么叫对偶形式?这里的对偶可不是“三尺剑,六钧弓”的意思,优化理论中的对偶问题是指每一个线性规划问题(称为原始问题)有一迅余橡个与它对应的对偶线性规划问题(称为对偶问题),原始问题与对偶问题的解是对应的,得出一个问题的解,另一个问题的解也就得到了,可以简单的理解为从不同角度看待同一个问题,通过改变这个问题的形式使得我们更好求解。
根据感知机学习算法的原始形式可知,只有错误分类的样本点才会用于梯度下降计算,对于被 次误分类而更新的样本 ,它参与 迭代的次数同样为 。如果令参数 初始值为 , 这样我们的 的表达毁汪式可以写为:
表示对全部样本 中的每个个样本点进行 次梯度下降,其中没被错误分类过的样本点 。引用知乎上一个答案对 的理解:
这样参数 的学习问题就转变成了样本错误分类次数 的学习问题,此之谓“对偶”也。这样做的好处是什么呢?原始形式的痛点在于 中的内积运算,在对偶问题中转变为:
由内积 转变为内积 ,区别是 是已知的,可以提前通过矩阵运算得到Gram矩阵保存下来重用,样本循环和迭代的时间复杂度不变, 个 维向量的内积计算提前,所以时间复杂度大概可以表示为 ,与 倒不太好比较,不过这里按矩阵运算的时间复杂度完全没有优化来计算的,实际肯定比这小得多,并且工程上矩阵运算都是高度优化过的,非常快,所以对偶形式在使用效率上是很有优势的。
对偶形式的学习过程为:
感知机算法原理很简单,但其中很多思路很棒,所以由它发展出了神经网络、支持向量机这样的更复杂、更准确的算法,搞懂了感知机模型的基本原理,接下来我们就来写一写跟它很相似的支持向量机~
主要参考
《统计学习方法》 李航
感知机的损失函数为什么可以采用函数间隔(忽略1/||w||)?
如何理解感知机学习算法的对偶形式?
⑼ 神经网络算法
20 世纪五、六⼗年代,科学家 Frank Rosenblatt其受到 Warren McCulloch 和 Walter Pitts早期的⼯作的影响,发明了感知机(Perceptrons)。
⼀个感知器接受⼏个⼆进制输⼊, ,并产⽣⼀个⼆进制输出:
如上图所示的感知机有三个输⼊: 。通常可以有更多或更少输⼊。 我们再引⼊权重: ,衡量输入对输出的重要性。感知机的输出为0 或者 1,则由分配权重后的总和 ⼩于等于或者⼤于阈值决定。和权重⼀样,阈值(threshold)是⼀个实数,⼀个神经元的参数。⽤更精确的代数形式如下:
给三个因素设置权重来作出决定:
可以把这三个因素对应地⽤⼆进制变量 来表⽰。例如,如果天⽓好,我们把
,如果不好, 。类似地,如果你的朋友陪你去, ,否则 。 也类似。
这三个对于可能对你来说,“电影好不好看”对你来说最重要,而天气显得不是那么的重要。所以你会这样分配权值: ,然后定义阈值threshold=5。
现在,你可以使⽤感知器来给这种决策建⽴数学模型。
例如:
随着权重和阈值的变化,你可以得到不同的决策模型。很明显,感知机不是⼈做出决策使⽤的全部模型。但是这个例⼦说明了⼀个感知机如何能权衡不同的依据来决策。这看上去也可以⼤致解释⼀个感知机⽹络有时确实能够做出一些不错的决定。
现在我们队上面的结构做一点变化,令b=-threshold,即把阈值移到不等号左边,变成偏置, 那么感知器的规则可以重写为:
引⼊偏置只是我们描述感知器的⼀个很⼩的变动,但是我们后⾯会看到它引导更进⼀步的符号简化。因此,我们不再⽤阈值,⽽总是使⽤偏置。
感知机是首个可以学习的人工神经网络,它的出现引起的神经网络的第一层高潮。需要指出的是,感知机只能做简单的线性分类任务,而且Minsky在1969年出版的《Perceptron》书中,证明了感知机对XOR(异或)这样的问题都无法解决。但是感知机的提出,对神经网络的发展是具有重要意义的。
通过上面的感知机的观察我们发现一个问题,每个感知机的输出只有0和1,这就意味着有时我们只是在单个感知机上稍微修改了一点点权值w或者偏置b,就可能造成最终输出完全的反转。也就是说,感知机的输出是一个阶跃函数。如下图所示,在0附近的时候,输出的变化是非常明显的,而在远离0的地方,我们可能调整好久参数也不会发生输出的变化。
这样阶跃的跳变并不是我们想要的,我们需要的是当我们队权值w或者偏置b做出微小的调整后,输出也相应的发生微小的改变。这同时也意味值我们的输出不再只是0和1,还可以输出小数。由此我们引入了S型神经元。
S型神经元使用 S 型函数,也叫Sigmoid function函数,我们用它作为激活函数。其表达式如下:
图像如下图所示:
利⽤实际的 σ 函数,我们得到⼀个,就像上⾯说明的,平滑的感知器。 σ 函数的平滑特性,正是关键因素,⽽不是其细部形式。 σ 的平滑意味着权重和偏置的微⼩变化,即 ∆w 和 ∆b,会从神经元产⽣⼀个微⼩的输出变化 ∆output。实际上,微积分告诉我们
∆output 可以很好地近似表⽰为:
上面的式子是⼀个反映权重、偏置变化和输出变化的线性函数。这⼀线性使得我们可以通过选择权重和偏置的微⼩变化来达到输出的微⼩变化。所以当 S 型神经元和感知器本质上是相同的,但S型神经元在计算处理如何变化权重和偏置来使输出变化的时候会更加容易。
有了对S型神经元的了解,我们就可以介绍神经网络的基本结构了。具体如下:
在⽹络中最左边的称为输⼊层,其中的神经元称为输⼊神经元。最右边的,即输出层包含有输出神经元,在图中,输出层只有⼀个神经元。中间层,既然这层中的神经元既不是输⼊也不是输出,则被称为隐藏层。
这就是神经网络的基本结构,随着后面的发展神经网络的层数也随之不断增加和复杂。
我们回顾一下神经网络发展的历程。神经网络的发展历史曲折荡漾,既有被人捧上天的时刻,也有摔落在街头无人问津的时段,中间经历了数次大起大落。
从单层神经网络(感知机)开始,到包含一个隐藏层的两层神经网络,再到多层的深度神经网络,一共有三次兴起过程。详见下图。
我们希望有⼀个算法,能让我们找到权重和偏置,以⾄于⽹络的输出 y(x) 能够拟合所有的 训练输⼊ x。为了量化我们如何实现这个⽬标,我们定义⼀个代价函数:
这⾥ w 表⽰所有的⽹络中权重的集合, b 是所有的偏置, n 是训练输⼊数据的个数,
a 是表⽰当输⼊为 x 时输出的向量,求和则是在总的训练输⼊ x 上进⾏的。当然,输出 a 取决于 x, w和 b,但是为了保持符号的简洁性,我没有明确地指出这种依赖关系。符号 ∥v∥ 是指向量 v 的模。我们把 C 称为⼆次代价函数;有时也称被称为均⽅误差或者 MSE。观察⼆次代价函数的形式我们可以看到 C(w, b) 是⾮负的,因为求和公式中的每⼀项都是⾮负的。此外,代价函数 C(w,b)的值相当⼩,即 C(w; b) ≈ 0,精确地说,是当对于所有的训练输⼊ x, y(x) 接近于输出 a 时。因
此如果我们的学习算法能找到合适的权重和偏置,使得 C(w; b) ≈ 0,它就能很好地⼯作。相反,当 C(w; b) 很⼤时就不怎么好了,那意味着对于⼤量地输⼊, y(x) 与输出 a 相差很⼤。因此我们的训练算法的⽬的,是最⼩化权重和偏置的代价函数 C(w; b)。换句话说,我们想要找到⼀系列能让代价尽可能⼩的权重和偏置。我们将采⽤称为梯度下降的算法来达到这个⽬的。
下面我们将代价函数简化为C(v)。它可以是任意的多元实值函数, 。
注意我们⽤ v 代替了 w 和 b 以强调它可能是任意的函数,我们现在先不局限于神经⽹络的环境。
为了使问题更加简单我们先考虑两个变量的情况,想象 C 是⼀个只有两个变量 和 的函数,我们的目的是找到 和 使得C最小。
如上图所示,我们的目的就是找到局部最小值。对于这样的一个问题,一种方法就是通过微积分的方法来解决,我们可以通过计算导数来求解C的极值点。但是对于神经网络来说,我们往往面对的是非常道的权值和偏置,也就是说v的维数不只是两维,有可能是亿万维的。对于一个高维的函数C(v)求导数几乎是不可能的。
在这种情况下,有人提出了一个有趣的算法。想象一下一个小球从山顶滚下山谷的过程, 我们的⽇常经验告诉我们这个球最终会滚到⾕底。我们先暂时忽略相关的物理定理, 对球体的⾁眼观察是为了激发我们的想象⽽不是束缚我们的思维。因此与其陷进物理学⾥凌乱的细节,不如我们就这样问⾃⼰:如果我们扮演⼀天的上帝,能够构造⾃⼰的物理定律,能够⽀配球体可以如何滚动,那么我们将会采取什么样的运动学定律来让球体能够总是滚落到⾕底呢?
为了更精确地描述这个问题,让我们思考⼀下,当我们在 和 ⽅向分别将球体移动⼀个很⼩的量,即 ∆ 和 ∆ 时,球体将会发⽣什么情况。微积分告诉我们 C 将会有如下变化:
也可以用向量表示为
现在我们的问题就转换为不断寻找一个小于0的∆C,使得C+∆C不断变小。
假设我们选取:
这⾥的 η 是个很⼩的正数(称为学习速率),于是
由于 ∥∇C∥2 ≥ 0,这保证了 ∆C ≤ 0,即,如果我们按照上述⽅程的规则去改变 v,那么 C
会⼀直减⼩,不会增加。
所以我们可以通过不断改变v来C的值不断下降,是小球滚到最低点。
总结⼀下,梯度下降算法⼯作的⽅式就是重复计算梯度 ∇C,然后沿着相反的⽅向移动,沿着⼭⾕“滚落”。我们可以想象它像这样:
为了使梯度下降能够正确地运⾏,我们需要选择合适的学习速率η,确保C不断减少,直到找到最小值。
知道了两个变量的函数 C 的梯度下降方法,我们可以很容易的把它推广到多维。我们假设 C 是⼀个有 m 个变量 的多元函数。 ∆C 将会变为:
其中, ∇C为
∆v为:
更新规则为:
在回到神经网络中,w和b的更新规则为:
前面提到神经⽹络如何使⽤梯度下降算法来学习他们⾃⾝的权重和偏置。但是,这⾥还留下了⼀个问题:我们并没有讨论如何计算代价函数的梯度。这里就需要用到一个非常重要的算法:反向传播算法(backpropagation)。
反向传播算法的启示是数学中的链式法则。
四个方程:
输出层误差方程:
当前层误差方程:
误差方程关于偏置的关系:
误差方程关于权值的关系
算法描述:
检视这个算法,你可以看到为何它被称作反向传播。我们从最后⼀层开始向后计算误差向量δ。这看起来有点奇怪,为何要从后⾯开始。但是如果你认真思考反向传播的证明,这种反向移动其实是代价函数是⽹络输出的函数的结果。为了理解代价随前⾯层的权重和偏置变化的规律,我们需要重复作⽤链式法则,反向地获得需要的表达式。
参考链接: http://neuralnetworksanddeeplearning.com/