(pytorch进阶之路二)transformer学习与难点代码实现
来源:http://www.tudoupe.com时间:2022-07-01
https://github.com.com/yyz159756/pytorch_learn/tree/main/transformer
文章目录
- 理解
- Encoder
- Decoder
- word embedding
- position embedding
- Attention
- Encoder self attention mask
- Intra attention mask
- Decoder self attention mask
- Mask loss
理解
变换器和cnn和rnn最大的区别在于其预定的假设(继承偏差)相对较小,没有假设的本地关联(cnn),我们也不假定是有序的建模(rnn),它假设任何位置都可以与其他位置关联。基本上没有假设。其优点是,与cnn和rnn相比,它能更快地学习长期和短期相关性。但对数据量的需求与假设的程度不同。也就是说,越 preconceived假设,越我们把更多的经验注入了我们的生活中,模型就更容易去学,所需数据的数量越小。
因此,我们也不能使用没有大脑的变换器模型。因为假设很少,要使用一个好的变压器模型,根据不同的任务,插入一些与任务有关的假设,例如,关于注意力或损失的机制,或者是模型结构上,根据这些初步假设做一些修改或优化。例如,对于每个位置的注意机制的计算不需要指向整个序列。相反,它瞄准周围的几块牌子,这种假设是局部相关性。
另一个特点是,在注意机制中变换器核心计算的平方复杂度与序列长度的平方是比例的。
主要任务:机器翻译和语音识别
Encoder
主要有以下的组成,position embedding,多头的自我关注,layer norm & residual,传送神经网络
仅编码器模型:bert,分类任务(例如句子情感判断),非流任务
Decoder
主要有以下的组成,position embedding,随意多头的自我关注, layer norm & residual,memory base multi head cross attention(QKV),feedforward neural network
仅解码器模型:GPT模型,语言模型,自回归任务,流模型,
word embedding
嵌入函数是将高维离散符号映射到低维密集符号
假设任务背景:英语翻译到德语,首先我们需要建立一个英语句子源序列和一个目标序列,目标句子是德语,源序列src_seq和目标序列tgt_seq
如何构造一个序列?与NLP联系不应是罕见的。序列字符以字典dict中的索引的形式表示
指定序列长度,假设src和tgt镜头
输出结果: 索引([2, 4]),索引([4, 2]),表示src句子是2和4,tgt句子是4和2,总共是两个句子
然后我们建造了分数,假设src和tgtdict有最大序列8,是最大字数是8,在列表中随机生成seq,为了 确保 判决 的 期限 是 一致 的,我也需要打padding操作,在功能上使用平板功能,然后通过解压和猫将序列转换为[批量大小,最大len]作为批量输入的 Tensor
输出结果:
输入完成,中间部分使用 pytorch API, nn.Embedding 进行嵌入
第一个参数是num_embeddings,字数,我们通常采用最大字表大小+1,铺设0
第二个参数是embedding_dim,一个词矢量维度,通常是512,这让我们更容易得到8
position embedding
注意是你所需要的唯一东西 There is an expression for PE (position embedding), which is basically to convert the information about the position of a word in a sentence into a vector and then add it to WE (word embedding)
首先,PE是一个二维矩阵:[max_len, dim],最大长度可以匹配 max_source_seq_len,这里指定 max_position_len=5
PE矩阵可以被看作是两个矩阵的乘法(不是矩阵乘法,而是广播每个元素的乘法),一个矩阵是pos(/左),另一个矩阵是i(/右),奇行和偶行分别由罪和cos乘法
构造 n.模组替换重量
为了构造输入,我们需要通过位置索引,这是自然地与范围进行的,最后计算PE
Attention
Encoder self attention mask
自我注意面具面具的目的是去除0的铺垫
面具通常放在软max上,softmax是一个模块函数,输入负无穷输出接近0,因此我们构建的面具矩阵(bool matrix)使用 masked_fill来设置面具元素的分数为负无穷。
面具形状[batch_size, max_src_len, max_src_len], max_src_len是最大句长
我们首先建立一个有效的姿势,增加到max_src_len,用不挤猫的bmm重新形状面具,构造面具泡沫矩阵,最后使用 masked_fill来构造 masked_score
Intra attention mask
内部注意力是解码器块的中间部分,作为查询的解码器目标序列的自注意输出,记住编码器为密钥和值,Q和K计算一个分数,你通过软max获得重量,然后用重量和值加重来补偿,得到一个新的表征,这种表示反应是对目标序列和源序列之间的关联的表示。
在上述解码器的内部注意机制过程中,涉及一个与目标序列和源序列有关的面具
Decoder self attention mask
解码器是一个自回归模型,一旦只预测一个值,将预测值发送回解码器作为输入,并产生第二个输出,从而重复,即每个单词预测是基于以前的单词预测。
因此,为了使训练阶段与推导阶段过程保持一致,我们需要在训练阶段覆盖解码器输入。
如果您直接输入tgt seq到解码器中,您会违反原因和效果,事先知道答案,而且训练是毫无意义的。
因此,训练阶段需要通过解码器输出封锁答案并预测答案,以便它们能够与预测(infer)阶段保持一致。
所以解码器自我注意的面具是一个三角面罩矩阵,第一个输入是特殊字符,第二个输入是特殊字符和目标值,第三个输入是..
Mask loss
手动mask
使用 ignore_mask 参数
下一篇:富士通q702使用教程
相关新闻
- 2022-07-09 【Python百日进阶-Web开发-Feffery】D
- 2022-07-09 winPE安装及win7&8&10&xp系统安
- 2022-07-09 原生Windows10pe_win10PE 触摸板
- 2022-07-02 2.DesignForClinesNetLengthReport
- 2022-07-01 富士通q702使用教程
- 2022-06-29 Win11安卓子系统(WSA)怎么卸载?
- 2022-06-29 Win11安卓子系统(WSA)怎么卸载?
- 2022-06-29 mydockfinder怎么用?mydockfinder使用教
- 2022-06-28 SQL-libs Less-4
- 2022-06-28 MATLB|电力系统优化运行与市场化
|
|
|
|
|
|
|
|
|
|