ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

[特殊字符] Transformers 术语速查手册:从 attention mask 到 ZeRO 的机器学习核心概念详解

[特殊字符] Transformers 术语速查手册:从 attention mask 到 ZeRO 的机器学习核心概念详解 Transformers 术语速查手册从 attention mask 到 ZeRO 的机器学习核心概念详解【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers导读本文基于当前仓库 docs/source/ko/glossary.md韩文版词汇表与 docs/source/en/glossary.md 同源整理而成是一份面向 Transformers 用户的概念地图。它以字母顺序定义了机器学习与 Transformers 中最常出现的术语——从批处理时必不可少的attention_mask、input_ids、labels等模型输入到 MLM、自回归等预训练范式再到 DataParallel、张量并行、ZeRO 等大规模训练并行策略。读完本文你将能够准确区分编码器/解码器模型与三大语言建模任务看懂 tokenizer 返回的各类字段的含义并理解chunk_size、stride、patch_size等配置参数在底层代码中的实际作用——为查阅模型文档、调试训练脚本和阅读源码打下基础。术语表使用说明该术语表是按首字母A–Z组织的条目集合多数词条末尾附有指向仓库内其他文档或模型文档的相对链接例如 DataParallel 与 DistributedDataParallel 的对比阅读时可顺着链接深入。本文按原文档的分组结构逐条展开并在关键条目中补充源码级佐证。A注意力机制与模型家族attention mask注意力掩码attention_mask是在把多个序列组成一个 batch 时使用的可选参数。它告诉模型哪些 token 需要被关注、哪些 token 应该被忽略。以两个长度不同的句子为例 from transformers import BertTokenizer tokenizer BertTokenizer.from_pretrained(google-bert/bert-base-cased) sequence_a This is a short sequence. sequence_b This is a rather long sequence. It is at least longer than the sequence A. encoded_sequence_a tokenizer(sequence_a)[input_ids] encoded_sequence_b tokenizer(sequence_b)[input_ids]两者的编码长度不同 len(encoded_sequence_a), len(encoded_sequence_b) (8, 19)因此不能直接放入同一个张量需要把短序列填充padding到与长序列等长。向 tokenizer 传入列表并设置paddingTrue padded_sequences tokenizer([sequence_a, sequence_b], paddingTrue)第一个句子的右侧被补上了 0长度与第二个句子一致 padded_sequences[input_ids] [[101, 1188, 1110, 170, 1603, 4954, 119, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [101, 1188, 1110, 170, 1897, 1263, 4954, 119, 1135, 1110, 1120, 1655, 2039, 1190, 1103, 4954, 138, 119, 102]]attention_mask是与填充位置对应的二进制张量1表示需要被注意力机制处理的真实 token0表示填充的占位 token避免模型把注意力放到无效的 pad 位置上。它由 tokenizer 直接返回在字典的attention_mask键下 padded_sequences[attention_mask] [[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]源码印证注意力掩码的生成逻辑位于 src/transformers/tokenization_utils_base.py。当return_attention_mask未显式指定时默认取attention_mask in self.model_input_names多数模型的model_input_names为[input_ids, attention_mask]见该文件第 973 行填充时按padding_side右侧或左侧同步拼接[0] * difference同时为token_type_ids追加pad_token_type_id、为special_tokens_mask追加1。在 BERT 的注意力计算中掩码还会在 modeling_bert.py 被转换为-10000级别的极大负值加到注意力权重上softmax 后趋近于 0从而屏蔽填充位。autoencoding models自编码模型自编码模型即 encoder models详见后文编码器模型与 masked language modelingMLM条目。autoregressive models自回归模型自回归模型即 decoder models通过因果语言建模causal language modeling训练详见对应条目。B骨干网络backbone骨干网络骨干网络是指输出原始隐状态hidden state或特征feature的网络部分嵌入层与各层变换通常与一个负责基于这些特征做预测的 head 相连。例如ViTModel是不带任何任务头的骨干网络其他模型如 DPT可以把它作为骨干使用。在仓库中骨干网络的加载与拼接逻辑由 src/transformers/backbone_utils.py 提供Vision 类模型如 DPT的配置里会通过use_timm_backbone、backbone、backbone_config等字段指定骨干。C三大语言建模任务与视觉/语音基础概念causal language modeling因果语言建模一种预训练任务模型按顺序阅读文本并预测下一个词。训练时通常把整句输入模型但在模型内部用掩码遮住当前位置之后的 token使其无法偷看未来信息从而只能基于过去的内容做预测。这是 GPT 系等 decoder-only 模型的预训练方式。channel通道彩色图像由红R、绿G、蓝B三个通道组合而成灰度图像只有单通道。在 Transformers 中图像张量的通道可能位于第一个或最后一个维度[n_channels, height, width]CHW或[height, width, n_channels]HWC具体取决于图像处理器与模型的约定。connectionist temporal classificationCTC连接时序分类一种允许模型在不知道输入与输出精确对齐关系的情况下训练的算法。CTC 计算给定输入下所有可能输出序列的概率分布并选出概率最高的输出。由于语速差异等原因语音与文本很少能逐帧精确对齐因此 CTC 常被用于语音识别任务。convolution卷积神经网络中的一种层类型用一个更小的矩阵卷积核/滤波器在输入矩阵上逐元素相乘后求和生成新的矩阵该操作在输入矩阵的不同区域反复进行。基于卷积的 CNN 在计算机视觉领域应用广泛。D并行训练与 seq2seq 基础DataParallel数据并行在多 GPU 训练中使用的一种并行方式同一份模型结构被复制多份每个实例接收不同的数据切片所有实例并行计算并在每个训练步结束后同步结果。仓库内关于 DataParallel 与 DistributedDataParallel 的详细对比见 perf_train_gpu_many.md 中的 DataParallel 一节。decoder input IDs解码器输入 ID专属于编码器-解码器encoder-decoder模型的输入它是将要喂给解码器的input_ids用于翻译、摘要等序列到序列seq2seq任务具体构造方式因模型而异。对大多数编码器-解码器模型BART、T5 等decoder_input_ids会自动从labels生成因此训练时通常建议直接传入labels。各模型如何构建这些 ID 请查阅对应模型文档。decoder models解码器模型又称自回归模型autoregressive models。解码器模型通过因果语言建模预训练按顺序读取文本并预测下一个词通常在读取整句的同时用掩码遮住当前位置之后的 token。GPT 系列是典型代表。deep learning深度学习使用多层神经网络neural network的机器学习算法。E编码器模型与特征提取encoder models编码器模型又称自编码模型autoencoding models。编码器模型接收文本或图像等输入输出称为 embedding 的压缩数值表示。它们通常通过 masked language modelingMLM预训练遮住输入序列的一部分学习生成更有意义的表示。BERT 是典型代表。feature extraction特征提取从原始数据中选择并变换出更有用的特征集使机器学习算法能更有效地学习。例如把原始文本转换为词嵌入或从图像/视频中提取边缘、形状等关键特征。feed forward chunking前馈分块在 Transformer 的每个残差注意力块中self-attention 层之后通常跟两个前馈层Feed Forward Layers其中间嵌入维度往往大于模型隐层维度例如google-bert/bert-base-uncased。当输入为[batch_size, sequence_length]时存放中间前馈嵌入[batch_size, sequence_length, config.intermediate_size]所需内存可能占据总内存的很大比例。Reformer: The Efficient Transformer 论文的作者指出由于该运算在sequence_length维度上相互独立可以逐 token 计算前馈层输出嵌入[batch_size, config.hidden_size]再拼接回[batch_size, sequence_length, config.hidden_size]其中n sequence_length。这样会略微增加计算时间但能显著降低峰值内存占用。源码印证该机制由 src/transformers/pytorch_utils.py 中的apply_chunking_to_forward实现。它把输入张量沿chunk_dim维按chunk_size切成若干块对每一块独立执行forward_fn后再torch.cat拼接回来同时会校验所有输入张量在切分维度上形状一致、且该维度长度是chunk_size的整数倍。chunk_size决定并行计算的输出嵌入数量即内存与计算时间之间的权衡当chunk_size为 0 时不做前馈分块直接对整个输入调用forward_fn。以 BERT 为例其BertIntermediate与 MLP 输出层的调用方式可在 src/transformers/models/bert/modeling_bert.py 中查看。finetuned models微调模型微调Finetuning是迁移学习transfer learning的一种形式取一个预训练pretrained模型冻结其权重把输出层替换为新增的 model head然后用目标任务的数据集训练该 head。关于如何使用 Transformers 微调模型可参考仓库内 training 相关文档 与 Fine-tune a pretrained model 教程。H模型头head模型头模型头是神经网络的最后一层它接收前面各层输出的隐状态并变换到另一个维度。不同任务使用不同的模型头例如GPT2ForSequenceClassification在基础GPT2Model之上叠加用于序列分类的线性层。ViTForImageClassification用于图像分类的模型头在基础ViTModel之上对CLStoken 的最终隐状态施加线性层。Wav2Vec2ForCTC在基础Wav2Vec2Model之上应用 CTC 的语言建模头。I视觉与推理基础image patch图像块基于视觉的 Transformer 模型把图像切分成小块patch将每个 patch 线性嵌入后作为序列输入模型。patch_size或分辨率可查看模型的配置文件如 ViT 配置。inference推理推理是向训练完毕的模型输入新数据并得到预测结果的过程。使用 Transformers 进行推理的方式可参考 pipeline_tutorial。input IDs输入 IDinput_ids通常是唯一必须传给模型的参数它们是 token 的索引即组成输入序列的各 token 的数字表示。不同 tokenizer 机制不同但基本思路一致。以 WordPiece 分词器BERT 使用为例 from transformers import BertTokenizer tokenizer BertTokenizer.from_pretrained(google-bert/bert-base-cased) sequence A Titan RTX has 24GB of VRAM分词器把序列切分成词汇表中的条目 tokenized_sequence tokenizer.tokenize(sequence)token 可以是完整单词也可以是子词subword。例如 VRAM 不在词汇表中被拆成 V、RA、M为表示这些是同一个词的片段##前缀被加到 RA 和 M 前面 print(tokenized_sequence) [A, Titan, R, ##T, ##X, has, 24, ##GB, of, V, ##RA, ##M]这些 token 再被转换为模型可理解的 ID。直接调用tokenizer(sequence)即可完成底层为性能优化采用了 Tokenizers 的 Rust 实现 inputs tokenizer(sequence)tokenizer 返回一个包含模型正常运行所需的全部参数的字典token 索引存放在input_ids键下 encoded_sequence inputs[input_ids] print(encoded_sequence) [101, 138, 18696, 155, 1942, 3190, 1144, 1572, 13745, 1104, 159, 9664, 2107, 102]若关联模型使用特殊 tokentokenizer 会自动添加。把上述 ID 序列解码回来 decoded_sequence tokenizer.decode(encoded_sequence) print(decoded_sequence) [CLS] A Titan RTX has 24GB of VRAM [SEP]这是因为BertModel正是以这种形式期望输入。L标签与 LLMlabels标签labels是可选参数用于让模型直接计算损失loss它代表模型应当预测的正确值模型用标准损失函数比较预测值与标签的差异。标签的具体形状取决于模型头的类型例如序列分类模型如BertForSequenceClassification形状为(batch_size)每个值表示整个序列的期望标签。词元分类模型如BertForTokenClassification形状为(batch_size, seq_length)每个值表示单个 token 的期望标签。掩码语言模型如BertForMaskedLM形状为(batch_size, seq_length)每个值是掩码 token 的 token ID其余位置填忽略值通常为-100。seq2seq 任务如BartForConditionalGeneration、MBartForConditionalGeneration形状为(batch_size, tgt_seq_length)每个值表示输入序列对应的目标序列。训练中 BART 和 T5 会在内部自动生成合适的decoder_input_ids与解码器注意力掩码一般无需手动提供但这条不适用于直接自行利用 encoder-decoder 框架的模型。图像分类模型如ViTForImageClassification形状为(batch_size)每个值表示单张图像的期望标签。语义分割模型如SegformerForSemanticSegmentation形状为(batch_size, height, width)每个值表示单个像素的期望标签。目标检测模型如DetrForObjectDetection输入为包含class_labels与boxes两个键的字典列表每个字典对应一张图像的期望类别标签与边界框信息。自动语音识别模型如Wav2Vec2ForCTC形状为(batch_size, target_length)每个值表示单个 token 的期望标签。各模型要求的标签格式可能不同务必查阅对应模型文档确认基础模型如BertModel不接受 labels——它们只是输出特征的纯 Transformer 主干。LLM大语言模型指在超大规模数据上训练的 Transformer 语言模型如 GPT-3、BLOOM、OPT 等其可训练参数量非常庞大例如 GPT-3 约有 1750 亿个参数。在当前仓库中BLOOM、OPT、GPT 系列等模型的实现分别位于 src/transformers/models/bloom、src/transformers/models/opt、src/transformers/models/gpt2 等目录。M预训练任务与多模态masked language modelingMLM掩码语言建模一种预训练方法给模型输入随机掩码掉部分 token 的受损句子让模型预测被掩码的原始内容。BERT 是典型代表。multimodal多模态同时使用文本与图像等不同模态输入的任务。仓库中大量视觉-语言模型如 LLaVA、Qwen2-VL 等即属于此类相关实现见 src/transformers/models 下各模型目录。NNLP 三兄弟NLG自然语言生成涵盖一切生成文本的任务如翻译等。NLP自然语言处理泛指处理文本的任务。NLU自然语言理解涵盖一切理解文本含义的任务如整篇文档分类、单个单词分类等。P管线、并行与图像/位置表征pipeline管线pipeline 是 Transformers 提供的一种抽象按顺序执行数据处理、转换、归一化等步骤最后把数据送入模型并返回预测结果。推理管线与各任务管线的用法见 pipeline_tutorial具体实现位于 src/transformers/pipelines。PPpipeline parallelism流水线并行把模型按层垂直方向切分到多个 GPU 上并行处理每个 GPU 只负责模型的一层或若干层作为整条流水线的不同阶段同时每个 GPU 也只处理 batch 的一小部分。更详细的介绍见 perf_train_gpu_many.md 中 Pipeline parallelism 一节。pixel values像素值图像的数值张量表示直接作为模型输入。由图像处理器生成后其维度为[batch_size, num_channels, height, width]。pooling池化对矩阵某一维度取最大值或平均值从而缩小矩阵的运算。池化层通常位于卷积层之间用于对特征表示做下采样。position IDs位置 ID与 RNN 不同Transformer 本身不包含 token 的位置信息因此模型用position_ids让每个 token 知道自己在序列中的位置。这是一个可选参数若不传则按绝对位置嵌入自动生成取值范围在[0, config.max_position_embeddings - 1]内部分模型使用正弦位置嵌入sinusoidal或相对位置嵌入等其他类型。源码印证BERT 在 modeling_bert.py 中以nn.Buffer预注册position_ids与token_type_ids当未传入时从缓冲区按past_key_values_length : seq_length past_key_values_length切片生成并取position_ids的 batch 维度展开。preprocessing预处理把原始数据清洗成机器学习模型易于处理的形态例如文本通常要经过 tokenization。不同输入类型的预处理方法见 preprocessing 教程。pretrained model预训练模型在大量数据例如整个维基百科上预先训练好的模型。预训练目标属于自监督学习self-supervised learning例如因果语言建模读句子预测下一个词或掩码语言建模掩码部分词再预测。语音与视觉模型有各自的预训练目标Wav2Vec2 通过对比学习区分语音表征中的真样本与假样本预训练BEiT 则通过掩码图像建模掩码部分图像块并预测预训练思路与 MLM 类似。R序列模型基础RNN循环神经网络一类在层中使用循环loop结构处理文本等序列数据的神经网络模型。representation learning表示学习机器学习的子领域关注从原始数据中学习有意义的表示代表技术包括词嵌入、自编码器autoencoder、生成对抗网络GAN等。S音频、注意力与学习范式sampling rate采样率每秒钟从音频信号中抽取的样本数量单位是赫兹Hz是把语音等连续信号数字化为离散形式的结果。self-attention自注意力一种让输入的每个元素自行判断应关注其他哪些元素的机制使模型不只是孤立地看某个词而是学习词与词之间的关系并决定重点。它正是 Transformer 架构transformer 条目的核心。self-supervised learning自监督学习一种从无标签数据中让模型自行定义学习目标并训练的机器学习方法。与无监督学习和监督学习都不同训练过程本身是有监督的有明确目标但标签并非人工显式给出。典型例子是掩码语言建模MLM把句子中的部分 token 去掉后输入模型让模型预测被去掉的 token。semi-supervised learning半监督学习同时使用少量带标签数据与大量无标签数据来提高模型准确率的训练方法区别于纯监督/无监督学习。典型例子是自训练self-training先用带标签数据训练模型再用该模型对无标签数据做预测把预测置信度最高的部分样本加入带标签集合然后重新训练模型如此迭代。seq2seq序列到序列从输入生成新序列的模型例如翻译模型、摘要模型典型代表是 BART 与 T5。Sharded DDP分片 DDP基于 ZeRO 概念、在不同实现中的别名。stride步幅在卷积或池化中stride 表示卷积核在矩阵上移动的间隔stride 为 1 时每次移动一个像素为 2 时每次移动两个像素。supervised learning监督学习直接使用带正确标签的数据改进模型把数据输入训练中的模型将预测结果与正确答案比较并计算误差模型基于误差更新权重如此反复迭代优化。T张量并行、token 与迁移学习TPtensor parallelism张量并行多 GPU 训练中的并行方式把每个张量切分成多块使张量的每个分片shard分布在指定 GPU 上而非整体驻留在单个 GPU 上。各分片在不同 GPU 上并行处理处理阶段结束时同步结果。由于切分沿水平方向进行有时也称作水平并行。详见 perf_train_gpu_many.md 中 Tensor parallelism 一节。token词元句子的组成单位通常是单词但有时也包含子词不常见的词会被拆成子词或标点符号。token type IDstoken 类型 ID部分模型用它完成句子对分类或问答等任务。这类任务需要把两个不同序列合并到同一条input_ids里通常借助[CLS]分类与[SEP]分隔等特殊 token。例如 BERT 把两个序列构造成[CLS] SEQUENCE_A [SEP] SEQUENCE_B [SEP]的形式 from transformers import BertTokenizer tokenizer BertTokenizer.from_pretrained(google-bert/bert-base-cased) sequence_a HuggingFace is based in NYC sequence_b Where is HuggingFace based? encoded_dict tokenizer(sequence_a, sequence_b) decoded tokenizer.decode(encoded_dict[input_ids]) print(decoded) [CLS] HuggingFace is based in NYC [SEP] Where is HuggingFace based? [SEP]上述代码已能说明两个序列如何区分但 BERT 等模型还会额外使用 token type IDs又称 segment IDs这是一个由 0 和 1 组成的二进制掩码用于区分两个序列。tokenizer 通过token_type_ids键返回它 encoded_dict[token_type_ids] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]第一个序列context的所有 token 标记为0第二个序列question的所有 token 标记为1。部分模型如XLNetModel还会使用标记为2的额外 token。源码印证BERT 在未传入token_type_ids时会从注册缓冲区自动生成全 0 掩码并经过position_ids的torch.gather对齐见 modeling_bert.py。transfer learning迁移学习取预训练模型并在目标任务的数据集上继续训练的技术。相比从零训练它把已有模型学到的知识作为起点训练更快、所需数据更少。transformerTransformer基于自注意力机制的深度学习模型架构。U无监督学习unsupervised learning无监督学习用不含标签的数据训练模型。它利用数据分布的统计特性找出有用模式。ZZeRO 优化器Zero Redundancy OptimizerZeRO与张量并行TP类似地对张量做分片sharding的并行技术区别在于它会在前向/反向计算时把完整张量重新恢复因此无需修改模型本身。它支持多种 offloading 技术以缓解 GPU 显存不足。更详细介绍见 perf_train_gpu_many.md 中 Zero data parallelism 一节。延伸阅读本文所引术语大多在仓库英文文档中有更完整的专题说明可对照查阅perf_train_gpu_many.mdDataParallel、流水线并行、张量并行、ZeRO 等并行训练策略详解。pipeline_tutorial.mdpipeline 推理的使用方式。preprocessing.md文本/图像/音频的预处理流程。training.md预训练模型微调实战。术语涉及的模型实现如 BERT、BART、T5、GPT2、Wav2Vec2、ViT、DPT、Segformer、DETR 等均可进入 src/transformers/models 目录按名称查找对应源码。【免费下载链接】transformers Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表