ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Transformers 术语表完全指南:机器学习与模型架构核心概念逐条精讲

Transformers 术语表完全指南:机器学习与模型架构核心概念逐条精讲 Transformers 术语表完全指南机器学习与模型架构核心概念逐条精讲【免费下载链接】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本篇技术文章以仓库文档 glossary.md术语表另见英文原版 docs/source/en/glossary.md为主体系统讲解 Transformers 库中反复出现的核心术语注意力掩码、input_ids、labels、编码器/解码器模型结构、预训练任务类型、推理流水线以及多 GPU 并行训练技术DP/TP/PipelineParallel/ZeRO。读完本文你不仅能读懂官方文档中的全部专有名词还能对照仓库源码如 src/transformers/pytorch_utils.py确认每个概念的实际实现位置从而在调试模型输入、构建训练数据和规划多卡训练时具备准确的术语基础。一、术语表定位与使用方法该术语表用于界定“通用机器学习术语”与“Transformers 专有术语”的边界官方文档中大量缩写MLM、CTC、DP、TP、ZeRO 等均在此定义。本文按照原文档的字母序组织内容但将相近概念重新聚合成六个主题板块并在每个板块中补充仓库源码层面的实现佐证。原文档中的内部跳转链接如#causal-language-modeling、model_doc/dpt、perf_train_gpu_many在本仓库中对应如下位置可点击继续深入原文档引用仓库内实际位置DataParallel / TP / ZeRO / PipelineParallel 细节perf_train_gpu_many.md微调教程training.md推理 Pipeline 教程pipeline_tutorial.mdDPT 模型ViT 作为 backbone 的例子model_doc/dpt.md二、数据预处理与输入表示这一板块覆盖术语表中与“模型输入如何被表示”相关的条目是日常调用 tokenizer、image processor 时最常被引用的概念。2.1 注意力掩码Attention Mask注意力掩码是一个可选输入参数用于序列批量batch训练/推理场景。它的作用是告诉模型哪些 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 sequence A. encoded_sequence_a tokenizer(sequence_a)[input_ids] encoded_sequence_b tokenizer(sequence_b)[input_ids]编码后的长度分别为(8, 19)无法直接放进同一个张量因此需要把较短的序列右侧填充pad到与最长序列等长。将列表传入 tokenizer 并指定paddingTrue即可完成填充 padded_sequences tokenizer([sequence_a, sequence_b], paddingTrue) 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]]可以看到第一条序列右侧被补了 0。注意力掩码就是一个二值张量对BertTokenizer而言1表示该位置是真实 token 应被关注0表示填充位应被忽略。掩码位于 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]]该张量可直接转入 PyTorch/TensorFlow 张量后作为模型输入。源码佐证tokenizer 输出的二值掩码进入模型后会被统一工具类 AttentionMaskConverter 扩展为 4 维因果掩码或双向掩码如_prepare_4d_causal_attention_mask、_prepare_4d_attention_mask填充位在注意力分数矩阵上被置为负无穷从而实现“模型不关注 padding”的语义。2.2 输入标识符Input IDsinput_ids是绝大多数情况下必须传给模型的唯一必需参数它是把句子中的每个词/token 映射为数字的整数列表是模型真正消费的输入形式。以 WordPiece 分词的 BERT tokenizer 为例 sequence A Titan RTX has 24GB of VRAM tokenized_sequence tokenizer.tokenize(sequence) print(tokenized_sequence) [A, Titan, R, ##T, ##X, has, 24, ##GB, of, V, ##RA, ##M]token 是“词或子词”。词 “VRAM” 不在词表中因此被切分为V、##RA、##M三个子词##前缀表示“这是同一个词的后续子词片段”。随后调用 tokenizer 直接把整句编码为模型可理解的数字 ID此过程底层使用 Rust 实现的 Tokenizers 库以获得更高性能 inputs tokenizer(sequence) encoded_sequence inputs[input_ids] print(encoded_sequence) [101, 138, 18696, 155, 1942, 3190, 1144, 1572, 13745, 1104, 159, 9664, 2107, 102]注意 tokenizer 会自动追加“特殊 token”如[CLS]101、[SEP]102这是模型在需要时使用的特殊 ID。反向解码则还原为人类可读形式 decoded_sequence tokenizer.decode(encoded_sequence) print(decoded_sequence) [CLS] A Titan RTX has 24GB of VRAM [SEP]这正是BertModel期望的输入形式。不同 tokenizer 的细节不同但“文本 → token → 整数 ID”的机制一致。2.3 词元类型 IDToken Type IDs部分模型的任务是对句对做分类或问答需要把两条序列合并进一个input_ids通常借助特殊 token[CLS]、[SEP]拼接为[CLS] SEQUENCE_A [SEP] SEQUENCE_B [SEP]使用 tokenizer 的“双参数”调用方式注意是传两个参数而不是传列表即可自动构建 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])解码结果为[CLS] HuggingFace is based in NYC [SEP] Where is HuggingFace based? [SEP]这对某些模型已经足够判断序列边界但 BERT 等模型还需要词元类型 ID又称 segment IDs——一个二值掩码用来区分两条序列。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]第一条序列“上下文”的所有 token 用0表示第二条序列“问题”的所有 token 用1表示部分模型如XLNetModel还会用2表示第三种角色。2.4 位置 IDPosition IDsRNN 通过循环结构天然感知 token 顺序而 Transformer 本身不具备位置感知能力因此使用position_ids告知模型每个 token 在序列中的位置。position_ids是可选参数不传时模型会自动创建一组绝对位置嵌入取值范围为[0, config.max_position_embeddings - 1]。也有模型使用其他形式的位置表示例如正弦/余弦位置编码或相对位置编码。2.5 Token词元token 是句子的组成单元通常是一个词也可能是子词不常见词常被切分为子词甚至可以是标点符号。2.6 视觉侧输入通道、图像补丁与像素值通道Channel彩色图像由红、绿、蓝三通道RGB数值混合而成灰度图只有一个通道。在 Transformers 中色彩通道可以是图像矩阵的第一维或最后一维即形状可为[n_channels, height, width]或[height, width, n_channels]。图像补丁Image Patch视觉 TransformerViT 类模型会把图像切分为小块称为“补丁”patch每个补丁被数字化表示后当作一个“token”处理。补丁大小patch_size可在模型配置中查到——例如 src/transformers/models/vit/configuration_vit.py 中patch_size的默认值为16。像素值Pixel Values传给视觉模型的图像数字表示矩阵形状为[batch_size, num_channels, height, width]由 image processor 生成。2.7 预处理与特征抽取预处理Preprocessing把原始数据整理为机器学习模型易于消费格式的准备工作例如文本通常要经过分词其他输入类型图像、音频的预处理方式参见官方预处理教程英文文档目录docs/source/en/中相应章节阿语目录可见 docs/source/ar/preprocessing.md。特征抽取Feature Extraction从原始数据中筛选、转换出一组对机器学习算法更有用的特征的过程。例如把原始文本转成子词 ID或从图像/视频数据中提取边缘、形状等显著特征。三、模型架构类型3.1 编码器模型Encoder Models又称自编码模型autoencoding models。编码器模型接收输入文本、图像等并把它转换为一种紧凑的数值表示即“编码”embedding/encoding。编码器模型通常以**掩码语言建模MLM**等自监督方式预训练随机遮蔽输入序列的一部分迫使模型生成更具语义信息量的表示。3.2 解码器模型Decoder Models又称自回归模型Autoregressive Models。解码器模型的预训练任务即因果语言建模Causal Language Modeling模型按顺序阅读文本预测下一个词。实现方式通常是“整句读入但用掩码遮住某时间步之后的 token”使其无法看到未来信息。3.3 序列到序列Seq2Seq与解码器输入 IDseq2seq指根据输入生成一条新序列的模型典型如翻译模型、摘要模型BART、T5。解码器输入 IDDecoder Input IDs是编码器-解码器模型专用的输入包含将喂给解码器的 ID。它用于序列到序列任务翻译、摘要且构造方式通常因模型而异。多数编码器-解码器模型BART、T5会从labels自行构造decoder_input_ids因此训练时推荐直接传labels而基于 Encoder-Decoder 框架EncoderDecoderModel的模型则不一定。具体请以各模型文档为准。3.4 Transformer、自注意力与卷积组件Transformer基于自注意力机制的深度学习模型架构。自注意力Self-Attention让输入中的每个元素能够判断“应该关注同一输入中的哪些其他元素”的机制是 Transformer 的核心。循环神经网络RNN通过针对某一层的循环处理来建模序列的模型类型对比第 2.4 节RNN 内建位置信息Transformer 需要position_ids。卷积Convolution神经网络中的一种层——输入矩阵与一个更小的矩阵核/滤波器逐元素相乘再求和构成一次卷积运算该运算在整个输入矩阵上滑动重复每次作用在输入的不同区域。卷积神经网络CNN广泛用于计算机视觉。池化Pooling把矩阵压缩为更小矩阵的操作通常取最大值或均值常出现在卷积层之间以降低特征表示的分辨率。步长Stride卷积或池化运算中核在矩阵上每次移动的距离。stride1 表示每次移动一个像素。骨干网络Backbone负责产出隐状态/初始特征embedding的神经网络主干即“特征与层”。它通常连接一个 head 来执行预测。例如ViTModel是一个不带任何任务头、纯骨干形态的模型也可以直接作为其他模型的 backbone如 DPT 模型见 model_doc/dpt.md。3.5 Head模型头模型头是神经网络的最后一层接收原始/初始隐状态将其投影到不同维度。每类任务对应不同的模型头。原文档列举的典型对应关系GPT2ForSequenceClassification序列分类头——在基础模型GPT2Model之上的一个线性层。ViTForImageClassification图像分类头——CLStoken 最终隐状态之上的一个线性层叠在ViTModel之上。Wav2Vec2ForCTCCTC 建模语言头叠在Wav2Vec2Model之上。这一“基础 Model ForXxx 任务头”的命名与分层方式在 src/transformers/models 目录下的每个模型包中都可验证modeling_xxx.py中的XxxModel与XxxForXxx类。四、预训练任务与训练范式4.1 三类语言建模目标掩码语言建模MLM, Masked Language Modeling模型看到一份“被破坏”的文本通常随机遮蔽部分 token需要还原原始文本。因果语言建模Causal Language Modeling见 3.2 节按序读入并预测下一词。自编码/自回归分别是上述两类的模型侧称谓autoencoding models / autoregressive models见 3.1、3.2 节。4.2 预训练模型与微调预训练模型Pretrained Model已在大规模数据如整个 Wikipedia上完成预训练的模型。预训练采用自监督目标例如“读文本并预测下一词”因果 LM或“遮蔽部分词并还原”MLM。语音与视觉模型各有专属预训练目标例如 Wav2Vec2 以对比学习为目标要求模型从一组“错误”的伪语音表示中挑出“真实”表示BEiT 则通过掩码图像建模遮蔽部分图像补丁并要求预测预训练。微调模型Finetuned Models微调是迁移学习的一种形式——取一个预训练模型、冻结其权重、把输出层替换为一个新加的任务头然后只在目标数据集上训练这个头。更完整的微调流程参见 training.md。迁移学习Transfer Learning把一个预训练模型适配到你自己任务数据集上的技术。相比从零训练它直接继承已有模型的知识作为起点加快学习并显著减少所需训练数据量。大型语言模型LLM泛指在海量数据上训练的 Transformer 语言模型如 GPT-3、BLOOM、OPT通常参数量极大术语表以 GPT-3 的 1750 亿参数为例。4.3 监督式训练范式光谱术语表覆盖了机器学习训练范式的完整光谱值得逐条厘清监督学习Supervised Learning直接利用带标注数据纠正并引导模型训练——数据喂入模型其预测与已知正确答案比对模型据此调整权重并迭代。无监督学习Unsupervised Learning训练数据不带标签利用数据分布的统计信息寻找对目标任务有用的模式。自监督学习Self-supervised Learning模型从无标注数据中自行构造学习信号与监督/无监督的不同在于“有监督信号但信号不由用户显式给出”。典型例子即 MLM把去掉了一部分 token 的句子喂给模型让它学会预测缺失的 token。半监督学习Semi-supervised Learning利用少量标注数据 大量无标注数据提升精度的技术族。典型方法是自训练先用标注数据训练再用模型给无标注数据打标签把置信度最高的部分并入标注集重新训练。深度/表示学习**深度学习Deep Learning**指使用多层神经网络的机器学习算法**表示学习Representation Learning**是专注于学习原始数据有意义表示的分支技术示例包括词嵌入、自编码器与生成对抗网络GAN。4.4 任务族与语音术语NLP自然语言处理泛指“处理文本”的方法统称。NLU自然语言理解所有“理解文本内容”的任务如整句分类或词级分类。NLG自然语言生成所有“生成文本”的任务如写作、翻译。多模态Multimodal文本与其他类型输入如图像组合的任务。连接主义时序分类CTC, Connectionist Temporal Classification允许模型在不精确知道输入-输出如何对齐的情况下学习CTC 对给定输入计算所有可能输出的分布并选取概率最大者。因口语文本与书面文本常无法逐位对应说话速率因人而异等CTC 广泛用于语音识别任务。采样率Sampling Rate以赫兹计、每秒采集的音频样本数由对连续信号如语音的采样得到。五、Labels模型自动计算损失的标注输入labels是传给模型的可选参数用于让模型自行计算损失。不同模型家族对labels的形状要求不同这是训练代码中最容易出错的细节之一。原文档给出了完整对照下表为忠实整理模型类型代表类labels 形状含义序列分类BertForSequenceClassification(batch_size,)每个样本对应整句的期望标签词元分类BertForTokenClassification(batch_size, seq_length,)每个位置对应单个 token 的期望标签掩码语言建模BertForMaskedLM(batch_size, seq_length,)被掩码位置的值为原词 ID其余位置取-100被忽略序列到序列BartForConditionalGeneration、MBartForConditionalGeneration(batch_size, tgt_seq_length,)每个样本对应目标序列BART/T5 会在内部自动构建decoder_input_ids与 decoder 注意力掩码通常无需手动提供基于 Encoder-Decoder 框架的模型不在此列图像分类ViTForImageClassification(batch_size,)每张图一个标签语义分割SegformerForSemanticSegmentation(batch_size, height, width)每个像素一个标签目标检测DetrForObjectDetection字典列表含class_labels与boxes每张图片对应的类别标签与边界框集合自动语音识别Wav2Vec2ForCTC(batch_size, target_length,)每个位置对应单个语音 token 的期望标签提示原文档 Tip各模型对标签的约定可能不同写训练代码前务必查阅对应模型文档确认其labels格式。源码佐证-100作为忽略值确实实现在模型前向中。例如 src/transformers/models/bert/modeling_bert.py 中BertForMaskedLM的文档串明确写道labels 取值范围[-100, 0, ..., config.vocab_size]索引为-100的 token 被忽略被掩码损失计算使用CrossEntropyLoss(ignore_indexignored_index)。另外注意基础 Model 类如BertModel不接受 labels——它们是“裸”Transformer只输出特征不含任何损失计算逻辑这也印证了第 3.5 节“基础模型 任务头”的分层设计。六、推理与流水线Inference Pipeline推理Inference训练完成后在新数据上评估模型的过程。使用 Transformers 做推理的完整方式见 pipeline_tutorial.md。流水线PipelineTransformers 中“pipeline”指按既定顺序执行的一组步骤——处理数据、转换数据、最终从模型返回预测。常见阶段包括原始数据预处理、特征抽取、归一化等。七、多 GPU 并行训练技术术语表收录了五类多卡/显存优化技术其详细原理均集中在 perf_train_gpu_many.md此处按术语表定义逐条说明7.1 数据并行DataParallel, DP在多块 GPU 上训练模型的技术把同一份训练配置复制多份每份接收不同的数据分片并行处理每步训练结束同步所有参数。DP 与 DistributedDataParallel 的区别见 perf_train_gpu_many.md 对应章节。7.2 流水线并行PipelineParallel纵向层级别切分模型的技术把模型的一层或几层放到一块 GPU 上各 GPU 并行处理流水线的不同阶段、各自工作于一个微批次micro-batch上。详见 perf_train_gpu_many.md 的“从朴素模型并行到流水线并行”一节。7.3 张量并行Tensor Parallel, TP把矩阵本身切分到多块 GPU矩阵的每一片驻留在专属 GPU 上各分片独立并行计算处理步骤末尾同步结果。又称“水平并行”切分发生在矩阵的水平维度上。术语表之外仓库另有专题文档 tensor_parallelism.md 可作延伸阅读。7.4 Sharded DDP**ZeRO零冗余优化器**基础概念在多数 Zero 系工具中的另一个名字。7.5 ZeRO一种并行技术像 TensorParallel 一样对矩阵分片但会在前向/反向计算需要时把矩阵完整重建因此无需修改模型结构同时支持多种卸载offload策略以应对 GPU 显存不足。八、内存优化前馈分块Feed Forward Chunking这是术语表中技术含量最高的一条值得结合源码细读。在 Transformer 的每个注意力单元中注意力层之后通常跟着两层前馈网络FFN其隐层维度config.intermediate_size一般远大于config.hidden_size例如google-bert/bert-base-uncased。对形状为[batch_size, sequence_length]的输入FFN 中间嵌入的显存占用为[batch_size, sequence_length, config.intermediate_size]可能构成显存使用的大头。Reformer 论文arXiv 2001.04451的作者指出由于前馈计算与sequence_length维度相互独立数学上等价的做法是把输出嵌入逐位置单独计算[batch_size, config.hidden_size]_0, ..., _nn sequence_length再拼接回[batch_size, sequence_length, config.hidden_size]。这以增加计算时间为代价换取显存下降结果在数学上完全一致。源码佐证Transformers 把该机制实现为 apply_chunking_to_forwarddef apply_chunking_to_forward( forward_fn: Callable[..., torch.Tensor], chunk_size: int, chunk_dim: int, *input_tensors, ) - torch.Tensor: ... if chunk_size 0: # 按 chunk_dim 维把输入切成 num_chunks 份 input_tensors_chunks tuple(input_tensor.chunk(num_chunks, dimchunk_dim) for input_tensor in input_tensors) # 对每一份分别执行前馈计算 output_chunks tuple(forward_fn(*input_tensors_chunk) for input_tensors_chunk in zip(*input_tensors_chunks)) # 沿同一维拼接回原形状 return torch.cat(output_chunks, dimchunk_dim) return forward_fn(*input_tensors)函数按chunk_dim维把input_tensors切成若干chunk_size大小的块对每个块独立执行forward_fn以节省显存chunk_size决定了同时并行计算的嵌入块数量即显存占用与时间复杂度之间的权衡旋钮当chunk_size设为0时直接原样调用forward_fn即不做分块与原实现逐位等价。约束条件所有输入张量在chunk_dim上的形状必须一致且该维长度必须是chunk_size的整数倍否则抛出ValueError。使用面apply_chunking_to_forward被大量模型的前馈层引用——仅 src/transformers/models 目录下就有数十个模型包如 BERT、ALBERT、BigBird 等的modeling_*.py调用它。从源码结构看chunk_size通常暴露为模型构造参数如chunk_size_feed_forward默认0表示关闭。九、小结术语与源码的对应索引为便于检索引用汇总本文各术语的“定义出处 实现佐证”双路径术语定义出处仓库内实现佐证Attention Maskdocs/source/ar/glossary.mdmodeling_attn_mask_utils.pyAttentionMaskConverterInput IDs / Token Type IDs同上glossary 2.2、2.3 节对应条目BertTokenizer及各 tokenizer 实现tokenization_python.py 等Labels-100 忽略约定同上Labels 条目models/bert/modeling_bert.pyignore_index逻辑图像补丁 patch_size同上image patch 条目models/vit/configuration_vit.py 默认16Feed Forward Chunking同上该条目pytorch_utils.pyapply_chunking_to_forwardDP / TP / PipelineParallel / ZeRO / Sharded DDP同上对应条目perf_train_gpu_many.md、tensor_parallelism.md掌握这套术语后阅读 Transformers 官方文档、模型卡片与训练/推理脚本时绝大多数缩写与参数名都能直接对号入座而每个概念落到哪段源码也都可以按本节的索引快速定位验证。【免费下载链接】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),仅供参考
返回列表