数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
四十二、ULMFiT [2018]
虽然深度学习模型在许多
NLP
任务上达到了SOTA
,但这些模型都是从头开始训练的,需要大量的数据集,而且需要几天的时间来收敛。NLP
的研究主要集中在transductive transfer
上。对于transductive transfer
,微调pretrained word embedding
(一种简单的迁移技术,只针对模型的第一层)在实践中产生了很大的影响,并被用于大多数SOTA
的模型。最近的方法是将来自其他任务的embedding
与不同层的input
相拼接,仍然从头开始训练main task model
,并将pretrained embedding
视为固定参数,限制了其有用性。即,这些方法仅仅迁移了
word embedding
。鉴于预训练的好处,我们应该能够比随机初始化模型的其余参数(即,
embedding
之外的参数)做得更好。然而,通过微调的inductive transfer
对于NLP
来说是不成功的。《Semisupervised Sequence Learning》
首次提出对语言模型language model: LM
进行微调,但需要数百万的in-domain
文档来实现良好的性能,这严重限制了其适用性。论文
《Universal Language Model Fine-tuning for Text Classification》
表明,不是语言模型微调的思想,而是缺少如何有效训练语言模型的知识,从而阻碍了语言模型微调的更广泛的采用。语言模型对小数据集过拟合,并且在用分类器进行微调时遭遇灾难性遗忘catastrophic forgetting
。与CV
模型相比,NLP
模型通常更浅,因此需要不同的微调方法。因此,论文
《Universal Language Model Fine-tuning for Text Classification》
提出了一种新的方法,即Universal Language Model Fine-tuning: ULMFiT
,它可以解决这些问题,并为任何NLP
任务实现强大的inductive transfer learning
,类似于微调ImageNet
模型:同样的3
层LSTM
架构,具有相同的超参数,除了调优dropout
超参数之外没有其他改变,在6
个广泛研究的文本分类任务中胜过高度特征工程的模型、以及迁移学习方法。论文贡献:
作者提出了
Universal Language Model Fine-tuning: ULMFiT
,这种方法可以用来实现任何NLP
任务的类似CV
的迁移学习。作者提出了
discriminative fine-tuning
、斜三角学习率、逐渐解冻gradual unfreezing
等新技术,以保留以前的知识并避免微调过程中的灾难性遗忘。作者在六个有代表性的文本分类数据集上的表现明显优于
SOTA
的方法,在大多数数据集上的误差降低了18%-24%
。作者表明,
ULMFiT
能够实现极其sample-efficient
的迁移学习,并进行了广泛的消融分析。作者提供了预训练好的模型和代码,以便能够更广泛地采用。
相关工作:
CV
中的迁移学习:在CV
中,深度神经网络的特征已经被观察到,从第一层到最后一层对应于通用任务过渡到特定任务。由于这个原因,CV
中的大多数工作都集中在模型的第一层的迁移上。近年来,这种方法已经被微调pretrained model
最后一层或最后几层并让其余层冻结所取代。Hypercolumns
:在NLP
中,最近才提出了超越transferring word embedding
的方法。流行的方法是预训练embedding
,通过其他任务捕获额外的上下文。 然后将不同level
的embedding
作为特征,与word embedding
或中间层的input
相拼接。这种方法在CV
中被称为hypercolumns
,并在NLP
中被一些工作所使用,这些工作分别使用语言建模、转述paraphrasing
、蕴含entailment
和机器翻译等任务进行预训练。在CV
中,hypercolumns
已经几乎完全被端到端的微调所取代。多任务学习:一个相关的方向是多任务学习
multi-task learning: MTL
。MTL
要求每次都要从头开始训练任务,这使得它的效率很低,而且经常需要对特定任务的目标函数进行仔细加权。微调:微调已经成功地用于相似任务之间的迁移,但已被证明在不相关的任务之间失败(
《How Transferable are Neural Networks in NLP Applications? 》
)。《Semi-supervised Sequence Learning》
也对语言模型进行了微调,但对10k
个标记样本上过拟合,并且需要数百万的in-domain
文档才能有好的表现。相比之下,ULMFiT
利用通用领域的预训练、以及新的微调技术来防止过拟合,即使只有100
个标记样本,也能在小数据集上取得SOTA
的结果。
42.1 模型
我们对
NLP
的最通用的inductive transfer learning
的setting
感兴趣:给定一个源任务 $ \mathcal T_S $ 和任意目标任务 $ \mathcal T_T $ ,其中 $ \mathcal T_T\ne \mathcal T_S $ ,我们希望能提高 $ \mathcal T_T $ 的性能。语言建模language modeling
可以被看作是理想的源任务,也是NLP
的ImageNet
的对应物:首先,它捕获了(与下游任务相关的)语言的许多方面,如长期依赖关系、层级关系
hierarchical relation
、情感sentiment
。其次,与机器翻译和
entailment
等任务相比,语言建模为大多数领域和语言提供的数据数量近乎无限。此外,预训练的语言模型可以很容易地适配目标任务的特有性质,我们表明这可以大大改善性能。
最后,语言建模已经是现有任务的一个关键组成部分,如机器翻译和对话建模
dialogue modeling
。
正式地,语言建模引入了一个假设空间
hypothesis space
$ \mathcal H $ ,它应该对许多其他NLP
任务有用。我们提出了
Universal Language Model Finetuning: ULMFiT
,它在大型通用领域语料库上预训练语言模型,并使用新技术在目标任务上进行微调。该方法具有普遍性,因为它符合这些实践准则:它可以在不同的文档
size
、数量、标签类型的任务中工作。它使用单个架构、单一的训练过程。
它不需要定制化的特征工程或预处理。
它不需要额外的
in-domain
文档或标签。
在我们的实验中,我们使用
SOTA
的语言模型AWD-LSTM
,这是一个普通的LSTM
(没有注意力、没有short-cut connection
、也没有其它额外的复杂组件),具有各种调优好的dropout rate
超参数。与CV
类似,我们希望未来可以通过使用更高性能的语言模型来提高下游的性能。因为这篇论文是
2018
年提出的,因此还没有使用transformer-based
语言模型。ULMFiT
包含如下步骤,如下图所示:(a)
:通用领域的语言模型预训练。(b)
:目标任务的语言模型微调。(c)
:目标任务的分类器微调。
注意,这里是三个阶段的训练。能否合并为 “通用领域 + 目标任务”的语言模型、目标任务的分类模型两阶段? 或者通用领域的语言模型、目标任务的”语言模型 + 分类模型“ 两阶段?然而,论文对目标任务的语言模型、目标任务的分类模型采用了不同的学习率调度和微调策略,因此需要分开。
General-domain LM pretraining
:类似于ImageNet
的语言模型语料库应该是大型的,并能捕获到语言的通用属性。我们在Wikitext-103
上预训练语言模型,该模型由28595
篇预处理的维基百科文章和103M
个单词组成。预训练对具有小数据集的任务最有利,即使有
100
个标记的样本,也能进行泛化。我们把探索更多样化的预训练语料库留给未来的工作,但预计它们会提高性能。虽然这个阶段是最昂贵的,但它只需要执行一次,并能提高下游模型的性能和收敛速度。Target task LM fine-tuning
:无论用于预训练的general-domain
数据有多么多样化,目标任务的数据都可能来自不同的分布。因此,我们在目标任务的数据上对语言模型进行微调。给定预训练好的general-domain LM
,这个阶段收敛得更快,因为它只需要适配目标数据的特殊属性,而且它允许我们训练一个鲁棒的语言模型,即使是针对小数据集。 我们提出了用于微调语言模型的discriminative fine-tuning
和斜三角学习率:discriminative fine-tuning
:由于不同的层捕获不同类型的信息,它们应该被微调到不同的程度。为此,我们提出了一种新的微调方法,即discriminative fine-tuning
。discriminative fine-tuning
不是对模型的所有层使用相同的学习率,而是允许我们用不同的学习率对每一层进行微调。 针对模型参数 $ \theta $ 的常规随机梯度下降,其公式为:其中:
$ \eta $ 为学习率, $ \nabla_\theta J(\theta) $ 为模型目标函数关于 $ \theta $ 的梯度。对于
discriminative fine-tuning
,我们将 $ \theta $ 拆分为 $ \{\theta^1,\cdots,\theta^L\} $ ,其中 $ \theta^l $ 包含模型第 $ l $ 层的参数, $ L $ 为模型的层的数量。类似地,学习率为 $ \{\eta^1,\cdots,\eta^L\} $ ,其中 $ \eta^l $ 为模型第 $ l $ 层的学习率。则具有discriminative fine-tuning
的SGD
更新为:实验中我们发现,首先选择
$ \eta^L $ 并且仅仅微调最后一层,然后使用 $ \eta^{l-1} = \eta^l/2.6 $ 来微调剩余的层,这样的效果最佳。因为
target task LM
任务的数据集很小且收敛很快,因此这里多次微调的代价较小。斜三角学习率:为了使模型参数适配
task-specific features
,我们希望模型在训练开始时能迅速收敛到参数空间的一个合适区域,然后再refine
模型参数。在整个训练过程中使用相同的学习率、或使用退火的学习率,并不是实现这种行为的最佳方式。相反,我们提出了斜三角学习率slanted triangular learning rate: STLR
,它首先线性增加学习率,然后根据以下update schedule
来线性衰减,如下图所示:其中:
$ T $ 是总的训练迭代步数。cutfrac
是增加学习率的迭代步数的占比。cut
是从增加学习率切换到减少学习率的迭代步数的切换点。 $ p $ 是截止到 $ t $ 时刻,学习率增加(或减少)的迭代步数的占比。ratio
指定最小的学习率比最大的学习率小多少。 $ \eta_t $ 为截止到 $ t $ 时刻的学习率。
我们通常选择
cutfrac = 0.1
,ratio = 32
, $ \eta_\max = 0.01 $ 。STLR
修改了三角学习率,其中学习率具有较短的上升期、较长的衰减期,我们发现这是良好性能的关键。在实验部分,我们与余弦退火cosine annealing
进行了比较。
Target task classifier fine-tuning
:最后,为了对分类器进行微调,我们用两个额外的linear block
来增强pretrained language model
。遵从CV classifier
的标准做法,每个block
使用了batch normalization
和dropout
,中间层使用ReLU
激活函数、最后一层使用softmax
激活函数从而输出关于target classes
的概率分布。注意,这些task-specific classifier layers
的参数是唯一从头开始学习的。第一个线性层将最后一个隐藏层的池化后的状态作为输入。Concat pooling
:文本分类任务中的信号往往包含在几个单词中,这些单词可能出现在文档的任何地方。由于输入文档可能由数百个单词组成,如果我们只考虑模型的最后一个隐状态,信息可能会丢失。出于这个原因,我们将文档最后一个time step
的隐状态 $ \mathbf{\vec h}_T $ ,与尽可能多的time steps
的隐状态 $ \mathbf H = \left\{\mathbf{\vec h}_1,\cdots,\mathbf{\vec h}_T\right\} $ (只要能够满足GPU
内存的限制)的max-pooled representation
和mean-pooled representation
相拼接:其中
$ [\cdot;\cdot] $ 表示向量拼接。Gradual unfreezing
:微调target classifier
是迁移学习方法中最关键的部分:过于激进的微调会导致灾难性的遗忘,消除了通过语言建模捕获的信息的好处。
过于谨慎的微调会导致缓慢的收敛(以及由此产生的过拟合)。
除了
discriminative finetuning
和斜三角学习率,我们还提出了针对fine-tuning the classifier
的渐进式解冻。我们建议从最后一层开始逐步解冻模型,而不是一下子对所有层进行微调,因为这样做有灾难性遗忘的风险:我们首先解冻最后一层,并微调所有未被冻结的层一个
epoch
。此时,未被解冻的层包括:最后一层、以及
target classifier
。然后我们解冻下一个较低的
frozen layer
并微调一个epoch
。此时解冻的层有两层了。
我们不停地重复这种解冻操作,直到我们对所有层进行微调。
这类似于
"chain-thaw"
,只是我们每次在 "解冻"层的集合中增加一个层,而不是每次只训练一个层。discriminative fine-tuning
、斜三角学习率、渐进式解冻本身都是有益的,但我们在实验部分表明,它们相互补充,使我们的方法在不同的数据集上表现良好。BPTT for Text Classification
:语言模型是通过back-propagation through time: BPTT
来训练的,以实现大输入序列的梯度传播。为了使大型文件的分类器的微调可行,我们提出了BPTT for Text Classification: BPT3C
:我们将文件分为
batch size = b
的batch
。在每个
batch
的开始,模型用前一个batch
的final state
进行初始化。我们跟踪
hidden states
从而用于计算mean-pooling
和max-pooling
。梯度被反向传播到其隐状态对
final prediction
有贡献的batch
。
在实践中,我们使用可变长度的反向传播序列。
双向语言模型:我们不限于微调单向语言模型。在我们所有的实验中,我们同时预训练一个
forward LM
和一个backward LM
。我们使用BPT3C
为每个LM
独立微调一个分类器,并对分类器的预测进行平均。
这些训练方式过于古老,在
transformer-based
模型中已经不被使用。
42.2 实验
数据集:我们在六个被广泛研究的数据集上评估我们的方法,这些数据集具有不同的文档数量和不同的文档长度,对应于三种常见的文本分类任务:情感分析、问题分类、主题分类:
Sentiment Analysis
:对于情感分析,我们在二元电影评论IMDb
数据集、二分类版本和五分类版本的Yelp
评论数据集上评估我们的方法。Question Classification
:我们使用六分类版本的小型TREC
数据集,该数据集由开放领域的、基于事实的问题组成,被划分到一组语义类别semantic category
。Topic Classification
:对于主题分类,我们对大规模AG
新闻数据集和DBpedia
本体数据集进行评估。
数据集和任务的统计信息如下表所示。
预处理:我们使用与早期工作相同的预处理方法(
《Deep pyramid convolutional neural networks for text categorization》
、《Learned in Translation: Contextualized Word Vectors》
)。此外,为了让语言模型能够捕获到可能与分类相关的方面,我们为大写字母的单词、elongation
和repetition
添加了special tokens
。超参数:我们感兴趣的是一个在各种任务中表现鲁棒的模型。为此, 默认情况下,我们在不同的任务中使用相同的超参数集合,我们在
IMDb
验证集上进行调优。我们使用
AWD-LSTM
语言模型,emebdding size = 400
,3
层,每层1150
个隐藏单元,BPTT
的batch size = 70
。默认情况下我们对所有的层采用dropout rate = 0.4
,但是对RNN
层采用dropout rate = 0.3
、embedding layer
采用dropout rate = 0.05
、对RNN hidden-to-hidden matrix
采用dropout rate = 0.5
。classifier
有一个大小为50
的隐层。我们使用 $ \beta_1= 0.7 $ 的Adam
,而不是默认的 $ \beta_1=0.9 $ 和 $ \beta_2=0.99 $ 。我们使用batch size = 64
,用于微调语言模型、分类器的base learning rate
分别为0.004
和0.01
,并在每个任务的验证集上微调epoch
的数量。除此之外,我们还使用了《Regularizing and Optimizing LSTM Language Models》
中使用的相同做法。baseline
:对于
IMDb
数据集和TREC-6
数据集,我们与CoVe
进行比较,这是一种用于NLP
的最新的迁移学习方法。对于
AG
数据集、Yelp
数据集和DBpedia
数据集,我们与《Deep pyramid convolutional neural networks for text categorization》
的SOTA
的文本分类方法进行比较。
为了保持一致性,我们以错误率的形式报告所有结果(越低越好),结果如下表所示。可以看到,我们的方法在所有数据集上都超越了
baseline
。这很有前景,因为现有的SOTA
需要复杂的架构、多种形式的注意力、和复杂的embedding
方案,而我们的方法采用了普通的LSTM
与dropout
。消融研究:我们在
IMDb
、TREC-6
和AG
这三个代表不同任务、类型和规模的语料库上进行了实验。在所有的实验中,我们从训练集中分离出10%
作为验证集,并在这个验证集上报告单向语言模型的错误率。我们对分类器微调了50
个epoch
,并对除了ULMFiT
外的所有方法进行了带early stopping
的训练。Low-shot learning
:迁移学习的主要好处之一是能够用少量的标签为任务训练一个模型。我们在两种情况下对ULMFiT
进行了评估:只有标记样本被用于LM
的微调("supervised"
),所有的任务数据都可以用来微调LM
("semi-supervised"
)。我们将ULMFiT
与从头开始训练("from scratch"
)进行比较。我们保持固定的验证集,并使用与之前实验相同的超参数。实验结果如下表所示。可以看到:在
IMDb
和AG
上,仅仅具有100
个标记样本的supervised ULMFiT
,就匹敌了具有10
倍和20
倍数据的从头开始训练的性能。这清楚地表明了通用领域的语言模型预训练的好处。如果我们允许
ULMFiT
也利用未标记的样本,那么具有100
个标记样本的supervised ULMFiT
,能够匹敌了具有50
倍和100
倍数据的从头开始训练的性能。在
TREC-6
上,ULMFiT
明显改善了从头开始的训练。由于样本内容更短、数量更少,supervised ULMFiT
和semi-supervised ULMFiT
取得了相似的结果。
预训练的影响:我们在下表中比较了不使用预训练、以及使用预训练的效果(预训练在
WikiText-103
上进行)。预训练对中小规模的数据集最有用,这在商业应用中是最常见的。然而,即使对于大型数据集,预训练也能提高性能。LM
质量的影响:为了衡量选择一个合适的语言模型的重要性,我们在下表中比较了具有相同超参数、没有任何dropout
的常规LM
,以及具有调优的dropout
参数的AWD-LSTM LM
。使用我们的微调技术,即使是常规的语言模型在较大的数据集上也能达到令人惊讶的良好性能。在较小的TREC-6
数据集上,没有dropout
的常规语言模型有过拟合的风险,从而降低了性能。LM fine-tuning
的影响:我们比较了几种微调方法:没有微调/微调整个模型("Full"
,即最常用的微调方法)、具有/没有discriminative fine-tuning
("Discr"
)、斜三角学习率("Stlr"
)。微调语言模型对较大的数据集最为有利。"Discr"
和"Stlr"
提高了所有三个数据集的性能,并且在较小的TREC-6
上是必要的(在TREC-6
数据集上,常规微调是没有好处的)。classifier fine-tuning
的影响:我们比较了几种微调方法:头开始训练、微调完整模型("Full"
)、只微调最后一层("Last"
)、"Chain-thaw"
、渐进式解冻('Freez'
)。我们进一步评估discriminative fine-tuning
('Discr'
)和斜三角学习率('Stlr'
)的重要性。我们将后者与另一种激进的余弦退火调度器('Cos'
)进行比较。我们对'Discr'
使用的是学习率 $ \eta^L=0.01 $ ,对'Chain-thaw'
使用的是最后一层的学习率0.001
而其他层的学习率为0.0001
,其它方法使用0.001
的学习率。结果如下表所示。微调分类器比从头开始训练有明显的改善,特别是在小型的
TREC-6
上。CV
中的标准微调方法,即"Last"
,在这里效果严重不佳,而且永远无法将训练误差降低到0
。"Chain-thaw"
在较小的数据集上效果较好,但是在大型的AG
数据集上效果较差。"Freez"
提供了与"Full"
类似的性能。余弦退火方法在大数据集上与斜三角学习率有竞争力,但在小数据集上表现不佳。
最后,完整的
ULMFiT
分类器微调(最下面一行)在IMDB
和TREC-6
上实现了最好的性能,在AG
上也有竞争力。重要的是,ULMFiT
是唯一在各方面都表现出优异性能的方法,因此是唯一的通用方法。
分类器微调行为:虽然我们的结果表明,如何微调分类器会有很大的不同,但目前在
NLP
中对inductive transfer
的微调的探索不足,因为它大多被认为是无益的。为了更好地理解我们模型的微调行为,我们在下图中比较了训练期间用ULMFiT
微调的分类器、以及用'Full'
微调的分类器的验证误差。在所有的数据集上,在训练的早期,例如在
IMDb
上的第一个epoch
之后,对Full
模型的微调导致了最低的误差。然后,随着模型开始过拟合,并且丢失了通过预训练获得的知识,误差会增加。相比之下,
ULMFiT
更稳定,没有这种灾难性的遗忘;性能保持相似或改善,直到最后的epoch
,这显示了学习率调度的积极作用。
双向性的影响:以训练第二个模型为代价,将
forward LM-classifier
和backward LM-classifier
的预测ensemble
在一起,带来了大约0.5-0.7
的性能提升。在IMDb
上,我们将测试误差从单个模型的5.30
降低到双向模型的4.58
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论