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

AI学习记录 - transformers的decoder和encoder中的自注意力矩阵和掩码矩阵的数据处理

掩码掩码,指的是掩盖住后面的词汇的词向量对我当前词汇造成影响。把PAD字符设置成负无穷大,概念上不叫掩码,只是计算方式和掩码一样。

怎么生成掩码,在非掩码注意力矩阵中,把PAD词向量每个维度设置成负无穷大,或者设置掩码矩阵为负无穷大,矩阵乘法的效果是一样的。

在实际计算的过程中,掩码不仅仅只是生成一半就可以了,我都知道GPT其实有限制token长度这一说法,假如限制50个token,我们最后生成的注意力矩阵就是长宽都是50个,但是当我们的句子不够50的时候,剩下的位置需要用指定字符去填充。

如下图:第一个矩阵的意思是一半做掩码防止后面词语对当前词汇的影响,第二个矩阵是对 填充字符 做掩码,因为填充字符的语义我们也是要求为对句子的影响为0,两个矩阵叠加得到第三个矩阵。(注:下图是叉为负无穷大)

在这里插入图片描述

举个例子,构造好掩码矩阵之后,跟右边的词向量句子做矩阵乘法,根据上一章节,可以看到 PAD填充符 对句子影响为负无穷大,达到我们的要求:无关字符对句子影响为0。(注:下图是叉为负无穷大)

在这里插入图片描述

预测阶段注意力矩阵的计算 encoder 阶段,没有掩码(注:下图是叉为负无穷大)

在这里插入图片描述
传递个decoder的词向量矩阵,最右侧的词向量矩阵当中,最底下的PAD词向量的每一个维度都是负无穷大
在这里插入图片描述

decoder 阶段,,有两个注意力矩阵,一个有掩码,一个没有掩码(注:下图是叉为负无穷大)

有掩码,

在这里插入图片描述
上面有个极其重点的内容,经过上面的一次矩阵运算,其实我已经进行了一个序列的不同长度的训练
就是下面这种计算方式,已经帮助我同时训练了 =(下面有新的解释)
输入:START, 输出 g
输入:START g, 输出 f
输入:START g f, 输出 h
输入:START g f h, 输出 PAD
~~
我不用像传统训练方式一样构造上面这种数据。
试验:当我进行预测输入START的时候,掩码矩阵是动态生成的,由于其他都是负无穷大,只有第一行有数字,其他的权重不会对START造成影响。我在训练的时候,第一行权重除了第一个是数字,其他都是负无穷大,矩阵乘法的到这这行的权重和词向量每一行相乘,虽然预测阶段和训练阶段计算方式有略微区别,但是这种恰当的巧合使得我不用特意去构造训练数据,这是一个计算巧合,这种掩码机制恰好帮我训练了这么多数据,巧合巧合巧合巧合巧合巧合巧合巧合巧合巧合巧合巧合,如下:
在这里插入图片描述
因为上图表达不充分,继续将上图改进,下图描述为,在最后一层映射词汇表层,只使用最后一个词汇进行预测。原因是在预测阶段预测下一个 token的时候,只会取 dec_outputs 中最后一个位置(即 g 符号,但是这个g是被START叠加过的) 来预测下一个 token。下面有个浅绿色的框,假设是映射词汇层。
上面数据集那里错了,其实是下面这个样子,训练阶段和预测阶段都是如此,用的是最后一个词:
输入:START, 输出 g
输入:g, 输出 f
输入:f, 输出 h
输入:h, 输出 PAD
在这里插入图片描述

上面走完之后,就到了没有掩码的注意力矩阵阶段,就是decoder和encoder结合的自注意力矩阵,这个矩阵的意思是a,b,c词分对 START 的影响程度, 对 g 的影响程度,对 f 的影响程度,对 h 的影响程度,将这些影响程度叠加在原来的 START,g,f,h上。

在这里插入图片描述

http://www.lryc.cn/news/429428.html

相关文章:

  • 【Solidity】代币
  • 5 - Linux YUM仓库及NFS共享服务
  • 上传文件,文件类型限制语法,各种媒体视频文件的Content-Type
  • 类和对象(下)(2)
  • 软件测试 - 自动化测试(概念)(Java)(自动化测试分类、web自动化测试、驱动、selenium自动化测试工具的安装)
  • wpf datagrid 实现双向绑定
  • 使用循环在el-select下拉框中循环出-3至50
  • 全球海事航行通告解析辅助决策系统
  • Spring 解决bean的循环依赖
  • 鸿蒙内核源码分析(ELF格式篇) | 应用程序入口并不是main
  • seq2seq编码器encoder和解码器decoder详解
  • 前端使用 Konva 实现可视化设计器(21)- 绘制图形(椭圆)
  • Python 将单词拆分为单个字母组成的列表对象
  • 欧洲 摩纳哥税务知识
  • 域控制器的四大支柱分别是车载以太网、自适应Autosar
  • 写给大数据开发:如何优化临时数据查询流程
  • 【MongoDB】Java连接MongoDB
  • nginx支持的不同事件驱动模型
  • C++ TinyWebServer项目总结(7. Linux服务器程序规范)
  • 基于STM32单片机设计的秒表时钟计时器仿真系统——程序源码proteus仿真图设计文档演示视频等(文末工程资料下载)
  • 人才流失预测项目
  • BUG——imx6u开发_结构体导致的死机问题(未解决)
  • 问答:什么是对称密钥、非对称密钥,http怎样变成https的?
  • 虚拟滚动列表组件ReVirtualList
  • 稳定、耐用、美观 一探究竟六角头螺钉螺栓如何选择
  • 数据库Mybatis基础操作
  • 人物形象设计:塑造独特角色的指南
  • 网络安全-安全策略初认识
  • python import相对导入与绝对导入
  • 深入理解 Go 语言原子内存操作