Transformer、BERT等模型学习笔记
记录一下刷B站教学视频的一些笔记,目前主刷:
- 李沐老师的【跟李沐学AI】
- 公众号-【NLP从入门到放弃】 的视频
文章目录
- 1 Transformer从零详细解读(可能是你见过最通俗易懂的讲解)
- 1.1 整体结构
- 1.2 encoder部分
- 1.2.1 输入部分
- 1.2.2 多头注意力机制
- 1.2.2.1 注意力机制原理
- 1.2.2.2 QKV的获取方式
- 1.2.3 残差
- 1.2.3 layer norm 与BN的差异
- 1.2.4 前馈神经网络
- 1.3 Decoder
- 1.3.1 masked
- 1.3.2 新增的多头注意力机制层
- 2 BERT从零详细解读,看不懂来打我
- 2.1 BERT整体架构
- 2.2 MLM + NSP如何做预训练
- 2.2.1 MLM
- 2.2.2 NSP
- 2.3 微调BERT,提升BERT在下游任务的效果
- 2.4 脱敏数据使用BERT预训练模型
1 Transformer从零详细解读(可能是你见过最通俗易懂的讲解)
地址:
Transformer从零详细解读(可能是你见过最通俗易懂的讲解)
关联知乎文章:
万字长文帮你彻底搞定Transformer-不要错过!!
答案解析(2)-3分钟彻底掌握Transformer的Encoder—满满干货!!
答案解析(1)—史上最全Transformer面试题:灵魂20问帮你彻底搞定Transformer
1.1 整体结构
transformer整体结构简图: 6 encoder * 6decoder
6个encoder结构完全相同,但是训练的时候是6个同时训练,独立训练,这里跟alBERT有差别,albert是共享transformer某些层的参数,达到减少参数量的目的。
以下是论文的transformer图,左边是一个encoder的图样,一共会 有Nx个(乘以N个),
右边是一个decoder,一共会有Nx个:
从图中,可以看到,decoder比encoder要多一个模块,就是masked muti-head attention的模块
1.2 encoder部分
单独拿一个出来,来看,一共分为三个部分:
- 输入部分
- 注意力机制
- 前馈神经网络
1.2.1 输入部分
input = embedding + postion bedding
为啥需要位置信息?不适用RNN?
RNN可以获得一套参数,transformer是并行的,丢失了位置信息,就通过编码,加到embedding,让embedding拥有位置信息
RNN里面,所有的step都 共享 一套参数,包括,U,W,V
那RNN的梯度消失是什么?
RNN的梯度是一个梯度消失和,并不是梯度变为0,
RNN是一套参数的梯度,那么这套参数会更加适应 St+1St+1St+1 而对St−1St-1St−1不友好,忘记重视前面的隐藏层
位置编码的公式:
为什么相对位置编码是有用的,可以代表位置?
那么总结,
最后输入项 = 位置编码 + embedding,对位相加:
1.2.2 多头注意力机制
1.2.2.1 注意力机制原理
注意力机制计算的时候,一定有Q,K,V三个矩阵:
根据公式来看例子:
Q,K都分别代表两个向量,点乘代表两个向量的相似程度,
这里婴儿Q,点乘四个K值,就代表婴儿与四个区域,哪个更相似,所以
softmax(Q,K) 代表相似度
这个图演示了一个attention计算出来的经过
1.2.2.2 QKV的获取方式
一个input,会跟QKV同时相乘,那么:
- Q = X*Wq
- K = X*Wk
- V = X*Wv
此时Wq、 Wk、 Wv
为Q,K,V的参数
得到了q1/q2,就可以跟上述注意力机制计算一样:softmax(q,k) * v
可以来看一下具体相乘的过程:
矩阵并行QKV,比较快
多头 => 多套参数Wq、 Wk、 Wv
如果是8个头,那就是接在一起共同输出,Z0就是注意力层的第一个头,一直有8个
1.2.3 残差
laynorm计算过程:
上面经过多头注意力层,就有Z1,Z2多头注意力层进行输出
这里的laynorm,是把多头注意力层输出的Z + 原始的X,
add之后进行normalize
解释一下残差
X经过两个weight layer,最后会得到:f(x)+ x
抽象成以下的公式:
残差这里的1,就可以保证梯度不消失,因为消失较多的情况是,连乘会导致梯度消失,所以残差网络可以让网络变得很长,因为可以保证梯度不会消失;
反观RNN,顶多是bi-lstm,一旦过长容易梯度消失,所以RNN网络做深非常难
1.2.3 layer norm 与BN的差异
另外一个知识点:layer norm(LN) 与 BN的差异
BN效果差,NLP中基本不用,因为RNN不用,一般用LN;
CNN可能会用BN
BN - 进行feature scaling标准化,
BN进行标准化是一个特征所有进行标准化,如下图的所有人的体重这一行做标准化
指的是所有词,样本,一行代表一种特征,第一行体重,第二行身高
BN指的是,选的一个Batch中所有的人,体重这一行做标准化,
BN最大的问题 : 但是有一个问题就是,如果Batch非常小,那么这时候方差/标准差只是局部的,并不能总体,所以波动非常大
意思就是,本来有1w个样本,如果做标准化,就是体重这一列,1w个人标准化,但是现在的情况是,一个batch可能只有100个人,
那么1w和100个人的标准差,均值都不一样了,所以BN代表用100个人的模式,表达这1w个人
所以,LN的意思就是,标准化,不是按行,而是按每个样本,按照一个人,体重,身高,等等特征
在RNN中,比较难,因为有些词padding,后面的都是0,方差不好算
1.2.4 前馈神经网络
就是红框的部分,Z1、Z2分别通过一个feed forward,代表两层的全连接
再过一个残差和Normalize
1.3 Decoder
主要有两个大模块不同
- 改成masked
- 多了一个交互层
1.3.1 masked
这里有个细节点就是masked,
为什么需要mask,如果要预测YOU这个单词,如果不mask,就会出现信息泄露
decoder是预测型的,需要mask后面的单词
1.3.2 新增的多头注意力机制层
这里encoder的输出(KV矩阵,如下图),会同时给到所有的decoder(生成Q矩阵)
所以这里新增多头注意力机制,KV来自encoder的输出层,而且给到每一个decoder
下面有一个encoder(K、V) -> decoder(Q,下图的encoder-decoder attention)的详细图解:
2 BERT从零详细解读,看不懂来打我
B站地址:BERT从零详细解读,看不懂来打我
2.1 BERT整体架构
BERT是tansformer中剥离多个encoder,然后堆叠在一起
而不是12层transformer(6*encoder + 6 * decoder)
展开其中一个encoder如下,input跟transformer不太一样,
- transformer input = positional encoding + embedding
- bert input = token emb + segment emb + position emb
解析一下input:
- segment emb 是一句话为0,一句话全为1
- postion emb是初始化后,让模型自己训练出位置信息
提问:那么[cls]是否可以作为句向量来表征这个句子?
[cls]表征的向量不是句向量,输出是为了二分类,如果拿[cls]表征的向量来做相似性聚类,效果非常差,不如Word embedding
2.2 MLM + NSP如何做预训练
2.2.1 MLM
AR自回归模型 与 AE自编码模型 的差异
AR模型就是用到单侧信息,是从左到右顺序的
AE模型打乱文本,让文本进行重建,不仅是单侧信息,周边信息都会使用到
mask的缺点是什么
mask字之间不是独立的,可能是有关联的,
而mask模型中是认为独立的
那么BERT里面mask的具体操作是
2.2.2 NSP
- 主题预测 - 两个段落是否来自同一个主题,因为在抽样的时候,就是不同的文章,当然大概率就不是一个主题了
- 连贯性预测 - 两个段落是否有顺序
但是从这两个任务来看,主题任务是非常简单的,导致效果不是特别好
所以后面的albert不要主题预测,只使用连贯性预测(预测句子顺序,正负样本来自同一个文章,正样本就是两个有序的句子,负样本就是把有序句子进行颠倒)
2.3 微调BERT,提升BERT在下游任务的效果
文本分类就是[cls]输出句子
序列标注就是对每一个输出token接入一个softmax
句子对分类,就是两个句子接起来,然后[cls]分类输出
一般工业界的做法是:
- 直接获取谷歌中文BERT
- 自己训练
关于预训练模型,有几种等级的预训练阶段:
比如沿着2展开,大量微博文本继续训练BERT时候,讲师推荐两种技巧:
- 动态mask,之前训练,比如“我爱吃饭”,一般都是固定mask某一个,比如,“爱”;现在动态,每一次mask不一样的好一些
- n-gram mask,是使用n-gram,使用实体词的mask
其他的一些训练技巧
2.4 脱敏数据使用BERT预训练模型
作者的建议是,如果语料非常大,那么:
- 第一种,直接从新训练
- 第二种,先把脱敏内容随机映射到文本中,比如脱敏是"abbbdda",那么可以直接随机映射为"我你你你她她我",将中文已经训练的作为初始化
Transformer、BERT等模型学习笔记相关推荐
- DMU-单性状重复力模型-学习笔记3
单性状重复力模型 本次主要是演示如何使用DMU分析单性状重复力模型. 重复力模型和动物模型的区别: 不是所有的性状都可以分析重复力模型, 首先重复力模型是动物模型的拓展, 它适合一个个体多个观测值的情 ...
- 文本分类模型学习笔记
文本分类模型学习笔记 TextCNN 模型结构 HAN 模型结构 实验 数据集 预处理 模型内容 模型训练 模型测试 近年来,深度学习模型在计算机视觉和语音识别中取得了显著成果.在自然语言处理中,深度 ...
- 概率图模型学习笔记:HMM、MEMM、CRF
作者:Scofield 链接:https://www.zhihu.com/question/35866596/answer/236886066 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权 ...
- Heckman两阶段模型学习笔记
有近两周的时间都在学习Heckman两阶段模型.网上看了一些资料,在CSDN里找到了几篇珍贵的学习笔记,有一篇相当于带我入了门学习笔记 | Heckman两阶段法介绍_Claire_chen_jia的 ...
- ARIMA模型学习笔记
ARIMA模型学习笔记 目录 ARIMA模型学习笔记 ARIMA模型 时间序列平稳性 什么是平稳性 严平稳 弱平稳 平稳性检验 ADF检验(Augmented Dickey-Fuller test) ...
- 生成模型学习笔记:从高斯判别分析到朴素贝叶斯
机器之心专栏 作者:张威 翻译:燕子石 本文是哥伦比亚大学研究生张威在生成模型上的学习笔记,由毕业于新西兰奥克兰理工大学的燕子石翻译.机器之心之前曾介绍过张威所写的吴恩达<机器学习>课程的 ...
- 图神经网络(GNNs)模型学习笔记与总结
GCN学习笔记 1 基于谱域的GCN 1.1 知识要点: 1.2 Spectral-based models 1.2.1 Spectral Network 1.2.2 ChebNet(2016) 1. ...
- MNL——多项Logit模型学习笔记(二)
本节将会通过案例举例,介绍Logit模型的建模思路和过程 内容为摘抄他人学习资料的个人学习笔记,如有侵权则删 1.正确打开/解读Logit模型系数的方式 本节的具体内容在笔记里不详细表示了,大家在软件 ...
- 分类模型 · 学习笔记一
文章目录 分类模型 分类算法一:逻辑回归 一.直接采用线性概率模型是否可行? 二.模型的构建 1. 两点分布(伯努利分布) 2. 那么连接函数 F ( x , β ) F(x,\beta) F(x,β ...
最新文章
- 阿里、腾讯美国员工基本年薪曝光,资深算法工程师24万美元,高级研究员26万美元
- mysql out 注意_总结关于in和out注意点
- 安装SandcastleInstaller
- Visual Studio编译选项简介
- 前端学习(2932):vue中的v-if
- 【数学】Floating-Point Hazard
- oracle 的自增需要依靠序列和触发器共同实现
- 做好开源项目 需要坚持
- Python并发编程之线程中的信息隔离(五)
- UI app界面的尺寸规范
- 九月十月百度人搜,阿里巴巴,腾讯华为笔试面试八十题(第331-410题)
- 计算机高中期末总结作文,高中学期总结作文
- Python--判断一个数字的奇偶性
- 风险预测模型_5分+整合多中心临床样本构建5分子胰腺癌预后模型
- mysql中between..and的用法
- IBM服务器 不用引导盘安装方法详解
- 大陆居民如何在香港银行开户并汇款?
- windows redis 假死处理
- 低成本5W无线充电器方案FS68001B简便充电芯片
- Mac item2 配色,大小写敏感及常用快捷键
热门文章
- is 32-bit instead of 64-bit 亲测可用
- Java8新特性(二)——强大的Stream API
- C# WinForm 判断程序是否已经在运行,且只允许运行一个实例
- [现代程序设计]homework-03
- Basic INFO - InstallShield的版本区分
- vuejs切换导航条高亮路由高亮做法
- 传感器市场需求大幅提升 中企能否满足?
- codevs——1044 拦截导弹(序列DP)
- 在 Delphi 下使用 DirectSound (2): 查看设备性能
- Q138:PBRT-V3,伪随机数发生器(pseudo-random number generator,RNG)(A.1.2章节)