放牧代码和思想
专注自然语言处理、机器学习算法
    时间有限,只有GitHub上的issue能及时处理,大约每周末一次。另外,不要叫我楼主,谢谢。

Hinton神经网络公开课7 Recurrent neural networks

目录

2017年05月18日22-16-34.png2017-05-18_22-31-32.png首先复习一下常见序列模型,包括BiGram、linear dynamic system和HMM。通过对简单模型的比较学习,加深对RNN的理解。

为序列建模

目的是将一个输入序列转化为一个输出序列,如机器翻译、语音识别。

当不区分输入和输出序列的时候,我们实际上在用输入序列的下一个词作为输出来训练模型;于是可以预测输入的下一个词语。对于时序序列,这是相当自然的。而在图像领域则没有类似的应用,无法预测图像的下一个像素或像素块。

“预测下一个词”模糊了监督与非监督学习的界限,一方面需要指导信息,另一方面却不要求独立于输入的指导信息。

无记忆的序列模型

自回归模型

2017年05月15日21-12-15.png

通过固定数量的前n个词预测下一个词,通常是它们的加权平均。

前向神经网络

是自回归模型的推广,通过一个或多个隐藏层来预测下一个词。

2017年05月15日21-15-32.png

改进无记忆模型

无记忆模型只是序列模型的一个子集,我们可以为其加入隐状态。如果隐状态有自己的变化,则会产生更有趣的模型。

  • 信息可以长时间储存在隐状态中,不像无记忆模型,没有记忆期限的限制

  • 如果系统很嘈杂,从隐状态生成输出也会很嘈杂,我们无法确定具体的隐状态

  • 唯一能做的就是估计一个隐状态向量空间上的概率分布

而只有两种隐状态模型是计算可行的,接下来会简单介绍一下。介绍的目的是为了与RNN做比较,而不是学习其本身。

Linear Dynamical Systems (工程师的最爱)

2017年05月15日21-34-52.png

这是一种生成式模型,连续的隐状态直接确定输出,可能有输入影响隐状态。通常假设隐状态含有高斯噪音会取得较好的预测效果,比如导弹拦截系统。

HMM(计算机科学家的最爱)

2017年05月15日21-48-07.png

另一种模型是隐马尔可夫模型,其隐状态是离散的,所以备受计算机科学家的喜爱。离散的隐状态数量是有限的,所有其转移概率可以用固定大小的矩阵来描述。其输出模型也是随机的,即给定隐状态,输出观测也是随机的;这是其名为“隐”的原因。老爷子说隐藏单元之所以被称作隐藏,其原因只是他的个人偏好,他觉得这样比较神秘。

HMM很简单,简单到只需要三个概率分布就能表示整个系统。而且通过动态规划,学习和预测都非常高效。

HMM的致命缺陷

考虑HMM如何生成数据。在每一个时刻必须选择一个确定的隐状态。如果总共$N$个隐状态,则模型只能记住$\log(N)$比特有关最近生成数据的信息。

而实际应用需要多少比特呢?如果用来生成语音的话,则必须考虑语法、语义、语调、速度等等,大约$100$bit。这也就是$2^{100}$个隐状态,实在太多了。

RNN

替代方案是RNN,这是一种更有效的记忆模型。RNN之所以强大,有两个方面:

  • Distributed隐状态可以储存更多信息,因为任何时刻可以激活不定个

  • 非线性dynamics,能够以更复杂的方式更新内部隐状态

生成式模型一定是随机的吗

尽管Linear dynamical systems和HMM是随机的,但给定观测数据,隐状态上的后验概率分布其实是个确定性的函数。也就是说预测函数其实是一些有关当前数据的确定的概率分布。而RNN虽然是判决式模型,其输出却是类HMM模型的概率分布(RNN的每次输出相当于一个HMM模型,高出一个境界了)。

RNN的性质使其具备广阔应用前景,但训练代价特别高。

通过反向传播训练RNN

假设时间粒度为1,则RNN可看做同一些节点在不同时刻的连接:

2017年05月17日22-43-08.png

前向传播时节点永远是那几个节点,弧也永远是那些弧,弧上的权值也保持不变:

hankcs.com 2017-05-17 下午10.41.57.png

注意这两张图不是完全对应的,只是个示意图。

复习:约束反向传播

还记得在CNN中,我们需要约束两个权值相等。这种约束很容易做到:

2017年05月17日22-50-31.png

也即是保证它们初始值满足约束,并且更新量也满足约束即可。

在RNN中同样用到了约束,我们要约束unroll之后的unit之间的权值对应相等。我们可以将RNN想象为一段时域上的普通多层神经网络,只不过每层单元的权值分别对应相等而已,这是仅有的约束。前向传播在每个时刻产生一个激活值,将其压栈。反向传播将其出栈,计算误差。最后将所有误差导数分别求和应用到权值上去即可。

隐藏层和输出层的初始值

RNN训练时必须指定所有隐藏和输出单元的初始值。虽然可以取一个固定值比如0.5,但最好还是将初始状态作为一个可学习的参数。学习算法与普通权值一样:

  • 取一个随机初始值

  • 每次训练后获取关于初始值的梯度

  • 以负梯度更新初始值

输入层

可以指定所有输入单元、部分单元、每个时刻的部分单元的初始状态。

hankcs.com 2017-05-17 下午11.10.59.png

hankcs.com 2017-05-17 下午11.11.31.png

hankcs.com 2017-05-17 下午11.11.51.png

目标值

监督学习的Teaching signals 也有类似的选择。

可以指定所有单元的最终激活值:

hankcs.com 2017-05-17 下午11.13.06.png

如果想训练attractor,则需要指定最后几步:

hankcs.com 2017-05-17 下午11.13.40.png

也可以把其中一些作为输出节点,指定其目标值:

hankcs.com 2017-05-17 下午11.15.57.png

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » Hinton神经网络公开课7 Recurrent neural networks

分享到:更多 ()

评论 欢迎留言

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

我的开源项目

HanLP自然语言处理包基于DoubleArrayTrie的Aho Corasick自动机