Transformer T5 模型慢慢读

本文介绍了TransformerT5模型,强调其基于prompt的思想,通过预训练和微调适应多种下游任务。模型特点包括移除LayerNorm bias、独特的position embedding策略和标准化训练流程。实验结果显示预训练对推理任务显著提升性能,且不同架构和参数调整对性能有影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

T5(Text-to-Text Transfer Transformer)是一种基于Transformer架构的预训练模型,其核心特点是将所有NLP任务统一转化为文本生成问题。以下是有关T5模型架构的一些重要细节: ### T5 Model Architecture Overview T5模型采用了标准的编码器-解码器结构,其中编码器负责处理输入序列并将其转换为隐藏表示,而解码器则利用这些隐藏表示来生成目标序列[^4]。具体来说,T5模型的主要特点如下: 1. **Encoder-Decoder Structure**: 编码器由多个自注意力层组成,用于提取输入序列的特征;解码器同样包含多层自注意力机制,并额外引入交叉注意力模块以捕捉输入与输出之间的关联。 2. **Pretraining Objective**: T5采用一种称为“denoising autoencoding”的方法进行预训练,即随机屏蔽掉输入的一部分单词,让模型预测被掩盖的内容。这种方法使得T5能够适应广泛的下游任务[^5]。 3. **Scalability and Flexibility**: T5设计灵活,支持不同规模的参数量版本(从小型到超大型),从而满足多样化的应用场景需求。例如,“T5-base”具有约2亿个参数,而“T5-large”则扩展至7.6亿个参数[^6]。 对于具体的架构图展示,虽然无法直接在此处绘制图形化内容,但可以通过以下方式获取相关信息: - 访问官方论文《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》[^7]。 - 查阅Hugging Face Transformers文档页面上的可视化资料[^8]。 下面是一个简单的Python脚本示例,演示如何加载T5模型及其配置信息: ```python from transformers import T5Tokenizer, T5ForConditionalGeneration tokenizer = T5Tokenizer.from_pretrained("t5-small") model = T5ForConditionalGeneration.from_pretrained("t5-small") input_text = "translate English to French: The house is wonderful." inputs = tokenizer(input_text, return_tensors="pt").input_ids outputs = model.generate(inputs) print(tokenizer.decode(outputs[0], skip_special_tokens=True)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值