李宏毅ML+DL学习记录:seq to seq

一.RNN review:

详细版本请戳↓
李宏毅ML+DL学习记录:RNN

二. sequence generation

在这里插入图片描述
        (bos = begin of sentence;eos = end of sentence)
        f代表naive RNN 或LSTM 或GRU
        假设我们想让它generate出“床前明月光”这句话(这里神经网络已经训练好了),以下是具体步骤。
        第一步:给它一个h0和x1(bos),然后这两个input经过f之后得到y1和h1两个output。这里y1是一个distribution,y1 : P(w|<BOS>) ,即在<BOS>出现的情况下,下一个字是各个word的概率,w代表所有word。在这个distribution里面sample or argmax得到了“床”。
        第二步:以h1(储存了<BOS>的信息)和x2(“床”)为input,经过f之后得到y2和h2两个output,y2: P(w|<BOS>,“床”)即在<BOS>和“床”出现的情况下,下一个字是各个word的概率。然后对y2 sample or argmax得到“前”。
        …
        直到从某个y中sample or argmax出了“<EOS>”,sequence generation 停止。

        以下是sequence generation的训练过程:
在这里插入图片描述
        从前面的叙述中我们知道,这里y1,y2,y3…是distribution,它是每个样本x输入神经网络后得到的实际输出,那么我们想要的理想输出是“春”、“眠”、…
        那么这里我们就可以使用cross entropy作为loss function来训练参数(cross entropy代表了两个分布有多相近,值越小,表示这两个分布越一样;放到本例中,cross entropy越小,y1就跟“春”的分布越接近,y2就跟“眠”的分布越接近…)

三. conditional sequence generation

        就是指在具体的某些条件下进行sequence generation,比如image caption generation、machine translation等。
在这里插入图片描述

1.image caption generation:

在这里插入图片描述
        CNN将我们输入的一张图片变成一个vector(称为input_info),然后我们把这个input_info 和<BOS>一同放入RNN中,结合h0,得到第一个输出“A”;然后把“A”和input_info放入RNN中,结合h1,得到第二个输出“woman”…
        在这里,我们把CNN处理图片,将之变成一个vector的步骤称为encoder,即编码成机器能看懂的信息。把RNN处理input_info,输出“A woman…”的过程称为decoder,即解码成人类能看懂的信息。

2.machine translation

在这里插入图片描述
        machine translation中,进行encoder的也是RNN,encoder中的RNN把我们想要翻译的中文内容转化成一个vector,然后传给decoder中的RNN,decoder中的RNN再把input_info转化成英文输出。

        进阶版:

dynamic conditional generation

machine translation:

        上面的machine translation中encoder是将所有要翻译的内容压缩成一个vector,但是当要翻译的内容很长的时候,如果全部压缩成一个vector,可能会损失很多信息,进而导致效果不好,所以我们使用dynamic conditional generation。
在这里插入图片描述
        在之前的machine translation中,decoder使用的input_info全部是一样的(即encoder压缩的那个vector),而在dynamic conditional generation中,decoder使用的input_info是不同的(即c1,c2…),那这些c1,c2…是怎么来的呢?
在这里插入图片描述
        这里,encoder没有把所有的输入全部压缩成一个vector,而是把每个输入转化成一个h.把h和z丢到match里面,得到一个α(α是一个数字,作为权重)。这里z相当于是检索所有h的一个关键字,match是衡量z和h相似性的结构,z和h越相似,经过match之后得到的α就越大。
在这里插入图片描述
        将所有的h与z0结合,得到         α 0 1 α^1_{0} , α 0 2 α^2_{0} , α 0 3 α^3_{0} , α 0 4 α^4_{0} (softmax可要可不要)
        c0 = ∑ α 0 i α^i_{0} * hi = (在本例中) 0.5 * h1 + 0.5 * h2
        c0作为decoder input,和z0一起放到decoder中,得到"machine"和z1;
        然后z1又和match结合起来,再次逐一检索h1,h2,h3,h4,得到         α 1 1 α^1_{1} , α 1 2 α^2_{1} , α 1 3 α^3_{1} , α 1 4 α^4_{1} ,
        c1 = ∑ α 1 i α^i_{1} * hi,最后z1,c1丢到decoder,得到“learning”和z2

在这里插入图片描述

image caption generation

        在dynamic conditional generation的思想下,我们把一张图片分割成若干块,然后把分割好的部分放到CNN中,得到一堆vector,这一堆vector就相当于刚刚machine translation中的h。接下来的内容就一样了,z0和match逐一检索这堆vector,得到 α 0 1 α^1_{0} , α 0 2 α^2_{0} , α 0 3 α^3_{0} , α 0 4 α^4_{0} …后面就是一样的了。
在这里插入图片描述
在这里插入图片描述

发布了43 篇原创文章 · 获赞 1 · 访问量 750

猜你喜欢

转载自blog.csdn.net/weixin_41391619/article/details/104789253
seq