学校网站建设设想,翻译网站建设方案,广州网站建设开发设计,种子搜索神器下载文章目录P Tuning微调概述核心原理实现步骤优势与适用场景代码注释P Tuning微调概述
P Tuning是一种参数高效的微调方法#xff0c;通过引入可训练的连续提示#xff08;prompt#xff09;参数来适配下游任务#xff0c;避免直接修改预训练语言模型#xff08;PLM#x…文章目录P Tuning微调概述核心原理实现步骤优势与适用场景代码注释P Tuning微调概述P Tuning是一种参数高效的微调方法通过引入可训练的连续提示prompt参数来适配下游任务避免直接修改预训练语言模型PLM的全部参数。其核心思想是将离散的自然语言提示替换为可优化的连续向量显著降低计算成本。核心原理传统微调需要更新整个模型的参数而P Tuning仅优化插入的连续提示向量。这些提示通常以可学习张量的形式嵌入输入层或中间层引导模型输出适应特定任务。数学形式可表示为h PLM ( [ P ; x ] ) h \text{PLM}([P; x])hPLM([P;x])其中P PP为连续提示向量x xx为输入文本h hh为模型输出。实现步骤连续提示设计在输入序列前或中间插入可训练的张量如维度与词嵌入相同替代传统离散提示。例如在分类任务中输入可能构造为[ P 1 , P 2 , . . . , P n ; 文本 ] [P_1, P_2, ..., P_n; \text{文本}][P1,P2,...,Pn;文本]。参数冻结保持预训练模型参数固定仅更新提示向量P PP和任务特定头部如分类器。部分变体允许选择性微调部分模型层。优势与适用场景计算高效仅训练少量参数适合资源受限场景。通用性适用于文本分类、生成、问答等多种任务。小样本适配在低数据场景下表现优于全参数微调。代码注释importtorchimporttorch.nnasnn# 定义PromptEncoder类继承自nn.ModuleclassPromptEncoder(nn.Module):def__init__(self,config):super(PromptEncoder,self).__init__()# 从config中获取模型参数self.token_dimconfig.token_dim# token的维度self.input_sizeself.token_dim# 输入维度self.output_sizeself.token_dim# 输出维度self.hidden_sizeconfig.encoder_hidden_size# LSTM隐藏层维度self.total_virtual_tokensconfig.num_virtual_tokens*config.num_transformer_submodules# 虚拟token总数# 定义embedding层将虚拟token映射到token_dim维度self.embeddingnn.Embedding(self.total_virtual_tokens,self.token_dim)# 如果不是推理模式初始化LSTM和MLPifnotconfig.inference_mode:lstm_dropoutconfig.encoder_dropout# LSTM的dropout率num_layersconfig.encoder_num_layers# LSTM层数# 定义双向LSTMself.lstm_headnn.LSTM(input_sizeself.input_size,hidden_sizeself.hidden_size,num_layersnum_layers,dropoutlstm_dropout,bidirectionalTrue,batch_firstTrue)# 定义MLP包含两个线性层和ReLU激活函数self.mlp_headnn.Sequential(nn.Linear(self.hidden_size*2,self.hidden_size*2),# 双向LSTM输出维度翻倍nn.ReLU(),nn.Linear(self.hidden_size*2,self.output_size)# 输出维度与token_dim相同)defforward(self,indices):# 将输入的indices转换为embeddinginput_embedsself.embedding(indices)# 将embedding输入LSTM取输出结果输入MLPoutput_embedsself.mlp_head(self.lstm_head(input_embeds)[0])returnoutput_embeds初始化部分从配置中获取模型参数包括token维度、隐藏层大小等。定义embedding层将虚拟token映射到指定维度。在非推理模式下初始化双向LSTM和MLP结构。前向传播将输入的虚拟token索引转换为embedding向量。通过双向LSTM处理embedding向量。使用MLP进一步处理LSTM输出生成最终编码结果。该模块通常用于prompt tuning或prefix tuning等场景用于生成可学习的虚拟token表示。