前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第十篇:《机器学习之神经网络(四)》

第十篇:《机器学习之神经网络(四)》

作者头像
ACM算法日常
发布2018-12-10 11:58:21
4370
发布2018-12-10 11:58:21
举报
文章被收录于专栏:ACM算法日常ACM算法日常

(因后文学术性较强,部分内容参见吴恩达在斯坦福大学的讲义)

与世无争的吴恩达老师

本篇内容:神经网络算法的反向传播

通过本篇的学习您将学习神经网络的反向传播算法

反向传播算法是神经网络算法最为重要的知识点之一

反向传播算法

之前我们在计算神经网络预测结果的时候我们采用了一种正向传播方法,

我们从第一层开始正向一层一层进行计算,直到最后一层的。(逻辑回归)

现在,为了计算代价函数的偏导数,我们需要采用一种反向传播算法,

也就是首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层。

(算出上一层对于下一层的影响,来调整参数,达到最终拟合的效果)

以一个例子来说明反向传播算法。

假设我们的训练集只有一个实例,我们的神经网络是一个四层的神经网络,

其中:输出类 K=4,输出层神经元 SL=4,层数 L=4

前向传播算法:

我们从最后一层的误差开始计算,误差是激活单元的预测(ak(4))

与实际值(yk)之间的误差( k = 1 : k)。

我们用 δ 来表示误差,则:δ(4)= α(4)- y

重要的是清楚地知道上面式子中上下标的含义:

l 代表目前所计算的是第几层。

i 代表目前计算层中的激活单元的下标,也将是下一层的第个输入变量的下标。

j 代表下一层中误差单元的下标,是受到权重矩阵中第行影响的下一层中的误差单元的下标。

如果我们考虑正则化处理,并且我们的训练集是一个特征矩阵而非向量。在上面的特殊情况中,我们需要计算每一层的误差单元来计算代价函数的偏导数。在更为一般的情况中,我们同样需要计算每一层的误差单元,但是我们需要为整个训练集计算误差单元,此时的误差单元也是一个矩阵,

我们的算法表示为:

即首先用正向传播方法计算出每一层的激活单元,利用训练集的结果与神经网络预测的结果求出最后一层的误差,然后利用该误差运用反向传播法计算出直至第二层的所有误差。

在求出了 ∆ij(l) 之后,我们便可以计算代价函数的偏导数了,计算方法如下:

在Octave 中,如果我们要使用 fminuc这样的优化算法来求解求出权重矩阵,我们需要将矩阵首先展开成为向量,在利用算法求出最优解后再重新转换回矩阵。

假设我们有三个权重矩阵,Theta1,Theta2 和 Theta3,尺寸分别为 10*1110*11 和1*11, 下面的代码可以实现这样的转换:

thetaVec = [Theta1(:) ; Theta2(:) ; Theta3(:)] ...optimization using functions like fminuc... Theta1 = reshape(thetaVec(1:110, 10, 11); Theta2 = reshape(thetaVec(111:220, 10, 11); Theta1 = reshape(thetaVec(221:231, 1, 11);

反向传播算法的直观理解

“在上一节,我们介绍了反向传播算法,对很多人来说,当第一次看到这种算法时,第一印象通常是,这个算法需要那么多繁杂的步骤,简直是太复杂了,实在不知道这些步骤,到底应该如何合在一起使用。就好像一个黑箱,里面充满了复杂的步骤。如果你对反向传播算法也有这种感受的话,这其实是正常的,相比于线性回归算法和逻辑回归算法而言,从数学的角度上讲,反向传播算法似乎并不简洁,对于反向传播这种算法,其实我已经使用了很多年了,但即便如此,即使是现在,我也经常感觉自己对反向传播算法的理解并不是十分深入,对于反向传播算法究竟是如何执行的,并没有一个很直观的理解。做过编程练习的同学应该可以感受到这些练习或多或少能帮助你,将这些复杂的步骤梳理了一遍,巩固了反向传播算法具体是如何实现的,这样你才能自己掌握这种算法。

在本节中,我想更加深入地讨论一下反向传播算法的这些复杂的步骤,并且希望给你一个更加全面直观的感受,理解这些步骤究竟是在做什么,也希望通过本节,你能理解,它至少还是一个合理的算法。但可能你即使看了本节,你还是觉得反向传播依然很复杂,依然像一个黑箱,太多复杂的步骤,依然感到有点神奇,这也是没关系的。即使是我接触反向传播这么多年了,有时候仍然觉得这是一个难以理解的算法,但还是希望这段视频能有些许帮助,为了更好地理解反向传播算法,我们再来仔细研究一下前向传播的原理:”——吴恩达老师导读。

前向传播算法:

最上层的+1项为偏置单元,值为1,作用同线性回归里介绍的,它们可以先不考虑

前向传播算法:

如图,第一层为输入层,我们主要看第二层

紫色偏置单元,红色和蓝色普通神经元,这三个神经元分别乘以各自对应的权重得到的值传递给下一层的神经元。将输入层的数据层层计算(逻辑回归)传播后送到输出层,这就是前向传播算法。

因为神经网络的结构不像逻辑回归简单,不能通过简单的梯度下降调整参数,它每一层都有很多参数权重,要想调整它们就需要知道每一层对于下一层的影响有多少,数学上可以通过求偏导数解决,求偏导的意思是对于多元函数,求出这个函数中某一元对于函数结果的导数(影响力)。

反向传播算法做的是:

反向传播算法的过程,参考小编整理的反向传播算法的流程图

这是小编总结的反向传播算法

字迹潦草,还望谅解呦

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ACM算法日常 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 反向传播算法
  • 反向传播算法的直观理解
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档