WDK李宏毅机器学习第七周01_Condition Generation by RNN&Attention

Condition Generation by RNN&Attention


摘要

本章主要讲述了用RNN实现Generation的方法和原理,首先用Generation句子为例,介绍了Generation的基本原理(输入vector经过RNN处理输出句子),再将此方法类比到Generation图片上(将图片上的每个像素点看成一个word),但是图片还受各个像素点之间几何位置的影响,于是又用3D-LSTM完善了Generation图片功能。在实际应用中,我们还需要根据外部条件来Generation,最基本的做法是在Decoder中每个时间点都接入相同的外部条件的vector,这种做法当外部条件很复杂且包含很多无用信息时,是很没效率的,于是提出了Dynamic Conditional Generation,筛选出对应时间点最有效的信息接入,很大的提高了效率和准确率。然后介绍了Memory Network(常用于machine根据文章回答问题)的基本原理,介绍了简单的Memory Network(一次搜索),和复杂的Memory Network(多次搜索)。

一、Generation

1.1 Generation 句子

1.1.1 目标

一开始就向machine输入一个token,这个token代表的是BOS(begin of sentence),然后machine根据BOS输出一句话或者一首诗。

1.1.2 做法

如下图,首先将BOS输入(BOS是经过机器训练得到的一个vector),在第一个RNN的输出中得到一个character distribution,根据它我们sample出’床’字,将该输出作为下一个RNN的输入,以此类推,最后得到一篇诗。
在这里插入图片描述

1.2 Generation 图片

1.1.1做法

同样的道理,我们可以用上述方法生成图片,如下图,我们可以将该图片看作9个word的句子,该图片由blue、red、yellow、gray等这些words组成。在这里插入图片描述
如下图,接下来我们就可用Generation 句子的方法来Generation图片了。
在这里插入图片描述
显然,这个方法在Generation图片时,只考虑的各个像素点的顺序关系(如下图),没考虑到各个像素点位置不同也会到影响生成的图片。
顺序关系
所以更好的办法是需要能考虑到各个像素点的几何关系的,如下图。
在这里插入图片描述
我们可以用3D-LSTM来实现该目的(如下图),在Generation时,根据周围的像素点得到要输出的像素点,这里采用的是2X2的filter,输出更复杂的图片时,我们可以采用更大的的filter。
在这里插入图片描述

二、Conditional Generation

在实际使用中,随机的生产句子和图片是没有意义的,我们希望可以让机器根据特定条件Generation相对应的句子或者图片,如插图说明(输入图片,输出图片说明)、智能对话等。

2.1 Image Caption Generation

2.1.1 做法

将image丢入已经train好的CNN,得到vector,再将该vector丢入上面用来Generation的RNN,为了让machine对image印象深刻,在每一个RNN都输入该image vector(如下图)。
在这里插入图片描述

2.1.2 扩展(机器翻译)

同样的方法我们也可以用来做Machine translation、Chat-bot,例如将中文的 “机器学习” 翻译为英文的 “machine learning”。首先我们可以将 "机器学习"这四个字用vector表示,然后用4个RNN将其转换为一个包含了所以信息的vector(下图红色方块)。
编码器
再如下图,进行2.1.1的做法。
在这里插入图片描述
前者就是Encoder(编码器),后者就是Decoder(解码器)。

2.1.3 扩展(智能对话)

同样的方法也可以实现Chat-bot,对话时machine是需要考虑history的,所以需要用到多层Encoder,例如可以用双层Encoder将前两句对话内容考虑进来最后得到vector,然后再用把vector丢给Decoder。如果想考虑更多history时,可以再使用更多层的Encoder,这样结果更准确。
在这里插入图片描述

三、Attention:Dynamic Conditional Generation

在前面我们将Encoder接入Decoder时所有的Encoder都是保持不变的,这样当输入比较复杂且包含很多无用信息时是比较没效率的,所以我们可以用Dynamic Conditional Generation让其可以直接找出Encoder之中有效信息。

3.1 做法(机器翻译)

如下图,首先将 ”机器学习“ 每个字的vector作为输入,接下来有一个初始的vector Z0,根据Z0、h1得到a01(1代表输入值是h1,0代表时间点0)。

在这里插入图片描述
根据上述方法得到a02、a03、a04再经过softmax处理,最后得到0时间点输入值c0。
在这里插入图片描述
将c0放入Decoder第一个接入点。
在这里插入图片描述
依次类推,最后得到c1、c2、c3,分别放入Decoder对应接入点,实现将有效信息放入对应Decoder,提高效率与准确率。

3.2 做法(Image Caption Generation)

对于image caption,我们做Dynamic Conditional Generation时只需要对image进行特别的处理就可以用和上面一模一样的方法,即找一组filter对图片进行卷积,得到一组vector,再进行上述操作。

四、Memory Network

Memory network最早被应用在reading comprehension,也就是给machine看一个document,然后问它问题,让machine回答。

4.1 做法

如下图,输入问题Query,将其转换为vector(q),再用q分别与x1,x2…xN(文章中每个句子的vector)计算匹配度得到a1,a2…aN,再通过如下公式得到最后的vector,最后将Query和得到的vector一起丢入DNN,得到答案。
在这里插入图片描述

4.2 Memory Network’s complex version

将Document中的句子分为两组不同的vector(hi和xi),xi用来和q做match得到ai,然后再用ai和hi相乘求和得到vector,再将该vector和q相加重新训练,经过多次训练后再输出到DNN中得到答案。该model的优点是可以让machine多次在文章中搜索答案,且每次搜索答案时,都带着前面搜素过的记忆。
在这里插入图片描述

方法

  1. 智能对话时,用的是多层编码器来处理历史对话记录,将该信息用一个vector表示,再放入Decoder得到machine的回答。
  2. 机器翻译时,用的是Dynamic Conditional Generation方法处理输入数据,得到每一时刻的vector,将其分别放入对应时刻的Decoder,得到翻译结果。
  3. 在Image Caption Generation时,用的是一组filter处理image,得到一组vector0,再用Dynamic Conditional Generation处理该组vector0得到vector1,将其分别放入对应时刻的Decoder,得到结果。

结论

  1. Generation图片时用3D-LSTM可以考虑到各个像素点的几何位置,结果更准确。
  2. 在做机器翻译、Image Caption Generation等时当外部条件输入很复杂如翻译大段文字时,Dynamic Conditional Generation可以有效的提高效率。
  3. machine根据文章回答问题时用复杂的Memory Network可以实现让machine多次反复阅读文章找答案的功能,比简单的Memory Network一次阅读直接输出答案准确率更高。

展望

  1. 在1.2中Generation图片时,本文例子是采用最简单的2*2的filter,其实我们可以根据需求,选择合适的filter,更大的filter将考虑更多的像素点,计算时间会需要更久但准确率更高。
  2. 在2.1.3中智能对话时,可以使用更多层的Encoder,让machine考虑更多的历史对话记录,从而得到更准确的答案。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值