2022最新版-李宏毅机器学习深度学习课程-P46 自监督学习Self-supervised Learning(BERT)

一、概述:自监督学习模型与芝麻街

参数量

  • ELMO:94M
  • BERT:340M
  • GPT-2:1542M
  • Megatron:8B
  • T5:11B
  • Turing NLG:17B
  • GPT-3:175B
  • Switch Transformer:1.6T

二、Self-supervised Learning⇒Unsupervised Learning的一种

“自监督学习”数据本身没有标签,所以属于无监督学习;但是训练过程中实际上“有标签”,标签是“自己生成的”

想办法把训练数据分为“两部分”,一部分作为作为“输入数据、另一部分作为“标注”。

三、BERT

💡 作为transformer,理论上BERT的输入长度没有限制。但是为了避免过大的计算代价,在实践中并不能输入太长的序列。 事实上,在训练中,会将文章截成片段输入BERT进行训练,而不是使用整篇文章,避免距离过长的问题。

BERT是一个transformer的Encoder,BERT可以输入一行向量,然后输出另一行向量,输出的长度与输入的长度相同。BERT一般用于自然语言处理,一般来说,它的输入是一串文本。当然,也可以输入语音、图像等“序列”。

Masking Input

随机盖住一些输入的文字,被mask的部分是随机决定的。

MASK的方法

  • 第一种方法是,用一个特殊的符号替换句子中的一个词,我们用 "MASK "标记来表示这个特殊符号,你可以把它看作一个新字,这个字完全是一个新词,它不在你的字典里,这意味着mask了原文。
  • 另外一种方法,随机把某一个字换成另一个字。中文的 "湾"字被放在这里,然后你可以选择另一个中文字来替换它,它可以变成 "一 "字,变成 "天 "字,变成 "大 "字,或者变成 "小 "字,我们只是用随机选择的某个字来替换它

两种方法都可以使用,使用哪种方法也是随机决定的。

训练方法

  1. 向BERT输入一个句子,先随机决定哪一部分的汉字将被mask。
  2. 输入一个序列,我们把BERT的相应输出看作是另一个序列
  3. 在输入序列中寻找mask部分的相应输出,将这个向量通过一个Linear transform(矩阵相乘),并做Softmax得到一个分布
  4. 用一个one-hot vector来表示MASK的字符,并使输出和one-hot vector之间的交叉熵损失最小。

💡 本质上,就是在解决一个分类问题。BERT要做的是预测什么被盖住。

Next Sentence Prediction(不太有用)

从数据库中拿出两个句子,两个句子之间添加一个特殊标记[SEP],在句子的开头添加一个特殊标记[cls]。这样,BERT就可以知道,这两个句子是不同的句子。

只看CLS的输出,我们将把它乘以一个Linear transform,做一个二分类问题,输出yes/no,预测两句是否前后连续。

Robustly Optimized BERT Approach(RoBERTa)

Sentence order prediction,SOP(句子顺序预测)⇒ALBERT

挑选的两个句子是相连的。可能有两种可能性供BERT猜测:

  • 句子1在句子2后面相连,
  • 句子2在句子1后面相连。

BERT的实际用途 ⇒ 下游任务(Downstream Tasks)

预训练与微调

  • 预训练:产生BERT的过程
  • 微调:利用一些特别的信息,使BERT能够完成某种任务

BERT只学习了两个“填空”任务。

  • 一个是掩盖一些字符,然后要求它填补缺失的字符。
  • 预测两个句子是否有顺序关系。

但是,BERT可以被应用在其他的任务【真正想要应用的任务】上,可能与“填空”并无关系甚至完全不同。【胚胎干细胞】当我们想让BERT学习做这些任务时,只需要一些标记的信息,就能够“激发潜能”

对BERT的评价任务集——GLUE(General Language Understanding Evaluation)

为了测试Self-supervised学习的能力,通常,你会在一个任务集上测试它的准确性,取其平均值得到总分。

性能衡量

人类的准确度是1,如果他们比人类好,这些点的值就会大于1。

四、How to use BERT——[CLS]+Fine Tune

Case 1:Sentiment analysis

给机器一个句子,让它判断这个句子是正面的还是负面的。

给它一个句子,把CLS标记放在这个句子的前面,只看CLS的部分。CLS在这里输出一个向量,我们对它进行Linear transform+Softmax,得到类别。

对下游任务,需要标注资料。

在训练的时候,Linear transform和BERT模型都是利用Gradient descent来更新参数的。

  • Linear transform的参数是随机初始化
  • 而BERT的参数是由学会填空的BERT初始化的。⇒将获得比随机初始化BERT更好的性能。

对比预训练与随机初始化

  • "fine-tune"是指模型被用于预训练,这是网络的BERT部分。该部分的参数是由学习到的BERT的参数来初始化的,以填补空白。
  • scratch表示整个模型,包括BERT和Encoder部分都是随机初始化的。

scratch与用学习填空的BERT初始化的网络相比,损失下降得比较慢,最后,用随机初始化参数的网络的损失高于用学习填空的BERT初始化的参数。

使用BERT的整个过程是连续应用Pre-Train + Fine-Tune,它可以被视为一种半监督方法(semi-supervised learning)

  • 当你进行Self-supervised学习时,你使用了大量的无标记数据⇒unsupervised learning
  • Downstream Tasks 需要少量的标记数据

Case 2 :POS tagging

BERT部分,即网络的Encoder部分,其参数不是随机初始化的。在预训练过程中,它已经找到了不错的参数。

Case 3:Natural Language Inference(NLI)

给出前提和假设,机器要做的是判断,是否有可能从前提中推断出假设。⇒ 预测“赞成、反对”

你只要给它两个句子,我们在这两个句子之间放一个特殊的标记SEP,并在最开始放CLS标记。最终考察CLS标记对应的输出向量,将其放入Linear transform的输入得到分类。

Case 4:Extraction-based Question Answering (QA)→答案必须出现在文中

        入序列包含一篇文章和一个问题,文章和问题都是一个序列。对于中文来说,每个d代表一个汉字,每个q代表一个汉字。你把d和q放入QA模型中,我们希望它输出两个正整数s和e。根据这两个正整数,我们可以直接从文章中截取一段,它就是答案。这个片段就是正确的答案。

模型细节

对于BERT来说,你必须向它展示一个问题,一篇文章,以及在问题和文章之间的一个特殊标记,然后我们在开头放一个CLS标记。

在这个任务中,你唯一需要随机初始化从头训练两个向量,分别对应与答案的开始与结束,用橙色向量和蓝色向量来表示,这两个向量的长度与BERT的输出相同。

  • 首先,计算这个橙色向量和那些与document相对应的输出向量(黄色向量)的内积,计算内积,通过softmax函数,找到数值最大的位置,即为答案的开始位置。

    【这个内积和attention很相似,你可以把橙色部分看成是query,黄色部分看成是key,这是一个attention,那么我们应该尝试找到分数最大的位置】

  • 类似地,利用蓝色向量可以找到答案的结尾位置。

BERT难以训练

  • 数据量大
  • 训练过程困难

自己训练BERT后,可以观察到BERT什么时候学会填什么词汇,它是如何提高填空能力的?

https://arxiv.org/abs/2010.02480

五、Pre-training a seq2seq model

        输入是一串句子,输出是一串句子,中间用Cross Attention连接起来,然后你故意在Encoder的输入上做一些干扰来破坏它。Encoder看到的是被破坏的结果,Decoder应该输出句子被破坏前的结果,训练这个模型实际上是预训练一个Seq2Seq模型

如何“破坏”句子?MASS/BART/T5

  • MASS⇒MASK
  • BART⇒删除一些词,打乱词的顺序,旋转词的顺序。或者插入一个MASK,再去掉一些词。
  • T5(Transfer Text-To-Text Transformer)⇒在C4语料库(Colossal Clean Crawled Corpus)上尝试了各种组合

六、为什么BERT有用?

当输入一串文本时,每个文本都有一个对应的向量,称之为embedding。这些向量代表了输入词含义

更具体地说,如果你把这些词所对应的向量画出来,或者计算它们之间的距离。意思比较相似的词,它们的向量比较接近

词嵌入:一种将词语映射到向量空间的技术,用于表示词语的语义信息。通过将词语表示为向量,可以在计算机中进行词语之间的计算和比较。

Embedding in BERT

训练BERT时,我们给它w1、w2、w3和w4,我们覆盖w2,并告诉它预测w2,而它就是从上下文中提取信息来预测w2。所以这个向量是其上下文信息的精华,可以用来预测w2是什么。

BERT的这些向量是输出向量代表了该词的含义,可以认为BERT在填空的过程中已经学会了每个汉字的意思

相关技术:CBOW

CBOW所做的,与BERT完全一样。做一个空白,并要求它预测空白处的内容。这个CBOW,这个word embedding技术,可以给每个词汇一个向量代表这个词汇的意义。由于算力原因,CBOW是一个非常简单的模型,只使用了两个变换。今天的BERT,就相当于一个深度版本的CBOW

contextualized embedding

语言存在“歧义”,同一token在不同的上下文中会有不同的含义。BERT在Encoder中存在Self-Attention,会考虑上下文,根据不同的语境,从同一个词汇产生不同的embedding。

奇怪的应用——DNA、蛋白质、音乐的分类

把一个DNA序列/蛋白质/音乐预处理成一个无意义的token序列,并使用BERT进行分类,也能得到比较好的结果。

 💡 也许它的力量并不完全来自于对实际文章的理解。 还有其他原因。例如,也许BERT只是一套更好的初始参数,与语义不一定有关,只是在训练大型模型时更好。

More BERT

七、Multi-lingual BERT——Zero-shot reading comprehension

它是由很多语言来训练的,比如中文、英文、德文、法文等等,用填空题来训练BERT,这就是Multi-lingual BERT的训练方式。

google训练了一个Multi-lingual BERT,它能够做这104种语言的填空题。神奇的地方来了,如果你用英文问答数据训练它,它就会自动学习如何做中文问答。

Why?

Cross-lingual Alignment?

一个简单的解释是:也许对于multi-lingual的BERT来说,不同的语言并没有那么大的差异。无论你用中文还是英文显示,对于具有相同含义的单词,它们的embedding都很接近。汉语中的 "跳 "与英语中的 "jump "接近,汉语中的 "鱼 "与英语中的 "fish "接近,汉语中的 "游 "与英语中的 "swim "接近,也许在学习过程中它已经自动学会了。

验证:MRR(Mean Reciprocal Rank)的值越高,同样意思不同语言的词汇向量越接近,也就是不同embedding之间的Alignment就越好

数据量是一个非常关键的因素。基于大量数据与大算力支撑,才能够把不同的语言排列在一起。

语言之间的关系/差距?

当训练多语言的BERT时,如果给它英语,它可以用英语填空,如果给它中文,它可以用中文填空,它不会混在一起,这说明它知道语言的信息也是不同的。

将某一语言的所有Embedding求平均作为“语言向量”,两个向量相减可以视为“语言的差距向量”。将某一语言的向量加上这一“差距向量”,能够实现“无监督翻译”

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

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

相关文章

4.0 Linux进程前导知识

个人主页:Lei宝啊 愿所有美好如期而遇 冯.诺依曼体系 CPU:运算器,控制器 输入设备:键盘,麦克风,摄像头,鼠标,网卡,磁盘等。 输出设备:显示器&#xff0…

51单片机PCF8591数字电压表LCD1602液晶显示设计( proteus仿真+程序+设计报告+讲解视频)

51单片机PCF8591数字电压表LCD1602液晶设计 ( proteus仿真程序设计报告讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0060 51单片机PCF8591数字电压表LCD1602液晶设计 1.主要功能&a…

【C++】【Opencv】minMaxLoc()函数详解和示例

minMaxLoc()函数 是 OpenCV 库中的一个函数,用于找到一个多维数组中的最小值和最大值,以及它们的位置。这个函数对于处理图像和数组非常有用。本文通过参数和示例详解,帮助大家理解和使用该函数。 参数详解 函数原型…

linux下使用Docker Compose部署Spug实现公网远程访问

📑前言 本文主要是linux下使用Docker Compose部署Spug实现公网远程访问的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 &am…

CountDownLatch使用

常用于多线程场景&#xff0c;待多线程都结束后方可继续主线程逻辑处理 CodeConstant 常量类 import java.util.HashMap; import java.util.Map;public class CodeConstant {public static final Map<String, Map<String, String>> CODE new HashMap<>();…

标本传送设备物联网应用案例|蓝蜂物联网一体化方案

标本传送设备物联网应用案例 标本传输系统被大量应用到现代医院场景中&#xff0c;系统各个设备的运行情况直接影响到整个医院系统的正常稳定&#xff0c;所以对于标本传输系统的实时监控和及时运维是维持医院稳定和规避风险的重中之重。 针对标本传输系统应用过程中的数据统…

分组取每组数据的最大值和最小值的方法思路,为类似场景的数据分析提取提供思路,例如提取宗地内建筑的最高层数等可参考此方法思路

目录 一、实现效果 二、实现过程 1.读取并剔除无效数据 2.数据分组 3.提取最大值 4.提取最小值 三、总结 使用FME实现批量分组取每组数据的最大值和最小值&#xff0c;为类似场景的数据分析提取提供思路&#xff0c;例如提取宗地内建筑的最高层数等可参考此方法思路。关…

基于RK3399的室内健身魔镜方案

I 方案背景 一、健身魔镜的兴起 2020年疫情席卷全球&#xff0c;宅家是防疫的措施之一&#xff0c;因而宅家运动火爆&#xff0c;随之而来的宅家运动器材也风靡起来&#xff0c;其中包含既有颜值又具有多种功能的健身魔镜。 Ⅱ 方案介绍 一、健身魔镜的方案介绍 …

ORA-00257: Archiver error. Connect AS SYSDBA only until resolved错误解决

错误的原因&#xff1a;是因为服务器分配空间不足&#xff0c;数据库归档日志满导致系统数据库登陆失败。 解决办法&#xff1a;1.删除以前的日志 2.增大归档日志的容量 3.关闭归档模式 一、删除以前的容量 1.登录账号后&#xff0c;查看ORACLE_BASE目录 【oraclelocalhost~】$…

数据结构与算法之排序: Leetcode 21. 合并两个有序链表 (Typescript版)

合并两个有序链表 https://leetcode.cn/problems/merge-two-sorted-lists/ 描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 …

Linux网络——自定义协议

目录 一.什么是协议 二.协议与报文 三.自定义协议 1.封装套接字 2.构建请求与响应 3.序列化和反序列化 4.报头添加和去除 5.报文读取 四.服务器端程序 五.客户端程序 一.什么是协议 协议在生活中泛指&#xff1a;双方或多方为了完成某项任务或达成某种目的而制定的共…

【Proteus仿真】【Arduino单片机】简易计算器设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用PCF8574、LCD1602液晶、4*4矩阵键盘等。 主要功能&#xff1a; 系统运行后&#xff0c;操作矩阵按键可实现简单四则运算。 二、软件设计 /* …

链表题(3)

链表题 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 本篇内容继续给大家带来链表的一些练习题 链表分割 知识点&#xff1a; 编程基础 链表…

MUYUCMS v2.1:一款开源、轻量级的内容管理系统基于Thinkphp开发

MuYuCMS&#xff1a;一款基于Thinkphp开发的轻量级开源内容管理系统&#xff0c;为企业、个人站长提供快速建站解决方案。它具有以下的环境要求&#xff1a; 支持系统&#xff1a;Windows/Linux/Mac WEB服务器&#xff1a;Apache/Nginx/ISS PHP版本&#xff1a;php > 5.6 (…

Vue3问题:如何实现页面引导提示?

前端功能问题系列文章&#xff0c;点击上方合集↑ 序言 大家好&#xff0c;我是大澈&#xff01; 本文约1700字&#xff0c;整篇阅读大约需要3分钟。 本文主要内容分三部分&#xff0c;第一部分是需求分析&#xff0c;第二部分是实现步骤&#xff0c;第三部分是问题详解。 …

【数据结构】非递归实现二叉树的前 + 中 + 后 + 层序遍历(听说面试会考?)

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;数据结构 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&…

第2关:还原键盘输入(list)

题目&#xff1a; 知识点&#xff1a; 列表list相较于数组&#xff1a; 优势&#xff1a;可在任意指定位置插入或者删除元素而不影响列表其他地方 。 劣势&#xff1a;无法直接进行下标索引&#xff0c;需要迭代器it逐个遍历。 代码&#xff1a; #include <iostream>…

Mysql学习笔记--基础

一&#xff0c;SQL最重要的增删改命令格式 1&#xff0c;insert into 表名&#xff08;不写这个括号里面的内容就默认所有字段都要添加&#xff09; values&#xff08;&#xff09; 插入单条数据 2&#xff0c;insert into 表名 (里面是列名) values&#xff08;根据列名依次…

Git之分支与版本->课程目标及知识点的应用场景,分支的场景应用,标签的场景应用

1.课程目标及知识点的应用场景 Git分支和标签的命名规范 分支 dev/test/pre/pro(即master) dev:开发环境--windows (自己的电脑) test:测试环境--windows/linux (公司专门的测试电脑 pre:灰度环境(非常大的公司非常重要的项目) pro:正式环境 灰度环境与正式环境的服务器配置…

Azure 机器学习 - 使用受保护工作区时的网络流量流

目录 环境准备入站和出站要求方案&#xff1a;从工作室访问工作区方案&#xff1a;从工作室使用 AutoML、设计器、数据集和数据存储方案&#xff1a;使用计算实例和计算群集方案&#xff1a;使用联机终结点入站通信出站通信 方案&#xff1a;使用 Azure Kubernetes 服务方案&am…