transformer:
position-embedding:
残差:我也会了
addnorm:我也会了
class Position_Embedding(nn.Module): def __init__(self, max_len, embedding_dim): self.max_len = max_len self.embedding_dim = embedding_dim result = torch.ones(self.max_len, self.embedding_dim, requires_grad=False) pos = torch.arange(max_len)[:, None] i_even = torch.arange(0, embedding_dim, 2)[None, :] i_odd = torch.arange(1, embedding_dim, 2)[None, :] even_value = pos / (10000**(2*i_even/self.embedding_dim)) odd_value = pos / (10000**(2*i_odd/self.embedding_dim)) result[:, 0::2] = torch.sin(even_value) result[:, 1::2] = torch.cos(odd_value) self.position_embedding = result def forward(self, x): position_embedding = x + self.position_embedding return position_embedding
self-attention以及mask-padding部分:
周末忙完了自己实现一遍,带进任务,看看效果。
attention组合位置信息,全连接组合特征信息
transformer中的masked loss:不要算pad部分的loss tf中有对应的函数(也可以利用CROSSentropy的一个ignore参数)