2022最新版-李宏毅机器学习深度学习课程-P50 BERT的预训练和微调

模型输入无标签文本(Text without annotation),通过消耗大量计算资源预训练(Pre-train)得到一个可以读懂文本的模型,在遇到有监督的任务是微调(Fine-tune)即可。

最具代表性是BERT,预训练模型现在命名基本上是源自于动画片《芝麻街》。

 芝麻街人物

经典的预训练模型:

  • ELMo:Embeddings from Language Models
  • BERT:Bidirectional Encoder Representations from Transformers
  • 华丽分割线,命名逐渐开始离谱
  • ERNIE:Enhanced Representation through Knowledge Integration
  • Grover:Generating aRticles by Only Viewing mEtadaya Records

一、pre-train model 是什么

(一)预训练概念

预训练模型的概念并不是由BERT时才出现。

预训练的任务一般是实现 词语token -> 词向量embedding vector, vector中包含token的语义,比如我们语文中常学习的近义词,语义相近,那么要求其词向量也应该近似。

(二)多语义多语境

存在的问题:同一个token就可以指代同一个vector。解决方法Word2vec、Glove...

但是语言有无穷尽的词语,咱们现在就一直在创造新词语,如 “雪糕刺客”、“栓Q”等等新兴词汇不断迭代更新,一个新的词汇就要增加一个向量,显然是不太OK的。

那么,研究者就想到可以将词语再分,英文可以拆分为字符(FastText),中文可以拆分为单个字,或者将一个中文字看作一张图片输入CNN等模型,可以让模型学习到字的构成。

但分解为单个character后面临的就是语义多意的问题,“养只狗”、“单身狗”其中的“狗”都是狗,但是我们知道,两个“狗”其实是不同的,然鹅他们又不能完全分开,毕竟都用了一个字,其实咱们是将考虑到其语义的。

考虑上下文后,就诞生了语境词向量(Contextualized Word Embedding),输入模型的是整个句子,模型会阅读上下文,而不是仅仅考虑单个token,考虑语境后得到一个词向量表示。【Encoder行为】

语境词向量的模型一般模型会由多层组成,层结构常使用LSTM、Self-attention layers或者一些Tree-based model(与文法相关)。但Tree-base Model经过检验效果不突出,在文法结构严谨(解决数学公式)时,效果突出。

李老师列举了“苹果”在10个句子中的向量表示,两两计算相似度,得到一个10*10的混淆矩阵。可以明显观察到,水果苹果和苹果公司两个苹果语义有所区别。

预训练模型训练参数逐渐增加,网络结构逐渐复杂,各个公司都争相发布“全球最大预训练模型”。

(三)穷人的BERT

预训练模型参数量大,在训练时会消耗大量计算资源,都是一些互联网公司在做,像我们这些“穷人”,没有那么大的GPU算力,就会搞一些丐版BERT。

举例:

  • Distill BERT

[1910.01108] DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter (arxiv.org)​arxiv.org/abs/1910.01108

  • Tiny BERT

[1909.10351v5] TinyBERT: Distilling BERT for Natural Language Understanding (arxiv.org)​arxiv.org/abs/1909.10351v5

  • Mobile BERT

[2004.02984] MobileBERT: a Compact Task-Agnostic BERT for Resource-Limited Devices (arxiv.org)​arxiv.org/abs/2004.02984

  • ALBERT(相比于原版BERT, 12层不同参数,ALBERT12层参数完全一致,效果甚至超过原版BERT一点点)

[1909.11942] ALBERT: A Lite BERT for Self-supervised Learning of Language Representations (arxiv.org)​arxiv.org/abs/1909.11942

模型压缩技术:网络剪枝(Network Pruning)、知识蒸馏(Knowledge Distillation)、参数量化(Parameter Quantization)、架构设计(Architecture Design)

(四)架构设计(Architecture Design)

在该领域架构设计的目标,意在处理长文本语句。

典型代表,读者可以自行检索学习

  • Transformer-XL: Segment-Level Recurrence with State Reuse

[1901.02860] Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context (arxiv.org)​arxiv.org/abs/1901.02860

  • Reformer

[2001.04451] Reformer: The Efficient Transformer (arxiv.org)​arxiv.org/abs/2001.04451

  • Longformer

[2004.05150] Longformer: The Long-Document Transformer (arxiv.org)​arxiv.org/abs/2004.05150

Reformer和Longformer意在降低Self-attention的复杂度。

二、怎么做 Fine-tune

预训练+微调范式是现在的主流形式,我们可以拿到大公司训练好的大模型,只需要根据自己的下游任务加一些Layer,就可以应用某一个具体的下游任务上。

预训练微调效果的实现,需要预训练模型针对该问题进行针对性设计。

(一)Input & Output

这里总结了NLP Tasks的常见输入输出。

  • Input:
    • one sentence: 直接丢进去。
    • multiple sentences: Sentence1 SEP Sentence2, 句子分割。
  • Ouput:
    • one class: 加一个 CLS,或者直接将所有Embedding表示接下游任务分类
    • class for each token
    • copy from input: 可以解决阅读理解问题,QA。
    • General Sequence: 用到Seq2Seq Model
      • v1:将预训练模型看作Encoder,将下游任务模型看作Decoder。
      • v2:给出一个特别符号 SEP,得到字符再输入到预训练模型,让预训练模型encoder-decoder。

 

 

(二)How to fine-tune

如何微调也有两种,一种是冻结预训练模型,只微调下游任务对应的Task-specific部分;另一种是连同预训练模型,将整体网络结构进行参数微调(预训练模型参数不是随机初始化,可以有效避免过拟合)。

Adaptor

        考虑到模型巨大,微调代价太大,且消耗存储大。引入Apt,只微调Pre-train Model中的一部分Apt。这样只需要存储Apt和Task specific. 此处举一个例子。

现在很多预训练模型中都是使用了Transformer的结构,研究者在Transformer结构中插入Adaptor层,通过训练微调Adaptor,而不去修改其他已经训练好的参数。

三、Why Pre-train Models?

研究者提出了GLUE指标,用来衡量机器与人在不同语言任务上的表现,随着深度学习的发展,预训练模型的迭代更新,现在预训练模型使得模型效果已经同人类水平相差无几。

四、Why Fine-tune?

EMNLP19年刊发的一篇文章做了分析,在网络模型上fine-tune与否,Training Loss变化是不同的。

在有Fine-tune的情况下,Training Loss可以很好的实现收敛,而从头训练则会出现较大的波动。

同时考虑泛化能力,因为基于预训练模型将Training Loss降低到很低,有没有可能是过拟合导致的。海拔图可以表示,如果海拔图中,变化越陡峭,模型泛化能力越差,变化越平稳,模型泛化能力越强。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/188587.html

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

相关文章

在线生成二维码--支持彩色二维码和包含Logo

具体请前往:在线二维码生成工具--可将网址等内容生成为指定大小,指定颜色的彩色二维码,同时支持添加Logo

数据结构:Map和Set(2):相关OJ题目

目录 136. 只出现一次的数字 - 力扣(LeetCode) 771. 宝石与石头 - 力扣(LeetCode) 旧键盘 (20)__牛客网 (nowcoder.com) 138. 随机链表的复制 - 力扣(LeetCode) 692. 前K个高频单词 - 力扣&#xff08…

linux_day02

1、链接:LN 一个点表示当前工作目录,两个点表示上一层工作目录; 目录的本质:文件(该文件储存目录项,以链表的形式链接,每个结点都是目录项,创建文件相当于把目录项添加到链表中&…

【Unity之UI编程】编写一个面板交互界面需要注意的细节

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

devops完整搭建教程(gitlab、jenkins、harbor、docker)

devops完整搭建教程(gitlab、jenkins、harbor、docker) 文章目录 devops完整搭建教程(gitlab、jenkins、harbor、docker)1.简介:2.工作流程:3.优缺点4.环境说明5.部署前准备工作5.1.所有主机永久关闭防火墙…

[PHP]Kodexplorer可道云 v4.47

KodExplorer可道云,原名芒果云,是基于Web技术的私有云和在线文件管理系统,由上海岱牧网络有限公司开发,发布于2012年6月。致力于为用户提供安全可控、可靠易用、高扩展性的私有云解决方案。 用户只需通过简单环境搭建,…

数据库安全:Hadoop 未授权访问-命令执行漏洞.

数据库安全:Hadoop 未授权访问-命令执行漏洞. Hadoop 未授权访问主要是因为 Hadoop YARN 资源管理系统配置不当,导致可以未经授权进行访问,从而被攻击者恶意利用。攻击者无需认证即可通过 RESTAPI 部署任务来执行任意指令,最终完…

SQL SELECT INTO 语句

SQL SELECT INTO 语句 使用 SQL,您可以将信息从一个表中复制到另一个表中。 SELECT INTO 语句从一个表中复制数据,然后将数据插入到另一个新表中。 SQL SELECT INTO 语法 我们可以把所有的列都复制到新表中: SELECT * INTO newtable [IN ex…

【Git】说说Git中开发测试的使用Git分支Git标签的使用场景

一、Git的使用场景 1、四个环境以及各自的功能特点 dev环境:开发环境,外部用户无法访问,开发人员使用,版本变动很大。test环境:测试环境,外部用户无法访问,专门给测试人员使用的,版本…

Spring Boot (三)

1、热部署 热部署可以替我们节省大把花在重启项目本身上的时间。热部署原理上,一个springboot项目在运行时实际上是分两个过程进行的,根据加载的东西不同,划分成base类加载器与restart类加载器。 base类加载器:用来加载jar包中的类…

如何在苹果iOS系统ipa应用中获取当前版本号和Bundle ID

在iOS应用开发过程中,了解如何获取和使用应用的当前版本号、Bundle ID和其他相关信息是至关重要的。无论是在应用内显示这些信息,还是在编写一些版本依赖的逻辑时,掌握这些知识点都将帮助开发者进行更有效的管理和维护。本文将详细介绍如何在…

【探索Linux】—— 强大的命令行工具 P.14(进程间通信 | 匿名管道 | |进程池 | pipe() 函数 | mkfifo() 函数)

阅读导航 引言一、进程间通信概念二、进程间通信目的三、进程间通信分类四、管道1. 什么是管道2. 匿名管道(1)创建和关闭⭕pipe() 函数⭕创建匿名管道⭕关闭匿名管道 (2)通信方式(3)用法示例(4&…

腾讯云3年期轻量应用服务器优惠(薅羊毛教程)

腾讯云轻量应用服务器特价是有新用户限制的,所以阿腾云建议大家选择3年期轻量应用服务器,一劳永逸,免去续费困扰。腾讯云轻量应用服务器3年优惠可以选择2核2G4M和2核4G5M带宽,3年轻量2核2G4M服务器540元,2核4G5M轻量应…

Vatee万腾科技决策力的未来展望:开创数字化创新的新高度

随着科技不断演进,Vatee万腾的科技决策力在数字化创新领域展现出了强大的潜力和前瞻性。 Vatee万腾的科技决策力被视为数字化创新的引擎,为未来创新注入了新的动力。通过深刻的市场洞察和科学决策,Vatee万腾致力于推动数字化创新走向新的高度…

SW如何显示样条曲线的控标

刚刚学习隔壁老王的sw画图时,怎么点都点不出样条曲线的控标,于是果断查询了一下解决方法,其实很简单,只不过是培训机构故意不说,叫你还解决不了,难受了就会花钱买他们的课了。毕竟如果学会了怎么解决问题了…

【Linux C IO多路复用】多用户聊天系统

目录 Server-Client mutiplexingServer mutiplexingClient mutiplexing Server-Client 在Linux系统中,IO多路复用是一种机制,它允许一个进程能够监视多个文件描述符(sockets、pipes等)的可读、可写和异常等事件。这样&#xf…

计算机毕业设计 基于SpringBoot的驾校管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

win10虚机扩容C盘

需求: 在虚机管理平台上,将win10虚机的C盘空间扩容至200G,当前空间为100G 操作步骤 1.在虚机平台上,将硬盘1的大小增加至200G 如下图 点击保存; 查看win10虚机,发现C盘空间还是100G,如下图…

C++学习---信号处理机制、中断、异步环境

文章目录 前言信号处理signal()函数关于异步环境 信号处理函数示例raise()函数 前言 信号处理 关于信号,信号是一种进程间通信的机制,用于在程序执行过程中通知进程发生了一些事件。在Unix和类Unix系统中,信号是一种异步通知机制&#xff0c…

javaSE学习笔记(五)集合框架-Collection,List,Set,Map,HashMap,Hashtable,ConcurrentHashMap

目录 四、集合框架 1.集合概述 集合的作用 集合和数组的区别 集合继承体系 数组和链表 数组集合 链表集合 2.Collection 方法 集合遍历 并发修改异常 3.List List集合的特有功能(核心是索引) 集合遍历 并发修改异常产生解决方案ListIterato…