Re73 读论文:ULMFiT Universal Language Model Fine-tuning for Text Classification

诸神缄默不语-个人CSDN博文目录
诸神缄默不语的论文阅读笔记和分类

论文全名:Universal Language Model Fine-tuning for Text Classification
模型简称:ULMFiT
模型全名:Universal Language Model Fine-tuning

ArXiv网址:https://arxiv.org/abs/1801.06146
(论文中提供的代码已经过时了)

本文是2018年ACL论文,反正整体思路也是预训练-微调,先预训练,然后在目标数据集上微调语言模型,然后接分类头微调下游任务。模型基底是AWD-LSTM模型(3层LSTM)。
(当年语言模型还是纯纯的语言模型,不是Transformers)
论文整体思路已经讲烂了。主要比较值得在意的内容是微调阶段的几个trick:discriminative fine-tuning (Discr), slanted triangular learning rates (STLR)(“1cycle” Policy), and gradual unfreezing

文章目录

  • 1. 背景
  • 2. ULMFiT
    • 2.1 AWD-LSTM
    • 2.2 Discr
    • 2.3 STLR
    • 2.4 下游任务微调
  • 3. 实验
    • 3.1 数据集
    • 3.2 对比实验
    • 3.3 模型分析
  • 4. 复现代码
    • 4.1 fastai包
  • 参考资料

1. 背景

预训练-微调模式常用于CV领域,本文将其应用于NLP中的文本分类任务。

本文研究的是inductive迁移学习。
transductive和inductive的区别我主要在GNN那几篇博文里写了,在此不再赘述。
NLP transductive迁移学习((2007 ACL) Biographies, Bollywood, Boom-boxes and Blenders: Domain Adaptation for Sentiment Classification)似乎指的是那种传统的迁移学习方法 SCL (Structural Correspondence Learning),找两个领域的公共特征(Pivot feature)。
inductive迁移学习的前作是word2vec和合并其他任务输出的embeddings到当前模型中(1和ELMo),但是主模型还是需要从0开始训练,只固定预训练embeddings。

(2015) Semi-supervised Sequence Learning:微调,但需要大量数据

微调:
(2015 SemEval) UNITN: Training Deep Convolutional Neural Network for Twitter Sentiment Classification
(2015) Improving neural machine translation models with monolingual data
(2017 ACL) Question Answering through Transfer Learning from Large Fine-grained Supervision Data

LM直接加分类头在小数据集上微调会导致灾难性遗忘。

2. ULMFiT

在这里插入图片描述
(不知道为什么看这个图我给联想到了verifier……但是性质不一样,我就不延伸了)

原任务:语言模型
优势:能捕捉多样知识,数据充分

微调:
语言模型(discriminative fine-tuning (‘Discr’) and slanted triangular learning rates (STLR))→ 分类器(gradual unfreezing, ‘Discr’, and STLR)

2.1 AWD-LSTM

原论文:(2017) Regularizing and Optimizing LSTM Language Models

LSTM + 多样化微调的dropout

2.2 Discr

Discriminative fine-tuning

主旨:不同层用不同的学习率

SGD更新参数:
在这里插入图片描述

Discr更新参数:
在这里插入图片描述
经验之选: η l − 1 = η l / 2.6 \eta^{l-1}=\eta^l/2.6 ηl1=ηl/2.6

2.3 STLR

slanted triangular learning rates

从低学习率开始线性增长,最后下降回初值。这种方法使模型能够探索更广泛的学习率范围,从而摆脱次优局部极小值,最终获得更好的解决方案。

在这里插入图片描述

在这里插入图片描述

2.4 下游任务微调

2个线性模块:batch normalization,dropout,ReLU

Concat pooling
在这里插入图片描述

Gradual unfreezing:从最后一层开始解冻,一个epoch解冻一层

BPTT for Text Classification (BPT3C)
backpropagation through time (BPTT)

Bidirectional language model

3. 实验

详细实验设置略。

3.1 数据集

在这里插入图片描述

3.2 对比实验

评估指标:error rates

在这里插入图片描述

3.3 模型分析

在不同训练集规模下,是否使用预训练-微调范式产生的模型效果差异,以及是否利用无标签数据做语言模型训练(半监督学习)的效果差异:
在这里插入图片描述

预训练的效果:
在这里插入图片描述

基语言模型的效果:
在这里插入图片描述

预训练阶段的trick:
(full是直接全量微调)
在这里插入图片描述
(freez是gradual unfreezing,cos是aggressive cosine annealing schedule,last常用于CV2
在这里插入图片描述

在这里插入图片描述

LM的双向性也带来了效果提升

4. 复现代码

4.1 fastai包

参考官方教程:https://docs.fast.ai/tutorial.text.html

我写了个colab文件,可以直接运行(第2个一级标题那里开始是ULMFiT的代码,先在IMDB数据集上预训练语言模型,然后在IMDB数据集上微调分类器):https://colab.research.google.com/drive/1hXYiutt_tTKIB-rP_MvdOjVSa2tk2h6y?usp=sharing

参考资料

  1. Let’s learn about Universal Language Model Fine-tuning, ULMFiT | by Ashley Ha | Medium:这篇文章里面的代码已经老到和最新版的fastai包不兼容了,但是理论还是可供参考的,简单介绍了一下预训练-微调范式是怎么一回事
  2. 迁移学习_迁移学习简明手册(王晋东)_阅读笔记7-8_structural corresponding learning-CSDN博客

  1. (2016 EMNLP) How Transferable are Neural Networks in NLP Applications?
    (2017 ACL) Semi-supervised sequence tagging with bidirectional language models
    (2017 ACL) Revisiting Recurrent Networks for Paraphrastic Sentence Embeddings
    (2017 EMNLP) Supervised Learning of Universal Sentence Representations from Natural Language Inference Data
    (2017 Advances in Neural Information Processing Systems) Learned in Translation: Contextualized Word Vectors ↩︎

  2. 在早期的计算机视觉迁移学习工作中,微调的方法通常分为两种主要模式:固定特征提取和完全微调。
    固定特征提取:这一方法通常会冻结预训练网络的大部分层,只对最后一层进行重新训练。例如,在使用预训练的VGG16模型时,常常会冻结所有卷积层,只训练新的全连接层。这种方式利用了预训练模型的已有特征提取能力,仅通过调整最后的分类层来适应新任务。
    参考资料:(1) Transfer Learning for Computer Vision Tutorial — PyTorch Tutorials 2.3.0+cu121 documentation (2) Hands-on Transfer Learning with Keras and the VGG16 Model – LearnDataSci
    完全微调:这一方法会在整个网络上进行训练,但前几层的权重变化通常很小,只在后几层进行较大的调整。一般来说,早期层学到的是通用特征(如边缘、纹理等),这些特征对于大多数视觉任务都是有用的,而后期层则学到的是特定任务的特征
    参考资料:迁移学习和微调 | TensorFlow Core

    具体来说,微调时常见的操作包括:
    ① 冻结前几层,只训练最后几层以适应新任务。
    ② 逐层解冻:首先冻结所有层,然后逐渐解冻靠近输出层的几层,最后解冻更多层,直至整个网络。
    ③ 部分冻结:有时会只解冻中间几层,保持前几层和后几层的冻结状态,以利用中间层的特征表达。(参考资料:What Is Transfer Learning? A Guide for Deep Learning | Built In)

    在不同的任务和数据集上,哪种方法效果最好可能会有所不同,因此实际应用中需要根据具体情况进行实验和调整。 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/339076.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

513.找树左下角的值

给定一个二叉树,在树的最后一行找到最左边的值。 示例 1: 示例 2: 思路: 深度最大的叶子结点一定是最后一行。 优先左边搜索,记录深度最大的叶子节点,此时就是树的最后一行最左边的值 代码: class Solution:def fi…

语言模型的校准技术:增强概率评估

​ 使用 DALLE-3 模型生成的图像 目录 一、说明 二、为什么校准对 LLM 模型至关重要 三、校准 LLM 概率的挑战 四、LLM 的高级校准方法 4.1 语言置信度 4.2 增强语言自信的先进技术 4.3 基于自一致性的置信度 4.4 基于 Logit 的方法 五、代理模型或微调方法 5.1 使用代…

Python 网络爬虫:深入解析 Scrapy

大家好,在当今数字化时代,获取和分析网络数据是许多项目的关键步骤。从市场竞争情报到学术研究,网络数据的重要性越来越被人们所认识和重视。然而,手动获取和处理大量的网络数据是一项繁琐且耗时的任务。幸运的是,Pyth…

Stable Diffusion安装记录II

文章目录 前言0 更改python路径(跳过)1 Torch is not able to use GPU1.1 确认显卡1.2 安装nvdia驱动 1.3 检查CUDA1.4更改启动脚本 2 依赖安装2.1 pip install报错2.2 git报错2.3 卡在installing requirements 3 启动咯~3.1 clip报错 4 成功运行4.1 遗留…

go 针对 time类型字段,前端查询,后端返回数据格式为UTC时间

测试代码 package mainimport ("context""log""net/http""time""github.com/gin-gonic/gin""go.mongodb.org/mongo-driver/bson""go.mongodb.org/mongo-driver/bson/primitive""go.mongodb.org/m…

Ubuntu22.04之解决:Flameshot无法截图问题(二百三十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

低代码是什么?开发系统更有什么优势?

低代码(Low-Code)是一种应用开发方法,它采用图形化界面和预构建的模块,使得开发者能够通过少量的手动编程来快速创建应用程序。这种方法显著减少了传统软件开发中的手动编码量,提高了开发效率,降低了技术门…

Django ORM深度游:探索多对一、一对一与多对多数据关系的奥秘与实践

系列文章目录 Django入门全攻略:从零搭建你的第一个Web项目Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解Django ORM深度游&#xff…

堆排序-java

这次主要讲了堆排序和堆的基本构造,下一期会详细讲述堆的各种基本操作。 文章目录 前言 一、堆排序 1.题目描述 2.堆 二、算法思路 1.堆的存储 2. 结点下移down 3.结点上移up 4.堆的基本操作 5.堆的初始化 三、代码如下 1.代码如下: 2.读入数据&#xff…

重庆人文科技学院建立“软件安全产学研基地”,推动西南地区软件安全发展

5月29日,重庆人文科技学院与开源网安签订了《产学研校企合作协议》,并举行了“重庆人文科技学院产学研基地”授牌仪式,此次合作不仅深化了双方在软件安全领域的产学研紧密联结,更是对川渝乃至西南地区软件供应链安全发展起到重要的…

C++17之std::void_t

目录 1.std::void_t 的原理 2.std::void_t 的应用 2.1.判断成员存在性 2.1.1.判断嵌套类型定义 2.1.2 判断成员是否存在 2.2 判断表达式是否合法 2.2.1 判断是否支持前置运算符 2.2.3 判断两个类型是否可做加法运算 3.std::void_t 与 std::enable_if 1.std::void_t 的…

相机等效焦距

1. 背景 物理焦距我们很熟悉,但是在接触实际的相机参数时,相机厂家会提到一个参数等效焦距,甚至有时候不提供物理焦距,这时候如果我们得到真实的物理焦距需要进行一定的转换.在介绍两者之间的转换关系前,先介绍一下等效焦距的由来. 如上图,假设在某一个镜头,其成像面会出现图…

操作系统 - 文件管理

文件管理 考纲内容 文件 文件的基本概念;文件元数据和索引节点(inode) 文件的操作:建立,删除,打开,关闭,读,写 文件的保护;文件的逻辑结构;文件的物理结构目录 目录的基…

Multipass虚拟机磁盘扩容

Multipass 是一个用于轻松创建和管理 Ubuntu 虚拟机的工具,特别适合开发环境。要使用 Multipass 扩大虚拟机的磁盘容量,你需要经历几个步骤,因为 Multipass 自身并不直接提供图形界面来调整磁盘大小。不过,你可以通过结合 Multipa…

UE5 Http Server

前言 最近要用UE 作为一个服务器去接收来自外部的请求,从而在UE中处理一些内容,但是之前只做过请求,哪整过这玩意,短期内还得出结果,那怎么搞嘞,本着省事的原则就找找呗,有没有现成的&#xff0…

Golang | Leetcode Golang题解之第123题买卖股票的最佳时机III

题目&#xff1a; 题解&#xff1a; func maxProfit(prices []int) int {buy1, sell1 : -prices[0], 0buy2, sell2 : -prices[0], 0for i : 1; i < len(prices); i {buy1 max(buy1, -prices[i])sell1 max(sell1, buy1prices[i])buy2 max(buy2, sell1-prices[i])sell2 m…

【Linux】进程间通信(System V IPC)

这节我们开始学习System V IPC方案。 分别是共享内存&#xff0c;消息队列与信号量 会着重讲解共享内存&#xff0c;但是消息队列与信号量只会说明一下原理。 原因&#xff1a;System V是新设计的一套标准 与文件的整合度不高只能进行本地通信 更何况&#xff0c;我们现在有…

IP代理池是什么?

从事跨境行业的朋友们总会有一个疑问&#xff0c;为什么自己所合作的IP代理商的IP在使用的过程中账号会有莫名封禁的问题&#xff0c;会不会是自己在使用的过程中错误的操作违反了平台的规则&#xff0c;其实不然有可能会是IP代理池纯净度不高的问题&#xff0c;有可能自己在使…

基于Jenkins+Kubernetes+GitLab+Harbor构建CICD平台

1. 实验环境 1.1 k8s环境 1&#xff09;Kubernetes 集群版本是 1.20.6 2&#xff09;k8s控制节点&#xff1a; IP&#xff1a;192.168.140.130 主机名&#xff1a;k8s-master 配置&#xff1a;4C6G 3&#xff09;k8s工作节点 节点1&#xff1a; IP&#xff1a;192.1…

基于字典树可视化 COCA20000 词汇

COCA20000 是美国当代语料库中最常见的 20000 个词汇&#xff0c;不过实际上有一些重复&#xff0c;去重之后大概是 17600 个&#xff0c;这些单词是很有用&#xff0c;如果能掌握这些单词&#xff0c;相信会对英语的能力有一个较大的提升。我很早就下载了这些单词&#xff0c;…