白话BERT

白话白话transformer

1、attention的计算方法

每个词去计算与其他词的关系

经过attention之后每个词的向量不再是单单它本身的,还包括其上下文的。一个矩阵乘法就做完了,所以是并行的

白话BERT_第1张图片

2、multi-head

也就是self-attention做了多次, 一组QKV是一个特征的表达, 用多头提取不同的特征表达  将所有的特征表达进行拼接 ,然后用全连接矩阵进行降维

3、位置编码

(1)本身的input可能仅是某个词的信息,传统的表示位置的向量一般用one-hot,而这地方用的是正弦余弦周期信号

layernormal 经过self-attention后在layer的维度进行归一化为均值为0 方差为1 (红色箭头指向的,即纵向的)

batch normalize指的是将其以batch的维度进行归一化为均值为0 方差为1 (绿色箭头指向的,即横向的)

白话BERT_第2张图片

(2)残差连接:基本的残差连接方式

作用是相当于两条路,因为不保证做完各种操作后比原来的表示结果更好,所以加上第二条路相当于不做任何操作,原封不动的取过来(至少不比原来差)。至于选择哪个,模型自己选择(黄色表示经过各种操作过来的,绿色表示直接拿过来的)

白话BERT_第3张图片

4、Decoder

以上解释的是encoder的部分,下面说一下decoder与encoder的不同的地方

(1)attention计算方式不同

加了一个encoder-decoder attetion , 目的是也要把encoder部分出来的结果也进行一定的考虑

(2)加入mask机制

一个接一个出答案,比如说机器翻译的时候,后面没出来的不能用,只能用之前已经有的

5、最终结果

利用softmax 来预测,比如说一共10000个词,这回要输出的是第几个词

然后 cross-entropy  和分类任务一样的思想

总体过程:词---编码----位置编码---selfattention ---多头 ----残差连接---decoder --mask---self attention - softmax 

白话白话BERT

BERT其实是transformer的encoder部分,并不需要标签,直接用语料就可以训练了

1、bert的训练方式

方法一:随机mask掉一些词,预测这些词是什么

方法二:预测两个句子是否连在一起,结果是YES OR NO

2、如何使用bert

并不需要先训练好向量,然后训练模型,而是把任务融合到bert中即可,一起训练

(1)先下载人家训练好的模型

(2)下载数据集

(3)把整个bert 给download下来

代码解读:

run_classifier.py  别忘了参数(数据预处理,做不做训练,做不做验证,用相对路径,语料表,人家预训练好的,batch_size调小一点,epoch = 小的就行,一就可以,保存位置)

写自己的数据预处理/标签个数

传进去的是词的索引

mask编码实际的词用1表示,补充的用0表示  做self-attention 的时候标识一下不让他们进行计算

 

构建模型 

1、embedding层  词输入转向量 input【8,128】 output【8,128,768】+  position embedding只进行128长度内的 每一个微output【128,768】 +typeid【01表示是第几个句子one-hot就可以】output[2,768] 这三个维度一致 

2、mask矩阵  标1的表示attention的时候进行计算,其实是将矩阵进行了扩展了一尾input【8,128】output【8,128,128】

3、QKV矩阵 最外一层循环是层的个数,然后每一个层里面有self attention 

query是from产生的【1024,768】

k是to tensor 产生的【1024. 

v是to tensor 产生的【】

4、全连接

 

 

 

 

 

 

 

你可能感兴趣的:(机器学习)