60分钟带你了解ALBERT

2024-02-02 11:38
文章标签 分钟 了解 60 albert

本文主要是介绍60分钟带你了解ALBERT,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ALBERT原文:《ALITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS》

中文预训练ALBERT模型来了:小模型登顶GLUE,Base版模型小10倍速度快1倍。

Google一出手就是不一样,不再是BERT+的模式,而是做了个大改动。ALBERT模型是BERT的改进版,与最近其他State of the art的模型不同的是,这次是预训练小模型,效果更好、参数更少。

模型下载
1、albert_large_zh,参数量,层数24,大小为64M

参数量和模型大小为bert_base的六分之一;在口语化描述相似性数据集LCQMC的测试集上相比bert_base上升0.2个点
2、albert_base_zh(小模型体验版), 参数量12M, 层数12,大小为40M

参数量为bert_base的十分之一,模型大小也十分之一;在口语化描述相似性数据集LCQMC的测试集上相比bert_base下降约1个点;
相比未预训练,albert_base提升14个点
3、albert_xlarge, albert_xxlarge will coming recently.

if you want use a albert model with best performance among all pre-trained models, just wai
先来感受一下刷榜的乐趣,

GLUE:

SQuAD:

RACE:

目前github上已经放出的开源版本:
非官方中文预训练ALBERT:https://github.com/brightmart/albert_zh

1. 模型简介
ALBERT主要对BERT做了3点改进,缩小了整体的参数量,加快了训练速度,增加了模型效果。

接下来介绍这三点改进。

1.1 Factorized embedding parameterization
 O(V * H) to O(V * E + E * H)
 
 如以ALBert_xxlarge为例,V=30000, H=4096, E=128
 
 那么原先参数为V * H= 30000 * 4096 = 1.23亿个参数,现在则为V * E + E * H = 30000*128+128*4096 = 384万 + 52万 = 436万,
 
 词嵌入相关的参数变化前是变换后的28倍。
在BERT、XLNet、RoBERTa中,词表的embedding size(E)和transformer层的hidden size(H)都是相等的,这个选择有两方面缺点:

从建模角度来讲,wordpiece向量应该是不依赖于当前内容的(context-independent),而transformer所学习到的表示应该是依赖内容的。所以把E和H分开可以更高效地利用参数,因为理论上存储了context信息的H要远大于E。
从实践角度来讲,NLP任务中的vocab size本来就很大,如果E=H的话,模型参数量就容易很大,而且embedding在实际的训练中更新地也比较稀疏。
因此作者使用了小一些的E(64、128、256、768),训练一个独立于上下文的embedding(VxE),之后计算时再投影到隐层的空间(乘上一个ExH的矩阵),相当于做了一个因式分解。

从后续的实验中来看,E的大小与实验效果也不是完全正相关,因此其他实验中E都取的128。

1.2 Cross-layer parameter sharing
 参数共享能显著减少参数。共享可以分为全连接层、注意力层的参数共享;注意力层的参数对效果的减弱影响小
跨层参数共享,就是不管12层还是24层都只用一个transformer。这在之前读过Universal Transformer就有了,但是以为会火,因为做语言模型的效果比标准Transformer好。结果没什么人用,这次被提起来了。


作者对比了每层输入输出的L2距离和相似度,发现了BERT的结果比较震荡,而ALBERT就很稳定,可见ALBERT有稳定网络参数的作用。

1.3 Inter-sentence coherence loss
 使用段落连续性任务。正例,使用从一个文档中连续的两个文本段落;负例,使用从一个文档中连续的两个文本段落,但位置调换了。
 
 避免使用原有的NSP任务,原有的任务包含隐含了预测主题这类过于简单的任务。
 
  We maintain that inter-sentence modeling is an important aspect of language understanding, but we propose a loss 
  based primarily on coherence. That is, for ALBERT, we use a sentence-order prediction (SOP) loss, which avoids topic 
  prediction and instead focuses on modeling inter-sentence coherence. The SOP loss uses as positive examples the 
  same technique as BERT (two consecutive segments from the same document), and as negative examples the same two 
  consecutive segments but with their order swapped. This forces the model to learn finer-grained distinctions about
  discourse-level coherence properties. 
其他变化,还有 Other changes:

1)去掉了dropout  Remvoe dropout to enlarge capacity of model.
    最大的模型,训练了1百万步后,还是没有过拟合训练数据。说明模型的容量还可以更大,就移除了dropout
    (dropout可以认为是随机的去掉网络中的一部分,同时使网络变小一些)
    We also note that, even after training for 1M steps, our largest models still do not overfit to their training data. 
    As a result, we decide to remove dropout to further increase our model capacity.
    其他型号的模型,在我们的实现中我们还是会保留原始的dropout的比例,防止模型对训练数据的过拟合。
 
2)为加快训练速度,使用LAMB做为优化器 Use lAMB as optimizer, to train with big batch size
  使用了大的batch_size来训练(4096)。LAMB优化器使得我们可以训练,特别大的批次batch_size,如高达6万。
 
3)使用n-gram(uni-gram,bi-gram, tri-gram)来做遮蔽语言模型 Use n-gram as make language model
   即以不同的概率使用n-gram,uni-gram的概率最大,bi-gram其次,tri-gram概率最小。
   本项目中目前使用的是在中文上做whole word mask,稍后会更新一下与n-gram mask的效果对比。n-gram从spanBERT中来。
后BERT时代很多研究(XLNet、RoBERTa)都发现next sentence prediction没什么用处,所以作者也审视了一下这个问题,认为NSP之所以没用是因为这个任务不仅包含了句间关系预测,也包含了主题预测,而主题预测显然更简单些(比如一句话来自新闻财经,一句话来自文学小说),模型会倾向于通过主题的关联去预测。因此换成了SOP(sentence order prediction),预测两句话有没有被交换过顺序。实验显示新增的任务有1个点的提升:

发布计划 Release Plan
1、albert_base, 参数量12M, 层数12,10月7号

2、albert_large, 参数量18M, 层数24,10月13号

3、albert_xlarge, 参数量59M, 层数24,10月6号

4、albert_xxlarge, 参数量233M, 层数12,10月7号(效果最佳的模型)

2. 总结
刚开始看这篇文章是很惊喜的,因为它直接把同等量级的BERT缩小了10倍+,让普通用户有了运行GPT2、威震天的可能。但是仔细看了实验后才发现体量的减小是需要付出代价的:

实验使用的xlarge是24层,2048维度,xxlarge是12层,4096维度。可以仔细看一下model的量级,并且注意一下这个speedup是训练时间而不是inference时间(因为数据少了,分布式训练时吞吐上去了,所以ALBERT训练更快),但inference还是需要和BERT一样的transformer计算。

可以得出的结论是:

在相同的训练时间下,ALBERT得到的效果确实比BERT好
在相同的Inference时间下,ALBERT base和large的效果都是没有BERT好的,而且差了2-3个点,作者在最后也提到了会继续寻找提高速度的方法(sparse attention和block attention)
鱼与熊掌不可兼得,尤其是对于工程落地而言,需要在速度与效果之间寻找一个trade-off。

另外,结合Universal Transformer可以想到的是,在训练和inference阶段可以动态地调整transformer层数(告别12、24、48的配置吧)。同时可以想办法去避免纯参数共享带来的效果下降,毕竟越深的transformer层所学到的任务相关信息越多,可以改进transformer模块,加入记忆单元、每层的个性化embedding。

 

这篇关于60分钟带你了解ALBERT的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/670590

相关文章

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

软件架构模式:5 分钟阅读

原文: https://orkhanscience.medium.com/software-architecture-patterns-5-mins-read-e9e3c8eb47d2 软件架构模式:5 分钟阅读 当有人潜入软件工程世界时,有一天他需要学习软件架构模式的基础知识。当我刚接触编码时,我不知道从哪里获得简要介绍现有架构模式的资源,这样它就不会太详细和混乱,而是非常抽象和易

PHP: 深入了解一致性哈希

前言 随着memcache、redis以及其它一些内存K/V数据库的流行,一致性哈希也越来越被开发者所了解。因为这些内存K/V数据库大多不提供分布式支持(本文以redis为例),所以如果要提供多台redis server来提供服务的话,就需要解决如何将数据分散到redis server,并且在增减redis server时如何最大化的不令数据重新分布,这将是本文讨论的范畴。 取模算法 取模运

Weex入门教程之1,了解Weex

【资料合集】Weex Conf回顾集锦:讲义PDF+活动视频! PDF分享:链接:http://pan.baidu.com/s/1hr8RniG 密码:fa3j 官方教程:https://weex-project.io/cn/v-0.10/guide/index.html 用意 主要是介绍Weex,并未涉及开发方面,好让我们开始开发之前充分地了解Weex到底是个什么。 以下描述主要摘取于

Java了解相对较多!

我是对Java了解相对较多,而对C#则是因工作需要才去看了一下,C#跟Java在语法上非常相似,而最初让我比较困惑的就是委托、事件部分,相信大多数初学者也有类似的困惑。经过跟Java的对比学习,发现这其实跟Java的监听、事件是等同的,只是表述上不同罢了。   委托+事件是观察者模式的一个典型例子,所谓的委托其实就是观察者,它会关心某种事件,一旦这种事件被触发,这个观察者就会行动。   下

使用WebP解决网站加载速度问题,这些细节你需要了解

说到网页的图片格式,大家最常想到的可能是JPEG、PNG,毕竟这些老牌格式陪伴我们这么多年。然而,近几年,有一个格式悄悄崭露头角,那就是WebP。很多人可能听说过,但到底它好在哪?你的网站或者项目是不是也应该用WebP呢?别着急,今天咱们就来好好聊聊WebP这个图片格式的前世今生,以及它值不值得你花时间去用。 为什么会有WebP? 你有没有遇到过这样的情况?网页加载特别慢,尤其是那

初步了解VTK装配体

VTK还不太了解,根据资料, vtk.vtkAssembly 是 VTK库中的一个重要类,允许通过将多个vtkActor对象组合在一起来创建复杂的3D模型。 import vtkimport mathfrom vtk.util.colors import *filenames = ["cylinder.stl","sphere.stl","torus.stl"]dt = 1.0renW

Post-Training有多重要?一文带你了解全部细节

1. 简介 随着LLM学界和工业界日新月异的发展,不仅预训练所用的算力和数据正在疯狂内卷,后训练(post-training)的对齐和微调方法也在不断更新。InstructGPT、WebGPT等较早发布的模型使用标准RLHF方法,其中的数据管理风格和规模似乎已经过时。近来,Meta、谷歌和英伟达等AI巨头纷纷发布开源模型,附带发布详尽的论文或报告,包括Llama 3.1、Nemotron 340

了解elementUI的底层源码, 进行二次开发

Element UI 是一个基于 Vue.js 的桌面端组件库,广泛用于构建美观、交互友好的用户界面。要深入理解 Element UI 的底层源码并进行二次开发,你需要掌握以下几个关键点: Vue.js 原理 Element UI 是基于 Vue.js 构建的,因此首先需要熟悉 Vue.js 的核心概念和机制,包括: ● 组件系统:Vue.js 的组件化思想,如何定义组件、使用组件、传递属性和事