news 2026/4/7 23:09:28

大模型高效微调--P-Tuning

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大模型高效微调--P-Tuning

文章目录

      • P Tuning微调概述
      • 核心原理
      • 实现步骤
      • 优势与适用场景
      • 代码注释

P Tuning微调概述

P Tuning是一种参数高效的微调方法,通过引入可训练的连续提示(prompt)参数来适配下游任务,避免直接修改预训练语言模型(PLM)的全部参数。其核心思想是将离散的自然语言提示替换为可优化的连续向量,显著降低计算成本。

核心原理

传统微调需要更新整个模型的参数,而P Tuning仅优化插入的连续提示向量。这些提示通常以可学习张量的形式嵌入输入层或中间层,引导模型输出适应特定任务。数学形式可表示为:

h = PLM ( [ P ; x ] ) h = \text{PLM}([P; x])h=PLM([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_dim=config.token_dim# token的维度self.input_size=self.token_dim# 输入维度self.output_size=self.token_dim# 输出维度self.hidden_size=config.encoder_hidden_size# LSTM隐藏层维度self.total_virtual_tokens=config.num_virtual_tokens*config.num_transformer_submodules# 虚拟token总数# 定义embedding层,将虚拟token映射到token_dim维度self.embedding=nn.Embedding(self.total_virtual_tokens,self.token_dim)# 如果不是推理模式,初始化LSTM和MLPifnotconfig.inference_mode:lstm_dropout=config.encoder_dropout# LSTM的dropout率num_layers=config.encoder_num_layers# LSTM层数# 定义双向LSTMself.lstm_head=nn.LSTM(input_size=self.input_size,hidden_size=self.hidden_size,num_layers=num_layers,dropout=lstm_dropout,bidirectional=True,batch_first=True)# 定义MLP,包含两个线性层和ReLU激活函数self.mlp_head=nn.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_embeds=self.embedding(indices)# 将embedding输入LSTM,取输出结果输入MLPoutput_embeds=self.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表示。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/22 15:02:38

2025年深度观察:技术招聘的“数据孤岛”效应与AI智能体的破局之道

在企业数字化转型的宏大叙事中,人力资源往往是最后一块被数据光辉照亮的角落。特别是在高精尖的技术招聘领域,用人部门的需求与市场供给之间,长期存在着巨大的“认知偏差”。这种偏差导致了极高的沟通成本和无效招聘。本文将从数据治理与决策…

作者头像 李华
网站建设 2026/4/5 22:32:03

SadTalker语音驱动人脸动画终极指南:从零到精通

想要让静态照片"开口说话"吗?SadTalker作为当前最先进的语音驱动人脸动画技术,能够将任意单张人物照片与音频结合,生成生动自然的说话视频。本文为你带来全新视角的部署教程,告别传统安装方式,体验更高效的配…

作者头像 李华
网站建设 2026/4/5 16:00:31

Langchain-Chatchat如何集成拖拽上传功能?交互体验升级

Langchain-Chatchat如何集成拖拽上传功能?交互体验升级 在企业知识管理日益智能化的今天,越来越多团队开始部署基于大语言模型(LLM)的本地知识库系统。Langchain-Chatchat 作为当前最受欢迎的开源方案之一,凭借其对私有…

作者头像 李华
网站建设 2026/4/4 3:40:06

Open-AutoGLM任务规划与执行解耦架构(解耦设计十大实践法则)

第一章:Open-AutoGLM任务规划与执行解耦架构概述 Open-AutoGLM 是一种面向复杂任务自动化的大语言模型系统架构,其核心设计理念在于将任务的“规划”与“执行”过程进行逻辑分离。该架构通过解耦策略提升系统的可维护性、灵活性与可扩展性,使…

作者头像 李华
网站建设 2026/4/5 7:00:08

手把手教你部署Langchain-Chatchat实现文档自动回答

手把手教你部署Langchain-Chatchat实现文档自动回答 在企业知识管理日益复杂的今天,员工常常需要花费大量时间查找制度文件、产品手册或合规条款。而当一个新员工提问“年假怎么申请?”时,HR却要翻遍多个PDF和内部Wiki才能给出答案——这种低…

作者头像 李华
网站建设 2026/3/31 2:12:35

Langchain-Chatchat如何实现问答结果打印功能?物理存档

Langchain-Chatchat如何实现问答结果打印功能?物理存档 在企业数字化转型不断深入的今天,信息的准确性与可追溯性已成为组织管理的核心诉求。尤其是在人力资源、法务合规、内部审计等场景中,仅“看到”AI的回答是远远不够的——人们更需要一份…

作者头像 李华