1. Transformer的特点

  • 1.1 无先验假设(例如无局部关联性假设,无有序建模)
  • 1.2 核心计算在于自注意机制,呈现平方复杂度
  • 1.3 数据量的要求与先验假设的程度成反比

2. Transformer的使用类型

  • 2.1 Encoder Only : Bert , 分类任务,非流式任务
  • 2.2 Decoder Only : GPT系列,语言建模,自回归任务,流式任务
  • 2.3 Encoder-Decoder: 机器翻译,语言识别

3. Transformer的结构

  • Encoder:
    (1)Position_Embedding:Transformer本质上是DNN结构,无位置信息,为了增加位置信息,我们需要进行位置编码
    (2)Multi_Head_Self_Attention: 这是Transformer模型的核心,对任意两两字符进行关系建模
    (3)LayerNorm&Residual
    (4)FeedForward_Neural_Network:linear1(large)+linear2(model)
    (5)LayerNorm&Residual
  • Decoder:
    (1)Position_Embedding
    (2)Casual_Multi_Head_Cross_Attention因果自回归,需要下三角矩阵
    (3)LayerNorm&Residual
    (4)Memory_Base_Multi_Head_Cross_Attetion:负责Encoder_Decoder信息融合
    (5)LayerNorm&Residual
    (6)FeedForward_Neural_Network:linear1(large)+linear2(model)
    (7)LayerNorm&Residual

4. Transformer的loss_mask

import torch
import torch.nn as nn
import torch.nn.functional as F

# 生成一个logits矩阵
logits = torch.randn(2, 3, 4)
# batch_size=2,seqlen=3,vocab_size=4
# 生成标签
label = torch.randint(0, 4, (2, 3))
logits = logits.transpose(1, 2)

print(f"logits={logits}")
print(f"label={label}")
# 求两个的交叉熵值
loss = F.cross_entropy(logits, label, reduction='none')
print(f"loss={loss}")
tgt_len = torch.Tensor([2, 3]).to(torch.int32)
# 将存在的单词赋值为1,填充的为0
mask = torch.cat([torch.unsqueeze(F.pad(torch.ones(L),(0,max(tgt_len-L))),0) for L in tgt_len])
print(f"mask={mask}")
# 将loss中填充的部分赋值为0
mask_loss = loss*mask
print(f"mask_loss={mask_loss}")
logits=tensor([[[-0.0452, -0.9794, -0.1257],
                [-0.1749,  0.8239, -0.7211],
                [-0.4296,  0.9329, -0.3611],
                [ 1.3901, -0.3422, -1.5745]],

               [[-0.1865,  0.1169,  0.3734],
                [-0.4562,  1.0939,  0.6862],
                [-1.4816, -0.3995, -1.0691],
                [-0.8154, -0.0264,  0.4808]]])
label=tensor([[2, 0, 1],
              [3, 2, 2]])
loss=tensor([[2.2954, 2.7556, 1.5419],
             [1.5731, 2.1495, 2.7554]])
mask=tensor([[1., 1., 0.],
             [1., 1., 1.]])
mask_loss=tensor([[2.2954, 2.7556, 0.0000],
                  [1.5731, 2.1495, 2.7554]])
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐