大模型相关代码1 -- 注意力机制【手撕基础模型】

注意力机制

  • 看见网上有要手撕注意力的面经,自己开始写,以为很简单,实际上自己菜的要死,遂写本博客。

公式

A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K t d ) V Attention(Q,K,V) = softmax(\frac{QK^t}{\sqrt d})V Attention(Q,K,V)=softmax(d QKt)V

代码

def myattention(q, k, v, d_k, mask=None, dropout=None):
	# 首先计算注意力得分
    score = torch.matmul(q,k.transpose(-2,-1)) / math.sqrt(d_k)
    # 处理mask信息,如果被mask就变成一个很小的数
    if mask is not None:
        mask = mask.unsqueeze(1)
        score = score.masked_fill(mask == 0,-1e9)
    # 对注意力得分进行softmax
    score = F.softmax(score, dim=-1) # 沿着最后一个维度计算 其他维度不变
    # 处理dropout
    if dropout is not None:
        score = dropout(score)
    # 点乘value矩阵
    ans = torch.matmul(score,v)
    return ans
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值