我是杰瑞,每天能带给你们简单实用的教学文章,关注我吧!
本篇文章一共1758字,阅读需要8分钟或以上
今天杰瑞要跟大家聊一聊深度学习中的BP算法,很多刚入门深度学习的同学都曾被这个BP算法给“劝退”了,但同学们请不要过于担心,因为杰瑞今天将帮你们把BP算法这块绊脚石给踢掉!在学习BP算法之前我们先来了解一下BP算法的来历以及它与深度学习的关系。
深度学习
很多同学经常把人工智能、机器学习、深度学习这三者之间的关系搞混,事实上我们平常所说的人工智能可以分为两类:一般的和狭义的,人工智能领域中有一种实现人工智能的方法叫做机器学习,今天我们要说的深度学习就是机器学习的一个子集,它使用神经网络来模拟人类大脑的工作方式,它们三者之间的关系如下图:
深度学习和我们人类的学习方式有非常大的相似性,但也有少部分的不同点。我们人类做决策的过程一般是这样的:
根据以往的经验来判断当前的事物,你的经验越多判断的越准确。
若你在这之前没有过处理这件事物的经验,那么你就会向周围的其他人寻求帮助,获取处理这件事物的经验。
若周围的人也没有处理这件事情的经验,那么人类就会不断地尝试新的解决方法,直到找到最优的解决方法为止。
而深度学习的“学习”过程和上面的第1、2点很相似,在训练某个模型的过程中,我们人类总是给定一个输入然后给对应的输出做一个标记,例如:我们输入一张猫的图片,然后打上标签“这是一只猫”,猫的图片与标签之间存在着某种关系,而通不断的训练,我们的模型就能找到猫的图片与标签之间的关系,并且训练次数越多精度越高(但精度增速会逐渐减慢甚至停止)。
BP算法的来历
在深度学习中,我们需要不断地去更新每一层隐层的权值数据,使实际输出和期望输出的差值达到最小,如果将差值记为E、实际输出为o、期望输出为t,那么我们可以得到一个误差函数。
我们学习的目的就是求得E(w1,w2,w3,……,wi)的最小值,很显然E的值只和权值w有关,所以我们的目标就变成了求使得E最小的那组权值。那么我们如何求这组权值呢?这时候BP算法就诞生了,我们可以通过将误差反向传递间接求出权值的改变大小,这时我们就需要用总误差对权值求偏导的方法来不断改变权值,并最终的到最优解的那组权值,总误差E与每一个权值有关,但是每一个权值对误差的影响程度是不一样的,有些权值改变一点就能使E的值产生巨大改变,而有些权值的改变并不会使E值有多大改变。
所以,我们现在就要知道每一个权值对E的“影响力”大小,这样才能对权值进行更新,而这里我们就是使用了一个偏导数的概念,通俗一点讲:函数E对某一个权值求偏导,值越大影响力越大。
BP算法实现过程(数学推导)
本段会有一些数学公式出现,但大家不要担心,这只是一些简单的链式法则应用罢了。
杰瑞使用一个三层神经网络作为例子,如下图:
t1、t2为期望值,i1、i2为输入层,l1、l2为隐藏层,o1、o2为输出层,权值为w1……w8,偏执量为b1、b2。网络中隐藏层进行加权求和之后还会进行一次sigmoid()函数处理,这里忽略不计。
首先我们把01的值算出来,o1等于(w5*l1+b2)+(w8*l2+b2),o2的值为(w6*l1+b2)+(w7*l2+b2),总误差记做E_total,那么E_total就等于1/2(t1-o2)²+1/2(t2-o2)²。
举个例子:现在我们想要知道权值w5对总误差E_total的影响力大小,所以我们用总误差E_total对w5求偏导,利用链式法则我们可以很快的到偏导数的值,注意:o1=(w5*l1+b2)+(w8*l2+b2),各位在纸上把过程写一下就会明白了,最后可以得到以下式子:
这是我们得到E_total对w5求偏导为-(i1-0i)*l1,最后我们将学习率乘以偏导数值然后和原来的权值相加,这样就可以得到我们新的权值。
以此类推我们可以稍稍修改一下就可以,求得w1(新值)、w2(新值),由于求w1(新值)时会收到o1和o2这两个地方传过来的误差,所以在计算总误差时要把o1和o2加起来。我们将把式子变成下面形式:
到这里BP算法的计算过程就解释完了,各位同学可以在纸上试着推导一下。
看到这里就请各位:点赞、关注、转发
欢迎关注《编程高手杰瑞》,每天更新一篇简单实用的教程哦!