尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Transformers 中的 BERTology:读取隐藏状态、注意力权重与注意力头剪枝

Transformers 中的 BERTology:读取隐藏状态、注意力权重与注意力头剪枝 Transformers 中的 BERTology读取隐藏状态、注意力权重与注意力头剪枝【免费下载链接】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/transformersBERTology基于 BERT 的模型内部机理研究要求你能直接读取 Transformer 的每一层隐藏状态与每个注意力头的权重。这篇技术文章基于当前仓库的官方文档 docs/source/ja/bertology.md系统讲解该研究领域的背景、Transformers 为此内置的三类内部表示访问能力以及如何用仓库中的模型与测试代码验证这些能力读完后可独立完成对 BERT/GPT/GPT-2 的内部表示提取与注意力头分析。什么是 BERTology调查大规模 Transformer例如 BERT内部工作机制的研究领域近年来快速增长这一方向常被称为 “BERTology”。官方文档列举了该领域的四篇代表性工作它们也正是 Transformers 内置相关功能的设计动机BERT Rediscovers the Classical NLP PipelineIan Tenney, Dipanjan Das, Ellie PavlickArXiv: 1905.05950证明 BERT 内部表示隐式地重新发现了词性标注、句法分析等传统 NLP 流水线Are Sixteen Heads Really Better than One?Paul Michel, Omer Levy, Graham NeubigArXiv: 1905.10650提出基于注意力头输出值与梯度的重要性打分方法证明可以剪掉大量注意力头而不显著损害性能What Does BERT Look At? An Analysis of BERTs AttentionKevin Clark, Urvashi Khandelwal, Omer Levy, Christopher D. ManningArXiv: 1906.04341对 BERT 的注意力分布做系统性分析CAT-probing: A Metric-based Approach to Interpret How Pre-trained Models for Programming Language Attend Code StructureArXiv: 2210.04633用指标化方法解释预训练模型如何关注代码结构。为了支撑这一研究方向Transformers 在 BERT/GPT/GPT-2 模型中内置了额外的功能让人们能够访问模型的内部表示。这些功能主要借鉴了 Paul Michel 等人的工作Are Sixteen Heads Really Better than One?。具体包含三项能力访问 BERT/GPT/GPT-2 的所有隐藏状态每一层输出含嵌入层输出访问 BERT/GPT/GPT-2每个注意力头的所有注意力权重检索注意力头的输出值与梯度以便计算头的重要性得分并对头进行剪枝方法细节见 Michel 等人的论文。源码印证hidden_states 与 attentions 的输出结构上述前两项能力的落地载体是模型统一输出的数据类。从源码结构看所有模型输出的基类BaseModelOutput定义在 modeling_outputs.py 中包含三个关键字段last_hidden_state最后一层的隐藏状态形状为(batch_size, sequence_length, hidden_size)hidden_states可选字段仅当传入output_hidden_statesTrue或config.output_hidden_statesTrue时返回它是torch.FloatTensor的元组若有嵌入层则包含嵌入层输出 每一层的输出每个元素形状为(batch_size, sequence_length, hidden_size)attentions可选字段仅当传入output_attentionsTrue或config.output_attentionsTrue时返回它是torch.FloatTensor的元组每层一个每个元素形状为(batch_size, num_heads, sequence_length, sequence_length)即注意力 softmax 之后的权重正是文档中“每个注意力头的注意力权重”的张量化形式——第batch, head维即可定位到某一具体注意力头。这意味着做 BERTology 研究时无需修改模型代码对 BERT 实现modeling_bert.py或 GPT-2 实现modeling_gpt2.py调用时打开相应开关即可拿到逐层、逐头的内部表示。以 BERT 为例的调用方式如下import torch from transformers import BertModel, BertTokenizer model BertModel.from_pretrained(bert-base-uncased) tokenizer BertTokenizer.from_pretrained(bert-base-uncased) inputs tokenizer(Hello world, analysis of internal representations., return_tensorspt) outputs model(**inputs, output_hidden_statesTrue, output_attentionsTrue) # 每一层的隐藏状态含嵌入层输出共 1 num_hidden_layers 个 for i, hs in enumerate(outputs.hidden_states): print(i, hs.shape) # (batch, seq_len, hidden_size) # 每一层、每一个头的注意力权重 for layer_idx, attn in enumerate(outputs.attentions): print(layer_idx, attn.shape) # (batch, num_heads, seq_len, seq_len) head0 attn[0, 0] # 取第 1 个样本在第 1 层的第 0 个头的注意力矩阵仓库中的验证用例hidden_states 与增量推理解码的一致性仓库的 BERT 测试文件 test_modeling_bert.py 展示了output_hidden_statesTrue的真实用法与预期行为测试分别以“一次性输入整段序列”和“带past_key_values增量解码”两种方式调用模型均传入output_hidden_statesTrue然后取出model(...)[...][hidden_states][0]第一个隐藏状态张量的随机切片做torch.allclose比较断言两条路径在容差atol1e-3内一致。这印证了两点一是hidden_states是模型输出对象可直接下标访问的字段二是开启内部表示导出不会破坏 KV Cache 增量解码的数值一致性因此该开关可以放心用于后续的分析与剪枝流程。头重要性打分与剪枝run_bertology.py 示例脚本文档强调的第三项能力——检索注意力头的输出值与梯度、计算重要性得分、剪枝——是基于 Michel 等人的方法实现的对每个头将其输出向量与到最终任务输出的梯度逐元素相乘后求绝对值并聚合得到该头的重要性分数分数越低的头越可以被移除且该操作可逆剪枝只是屏蔽/移除投影参数而非重新训练。为帮助使用者上手官方提供了一个专用示例脚本bertology.pyrun_bertology.py它从一个在 GLUE 数据集上预训练/微调的模型出发抽取上述内部信息并对注意力头做剪枝。需要说明两点适用前提该脚本位于独立的研究项目仓库transformers-research-projects的bertology目录中而当前仓库的 research_projects 目录说明 明确记载原先存放于此的各类研究项目已迁移至独立仓库因此在本仓库中该目录仅保留一个指向说明的 README脚本本体需到研究项目仓库查看在当前版本源码中检索prune_heads的定义未能在src/transformers下找到直接匹配可以推断该剪枝 API 在后续版本中经过重构或调整若需编程式剪枝建议以研究项目仓库中的run_bertology.py为基准对照运行而不是直接依赖旧版方法名。此外由于这类研究往往涉及梯度回传与逐头统计实践中的通用要点是将模型置于训练模式model.train()以参与反向传播、用交叉熵等任务损失计算梯度、再按层/头聚合head_output * grad_output的绝对值作为重要性分数剪枝后应重新评估任务性能确认质量损失在可接受范围内——这正是Are Sixteen Heads Really Better than One?一文的实验协议。小结BERTology 是分析 Transformer 内部机理层表示、注意力分布、头的冗余度的研究方向四篇代表论文构成其方法学基础Transformers 通过在模型输出中提供hidden_states逐层隐藏状态与attentions逐层、逐头注意力权重字段为 BERT/GPT/GPT-2 提供了统一的内部表示访问接口见 modeling_outputs.py头重要性打分与剪枝基于“头输出 × 梯度”的聚合分数配套的run_bertology.py示例脚本在独立研究项目仓库中本仓库 examples/research_projects/README.md 记录了迁移事实相关能力有仓库内测试tests/models/bert/test_modeling_bert.py背书可与 KV Cache 增量解码保持一致。【免费下载链接】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),仅供参考
返回列表