爱吧机器人网 » 技术 > 机器学习 > 正文

深度学习反向传播算法(BP)原理推导及代码实现

昨天,分析了手写字数据集分类的原理,利用神经网络模型,编写了SGD算法的代码,分多个epochs,每个 epoch 又对 mini_batch 样本做多次迭代计算。这其中,非常重要的一个步骤,便是利用反向传播(BP)算法求权重参数的梯度,偏置量的梯度。下面根据以下几个问题展开BP算法:
 
什么是BP算法?
为什么叫做反向传播?
如何构思BP算法的切入点?
误差是如何传播开的?
如何求出权重参数的梯度和偏置量的梯度?
链式规则是怎么一回事?
 
1、统一符号表达
 
神经网络每个神经元的连接关系,用符合如何表达呢? 下面定义一种表达方式,如下图所示,含有一个隐含层的神经网络,图中标出的w的含义为:第三层的第2个神经元与第二层的第4个神经元间的权重参数。

\
 
再看下,标红色箭头的神经元的偏移量 b,如图所示进行标记,第二层中第3个神经元的偏移量;标绿色箭头的神经元的输出 a 为如下图所示标记,为第三层中第一个神经元的输出。

\
 
第 L 层第 j 个神经元的输出等于,前1层即 L-1 层中所有神经元的带权的输入和,然后再映射到sigmoid激活函数中,得到如下公式所述:

\
 
一定要仔细理解这种上述公式的各个符号表达,它是理解以下对 BP 算法论述的前提。
 
2、BP算法推导
 
2.1 公式1
 
如下图所示,有个精灵跑到了网络中,假设位于第L层,第 j 个神经元的门口处,它引起了一点扰动,\
 
\
 
z的含义是加权输入项,容易得出这个扰动项对成本函数造成的损失可以定义为:
\
 
那么,类推的,可以看出在输出层 L, 误差项的定义表达为如下,第一个公式

\
 
上式是根据链式规则可以推导得出,成本函数的改变首先是有第L层第j个神经元的输出项影响的,然后第 j 个神经元的输出又受到第 L层第 j 个神经元的干扰 z 影响,因此得到上式。这个式子的意义是定义了第 L层第 j个神经元的误差项怎么求,注意这里L可是输出层哦,那么如何求出第 L-1层中某个神经元的损失项(误差项)呢?
 
2.2 公式2
 
这就用到第二个公式,它给出了怎么由第 L层的误差推导出第L-1层的误差,先给出第二个公式:

\
 
那么,这个公式,是如何得出的呢?这里面,这个公式是相对最难想的,推导过程如下:
还是从损失项的定义入手,

\
 
由以上这几个式子,就可以得出公式2 。
 
2.3 公式3
 
那么有了以上的分析,我们便能求解处任意层的损失项了,可以得出成本函数对某层某个神经元的梯度为,这是第三个公式:

\
 
还是可以由链式规则得出吧,如下推导过程:

\
 
2.4 公式4
 
成本函数对权重参数的梯度为,这是第四个公式:

\
 
那么这个公式还是可以由链式规则得出,对其推导如下:

\
 
推导第三,四个公式,都用到了以下这个基本知识:

\
 
2.5 反向传播代码
 
根据这四个公式,可以得出BP算法的代码,每个步骤将公式放到上面,方便查看。
 
def backprop(self, x, y):
 
01 占位
 
        nabla_b = [np.zeros(b.shape) for b in self.biases]
 
        nabla_w = [np.zeros(w.shape) for w in self.weights]
 
02  前向传播求出每个神经元的输出项
 
        activation = x
 
        activations = [x] # 分层存储每层的输出项(对应上文中的 a)
 
        zs = [] # 分层存储每层的 z 向量(对应上文中的 z)
 
        for b, w in zip(self.biases, self.weights):
 
            z = np.dot(w, activation)+b
 
            zs.append(z)
 
            activation = sigmoid(z)
 
            activations.append(activation)       
 
            \#activations[-1] 必须是最后一层
 
        delta = self.cost_derivative(activations[-1], y) * sigmoid_prime(zs[-1])
 
  03 求偏置量的梯度 

\
 
        nabla_b[-1] = delta
 
  04 求权重参数的梯度        

\
 
        nabla_w[-1] = np.dot(delta, activations[-2].transpose())
 
  05 反向传播,依次更新每层的每个神经元的权重和偏移量 
 
        # L = 1 表示最后一层神经元, L = 2 倒数第二层神经元
 
        for layer in range(2, self.num_layers):
 
            z = zs[-layer]
 
            sp = sigmoid_prime(z) #sigmoid函数的导数

\
 
            delta = np.dot(self.weights[-layer+1].transpose(), delta) * sp
 
            nabla_b[-layer] = delta
 
            nabla_w[-layer] = np.dot(delta, activations[-layer-1].transpose())
 
        return (nabla_b, nabla_w)
 
 def cost_derivative(self, output_activations, y):
\
 
        return (output_activations-y)
 
以上就是BP算法的详细推导过程。



上一篇:【NIPS最佳论文出炉】冷扑大师能战胜AlphaZero吗?No(Science论文)
下一篇:顶级AI会议NIPS压轴2017(附PPT、视频、代码大汇总)
精选推荐
MIT用深度学习处理3D点云数据 应用于无人汽车等领域
MIT用深度学习处理3D点云数据 应用于无人汽车等领域

[2019-10-23]  如果你见过自动驾驶汽车,也许会对车顶上那个一直在旋转的圆柱体感到好奇。这是一个雷达传感器,无人驾驶汽车依靠它在现实世界中进行导航。 ...

美国Natilus公司试飞水上无人货机 设计简单成本降低
美国Natilus公司试飞水上无人货机 设计简单成本降低

[2017-12-28]  Natilus创业公司成立于2014年,其梦想是建造大型无人机,以半价提供比船舶快得多国际货运。在十二月份,Natilus计划在旧金山湾测试一个9米翼展的小型原型无人机的水上滑行能力......

基于生物启发的机器人很容易适应丢失附属器官
基于生物启发的机器人很容易适应丢失附属器官

[2017-12-17]  很多机器人被设计应用在危险环境,如灾难现场。在这些地方,他们的运动系统完全有可能被损坏。那这样会吓跑这些机器人吗?也许不是,如果它们像日本的东北和北海道大学创造的......

苹果AI主管透露自动驾驶汽车项目关于机器学习方面的进展
苹果AI主管透露自动驾驶汽车项目关于机器学习方面的进展

[2017-12-11]  苹果隐秘的自动驾驶汽车项目多年来一直在转移焦点,但今年似乎正在加速。 4月份,公司获得了在加利福尼亚州进行自动驾驶汽车测试的许可证,而在6月份,苹果公司首席执行官库......

人工智能民主化能否实现取决于科技巨头
人工智能民主化能否实现取决于科技巨头

[2017-12-29]  我们经常听到像谷歌和微软这样的公司说他们希望人工智能民主化。这是一个很好的词,民主化。 但这些公司如何界定“民主化”还不清楚,像AI本身一样,它似乎有点炒作的味道...

机器人灵巧手将成为智能机器人的下一个重大突破
机器人灵巧手将成为智能机器人的下一个重大突破

[2018-01-25]  计算机科学教授兼东北地区助手机器人实验室负责人罗伯特·普拉特(Robert Platt)说:“机器人手操作是下一步要解决的问题。想象一下,一个机器人可以在现实世界中用手去做事......

谷歌在中国成立一个新的人工智能(AI)研究中心
谷歌在中国成立一个新的人工智能(AI)研究中心

[2017-12-13]  谷歌正在中国建立一个新的人工智能(AI)研究中心,希望进一步扩展到中国,以充分利用中国高度重视的人工智能技术。人工智能是目前地球上最具竞争力的领域之一,亚马逊,微软......

智能农业:种地的事儿未来全交给这些机器人吧
智能农业:种地的事儿未来全交给这些机器人吧

[2019-12-07]  SRC公司创始人Sam与温波尔庄园农场经理Callum Weir以及监控机器人Tom总部位于英国的农业科技初创公司SRC(Small Robot Company),正在 ...

本周栏目热点

顶级AI会议NIPS压轴2017(附PPT、视频、代码大汇总)

[2017-12-19]  NIPS,全称神经信息处理系统大会(Conference and Workshop on Neural Information Processing Systems),是一个关于机器学习和计算神经科学的国际会议。该会议固定在每年的12月举行...

机器学习选择深层模型的原因

[1970-01-01]   深度学习采用的模型为深层神经网络(Deep Neural Networks,DNN)模型,即包含多个隐藏层(Hidden Layer,也称隐含层)的神经网络(Ne ...

机器学习—自由编码器

[1970-01-01]   一种常见的深层模型是由自编码器(Auto-Encoder)构造的。自编码器可以利用一组无标签的训练数据{x(1), x(2), &hellip }(其中x(i)是一个n ...

【NIPS最佳论文出炉】冷扑大师能战胜AlphaZero吗?No(Science论文)

[2017-12-19]  拿下NIPS2017 最佳论文,登上Science,“冷扑大师”最近有点热。18日,两位作者,CMU博士生Noam Brown和Tuomas Sandholm教授在Reddit上回答问题。对“为什么不使用深度学习......

日本开发团队给机器人嵌入神经网络

[2016-08-18]    近日在日本国立科学博物馆展出的 机器人 Alter,可谓是目前世界上最为先进的机器人之一,因为它是一款嵌入了神经网络的机器人,来自日本 ...