我已经有两年 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
- Conditional Generation
- Attention
- Speech Recognition
- Image Caption Generation
- Memory Network
- Neural Turing Machine
- Tips for Generation
- Good & Bad Attention
- Mismatch between Train and Test
- Modifying Training Process?
- Scheduled Sampling
- Beam Search
- Object level v.s. Component level
- Pointer Network
- Applications - Summarization
- Applications - Machine Translation
- Recursive Network
- Application: Sentiment Analysis
- Recursive Model
- Recursive Neural Tensor Network
- Experiment
- Matrix-Vector Recursive Network
- Tree LSTM
- More Application
小细节
Generation
如上,我们如何让机器产生一段句子呢?这个我们已经清楚了。使用 RNN 把 word 或者说 character 一个一个产生出来。
此外,如上,还可以把图形拆分成像素,使用 RNN 生成。
但是,如上,我们应该让就近的像素对生成的像素进行影响,而非按行来。可以进行 filter + 3维记忆空间 的方法。
Conditional Generation
但是,使用RNN存在一些问题,如上图,我们希望根据不同情况给出信息。
如上,一般来讲,RNN产生的话是随机的。我们可以对图片进行处理,比如用CNN获得一个向量,然后输入RNN中。可以在每个时间点都把图片输入,防止机器“忘记”自己在说什么。
对于机器翻译,同理。如上,先在Encoder
中,对句子的每个成分按照时间点挨个输入。这样最后得到的向量,就包含了句子的全部信息。将这个输入到Decoder
,就可以得到翻译。
这就是 Seq2seq
。
此外,在聊天机器人中,我们需要让之前的信息也输入到模型中,防止说重复的内容。
Attention
如上,我们将
与 各个
进行 match 函数计算,得到各个
对应的
。这个 match 函数中的参数也是训练出来。
之后,经过一个 softmax ,然后求和得到
,此时,
就是Decoder input 。此外,可以得到心得
。
之后继续进行该内容。
Speech Recognition
如上,颜色深度代表 match score 。
Image Caption Generation
如上,可以把每个区域的向量与$z_0$进行运算
得到,之后,进行 weighted sum,再交给 Decoder ,以此得到输出。
如上,在产生划线词汇
是,其Attention
也是集中在图片的相应位置的。
此外,还有些失败的地方,我们可以通过 Attention
进行分析,为什么出错了。
此外,机器还可以看视频说话。如上。
“我们的作业二就是做这个。”很有趣。
Memory Network
如上,也可以进行利用注意力做问答。
此外,Memory Network 也有更复杂的版本。
如上,有两组vector分别为
与
来表示Document,
与
做match得到
,但是Extracted Information时,使用
与
进行结合。
而得到的新向量,可以与 q 进行运算,表示机器在反复“思考”。这个过程叫做 Hopping 。
Neural Turing Machine
Neural Turing Machine 不仅可以读记忆,还可以改变记忆。
如上,实际上,k与memory产生四个新值其实有5个步骤。如下。
李老师:“我相信你一定没有兴趣知道他,所以我们把他跳过。”
如上,
与
用于修改旧的 memory 。
总的计算框架如上。
Tips for Generation
Good & Bad Attention
如上,一个Bad Attention就是,可能
过于不均衡,导致机器只注意到了视频的主体。
我们可以用一个正则化的方法,让各个输入的部分都有近似的 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
(假设有这样一个评估函数
,评估句子语法),可行吗?
不可行,因为很可能无法做微分。
可以使用强化学习的方法。
把 generation 这件事,当成 reinforcement learning 来做。
在结束后,通过 函数判断奖励值。
如上,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
尽管这篇文献的表现较差,但是李老师介绍了其中思想。
如上,我们“玄学地”将输入分离,分为
与
。之后交叉地进行相乘。
Tree LSTM
如上,基于 Recursive ,可以构建一个 Tree LSTM 。
More Application
比如 Sentence relatedness 。