Pytorch代码分析-如何让Bert在finetune小数据集时更“稳”一点

使用Hugging Face的Pytorch版本BERT模型进行Fine-tune实现文本分类 Hugging Face确实可以让BERT变得很容易使用,这里介绍一下如何使用Hugging Face的Pytorch版本BERT模型进行Fine-tune实现文本分类。 阅读详情

Pytorch代码分析–如何让Bert在finetune小数据集时更“稳”一点

前几天在知乎刷到邱震宇同学的一个文章,如何让 Bert 在 finetune 小数据集时更“稳”一点,主要是分析了一篇论文,感觉很有意思。

小数据集的时候,很容易就训练震荡。作者主要是分析了两个点进行优化。一个是adam偏移修正的问题,一个是权重初始化的问题。

作者通过实验给出的结论是:1.使用误差修正,训练效率提高(收敛变快),开发集效果变好。2.使用权重初始化(后6层),训练效率提高(收敛变快),开发集效果变化不大。

我做了简单的测试,有一个小点和作者结论不太一样,adam的修正并没有加速模型收敛,具体的看正文分析吧。

我基于 huggingface 的 Bert,做了个两个简单的实验,详细情况如下。

1. adam偏移修正

对于adam偏移修正的实验,我这边得到的结果是:使用误差修正,收敛并未变快(反而变慢),训练更加稳定,开发集效果变好。

对于收敛速度这块和作者结论不太一样,多跑了几个种子,都是收敛速度并未变快,希望有关大佬解惑。

1.1 代码情况讲解

首先说一下,在翻看源代码的时候,发现对于抱抱脸的 Bert 的实现,默认偏移修正是开启的,具体代码的位置在这里:

https://github.com/huggingface/transformers/blob/84be482f6698fac822a5113735f2242c6d3abc76/src/transformers/optimization.py#L107

抱抱脸使用的是 AdamW: Adam algorithm with weight decay fix

代码如下

class AdamW(Optimizer):

    def __init__(self,...,correct_bias=True):
    ...
    ...

所以在测试偏移修正的对比的实验的时候,一个是保持默认不变得出一个结果;一个是修改这个参数,你可以在调用函数的时候修改参数传入值,也可以修改源代码,如果是修改的源代码,记得做完实验把代码改回来,别对之后工作造成影响。

1.2 任务基本情况

任务基本情况是这样的:

  • 任务类别:文本分类/15个类别
  • 数据来源: 今日头条新闻数据
  • 数据量级:训练集1K/开发集50k
  • 训练参数:
    • Bert : chinese_l-12_h-768_a-12,使用原始版本未做修改
    • batchsize:16
    • max_seq_length :128
    • learning_rate:2e-5
    • Epoches: 10

因为数据量较小,并且想要观察变化,没使用 earlly stopping,完整的跑完了10个epoch,一共是 600 steps 左右,文中所示图以每隔 10 steps 打点显示,所以最大显示为 60/30。

1.3 结果展示

结果展示分为两个,一个是 Loss 变化图,一个是在开发集 Acc 展示图。

Loss 变化如下图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以看到,没有使用偏移纠正的 loss 收敛的更加的迅速一点,反而使用了修正的模型收敛的慢一点。但是同时可以观测到,修正之后,模型的收敛更加的稳定,相比较而言,并没有特别大的震荡。

Acc变化如下图(后期没怎么变化,所以截取了前300steps):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于在开发集来说,经过修正的收敛速度慢,但是比较稳定,没有大幅度的震荡,准确度相比,有可观收益(图中看不不太明显,无修正最好效果:0.80,加入修正最好效果: 0.82)

2. 权重初始化

权重初始化比较简单,平常任务也试过,因为是文本分类任务,所以在这里只是简单的测试了一下重新初始化 Pooler 层。

Loss结果如下图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从图中可以看出,重新初始化,收敛速度变快了,但是不明显。

Acc没什么变化,就不上图了,没什么变化(主要是被我无意删了,懒得再重跑一次了,不影响大局)

3. 简单总结

简单总结一下:

与没有修正的adam之后,修正之后,模型收敛速度变慢,收敛过程变得稳定,效果提升比较明显。

与没有重新初始化的模型相比,初始化最后一层pooler之后,模型收敛速度有所变快,但是不明显,效果也没有明显变化。

上面这两个实验只是基于邱震宇同学的文章做的,在这里感谢作者。关于收敛速度这里,结果有一点不一样,希望有大佬可以解惑,我也会抽空去看看原论文,仔细研读一下,看论文还有没有值得挖的东西,有任何进展,我再和大家说。

打完收工,看完我这么辛苦画图(真是累死了)的份上,点个赞再撤吧,鞠躬感谢。

2025秋招NLP算法面试真题(三)-Pytorch代码分析-如何让Bert在finetune小数据集时更“稳”一点 Pytorch代码分析--如何让Bert在finetune小数据集时更“稳”一点 阅读详情

相关推荐

同步整流buck电路图设计:手把手入门必看

从零开始拆解同步整流Buck电路图及其原理,手把手带你画出关键拓扑、选型MOSFET、分析续流路径。重点讲清占空比控制逻辑与体二极管导通损耗的规避方法,让buck电路图及其原理真正落地可调、稳定可靠。

weixin_33308579的博客 997

深入Bert实战(Pytorch)----fine-Tuning 2

深入Bert实战(Pytorch)----fine-Tuning 2 https://www.bilibili.com/video/BV1K5411t7MD?p=5 https文章目录深入Bert实战(Pytorch)----fine-Tuning 2前言4. Train Our Classification Model4.1. BertForSequenceClassification4.2. Optimizer & Learning Rate Scheduler4.3. 循环训练5. 在测试集

qq_42388742的博客 3964

Tessy学习系列(三):单元测试——官方例程isValueInRange

注意:工程名称以及路劲不能包含空格和中文

不吃鱼的猫的博客 2348

【译】BERT Fine-Tuning 指南(with PyTorch)

By Chris McCormick and Nick Ryan 原文链接:http://tinyurl.com/y74pvgyc 介绍 历史 2018 年是 NLP 突破的一年,迁移学习、特别是 Allen AI 的 ELMO,OpenAI 的 Open-GPT,以及 Google 的 BERT,这些模型让研究者们刷新了多项任务的基线(benchmark),并提供了容易被微调预训练模型(只需很少的数据量和计算量),使用它们,可产出当今最高水平的结果。但是,对于刚接触 NLP 甚至很多有经验的开发者来..

weixin_43650429的博客 3976

hfss仿真软件入门教程

hfss仿真软件入门教程 1.模型建立 1.1在project种选择insert hfss design 1.2.在hfss-》solution type 中选择modal 1.3.在moderler-》中选择units 设置单温为mm 1.4进行画图操作,这里为提高效率直接导入一个已经画好的cad图。使用modeler-》import 2.设置端口 2.1在更改模型中的材料 选择需要更改材料...

xunshui2007的博客 3万+

UE5Could not be compiled. Try rebuilding from source manually.

UE5Could not be compiled. Try rebuilding from source manually.

weixin_45417260的博客 2771

bert pytorch源码_如何让Bert在finetune小数据集时更“稳”一点

最近刷到一篇论文,题目是Revisiting Few-sample BERT Fine-tuning 。论文刚挂到arxiv上,虽然关注的人还不是很多,但是读完之后发现内容很实用,很适合应用到实际的业务中。本文主要就这篇论文中的一些观点进行解读和实验验证。话不多说,直接进入正题。这篇论文主要探讨的主题是如何更有效地使用bert在小数据集上进行finetune。论文指出目前bert的finetune...

weixin_33986223的博客 432

iOS In-App Purchase 自动续订订阅完整实现指南

本文摘要: 自动续订订阅是iOS应用变现的核心模式,适用于流媒体、云存储等持续服务场景。文章系统讲解了从配置到实现的完整流程:首先对比各类订阅模式特点,解析订阅生命周期和关键术语;然后详细说明App Store Connect中的订阅组创建、产品配置和服务器通知设置;最后展示客户端StoreKit实现方案,包括产品标识符定义、订阅管理器封装和支付队列观察机制。全文提供可落地的代码示例和技术细节,帮助开发者掌握自动续订订阅的全链路实现。

Sheffi 1765

c-free打完代码后怎么显示_Pytorch代码分析-如何让Bert在finetune小数据集时更“稳”(附loss/acc图)...

前几天在知乎刷到邱震宇同学的一个文章,如何让 Bert 在 finetune 小数据集时更“稳”一点,主要是分析了一篇论文,感觉很有意思。小数据集的时候,很容易就训练震荡。作者主要是分析了两个点进行优化。一个是adam偏移修正的问题,一个是权重初始化的问题。作者通过实验给出的结论是:1.使用误差修正,训练效率提高(收敛变快),开发集效果变好。2.使用权重初始化(后6层),训练效率提高(收敛变快),...

weixin_31527905的博客 201

《网络安全自学教程》- SQL注入之报错注入原理+步骤+实战操作

这篇文章为大家解析报错注入的实现原理,结合实战案例讲解报错注入的使用步骤。

wangyuxiang946的博客 1万+

【ARM CoreLink 系列 5.3 -- CI-700 SLC memory 系统组件详细介绍】

在 CI-700 系统级缓存(SLC)内存系统中,HN-F 节点负责管理缓存一致性和数据传输。每个 HN-F 节点可以发送三种类型的 Snoop 请求,以确保系统中多核处理器和缓存之间的一致性。CI-700 中的系统级缓存(SLC)内存系统通过 HN-F 节点支持 TrustZone® 技术。以下是 CI-700 支持的 SN 类型以及配置方法的简要介绍。ARM CI-700 系统级缓存(SLC)是一个分布式、主要排他性(mostly exclusive) 的最后一级缓存,集成在 HN-F 节点内。

CodingCos的博客 898

BERT用于推荐系统的finetune记录

环境 transformers==2.7.0 pytorch ==1.5.1 思想 先说一下这个推荐模型的大概思路: 收集用户和商品对应的评论,数据集用的是亚马逊的 提取用户id、商品id、对应的评论和评分,其中id转化为从0开始的整数 将数据集按一定比例划分为训练集、验证集和测试集 挖掘用户-商品之间评论的语义信息(通过句向量的方式) 根据句向量预测新的评论可能的评分和真实的评分来进行误差计算 如何finetune 一开始始终不明白BERT-finetune的含义 ,我觉得肯定有很多人一开始接触的时候

qq_39609267的博客 1213

儿童启蒙教育APP

pinyinList.add(createPinyin("a", "啊,像阿姨的阿", R.raw.pinyin_a));pinyinList.add(createPinyin("i", "衣,像衣服的衣", R.raw.pinyin_i));pinyinList.add(createPinyin("u", "乌,像乌鸦的乌", R.raw.pinyin_u));pinyinList.add(createPinyin("ü", "鱼,像小鱼的鱼", R.raw.pinyin_v));-- 固定竖屏 -->

寒寒豆豆软件公司的博客 169

bert下游_BERT下游任务finetune列表

BERT下游任务finetune列表finetune基于官方代码改造的模型基于pytorch/tensorflow双版本*** 2019-10-24: 增加ERNIE1.0, google-bert-base, bert_wwm_ext_base部分结果, xlnet代码和相关结果 ****** 2019-10-17: 增加tensorflow多gpu并行 ****** 2019-10-16: 增...

weixin_39939665的博客 598

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

作者:邱震宇(华泰证券股份有限公司 算法工程师)知乎专栏:我的ai之路本文是模型压缩实践系列的第二篇,方法参考自论文:BERT-of-Theseus: ...

hecongqing的博客 1833

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

bert pytorch源码_模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法...

本文是模型压缩实践系列的第二篇,方法参考自论文:BERT-of-Theseus: Compressing BERT by Progressive Module Replacing。本文方法与上一篇讲到的layerdrop有一些相似点,同样聚焦工程实践,基本的核心思想其实并不复杂,非常容易应用到实际的项目场景中。本人也实现了tensorflow版本供大家参考,链接如下:qiufengyuyi/ber...

weixin_42202724的博客 348

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

PyTorch学习—20.模型的微调(Finetune)

文章目录引言一、Transfer Learning & Model Finetune二、PyTorch中模型的Finetune 引言   本节学习模型微调(Finetune)的方法,以及认识Transfer Learning(迁移学习)与Model Finetune之间的关系。 一、Transfer Learning & Model Finetune   Transfer Learning(迁移学习):机器学习分支,研究源域(source domain)的知识如何应用到目标域(target

柳杰的博客 1220

全网最详细的Bert4torch入门教程

全网最详细的Bert4torch入门教程

1154

在bert基础上finetune做中文文本分类

文本分类模型输入的是bert预训练模型和分类类别数量,模型定义非常简单清晰,没有什么太多可以讲述的。初始化模型则需要先导入bert的预训练模型和字符处理的AutoTokenizer类,这里需要说明一下,此次模型训练与博主上一篇博客使用transformers框架导入bert模型提取中文词向量都是在transformers和pytorch框架下开发的,那么预训练模型以及其导入方式也和上一篇博客一样。

weixin_42280271的博客 1153

文本分类pytorch Bert fine tune

基于Bert预训练模型的文本分类fine tune 环境 python==3.7 torch==1.7.1 transformers==4.9.2 scikit-learn==0.21.3 pandas numpy 构建数据集 将数据放到如下图格式的dataframe中,label对应的数字为每种类别的下标。 random seed设置 import torch import numpy as np random_seed = 2018 np.random.seed(random_seed) t

yuhengshi的博客 932

基于bert-base-chinese微调文本相似度模型

微调一下其实蛮简单,其实应用起来重点在于理解bert的输入需要使用tokenizer格式化成标准bert输入(就是把句子里的字符按照词典标号标准化,并且加上各种token标志,进行补齐和截断),然后bert的输出就是<batchsize,句子长度,768>的tensor,后面加上你想要的各种网络就可以了,需要特别注意的就是需要把数据和网络都放在同一个设备上(cpu or GPU)~

weixin_44965520的博客 1万+

Pytorch中数据集太大加载爆内存问题解决记录

问题说明 项目需要,要加载一个具有两千多万条样本的两万多分类问题的数据集在BERT模型上进行Fine tune,我选取了其中2%的数据(约50万条)作为测试集,然后剩下的两千多万条作为训练集。 我按照 Transformers库官方文档里的 Fine-tuning with custom datasets一文中对BERT模型在IMDb数据集上Fine tune的过程进行改写。原代码如下: train_texts, train_labels = read_imdb_split('aclImdb/train')

u011426236的博客 1万+

Pytorch版BERT模型实战:使用Hugging Face进行Fine-tune文本分类

数据集,打开网页下载THUCNews.zip文件即可,里面一共有10个类别,这里只使用了2类,为了加快训练速度,分别用了体育和娱乐。这里直接使用了,transformers下面的AutoTokenizer,使用bert-base-chinese来编码,输出的结果如下。可以看到,这里定义了max_seq_length=20,不足加padding,超过自动截断,头尾加入101,102代表截断。这里的预测准确率为98.9%左右,BERT模型还是YYDS的。训练过程如下所示,训练完成会保存模型。

lazycatlove的博客 886

PyTorch环境下对BERT进行Fine-tuning

PyTorch环境下对BERT进行Fine-tuning 本文根据Chris McCormick的BERT微调教程进行优化并使其适应于数据集Quora Question Pairs里的判断问题对是否一致的任务。(文字部分大部分为原文的翻译) 原文博客地址:https://mccormickml.com/2019/07/22/BERT-fine-tuning/ 原文colab地址:https://colab.research.google.com/drive/1pTuQhug6Dhl9XalKB0zU

周红伟讲AI 1051

bert4torch又双叒叕更新啦!新功能浅析~

bert4torch又双叒叕更新啦!新功能浅析~

u012291116的博客 726
上一篇: FastBert学习笔记
下一篇: tBERT-BERT融合主题模型
onnx
博客等级 码龄5年 1万+粉丝 416原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

onnx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值