原理

误差反向传播算法是通过误差函数计算实际输出值与期望输出值之间的误差,把误差从最后的输出层依次传播到之前各层,最后通过调整各层连接权重与偏置达到减小误差的目的。而权重和偏置的调整一般使用梯度下降法。

推导前的准备

本文误差反向传播算法的推导以包含隐藏层的多层感知器为例,结构如下图所示:

这里,图中和推导过程中涉及的符号代表的含义分别为:

符号 含义
xix_ixi​ 输入值
aja_jaj​ 隐藏层激活值
yky_kyk​ 实际输出值
rkr_krk​ 期望输出值
w1ijw_{1ij}w1ij​ 网络输入层的第i个神经元和下一层网络第j个神经元之间的连接权重
w2jkw_{2jk}w2jk​ 网络隐藏层的第j个神经元和下一层网络第k个神经元之间的连接权重
bj2b_j^2bj2​ 网络隐藏层第j个神经元的偏置
bk3b_k^3bk3​ 网络输出层第k个神经元的偏置
u1ju_{1j}u1j​ 隐藏层第j个神经元的激活函数的加权输入
u2ku_{2k}u2k​ 输出层第k个神经元的激活函数的加权输入
EEE 误差函数
η\etaη 学习率

这里,误差函数采用最小二乘误差函数,公式如下:
E=∑n=1N∣∣rn−yn∣∣2E=\sum_{n=1}^N||r_n-y_n||^2E=n=1∑N​∣∣rn​−yn​∣∣2
激活函数使用sigmoid函数,公式如下:
f(u)=11+e−uf(u)=\frac{1}{1+e^{-u}}f(u)=1+e−u1​其中,
u=∑i=1Nwixi+bu=\sum_{i=1}^Nw_ix_i+bu=i=1∑N​wi​xi​+b

开始推导

首先,再明确一下我们的目的是计算使用梯度下降法时神经网络各层间连接权重和偏差的变化值,即Δw1ij,Δw2jk,Δbj2\Delta w_{1ij},\Delta w_{2jk},\Delta b_j^2Δw1ij​,Δw2jk​,Δbj2​等值。
这里,计算过程以求解Δw1ij\Delta w_{1ij}Δw1ij​为例,其它值类似,而
Δw1ij=η∂E∂w1ij\Delta w_{1ij}=\eta\frac{\partial E}{\partial w_{1ij}}Δw1ij​=η∂w1ij​∂E​
根据链式求导得:
∂E∂w1ij=∑k=1q(∂E∂yk∂yk∂u2k∂u2k∂aj∂ajδu1j∂u1j∂w1ij)\frac{\partial E}{\partial w_{1ij}}=\sum_{k=1}^q (\frac{\partial E}{\partial y_k} \frac{\partial y_k}{\partial u_{2k}} \frac{\partial u_{2k}}{\partial a_j} \frac{\partial a_j}{\delta u_{1j}} \frac{\partial u_{1j}}{\partial w_{1ij}})∂w1ij​∂E​=k=1∑q​(∂yk​∂E​∂u2k​∂yk​​∂aj​∂u2k​​δu1j​∂aj​​∂w1ij​∂u1j​​)
然后逐个对等式右侧各部分求解得:
∂E∂yk=−(rk−yk)\frac{\partial E}{\partial y_k}=-(r_k-y_k)∂yk​∂E​=−(rk​−yk​)
∂yk∂u2k=f(u2k)(1−f(u2k))=yk(1−yk)\frac{\partial y_k}{\partial u_{2k}}=f(u_{2k})(1-f(u_{2k}))=y_k(1-y_k)∂u2k​∂yk​​=f(u2k​)(1−f(u2k​))=yk​(1−yk​)
∂u2k∂aj=w2jk\frac{\partial u_{2k}}{\partial a_j}=w_{2jk}∂aj​∂u2k​​=w2jk​
∂aj∂u1j=aj(1−aj)\frac{\partial a_j}{\partial u_{1j}}=a_j(1-a_j)∂u1j​∂aj​​=aj​(1−aj​)
∂u1j∂w1ij=xi\frac{\partial u_{1j}}{\partial w_{1ij}}=x_i∂w1ij​∂u1j​​=xi​
最后得:
∂E∂w1ij=−∑k=1q[(rk−yk)yk(1−yk)w2jkaj(1−aj)xi]\frac{\partial E}{\partial w_{1ij}}=-\sum_{k=1}^q [(r_k-y_k) y_k(1-y_k) w_{2jk} a_j(1-a_j) x_i]∂w1ij​∂E​=−k=1∑q​[(rk​−yk​)yk​(1−yk​)w2jk​aj​(1−aj​)xi​]
因此,权重w1ijw_{1ij}w1ij​得变化值为:
Δw1ij=η∑k=1q[(rk−yk)yk(1−yk)w2jkaj(1−aj)xi]\Delta w_{1ij}=\eta \sum_{k=1}^q [(r_k-y_k) y_k(1-y_k) w_{2jk} a_j(1-a_j) x_i]Δw1ij​=ηk=1∑q​[(rk​−yk​)yk​(1−yk​)w2jk​aj​(1−aj​)xi​]
根据上述计算过程可以发现,权重的变化值的组成依次为:学习率、误差函数导数、激活函数导数、对应连接权重、激活函数导数和输入值,根据这个规律可以快速写出各层权重和偏差的变化值,例如:
Δw2jk=η∑k=1q[(rk−yk)yk(1−yk)aj]\Delta w_{2jk} = \eta \sum_{k=1}^q [(r_k-y_k)y_k(1-y_k)aj]Δw2jk​=ηk=1∑q​[(rk​−yk​)yk​(1−yk​)aj]
Δbj2=η∑k=1q[(rk−yk)yk(1−yk)w2jkaj(1−aj)]\Delta b_j^2 = \eta \sum_{k=1}^q[(r_k-y_k)y_k(1-y_k)w_{2jk}a_j(1-a_j)]Δbj2​=ηk=1∑q​[(rk​−yk​)yk​(1−yk​)w2jk​aj​(1−aj​)]

小结

误差反向传播算法会通过误差函数计算梯度,然后调整权重与偏置,经过反复迭代训练的调整,最终获得最优解。
本文在推导过程中使用的误差函数为最小二乘误差函数,除此以外还有很多其它函数用于计算误差,比如一般多分类问题中使用交叉熵误差函数:
E=−∑c=1C∑n=1NrcnlnycnE=-\sum_{c=1}^C \sum_{n=1}^N r_{cn}lny_{cn}E=−c=1∑C​n=1∑N​rcn​lnycn​
二分类中的常用的误差函数为:
E=−∑n=1N[rnlnyn+(1−rn)ln(1−yn)]E=-\sum_{n=1}^N [r_nlny_n+(1-r_n)ln(1-y_n)]E=−n=1∑N​[rn​lnyn​+(1−rn​)ln(1−yn​)]
同时,激活函数除sigmoid外还有tanh、ReLU等函数:
tanh(u)=exp(u)−exp(−u)exp(u)+exp(−u)tanh(u)=\frac{exp(u)-exp(-u)}{exp(u)+exp(-u)}tanh(u)=exp(u)+exp(−u)exp(u)−exp(−u)​
ReLU(u)=max(u,0)ReLU(u)=max(u,0)ReLU(u)=max(u,0)

神经网络之误差反向传播算法推导相关推荐

  1. 【机器学习笔记】神经网络反向传播算法 推导

    神经网络反向传播算法 推导 (一) 概念及基本思想 (二)信息的前向传播 (三)误差反向传播 (1)输出层的权重参数更新 (2)隐藏层的权重参数更新 (3)输出层与隐藏层的偏置参数更新 (4)反向传播 ...

  2. TensorFlow基础10-(误差反向传播算法以及实现多层神经网络)

    记录TensorFlow听课笔记 文章目录 记录TensorFlow听课笔记 一,误差反向传播算法 二,链式求导法则 三,隐含层有多个神经元的误差反向传播 四,激活函数 五,实现多层神经网络 一,误差 ...

  3. 深度学习入门笔记(六):误差反向传播算法

    专栏--深度学习入门笔记 推荐文章 深度学习入门笔记(一):机器学习基础 深度学习入门笔记(二):神经网络基础 深度学习入门笔记(三):感知机 深度学习入门笔记(四):神经网络 深度学习入门笔记(五) ...

  4. 反向传播算法推导、激活函数、梯度消失与爆炸

    目录 反向传播算法 定义 推导过程 激活函数 定义 性质 常用的激活函数 Sigmoid Tanh ReLU softmax 梯度消失与梯度爆炸 起因 出现的原因 表现 解决方案 参考文档 反向传播算 ...

  5. 误差反向传播算法(BP网络)

    1.引言 误差反向传播网络(Error Back Propagtion,),简称为BP神经网络,是一种多层神经网络,与之相关的另一个概念是多层感知器(Multi-Layer Perceptron,ML ...

  6. 收藏 | 人人都能看懂的LSTM介绍及反向传播算法推导

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者:陈楠 来源:知乎 链接:https://zhuanla ...

  7. 深度学习的数学-卷积神经网络的误差反向传播

    文章目录 前言 正文 卷积神经网络中的关系式 卷积层 池化层 输出层 平方误差(损失函数) 梯度下降法 卷积层和输出层的神经单元误差(重点) 输出层的神经单元误差计算 输出层的神经单元与其权重偏置的关 ...

  8. 深度学习-误差反向传播算法

    文章目录 一.误差反向传播算法是干什么的? 二.计算图 (一) 了解计算图的写法 (二)局部计算 (三) 计算图的优点 三. 误差反向传播算法的具体实现 一.误差反向传播算法是干什么的? 通过数值微分 ...

  9. 误差反向传播算法笔记

    复习一下基础. 一.机器学习模型的处理方法 (1) 数据预处理: 经过数据的预处理,如去除噪声等.比如在文本分类中,去除停用词等. (2) 特征提取:从原始数据中提取一些有效的特征.比如在图像分类中, ...

最新文章

  1. matlab操作入门实验报告,MATLAB基本操作实验报告.doc
  2. python简易图形-python简单图形界面GUI入门——easygui【转】
  3. SQL server 数据库——T-SQL语句基础
  4. Android 自定义ListView单击事件失效
  5. Java堆(heap)、栈(stack)和队列的区别
  6. 反射、对象拷贝、异常常见问题总结
  7. 关于构造与析构过程中调用虚函数的问题
  8. 浏览器获取设备信息_一条命令获取 IE 浏览器保存网站的账号和密码信息
  9. Redis系列教程(三):如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
  10. 微软亚研院:CV领域2019年重点论文推荐
  11. 新基建东风下,开发者这样抓住工业互联网风口!
  12. 不是区块链的特征_区块链的四大特征
  13. 智能判断图片中是否存在某物体_RFID新技术:让所有物体联网!
  14. github java开源项目经验_GitHub 上最火的开源项目 —— Java 篇
  15. 帆软mysql迁移_平台数据迁移- FineReport帮助文档|报表开发|报表使用|学习教程
  16. 三等分任意角可能吗?
  17. 企业单位Win 10家庭版如何打开Guest用户,并共享打印机
  18. 使用计算机录制声音10,Win10电脑麦克风无法录音怎么解决 win10麦克风声音无法输入的解决方法...
  19. eclipse调试项目,debugger没反应 解决办法
  20. caffeine本地缓存的使用和详解

热门文章

  1. 关于C语言中的RGB函数调用原理
  2. 消费宝张建勇:Testin云测助力打造成消费者“盲选”最优商家
  3. 垃圾回收篇~~垃圾回收算法
  4. 300内哪款蓝牙耳机比较好?国产高性价比蓝牙耳机推荐
  5. mysql 复制表的几种方式
  6. 简述private protected public internal修饰的访问权限
  7. python评分卡1_woe与IV值
  8. 前端ECharts可视化框架快速上手详解(三)
  9. Django之ContentType理解应用
  10. 未授予用户在此计算机上的请求登录类型解决方法