本课主要包含3方面的内容:1,普通RNN简介;2,普通RNN的后向传播;3,双向RNN简介及其后向传播。

一,普通RNN简介:

在许多使用场景下,输入是一个序列,输出是一个值或一个序列。比如,文本主题分析,输入一个单词序列,输出序列所属的主题;机器翻译,输入一个英文单词序列,输出一个法语单词序列等等。

1,普通RNN的简化表示:非常重要!深入理解RNN的关键

(1),每次的输入(蓝色)是一个向量;

(2),每一个隐含层(绿色)都有多个神经元;

(3),输出层(红色)同样有多个神经元;

(4),但,他们都将以一个单独的小方格来表示。即,每个小方格,代表拥有许多神经元的网路层(每一层默认全连接)。

2,引出普通RNN:

2.1,无限响应模型:

股价预测任务,比如,已知历史股价信息,预测未来一天的股价涨跌,定义「有限响应模型」(Finite-response model),即,发生在今天的结果会对未来N天的输出产生影响。

如果需要更多的历史信息,模型上只需增大N即可。但在具体实现上,更复杂的网路需要更多的CPU和内存。对长期趋势(年周期)下的股价预测来说,几乎是不可接受的,所以,我们需要一个在计算上可接受的「无限响应模型」(Infinite-response model),比如,」使用外生输入的非线性自回归网路「(NARX),它在t=0时刻的输入会影响任意时刻的输出结果,并且每一列在形式上都相同。

可见,在NARX网路中,对过去的「记忆」蕴含在当前的输出结果中,并非以多个输入节点的形式出现在网路里。

2.2,记忆单元:

在数学表达上,定义一个存储在记忆单元中,能记忆过去信息的「记忆变数」m_t:

历史上,曾经出现过很多带记忆单元的网路,比如,Jordan网路中,仅仅将过去的输出总体求平均,来作为记忆单元,它考虑的是全部的过去信息,而不是最近的信息。

2.3,普通RNN网路:

状态空间模型(the state-space model),是无限响应系统的一个可选模型,其中, h_t 记录的网路的状态,即模型直接将记忆单元嵌入到状态单元中,状态也同时记录了过去的全部信息,因此,该模型需要一个初始状态 h_{-1} 。(切记,每个方格都是一个多维向量。)

因为RNN每一列都相同,因此,示意图有若干种简易表示法,对单层RNN来说:

二,普通RNN的后向传播:

后向传播的目的是,在给定的 (X_i, D_i) 的输入序列上,最小化全部输出序列 Y_iD_i 的误差。

1,前向传播:向网路灌入一条完整的数据序列,逐时间步,依次生成预测输出 Y_i

1.1,公式推导:

# 假设某RNN模型,包含L个隐含层和1个输出层;

# 假设 h(-1,*) 已知; b(*) 是偏置向量;

# W_c(*) 是适用于当前时间步输入的权重矩阵;

# W_r(*) 是适用于前一时间步状态的权重矩阵;

# W_r(*) 是适用于输出层的权重矩阵。

2,后向传播:对每一条训练数据,后向传播计算梯度。(简单单层RNN,只是线画弯了~)

2.1,变数简介:

# DIV是输出向量,输出标量的函数,它不一定是逐时间步的误差求和,除非你明确定义;

# W_r(*) 是时间步t时的输出向量, Y_i{(t)} 是输出向量的第i个元素;

# h(t) 是隐含层再时间步t时的输出,本例中假设只有1个隐含层;

# Z^{0}{(t)} 是隐含层在时间步t时激活前的响应值, Z^{1}{(t)} 则对应输出层的响应值。

2.2,公式推导:(只理解了框架)

# 假设前向传播已经完成;

# Jacobian(x,y)是y关于x的雅克比矩阵;

# 假设dY(t) = gradient(div,Y(t)),对所有t适用;

# 假设所有dz,dh,dW和db均被初始化为0。

三,双向RNN网路简介:

# 不仅要学习 w_1w_6 ,还要学习 w_2,w_3,w_4w_5

# 正向过程从t=0至t=T,反向过程从t=T至t=0,都只计算隐含层状态;

# 结合正向和反向的隐含层状态,计算每个时间步t的最终输出;

1,前向传播:

# 下标f表示正向过程,下标b表示反向过程;

# 假设 h_f{(-1,*)}h_b{(inf ,  *)} 已知。

2,后向传播:分别对正向和反向网路,执行后向传播:(只理解了框架)


推荐阅读:
相关文章