BPTT-应用于简单的循环神经网络
上面是一组序列变量,即四个变量 z1,z2,z3,z4z_1, z_2, z_3, z_4 中的任一 ziz_i 的值均依赖于它前面的变量 z1,z2,..,zi−1z_1, z_2, .., z_{i-1},且有
z2=2∗z1z_2 = 2 * z_1
z3=3∗z2+z1z_3 = 3*z_2 + z_1
z4=4∗z3+2∗z2+z1z_4 = 4*z_3 + 2*z_2 + z_1
E=4∗z4+2∗z2E = 4*z_4 + 2*z_2
现在我们定义:
∂E∂zi\frac{\partial E}{\partial z_i}: 目标函数EE对变量ziz_i的偏微分,
∂+Edzi\frac{\partial^ +E}{d z_i}: 目标函数EE对变量ziz_i的全微分。比如,
∂+E∂z4=∂E∂z4=4\frac{\partial^+ E}{\partial z_4}=\frac{\partial E}{\partial z_4}=4
∂+E∂z3=∂E∂z3+∂+E∂z4⋅∂z4∂z3=16\frac{\partial^+ E}{\partial z_3}=\frac{\partial E}{\partial z_3}+\frac{\partial^+ E}{\partial z_4}\cdot \frac{\partial z_4}{\partial z_3} =16
∂+E∂z2=∂E∂z2+∂+E∂z4⋅∂z4∂z2+∂+E∂z3⋅∂z3∂z2=58\frac{\partial^+ E}{\partial z_2}=\frac{\partial E}{\partial z_2}+\frac{\partial^+ E}{\partial z_4}\cdot \frac{\partial z_4}{\partial z_2} +\frac{\partial^+ E}{\partial z_3}\cdot \frac{\partial z_3}{\partial z_2}=58
∂+E∂z1=∂E∂z1+∂+E∂z4⋅∂z4∂z1+∂+E∂z3⋅∂z3∂z1+∂+E∂z2⋅∂z2∂z1=136\frac{\partial^+ E}{\partial z_1}=\frac{\partial E}{\partial z_1}+\frac{\partial^+ E}{\partial z_4}\cdot \frac{\partial z_4}{\partial z_1} +\frac{\partial^+ E}{\partial z_3}\cdot \frac{\partial z_3}{\partial z_1}+ \frac{\partial^+ E}{\partial z_2}\cdot \frac{\partial z_2}{\partial z_1}=136
综上,我们有如下的链式法则[1]
\frac{\partial^+ E}{\partial z_i} = \frac{\partial E}{\partial z_i}+\sum_{j>i}^{T} \frac{\partial^+ E}{\partial z_j}\cdot \frac{\partial z_j}{\partial z_i} \qquad Eq. 1
traditional recurrent neural network
下图是一个基础的循环神经网络示意图
Fig. 1: 循环神经网络示意图
其中x_t, h_t, y_t
分别代表 t
时刻网络的输入向量
,隐藏层向量
, 输出向量
, w_ih, w_ho
均为 权重矩阵
,具体的计算公式如下:
xct=[xt,ht−1] x_{ct} = [x_t, h_{t-1}]
ht=ϕ(zht)=tanh(wih⊙xct+bih)h_t = \phi (z^h_t) = tanh (w_{ih} \odot x_{ct} + b_{ih})
yt=σ(zot)=softmax(who⊙ht+bho)y_t = \sigma(z^o_t) = softmax( w_{ho} \odot h_t + b_{ho})
成本函数采用信息熵形式
C=\sum_{t=1}^{T}\sum_{k} (1-\hat{y}(t)_{k})*log(y(t)_{k}) = \sum_{t=1}^{T} c(y_t)
k
表示输出层节点个数, y^\hat{y} 表示真实的目标输出。
我们的目标是计算
\frac{\partial^+ C}{\partial w_{ih}}
和
\frac{\partial^+ C}{\partial w_{ho}}
即在给定 x1,x2,...xTx_1, x_2, ... x_T 作为输入序列, y^1,y^2,...,y^T\hat{y}_1, \hat{y}_2, ..., \hat{y}_T 作为目标输出序列的前提下,计算成本函数 CC 对权重矩阵 wih,whow_{ih}, w_{ho} 的全微分 (这里我们暂时忽略 bih,bhob_{ih}, b_{ho})。为此,我们先计算 ∂+C∂zht\frac{\partial^+ C}{\partial z^{h}_{t}} 和 ∂+C∂zot\frac{\partial^+ C}{\partial z^o_{t}}, 其中 zhtz^h_t 和 zotz^o_t 分别是图中绿色模块和黄色模块的输入。
根据 Fig. 1, 我们看出绿色模块之间有如下的依赖关系
那么zhiz^h_i 仅仅依赖于 zhi−1z^h_{i-1},根据链式方程 Eq. 1:
\begin{align} \frac{\partial^+ C}{\partial z^h_{t}} & = \frac{\partial C}{\partial z^h_{t}} + \sum_{t'>t}^{T} \frac{\partial^+ C}{\partial z^h_{t'}} \cdot \frac{\partial z^h_{t'}}{\partial z^h_t} \\ & = \frac{\partial C}{\partial z^h_{t}} + \frac{\partial^+ C}{\partial z^h_{t+1}} \cdot \frac{\partial z^h_{t+1}}{\partial z^h_t} \end{align}
并且,
\frac{\partial^+ C}{\partial z^h_{T}} = \frac{\partial C}{\partial z^h_{T}} = \frac{\partial C}{\partial z^o_{T}} \odot w_{ho} \cdot \dot{\phi}(z^h_T)
因为 Fig. 1 中黄色模块之间的相互依赖关系是通过绿色模块产生的,它们之间并没有直接的依赖关系,所以有
\begin{align} \frac{\partial^+ C}{\partial z^o_{t}} = & \frac{\partial C}{\partial z^o_{t}} \\ \\ =& \dot{c}(y_t) \dot{\sigma}(z^o_t) \end{align}
由上面的三个公式,可进而依次求出 t=T−1,T−2,...,2,1t = T-1, T-2, ..., 2, 1 时刻时的 ∂+C∂zht\frac{\partial^+ C}{\partial z^h_{t}} 值。
最终有:
\frac{\partial^+ C}{\partial w_{ho}} = \sum^T_{t=1}\frac{\partial^+ C}{\partial z^o_t} \frac{\partial z^o_t}{\partial w_{ho}} = \sum^T_{t=1}\frac{\partial^+ C}{\partial z^o_t} \odot h_t
\frac{\partial^+ C}{\partial w_{ih}} = \sum^T_{t=1}\frac{\partial^+ C}{\partial z^h_t} \frac{\partial z^h_t}{\partial w_{ih}} = \sum^T_{t=1}\frac{\partial^+ C}{\partial z^h_t} \odot x_{ct}
[1] Backpropagation through time: what it does and how to do it (web)
BPTT-应用于简单的循环神经网络相关推荐
- tensorflow随笔——简单的循环神经网络分类实例
继上一篇用简单的卷积神经网络做mnist分类之后,本篇文章采用RNN替换CNN写了一个mnist分类实例.实例中包含两个文件: train.py:数据加载和训练代码. # coding=utf-8 i ...
- 简单入门循环神经网络RNN:时间序列数据的首选神经网络
更多深度文章,请关注:https://yq.aliyun.com/cloud 随着科学技术的发展以及硬件计算能力的大幅提升,人工智能已经从几十年的幕后工作一下子跃入人们眼帘.人工智能的背后源自于大数据 ...
- 循环神经网络(RNN)简介
人工神经网络介绍参考: https://blog.csdn.net/fengbingchun/article/details/50274471 卷积神经网络介绍参考: https://blog.csd ...
- 零基础入门深度学习(5) - 循环神经网络
往期回顾 在前面的文章系列文章中,我们介绍了全连接神经网络和卷积神经网络,以及它们的训练和使用.他们都只能单独的取处理一个个的输入,前一个输入和后一个输入是完全没有关系的.但是,某些任务需要能够更好的 ...
- 从90年代的SRNN开始,纵览循环神经网络27年的研究进展
选自arXiv 作者:Hojjat Salehinejad等 机器之心编译 参与:刘晓坤.路雪.蒋思源 近日,来自多伦多大学和滑铁卢大学的研究者撰文介绍循环神经网络的基础知识.近期发展和面临的挑战.机 ...
- 深度学习(6) - 循环神经网络
语言模型 RNN是在自然语言处理领域中最先被用起来的,比如,RNN可以为语言模型来建模.那么,什么是语言模型呢? 我们可以和电脑玩一个游戏,我们写出一个句子前面的一些词,然后,让电脑帮我们写下接下来的 ...
- AI学习笔记(十九)循环神经网络
目录 循环神经网络(Recurrent Neural Network,RNN) RNN的基本概念 RNN的主要应用领域 RNN的实现 RNN的反向传播-BPTT RNN的问题 长短期记忆(Long S ...
- 零基础入门深度学习(5) - 循环神经网络【转】
本文转载自:https://zybuluo.com/hanbingtao/note/541458 在前面的文章系列文章中,我们介绍了全连接神经网络和卷积神经网络,以及它们的训练和使用.他们都只能单独的 ...
- PyTorch 学习笔记(十一):循环神经网络(RNN)
对于人类而言,以前见过的事物会在脑海中留下记忆,虽然随后记忆会慢慢消失,但是每当经过提醒,人们往往可以重拾记忆.在神经网络中也是一样,之前介绍的CNN模型都是与时间序列无关的模型,它有明显的局限性,就 ...
最新文章
- CSS之布局(默认样式)
- 超级黑科技代码!Python打造电脑人脸屏幕解锁神器附带接头暗号
- 1字符集 iso latin_ISO-8859-1 、Latin-1 西欧编码介绍及应用
- 基于jquery的serializeArray
- 大图详解负载神器 LVS、Nginx及HAProxy工作原理
- HBase MapReduce
- 2018深圳云栖拉开帷幕,飞天技术汇五大专场邀你参加~
- lammps不规则界面建模技巧
- 磁带非但没被淘汰,容量还比硬盘大了???
- MySQL图形化界面安装步骤
- ios swift5 父子控制器
- 【01】分别使用头插法和尾插法建立单链表
- 调试经验——Win 10 Excel中Alt+Tab不能切换窗口的解决方法
- 职称计算机萧山考点地址,杭州各科目考点一览表(地址+考试时间+电话)
- matlab 质心,Matlab中三点确定质心
- wordpress插件_2020年5个最佳WordPress电子商务插件比较
- 算法到底有没有价值观?快手给出了标准答案
- Object-C,文件路径API
- mysql提取身份证生日并查询指定月份的数据
- 算法复杂度分析中的符号(Θ、Ο、ο、Ω、ω)的意义
热门文章
- 当安装、卸载件包时,出现依赖问题 error: Failed dependencies
- Springboot毕设项目北京冬奥会志愿者管理系统611yc(java+VUE+Mybatis+Maven+Mysql)
- 四川计算机专科大学录取线,四川省托普计算机信息技术职业学院历年招生录取分数线...
- Base64与Java -- Base64简介与原理
- 球员“颠卫生纸”背后的秘密
- Ubuntu ip报错解决方案 ens33: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
- 8.2 贪心策略例题---快速渡河问题(没看懂!)
- 牛客网数据库SQL实战54——查找排除当前最大、最小salary之后的员工的平均工资avg_salary
- 洛谷【C++编程基础】递归函数初步 专题解题报告
- highlight.js(代码高亮插件)