注意力机制

概念没什么好说的,反正大家都会说,具体实战怎么写才是最为重要的

1.自注意力

假设有一组数据,都是一维的向量,这个向量可能是一个样本,可能是其他什么,都无所谓。

假设有一组一维向量x1,x2,x3,x4,x5;

第一步:他们两两之间先进行点积,则可以得到一个5*5的矩阵,每一个向量都有一个与其他向量对应的分数,这个分数叫做注意力分数,比如x3的注意力分数为[x3.*x1,x3.*x2,x3.*x3,x3.*x4,x3.*x5],要记住,这是内积,也就是点乘。

第二步:进行缩放,这一步可以用各种方法,比如使用softmax函数

第三步:加权求和,对每一组向量进行加权求和

#X是一维向量
def softmax(X):
    return np.exp(X)/np.sum(np.exp(X))

def self_attention(X):
    output = np.zeros_like(X)
    for i, pivot_vector in enumerate(X):
        scores = np.zeros(len(pivot_vector))
        for j, vector in enumerate(X):#求第i向量其他向量之间的内积
            scores[j] = np.dot(pivot_vector, vector)
        scores /= np.sqrt(X.shape[1])#
        scores = softmax(scores)#对内积进行缩放
        new_vector = np.zeros(shape=pivot_vector.shape)
        for j, x in enumerate(X):#利用注意力分数加权求和--也就是特征的重要性程度
            new_vector += x * scores[j]
        output[i] = new_vector
    return output

    

看代码比较容易理解,第二步的缩放过程就是用注意力分数除以特征个数的平方,然后经过softmax缩放,得到当前向量的分数,相当于它和其他向量之间的关系分析(姑且这么形容吧),第三步的求和,是用每一组的向量去乘以对应的分数,然后累加起来相当于关联到了了每一个特征向量的内容(个人理解),关联度是按照之前的分数来的。

查询-键-值模型

outputs = sum(C* pairwise(A, B))

这个表达式是上面那一段代码的总结,可以解释为对于A的每一个向量,与B的相关程度,然后利用这个相关程度的分数对C进行加权求和,A相当于查询(Q),B相当于键(K),C相当于值(V)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值