【论文阅读笔记】Universal Language Model Fine-tuning for Text Classification

本文介绍了一种名为ULMFiT的NLP迁移学习方法,通过通用语言模型微调,结合区分微调、三角变化学习率等技巧,显著提升了多种NLP任务的表现。实验证明,该方法在多个数据集上的错误率低于其他文本分类方法,尤其在监督和半监督学习中,所需数据更少但效果更佳。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

发表日期:2018.5.23

论文作者:fast.ai

 

文章开源代码:http://nlp.fast.ai/category/classification.html

主要内容:

     在计算机视觉领域,迁移学习的使用和对目标任务效果的提升已经有目共睹,但在NLP领域,由于模型相对计算机视觉领域较浅,而且由于语言任务的复杂性,通常需要不同的模型微调方法,导致迁移学习在NLP领域使用较困难。本文提出一种通用的NLP迁移学习方法,使用通用语言模型微调(ULMFiT)并介绍了用于微调模型的关键技巧。通过对多种NLP任务的测试,验证的模型的有效性。

     

整个模型如上图分为三阶段:

第一阶段:General-domain LM pretrainning

       使用大型有标记语料库对模型进行预训练,类似CV领域使用ImageNet对模型进行预训练。论文使用的模型是AWD-LSTM,采用的语料库是Wikitext-103。

 

第二阶段:Target task LM fine-tuning

      在待解决的目标问题上进行模型训练微调。此阶段使用了两个小技巧:

      (1)  Discriminative fine-tuning(区分微调)

      不同的网络层捕获的是不同的信息,所以微调时应该区分对待,每一层设置一个学习率的方法(第一层的特征具有通用性,所以设置相对较小的学习率,高层的特征与具体任务相关,因此设置相对较大的学习率)。通常使用的梯度下降更新不同层使用同样的学习率,文中采用不同的学习率:

    

        首先选择最后一层的学习率进行微调,然后在确定倒数第二层的学习率,以此类推,文中没有给出理由的使用了

    (2)Slanted triangular learning rate(三角变化的学习率)

        学习率先逐渐增加后逐渐下降(由于具体任务的变化,先用较小的学习率,得到一个好的优化方向,再使用较大的学习率,进行优化,在训练后期再使用较小的学习率进行更细致的优化

    

       其中T是总的迭代次数,cut_frac是斜率变化点所在迭代次数占总次数的百分比。ratio指示最小学习率和最大学习率之间的差距。

 

第三阶段:Target task classifier fine-tuning(上层分类器训练)

      除了使用了batch normalization,Drop,Relu,Softmax等常规技术外,文章还是用的其他技巧:

     (1)Concat pooling(级联池化)

    

     由于输入的文档通常包含成百上千的词,如果只考虑模型最后的隐层,信息可能会丢失,因此根据GPU内存情况,尽可能多的把把RNN模型里每一个时刻的输出pooling一下,然后concat到最后一层特征上。

    (2)Gradual unfreezing(逐步解冻)

    首先解冻最后一层进行微调,然后解冻倒数第二层,将已解冻的两层微调,以此类推,每个Epoch向下解冻一层,直至所有层都微调完毕。

    (3) BPTT for Text Classification (BPT3C)

     将文本分为固定大小的batch,使用边长反向传播序列。

    (4)Bidirectional language model(双向语言模型)

    分别独立的训练正向和逆向语言模型,然后取平均。

  

   实验验证:

     作者在六个比较常用的数据集上评估了该方法,这些数据文档的数量以及文档的长度都不尽相同,在三个常见的分类任务(情感分析、问题分类、主题分类)上进行实验。通过和其他的一些文本分类方法进行比较,作者提出的ULMFiT方法错误率最低,效果最好。在三类分类任务上,ULMFit的监督学习、半监督学习需要的数据比从头训练模型的数据要少得多,但是错误率却更低,模型的效果更好。

    

    讨论LM fine-tuning的影响:

    论文中作者除了使用微调的方法,还增加了很多技巧以优化模型,所以需要对微调的方法是否有效进行讨论。通过实验可以看出,从零开始训练模型和使用ULMFiT的方法,在三个测试集上错误率下降幅度较大,后面增加各种trick,使得模型的错误率进一步下降,但是下降的幅度却并不是很大,所以可以看出,确实是ULMFiT的方法是有效。

   值得借鉴的地方:

1、NLP的迁移学习。

2、模型中的一些小技巧。

### Parameter-Efficient Fine-Tuning (PEFT) 的背景 Parameter-Efficient Fine-Tuning 是一种针对基础模型(Foundation Models)优化的技术,旨在通过仅调整一小部分参数来实现高效的微调过程。这种方法不仅减少了计算资源的需求,还提高了训练效率[^1]。 在神经网络中,通常会应用正则化技术以防止过拟合并促进泛化能力。这些技术可以强制模型学习更小的权重参数,从而减少复杂度和潜在的风险。对于大规模的基础模型而言,Parameter-Efficient Fine-Tuning 方法进一步扩展了这一理念,专注于更新少量的关键参数而非整个模型的所有参数。 ### 如何获取 PEFT 论文 PDF? 为了下载有关 **Parameter-Efficient Fine-Tuning for Foundation Models** 的论文,可以通过以下几种方式: #### 1. 使用学术搜索引擎 利用 Google Scholar 或 Semantic Scholar 这样的平台输入关键词 “Parameter-Efficient Fine-Tuning”,即可找到相关研究文章及其链接。大多数情况下,可以直接访问免费版本或者通过机构权限下载全文[^2]。 #### 2. GitHub 和开源社区 许多研究人员会在其个人主页或 GitHub 上分享研究成果以及配套代码库。例如,在 awesome-LLM-resources 项目中可能包含了大量关于大语言模型(LLMs)及相关主题的资料汇总,其中包括 PEFT 技术的应用实例与理论解释。 以下是 Python 实现的一个简单示例,展示如何加载预定义适配器来进行高效微调: ```python from peft import get_peft_model, LoraConfig, TaskType # 定义 LoRA 配置 peft_config = LoraConfig( task_type=TaskType.CAUSAL_LM, inference_mode=False, r=8, lora_alpha=32, lora_dropout=0.1, ) model = ... # 加载基础模型 peft_model = get_peft_model(model, peft_config) ``` 此脚本片段展示了基于 Hugging Face 提供的 `peft` 库创建低秩适应层的过程,这是实现 parameter-efficient fine-tuning 常见的一种方法之一。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值