放牧代码和思想
专注自然语言处理、机器学习算法
    Why join the Navy if you can be a pirate?

Hinton神经网络公开课8 More recurrent neural networks

目录

使用HF训练字符预测模型

训练

Ilya Sutskever 从维基百科中选出了5百万个长100的字符串。对每个字符串,都将模型重置到初始状态、读入11个字符,预测接下来的一个个字符。使用了HF optimizer和GPU加速,花了一个月时间才训练出一个较好的模型。这个模型能够闭合很长距离的引号和括号,其他模型做不到。

预测

  • 首先重置模型到初始状态

  • 先输入一段burn-in文本,让模型更新内部状态

  • 然后让其预测下一个字符,得到86个字符及其概率分布

  • 按照该概率分布随机挑选一个字符,告诉模型你猜对了,并把这个字符输入回去

  • 继续这个过程,直到拿到了足够多的字符

  • 最后通过这些字符组成的文本看看它都知道些什么

结果

这是该模型生成的一段文本:

He was elected President during the Revolutionary War and forgave Opus Paul at Rome. The regime of his crew of England, is now Arab women's icons in  and the demons that use something between the characters‘ sisters in lower coil trains were always operated on the line of the ephemerable street, respectively, the graphic or other facility for deformation of a given proportion of large segments at RTUS). The B every chord was a "strongly cold internal palette pour even the white blade.”

首先没人会叫“Opus Paul at Rome”,但这几个词的确是经常一起用的。然后模型其实不怎么专心,一直在更换话题。值得称赞的是,预测的字母几乎都组成了合法的词语。就算不合法,如红色部分,它看上去也非常像一个正常的英文词语。另外它也生成了一个未闭合的括号,和一对闭合的引号。

一些测试

通过精心设计的测试挑战模型的认知。

比如输入一个人名和一个不合法的却很像动词的词语:

Sheila thrunge                              

模型知道要加s。

而对于不可数名词,模型知道不加s:

People thrunge   

而用逗号分割一个名字,模型知道补充剩余的姓氏:

Shiela, Thrungelini del Rey                       

还可以问它一些终极问题:

The meaning of life is literary recognition.

老爷子说如果回答42,这并不稀奇。这不就是《银河系漫游指南》里面的终极答案么?

meaning_of_life.jpg

模型还会回答其他随机的答案。

The meaning of life is the tradition of the ancient human reproduction: it is less favorable to the good boy for when to remove her bigger.                      

繁殖么……一看就知道不是什么正经模型。

模型都知道些什么

  • 知道大量词汇、人名、数字、日期

  • 知道闭合引号和括号

  • 懂语法,但是没什么语义。也不是语言学家那种规则式的语法,而是类似于一个native speaker说话时大脑中自然的语感。

  • 知道少量的语义,比如卷心菜与蔬菜有关

老爷子顺手做了一个实验。在这个试验中,你正在做其他的事情,比如看这篇笔记。现在问你一个问题,你必须尽快地给出答案,大声地喊出答案。不在意答案是否正确,只要快!要快!要快!奶牛喝什么?

牛奶,大部分人都这么回答。

当然奶牛大部分时间未必喝牛奶,我们给出这个答案只是因为奶牛、喝、牛奶这几个词紧密相关,并不是因为它们有什么逻辑联系。

预测下一个词

RNN同样可以预测下一个词,它比前馈神经网络要好、比其他模型都好。RNN需要的数据量更少,随着数据量上升效果提升更显著。这使得RNN成为这个任务的最佳选择。

Echo state networks

这种神经网络取消了input to hidden和hidden to hidden的connection,虽然需要更大的hidden state维度,但实际效果更好。

中心思想

最近流行的RNN训练方法是不训练hidden to hidden的权值,而是取一个随机值,只训练它们影响output的方式。这与传统的感知机思路非常相似。

  • 一种训练前馈神经网络的方法是将最初的几层固定为随机值

  • 然后只训练最后一层。这实际上是一种线性模型,通过将输入向量变换后得到的新向量来预测输出。(这听上去非常像SVM)

  • 具体做法是用精心设计的随机值固定input到hidden 和hidden到hidden 的connection,并只学习hidden到output 的connection。

随机值的取值方法

hidden到hidden权值取值要追求的效果每次前向传播后,激活值大致不变。具体做法是找到一个随机矩阵使其谱半径为1。也就是权值矩阵的特征向量中最长长度是1。设置好了之后,输入会在RNN中像回声一样反射很长一段时间。

另一个注意点是,必须用稀疏连接(大部分weight都是0,少数weight较大)。效果是产生了大量松耦合的振荡器(loosely coupled oscillators)。这使得输入不会扩散到其他部分,而是集中地传播到下一个时间单位。

然后input到hidden 的比例也要注意,比例过大会覆盖历史回声的影响。所幸的是Echo state networks训练速度很快,所以可以多试验不同的随机值和比例,取最佳值。你可以将其想象为,这种学习只是在通过“探针法”式的试验,学习weight的随机值和input的比例。由于训练速度很快,计算上是完全可行的。

echo state network示例

输入序列

一个实值的脉冲波,频率给定。

输出序列

一个正弦波,频率相同。

学习方法

拟合一个线性模型,将hidden unit作为输入,输出一个标量值。scholarpedia给出了这样一幅示意图:

FreqGenSchema.png

输入信号是脉冲波,输出(或说监督信息)是正弦波,两者频率相等。中间的是一些dynamical reservoir(或说hidden unit)各自的激活值图像。值得注意的是从输出到reservoir的连接,它们告诉reservoir现在已经产生了什么样的波形(虽然这不是必须的,毕竟网络有自己的记忆,或说“回声”)。

输出

2017年05月20日17-54-40.png

FreqGenTestOverlay.png

一开始模型输出的正弦波频率和相位都是对的,后面相位就错了。因为监督信息里面并没有相位,这也无可厚非。

总结

总结一下ESN的优缺点。

优点 缺点
  • 训练速度快,因为只拟合线性模型

  • 展示了权值初始化的技巧性

  • 可以胜任一维序列建模,但不适合多维,比如语音识别

  • 比起学习hidden到hidden的RNN,需要更多的隐藏单元

  • 如果让RNN使用ESN的初始权值,RNN的训练更高效


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

分享到:更多 ()

评论 2

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

我的作品

HanLP自然语言处理包《自然语言处理入门》