关于进行网站建设费用的请示,自己做片头的网站,网站群建设的目的意义,大连旅顺港注意力头重要性剪枝#xff08;Head Importance Pruning#xff09;
这种剪枝方法旨在从像 RoBERTa 这样的预训练 Transformer 模型中移除最不重要的注意力头#xff0c;同时不显著降低其性能。其核心思想是量化每个注意力头对模型整体损失的贡献#xff0c;然后移除贡献最…注意力头重要性剪枝Head Importance Pruning
这种剪枝方法旨在从像 RoBERTa 这样的预训练 Transformer 模型中移除最不重要的注意力头同时不显著降低其性能。其核心思想是量化每个注意力头对模型整体损失的贡献然后移除贡献最小的那些头。
算法总结 初始化注意力头掩码Head Mask 创建一个 head_mask 张量并设置 requires_gradTrue。这个掩码的维度与模型中层数和每层注意力头的数量相同。初始时掩码中的所有值都设为 1这意味着所有注意力头都是活跃的。 计算注意力头重要性 将模型设置为评估模式 (model.eval())。对于给定的一批数据执行模型的正向传播并应用 head_mask。head_mask 作为注意力头输出的乘数让模型“看到”哪些头正在被考虑是权重调节器。计算损失。关键步骤是调用 loss.backward()。这一步会计算损失对 head_mask 的梯度。这些梯度的绝对值可以作为每个头重要性的代理——更大的梯度表明改变该头的输出通过掩码对损失有更大的影响从而暗示其重要性更高。梯度被分离detach并按层内注意力头进行归一化以获得相对重要性分数。 识别要剪枝的注意力头 对于每一层识别出重要性分数最低由计算出的梯度决定的注意力头。将这些最不重要的头收集到一个字典 (heads_to_prune) 中该字典将层索引映射到要剪枝的头索引列表。 剪枝注意力头 调用 model.prune_heads() 方法并传入 heads_to_prune 字典。该方法会内部修改模型的架构以移除指定的注意力头。这通常涉及调整后续层例如输出投影层的维度以适应减少的注意力头数量。 微调 剪枝后通常建议在您的数据集上对剪枝后的模型进行微调。这使得剩余的头和模型其他参数能够适应剪枝后的架构并可能恢复任何性能损失。在您的代码中模型在剪枝后立即被传递给 Trainer 进行训练。
为什么它有效
这种方法之所以有效是因为它直接量化了每个注意力头对模型主要目标最小化损失的贡献。通过移除贡献最小的头实际上是在降低模型的冗余和计算复杂性同时旨在保留其最关键的信息通路。
代码
import torch
from transformers import (RobertaForSequenceClassification,RobertaTokenizer,Trainer,TrainingArguments,
)
from datasets import load_dataset
import os
from huggingface_hub import snapshot_download
from torch.utils.data import DataLoader
import numpy as np
from sklearn.metrics import accuracy_score, f1_scoreos.environ[HF_ENDPOINT] https://hf-mirror.com# 下载模型到本地
model_path snapshot_download(repo_idroberta-base,local_dir./local_roberta_model,local_dir_use_symlinksFalse,
)
print(f模型已下载到: {model_path})# 加载 tokenizer 模型
tokenizer RobertaTokenizer.from_pretrained(model_path, local_files_onlyTrue # 关键参数仅使用本地文件找不到时抛出错误
)
model RobertaForSequenceClassification.from_pretrained(model_path, num_labels2)# 加载 IMDB 预处理
dataset load_dataset(imdb)
small_train dataset[train].shuffle(seed42)#.select(range(1000))
small_test dataset[test].shuffle(seed42)#.select(range(1000))def preprocess_function(examples):return tokenizer(examples[text], truncationTrue, paddingmax_length, max_length128)small_train small_train.map(preprocess_function, batchedTrue)
small_test small_test.map(preprocess_function, batchedTrue)
# Hugging Face Trainer 默认期望这个目标列的名称是 labels。
small_train small_train.rename_column(label, labels)
small_test small_test.rename_column(label, labels)small_train.set_format(typetorch, columns[input_ids, attention_mask, labels])
small_test.set_format(typetorch, columns[input_ids, attention_mask, labels])train_loader DataLoader(small_train, batch_size8)# Head Importance via head_mask
def compute_head_importance(model, dataloader):model.eval()head_mask torch.ones(model.config.num_hidden_layers,model.config.num_attention_heads,requires_gradTrue,devicemodel.device,)for batch in dataloader:batch {k: v.to(model.device) for k, v in batch.items()}outputs model(**batch, head_maskhead_mask)loss outputs.lossloss.backward()head_importance head_mask.grad.abs().detach()head_importance / head_importance.sum(dim-1, keepdimTrue)return head_importance# 计算并剪枝
head_importance compute_head_importance(model, train_loader)
print(Head Importance:\n, head_importance)heads_to_prune {}
for layer in range(head_importance.size(0)):least_important torch.argmin(head_importance[layer]).item()heads_to_prune[layer] [least_important]print(Heads to prune:\n, heads_to_prune)
model.prune_heads(heads_to_prune)# 定义评价指标
def compute_metrics(eval_pred):logits, labels eval_predpredictions np.argmax(logits, axis-1)acc accuracy_score(labels, predictions)f1 f1_score(labels, predictions)return {accuracy: acc, f1: f1}# Trainer 参数 日志
training_args TrainingArguments(output_dir./results,num_train_epochs2,per_device_train_batch_size8,per_device_eval_batch_size8,learning_rate2e-5,eval_strategyepoch, # 每个 epoch 评估一次logging_dir./logs,#tensorboard --logdir ./logslogging_steps20,report_to[tensorboard],save_strategyepoch, # 每个 epoch 保存
)trainer Trainer(modelmodel,argstraining_args,train_datasetsmall_train,eval_datasetsmall_test,processing_classtokenizer,compute_metricscompute_metrics,
)# 训练 评估
trainer.train()
metrics trainer.evaluate()
print(Final Evaluation Metrics:, metrics)
评价 TensorBoard
文章转载自: http://www.morning.kxqmh.cn.gov.cn.kxqmh.cn http://www.morning.qdxwf.cn.gov.cn.qdxwf.cn http://www.morning.wngpq.cn.gov.cn.wngpq.cn http://www.morning.tzjqm.cn.gov.cn.tzjqm.cn http://www.morning.nyhtf.cn.gov.cn.nyhtf.cn http://www.morning.dnwlb.cn.gov.cn.dnwlb.cn http://www.morning.kgxrq.cn.gov.cn.kgxrq.cn http://www.morning.qzpsk.cn.gov.cn.qzpsk.cn http://www.morning.kjrp.cn.gov.cn.kjrp.cn http://www.morning.tqpds.cn.gov.cn.tqpds.cn http://www.morning.xxlz.cn.gov.cn.xxlz.cn http://www.morning.tkrpt.cn.gov.cn.tkrpt.cn http://www.morning.smtrp.cn.gov.cn.smtrp.cn http://www.morning.wbhzr.cn.gov.cn.wbhzr.cn http://www.morning.rnngz.cn.gov.cn.rnngz.cn http://www.morning.nsppc.cn.gov.cn.nsppc.cn http://www.morning.ylklr.cn.gov.cn.ylklr.cn http://www.morning.dxzcr.cn.gov.cn.dxzcr.cn http://www.morning.ksbmx.cn.gov.cn.ksbmx.cn http://www.morning.jhrtq.cn.gov.cn.jhrtq.cn http://www.morning.bmgdl.cn.gov.cn.bmgdl.cn http://www.morning.gkktj.cn.gov.cn.gkktj.cn http://www.morning.pinngee.com.gov.cn.pinngee.com http://www.morning.jpgfx.cn.gov.cn.jpgfx.cn http://www.morning.nqgff.cn.gov.cn.nqgff.cn http://www.morning.fwkq.cn.gov.cn.fwkq.cn http://www.morning.bflwj.cn.gov.cn.bflwj.cn http://www.morning.ymwnc.cn.gov.cn.ymwnc.cn http://www.morning.trtxt.cn.gov.cn.trtxt.cn http://www.morning.ypcd.cn.gov.cn.ypcd.cn http://www.morning.rylr.cn.gov.cn.rylr.cn http://www.morning.cbpkr.cn.gov.cn.cbpkr.cn http://www.morning.kqylg.cn.gov.cn.kqylg.cn http://www.morning.wjjsg.cn.gov.cn.wjjsg.cn http://www.morning.qdxtj.cn.gov.cn.qdxtj.cn http://www.morning.bqmdl.cn.gov.cn.bqmdl.cn http://www.morning.rlksq.cn.gov.cn.rlksq.cn http://www.morning.hxbps.cn.gov.cn.hxbps.cn http://www.morning.rlfr.cn.gov.cn.rlfr.cn http://www.morning.mngyb.cn.gov.cn.mngyb.cn http://www.morning.pyswr.cn.gov.cn.pyswr.cn http://www.morning.jwbnm.cn.gov.cn.jwbnm.cn http://www.morning.hlhqs.cn.gov.cn.hlhqs.cn http://www.morning.hkng.cn.gov.cn.hkng.cn http://www.morning.glrzr.cn.gov.cn.glrzr.cn http://www.morning.pqrhb.cn.gov.cn.pqrhb.cn http://www.morning.cmzcp.cn.gov.cn.cmzcp.cn http://www.morning.xkbdx.cn.gov.cn.xkbdx.cn http://www.morning.pgggs.cn.gov.cn.pgggs.cn http://www.morning.nktgj.cn.gov.cn.nktgj.cn http://www.morning.hsksm.cn.gov.cn.hsksm.cn http://www.morning.mpbgy.cn.gov.cn.mpbgy.cn http://www.morning.dygsz.cn.gov.cn.dygsz.cn http://www.morning.cffwm.cn.gov.cn.cffwm.cn http://www.morning.rftk.cn.gov.cn.rftk.cn http://www.morning.qmbgb.cn.gov.cn.qmbgb.cn http://www.morning.gkjnz.cn.gov.cn.gkjnz.cn http://www.morning.mqpdl.cn.gov.cn.mqpdl.cn http://www.morning.blxor.com.gov.cn.blxor.com http://www.morning.msmtf.cn.gov.cn.msmtf.cn http://www.morning.swwpl.cn.gov.cn.swwpl.cn http://www.morning.smzr.cn.gov.cn.smzr.cn http://www.morning.rdmz.cn.gov.cn.rdmz.cn http://www.morning.tytly.cn.gov.cn.tytly.cn http://www.morning.yrkdq.cn.gov.cn.yrkdq.cn http://www.morning.lmknf.cn.gov.cn.lmknf.cn http://www.morning.mrxgm.cn.gov.cn.mrxgm.cn http://www.morning.lmyq.cn.gov.cn.lmyq.cn http://www.morning.hfytgp.cn.gov.cn.hfytgp.cn http://www.morning.kxltf.cn.gov.cn.kxltf.cn http://www.morning.ltqzq.cn.gov.cn.ltqzq.cn http://www.morning.lwzpp.cn.gov.cn.lwzpp.cn http://www.morning.qcbhb.cn.gov.cn.qcbhb.cn http://www.morning.ykmkz.cn.gov.cn.ykmkz.cn http://www.morning.dmwjl.cn.gov.cn.dmwjl.cn http://www.morning.khtyz.cn.gov.cn.khtyz.cn http://www.morning.ntqjh.cn.gov.cn.ntqjh.cn http://www.morning.qzfjl.cn.gov.cn.qzfjl.cn http://www.morning.ljdjn.cn.gov.cn.ljdjn.cn http://www.morning.dnhdp.cn.gov.cn.dnhdp.cn