史上最清楚的BP算法详解

前馈神经网络

在文章《逻辑回归到神经网络》(以下简写《LR到NN》)中,小夕为大家描述了一个从逻辑回归延伸到神经网络的过程。在《一般化机器学习与神经网络》中,小夕阐述了神经网络的一般性。这一篇会完全进入神经网络的状态,阐述神经网络的特殊性。

其实在《LR到NN》中的这张简单的图,就是本文要讲的前馈神经网络(feed-forward neural network)。

 

v2-e3d638801ce8ad91a3235dbbe4307f1f_b.png

 

v2-7f86a5dcaac103cb669c97a4331d6ce9_b.png

可以看到,这种简单粗暴的连法,恰恰就是神经网络最经典的模型。即隐含层的每个单元(神经元)均只接受前一层(对于只有一个隐含层的前馈网络,前一层即输入层)的输出作为输入,并输出结果到后一层(对于只有一个隐含层的前馈网络,后一层即输出层)。将这种神经网络看成数据结构中的“图”的话,那就是一个“有向无环图”(即前馈网络中是不存在反馈的)。

这里的边,即单元与单元之间连接的强度,也即权重。设想一下,当两个单元之间的权重为0时,一个单元的输出就无法再通过这条边传递给另一个单元了,即这两个单元之间断开连接了(不存在这条边了),因此神经网络模型中的模型参数不仅仅是个数字了,由于这张基于生物学中的神经系统的模型可视化图的存在,神经网络模型中的参数还代表着两个神经元之间的连接强度。

在《一般化机器学习与神经网络》中,小夕讲过了,所谓的前向算法,就是计算了一下模型的假设函数而已,只不过计算的过程可视化出来后就是一个沿着神经网络“向前推进”的样子,因此起了个名字而已。这里就不再赘述这个俗俗的假算法啦。

根据机器学习框架,假设函数有了,我们还需要考虑什么呢?当然是如何得到这个假设函数啦~也就是如何训练神经网络这个一般而特殊的机器学习模型(即学习模型参数)。

石器时代

假设你是一个完全不懂数学的生物学家(虽然学生物的数学也很厉害的,吧),你觉得从生物学的角度来看(将模型参数看作神经元之间的连接强度),这个神经网络训练好之后应该是什么样子的呢?

回想一下高中生物,如果两个神经元紧紧相连,那么一个神经元的兴奋必然导致与之相连的神经元的兴奋。如果经过无数次实验,我们发现对于神经元A和神经元B,只要A兴奋,那么B一定兴奋,那么就说明A与B之间肯定连接非常紧密(就像一条绳子的蚂蚱,一个跳起来肯定把另一个带起来),也就是说A到B的连接强度非常大!也就是说,A到B这个模型参数的值肯定很大。

将这个生物学思想往数学上靠一下,那就是“如果神经元A的激活带来B的激活,就代表A与B具有相关性,因此A与B之间的连接权重应该被加强,即应增大模型参数w_{AB}(下标BA代表从A出发,到达B的有向边)”。

这个思想叫什么呢?叫“Hebb规则”,这个思想是神经网络的学习算法的最本质,也是最原始的思想。

那么如何去实现这个思想呢?

青铜时代

设想一下,我们的网络到达了这么一种状态:

 

v2-b8e1ab3f5846a3bd7b7597fb78826080_b.png

显然,模型犯错了!输出单元(输出层在这里只有一个单元)应该是1,结果预测的是0!也就是应该兴奋,实际在睡觉!而根据Hebb规则,我们应该让输出单元加强与那些兴奋的神经元的连接,也就是增大与“隐含层输出为1(专业说法叫被激活)的神经元”的连接!减弱与“隐含层输出为0(未激活)的神经元”的连接!

再想一下,“隐单元未激活/输出为0”代表着什么?

还记得《逻辑回归到神经网络》中放大的这个隐单元的图吗?

 

v2-5c842f9eb5408bdc076bb9a68204dbbf_b.png

隐单元的核心就是激活函数,比如sigmoid、tanh等。如下sigmoid:

 

v2-f191c589acca3a080488c88d36d649e2_b.png

因此隐单元输出为0时,也就是未激活时,就意味着隐单元的输入为负值!

所以,为了迎合Hebb规则,应该让未激活的神经元减小权重,激活的神经元增加权重,那么我们可以直接让权重加上隐单元的输入啊:

即对于全部的隐单元:w=w+a。(注:a为隐单元的输入,未激活的神经元的a为负,激活的为正)

而对于如下这种情况,也就是应该输出0,实际输出了1的情况:

 

 

v2-742f1b33ac82820fb229cbe64916444b_b.png通过跟前面一样的推理我们发现,只要让w的更新方式与前面相反,即:

对于全部的隐单元:w=w-a。(注:a为隐单元的输入,未激活的神经元的a为负,激活的为正)

那么有没有办法将上面两种情况合起来表示呢?

机智的你应该想到了,那就是:

w=w+(真实值-预测值)*a

对啊,用这条通用的规则,就可以反复的更新隐藏层到输出层的权重了~这个规则叫什么呢?这就是1986年认知心理学家Rumellhart等人提出的δ学习规则,也叫广义Hebb规则,这是对神经网络学习算法的Hebb思想的直接实现!

等等,有没有觉得似曾相识呢?赶紧翻开书,看看BP算法的权重更新公式!有没有发现BP中的权重更新公式与这个规则所表达的意思惊人的相似!

相似就对了~

铁器时代

想一想,在广义Hebb规则中,我们做了一些简化:

首先,权重更新的方向很明确,但是更新的步长我们是直接用了隐单元的输入a,而没有证明这个a是最合理的步长。其次,我们这里直接用真实值减去预测值,也是很启发式的做法。

那么显然这个广义Hebb规则在数学上极有可能是非最优的,毕竟这是一个启发式的(即拍脑袋的)算法。那么如何得到最优的做法呢?那就是从这个规则的目的着手去提出更上层的理论!

广义Hebb规则的目的是什么呢?

这个规则的直接目的是让最终的输出逼近真实输出,也就是减小模型输出与真实输出之间的误差。具体做法是让每个隐单元的权重个性化修改,来向着使误差减小的方向移动。

等等!再重复一遍,具体做法是让每个隐单元的权重个性化修改,来向着使误差减小的方向移动。

再再重复一遍!具体做法是让每个隐单元的权重个性化修改,来向着使误差减小的方向移动!

所以我们可以怎样做?如果有一个函数可以直接描述这个误差!(这不就是损失函数做的事儿吗!)那么!以权重为误差的自变量,使误差减小的方向不就是权重的负梯度方向吗。那让权重沿着这个方向移动不久好了吗?(这不就是梯度下降法吗!)

 

v2-0e1bd1c47b194342f4956e6ee0c51c3c_b.png

如图,自变量(x轴)是权重,因变量(y轴)是误差!显然使误差减小的方向就是权重的负梯度方向啊~

所以!求出此时权重的负梯度(即此时每个隐单元的权重的导数!)!然后让权重向这个方向移动一定的步长!反复这个移动的过程!直到误差最小,即训练完成!得到最优的权重!

所以说这是什么?这就是梯度下降法呀~同时,这还是BP算法对隐含层与输出层连接权重的更新方式啊!

那么如何更新输入层到隐含层的权重呢?

一样的呀,数学思想都这么清晰了~误差依然是误差,只需要将自变量换成输入层到隐含层的权重,不就可以啦~其他的完全照旧啊。

只不过,损失函数是“间接包含”输入层到隐含层的权重的,因此在求此时的负梯度时,要进行链式求导~也就是下面这个烂大街的推理过程:

 

 

v2-399ad2c72ab0600007d804734a13fc92_b.png

 

v2-5dbf55d7edc3ac64ab135b5500c4bb74_b.png这个推理过程摘自http://blog.csdn.net/lu597203933/article/details/46575803,有兴趣的可以去看看,反正哪里都能找到这个推导过程~

数学好的一眼就看懂了,不太好的就随便找个讲BP算法的书或者帖子啦,这是真正的烂大街推理过程。。。因此,各层权重的负梯度利用上面的链式求导法则就很轻松的求出来了,然后w=w-α*负梯度,就可以啦~其中,α是步长~

看,源于训练神经网络的最naïve的Hebb思想,为了实现这个思想而提出了δ算法,用数学去描述δ算法的本质目标,得出通过引入损失函数并(链式求导)求解负梯度来更新权重的过程,即误差反向传播算法(BackPropagation,简称BP算法)。

╮(╯▽╰)╭

只不过在神经网络中可视化一下,看起来就像一个人们定义的误差从模型输出层向输入层传播而已啦,然后起了个形象的名字叫所谓的误差反向传播算法。

不过,人们抽象出来的这个前向与反向算法的概念还是有更多原因的,一是可以帮助人们理解,使其可以从生物学模型上得到解释,进而以这种思想变形出其他形式的前向与反向传播算法来描述或训练更复杂的神经网络;另一方面也是给我们程序猿(喵)们提供了一种简洁无脑的编程模型,使得哪怕不懂链式求导等BP算法原理的程序猿也能轻松的写出来这个数学上不算太简单的算法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/481211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于主动学习算法减少人工标注量,提升文本标注效率的方案探究

基于主动学习算法减少人工标注量,提升文本标注效率的方案探究阅读 451收藏 232018-06-26原文链接:yq.aliyun.comOPPO技术开放日第三期,未来的探索 AI&AR的实践应用juejin.im项目地址: https://github.com/crownpku/Chinese-Annotator 自…

具有生物启发训练方法的物理深度学习:物理硬件的无梯度方法

编辑 | 绿萝对人工智能不断增长的需求推动了对基于物理设备的非常规计算的研究。虽然此类计算设备模仿了大脑启发的模拟信息处理,但学习过程仍然依赖于为数字处理优化的方法,例如反向传播,这不适合物理实现。在这里,来自日本 NTT …

BP算法是从天上掉下来的吗?

第二个标题:一般而特殊的前馈神经网络前馈神经网络在文章《逻辑回归到神经网络》(以下简写《LR到NN》)中,小夕为大家描述了一个从逻辑回归延伸到神经网络的过程。在《一般化机器学习与神经网络》中,小夕阐述了神经网络…

深度学习如何应用在广告、推荐及搜索业务?阿里妈妈实践案例解读

</span></ul><div class"markdown-body"><div id"meta_content" class"rich_media_meta_list"> </div>阿里妹导读&#xff1a;靖世&#xff0c;阿里妈妈精准展示技术研究员。2011 年&#xff0c;刚进阿里的他提出…

AI for Science的上半场:人工智能如何重新定义科学研究新范式?

AI发展七十余年&#xff0c;每一技术性突破都将给人类未来开辟新一种可能性。而它与科学研究的深度融合&#xff0c;则会裂变出无数或无穷种可能性。来源 :36氪万众瞩目下&#xff0c;今年10月&#xff0c;有着诺贝尔奖“嫡传”之称的诺贝尔化学奖终于揭晓&#xff0c;授予了对…

从前,小夕种了一棵树

从前&#xff0c;小夕种了一棵树&#xff0c;种在了小夕的小屋后面~为什么要种这棵树呢&#xff1f;因为呀&#xff0c;它可以帮小夕总结历史经验&#xff0c;然后帮小夕对当前的局势做出决策~这样小夕就可以安心给大家写文章啦~这棵树是这样的。一开始&#xff0c;小夕买了一颗…

用于化学动力学模拟的原子神经网络表示

编辑 | 白菜叶机器学习技术已广泛应用于化学、物理、生物学和材料科学的许多领域。最富有成果的应用之一是从离散量子化学数据中学习势能或相关电子特性的复杂多维函数。特别是&#xff0c;大量努力致力于开发各种原子神经网络 (AtNN) 表示&#xff0c;这些表示是指将目标物理量…

自然语言生成任务,如文本摘要和图像标题的生成。seq2seq的模型原理

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/Irving_zhang/article/details/78889364 </div><link rel"stylesheet" href"https://csdnimg.cn/release/phoenix/template/css/ck_htmledit…

史上最简单的决策树模型讲解

从前 从前&#xff0c;小夕种了一棵树&#xff0c;种在了小夕的小屋后面~ 为什么要种这棵树呢&#xff1f;因为呀&#xff0c;它可以帮小夕总结历史经验&#xff0c;然后帮小夕对当前的局势做出决策~这样小夕就可以安心给大家写文章啦~ 这棵树是这样的。 一开始&#xff0c;小夕…

听觉器官是高阶元分类“革命性证据”

来源&#xff1a;中国科学报反刍类的内耳几何形态学分析及系统发育示图。Laura Dziomber/绘化石研究的第一步是通过形态特征鉴定身份&#xff0c;厘清物种的亲缘关系&#xff0c;但这种方法并不完美。那些长相相似的也许“八竿子打不着”&#xff0c;而毫无共同特征的却是“亲属…

机器学习从理论到工程的第二步-开发环境与工具篇

在《第一步-编程语言篇》中&#xff0c;小夕为大家较为详细的介绍了做机器学习&#xff08;及其相关应用方向&#xff09;的编程语言的选择问题&#xff0c;这一篇便是小夕为大家推荐的各个编程语言的开发环境/工具。习惯性扫盲开篇。鉴于可能有部分同学的软件开发经验稍有欠缺…

干了一年“元宇宙”,Meta亏了300亿美金

来源&#xff1a;青投创新编辑&#xff1a;Leon"Facebook更名成Mate&#xff1a;从社交媒体转型为“元宇宙”&#xff0c;但前景并不乐观。一年前&#xff0c;Meta在元宇宙上高歌猛进。该公司刚刚完成了从Facebook到Meta的品牌重塑。正如马克扎克伯格&#xff08;Mark Zuc…

机器学习从理论到工程的第二步-开发环境与工具篇(下)

好啦~继续昨天的《第二步——开发环境与工具篇&#xff08;上&#xff09;》~其实有点尴尬啦&#xff0c;本来想一篇讲完的&#xff0c;结果小夕太啰嗦了&#xff0c;还没有开始讲正文&#xff0c;就写了快2000字了。。。所以说&#xff0c;这一篇是上一篇的正文。。。matlab就…

阿里-2019算法岗笔试编程题-kmp匹配

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/qq_25737169/article/details/82503724 </div><link rel"stylesheet" href"https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_…

IBM量子处理器,将突破1000位

来源&#xff1a;半导体行业观察IBM的CONDOR是世界上第一台拥有超过1000个量子比特的通用量子计算机&#xff0c;它将于2023年首次亮相。预计这一年IBM还将推出Heron&#xff0c;这是该公司表示可能对其有所帮助的新型模块化量子处理器群中的第一个到2025年生产出超过4000个量子…

ChatGPT到底有多聪明?我测试了ChatGPT的数学能力

来源&#xff1a;AI前线译者&#xff1a;马可薇 人人都听说过最新&#xff0c;也是最复杂的聊天机器人 chatGPT。而众所周知&#xff0c;它在英文文学等“软话题”方面甚是熟练&#xff0c;所以我决定测试它在数学这类“硬话题”方面的表现。你可能不知道&#xff0c;但我是有…

从朴素贝叶斯到贝叶斯网

回顾在文章《朴素贝叶斯》中&#xff0c;小夕为大家介绍了朴素贝叶斯模型的基本知识&#xff0c;并且得出了朴素贝叶斯是利用联合概率P(x1,x2,x3...xn,y)来确定某个样本为某个类别的概率&#xff0c;进而利用最大后验概率&#xff08;MAP&#xff09;来决策类别。也就是说&…

2022年,谁在数学史上永远留下了姓名

来源&#xff1a;新智元这一年&#xff0c;数学领域有什么大事&#xff1f;Quanta Magazine做了一份全年总结。我们可以把数学家想象成考古学家——他们煞费苦心地拂去世界隐藏结构上的灰尘。起来很吸引人&#xff1f;“你的起点并不重要&#xff0c;但要眼光长远&#xff0c;了…

神经网络激活函数=生物转换器?

啊~昨晚躺了一个小时竟然没有睡着&#xff0c;美容觉泡汤了...于是竟然大半夜起来写了这篇文章在《逻辑回归到神经网络》中&#xff0c;小夕让神经网络冒了个泡。在《一般化机器学习与神经网络》中&#xff0c;将神经网络这一火热的模型强制按回机器学习一般框架里。在《BP算法…

从Encoder到Decoder实现Seq2Seq模型

首发于机器不学习关注专栏写文章从Encoder到Decoder实现Seq2Seq模型天雨粟模型师傅 / 果粉​关注他300 人赞同了该文章更新&#xff1a;感谢Gang He指出的代码错误。get_batches函数中第15行与第19行&#xff0c;代码已经重新修改&#xff0c;GitHub已更新。前言好久没有更新专…