Transformer - attention is all you need

  1. layernorm: 每一个样本进行归一化
  2. seqToseq模型
  3. Encoder: 输入一个vector seq 输出另外一个 vector seq
  4. Decoder:
    1. Encoder的输出会输入Decoder
    2. Decoder 看到的输入会是自身前一个的输出
    3. Decoder 根据Encoder的输入 和 Decoder自己前一个的输入决定当前的输出(最开始的输入是Begin)
    4. Decoder 的输出是一个一个产生(a1 a2 a3…) 而非一次性全部出现 所以会有withmask
    5. Decoder 必须自己决定输出seq的长度 当Decoder输出到最后时 会根据Encoder的embeding 和 其自己之前的输出来判断当前是否输出End符号
    6. NAT - Non-autoregressive: NAT一次性输入所有的begin 一次输出所有的结果 NAT忽略掉token后所有输出 从而确定每次输出的长度 但是NAT 通常其效果是不如 AT的
    7. Cross Attention
  5. Training
    1. Copy Mechanism: 在一些任务中Decoder并不需要自己产生输出 可能只是需要从输入中复制一些东西 (EX: Chat-Bot)
  6. Positional Encoding: Positional Encoding就是句子中词语相对位置的编码,让Transformer保留词语的位置信息。
  7. Feed-Forward Network: Feed-Forward层包括两层全连接层以及一个非线性激活函数ReLu。Transformer 在Muti-Head Attention内部结构中 进行的主要是矩阵乘法 即进行的都是线性变换 而线性变换的学习能力是不如非线性变化的强,所以Muti-Head Attention的输出尽管利用了Attention机制 学习到了每个单词的权重 但是这种表达能力可能并不是很强 所以可以通过激活函数 来强化每个单词的表达能力。 在Feed-Foward层中 先将数据映射到高维空间再映射到低维空间的过程 可以学习到更加抽象的特征 即Feed-Forward层使得单词的表达能力更强 更加能够表示单词与context中其他单词之间的作用关系。
  8. Scaled Dot-Product Attention: Scaled Dot-Product Attention属于点乘注意力机制,并在一般点乘注意力机制的基础上,加上了scaled。scaled是指对注意力权重进行缩放,以确保数值的稳定性。
    1. 当 $\sqrt{d}$ 较小时 除不除都没关系
    2. 当 $\sqrt{d}$ 较大时 两个向量的长度会比较长 两个向量的相对差距就会变大 值最大的那个值做出来的softmax会更加靠近1 剩下的会更加靠近0 值的分布会更加向两端靠拢 此时计算梯度的时候 梯度比较小 就会跑不动
    3. (刚开始训练的时候,梯度较小不是一个好的情况。因为训练初期,模型还没找到一个合适的参数空间,梯度较小表明模型还没有开始学习,需要更多的训练才能得到好的结果;当模型的初始参数已经非常接近最优解,此时的梯度可能会很小,因为模型已经处于一个相对平坦的区域,此时小梯度可以帮助模型更稳定地收敛到最优解,避免出现震荡和过拟合的情况)

Homework