我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。
已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-notes
本节内容综述- 本节内容将介绍:Generation,Attention,Tips for Generation,Pointer Network。
- 第一步是 Generation ,具体来讲,是如何产生一个 structured object 。提到了 Seq 2 seq。
- 接下来的部分是 Attention 。提及了图片生成句子等有趣技术。
- 课程过半,进入 Tips for Generation 部分。提到了许多新技术,或者说容易遇到的问题、偏差,并由此介绍了相应的解决方案。
- 接下是 Pointer Network。Pointer Network可以有效利用输入中的人名地名等等。
- 最后穿插一点内容,RNN的变体,Recursive Network。
文章目录
小细节
Generation
如上,我们如何让机器产生一段句子呢?这个我们已经清楚了。使用 RNN 把 word 或者说 character 一个一个产生出来。
此外,如上,还可以把图形拆分成像素,使用 RNN 生成。
但是,如上,我们应该让就近的像素对生成的像素进行影响,而非按行来。可以进行 filter + 3维记忆空间 的方法。
Conditional Generation
但是,使用RNN存在一些问题,如上图,我们希望根据不同情况给出信息。
如上,一般来讲,RNN产生的话是随机的。我们可以对图片进行处理,比如用CNN获得一个向量,然后输入RNN中。可以在每个时间点都把图片输入,防止机器“忘记”自己在说什么。
对于机器翻译,同理。如上,先在Encoder中,对句子的每个成分按照时间点挨个输入。这样最后得到的向量,就包含了句子的全部信息。将这个输入到Decoder,就可以得到翻译。
这就是 Seq2seq 。
此外,在聊天机器人中,我们需要让之前的信息也输入到模型中,防止说重复的内容。
Attention
如上,我们将 z 0 z^0 z0 与 各个 h h h 进行 match 函数计算,得到各个 h h h 对应的 α \alpha α 。这个 match 函数中的参数也是训练出来。
之后,经过一个 softmax ,然后求和得到 c c c ,此时, c c c 就是Decoder input 。此外,可以得到心得 z z z 。
之后继续进行该内容。
Speech Recognition
如上,颜色深度代表 match score 。
Image Caption Generation
如上,可以把每个区域的向量与$z_0$进行运算得到,之后,进行 weighted sum,再交给 Decoder ,以此得到输出。
如上,在产生划线词汇是,其Attention也是集中在图片的相应位置的。
此外,还有些失败的地方,我们可以通过 Attention 进行分析,为什么出错了。
此外,机器还可以看视频说话。如上。
“我们的作业二就是做这个。”很有趣。
Memory Network
如上,也可以进行利用注意力做问答。
此外,Memory Network 也有更复杂的版本。
如上,有两组vector分别为 x x x与 h h h来表示Document, q q q与 x x x做match得到 α \alpha α,但是Extracted Information时,使用 h h h与 α \alpha α进行结合。
而得到的新向量,可以与 q 进行运算,表示机器在反复“思考”。这个过程叫做 Hopping 。
Neural Turing Machine
Neural Turing Machine 不仅可以读记忆,还可以改变记忆。
如上,实际上,k与memory产生四个新值其实有5个步骤。如下。
李老师:“我相信你一定没有兴趣知道他,所以我们把他跳过。”
如上, e e e与 a a a用于修改旧的 memory 。
总的计算框架如上。
Tips for Generation
Good & Bad Attention
如上,一个Bad Attention就是,可能 α \alpha α过于不均衡,导致机器只注意到了视频的主体。
我们可以用一个正则化的方法,让各个输入的部分都有近似的 attention weight 。如上图中的公式(这只是最简单的一种方法)。
Mismatch between Train and Test
如上,每次你的 RNN 的 input 其实来自于“正确的解答”。但这是训练时的状态。
如上,在实际使用时,在每次的 input 都来自自己上次的解答。
这将带来Exposure Bias。
如上,如果机器没有在一开始时正确地选择“A”,这将让接下来所有的生成都受影响。
Modifying Training Process?
那么,在训练时,就将 input 改为“自己生成”的答案呢?
但实际上,这将让我们的网络十分难以训练。
Scheduled Sampling
如上,我们用综合的想法来训练。
在输入时,我们随机地选择将 model输出 或者是 训练数据 进行作为输出。
要注意的是,我们在训练了一定步骤后,才考虑把 model输出 作为输入。随机选择的几率如上图中的表。
如上图,如果使用Scheduled Sampling,效果好很多。
Beam Search
如上,如果我们“贪婪地”每次都选择最好的那个输出,但是其最后的总的概率值(累成起来),未必是最高的。如上图中,绿色分支的分数是要高于粉色分数的。
因此,提出 Beam Search 。
如上,我们可以只选分数最高的 2 个,探索几步,看哪个分高。
如上,发现X、Y、W分数都高,因此,都在下一段时间输入。然后取分数最高的那个,最为下一时间的输入。
Object level v.s. Component level
如上,在有细微错误时,其与正确答案的Loss值差别并不大。
因此,我们考虑使用object-level criterion(假设有这样一个评估函数 R R R,评估句子语法),可行吗?
不可行,因为很可能无法做微分。
可以使用强化学习的方法。
把 generation 这件事,当成 reinforcement learning 来做。
在结束后,通过 R R R函数判断奖励值。
如上,MIXER是使用了强化学习与传统方法相结合的方法。
Pointer Network
如图,Pointer Network中可以解决如同的演算的内容。
如何转换为 Seq 2 seq 的模型呢?
如上,如果只是用 Encoder-Decoder 当然是不 work 的。当然,如果加入注意力是可以的。
如上,attention做了一点改善,不用 softmax 层,而使用 argmax 筛选输出。
这种方法,可以做到 100 个点规模都正确。
Applications - Summarization
如上,使用 Pointer Network 可以有效利用文章中的人名地名,而且将文章中的词接起来一般来讲就可以得到 Summary 。
Applications - Machine Translation
此外,还可以用在机器翻译上。
Recursive Network
Application: Sentiment Analysis
如上,对于Recursive,我们需要决定各个输入之间的关系。将某些输入值放在一起,输入到模型中。
Recursive Model
如上,我们可以考虑用文法结构的顺序进行输入。
这个 f ,不能用一个简单的函数。因此需要一个 network。
如上,对于 g 与 f 函数,我们都要训练。
Recursive Neural Tensor Network
如上,作为 f 的输入,将两个输入简单的拼接并不是首选。我们考虑线性代数的输入方法(上面的矩阵运算计算了两次)。
Experiment
如上,有一些实验,进行了检验。
Matrix-Vector Recursive Network
尽管这篇文献的表现较差,但是李老师介绍了其中思想。
如上,我们“玄学地”将输入分离,分为 a a a与 A A A。之后交叉地进行相乘。
Tree LSTM
如上,基于 Recursive ,可以构建一个 Tree LSTM 。
More Application
比如 Sentence relatedness 。