【NLP预训练模型】你finetune BERT的姿势可能不对哦?

预训练模型BERT是NLP领域如今最大的网红,BERT的预训练过程学习了大量的自然语言中词、句法以及常识等泛领域的知识。因此,在运用BERT到实际的NLP任务中,通常的做法都是基于特定领域内的少量数据(几千到几万)集,再进行Finetune,以适用于当前的任务和领域。

通常来说,基于BERT进行Finetune效果都会还不错。但是如果你的数据集相对小的时候,你有可能会遇到一些麻烦。本篇基于论文《Revisiting Few-sample BERT Fine-tuning》深入看一下BERT的预训练过程,试着深入分析这一过程,用于指导Finetune的工作。

作者&编辑 | 小Dream哥

1  BERT及其预训练

BERT是一个基于transformer encoder的大型双向模型,基于海量的文本进行预训练,训练的任务包括MLM和NSP。

【NLP预训练模型】你finetune BERT的姿势可能不对哦?_第1张图片

笔者前面有详细介绍BERT的文章,忘记的同学可以先点击了解:

【NLP】 深入浅出解析BERT原理及其表征的内容

在论文《Revisiting Few-sample BERT Fine-tuning》中,论文作者细致的发现了BERT在预训练时,在更新参数时做了一些"小动作",如下图:

【NLP预训练模型】你finetune BERT的姿势可能不对哦?_第2张图片

BERT在预训练时,省略了标准Adam优化器优化过程中的第9和第10步。步骤9和步骤10分别是对步骤7和步骤8中一阶动量和二阶动量的有偏估计的纠正(bias-corrected)。关于为什么步骤7和步骤8中的一阶动量和二阶动量为什么是有偏的,感兴趣的读者可以翻看原文去了解,这里不做繁琐的推演了。

需要说明的是,为什么BERT在预训练时要省略和可以省略这两部呢?笔者猜测,google省略优化步骤主要原因应该是为了提速,毕竟预训练过程的数据量如此之大,BERT又是如此的庞大。那么为什么能做这样的省略呢,笔者猜测,是因为BERT在预训练是用的训练数据集非常之大,数据集的分布已经非常接近于实际的样本分布,因此可以省略上述步骤。

2 BERT的小样本Finetune

如我们上一节讨论的,BERT的预训练过程用的Adam优化器是非标的,可以称为BERT_Adam。然后论文作者发现,如今产业界和学术界大部分的开源BERT库的Adam优化器都是基于这个版本。

【NLP预训练模型】你finetune BERT的姿势可能不对哦?_第3张图片

作者认为,BERT_Adam会造成Finetune时的不稳定(insstability)。

【NLP预训练模型】你finetune BERT的姿势可能不对哦?_第4张图片

论文作者做实验发现,在小样本Finetune时,将BERT_Adam换成Adam确实会有更好的效果。笔者用自己的2000左右的数据集,做分类任务,确实也复现到了同样的现象。至此,我们发现了BERT在预训练时一个不小的坑,在小样本Finetune时,需要换回标准Adam优化器,因为小样本需要对一阶动量和二阶动量做bias-correction

笔者看了下tensorflow和keras的Adam优化器实现,确实是BERT_Adam的实现:

【NLP预训练模型】你finetune BERT的姿势可能不对哦?_第5张图片

所以,坑我们已经找到了,后续大家在bert Finetune时,最好能够自己重写一下Adam优化器,将其规范为标准的Adam优化器,或者直接用一些标准的开源库

总结

基于BERT的预训练权重进行Finetune,是NLP领域目前最流行和高效的手段。本文介绍了预训练过程中会出现的一个大坑,即大部分开源的Adam优化器都是非标准的,并介绍了解决的方案

下期预告:ACL论文领读系列

知识星球推荐

【NLP预训练模型】你finetune BERT的姿势可能不对哦?_第6张图片

扫描上面的二维码,就可以加入我们的星球,助你成长为一名合格的自然语言处理算法工程师。

知识星球主要有以下内容:

(1) 聊天机器人。

(2) 知识图谱。

(3) NLP预训练模型。

转载文章请后台联系

侵权必究

【NLP预训练模型】你finetune BERT的姿势可能不对哦?_第7张图片

往期精选

  • 【完结】 12篇文章带你完全进入NLP领域,掌握核心技术

  • 【年终总结】2019年有三AI NLP做了什么,明年要做什么?

  • 【NLP-词向量】词向量的由来及本质

  • 【NLP-词向量】从模型结构到损失函数详解word2vec

  • 【NLP-NER】什么是命名实体识别?

  • 【NLP-NER】命名实体识别中最常用的两种深度学习模型

  • 【NLP-NER】如何使用BERT来做命名实体识别

  • 【NLP-ChatBot】我们熟悉的聊天机器人都有哪几类?

  • 【NLP-ChatBot】搜索引擎的最终形态之问答系统(FAQ)详述

  • 【NLP-ChatBot】能干活的聊天机器人-对话系统概述

  • 【知识图谱】人工智能技术最重要基础设施之一,知识图谱你该学习的东西

  • 【知识图谱】知识表示:知识图谱如何表示结构化的知识?

  • 【知识图谱】如何构建知识体系:知识图谱搭建的第一步

  • 【知识图谱】获取到知识后,如何进行存储和便捷的检索?

  • 【知识图谱】知识推理,知识图谱里最“人工智能”的一段

  • 【文本信息抽取与结构化】目前NLP领域最有应用价值的子任务之一

  • 【文本信息抽取与结构化】详聊文本的结构化【上】

  • 【文本信息抽取与结构化】详聊文本的结构化【下】

  • 【NLP实战】tensorflow词向量训练实战

  • 【NLP实战系列】朴素贝叶斯文本分类实战

  • 【NLP实战系列】Tensorflow命名实体识别实战

  • 【NLP实战】如何基于Tensorflow搭建一个聊天机器人

  • 【NLP实战】基于ALBERT的文本相似度计算

  • 【每周NLP论文推荐】从预训练模型掌握NLP的基本发展脉络

  • 【每周NLP论文推荐】 NLP中命名实体识别从机器学习到深度学习的代表性研究

  • 【每周NLP论文推荐】 介绍语义匹配中的经典文章

  • 【每周NLP论文推荐】 对话管理中的标志性论文介绍

  • 【每周NLP论文推荐】 开发聊天机器人必读的重要论文

  • 【每周NLP论文推荐】 掌握实体关系抽取必读的文章

  • 【每周NLP论文推荐】 生成式聊天机器人论文介绍

  • 【每周NLP论文推荐】 知识图谱重要论文介绍

你可能感兴趣的:(【NLP预训练模型】你finetune BERT的姿势可能不对哦?)