Gated RNN & Sequence Generation

文章目录

  • • RNN with Gated Mechanism 门控制机制的RNN
    • LSTM
    • GRU
  • • Sequence Generation
  • • Conditional Sequence Generation (Seq2Seq)
    • Conditional Generation
    • Dynamic Conditional Generation (Seq2Seq Attention)
    • Image Caption Generation
  • • Tips for Generation
    • 1. attention太集中.
    • 2. train和test 之间不匹配.
      • Scheduled Sampling
      • Beam Search
    • 3. 对于结果的评估

• RNN with Gated Mechanism 门控制机制的RNN

有记忆的function, 输入
h 为初始的一个vector, 反复使用一个function, 所以h和h’的dimension 是一样的, 作为输入输出.
即使x的seqence可能很长, 但是function的参数会是固定的.

Gated RNN & Sequence Generation_第1张图片 Gated RNN & Sequence Generation_第2张图片
bidirectional function 有2个方向. Gated RNN & Sequence Generation_第3张图片 最简单的rnn, w是一个matrix, σ()是activation function , Gated RNN & Sequence Generation_第4张图片

激活函数是为了增加整个网络的非线性能力
如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机(Perceptron)。
如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中
Sigmoid
tanh
Relu
Relu6
Leaky Rely
参数化Relu
随机化Relu
ELU

RNN 比较常用tanh作为激活函数

LSTM

最常见的设计就是LSTM

Gated RNN & Sequence Generation_第5张图片 4个输入, 1个输出, 3个gate Gated RNN & Sequence Generation_第6张图片 由3个门控制数据是否存储, gate经过激活函数输出在0和1之间
ct 和 ct-1 非常像, ht 和 ht-1 不像, 长时间记录的资讯会藏在c里面Gated RNN & Sequence Generation_第7张图片 h和x连在一起组成一个vector, 和w相乘, w不断学习出来的 Gated RNN & Sequence Generation_第8张图片
Gated RNN & Sequence Generation_第9张图片 除了把下x和h串起来, 可以把c也串起来, 表现会更好. 这招叫peephole 偷窥孔, 但是, w这个matrix会很长. 参数变多, 通常做法是让matrix一部分是diagonal的.
⨀ 是element-wise的对位相乘, input, forget, output gate结合计算Gated RNN & Sequence Generation_第10张图片 反复使用Gated RNN & Sequence Generation_第11张图片

GRU

另一种常用的function GRU, 很像LSTM,
GRU的h 类似lstm中的c
Gated RNN & Sequence Generation_第12张图片
h和 x 接起来 , 分别乘matrix, 便是reset gate 和 update gate
粗箭头表示weight matrix即做linear transform, r ht-1 * reset gate结果 和xt结合 再做 transform然后生成h’
黄色箭头是一个transform.

Gated RNN & Sequence Generation_第13张图片图中, error rate 越往上越大, 参数数量越往上也越大.
比较不同算法的参数数量和error rate, V是 LSTM 参数多, 但是error rate 比较小

概括来说,LSTM和CRU都是通过各种门函数来将重要特征保留下来,这样就保证了在long-term传播的时候也不会丢失。此外GRU相对于LSTM少了一个门函数,因此在参数的数量上也是要少于LSTM的,所以整体上GRU的训练速度要快于LSTM的。不过对于两个网络的好坏还是得看具体的应用场景。
Gated RNN & Sequence Generation_第14张图片

• Sequence Generation

句子是由字/字母或者词汇组成的
让机器用RNN写一个句子, 可以用字或者词为单位.
x是前一个时间点产生的token, 表示成vector, 如10万个word, 表示成10w个一维的vector.
y是token的distribution, machine会更具几率进行sample.
Gated RNN & Sequence Generation_第15张图片
开始给机器一个特别的token begine of sentence. 遇到 EOS end of sentence. 结束停下来.
y1,y2, y3是考虑从开始到当前这个输出的产生某个token的几率.
Gated RNN & Sequence Generation_第16张图片

怎么找出function呢, 学习很多的训练资料, 和分类很像, model的output是概率分布, 算cross-entropy, 让产生的distribution和正确答案越接近越好.
Gated RNN & Sequence Generation_第17张图片
让机器画个图.

把pixel的颜色当作每个character. 像句子一样train一个图片. pixelRNN, 从多个角度去预测下一个pixel, 不是一行一行按照顺序.
Gated RNN & Sequence Generation_第18张图片 Gated RNN & Sequence Generation_第19张图片

• Conditional Sequence Generation (Seq2Seq)

Conditional Generation

之前的sequence generation , 只能产生一些随机诗句.
但是也可以让机器看着某一个情境,产生适合的output. 叫做条件序列生成.
比如,
机器看到一段video, 会说, 一个年轻女孩在跳舞.
对机器说你好, 机器作出相应问候回答.
Gated RNN & Sequence Generation_第20张图片image的Conditional Generation, 输入一张图片产生一句话.
把图片通过CNN处理成为一个vector, 把这个vector作为RNN的每个输入加上前一个function的输出.

Gated RNN & Sequence Generation_第21张图片同样的技术可以做翻译或者chatbox的例子 ,
一个RNN, 吃翻译句子, 取最后一个vector红色可以取y, h, c ,h+c 都可以.
把红色vector 丢到generator里面, 每个单元都丢. 红色vector 就是machine的vecotr.
前面是把sequence 变成一个vector (Encoder), 后面是把一个vector 变成sequence(Decoder).

Gated RNN & Sequence Generation_第22张图片
chatbox, input 很多个句子, 需要记录历史聊天几率.
先把每个句子变不同vector. 再把这些vector 用Rnn 生成一个vector给decoder.

Dynamic Conditional Generation (Seq2Seq Attention)

input 很长很长, 能否用一个vector 表示这些咨询? 很难, 会丢掉一些咨询.
前面说的Conditional generation 每次输入decoder的vector一样. Dynamic 方法 decoder 每个时间点 吃的资讯是不一样的.
这里希望decoder 自己决定从encoder 截取需要的咨询.
encoder每个时间点输出h, 把h想象成database, 需要decoder 去 database里面做搜寻. 从h1,h2 里面抽取c1, 从h3h4里面生成c2. c作为decoder 不同节点的输入.
Gated RNN & Sequence Generation_第23张图片下面是翻译的例子.
input 每个字的sequence 丢到RNN, 产生vector h, h存储database
z是搜寻database的关键字, 看作参数vector, z会和每个h 计算匹配程度. 计算方法是使用一个模组match , output α是scaler分数, 计算z和h有多匹配.
最开始的z0, 是训练出来的, 可以想想成一个比较平均的h的关键字. 在其他资料里是最后一个h当作z0.
match 可以自己设计, 很多版本, 最简单的是相乘积, 可以用NN. 可以有参数,在train的时候一起学习.

Gated RNN & Sequence Generation_第24张图片
对α 做softmax, 使输出和为1. 可有可无, 可能无帮助. 计算c0
match的分数又叫attention, ,c0和z0作为输入, output z1 和 一个word , z1 做下一次attention
attention 专注在某个地方.不是读整篇.
z1 继续match, 计算出c1. c1和上一个word作为新一轮decorder输入

每个时间点产生的h都要存下来, h是个很大的矩阵.
c–> context vector
h --> encoder的 hidden state,
z --> decoder 的hidden state,
match 就是 计算这两个hidden state 的匹配度.

Gated RNN & Sequence Generation_第25张图片 Gated RNN & Sequence Generation_第26张图片
Gated RNN & Sequence Generation_第27张图片 Gated RNN & Sequence Generation_第28张图片

其他关于seq2seq2 的介绍

https://zhuanlan.zhihu.com/p/40920384

Image Caption Generation

把一张图片 变成一把vector , 图片切成小块, 每个小块丢到CNN里面, 最后变成很多vector.
用key z0 和一把vector 计算attension分数, 再计算vector 和 分数计算c context vector 也就是weighted sum.
把weighted sum 放到decoder里面 产生第二个key z1 和word1.后面继续计算attension.

Gated RNN & Sequence Generation_第29张图片 Gated RNN & Sequence Generation_第30张图片
Gated RNN & Sequence Generation_第31张图片 Gated RNN & Sequence Generation_第32张图片

machine 关注在哪里, 白色亮点表示attenstion 分数大.

video的caption generation, 看video , 产生一段句子.
Gated RNN & Sequence Generation_第33张图片可以看到图片下面的长条是某个单词的比例, 颜色对应最终的单词. 第一行第三个图, 蓝色最高,代表road.
影像上, input 是每一张图片丢到CNN比如VGG里面, 最后进入到flatten之前, 有一堆filter, 即一堆vector, 每个filter output 就是一个词.

• Tips for Generation

1. attention太集中.

实际的attention, 如果不幸都集中在一个画面中, 有很高的attention. 结果会比较奇怪.
希望机器在看一段影片的时候, 应该比较平均的去看. 希望attention的weight的综合和某个值越接近越好.
Gated RNN & Sequence Generation_第34张图片

2. train和test 之间不匹配.

training的时候, input 是有序列的. 最后计算实际和输出的cross entropy, 越小越好. 就是地一个output错了, 后面的input也是正确的.
testing的时候 会sample , 如果第一个结果是错的, 后面的input 都错. 叫做 exposure bias 曝光补偿. 一些状况在traning的时候是没有探测过的.

train Gated RNN & Sequence Generation_第35张图片 test Gated RNN & Sequence Generation_第36张图片
Gated RNN & Sequence Generation_第37张图片 上面是train, 下面是test Gated RNN & Sequence Generation_第38张图片

Scheduled Sampling

给机器看自己生成的东西, 会很难训练, 给机器看正确的答案, 会变得train test 不一致, 这里取折中, 用一个coin来决定. input什么.
这个coin的几率可以调整. 调整机率. 先去learn 比较好learn的case, from reference, 然后训练到一段时间, 可以把不好learn的case 加进来 from model, 这样会比较稳定
Gated RNN & Sequence Generation_第39张图片

Beam Search

假设每次机器output的时候是一个机率, 每次走取几率最大的那个. 每次都选最大几率的路径可能没有别的路径最终几率大.
Beam Search 是 每次存n条最好的路 存下来, 每个步骤之后都筛选n条路, 选分数最好的存下来. n就是beam size.
只有在testing的时候做beam search. 每次前n个分数, 乘下一个步骤的scale, 再筛选.

Gated RNN & Sequence Generation_第40张图片 Gated RNN & Sequence Generation_第41张图片
Gated RNN & Sequence Generation_第42张图片 Gated RNN & Sequence Generation_第43张图片

如果每次把几率分布都投到下个input, 每次都区最高的, 有的分支会错乱.所以需要beam size.

3. 对于结果的评估

最大限度地减少对组件级定义的错误不等同于提高生成的对象.
结果的loss 一定要很低. 可能要train很久, loss的变化都很小. 保证生成的句子能符合人的感官.
要对整个句子进行评估, 而不是组建级别的cross-entropy, 比较R(y, yhead) 如果R不能微分, 就用Reinforcement learning硬train.
Gated RNN & Sequence Generation_第44张图片

你可能感兴趣的:(机器学习)