news 2026/6/24 1:16:11

大模型高效微调--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/6/23 17:57:00

Java泛型详解(内附代码示例),零基础小白到精通,收藏这篇就够了

目录 概念泛型的擦除泛型的类型 1.泛型类2.泛型接口3.泛型通配符4.泛型方法 1.泛型方法的基本用法2.类中的泛型方法3.泛型方法与可变参数4.静态方法与泛型5.泛型方法总结 5.泛型上下边界 概念 概念移步百度百科:java泛型 我只说一下我的理解,使用数据类型约束主…

作者头像 李华
网站建设 2026/6/23 17:56:52

刚刚!Science公布2025年度十大突破,第一名来自中国!

北京时间12月19日,最新一期《Science》杂志公布了2025年度十大科学突破评选结果。其中,全球可再生能源在中国的引领下迅猛发展位列榜首,中国科学院古脊椎动物与古人类研究所和河北地质大学联合团队发现哈尔滨古人类是丹尼索瓦人、华中农业大学…

作者头像 李华
网站建设 2026/6/23 17:57:02

Web开发者进阶AI Agent:LangChain提示词模板与输出解析器实战

图片来源网络,侵权联系删。 文章目录1. 引言2. LangChain提示词模板:从静态到智能增强2.1 基础模板 vs Web模板引擎2.2 少样本提示(Few-shot Prompting):给模型“示例教学”2.3 提示模板的版本管理3. 输出解析器&#…

作者头像 李华
网站建设 2026/6/22 23:57:23

FaceFusion镜像内置缓存机制提升重复任务效率

FaceFusion镜像内置缓存机制提升重复任务效率在数字内容创作领域,一个常见的场景是:设计师需要为一段30秒的视频逐帧替换主角人脸,尝试不同风格参数生成多组预览效果。传统流程下,即便前后帧中的人物几乎完全相同,系统…

作者头像 李华
网站建设 2026/6/23 8:15:49

【隐私合规迫在眉睫】:Open-AutoGLM一键启用的5大应急防护机制详解

第一章:Open-AutoGLM 应急隐私保护方案概述在数据驱动的智能服务快速发展的背景下,大语言模型(LLM)面临日益严峻的隐私泄露风险。Open-AutoGLM 作为一种面向应急场景设计的隐私保护方案,旨在确保用户敏感信息在模型推理…

作者头像 李华