当前位置: 首页 > article >正文

预训练模型实战手册:用BERT/GPT-2微调实现10倍效率提升,Hugging Face生态下的迁移学习全链路实践

更多AI大模型应用开发学习内容,尽在聚客AI学院。

一. 预训练模型(PTM)核心概念

1.1 什么是预训练模型?

预训练模型(Pre-trained Model, PTM)是在大规模通用数据上预先训练的模型,通过自监督学习掌握基础语义理解能力,可迁移到下游任务。典型代表:

  • BERT(双向Transformer):文本掩码预测

  • GPT(自回归Transformer):文本生成

  • ViT(Vision Transformer):图像分类

技术价值

  • 知识蒸馏:从海量数据中提取通用模式

  • 迁移潜能:参数携带跨任务可复用知识

be1f91a7fa329f3c90461b95d121647.png

二. 迁移学习(Transfer Learning)技术解析

2.1 迁移学习范式

源领域(大数据) → 知识迁移 → 目标领域(小数据)

典型场景

  • 跨任务迁移:BERT用于情感分析/命名实体识别

  • 跨模态迁移:CLIP实现图文互搜

2.2 与传统学习的对比

image.png

三. 为什么需要预训练?

3.1 传统方法的局限

  • 数据依赖:标注成本高(如医学图像标注需专家参与)

  • 冷启动难题:小数据集易过拟合

  • 知识孤立:每个任务独立建模,无法复用

3.2 预训练的核心优势

  • 参数效率:ImageNet预训练的ResNet在CIFAR-10仅需微调1%参数即可达90%+准确率

  • 知识泛化:GPT-3通过提示工程(Prompting)实现零样本学习

  • image.png

四. 预训练模型的下游任务适配策略

4.1 特征提取器固定(Feature Extraction)

冻结PTM参数,仅训练顶层分类器:
代码示例:BERT固定特征提取

from transformers import BertModel, BertTokenizer  
import torch  
# 加载预训练模型  
model = BertModel.from_pretrained("bert-base-uncased")  
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")  
# 冻结参数  
for param in model.parameters():  param.requires_grad = False  
# 提取特征  
inputs = tokenizer("Hello world!", return_tensors="pt")  
outputs = model(**inputs)  
features = outputs.last_hidden_state[:, 0, :]  # 取[CLS]向量  
# 添加分类层  
classifier = torch.nn.Linear(768, 2)  
logits = classifier(features)

4.2 微调(Fine-Tuning)

解冻全部或部分参数进行端到端训练:
代码示例:GPT-2微调

from transformers import GPT2LMHeadModel, GPT2Tokenizer, Trainer, TrainingArguments  
model = GPT2LMHeadModel.from_pretrained("gpt2")  
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")  
# 准备训练数据  
train_texts = ["AI is changing...", "Machine learning..."]  
train_encodings = tokenizer(train_texts, truncation=True, padding=True)  
# 微调配置  
training_args = TrainingArguments(  output_dir='./results',  num_train_epochs=3,  per_device_train_batch_size=4,  learning_rate=5e-5  
)  
trainer = Trainer(  model=model,  args=training_args,  train_dataset=train_encodings  
)  
trainer.train()

4.3 参数高效微调(PEFT)

  • LoRA:低秩矩阵注入

  • Adapter:插入小型适配模块

  • Prefix-Tuning:优化提示向量

五. NLP预训练为何滞后于CV?

5.1 历史瓶颈分析

image.png

5.2 突破关键

  • Transformer架构:自注意力机制解决长程依赖

  • 无监督目标:MLM(掩码语言建模)实现双向编码

  • 大规模语料:Common Crawl等数据集提供万亿级token

:本文代码需安装以下依赖:

pip install transformers torch datasets

更多AI大模型应用开发学习内容,尽在聚客AI学院。

相关文章:

预训练模型实战手册:用BERT/GPT-2微调实现10倍效率提升,Hugging Face生态下的迁移学习全链路实践

更多AI大模型应用开发学习内容,尽在聚客AI学院。 一. 预训练模型(PTM)核心概念 1.1 什么是预训练模型? 预训练模型(Pre-trained Model, PTM)是在大规模通用数据上预先训练的模型,通过自监督学…...

并发笔记-给数据上锁(二)

文章目录 核心挑战 (The CRUX)29.1 并发计数器 (Concurrent Counters)1. 简单非并发计数器 (Figure 29.1)2. 同步计数器(单锁版本 - Coarse-Grained Lock, Figure 29.2)3. 可伸缩计数:近似/懒惰计数器 (Approximate/Sloppy Counter, Figure 2…...

mac docker弹窗提示Docker 启动没有响应

一、原因分析 这台笔记电脑是Mac M3操作系统,安装Docker之后,Docker应用程序一直启动不起来。 二、解决办法 sudo rm /Library/PrivilegedHelperTools/com.docker.vmnetd sudo cp /Applications/Docker.app/Contents/Library/LaunchServices/com.docker.vmnetd /Library/Pri…...

每日算法刷题计划Day7 5.15:leetcode滑动窗口4道题,用时1h

一.定长滑动窗口 【套路】教你解决定长滑窗!适用于所有定长滑窗题目! 模版套路 1.题目描述 1.计算所有长度恰好为 k 的子串中,最多可以包含多少个元音字母 2.找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。 3.…...

如何利用 Python 爬虫按关键字搜索京东商品:实战指南

在电商领域,京东作为国内知名的电商平台,拥有海量的商品数据。通过 Python 爬虫技术,我们可以高效地按关键字搜索京东商品,并获取其详细信息。这些信息对于市场分析、选品上架、库存管理和价格策略制定等方面具有重要价值。本文将…...

Ubuntu 22.04搭建OpenStreeMap地址解析服务(保姆级教程)

1.数据准备 1.1.全球数据 下载地址:https://planet.openstreetmap.org/ 1.2.特定区域的数据 下载地址:Geofabrik Download Server 2.安装必要的软件包 2.1.更新系统软件包 sudo apt updatesudo apt upgrade 2.2.安装所需要的软件包 执行下面的命…...

sqli—labs第五关——报错注入

一:判断输入类型 首先测试 ?id1 回显You are in... 渐进测试?id1 报错分析: 出现引号提示——“”,可能是字符型 继续测试?id1--(用注释符修复了语法错误) 回显You are in... 说明就是字符型 因为能用注释符…...

从海洋生物找灵感:造个机器人RoboPteropod,它能在水下干啥?

大家好!在如今人类对水下环境探索不断深入的时代,从水下考古到珊瑚礁考察,各种任务都离不开水下机器人的助力。但传统水下机器人尺寸较大,在狭窄的水下空间施展不开。今天,我们就来认识一款受海洋小生物启发而设计的仿…...

FastAPI系列16:从API文档到TypeScript 前端客户端(SDKs)

从API文档到TypeScript 前端客户端(SDKs) 快速入门生成一个TypeScript 客户端测试生成的TypeScript 客户端 API标签与客户端生成生成带有标签的 TypeScript 客户端 自定义Operation ID使用自定义Operation ID生成TypeScript客户端 在 FastAPI系列15&…...

为什么 Redis 设计为单线程?6.0 版本为何引入多线程?

Redis 6.0引入多线程的核心目的是优化网络I/O处理,通过分离I/O操作与命令执行,在保持数据一致性的前提下,充分利用多核CPU资源提升高并发场景下的性能,同时保持向后兼容性。以下是对Redis单线程设计与6.0版本引入多线程的详细解析…...

C# 使用HttpClient下载文件

本章讲述:如何在C#中使用HttpClient直接从阿里云OSS下载文件。 步骤1: 添加必要的命名空间 using System; using System.IO; using System.Net.Http; 步骤2: 创建下载方法 以下是使用HttpClient下载文件的示例代码: public class OssDownloader {//d…...

CS016-2-unity ecs

目录 【23】射击改进 【24】僵尸生成器 ​编辑【25】随机行走 【27】射击光效 【23】射击改进 a. 当距离目标太远的时候,要继续移动。而当距离目标到达攻击距离之后,则停止移动。 上图中的if:判断自身和目标的距离是否大于攻击距离&#…...

CST软件对OPERACST软件联合仿真汽车无线充电站对人体的影响

上海又收紧了新能源车的免费上牌政策。所以年前一些伙伴和我探讨过买新能源汽车的问题,小伙伴们基本纠结的点是买插电还是纯电?我个人是很抗拒新能源车的,也开过坐过。个人有几个观点: 溢价过高,不保值。实际并不环保…...

华为2024年报:鸿蒙生态正在取得历史性突破

华为于2025年03月31日发布2024年年度报告。报告显示,华为经营结果符合预期,实现全球销售收入 8,621 亿元人民币,净利润 626 亿元人民币。2024 年研发投入达到 1,797 亿元人民币,约占全年收入的 20.8%,近十年累计投入的…...

策略模式-枚举实现

策略模式的实现方法有很多,可以通过策略类if,else实现。下面是用枚举类实现策略模式的方法。 定义一个枚举类,枚举类有抽象方法,每个枚举都实现抽象方法。这个策略,实现方法是工具类的很实现,代码简单好理解 枚举实现…...

C++中多重继承下的虚表结构

在 C 的多重继承 中,虚表(vtable)结构会变得更加复杂。 一、基础回顾:单继承下的虚表结构 类中含有虚函数 → 编译器生成虚表(每类一张);每个对象有一个隐藏的虚表指针(vptr&#x…...

LabVIEW的CAN通讯测试程序

该程序是基于 NI LabVIEW 平台开发的 CAN(Controller Area Network,控制器局域网)通讯测试程序。主要功能是对 CAN 通讯过程进行模拟、数据传输与验证,确保 CAN 通讯的正常运行和数据的准确传输。 程序详细说明 接口选择&#xff…...

Spring Boot 使用Itext绘制并导出PDF

最终效果 其实可以加分页&#xff0c;但是没有那么精细的需求&#xff0c;所以我最后就没有加&#xff0c;有兴趣的可以尝试下。 项目依赖 <!-- Spring Boot 版本有点老 --> <spring-boot.version>2.3.12.RELEASE</spring-boot.version><!-- 依…...

访问 Docker 官方镜像源(包括代理)全部被“重置连接”或超时

华为云轻量应用服务器&#xff08;Ubuntu 系统&#xff09; 遇到的问题是&#xff1a; &#x1f512; 访问 Docker 官方镜像源&#xff08;包括代理&#xff09;全部被“重置连接”或超时了&#xff0c;说明你这台服务器的出境网络对这些国外域名限制很严格&#xff0c;常见于华…...

RPC框架源码分析学习(二)

RPC框架源码分析与原理解读 前言 在分布式系统开发中&#xff0c;远程过程调用(RPC)是一项基础且关键的技术。通过对KVstorageBaseRaft-cpp项目RPC模块的源码分析&#xff0c;我深入理解了RPC框架的工作原理和实现细节。本文将从程序员视角分享我的学习心得。 框架概述 本项…...

【测试】BUG

目录 1、描述BUG的要素&#xff1a; 2、BUG的级别 3、BUG的状态的流转 4、与开发产⽣争执怎么办&#xff08;⾼频考题&#xff09; 什么是BUG&#xff1f;&#xff1f;&#xff1f; 程序与规格说明之间的不匹配才是错误 1、描述BUG的要素&#xff1a; 问题出现的版本、问…...

MongoClient和AsyncIOMotorClient的区别和用法

示例代码&#xff1a; from motor.motor_asyncio import AsyncIOMotorClient from pymongo import MongoClient&#x1f50d; 这两个库分别是&#xff1a; 名字说明举个例子pymongo.MongoClient同步版 的 MongoDB 客户端&#xff08;常规阻塞式操作&#xff09;你在主线程里一…...

Mac 环境下 JDK 版本切换全指南

概要 在 macOS 上安装了多个 JDK 后&#xff0c;可以通过系统自带的 /usr/libexec/java_home 工具来查询并切换不同版本的 Java。只需在终端中执行 /usr/libexec/java_home -V 列出所有已安装的 JDK&#xff0c;然后将你想使用的版本路径赋值给环境变量 JAVA_HOME&#xff0c;…...

Pillow 移除或更改了 FreeTypeFont.getsize() 方法

w, h self.font.getsize(label) # text width, height AttributeError: FreeTypeFont object has no attribute getsize 在Pillow 项目的变更日志里可以查到哪个版本移除了 getsize() 方法&#xff0c;Pillow仓库&#xff1a; Releases python-pillow/Pillow GitHub 因为…...

数据结构中链表的含义与link

在数据结构中,链表是一种常见的数据结构,它由一组节点组成,每个节点包含两部分:数据部分和指针部分。指针部分用于指向下一个节点的地址。这种结构允许高效的插入和删除操作。 链表的节点表示 链表节点的基本结构可以用以下伪代码表示: Node {data // 存储的数据next /…...

视频编辑软件无限音频、视频、图文轨

威力导演APP的特色功能包括无限音频、视频、图文轨&#xff0c;以及上百种二/三维特技转场、音/视频滤镜和多种音视频混编输出。此外&#xff0c;它还支持实时高清HDV格式、模拟信号输出&#xff0c;并具有DV25、DVACM、DV、HDV输入和输出等功能。在视频编辑领域&#xff0c;威…...

NVMe-oF(NVMe over Fabrics)

技术背景与定义 传统存储协议&#xff08;如iSCSI、FC&#xff09;无法发挥NVMe SSD性能&#xff08;如延迟<100μs、IOPS>100万&#xff09;。NVMe-oF&#xff08;NVMe over Fabrics&#xff09;由NVM Express组织于2016年发布&#xff0c;将NVMe协议从本地访问扩展到了…...

uniapp-商城-53-后台 商家信息(更新修改和深浅copy)

1、概述 文章主要讨论了在数据库管理中如何处理用户上传和修改商家信息的问题&#xff0c;特别是通过深浅拷贝技术来确保数据更新的准确性和安全性。 首先&#xff0c;解释了深拷贝和浅拷贝的区别&#xff1a;浅拷贝使得两个变量共享相同的内存地址&#xff0c;而深拷贝则创建新…...

配置 Spark 以 YARN 模式

以下是配置 Spark 以 YARN 模式运行的详细步骤&#xff1a; 环境准备 安装 JDK&#xff1a;所有节点需安装 JDK 1.8 或以上版本&#xff0c;并配置环境变量&#xff0c;确保 JAVA_HOME 正确指向安装路径。安装 Hadoop&#xff1a;安装 Hadoop&#xff08;推荐 3.x 版本&#…...

[Java实战]Spring Boot 整合 Thymeleaf (十)

[Java实战]Spring Boot 整合 Thymeleaf &#xff08;十&#xff09; 引言 在 Java Web 开发领域&#xff0c;Thymeleaf 以其自然模板、无缝 Spring 集成和强大的表达式引擎脱颖而出&#xff0c;成为 Spring Boot 官方推荐的模板引擎。本文将深度解析 Spring Boot 与 Thymelea…...