CS231n课程笔记六 RNN

从多层的神经网络到RNN,我们需要利用机器学习和统计模型中最早的思想:不同模型之间参数的共享。参数共享使得应用不同的模型到不同案例中变为可能,如果我们对于每个时间索引值都有单独的参数,我们不能将训练期间看到的序列长度推广到一起,也不能在不同的序列长度上跨越不同的位置共享统计强度。这样的共享对于一条信息在序列中反复出现的情况尤其重要。

一个相关的想法是在1-D时间序列上使用卷积,这种卷积的方法是时滞神经网络的基础。这种卷积操作允许了在时间长度上共享参数,卷积是序列,其中输出的每个成员是输入的相邻成员的少量的函数。参数共享的思想体现在每个时间步长中应用相同的卷积内核。经常性网络以不同的方式共享参数。输出的每个成员是输出的先前成员的函数。输出的每个成员使用与先前输出相同的更新规则生成。这种循环公式导致通过计算图共享参数。

为了简单的探究,我们把RNN作为一个包含向量x和时间步长t的序列,事实上,RNN经常被用来用于序列数据,我们已经省略了迷你指数来简化符号。而且,时间指标不是字面上指的是现实世界中的时间流逝。有时它指的是序列中的位置。也可以在诸如图像的空间数据的两个维度中应用RNN,并且即使当应用于涉及时间的数据时,网络可以具有在时间上向后的连接,前提是在将其提供给网络之前先观察序列。

计算图是一种将一组计算的结构形式化的方法,例如将输入和参数映射到输出和损失中的结构。请参见第6.5.1节的一般介绍。在本节中,我们将一个将复制的递归或反复计算的概念解释为具有重复结构的计算机图形,通常对应于一系列事件。在此图中,展示了跨越深层网络结构的参数共享

CS231n课程笔记六 RNN_第1张图片
image.png
CS231n课程笔记六 RNN_第2张图片
image.png

循环神经网络(Recurrent Neural Network,RNN):是一类用于处理序列数据的神经网络。 RNN在不同的时间点上共享参数,使得模型能够扩展到不同长度的样本并进行泛化;如果我们在每个时间点都有一个单独的参数,我们不但不能泛化到训练时没有见过序列长度,也不能在时间上共享不同序列长度和不同位置的统计强度。h(t)=f(h(t−1),x(t);θ)h(t)=f(h(t−1),x(t);θ)
重要的几种设计模式:1.每个时间步都有输出,并且隐藏单元之间有循环连接的循环网络;2.每个时间步都产生一个输出,只有当前时刻的输出到下个时刻的隐藏单元之间有循环连接的循环网络;3.隐藏单元之间存在循环连接,但读取整个序列后产生单个输出的循环网络。

CS231n课程笔记六 RNN_第3张图片
image.png
CS231n课程笔记六 RNN_第4张图片
image.png
CS231n课程笔记六 RNN_第5张图片
image.png
CS231n课程笔记六 RNN_第6张图片
image.png

长期依赖的挑战(Long-Term Dependencies):问题描述:经过许多阶段传播后的梯度倾向于消失(大部分情况)或爆炸(很少,但对优化过程影响很大)。

解决方法:

1.回声状态网络(Echo State Networks):从h(t−1)h(t−1)到h(t)h(t)的循环权重映射以及从x(t)x(t)到h(t)h(t)的输入权重映射是循环网络中最难学习的参数。 避免这种困难的方法是设定循环隐藏单元,使其能很好地捕捉过去输入历史,并且只学习输出权重。

2.多时间尺度的策略:设计工作在多个时间尺度的模型,使模型的某些部分在细粒度时间尺度上操作并能处理小细节,而其他部分在粗时间尺度上操作并能把遥远过去的信息更有效地传递过来。1.时间维度的跳跃连接(skip connection):增加从遥远过去的变量到目前变量的直接连接是得到粗时间尺度的一种方法。2.渗漏单元(Leaky Units):我们对某些vv值应用更新μ(t)←αμ(t−1)+(1−α)v(t)μ(t)←αμ(t−1)+(1−α)v(t)累积一个滑动平均值μ(t)μ(t),其中αα是一个从μ(t−1)μ(t−1)到μ(t)μ(t)线性自连接的例子。 当αα接近1时,滑动平均值能记住过去很长一段时间的信息,而当αα接近0,关于过去的信息被迅速丢弃。 线性自连接的隐藏单元可以模拟滑动平均的行为。 这种隐藏单元称为渗漏单元。3.删除连接:主动删除长度为一的连接并用更长的连接替换它们。

3.门控RNN:实际应用中最有效的序列模型,主要有LSTM和GRU。

LSTM:关键思想:自循环的权重视上下文而定,而不是固定的。 所谓的自循环的权重,由遗忘门控制。

CS231n课程笔记六 RNN_第7张图片
image.png

patsy是一个Python包,用于描述统计模型(statistical models)(特别是,线性模型或者有线性成分的模型),同时也用于构建设计矩阵(design matrices)。该包的开发受到了R或S语言中的公式微语言(the formula mini-language)的启发,并与其兼容。

   举例来说,如果我们有变量y和变量 x,a,b。我们想求出变量y与变量x,a,b之间的回归关系,其中变量a和b之间存在着交互作用,则公式可写为:
patsy.dmatrices("y ~ x + a + b + a:b", data)

你可能感兴趣的:(CS231n课程笔记六 RNN)