首页 > 其他分享 >李宏毅《机器学习》总结 - BERT(待填)

李宏毅《机器学习》总结 - BERT(待填)

时间:2024-02-16 14:33:07浏览次数:21  
标签:总结 bert linear 训练 BERT 李宏毅 输出 向量

BERT 实际上是一个 tranformer encoder,输入一串向量输出相同个数的向量。
以下以句子为例,句子可以认为是一串向量。

pre-train

如何训练 BERT 呢(事实上应该是预训练,pre-train)?一个常用的方法是做填空题。即,随机挖去一些字,让模型学习如何去填空。其中这个 “挖去” 也有好几种方法(如:将挖去的字设成某个 special token,或者随机设)。
image
在盖住的字对应的输出后面接一个 linear 层,经过 softmax 之后得到了一个 distribution,和标准答案对照,loss 即为 cross entropy,从而将 BERT 和 linear 层进行学习(实际上 linear 层做的为一个分类问题,需要将 bert 输出进行正确分类)。
此外,还可以进行 next-sentence predicition 等。next-sentence prediction 指的是把两个句子连接起来,中间插上间隔符 [SEP],开头插上 [CLS],然后在 [CLS] 对应的 bert 的输出向量再连一个 linear 层,输出 yes/no 表示两个句子是否是前后文。为什么只需要 [CLS] 的输出呢?因为 bert 实质上是 transformer 的 encoder,而 encoder 包含很多层的 self-attention,而注意力机制就考虑了整个序列的信息了。
image
在实作中发现 next-sentence prediction 的效果并不好,可能的原因是考虑的信息太少。
通过以上两种方法,我们就训练出来了 bert。这个过程就叫做 self-supervised learning。个人理解:通过 pre-train 让 bert 来“理解”语言,从而能完成对应的下游任务。
在 bert 通过微调之后可以对下游任务进行处理(如作业中的 question-answering)其中下游任务的训练是需要一些标注的数据的
image

bert 的下游任务

  1. 情感分析(sentiment analysis)
    image
    和上面提到的类似,[CLS] 对应的输出连上一个 linear 层,linear 层和 bert 作为整个模型进行训练,通过有标注的数据训练,进行 gradient descent。其中 linear 层的初始参数是随机的,而 bert 的参数是预训练的。
  2. 词性标注(POS tagging)
    image
  3. 自然语言推断(natural language inference)
    image
  4. 问题回答(extraction-based question answering)
    这是 HW7 的内容,简单写写。
    给你一个问题,答案是文档中的原文。如何训练?注意到我们实际上只要得出原文的 start_pos(s) 和 end_pos(e) 即可。
    一个问题和对应的文档连接起来扔到 bert 里面,训练两个向量S、E(初始随机),大小和 bert 的输出向量大小相同,分别和 document 对应的输出向量做点乘,再 softmax 得到分布,和训练资料中的答案的 one-hot vector 做 cross entropy 训练 S+E+bert(实际上相当于做了 2 个分类)
    还有一点是输入的 document 是要截取的(如可取长度=512),否则长度过长的话,self-attention 的效率很低。
    image

(待填)

标签:总结,bert,linear,训练,BERT,李宏毅,输出,向量
From: https://www.cnblogs.com/SkyRainWind/p/18017099

相关文章

  • Slope Trick 总结
    SlopeTrick总结注意:SlopeTrick并不是斜率优化,斜率优化的英文是ConvexHullTrick。算法适用性SlopeTrick通常用于维护具有如下性质的函数:连续。是分段一次函数。是凸函数。每一段的斜率较小(通常为\(O(n)\)),且均为整数。常常用于优化动态规划。不失一般性,约定本......
  • Codeforces Round 926 (Div. 2) 赛后总结
    这场比赛掉了前三场比赛上的分,望周知。SashaandtheBeautifulArray题目大意:一个有n个数的数组,对n个数进行排序,求数组中ai-ai-1(下标从2到n)的和的最大值。分析列出来和式,为an-an-1+an-1-an-2……-a1最后得到an-a1那么an最大,a1最小即可。很容易想到排序。#include<i......
  • 机器学习中的10种非线性降维技术对比总结
    降维意味着我们在不丢失太多信息的情况下减少数据集中的特征数量,降维算法属于无监督学习的范畴,用未标记的数据训练算法。尽管降维方法种类繁多,但它们都可以归为两大类:线性和非线性。线性方法将数据从高维空间线性投影到低维空间(因此称为线性投影)。例子包括PCA和LDA。非线性......
  • 省选游记+省选前总结
    Day-16初五的新年气息仍然有,不过接近尾声了,当热闹的气氛过后,便就只有无尽的孤独了中午便来到了二南,初中同学居然\(13\)天后才放假,真是秦始皇踩电线,赢麻了做题总结:P2619[国家集训队]TreeI\(wqs\)二分的板子题\(wqs\)主要利用了答案函数的凸性,通过斜率......
  • 每日总结
    Scala访问修饰符Scala访问修饰符基本和Java的一样,分别有:private,protected,public。如果没有指定访问修饰符,默认情况下,Scala对象的访问级别都是public。Scala中的private限定符,比Java更严格,在嵌套类情况下,外层类甚至不能访问被嵌套类的私有成员。私有(Private)成员......
  • 2024.2.15模拟赛总结
    这次发挥很好啊,rank1,300pts,比rank2高了70ptsT1发现操作二的影响是不可避免的,就尽可能让操作1没影响,每次就删连续的相同的数字,然后统计一下即可T2感觉思路很自然,首先只需要保留近k次操作如果有一个横的和一个竖的覆盖两个点,就可以直接走曼哈顿距离如果两点之间被横或......
  • 运算符总结
    publicclass基本运算符{publicstaticvoidmain(String[]args){//算术运算符//二元运算符inta=10;intb=20;intc=25;intd=25;System.out.println(a+b);System.out.println(a-b);......
  • 模拟赛总结
    2024.2.6【寒假集训】20240206测试T1珠子T2数组这个题,我没考虑到的是要保留全部的\(x,y\)操作信息,以及上一次\(A\)操作的时间等等。代码(参考lcy):#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,m;intt1[500001],t2[500001];intlst[5......
  • C#实现异步编程的常用方式总结
    随着现代软件对性能和响应速度的要求越来越高,异步编程已经成为许多开发者必须掌握的技能。C#提供了多种实现异步编程的方式,每种方式都有其特定的适用场景和优缺点。本文将详细介绍C#中实现异步编程的常用方式,帮助读者更好地理解并选择合适的异步编程方法。一、Task和TaskC#......
  • Codeforces Round 925 (Div. 3) 赛后总结
    此次总结借鉴了Register_int,0x3ea,幻想家协会会长的题解。感谢大佬。RecoveringaSmallString题目大意:将字母a-z编号为1-26,给出一个整数,此整数为三个字母之和,求改字符串的最小字典序。分析可以暴力循环,或者分情况讨论.我们只要尽力保持越前面的字母越小越好。#include<i......