自然语言处理(NLP)入门——Transformer详解(2)

  • 编码器部分

    • 注意力机制: [重点复习]

      • 注意力: 快速聚焦, 进行事务的判别的过程
      • 注意力机制: 就是将注意力计算规则融入到网络中,然进行使用的过程, 就是注意力机制, 如果QKV都是相等的, 则是自注意力机制
    • 多头注意力机制:[重点复习]

    • 多头: 其实就是将最后一个维度[词嵌入维度]进行分割, , 每个维度进入注意力机制进行特征提取/语义提取的过程

    • 作用: 为了使咱们的语句或是词汇有更多元 化的表示/表达

    • contiguous()函数的使用: 一般是在transpose使用之后进行使用, 为的是在后面可以直接使用view函数,contiguous()的作用是将transpse转置之后不连续的存储形式变成连续的存储形式, 方便view函数的使用.

    • 输入和输出的形状一样(2,4,512)-> (2,4,512)

    • 前馈全连接层

      • 实质: 两 个全连接线性层
      • 作用: 增加模型的拟合能力
      • 实现:
        • 数据—> 第一个全连接线性层—> RELU函数—>dropout层—> 第二个全连接线性层
    • 规范化层

      • 作用: 在深度网络中, 训练的过程可能会出现数值过大或是过小的情况, 这样会造成数据异常的行为, 为了是模型可以更好的训练, 需要将数据规范到一定的范围之后, 在进行后续的计算

      • keepdim参数的演示

        
        import numpy as np
        import torch
        
        x=[
        [[1,2,3,4],[5,6,7,8],[9,10,11,12]],
        [[13,14,15,16],[17,18,19,20],[21,22,23,24]]
        ]
        x=torch.tensor(x).float()
        #
        print("shape of x:")  #[2,3,4]
        print(x.shape)
        #
        print("shape of x.mean(axis=0,keepdim=True):")          #[1, 3, 4]
        print(x.mean(axis=0,keepdim=True).shape)
        #
        print("shape of x.mean(axis=0,keepdim=False):")         #[3, 4]
        print(x.mean(axis=0,keepdim=False).shape)
        #
        print("shape of x.mean(axis=1,keepdim=True):")          #[2, 1, 4]
        print(x.mean(axis=1,keepdim=True).shape)
        #
        print("shape of x.mean(axis=1,keepdim=False):")         #[2, 4]
        print(x.mean(axis=1,keepdim=False).shape)
        
    • 子层连接结构

      • 定义: 每个子层特定的层(多头注意力层/前馈全连接层)+规范化层+残差连接==> 子层连接结构
      • 实现:
        • 和图解不同的地方: 代码是先经过规范化层然后在经过特定的子层, 这样的书写是因为构造出来的模型, 训练的效果比较好.
    • 编码器层的构造

        1. 先去构造多头自注意力子层的子层连接结构
        2. 在去构造前馈全连接子层的子层连接结构
    • 编码器部分:

      • 作用: 提取输入的特征的过程
      • 实现: 将编码器层进行循环迭代, 然后在输出的部分加一个规范化层, 为了是数据规范到一个合理的范围之内, 方便后续的数据处理过程.
    • 解码器层:

      • 作用: 向给定的目标语言进行特征解码的操作, 即解码过程
      • 实现:
        • 第一个层: 自注意力机制层(Q=K=V)/ 规范化层和残差连接
          • target_mask主要是为了掩盖后面的信息, 为了防止未来信息被提前利用
        • 第二个层: 注意力机制层(Q!=K=V)/规范化层和残差连接
          • Source_mask:为了遮掩掉之前字符中没有用的注意力值;
        • 第三个层: 前馈全连接层/规范化层和残差连接
    • 解码器部分:

      • 循环的时候有两点注意:
        • x的循环是每次不一样的, 上一次的输出是模型下一次的输入, 所以x每次的输入过程是不一样的
        • en_result(memery) : 表示的是编码器最后的输出, 作为解码器中间第二层的输入, 这个在循环的过程中, 每次输入是一致的.
    • 输出部分:

      • 结构: softmax层+linear层

      • 模型的构建

        1. 实例化了对应的Embedding层和对应的位置编码器层

        2. 实例化对应的多头注意力层和前馈全连接层

        3. 实例化对应的编码器部分和解码器部分

        4. 实例化了输出部分的对象

        5. 将上面实例化的对象进行堆叠即可.

你可能感兴趣的:(nlp,pytorch,python,人工智能)