transformer复现

本文详细介绍了Transformer模型的实现过程,包括原始embedding与position-embedding的结合,multihead-attention的计算步骤,如如何进行split、concat、mask操作,以及scaled-dot-product和softmax的运用。同时,讲解了feedforward层的结构,以及self-attention和qkv的关系。还讨论了在处理序列时如何使用mask避免pad-token的影响,并通过softmax确保注意力权重的合理性。
摘要由CSDN通过智能技术生成

 


"""
原始 embedding,添加  position-embedding,
multihead-attention:  embedding->ff(q,k,v)-->split+concat-->mask--> attention-->scaled-dot-product-->softmax(qk)-->  softmax(qk)*value-->residual,input+output-->layer-normalization
feadworad:  fc+relu+fc -->residual,input+output-->layer-normalization

应用: ff组合,   
      residual+ln,进行layer 归一化
      dot-product 后的 根据维度 scale
      qkv 是 attention, qkv 相同,则是 self-attention
      qk-mask,得到的是二维矩阵,是token【i】和token{0,1,2,...k}的关系映射 
      mask掉 pad-token, 使得最后 attention*embedding得到的 token-embedding 不受影响
      softmax ,特别小的数,使得不受pad部分影响
"""

 



def load_vocab(vocab_fpath):
    '''Loads vocabulary file and returns idx<->token maps
    vocab_fpath: string. vocabulary file path.
    Note that these are reserved
    0: <pad>, 1: <unk>, 2: <s>, 3: </s>

    Returns
    two dictionaries.
    '''
    vocab = [line.split()[0] for line in open(vocab_fpath, 'r').read().splitlines()]
    token2idx = {token: idx for idx, token in enumerate(vocab)}
    idx2token = {idx: token for idx, token in enumerate(vocab)}
    return token2idx, idx2token





import tensorflow as tf
import numpy as np



def get_token_embeddings(vocab_size, num_units, zero_pad=True):
    '''Constr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值