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.mzph.cn/news/846644.shtml

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

相关文章

【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版6(附带项目源码)

最终效果 系列导航 文章目录 最终效果系列导航前言方法一、使用excel配置表excel转txt文本读取txt数据按配置信息生成僵尸 方法二、使用ScriptableObject 配置关卡信息源码结束语 前言 本节主要是推荐两种实现配置关卡信息,并按表生成僵尸和关卡波次 方法一、使用…

PCIe总线-事物层之TLP路由介绍(七)

1.概述 下图是一个PCIe总线系统示意图。此时RC发出一个TLP,经过Switch访问EP,TLP的路径为红色箭头所示。首先TLP从RC的下行OUT端口发出,Switch的上行IN端口接收到该TLP后,根据其路由信息,将其转发到Switch的下行OUT端…

Google力作 | Infini-attention无限长序列处理Transformer

更多文章,请关注微信公众号:NLP分享汇 原文链接:Google力作 | Infini-attention无限长序列处理Transformerhttps://mp.weixin.qq.com/s?__bizMzU1ODk1NDUzMw&mid2247485000&idx1&sne44a7256bcb178df0d2cc9b33c6882a1&chksm…

Linux的shell脚本:如何用bash脚本从mysql数据库中直接读取用户数据,并直接显示出来(一条命令查看数据库信息)

目录 一、要求 二、脚本和解释 三、脚本执行 1、 脚本保存为sh文件 2、给脚本赋予执行权限 3、运行脚本 四、Bash脚本中,可以使用哪些MySQL语句 1、连接到MySQL数据库 2、执行SQL语句 3、查询并显示结果 4、脚本中执行SQL文件 5、数据库操作 …

Vue.js 动态组件与异步组件

title: Vue.js 动态组件与异步组件 date: 2024/6/2 下午9:08:50 updated: 2024/6/2 下午9:08:50 categories: 前端开发 tags:Vue概览动态组件异步加载性能提升路由管理状态控制工具生态 第1章 Vue.js 简介 1.1 Vue.js 概述 Vue.js 是一个渐进式的JavaScript框架,…

《论文阅读》通过顺序不敏感的表示正则化实现稳健的个性化对话生成 ACL 2023

《论文阅读》通过顺序不敏感的表示正则化实现稳健的个性化对话生成 ACL 2023 前言 相关个性化生成论文推荐简介问题定义方法损失函数实验结果 前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手…

中间件模版引擎

文章目录 中间件1.自定义中间件1)全局2)局部中间件 2.内置中间件(静态资源目录) Art-template1.模板语法1)输出2)原文输出3)条件判断4)循环5)子模版6)模版继承7&#xff…

vue-Dialog 自定义title样式

展示结果 vue代码 <el-dialog :title"title" :visible.sync"classifyOpen" width"500px" :showClose"false" class"aboutDialog"> <el-form :model"classifyForm" :rules"classifyRules">…

【OJ】C++ | 二叉树进阶 · 合集(2)

摘要&#xff1a;根据二叉树创建字符串、二叉树的最近公共祖先、二叉树的层序遍历 前言&#xff1a;承接上文&#xff0c;本文继续提供二叉树进阶有关题目的解法。如有错误&#xff0c;烦请指正。 目录 1. 根据二叉树创建字符串 题解及代码 2. 二叉树的最近公共祖先 题解及…

Java | Leetcode Java题解之第121题买卖股票的最佳时机

题目&#xff1a; 题解&#xff1a; public class Solution {public int maxProfit(int prices[]) {int minprice Integer.MAX_VALUE;int maxprofit 0;for (int i 0; i < prices.length; i) {if (prices[i] < minprice) {minprice prices[i];} else if (prices[i] -…

用幻灯片讲解C++中的C语言风格数组

用幻灯片讲解C中的C语言风格数组 1.栈内存中的C风格数组 糟糕的可用性&#xff0c;但你将在遗留代码中看到它们。相同类型的对象块。大小必须是常量表达式。第一个元素的索引为0&#xff0c;即数组索引从0开始。 注意一下数组的初始化&#xff0c;使用了C11标准之后的统一初始…

数学建模--特殊的图

目录 1.二部图 &#xff08;1&#xff09;简单认识 &#xff08;2&#xff09;定义 &#xff08;3&#xff09;判定定理 &#xff08;4&#xff09;定理理解 2.匹配问题 &#xff08;1&#xff09;匹配 &#xff08;2&#xff09;完备&&完美匹配 &#xff08;3…

Python 入门教程详细版全集(两周速成)

一、初始Python 打开CMD&#xff08;命令提示符&#xff09;程序&#xff0c;输入Python并回车。然后&#xff0c;在里面输入代码回车即可立即执行。 Tip1:找不到“命令提示符”程序在哪里&#xff1f; 使用快捷键&#xff1a;win r;打开运行框&#xff0c;输入cmd后回车即可…

chat2-Client发送数据给Server

本文档描述了Client发送消息给Server&#xff0c; Server端打印接收的消息 一、Client 1.1.客户端的类Client.java中添加如下的start()方法 (表示启动客户端功能的方法)&#xff0c;并调用 /**start方法&#xff0c;作为客户端开始工作的方法*/ public void start(){ …

自然语言处理(NLP)—— 神经网络语言处理

1. 总体原则 1.1 深度神经网络&#xff08;Deep Neural Network&#xff09;的训练过程 下图展示了自然语言处理&#xff08;NLP&#xff09;领域内使用的深度神经网络&#xff08;Deep Neural Network&#xff09;的训练过程的简化图。 在神经网络的NLP领域&#xff1a; 语料…

深入解析Java中List和Map的多层嵌套与拆分

深入解析Java中List和Map的多层嵌套与拆分 深入解析Java中List和Map的多层嵌套与拆分技巧 &#x1f4dd;摘要引言正文内容什么是嵌套数据结构&#xff1f;例子&#xff1a; 遍历嵌套List和Map遍历嵌套List遍历嵌套Map 拆分嵌套数据结构拆分嵌套List拆分嵌套Map &#x1f914; Q…

排序-希尔排序

介绍 希尔排序属于那种没有了解过的直接看代码一脸懵逼的&#xff0c; 所以同学们尽量不要直接看代码&#xff0c;仔细阅读本篇博客内容。 插入排序本来算是一个低效排序&#xff0c; 一次只可以挪动一个数据&#xff0c; 但是&#xff0c;它的强来了&#xff01;&#xff01…

网吧|基于SprinBoot+vue的网吧管理系统(源码+数据库+文档)

网吧管理系统 目录 基于SprinBootvue的网吧管理系统 一、前言 二、系统设计 三、系统功能设计 1 管理员功能模块 2 网管功能模块 3 会员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#…

Arduino 按钮及弹跳

所需元件 可插入面包板的按钮1个 220Ω电阻1个 10kΩ电阻1个 3mm或5mm LED 1个 面包板1块 Arduino Uno开发板1块 面包板连接线数条 使用外接电阻 将5V接到按钮&#xff0c;按钮的另一端串联1个10kΩ电阻再接地&#xff0c;这样的接法被称为下拉电阻(pull-down resistor)。若测…