说明:本文是自己阅读Finding Structure in Time期间,查找完整论文的讲解很少,于是自己打算将自己的理解整理下来。
文中的图片均来自论文Finding Structure in Time。
ABS
与我读过的其他摘要不同,这篇文章的摘要只是简单的说明了时间的重要性,同时介绍了一下现在时序模型的发展,并没有在摘要中指出自己的模型的厉害之处也没有指出其他模型的不足之处。
1 INTRO
指明应该采用显式的表示来表示时间
2 The Problem with Time
一种解决方法是通过独热编码来表示是哪一个时刻的输入。
存在几个问题:
- 使用了空间换取了时间
- 要求输入是等长的
- 不容易识别相对位置
2.1 Networks with Memory
之前Jordan提出了一个模型具有记忆能力,如Figure 1所示
作者对上面的模型进行了一些改进,就得到了本文使用的模型,如下图所示(Figure 2):
这个模型代表可以从隐藏层直接拷贝(隐藏层到CONTEXT UNIT是直接进行传输)到CONTEXT UNITS然后再将输出作为隐藏层的输入这样网络同样拥有了记忆能力。
3 Exclusive-OR
这部分作者使用上面的模型解决了一个异或任务。
问题:要求给定序列预测每一个位置下一次的输出
输入的产生:第一位和第二位异或得到第三位1,第四位和第五位异或得到第六位的0…
正确的输出:输入第一位的下一位是0,10的下一位是1,101的下一位是0…(也就是输入去掉左边第一位即可得到输出)
使用上面的更改过的模型进行训练,隐藏层的输入来自于输入和上一时刻产生的CONTEXT UNITS。
由于输入的特性,只有当第一位第二位给定时可以预测第三位,当第四位和第五位给定时可以预测第六位等等。
Figure 3是每个位置的损失值,通过上图可以看出在可能进行预测的位置损失比较低,而在不确定的位置的损失较高,这也表明上述的模型学习到了一些和时序有关的性质。
4 Structure in Letter Sequences
这一部分作者提出一个更加复杂的任务,同样使用上面的模型进行训练。
作者构造了一个序列,构造方法如下:
-
首先随机生成含有1000个字母的序列(这些序列由bdg组成)
-
将生成的序列中的b换成ba,d换成dii,g换成guu
对序列进行编码,编码如下(Table 4):
对输入进行训练,同时重新生成一个输出进行预测,结果如下图:
Figure 4是预测每个字母的损失值,可以看出预测辅音的损失是远高于预测元音的,因为辅音是随机生成的不具有规律性而辅音后面的元音是固定的,所以这也表明了该序列有记忆的功能。
同时向量的不同维的错误率也有很大的差别,Figure 5的左边是第一维的损失也就是代表consonant的维度,右图是代表第四维的损失也就是high这一维。这样的结果表明模型成功学习到了和序列相关的信息,模型能够成功的预测到下一位是元音还是辅音(这是因为虽然哪个辅音是不能确定的,但是只要给定序列下一个是否是辅音是确定的),而high对于不同的辅音有不同的值,所以模型并不能预测出下一个辅音是哪一个,这也是符合预期的。
同时作者指出序列在顺序上的依赖性越强模型可能会更加的容易学习,而不是更难学习。
5 Discovering the notion “word”
这一部分作者提出一个任务,视图用该模型来确定每个单词的开始部分。
任务的说明如下:
- 生成两百个句子,每个句子有4-9个词
- 将所有句子拼成一句,同时去掉所有标点与空格,这样得到一个又4963个字母的输入流
- 每个子母被编码成一个五维的向量
- 任务的目的是对于当前位置预测下一时刻的输出
Table 6是每个字母的编码。
对于输入,模型的任务依然是预测下一位置的输出,但根据结果可以来判断单词的开始。
Figure 6是对于一个输入序列预测的损失(序列为:many years ago a boy and girl lived by the sea they played happily m,这里要注意的是,实际的输入没有空格,这里为了可读性,我在单词之间加上了空格)
根据Figure 6可以发现每个单词开始的时候损失很高而随着给出的字母越多损失变小。这使得确定一个单词的开始成为可能(损失相对高的地方就是单词的开始)。
6 Discovering lexical classes from word order
这一部分作者试图通过原来的模型对句子中的单词的词性进行预测。
任务的输入:生成一些比较短的句子(句子由两到三个词语组成)
Table 3是部分词语(一共有29个词语,表格没有完全给出)的分类,可以看到有的词同时属于两个分类。
生成句子的结构如表格四所示。用表格四随机生成一万个句子。
采用31位(保留两位后续会用)的独热编码对词语进行编码,将所有的句子编码后的结果拼接起来得到输入(若干个31位的向量,没有分隔符,这里应该是拼接成一个矩阵),部分输入和输出如Table 5所示(任务目标还是预测下一个输出)
这样得到的输入是一个有27354个词的序列,为了增加输入的复杂性,作者把这个序列复制五次进行预测(生成一个长度为27354 * 6的序列)。
得到最终的均方差为0.88,但作者指出在这次训练中均方差变得不那么有意义,这是因为由于输出向量和模拟中使用的向量(输出向量中只存在一个1),模型很快学习到将向量的输出全部变为0能够将均方差误差降到1.0,所以最终的均方差0.88意义不大。
这次任务与之前的任务都不一样,这次的任务对于给定的词语(无论给定什么词语)它的下一个词语都是不确定的,而之前的任务在某些时刻输出是确定的,但是这这次任务可以确定的是下一次的可能的词语的数量是一定的,这导致最终的输出结点的输出的词语应该存在某些频率关系。
于是作者将每一个时刻的输出向量每一位代表对应单词的可能性(类似于softmax,实际的可能性可以通过输入的频率来决定),通过两个向量(输入的下一位置的可能性则可以使用频率来代替)的余弦值来比较两个向量的相关性,或者此时也可以继续使用均方误差,此时得到的均方误差是0.053平均余弦值是0.916(余弦值越靠近1两个向量越相关),这表明之前的模型学到了下一个词的频率关系。
用训练好的模型的隐藏层输出对每个单词进行分类,分类的结果如下图所示:
接下来用ZOG替换之前序列中的man(Zog的独热编码是一个新的向量,之前预留了两位,这里可以使用第三十位为1来表示),来测试此模型是否能够对新出现的词语进行预测,此时同样通过隐藏层对单词进行分类得到的结果如下图所示:
可以看到ZOG代替了man出现在man的位置,表明该模型可以对新的词语进行预测,而预测的方法类似于语言学习者通过已有的知识来猜测新词的意思(或类型)的情形。
7 Types, tokens, and structured representations
本文使用的模型是上下文来记录时间,同一个单词在不同的上下文出现会产生不同的输出,这在作者看来是一件好事。
在上一节任务中的单词实际上并不是上下文敏感的(上一节使用的是不同上下文的平均值,如果不使用平均值而是对所有的27354个输出进行分类这是不现实的,更别说绘制27354个结点的分类树),上一节的任务成功识别了29中单词,下面的图片则表明上一节的模型同样识别了单词在不同上下文的分类,如下图所示:
可以看到输入出现在句子开头的被汇聚在一起,出现在句子末尾的被汇聚在一起。
对于词性的分析,传统的方法需要将数据集进行标明每个词语的词性,而本文提出的方法能够将具有相同性质的词语汇聚到一个分类,这样能够有利于分类问题的研究。
8 Conclusions
值得注意的几点:
- 当一些问题是时序问题时,他们的性质往往发生改变
- 随着时序改变的损失可以作为时序结构的线索(说明与时间相关的损失函数更适合作为时序问题的损失函数)
- 增强时序依赖关系不一定会导致更差的表现,而且可能会有更好的表现
- 对于时间和记忆的表达是高度依赖于任务的(对不同的任务应该有不同的时间和记忆的表达)
- 对于时间的表达不需要是平坦的,原子的,或者无结构的