Gated RNN & Sequence Generation

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

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

在这里插入图片描述在这里插入图片描述
bidirectional function 有2个方向. 在这里插入图片描述最简单的rnn, w是一个matrix, σ()是activation function , 在这里插入图片描述

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

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

LSTM

最常见的设计就是LSTM

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

GRU

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

在这里插入图片描述图中, error rate 越往上越大, 参数数量越往上也越大.
比较不同算法的参数数量和error rate, V是 LSTM 参数多, 但是error rate 比较小

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

• Sequence Generation

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

怎么找出function呢, 学习很多的训练资料, 和分类很像, model的output是概率分布, 算cross-entropy, 让产生的distribution和正确答案越接近越好.
在这里插入图片描述
让机器画个图.

把pixel的颜色当作每个character. 像句子一样train一个图片.pixelRNN, 从多个角度去预测下一个pixel, 不是一行一行按照顺序.
在这里插入图片描述在这里插入图片描述

• Conditional Sequence Generation (Seq2Seq)

Conditional Generation

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

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

在这里插入图片描述
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 不同节点的输入.
在这里插入图片描述下面是翻译的例子.
input 每个字的sequence 丢到RNN, 产生vector h, h存储database
z是搜寻database的关键字, 看作参数vector, z会和每个h 计算匹配程度. 计算方法是使用一个模组match , output α是scaler分数, 计算z和h有多匹配.
最开始的z0, 是训练出来的, 可以想想成一个比较平均的h的关键字. 在其他资料里是最后一个h当作z0.
match 可以自己设计, 很多版本, 最简单的是相乘积, 可以用NN. 可以有参数,在train的时候一起学习.

在这里插入图片描述
对α 做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 的匹配度.

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

其他关于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.

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

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

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

• Tips for Generation

1. attention太集中.

实际的attention, 如果不幸都集中在一个画面中, 有很高的attention. 结果会比较奇怪.
希望机器在看一段影片的时候, 应该比较平均的去看. 希望attention的weight的综合和某个值越接近越好.
在这里插入图片描述

2. train和test 之间不匹配.

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

train 在这里插入图片描述test 在这里插入图片描述
在这里插入图片描述 上面是train, 下面是test在这里插入图片描述

Scheduled Sampling

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

Beam Search

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

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

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

3. 对于结果的评估

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值