软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 开发杂谈 -> 反向传播算法(过程及公式推导) -> 正文阅读

[开发杂谈]反向传播算法(过程及公式推导)



        反向传播算法(Backpropagation)是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法。其主要思想是:
(1)将训练集数据输入到ANN的输入层,经过隐藏层,最后达到输出层并输出结果,这是ANN的前向传播过程;
(2)由于ANN的输出结果与实际结果有误差,则计算估计值与实际值之间的误差,并将该误差从输出层向隐藏层反向传播,直至传播到输入层;
(3)在反向传播的过程中,根据误差调整各种参数的值;不断迭代上述过程,直至收敛。



        反向传播算法的思想比较容易理解,但具体的公式则要一步步推导,因此本文着重介绍公式的推导过程。




1. 变量定义
[img]http://img.blog.csdn.net/20160401202509000



        上图是一个三层人工神经网络,layer1至layer3分别是输入层、隐藏层和输出层。如图,先定义一些变量:
        [img]http://img.blog.csdn.net/20160401202738142表示第[img]http://img.blog.csdn.net/20160401202834876[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/576d2b840fd34ff09ac90900fc26219d/l-1.jpg层的第[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/4da87ad036fb45899be0c349b73069fe/k.jpg[img]http://img.blog.csdn.net/20160401202850705个神经元连接到第[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/e79ae480133f4521a482575ba2d4afa6/l.jpg[img]http://img.blog.csdn.net/20160401202901392层的第[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/6a968af39cb04649a2c0378900c93916/j.jpg[img]http://img.blog.csdn.net/20160401202912017个神经元的权重;
[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/84d1ef0c45e647b29b8835141d699c02/b.jpg        [img]http://img.blog.csdn.net/20160401202925814表示第[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/2b44dc0922f44587a33f903b2516f36d/l.jpg[img]http://img.blog.csdn.net/20160401202901392层的第[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/7e99d481210f4b87a676a4d47109e3e6/j.jpg[img]http://img.blog.csdn.net/20160401202912017个神经元的偏置;
        [img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/6d9107ddc032458f91d217e24157ea42/z0.jpg[img]http://img.blog.csdn.net/20160401202949221表示第[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/66e2f2e205854239916eb3bd90808b09/l.jpg[img]http://img.blog.csdn.net/20160401202901392层的第[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/b43858e9c36d4999aaac8fd98b7a50bc/j.jpg[img]http://img.blog.csdn.net/20160401202912017个神经元的输入,即[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/134c42a37abf436b8fc48902a82e488f/z.jpg:
[img]http://img.blog.csdn.net/20160401203046815
        [img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/7e205c3d7f5641a3a1391041d0d0f2aa/a.jpg[img]http://img.blog.csdn.net/20160401203055737表示第[img]http://img.blog.csdn.net/20160401202901392[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/d9adf1527e9546749ad34f19a290737f/l.jpg层的第[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/e42219c8cbd946dea93435cecf8da0bd/j.jpg[img]http://img.blog.csdn.net/20160401202912017个神经元的输出,即[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/71a5dce1f9b5492aa23280c527c453a6/a1.jpg:
[img]http://img.blog.csdn.net/20160401203135690
        其中[img]http://img.blog.csdn.net/20160401203156534[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/8d3d68f680fa4f69b97e79c1c9ee3367/sigma.jpg表示激活函数。


2. 代价函数
        代价函数被用来计算ANN输出值与实际值之间的误差。常用的代价函数是二次代价函数(Quadratic cost function):
[img]http://img.blog.csdn.net/20160401203231972

[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/fc220d8d599941b6ad8b56b874b28256/quadratic.jpg
        其中,[img]http://img.blog.csdn.net/20160401203246065[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/0c94066dcda14d22a186c2523881d3ae/x.jpg表示输入的样本,[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/21df9a62bb1749bcbbc663f105d2ea47/y.jpg[img]http://img.blog.csdn.net/20160401203254284表示实际的分类,[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/f24b4f80f7b54a8bac7f852e7f0f096f/al.jpg[img]http://img.blog.csdn.net/20160401203304753表示预测的输出,[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/1717c06043404cf987baaf125abeb22f/l-a.jpg[img]http://img.blog.csdn.net/20160401203313706表示神经网络的最大层数。


3. 公式及其推导
        本节将介绍反向传播算法用到的4个公式,并进行推导。如果不想了解公式推导过程,请直接看第4节的算法步骤。
        首先,将第[img]http://img.blog.csdn.net/20160401202901392[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/bd81b33061d9447db36e969a1c638d79/l.jpg层第[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/a5f455f078f6434ba3be2f8043f88d30/j.jpg[img]http://img.blog.csdn.net/20160401202912017个神经元中产生的错误(即实际值与预测值之间的误差)定义为:
[img]http://img.blog.csdn.net/20160401203433129[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/f44aa74e592748fb84cb8f8769551f26/err.jpg




        本文将以一个输入样本为例进行说明,此时代价函数表示为:
[img]http://img.blog.csdn.net/20160401203458879

[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/5fcbe66a557d47abaa708f1be940fc05/quadratic1.jpg


公式1(计算最后一层神经网络产生的错误):


[img]http://img.blog.csdn.net/20160401203521035



        其中,[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/e5a5a980132a442eac23dbf5df9d5e99/hadamard.jpg[img]http://img.blog.csdn.net/20160401203529707表示Hadamard乘积,用于矩阵或向量之间点对点的乘法运算。公式1的推导过程如下:
[img]http://img.blog.csdn.net/20160401203552879





公式2(由后往前,计算每一层神经网络产生的错误):


[img]http://img.blog.csdn.net/20160401203604942



        推导过程:
[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/eb31d8d1b3594ae6b21f5e8e4168593c/fomula2.png[img]http://img.blog.csdn.net/20160401203613661




公式3(计算权重的梯度):


[img]http://img.blog.csdn.net/20160401203624973



        推导过程:
[img]http://img.blog.csdn.net/20160401203634161





公式4(计算偏置的梯度):


[img]http://img.blog.csdn.net/20160401203641989



        推导过程:
[img]http://img.blog.csdn.net/20160401203656833





4. 反向传播算法伪代码


  • 输入训练集



  • 对于训练集中的每个样本x,设置输入层(Input layer)对应的激活值[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/80ec44d5c59247fd905e8ab4290040d8/a1.png[img]http://img.blog.csdn.net/20160401203715973:
    • 前向传播:

[img]http://img.blog.csdn.net/20160401203739849, [img]http://img.blog.csdn.net/20160401203806927

    • 计算输出层产生的错误:

[img]http://img.blog.csdn.net/20160401203820380

    • 反向传播错误:[img]http://blog.csdn.net/u014313009/article/details/51039334/file:/C:/Users/czh/AppData/Local/YNote/data/hi_for_alice@163.com/71f6accbffd94039b7118dfbe511b6c0/b-err-back.png

[img]http://img.blog.csdn.net/20160401203833583



  • 使用梯度下降(gradient descent),训练参数:



 [img]http://img.blog.csdn.net/20160401203848037



[img]http://img.blog.csdn.net/20160401203859349













......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2016-04-02 21:01:37  
开发杂谈 最新文章
BloomFilter
大学四年编程之历程
内核分析
造人论坛——意识的本质和一个人工脑模型
OFDM信号[matlab描述]
人类还会进化吗?
HDUACM1035RobotMotion简单模拟题
树、二叉树(二)
iisphpweb.config处理404,500等,跳转友好
DatabaseAsaFortress
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture
生肖星座 三丰软件 视频 开发 Android开发 站长 古典小说 网文精选 搜图网 美图 中国文化英文版 多播 租车 短信
2017-7-24 10:30:44
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --