array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 AI(008) - 循环神经网络(Recurrent Neural Network) - 爱码网

循环神经网络(Recurrent Neural Network)

AI-第五期-DarkRabbit

这篇文章是对循环神经网络的一个概念性总结,对应:

  • 第十一周:(01)循环神经网络
  • 第十一周:(04)LSTM
  • 维基百科(en):
    • “Recurrent neural network” 词条
    • “Long short-term memory” 词条
    • “Backpropagation through time” 词条

公式在CSDN的app中会显示乱码,请在其它方式阅读


目录


1 什么是循环神经网络

循环神经网络是一种人工神经网络(Artificial Neural Network),它的神经元间的连接沿序列(sequence)构成有向图,这使得它能表现出动态时间行为,所以有些地方也称为时间递归神经网络。

2 常用结构(Architectures)

2.1 基本结构(Basic)

基本循环神经网络结构(图片来自 Wikipedia):

AI(008) - 循环神经网络(Recurrent Neural Network)

从图中可以看出( t 为时间,除时间外所指均为向量或矩阵,下同):

  • 输入层(input):在 t 时刻的输入 xt
  • 隐藏层(hidden):在 t 时刻的值 ht ,它取决于权重为 Uxt 与 权重为 Vht1
  • 输出层(output):在 t 时刻的输出 ot ,它取决于权重为 Wht

用公式表示即是:

ot=σo(Wht)(1)ht=σh(Uxt+Vht1)(2)

其中 σ() 为对应的**函数。

从公式(2)表现为递归形式来看,输出 ot 是受到之前所有输入的影响(xt,xt1,)。展开式为:

ot=σo(Wht)=σo(Wσh(Uxt+Vht1))=σo(Wσh(Uxt+Vσh(Uxt1+Vht2)))=σo(Wσh(Uxt+Vσh(Uxt1+Vσh(Uxt2+Vσh()))))(3)

2.2 简单结构(Simple Recurrent (Neural) Networks,SR(N)N)

简单循环网络(SRN)通常是指 Elman networks 与 Jordan networks 。

Elman 网络的结构(图片来自 Wikipedia):

AI(008) - 循环神经网络(Recurrent Neural Network)

Elman 网络是一个三层网络(图中 x,y,z ),附带一个“上下文单元”(context units,图中 u )。隐层与这些单元相连接,权重为1。

Jordan 网络和 Elman 网络非常相似。只是这些“上下文单元”不是和隐层相连,而是与输出层相连。这些“上下文单元”被称为状态层(state layer)。

它们的公式表示都为:

yt=σy(Wyht+by)(4)ht=σh(Whxt+Uhht1+bh)(5)

2.3 长短期记忆网络(Long Short-Term Memory,LSTM)

LSTM 避免了梯度消失的问题。

LSTM 结构如下(图片来自 Wikipedia):

AI(008) - 循环神经网络(Recurrent Neural Network)

一个 LSTM 包含一个记忆细胞(memory cell,图中 ct ),一个遗忘门(forget gate,图中 σ,Ft )一个输入门(input gate,图中 σ,It )和一个输出门(output gate,图中 σ,Ot )。

从图中就可以看出,在 LSTM 有:

  • 遗忘门:决定了上一时刻 ct1 保留多少内容。
  • 输入门:决定了这一时刻 xt 保留多少内容。
  • 输出门:决定了这一时刻 ct 有多少内容输出到 ht
  • 输入:在 t 时刻的输入 xt ,在 t1 时刻的输出 ht1ct1
  • 输出:在 t 时刻的输出 htct

用公式表示即是:

Ft=sigmoid(WFxt+UFht1+bF)(6)It=sigmoid(WIxt+UIht1+bI)(7)Ot=sigmoid(WOxt+UOht1+bO)(8)ct=Ftct1+Ittanh(Wcxt+Ucht1+bc)(9)ht=Ottanh(ct)(10)

其中 是哈达马乘积(Hadamard product)矩阵运算,也记作 ,部分文章也写作

3 基于时间的反向传播算法(Backpropagation Trough Time,BPTT)

BPTT 是一种基于梯度的技术,可以用来计算 Elman 网络。

具体的计算可以参考这篇文章

Recurrent Neural Networks Tutorial, Part 3 – Backpropagation Through Time and Vanishing Gradients

相关文章: