当前位置: 首页 > news >正文

【王树森】BERT:预训练Transformer模型(个人向笔记)

前言

  • BERT:Bidirectional Encoder Representations from Transformer
  • BERT是用来预训练Transformer模型的encoder的
  • 本节课只讲述主要思想
  • BERT用两个主要思想来训练Transformer的encoder网络:①随机遮挡单词,让encoder根据上下文来预测被遮挡的单词。②把两句话放在一起,让encoder判断是不是原文相邻的两句话

Randomly mask a word

  • 随机遮挡一个单词,让神经网络来预测这个单词是什么:
    在这里插入图片描述
  • 我们把cat遮住后如下图所示:我们把原来的 x 2 x_2 x2 变为了 x M x_M xM,由前几节课transformer的原理可以知道:最后的输出不仅仅取决于 x 2 x_2 x2 x M x_M xM,而是包含整句话的信息,最后我们把 u M u_M uM 输入到 Softmax 后,期望其中的 cat 的概率是最大的
    在这里插入图片描述
  • 我们把被遮住的单词 cat 的one-hot向量称为 e e e p p p 为上面 Softmax 输出的概率分布向量,那么我们要让 p p p 尽可能地接近 e e e,于是我们可以把它丢进交叉熵损失函数里面进行反向传播,梯度下降:
    在这里插入图片描述
  • BERT 不需要人为打标,可以自动遮住单词然后生成标签。因此可以拥有很多的数据,可以训练很大的模型

Predict the Next Sentence

  • 给定随机的两句话,问这两句在文中是否是相邻的
    在这里插入图片描述
  • 其中输入时两句话,其中 [CLS] 时分类的标号,[SEP] 是分句的标号在这里插入图片描述
  • 该方法会在原来的文本随机选取句子,其中一半是相邻的,一半不是相邻的
    在这里插入图片描述
    在这里插入图片描述
  • CLS符号在经过 Embedding 和 Transformer 的 Encoder 后会生成一个向量 c c c,其由一个二分类器来计算值,虽然由 attention 机制我们可以知道: c c c 还依赖于文中的其他信息,这样就能学到两句话的信息,这样我们就可以让 c c c 和标签做交叉熵损失,然后就能反向传播和梯度下降来训练。相邻两句话通常含有关联,这样训练就能让 Embedding 和 Encoder 学到这种关联信息。
    在这里插入图片描述

Combining the two methods

  • 把上面两个任务结合起来:这样就有多个标签
    在这里插入图片描述
    在这里插入图片描述
  • 假设我们有两个单词被遮住了,那么就有三个任务,三个损失函数,那么最后的损失函数就是三个损失函数之和
    在这里插入图片描述
  • BERT 的优点在于不用人工标注数据,因为人工标注数据是非常昂贵的。而 BERT 可以自动生成标签,这是一个非常好的性质
  • 缺点在于 BERT 的计算代价很大:
    在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Pinterest账号被封?试试这几种解封方法
  • 排序算法之堆排序详细解读(附带Java代码解读)
  • 【比较】数据字节串/字串比较指令 (CMPSB/CMPSW),数据字节串/字串检索指令(SCASB/SCASW)的区别
  • 实战项目:俄罗斯方块(二)
  • 鸿蒙OpenHarmony、HarmonyOS、HarmonyOS NEXT的区别
  • 直播行业的未来:南昌络喆科技有限公司的创新无人直播项目!
  • The Power of Scale for Parameter-Efficient Prompt Tuning
  • Hive锁表、hive查询表是否被锁、hive解锁表
  • 数据结构之 “单链表“
  • MAC环境导出项目的目录结构
  • 【iOS】折叠cell
  • PG逻辑解码
  • 常见的性能测试方法!
  • 计算机毕业设计推荐-基于python的公司员工考勤管理系统
  • 全网最详细docker详解,从概念到实战一篇解决
  • C++类中的特殊成员函数
  • JavaScript服务器推送技术之 WebSocket
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • Webpack 4 学习01(基础配置)
  • 多线程事务回滚
  • 经典排序算法及其 Java 实现
  • 前端路由实现-history
  • 浅谈web中前端模板引擎的使用
  • 小程序button引导用户授权
  • 智能合约Solidity教程-事件和日志(一)
  • hi-nginx-1.3.4编译安装
  • scrapy中间件源码分析及常用中间件大全
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • $NOIp2018$劝退记
  • (~_~)
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (70min)字节暑假实习二面(已挂)
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (SpringBoot)第二章:Spring创建和使用
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (分布式缓存)Redis哨兵
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (十八)SpringBoot之发送QQ邮件
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)Scala的“=”符号简介
  • (转载)Linux网络编程入门
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net 7 上传文件踩坑
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .net core 依赖注入的基本用发