zoukankan      html  css  js  c++  java
  • BERT相关知识点复盘

    1、相比RNN模型,Transformer语义特征提取能力更强,具备长距离特征捕获能力,且可以并行训练,在机器翻译等NLP任务上效果显著。
    Open AI团队的GPT[7]使用Transformer替换RNN进行深层单向语言模型预训练,并通过在下游任务上Fine-tuning验证了Pretrain-Finetune范式的有效性。
    在此基础上,Google BERT引入了MLM(Masked Language Model)及NSP(Next Sentence Prediction,NSP)两个预训练任务,并在更大规模语料上进行预训练,
    在11项自然语言理解任务上刷新了最好指标。只需要稍加微调就能够实现,这是自然语言处理模型设计的根本转变。
    BERT Base: 12层(指transformer blocks), 12个attention head, 以及1.1亿个参数
    BERT Large: 24层(指transformer blocks), 16个attention head,以及3.4亿个参数
    2、Transformer优缺点:
    优点:(1)虽然Transformer最终也没有逃脱传统学习的套路,Transformer也只是一个全连接(或者是一维卷积)加Attention的结合体。但是其设计已经足够有创新,因为其抛弃了在NLP中最根本的RNN或者CNN并且取得了非常不错的效果,算法的设计非常精彩,值得每个深度学习的相关人员仔细研究和品位。(2)Transformer的设计最大的带来性能提升的关键是将任意两个单词的距离是1,这对解决NLP中棘手的长期依赖问题是非常有效的。(3)Transformer不仅仅可以应用在NLP的机器翻译领域,甚至可以不局限于NLP领域,是非常有科研潜力的一个方向。(4)算法的并行性非常好,符合目前的硬件(主要指GPU)环境。
    缺点:(1)粗暴的抛弃RNN和CNN虽然非常炫技,但是它也使模型丧失了捕捉局部特征的能力,RNN + CNN + Transformer的结合可能会带来更好的效果。(2)Transformer失去的位置信息其实在NLP中非常重要,而论文中在特征向量中加入Position Embedding也只是一个权宜之计,并没有改变Transformer结构上的固有缺陷。
    BERT是一种预训练语言表示的方法,这意味着在大型文本语料库(如维基百科)上训练通用“语言理解”模型,然后将该模型用于下游的NLP任务(如问答、情感分析、文本聚类等)。 (2)无法捕捉序列或者顺序信息
    BERT优于以前的方法,因为它是第一个用于预训练NLP的无监督(Unsupervised)且深度双向(Deeply Bidirectional)的系统。
    3、序列标注任务中为什么还要lstm
    首先BERT使用的是transformer,而transformer是基于self-attention的,也就是在计算的过程当中是弱化了位置信息的(仅靠position embedding来告诉模型输入token的位置信息),而在序列标注任务当中位置信息是很有必要的,甚至方向信息也很有必要,
    所以我们需要用LSTM习得观测序列上的依赖关系,最后再用CRF习得状态序列的关系并得到答案,如果直接用CRF的话,模型在观测序列上学习力就会下降,从而导致效果不好。
    4、自然语言处理技术就是对语言学习表征的研究
    5、预训练:使用无监督数据获取语言学知识,通识知识、基础知识,能够实现对语言原理更为深刻的理解
    6、bert:一种基于Transformer结构的双向编码器,旨在通过左右上下文中共有的条件计算来预先训练无标号文本的双向表示,预先训练的模型只需要添加几个额外的输出层进行微调,进而在各任务上迁移
    7、大量无标号文本数据的预训练模型来探究学习语言表征始于Word2Vec与GloVe中词的嵌入。非常浅的语言模型,捕获的信息量有限,是一种静态词向量。
    8、ELMp,从训练浅层前馈网络(Word2vec),到逐步使用复杂的双向LSTM体系结构层来训练词嵌入,这意味着同一个单词可以基于其上下文具有多个ELMo嵌入。6项NLP任务上横扫当时的最好结果。大规模语料集上的预训练语言模型这把火被点燃后,整个业界都在惊呼,原来预训练的语言模型远不止十年前Bengio和五年前Mikolov只为了得到一个词向量的威力。
    9、Bert大语料库中(足足有25亿字!) 和图书语料库(有8亿字)中进行
    10、预训练语言模型:要么训练语言模型来预测句子中的下一个词,要么预测从左到右的上下文,这样远远不够;ELMo试图在从左到右和从右到左的上下文中训练两个LSTM语言模型,并将它们简单连接起来,解决这个问题。
    11、BERT是双向的,GPT是单向的(信息只从左到右流动),ELMo是浅双向的。
    12、学习语言模型,理解词汇之间的关系,MLM。:BERT在预训练的技术改进,为了防止模型过于关注特定的位置或掩盖的标记,研究人员随机掩盖了15%的词。只预测mask位置,非mask位置的学习难度就又增大了,增加重复再随机mask
    掩盖的词并不总是被[MASK]替换,因为在微调时不会出现[MASK], 80, 10, 10。Bert先是用Mask来提高视野范围的信息获取量,增加duplicate再随机Mask,这样跟RNN类方法依次训练预测,RNN是单侧可见
    13、理解句子之间的关系,NSP,采用50%分正负类别,isNext和NotNext,用next来辅助模型对噪声/非噪声的辨识,提高识别难度
    14、由MLM和NSP的训练,Bert真正成为了一个任务无关模型
    15、第一个神经语言模型是Bengio等人在2001年提出的前馈神经网络
    16、为了“真正”理解自然语言,仅仅从文本的原始形式中学习是不够的
    17、多任务学习是在多个任务上训练的模型之间共享参数的一种通用方法,数据量有限情况下特别有用
    18、高效的word2vec配合使用,便能使大规模的词嵌入训练成为可能,在非常大预料下能够捕获单词与单词之前的特定关系
    19、LSTM缓解了RNN难训练的问题,序列依赖;cnn并行化好
    20、Transformer:Attention is all you need. google 机器翻译团队在2017年6月发布在arxiv, 在WMT2014语料中的英德和英法任务上取得了先进结果,并且训练速度比主流模型更快.
    一篇Google提出的将Attention思想发挥到极致的论文.
    21、 query 和 key 的相似性程度来确定 value 的权重分布的方法被称为scaled dot-product attention
    多除了一个(为K的维度)起到调节作用,使得内积不至于太大,姑且认为是尺度缩放吧;多头的概念:这样的好处是可以允许模型在不同的表示子空间里学习到相关的信息
    22、pos是指当前词在句子中的位置,i是指向量中每个值的index,可以看出,在偶数位置,使用正弦编码,在奇数位置,使用余弦编码。位置编码向量不需要训练
    23、BN的主要思想就是:在每一层的每一批数据上进行归一化。我们可能会对输入数据进行归一化,但是经过该网络层的作用后,我们的数据已经不再是归一化的了。随着这种情况的发展,数据的偏差越来越大,我的反向传播需要考虑到这些大的偏差,这就迫使我们只能使用较小的学习率来防止梯度消失或者梯度爆炸。
    24、openAI gpt虽然可以进行fine-tuning,但是有些特殊任务与pretraining输入有出入,单个句子与两个句子不一致的情况,很难解决,还有就是decoder只能看到前面的信息。
    25、transformer的残差(residual)模块,有效解决网络退化,层数并不会引起梯度消失等问题,但是并不代表层数越多效果越好,有论点认为低层偏向于语法特征学习,高层偏向于语义特征学习
    26、预训练模型:首先我们要了解一下什么是预训练模型,举个例子,假设我们有大量的维基百科数据,那么我们可以用这部分巨大的数据来训练一个泛化能力很强的模型,当我们需要在特定场景使用时,例如做文本相似度计算,那么,只需要简单的修改一些输出层,再用我们自己的数据进行一个增量训练,对权重进行一个轻微的调整。
    27、Mask:mask15%的词,其数量已经很高了,这样就会导致某些词在fine-tuning阶段从未见过,为了解决这个问题,使用80,10,10
    28、为什么要一定概率使用随机词:transformer要保持对每个输入token分布式的表征,否则Transformer很可能会记住这个[MASK]就是"hairy"。至于使用随机词带来的负面影响,文章中解释说,所有其他的token(即非"hairy"的token)共享15%*10% = 1.5%的概率,其影响是可以忽略不计的。Transformer全局的可视,又增加了信息的获取,但是不让模型获取全量信息
    29、在可视域内,真实句子和噪声句子各占一半,这样是无法训练的,因此,加上了nextsentence预测,进行联合训练,next的训练作为方向引导的主要力量,在识别A、B的同时又可以修正embedding
    30、为下游任务引入了很通用的求解框架,不再为任务做模型定制
    31、BERT是谷歌团队糅合目前已有的NLP知识集大成者,刷新11条赛道彰显了无与伦比的实力,且极容易被用于多种NLP任务。宛若一束烟花点亮在所有NLP从业者心中。更为可贵的是谷歌选择了开源这些,让所有从业者看到了在各行各业落地的更多可能性。
    32、BERT优点
    Transformer Encoder因为有Self-attention机制,因此BERT自带双向功能
    因为双向功能以及多层Self-attention机制的影响,使得BERT必须使用Cloze版的语言模型Masked-LM来完成token级别的预训练
    为了获取比词更高级别的句子级别的语义表征,BERT加入了Next Sentence Prediction来和Masked-LM一起做联合训练
    为了适配多任务下的迁移学习,BERT设计了更通用的输入层和输出层
    微调成本小
    33、2012年Hinton团队提出了AlexNet,超过当时第二名效果41%,一下子引爆了AI领域,因此2012年也被称为“深度学习元年”。
    34、先人做的贡献,one-hot, bag-of-words, tfidf,lda, 先验知识
    35、语言模型:一段自然语言的文本进行预测概率的大小,n-gram使得模型模型变得可行,但无法表达词语之间的相似性,n也无法取得足够大
    36、以至于这五年以来,几乎一个业内的默认做法便是要用了无论word2vec还是GloVe预训练的词向量,作为模型的第一层
    37、做nlp的见面大可不必说:你吃了吗,而是替换为说:bert跑起来了吗
    38、也许这里的每一项任务都可能是一个研究小组的活命本钱,甚至还有可能是某个评教授职称的救命稻草。然而,BERT丝毫不放在眼里,直接将它的铁蹄踏入11项NLP任务,将途中目见耳闻所遭遇的一切荡平无余
    39、GPT则只用了单向模型,这是因为它没有用上Transformer Encoder,只用了Decdoer的天生基因决定的,其实,很多人就把这种left-to-right的Transformer框架叫做Decoder,因为事实上Decoder就是如此(具体做的时候需要提前把未来待生成的词做好mask,细节上通过上三角矩阵来实现),这也是OpenAI把他们的模型叫做"Generative"的原因所在。
    40、Transformer Encoder因为有Self-attention机制,因此BERT自带双向功能
    因为双向功能以及多层Self-attention机制的影响,使得BERT必须使用Cloze版的语言模型Masked-LM来完成token级别的预训练
    为了获取比词更高级别的句子级别的语义表征,BERT加入了Next Sentence Prediction来和Masked-LM一起做联合训练
    为了适配多任务下的迁移学习,BERT设计了更通用的输入层和输出层
    41、将预训练好的模型在复杂任务上简单进行一次finetune,便立马能够得到一个非常高的baseline
    42、预训练语言模型的优势:
    近乎无限量的优质数据
    无需人工标注
    一次学习多次复用
    学习到的表征可在多个任务中进行快速迁移
    43、GPT刷了12项数据集(打破其中9项纪录),BERT刷了11项数据集(打破其中11项)
    44、Autoregressive语言模型:指的是依据前面(或后面)出现的单词来预测当前时刻的单词,代表有 ELMo, GPT等。
    Autoencoder语言模型:通过上下文信息来预测被mask的单词,代表有 BERT , Word2Vec(CBOW)
    45、为什么采用layerNormalize
    在CV中,深度网络中一般会嵌入批归一化(BatchNorm,BN)单元,比如ResNet;而NLP中,则往往向深度网络中插入层归一化(LayerNorm,LN)单元,比如Transformer。为什么在归一化问题上会有分歧呢?一个最直接的理由就是,BN用在NLP任务里实在太差了(相比LN),此外,BN还难以直接用在RNN中,而RNN是前一个NLP时代的最流行模型。虽然有大量的实验观测,表明NLP任务里普遍BN比LN差太多,但是迄今为止,依然没有一个非常严谨的理论来证明LN相比BN在NLP任务里的优越性。
    基于我阅读过的文献,我个人认为:BatchNorm就是通过对batch size这个维度归一化来让分布稳定下来,有助于训练深度神经网络,是因为它可以让loss曲面变得更加平滑。LayerNorm则是通过对Hidden size这个维度归一化来让某层的分布稳定,主要作用是在训练初期缓解梯度消失和爆炸的问题,提升稳定性。
    46、horovd分布式训练,感觉浪费了一般的gpu算力. FaceBook“Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour”和百度“Bringing HPC Techniques to Deep Learning
    47、ELMO模型在语言模型这个任务上同bert一样使用了双向的方法,但是它是通过双向的两层RNN结构对两个方向进行建模,两个方向的loss计算相互独立。而BERT的作者指出这种两个方向相互独立或只有单层的双向编码可能没有发挥最好的效果,我们可能不仅需要双向编码,还应该要加深网络的层数。但加深双向编码网络却会引入一个问题,导致模型最终可以间接地“窥探”到需要预测的词,
    48、 OpenAI Transformer是一类可迁移到多种NLP任务的,基于Transformer的语言模型,其利用Transformer的结构来进行单向语言模型的训练。它的基本思想同ULMFiT相同,都是在尽量不改变模型结构的情况下将预训练的语言模型应用到各种任务。
    49、BERT的本质上是通过在海量的语料的基础上运行自监督学习方法为单词学习一个好的特征表示,所谓自监督学习是指在没有人工标注的数据上运行的监督学习,每一篇文章,天生是训练语料
    50、在以后特定的NLP任务中,我们可以直接使用BERT的特征表示作为该任务的词嵌入特征,可以根据任务进行微调或特征提取使用。
    51、Trm是Transformer block
    52、WordPiece 嵌入:WordPiece是指将单词划分成一组有限的公共子词单元,能在单词的有效性和字符的灵活性之间取得一个折中的平衡
    53、位置嵌入:位置嵌入是指将单词的位置信息编码成特征向量;BERT的位置编码是学习出来的,Transformer是通过正弦函数生成的
    54、lstm堆叠三层就train不动了,还要加上各种trick
    55、单向语言模型的缺陷:单向语言模型有一个欠缺,就是模型学习的时候总是按照句子的一个方向去学的,因此模型学习每个词的时候只看到了上文,并没有看到下文。更加合理的方式应该是让模型同时通过上下文去学习,这个过程有点类似于完形填空题
    56、Whole Word Masking (wwm)中,如果一个完整的词的部分WordPiece子词被mask,则同属该词的其他部分也会被mask;显式强制模型恢复掩蔽语言模型 (MLM) 预训练任务中的整个单词,而不是仅仅恢复 WordPiece 分词,这更具挑战性
    57、小模型适合性能不敏感场景

    时刻记着自己要成为什么样的人!
  • 相关阅读:
    SVN 主干(trunk)、分支(branch )、标记(tag)
    HTML的img标签:alt属性和title属性
    HTML的img标签:alt属性和title属性
    Eclipse远程调试Tomcat
    Eclipse远程调试Tomcat
    使用 Eclipse 远程调试 Java 应用程序
    使用 Eclipse 远程调试 Java 应用程序
    14.Windows 与 Linux 文件共享
    13.远程登录 Linux
    12.Linux 网络配置
  • 原文地址:https://www.cnblogs.com/demo-deng/p/14853904.html
Copyright © 2011-2022 走看看