软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
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 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年1日历
2018-1-17 9:19:18
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --