[暑期实训] 任务记录 2021-06-30


摘要

  1. 学习Attention
  2. 学习Transformer
  3. 学习BERT
  4. 查找模型demo
  5. 配置Neo4j

Attention

此部分参考:
https://zhuanlan.zhihu.com/p/43493999

  1. 核心思想
    在预测结果时把注意力放在不同的特征上。
    输入一般分为三种:Q-query、K-key、V-value

    1. 先用Q和K计算权重 α {\alpha} α,会用softmax对权重归一化: α = s o f t m a x ( f ( Q K ) ) {\alpha = softmax(f(QK))} α=softmax(f(QK))
    2. 再用权重对结果加权: o u t = ∑ α i ∗ v i {out = {\sum}{{\alpha}_{i}*{v}_{i}}} out=αivi

  2. 原理
    h i {h^i} hi是encoder每个step的输出, z i {z^i} zi是decoder每个step的输出:

    1. 对输入进行编码,得到 h i {h^i} hi
    2. 解码,先用固定的start token也就是 z 0 {z^{0}} z0作为Q,去和每个 h i {h^i} hi(同时作为K和V)去计算attention,得到加权的 c 0 {c^{0}} c0
      c 0 = ∑ α ^ 0 i h i {c^0 = {\sum}{\hat{\alpha}_{0}^{i}{h}^{i}}} c0=α^0ihi
    3. c 0 {c^{0}} c0作为解码的RNN输入(同时还有上一步的 z 0 {z^{0}} z0),得到 z 1 {z^{1}} z1并预测出第一个词
    4. 继续预测,就是用 z 1 {z^{1}} z1作为Q去求attention:


Transformer

此部分参考:
https://zhuanlan.zhihu.com/p/44121378

  1. 模型结构
    • 流程
      输入 → Embedding → Positional Encoding → N × Encoder → 输出
      输出 → Embedding → Positional Encoding → N × Encoder → Linear → Softmax → 输出


    • Positional Encoding
      P E p o s , 2 i = sin ⁡ ( p o s / 10000 2 i / d m o d e l ) {PE_{pos, 2i} = \sin{\big( pos/{10000}^{2i/d_{}model} \big)}} PEpos,2i=sin(pos/100002i/dmodel)
      P E p o s , 2 i + 1 = cos ⁡ ( p o s / 10000 2 i / d m o d e l ) {PE_{pos, 2i + 1} = \cos{\big( pos/{10000}^{2i/d_{}model} \big)}} PEpos,2i+1=cos(pos/100002i/dmodel)

      其中, p o s pos pos表示token在sequence中的位置,例如第一个token就是0。 i i i,或者准确意义上是 2 i 2i 2i 2 i + 1 2i+1 2i+1表示了Positional Encoding的维度。

      PE满足以下特性:

      1. 每个位置有一个唯一的Positional Encoding.
      2. 两个位置之间的关系可以通过他们位置编码间的仿射变换来获得。

    • Encoder
      Encoder由N个相同的layer组成,每个layer由2个sub-layer组成,分别是Multi-head Self-attention Mechanism 和 Fully Connected Feed-forward Network。
      其中每个sub-layer都加了Residual connection 和 Normalization。
      attention的计算采用了Scaled Dot-product

      • Multi-head Attention
        通过h个不同的线性变换对Q,K,V进行投影,最后将不同的attention结果拼接起来。
      • Self-attention
        取Q,K,V相同
      • Position-wise feed-forward networks
        提供非线性变换,过线性层时每个位置i的变换参数是一样的。

    • Decoder
      Decoder和Encoder的结构类似,但是多了一个attention的sub-layer:

      • 输出:对应i位置的输出词的概率分布
      • 输入:encoder的输出 & 对应i-1位置decoder的输出。中间的attention不是self-attention,它的K,V来自encoder,Q来自上一位置decoder的输出。
      • 解码:在训练时,解码是一次全部decode出来,用上一步的ground truth来预测(mask矩阵也会改动,让解码时看不到未来的token);预测时,因为没有ground truth了,需要一个个预测。


BERT

此部分参考:
https://blog.csdn.net/jiaowoshouzi/article/details/89073944
https://zhuanlan.zhihu.com/p/46652512

  1. Embedding
    由三种Embedding求和得到:

    • Token Embeddings:词向量,第一个单词是CLS标志,可以用于之后的分类任务。
    • Segment Embeddings:用来区别两种句子,因为预训练不光做LM还要做以两个句子为输入的分类任务。
    • Position Embeddings:与Transformer不同,不是三角函数而是学习出来的。

  2. Masked LM
    随机mask 15%的token,而不是把每个词都预测一遍。最终的损失函数只计算被mask掉那个token。
    随机mask的时候10%的单词会被替代成其他单词,10%的单词不替换,剩下80%才被替换为[MASK]。


  3. Next Sentence Prediction
    训练的输入是句子A和B,B有一半的几率是A的下一句,输入这两个句子,模型预测B是不是A的下一句。


  4. Fine-tunning
    根据任务需要调整输出。


Neo4j

根据官网给出的流程,安装了Desktop版,并测试能够正常使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值