transformer

全过程图:
自注意力机制:
优点:
1.优化了rnn 处理长序列数据的问题,但是不能关注语序。传统的 循环神经网络在处理长序列时可能面临 梯度消失或梯度爆炸的问题。自注意力可以更好地处理长距离依赖关系,因为它不需要按顺序处理输入序列。
2.序列建模:自注意力可以用于序列数据(例如文本、时间序列、音频等)的建模。它可以捕捉序列中不同位置的依赖关系,从而更好地理解上下文。这对于机器翻译、文本生成、情感分析等任务非常有用。
3.并行计算:自注意力可以并行计算,这意味着可以有效地在现代硬件上进行加速。相比于RNN和CNN等序列模型,它更容易在GPU和TPU等硬件上进行高效的训练和推理。(因为在 自注意力中可以并行的计算得分
多头注意力机制:
1、扩展了模型专注于不同位置的能力。
2、有多个 WQ、K、V矩阵集合,(Transformer使用八个注意力头)并且每一个都是随机初始化的。和上边一样,用矩阵input
乘以WQ、WK、WV来产生查询、键、值矩阵。
3、self-attention只是使用了一组WQ、WK、WV来进行变换得到查询、键、值矩阵,而Multi-Head Attention使用 多组WQ,WK,WV得到多组查询、键、值矩阵,然后每组分别计算得到一个Z矩阵。

过程

  • 准备输入
  • 初始化参数(QKV矩阵)
  • 获取key,query和value
  • 给input1计算attention score
  • 计算softmax
  • 给value乘上score
  • 给value加权求和获取output1
  • 重复步骤4-7,获取output2,output3
一、self-attention输出过程:
score就是自注意力的Z 值
注:
1.先用score*value,算出别的输入对当前输入的占比。
2.最后的output把所有乘起来的的 结果相加。
3.Softmax得到output的概率分布(softmax层会把向量变成概率),然后通过词典,输出概率最大的对应的单词作为我们的预测输出。
自注意力的计算:
1.从每个输入向量中获取到qkv向量, qkv的值,是将输入input乘以初始化的WQ、K、V 权重矩阵
2.每个单词计算和其余所有单词的“得分”Z,公式见上图。
注:Q和每个文本词都做点积,也就是计算和每个词的相关度。softmax是将结果映射为0-1之间的实数,并且归一化保证和为1。Z就是某个单词需要自注意的值。
二、每个自注意力头有不同的Wqkv矩阵,生成不同的qkv,得到自己的Z值。最后把Z拼起来,相当于每一个input还是只有一个Z值
三、得到Z之后,经过 add&norm,再送入全连接
block模块:
add就是残差结构,输出把x加上了。
norm就是归一化如下:
目的:
1、加快训练速度
2、提高训练的稳定性
归一化:
LN是在同一个样本中不同神经元之间进行归一化,而BN是在同一个batch中不同样本之间的同一位置的神经元之间进行归一化。 BN是对于相同的维度进行归一化,但是咱们NLP中输入的都是词向量,一个300维的词向量,单独去分析它的每一维是没有意义地,在每一维上进行归一化也是适合地,因此这里选用的是LN。
全连接:线性变化+relu
四、总结:
X-->embedding-->self-attention -->Z-->add&norm(LN(X + Z))-->Z-->fully connected(feed forward)-->add&norm-->output

相关推荐

  1. Transformer

    2024-07-12 12:20:04       45 阅读
  2. Transformer

    2024-07-12 12:20:04       39 阅读
  3. Transformer

    2024-07-12 12:20:04       37 阅读
  4. PyTorch|transforms

    2024-07-12 12:20:04       60 阅读
  5. transformer beginner

    2024-07-12 12:20:04       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 12:20:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 12:20:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 12:20:04       58 阅读
  4. Python语言-面向对象

    2024-07-12 12:20:04       69 阅读

热门阅读

  1. 运维开发小白学习之路

    2024-07-12 12:20:04       20 阅读
  2. 监控团队的建立与管理:优化流程与工具选型

    2024-07-12 12:20:04       18 阅读
  3. 使用任务表,实现两个数据库表数据迁移

    2024-07-12 12:20:04       29 阅读
  4. 【C语言】《回调函数》详细解析

    2024-07-12 12:20:04       25 阅读
  5. I18N/L10N 历史 / I18N 指南 / libi18n 模块说明

    2024-07-12 12:20:04       18 阅读
  6. ActiViz中的点放置器vtkPointPlacer

    2024-07-12 12:20:04       20 阅读
  7. MySQL远程登录

    2024-07-12 12:20:04       19 阅读