深度学习笔记(十四):Transormer知识总结

简介: 关于深度学习中Transformer模型的知识总结,涵盖了Self-attention机制、QKV、Multi-head attention、位置编码和并行运算等关键概念,以及如何在PyTorch中实现Self-attention。

1. 谈谈你的理解🎄

最开始运用在NLP中的,它就相当于一个Attention结构,它相当于将一张图片平均分割成很多窗口,每个窗口相当于NLP里面的每个词,如果在目标检测中就是每个序列,然后计算每个序列上下文关系,然后将所有的关系融入在一起,这样就能够直接获取全局信息了,而不像CNN那样需要逐步递归才能获得全局信息,也不像RNN那样速度很慢,是因为它可以并行计算。

2. 什么是Self-attention🎄

在这里插入图片描述
self-attention就是自注意机制,也就是说当前时刻的输入不止关注当前时刻的信息,还会关注其它时刻的或者说关注所有的时刻信息,计算出其相关性,得到注意力权重矩阵。

3. 什么是Q、K、V🎄

在这里插入图片描述
首先Attention的任务是获取局部关注的信息。Attention的引入让我们知道输入数据中,哪些地方更值得关注。
Q、K、V都源于输入特征本身,是根据输入特征产生的向量。V可以看做表示单个输入特征的向量,我们直接将V输入到网络中进行训练是没有引入Attention的网络。如果要引入Attention网络就需要通过V乘以一组权重,这个权重由Q和K计算得来,就可以做到关注局部输入特征。

  • V:输入特征的向量 Q和K:计算Attention权重的特征向量。
  • Attention机制中的Q,K,V:我们对当前的Query和所有的Key计算相似度,将这个相似度值通过Softmax层进行得到一组权重,根据这组权重与对应Value的乘积求和得到Attention下的Value值。

4. 什么是Multi-head attention🎄

在这里插入图片描述
multi-head attention是多个自注意机制模块,通过对self-attention赋予不一样的权重,来得到不一样的结果,并把所有的attention结果拼接起来,通过一个全连接层得到最终结果,从而有助于捕捉到更丰富特征。

5. 什么是位置编码,解决什么问题🎄

由于同一张映射图,目标在不同的位置,Transormer中attention机制并没有包含其位置信息,是不能够进行有效区分的,比如说最简单的我喜欢你和你喜欢我是不一样的结果,所以我们通过加入了位置编码,这样就能够区分到底是谁喜欢谁这一问题,也就是说模型可以考虑前后位置的关系。

6. 如何理解transformer的并行运算🎄

最核心的在multi-head attention ,多组KQV进行self-attention运算,它们是可以同时运算的,由于使用同步运算,所以对于硬件要求比较高。

7. self-attention pytorch 代码🎄

import torch
import numpy as np
import torch.nn as nn
import math
import torch.nn.functional as F

class selfAttention(nn.Module) :
    def __init__(self, num_attention_heads, input_size, hidden_size):
        super(selfAttention, self).__init__()
        if hidden_size % num_attention_heads != 0 :
            raise ValueError(
                "the hidden size %d is not a multiple of the number of attention heads"
                "%d" % (hidden_size, num_attention_heads)
            )

        self.num_attention_heads = num_attention_heads
        self.attention_head_size = int(hidden_size / num_attention_heads)
        self.all_head_size = hidden_size

        self.key_layer = nn.Linear(input_size, hidden_size)
        self.query_layer = nn.Linear(input_size, hidden_size)
        self.value_layer = nn.Linear(input_size, hidden_size)

    def trans_to_multiple_heads(self, x):
        new_size = x.size()[ : -1] + (self.num_attention_heads, self.attention_head_size)
        x = x.view(new_size)
        return x.permute(0, 2, 1, 3)

    def forward(self, x):
        key = self.key_layer(x)
        query = self.query_layer(x)
        value = self.value_layer(x)

        key_heads = self.trans_to_multiple_heads(key)
        query_heads = self.trans_to_multiple_heads(query)
        value_heads = self.trans_to_multiple_heads(value)

        attention_scores = torch.matmul(query_heads, key_heads.permute(0, 1, 3, 2))
        attention_scores = attention_scores / math.sqrt(self.attention_head_size)

        attention_probs = F.softmax(attention_scores, dim = -1)

        context = torch.matmul(attention_probs, value_heads)
        context = context.permute(0, 2, 1, 3).contiguous()
        new_size = context.size()[ : -2] + (self.all_head_size , )
        context = context.view(*new_size)
        return context

测试

features = torch.rand((32, 20, 10))
attention = selfAttention(2, 10, 20)
result = attention.forward(features)
print(result.shape) # torch.Size([32, 20, 20])
目录
相关文章
|
1月前
|
机器学习/深度学习 算法 测试技术
深度学习环境搭建笔记(二):mmdetection-CPU安装和训练
本文是关于如何搭建深度学习环境,特别是使用mmdetection进行CPU安装和训练的详细指南。包括安装Anaconda、创建虚拟环境、安装PyTorch、mmcv-full和mmdetection,以及测试环境和训练目标检测模型的步骤。还提供了数据集准备、检查和网络训练的详细说明。
86 5
深度学习环境搭建笔记(二):mmdetection-CPU安装和训练
|
1月前
|
机器学习/深度学习 数据可视化 计算机视觉
目标检测笔记(五):详细介绍并实现可视化深度学习中每层特征层的网络训练情况
这篇文章详细介绍了如何通过可视化深度学习中每层特征层来理解网络的内部运作,并使用ResNet系列网络作为例子,展示了如何在训练过程中加入代码来绘制和保存特征图。
57 1
目标检测笔记(五):详细介绍并实现可视化深度学习中每层特征层的网络训练情况
|
1月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
深度学习之格式转换笔记(三):keras(.hdf5)模型转TensorFlow(.pb) 转TensorRT(.uff)格式
将Keras训练好的.hdf5模型转换为TensorFlow的.pb模型,然后再转换为TensorRT支持的.uff格式,并提供了转换代码和测试步骤。
83 3
深度学习之格式转换笔记(三):keras(.hdf5)模型转TensorFlow(.pb) 转TensorRT(.uff)格式
|
1月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
深度学习之格式转换笔记(二):CKPT 转换成 PB格式文件
将TensorFlow的CKPT模型格式转换为PB格式文件,包括保存模型的代码示例和将ckpt固化为pb模型的详细步骤。
31 2
深度学习之格式转换笔记(二):CKPT 转换成 PB格式文件
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
深度学习之格式转换笔记(一):模型文件pt转onnx转tensorrt格式实操成功
关于如何将深度学习模型从PyTorch的.pt格式转换为ONNX格式,然后再转换为TensorRT格式的实操指南。
97 0
深度学习之格式转换笔记(一):模型文件pt转onnx转tensorrt格式实操成功
|
1月前
|
机器学习/深度学习 数据可视化 Windows
深度学习笔记(七):如何用Mxnet来将神经网络可视化
这篇文章介绍了如何使用Mxnet框架来实现神经网络的可视化,包括环境依赖的安装、具体的代码实现以及运行结果的展示。
50 0
|
1月前
|
机器学习/深度学习
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
本文探讨了深度可分离卷积和空间可分离卷积,通过代码示例展示了它们在降低计算复杂性和提高效率方面的优势。
51 2
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
|
1月前
|
机器学习/深度学习 并行计算 PyTorch
深度学习环境搭建笔记(一):detectron2安装过程
这篇博客文章详细介绍了在Windows环境下,使用CUDA 10.2配置深度学习环境,并安装detectron2库的步骤,包括安装Python、pycocotools、Torch和Torchvision、fvcore,以及对Detectron2和PyTorch代码的修改。
89 1
深度学习环境搭建笔记(一):detectron2安装过程
|
1月前
|
机器学习/深度学习 算法 PyTorch
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
这篇文章详细介绍了多种用于目标检测任务中的边界框回归损失函数,包括IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU和WIOU,并提供了它们的Pytorch实现代码。
161 1
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
|
1月前
|
机器学习/深度学习 vr&ar
深度学习笔记(十):深度学习评估指标
关于深度学习评估指标的全面介绍,涵盖了专业术语解释、一级和二级指标,以及各种深度学习模型的性能评估方法。
37 0
深度学习笔记(十):深度学习评估指标