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

女生自己做网站wordpress公众号采集

女生自己做网站,wordpress公众号采集,山东省住房和城乡建设厅服务网站,莱芜网站建设费用Fine-Tuning: 大模型微调理论及方法, PytorchHuggingFace微调实战 文章目录 Fine-Tuning: 大模型微调理论及方法, PytorchHuggingFace微调实战1. 什么是微调(1) 为什么要进行微调(2) 经典简单例子#xff1a;情感分析任务背景微调 (3) 为什么微调work, 理论解释下 2…Fine-Tuning: 大模型微调理论及方法, PytorchHuggingFace微调实战 文章目录 Fine-Tuning: 大模型微调理论及方法, PytorchHuggingFace微调实战1. 什么是微调(1) 为什么要进行微调(2) 经典简单例子情感分析任务背景微调 (3) 为什么微调work, 理论解释下 2. 详细介绍微调的流程(1) 准备数据, 预处理(2) 微调策略**前三种都差不多的逻辑, 古早**1. 冻结, 逐层微调2. 部分参数微调3. 全参数微调4. LoRA(低秩适应)5. Prompt Tuning6. RLHF(基于人类反馈的强化学习)7. Prefix Tuning8. Adapter微调 (3) 设置微调超参数(4) 训练, 评估 3. 具体怎么做常用的微调框架HuggingFace版Pytorch版Pytorch vs HuggingFace易用性:灵活性性能 1. 什么是微调 大模型微调是指在预训练的大型模型基础上使用特定数据集进行进一步训练以适应特定任务或领域。 (1) 为什么要进行微调 大模型虽然知识丰富(由于其极大批量的预训练任务)但在特定领域可能不够准确。微调能让模型更好地理解特定任务。相比从头开始训练一个新模型微调节省了大量时间和计算资源(站在前人的肩膀上), 只需少量的数据就能有效提升模型在特定领域的性能。 (2) 经典简单例子情感分析 任务 训练一个情感分析模型 背景 硬件很烂, 不可能从头训练一个情感分析大模型 但已经有预训练的语言模型比如BERT已经在大量文本上进行过训练(这叫预训练)。 微调 BERT本身没有直接判断情感的能力, 但由于其在大量文本上进行的预训练任务, 其具有很多自然语言领域的 知识(预训练的权重), 通过少量的情感分析数据, 和合适的微调策略, 就能低成本的(数据, 算力)来微调出一个能进行情感分析的BERT (3) 为什么微调work, 理论解释下 迁移学习: 深度学习模型有分层学习特征的特点, 底层学习通用特征, 高层学习任务相关特征, 将通用特征的知识迁移到相关的特定领域, 合理统计学: 预训练可以看作为参数分布的先验估计, 微调就是在已有先验知识的基础上结合新数据 2. 详细介绍微调的流程 (1) 准备数据, 预处理 首先收集数据, 分成训练验证测试, 老生常谈, 都2024年了就不多说了 预处理: 每种大模型都有特定的输入格式, 要把原始数据转换成预训练大模型认识的数据输入 (2) 微调策略 策略有很多, 也有很多新冒出来的策略, 说一些常见的 前三种都差不多的逻辑, 古早 1. 冻结, 逐层微调 冻结就是权重固定, 不会再反向传播调整了 在这种策略中模型的一部分参数被冻结仅对特定层进行微调。逐层解冻的方法允许从顶层开始逐步释放冻结状态以平衡预训练知识与新任务学习之间的关系. 2. 部分参数微调 和逐层微调本质上类似, 仅选择性地更新模型中的某些权重通常是顶层或最后几层而保持底层的大部分权重不变(冻结). 3. 全参数微调 全部参数都会反向传播, 这种方法资源消耗很大, 对数据要求也很高, 而且容易导致灾难性遗忘 灾难性遗忘(Catastrophic Forgetting): 微调模型在学习新任务时突然或彻底忘记其预训练所学到的知识 4. LoRA(低秩适应) LoRA通过在模型的每一层引入可训练的低秩矩阵来进行微调, 自适应的调整部分参数. 5. Prompt Tuning 轻量级的微调方法不改变模型的主参数(全部冻结)通过为特定任务设计可学习的提示prompt来引导模型生成期望的输出。 6. RLHF(基于人类反馈的强化学习) 利用人类的反馈来纠正模型, 生成符合期望的结果 7. Prefix Tuning 在输入的前面前拼一些可训练的参数使得模型在处理任务时能够更好地理解输入意图 8. Adapter微调 模型层之间插入小型可训练模块这些模块可以适应新任务而不影响原始模型的参数 (3) 设置微调超参数 设置/调整 学习率, BatchSize等参数, 让模型能收敛和防止拟合不好, 后面介绍 (4) 训练, 评估 用现成的框架训练, 验证, 测试, 后面介绍 3. 具体怎么做 由于深度学习技术的不断成熟, 各种稳定易用的框架逐渐出现, 让微调过程仅需要少许代码就能实现, 下面看看例子 常用的微调框架 Hugging Face Transformer Pytorch HuggingFace版 用HuggingFace对GraphCodeBERT进行微调 import torch from transformers import RobertaTokenizer, RobertaForSequenceClassification, Trainer, TrainingArguments# 加载预训练模型和tokenizer tokenizer RobertaTokenizer.from_pretrained(microsoft/graphcodebert-base) model RobertaForSequenceClassification.from_pretrained(microsoft/graphcodebert-base)# 准备数据, 数据的预处理一般比较复杂 train_data [...] # 训练数据 train_encodings tokenizer(train_data, truncationTrue, paddingTrue)# 定义训练参数 training_args TrainingArguments(output_dir./results,num_train_epochs3,per_device_train_batch_size16,save_steps10_000,save_total_limit2, )# 创建Trainer实例并开始训练 trainer Trainer(modelmodel,argstraining_args,train_datasettrain_encodings, )trainer.train()实际肯定不止这么简单, 细节比较多, 比如数据的预处理, 和自定义的训练和评估. 由于各种下游任务的多样性, 不同任务的数据/标签差异非常大,这里没办法根据每种任务详细介绍预处理流程, 故在此略过. 我们一般需要自己写很多数据预处理的代码, 构造数据, 使得预训练模型能够接受数据输入. 再或是训练和评估, 由于使用者对模型的需求不同, 训练和评估过程也不一定相同, 自定义的流程往往需要写一些代码, 但是基本的训练和评估流程是封装好的. 代码中给出来了 一些基本的东西在HuggingFace中都有稳定的接口, 比如微调的策略, 参数定义, 基本的训练评估流程, 都是即插即用的 Pytorch版 用pytorch对BERT 使用RLHF策略 在情感分析任务上进行微调 import torch import torch.nn as nn from transformers import BertTokenizer, BertForSequenceClassification, AdamW from torch.utils.data import DataLoader, Dataset# 假设我们有一个简单的数据集 class CustomDataset(Dataset):def __init__(self, texts, labels):self.texts textsself.labels labelsself.tokenizer BertTokenizer.from_pretrained(bert-base-uncased)def __len__(self):return len(self.texts)def __getitem__(self, idx):encoding self.tokenizer(self.texts[idx], paddingmax_length, truncationTrue, return_tensorspt, max_length128)return {input_ids: encoding[input_ids].flatten(),attention_mask: encoding[attention_mask].flatten(),labels: torch.tensor(self.labels[idx], dtypetorch.long)}# 1. 监督微调SFT def supervised_fine_tuning(model, dataloader):model.train()optimizer AdamW(model.parameters(), lr5e-5)for epoch in range(3): # 假设训练3个epochfor batch in dataloader:optimizer.zero_grad()input_ids batch[input_ids]attention_mask batch[attention_mask]labels batch[labels]outputs model(input_idsinput_ids, attention_maskattention_mask, labelslabels)loss outputs.lossloss.backward()optimizer.step()print(fLoss: {loss.item()})# 2. 奖励模型训练 def train_reward_model(model, reward_data):# 假设reward_data包含文本和对应的奖励分数model.train()optimizer AdamW(model.parameters(), lr5e-5)for epoch in range(3): # 假设训练3个epochfor text, reward in reward_data:inputs tokenizer(text, return_tensorspt, paddingTrue, truncationTrue)optimizer.zero_grad()outputs model(**inputs)reward_loss nn.MSELoss()(outputs.logits.squeeze(), torch.tensor(reward, dtypetorch.float32))reward_loss.backward()optimizer.step()print(fReward Loss: {reward_loss.item()})# 3. RLHF训练 def rl_training(actor_model, critic_model, dataloader):actor_model.train()critic_model.eval() # 奖励模型在评估模式for epoch in range(3): # 假设训练3个epochfor batch in dataloader:input_ids batch[input_ids]attention_mask batch[attention_mask]# 使用actor模型生成输出actor_outputs actor_model(input_idsinput_ids, attention_maskattention_mask)# 使用critic模型评估输出的奖励with torch.no_grad():critic_outputs critic_model(input_idsinput_ids, attention_maskattention_mask)# 根据奖励调整actor模型的参数PPO等算法可在此实现# 此处省略具体的PPO实现需根据具体需求添加# 示例数据集和模型初始化 texts [I love this!, This is terrible.] labels [1, 0] # 假设1为正面0为负面dataset CustomDataset(texts, labels) dataloader DataLoader(dataset, batch_size2)model BertForSequenceClassification.from_pretrained(bert-base-uncased, num_labels2)# 执行微调流程 supervised_fine_tuning(model, dataloader)# 假设我们有一些奖励数据用于训练奖励模型 reward_data [(I love this!, 1.0), (This is terrible., 0.0)] train_reward_model(model, reward_data)# 最后进行RLHF训练需实现具体的PPO算法 rl_training(model, model) # 此处使用同一模型作为示例Pytorch vs HuggingFace 易用性: ​ HuggingFace的API非常简洁, 并且有丰富的涵盖多个领域的预训练模型库, 集成了多种常用的微调策略, 比如上面提到的LoRA等, 还有活跃的社区和丰富的文档 ​ Pytorch缺乏高层封装, 在比如数据处理, 模型保存上需要用户手动实现更多的功能, 学习曲线陡峭 灵活性 ​ HuggingFace灵活性不如Pytorch, 在高度自定义场景下, Pytorch表现更佳 性能 ​ 在一些情况下, Pytorch在计算上设计了专门的优化, HuggingFace的高层API不如Pytorch的性能优化高效 ​ ​
http://www.yayakq.cn/news/5046/

相关文章:

  • 企业网站建完后没人重庆网站关键词优化推广
  • 深圳市专业做网站小程序登录不上什么原因
  • 江苏建设一体化平台网站职业技能证书查询入口
  • 企业网站的设计网站开发都学什么
  • 手机怎么网站建设嘉兴做网站公司哪家好
  • 浙江建设技术职业学院网站湖南网络公司关于我们
  • 中国新农村建设促进会网站网站开发的搭建框架是什么意思
  • 服装网站论文网站用户 微信商城
  • 广州网站建设加盟什么网站赚的钱最多
  • 沂南建设局网站网站域名查询注册
  • 网站维护提示页面模板离我最近的物流公司
  • 在互联网上建设网站可选择的方案有领导高度重视门户网站建设
  • 官网设计比较好看的网站网站文章页301重定向怎么做
  • 吉林网站建设公司展厅装修效果图
  • 网站建设方案标书深圳公司注册登记中心
  • 怎么做网站自动响应那个网站做玉石最专业
  • 网盘网站建设设计专业自学网站
  • 肃宁县网站建设公司万网是什么网站
  • 怎么评价网站做的好坏个人网站名可以和别人一样吗
  • 网站开发询价表模板下载网站系统怎么做
  • wordpress有识图插件长沙谷歌优化
  • 网站后台维护一般要怎么做2345小游戏
  • 做百度网站那家好wordpress 自定义 分类
  • 怎么样自己做最简单的网站潍坊企业建站系统
  • 金华网站建设公司哪家好vs网站制作教程
  • 福建省建设职业管理中心网站小型办公室网络组建
  • 中国建筑官网首页seo线下培训课程
  • 绮思网站建设qswoo做 理财网站好
  • 网站开发和前端和数据媒体打开国外网站很慢
  • 深圳微商城网站设计制作wordpress 用ip访问