• 注意力机制


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

    1.自注意力

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

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

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

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

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

    1. #X是一维向量
    2. def softmax(X):
    3. return np.exp(X)/np.sum(np.exp(X))
    4. def self_attention(X):
    5. output = np.zeros_like(X)
    6. for i, pivot_vector in enumerate(X):
    7. scores = np.zeros(len(pivot_vector))
    8. for j, vector in enumerate(X):#求第i向量其他向量之间的内积
    9. scores[j] = np.dot(pivot_vector, vector)
    10. scores /= np.sqrt(X.shape[1])#
    11. scores = softmax(scores)#对内积进行缩放
    12. new_vector = np.zeros(shape=pivot_vector.shape)
    13. for j, x in enumerate(X):#利用注意力分数加权求和--也就是特征的重要性程度
    14. new_vector += x * scores[j]
    15. output[i] = new_vector
    16. return output

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

    查询-键-值模型

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

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

  • 相关阅读:
    【BSC】使用Python玩转PancakeSwap(入门篇)
    【python爬虫】免费爬取网易云音乐完整教程(附带源码)
    奇舞周刊第 464 期:我被 pgx 及其背后的 Rust 美学征服
    鸿鹄工程项目管理系统em Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统
    霍夫曼(Huffman)编码算法详解之C语言版
    翻译英语的软件-跨境必备翻译软件免费
    Android10 修改开发者选项中动画缩放默认值
    【Git】IDEA 集成 Git
    API接口开发规范
    Human3.6M 数据集介绍及下载
  • 原文地址:https://blog.csdn.net/weixin_42581560/article/details/133238667