梯度下降法解神经网络

本文是Andrew Ng在Coursera的机器学习课程的笔记。

整体步骤

  • 确定网络模型
  • 初始化权重参数
  • 对于每个样例,执行以下步骤直到收敛
  1. 计算模型输出:forward propagation
  2. 计算代价函数:比较模型输出与真实输出的差距
  3. 更新权重参数:back propagation

确定网络模型

神经网络模型由输入层(layer 1)、中间层(layer 2,..,L-1)、输出层(layer L)三部分组成。输入层每个单元代表一个特征,输出层的每个单元代表一个类别。

如果我们的目标如果是识别一张20x20像素的图片上写的数字(0~9),那么输入层是一个400维的向量,每一维是某个位置的像素值;输出层的第一个单元输出一个(0,1)之间的数,表示结果属于0的概率,其他单元以此类推。

相邻层间的线都附带权重参数,用 θ 表示。例如,\( \theta_{53}^{(1)} \) 表示Layer1的第3个节点与Layer2的第5个节点的线段的权重,这些权重决定了模型的作用,神经网络的目标就是通过样本来计算权重。

每一个中间层和输出层的节点(图中橙色的圈)都是一个Logistic函数 g(z)=a,例如\( z_1^{(2)} \)表示第二层的第一个节点的输入值,带入Logistic函数得到输出\( a_1^{(2)} \) (a表示activation,激励)。

初始化权重参数

如果我们将权重参数θ初始化为0,那么训练对每层内部的各个节点的影响都相同,每层内所有点的效用等价于一个节点的效用,需要避免这种情况。解决方法是将权重参数随机初始化为[-ε,ε]之间,ε是预设的一个足够小的值。

% L_in(out): node number inside layer L_in(out).

epsilon_init = 0.12;
W = rand(L_out, 1 + L_in) * 2 * epsilon_init - epsilon_init;

训练模型

神经网络的训练的过程与线性回归逻辑斯蒂回归的过程相似,依然是:

  • 计算代价函数:J(θ)
  • 调整参数θ,使得代价函数值尽量小

接下来的任务是:对于每一个样本,计算当前模型下该样本的输出,求出代价函数,再根据输出来更新权重参数。

模型输出:forward propagation

计算神经网络模型的输出比较简单:

  • 令a(1)=x,加入bias项(+1),即a(1)=[1  a(1)]
  • z(2)(1)a(1)
  • a(2)=g(z(2)),加入bias项(+1),即a(2)=[1  a(2)]
  • z(3)(2)a(2)
  • a(3)=g(z(3)),得到我们需要的结果

需要注意的就是每一步加入的bias项。

代价函数

定义公式为:

这个公式与逻辑斯蒂回归定义的代价函数比较相似。m是样本的个数,由于神经网络有K个输出,其代价函数也相应地计算了K个输出的代价。公式第二行是为了防止过拟合而设置的。

有了代价函数之后,我们下一个目标就是调整参数,让代价函数最小,使用的方法是反向传播算法。

反向传播:back propagation

我们用反向传播算法的目的是为了求代价函数关于各个权重系数的偏导数,以此来更新各个权重系数。反向传播的关键在于链式求导法则。

以右图为例,假如我们要求\( {\partial J}/{\partial \theta_{45}^{(3)}} \),即(第3层,第5节点)到(第4层,第4节点)的边的权重的偏导,我们有:

\( {\partial J}/{\partial \theta_{45}^{(3)}}=[{\partial J}/{\partial a_{4}^{(4)}} * {\partial  a_{4}^{(4)}}/{\partial z_{4}^{(4)}}] * {\partial  z_{4}^{(4)}}/{\partial \theta_{45}^{(3)}}\)

这就是链式法则的应用。计算右式,有:

① \( {\partial J}/{\partial a_{4}^{(4)}} * {\partial  a_{4}^{(4)}}/{\partial z_{4}^{(4)}} = a_4^{(4)} - y_4 \)

② \( {\partial  z_{4}^{(4)}}/{\partial \theta_{45}^{(3)}} = a_4  \)

接下来我们继续计算\( {\partial J}/{\partial \theta_{53}^{(2)}} \),即(第2层,第3节点)到(第3层,第5节点)的边的权重的偏导,我们有:

\( {\partial J}/{\partial \theta_{53}^{(2)}}=[[{\partial J}/{\partial a_{1}^{(4)}} * {\partial  a_{1}^{(4)}}/{\partial z_{1}^{(4)}}] * {\partial  z_{1}^{(4)}}/{\partial a_{5}^{(3)}} * {\partial a_{5}^{(3)}} / {\partial z_{5}^{(3)}}]*{\partial z_{5}^{(3)}} / {\partial \theta_{53}^{(2)}} +{\partial J}/{\partial a_{2}^{(4)}}... \)

可以看出,第L层的偏导公式与第L-1层有很大部分是重叠的,我们可以直接用计算的中间结果,这也就是“传播”的意义。上面公式中,用[中括号]标注的,就是接下来要介绍的 δ .

δ:(第 层,第 j 个节点)的error

本段介绍的是δ(L) 与δ(L-1) 之间的关系。

将公式中的[中括号]部分提取出来,得到 \( \delta_j^{(l)} \),即为(第 l 层,第 j 个节点)的error值,照着上面公式替代重叠部分,可以得到:

  • \( \delta_j^{(4)}=a_j^{(4)}-y_j \)
  • \( \delta_j^{(3)}=(\Theta^{(3)})^T \delta^{(4)}.*g‘(z^{(3)}) \)
  • \( \delta_j^{(2)}=(\Theta^{(2)})^T \delta^{(3)}.*g‘(z^{(2)}) \)
  • 注意:我们没有 \( \delta_j^{(1)} \)

\( \delta_j^{(l)} \)可以理解为反映了(第 层,第 j 个节点)理想值与实际值之间的error。输出层的error就是理想值与实际值的差值;中间层的error由输出层反向传播得到,可以理解为他们各自需要为下一层的error付多少责任。

偏导数与δ的关系

本段介绍的是δ 与偏导数的关系。对照公式可以得到:

\( \partial J(\theta)/\partial \theta_{ij}^{(l)} = a_j^{(l)}\delta_i^{(l+1)} \)

从这里可以看出,求出一层的δ,就能求出一层的偏导数。

小结

BP传播的原理并不复杂,关键就在于反向传播过程的链式偏导法则的应用。实际使用中,需要注意:

  • δ 与δ 之间的递推关系
  • 偏导数与δ 之间的联系

这些东西太久不用肯定会忘的,需要学而时习之。

训练过程

完整的训练过程如下所示:

梯度检查:Gradient Checking

利用以上方法训练,很有可能由于某些原因出现bug,导致结果失败。不过,一个简单的梯度检查就能极大程度地排除这些bug。

梯度检查的想法很简单。当我们利用BP算法将所有的样本都过一遍,得到J关于各个θ的梯度值时(易错但比较高效),我们再利用梯度计算,在数值上近似求得梯度值(正确但比较耗时)。比较这两者的值,如果差别不大,就说明BP算法正在正确进行。以下是梯度检查的方法:

梯度检查比较耗时,所以只能在前几轮中使用梯度检查,之后应该及时关掉梯度检查。

for i = 1:n,
thetaPlus = theta;
thetaPlus(i) = thetaPlus(i) + EPSILON;
thetaMinus = theta;
thetaMinus(i) = thetaMinus(i) – EPSILON;
gradApprox(i) = (J(thetaPlus) – J(thetaMinus))
			  /(2*EPSILON);
end;

梯度下降法解神经网络,布布扣,bubuko.com

时间: 2024-10-12 21:42:38

梯度下降法解神经网络的相关文章

梯度下降法解逻辑斯蒂回归

梯度下降法解逻辑斯蒂回归 本文是Andrew Ng在Coursera的机器学习课程的笔记. Logistic回归属于分类模型.回顾线性回归,输出的是连续的实数,而Logistic回归输出的是[0,1]区间的概率值,通过概率值来判断因变量应该是1还是0.因此,虽然名字中带着"回归"(输出范围常为连续实数),但Logistic回归属于分类模型(输出范围为一组离散值构成的集合). 整体步骤 假如我们的自变量是"数学课和英语课的成绩",x={x1,x2},因变量是"

机器学习(一):梯度下降、神经网络、BP神经网络

这几天围绕论文A Neural Probability Language Model 看了一些周边资料,如神经网络.梯度下降算法,然后顺便又延伸温习了一下线性代数.概率论以及求导.总的来说,学到不少知识.下面是一些笔记概要. 一. 神经网络 神经网络我之前听过无数次,但是没有正儿八经研究过.形象一点来说,神经网络就是人们模仿生物神经元去搭建的一个系统.人们创建它也是为了能解决一些其他方法难以解决的问题. 对于单一的神经元而言,当生物刺激强度达到一定程度,其就会被激发,然后做出一系列的反应.模仿这

解梯度下降法的三种形式BGD、SGD以及MBGD

原帖地址:https://zhuanlan.zhihu.com/p/25765735           在应用机器学习算法时,我们通常采用梯度下降法来对采用的算法进行训练.其实,常用的梯度下降法还具体包含有三种不同的形式,它们也各自有着不同的优缺点. 下面我们以线性回归算法来对三种梯度下降法进行比较. 一般线性回归函数的假设函数为: $$h_\theta=\sum_{j=0}^n\theta_jx_j$$   对应的损失函数为: $$J_{train}(\theta)=\frac1{2m}\s

深度神经网络与梯度下降法

神经元的数学表示 神经元可以理解为一个具有多个输入.单个输出的模型,输入和输出的关系可以用一个函数来表示.如果用\(x_1,x_2,x_3,\cdots,x_n\)表示输入,\(y\)表示输出,那么这个函数可以表示为: \[y = a(w_1x_1+w_2x_2+w_3x_3+\cdots+w_nx_n+b)\] 其中,\(w_1,w_2,w_3,\cdots,w_n\)称做神经元的权重,\(b\)称作神经元的偏置,\(a\)是一个非线性函数,称作神经元的激活函数. 常用激活函数 单位阶跃函数

逻辑回归(logistic-regression)之梯度下降法详解

引言 逻辑回归常用于预测疾病发生的概率,例如因变量是是否恶性肿瘤,自变量是肿瘤的大小.位置.硬度.患者性别.年龄.职业等等(很多文章里举了这个例子,但现代医学发达,可以通过病理检查,即获取标本放到显微镜下观察是否恶变来判断):广告界中也常用于预测点击率或者转化率(cvr/ctr),例如因变量是是否点击,自变量是物料的长.宽.广告的位置.类型.用户的性别.爱好等等. 本章主要介绍逻辑回归算法推导.梯度下降法求最优值的推导及spark的源码实现. 常规方法 一般回归问题的步骤是: 1. 寻找预测函数

高尔夫距离精度数据拟合——梯度下降法详解

Dataset 本文的数据集pga.csv包含了职业高尔夫球手的发球统计信息,包含两个属性:accuracy 和 distance.accuracy 精确度描述了命中球道( fairways hit)的比例,Distances 描述的是发球的平均距离.我们的目的是用距离来预测命中率.在高尔夫中,一个人发球越远,那么精度会越低. 对于很多机器学习算法来说,输入数据会先进行一些预处理,比如规范化,因为当计算两个特征向量的距离时,当一个特征的取值很大,那么这个距离会偏向取值较大的那个特征.因此此处的精

Hulu机器学习问题与解答系列 | 二十四:随机梯度下降法

Hulu优秀的作者们每天和公式抗争,只为提升你们的技能,感动的话就把文章看完,然后哭一个吧. 今天的内容是 [随机梯度下降法] 场景描述 深度学习得以在近几年迅速占领工业界和学术界的高地,重要原因之一是数据量的爆炸式增长.如下图所示,随着数据量的增长,传统机器学习算法的性能会进入平台期,而深度学习算法因其强大的表示能力,性能得以持续增长,甚至在一些任务上超越人类.因此有人戏称,"得数据者得天下". 经典的优化方法,例如梯度下降法,每次迭代更新需要用到所有的训练数据,这给求解大数据.大规

梯度下降法

梯度下降法在凸优化中应用很广泛.经常使用于求凸函数极值. 梯度是个向量.其形式为 一般是表示函数上升最快的方向.因此.我们仅仅须要每一步往梯度方向走一小步.终于就能够到达极值点,其表现形式为: 初始点为x0. 然后往梯度的反方向移动一小步r到x1. 再次往梯度反方向移动r到x2,... ....终于会越来越接近极值点min的. 迭代时的公式为X(n+1) = X(n) - r * grad(f) 以下举样例说明梯度下降法求极值点的有效性: #!/usr/bin/python # -*- codi

转:梯度下降法(上升法)的几何解释

梯度下降法是机器学习和神经网络学科中我们最早接触的算法之一.但是对于初学者,我们对于这个算法是如何迭代运行的从而达到目的有些迷惑.在这里给出我对这个算法的几何理解,有不对的地方请批评指正! 梯度下降法定义 (维基百科)梯度下降法,基于这样的观察:如果实值函数  在点  处可微且有定义,那么函数 在  点沿着梯度相反的方向  下降最快. 因而,如果                         对于  为一个够小数值时成立,那么 . 考虑到这一点,我们可以从函数  的局部极小值的初始估计  出发