Transformer T5 模型慢慢读

Transformer T5 模型慢慢读(我也省略了很多细节,只是大体的阐述,具体,大家可以参看论文.....)

代码地址:https://github.com/google-research/text-to-text-transfer-transformer

微调测试:T5 的尝试_冬炫的博客-CSDN博客 

其他参考地址:

先从他的论文走起,但是很多页...

论文地址:https://arxiv.org/abs/1910.10683 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16

一、模型粗略认识

T5 的由来,就是prompt 思想演变的,将所有的下游任务转换成一种任务 让所有任务共用一种解题方式(极大减轻了参数量,如果2个任务,每个任务10万参数,那么此种生成式方法仍然10万,而传统的针对下游的模型需要20万参数),生成式去生成答案。至于损失函数还要看后面的设计。(在下面的图中显示的是啥都一样的意思) 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16

二、模型一些基本设置

数据集是C4 一个网络爬虫的大数据集,整体模型是基于Transformer 的生成模型。

1.模型框架:

其与经典的 Transformer 模型的区别有3点,

①移除 Layer Norm bias, ② 将 layer normalization 放在残差路径外面, ③使用不同的 position embedding 策略
目标损失形式: maximum likelihood objective (using “teacher forcing”)

2.输入形式:

①可以分别对下游进行微调,并不需要所有下游任务一起微调。②利用prefix 的前缀提示词来表示不同的学习任务。

3.模型

选用经典的Transformer 框架,既有编码器也有解码器。并且发现此种预训练后的模型对分类和生成任务都有好的性能。

基准模型与Bert BASE 相似(12个层,12个头 , 隐层维度768,220百万参数...,dropout  0.1)

4. 训练策略

所有的任务都变成 “text -to - text” 形式的任务。所以可以统一使用标准的最大似然目标函数来训练(teacher forcing自回归, cross-entropy loss ),优化器AdaFactor,训练阶段在搜索的C4数据集上,epoch 524,288。batch size 128, 最大序列长度512

测试阶段,使用greedy decoding策略生成文本,“inverse square root” learning rate schedule 1cdae74bc8e447e89369f62afe4e4043.png

微调阶段,是在所有数据集上微调262,144 次,学习率0.001,

生成方式,仿照Bert 的掩码预测形式,设计了哨兵标记,将需要屏蔽预测的位置利用特殊标记进行注明。dropout 率15%

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16

上面的意思是,连续的词只用一个哨兵表示,最终的输出形式是“哨兵+所预测的单词或短语+....+结尾哨兵词。

5. 基准性能

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16

Baseline average 还是很强的,上面是在下游任务的基准模型的结果。

下游任务为:GLUE,CNNDM,SQuAD,SGLUE,EnDe,EnFr,EnRo。

其中前两行,基准模型的均值与方差。第三行为,不经过预训练,直接用相同的框架直接用于下游任务的性能。可以发现,在翻译任务中应该没有太大差异。但是在问答等推理任务中,预训练的优势显现!但是它与单纯的Encoder stack 的预训练Bert 的性能差不多。这里唯一的区别是,用的步数是Bert的四分之一。

6. 各种架构性能比较

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16

这里显示了预测序列的变化。这里显示的self attention 。我这里理解为自己生成自己,也就是相同的语句预测相同的语句。所以说第一个图片基本不能使用,你不能直接泄露要预测的所有文本吧。之前的常见的生成文本的形式如中间图:每步只能看到前面单词,而不能看到当前词之后的未来词语。第三个图片是prefix 的形式。它首先要符合想要预测的词汇要满足Causal 因果关系,不能看到未来预测的词汇。但是给你开了个头,告诉你前几个词的词汇,让你接着预测,这个图显示的就是告诉你前三个timestamp 的预测词,也就是3个单词,然后接着预测。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16

当然Encoder 可以采用Fully visible 。 第一张图为常见的生成模型,比如看图说话任务。给一堆图片目标对象特征,去生成一堆话。第二种是语言模型,可以认为是自己生成曲子的任务,随意创作。第三种图片是prefix 形式,给几个词开头,继续生成后面的词语。

后面说了一些,L-L 层Encoder-Decoder模型的计算量与一个L层的LM模型是近似的,参数量是2L 大小的LM模型。(所以很难去对比比较,,,,,,,)

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16

从上面的表格可以发现,利用Denoising 策略(本文用的哨兵,代替Mask 的词 )整体上要好于LM 策略。在Denosing 策略中, 共享编码器和解码器的参数,与不共享的效果差不多,但是如果减半了编码器和解码器,效果降低。

下面展示了一堆目标函数所使用输入和输出形式,在C4的数据集上

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16

1)目标形式

下面展示了下游任务中,Bert-style 格式仍然非常强劲。相比之下,可能Prefix 和Deshuffling显得逊色。 Deshuffling 效果不佳,他是将句子所有单词颠倒顺序,然后生成正常语序的句子。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16

2)Mask 率

下面展示了Mask 率。总体来说,还是15% 这个超参数挺抗打 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16

3)掩码的连续长度 

下面展示了掩码的连续长度的最大值。这里发现对对问答任务敏感。默认基准模型是独立同分布,只针对每个单词进行mask 策略。而下面讨论span 的大小,可以一下子屏蔽一个连续词而不是判断单个词。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16

 当然,作者这次将上面的实验都进行了总结(见下图),到底干了哪些事情,分别是什么

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16

4)数据集种类

下面作者开始讨论预训练的数据集对模型精度的 影响(星号指的是默认的基准模型采取的数据集C4,经过过滤的)

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16

作者发现预训练模型的数据集领域如果很契合下游任务的领域,那么通常比多样化的数据集(各种领域)的效果能提升的明显!

5)训练数据集规模

训练数据集规模大点好一些,如果重复多次影响模型。大数据集对大模型的性能提升有一定影响。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16

我感觉这里Training loss 在小样本多重复次数的实验比基准情况的小,说明了模型已经读懂记忆小样本的信息。 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16

关于训练如何冻结基础框架神经网络层,下面列出了各自性能。通常对于小样本数据集,最好不要对整个预训练模型的参数全部微调,通常只微调个别层。 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16

6)尺寸Scaling 策略超参数

如果按照4× 比起原先的基准模型,可以有以下可相比较的实验设置

① 训练的epoch 是原来的4 倍

② 训练的epoch 是原来的2倍,但是模型的参数是原来的2 倍

③ 训练的模型是原来的4 倍

④ 训练的batch 大小是原来的4倍

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16

增大模型的尺寸大小和训练epoch 的大小确实能提高模型的下游任务的精度。

Putting It All Together

将上面又总结了一遍!(关于基准模型的超参数调整策略)

Model sizes
  • Small<Base<Large<3B<11B

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16


text-to-text-transfer-transformer/t5-trivia.ipynb at main · google-research/text-to-text-transfer-transformer · GitHub

T5运行实例

题外话:

其实我是为了运行VL-T5 模型 跨模态T5模型(GitHub - j-min/VL-T5: PyTorch code for "Unifying Vision-and-Language Tasks via Text Generation" (ICML 2021)

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yas54Kr,size_20,color_FFFFFF,t_70,g_se,x_16

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值