白话transformer(三):Q K V矩阵代码演示

在前面文章讲解了QKV矩阵的原理,属于比较主观的解释,下面用简单的代码再过一遍加深下印象。

B站视频

白话transformer(三)

1、生成数据

我们呢就使用一个句子来做一个测试,

python 复制代码
text1 = "我喜欢的水果是橙子和苹果"
text2 = "相比苹果我更加喜欢国产的华为"

比如我们有两个句子,里面都有苹果这个词。我们用text1来走下流程

1.1 创建词嵌入

我们使用spacy进行词嵌入生成,代码很简单

python 复制代码
nlp = spacy.load('zh_core_web_sm')
doc = nlp(text1)

我们为了简单一点只取前10个维度,实际上spacy默认的词嵌入维度是很高的,我们只是用前十个来过一下流程。

python 复制代码
emd_dim = 10

dics = {}
for token in doc:
    dics[token.text] = token.vector[:emd_dim]
X = pd.DataFrame(dics)

这样我们就得到了第一个句子中所有词的embedding表示

2、初始化 W q W_q Wq, W k W_k Wk, W v W_v Wv

具体的内容可以查看之前的文章Bert基础(一)--自注意力机制

为了创建查询矩阵、键矩阵和值矩阵,我们需要先创建另外三个权重矩阵,分别为 W Q 、 W K 、 W V W^Q 、W^K、W^V WQ、WK、WV。用矩阵X分别乘以矩阵 W Q 、 W K 、 W V W^Q 、W^K、W^V WQ、WK、WV,就可以依次创建出查询矩阵Q、键矩阵K和值矩阵V。

python 复制代码
d_k = 6       # QKV向量的维度

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

d_k是指公式中的d_k

python 复制代码
Wq = np.random.randn(emd_dim, d_k)

Wq矩阵的格式,就是10*6

  • 10:是指词嵌入的维度
  • 6:d_k,Q的维度

Wk, Wv,同样

3、计算QKV

Q = X * Wq

python 复制代码
np.dot(X.T, Wq)

这样就得到了查询矩阵Q,Q其实可以理解为每个词需要查询的内容。

同样可以计算K和V矩阵

4、相似矩阵

计算公式为:
X W Q ∗ ( W K X ) T XW^Q *(W^KX )^T XWQ∗(WKX)T

其实就是我们计算好的Q和K
Q K T Q K^T QKT

直接点乘就可以得到每个词和每个词的相似性:

5、点积缩放

python 复制代码
Q@K.T/ np.sqrt(d_k)

6、Soft Max

我们自己遍历计算一下即可

python 复制代码
# 计算Softmax
for i in range(len(df_QK)):
    exp_v = np.exp(df_QK.iloc[i])
    softmax = exp_v / np.sum(exp_v)
    df_QK.iloc[i] = softmax

现在就得到了最后的相似性矩阵

7、attention

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

根据公示直接将前面计算的结构点乘V

相关推荐
zero_one_Machel2 分钟前
leetcode73矩阵置零
算法·leetcode·矩阵
奈斯。zs4 分钟前
yjs08——矩阵、数组的运算
人工智能·python·线性代数·矩阵·numpy
B站计算机毕业设计超人1 小时前
计算机毕业设计Python+Flask微博情感分析 微博舆情预测 微博爬虫 微博大数据 舆情分析系统 大数据毕业设计 NLP文本分类 机器学习 深度学习 AI
爬虫·python·深度学习·算法·机器学习·自然语言处理·数据可视化
羊小猪~~1 小时前
深度学习基础案例5--VGG16人脸识别(体验学习的痛苦与乐趣)
人工智能·python·深度学习·学习·算法·机器学习·cnn
AI大模型知识分享4 小时前
Prompt最佳实践|如何用参考文本让ChatGPT答案更精准?
人工智能·深度学习·机器学习·chatgpt·prompt·gpt-3
小言从不摸鱼6 小时前
【AI大模型】ChatGPT模型原理介绍(下)
人工智能·python·深度学习·机器学习·自然语言处理·chatgpt
酱香编程,风雨兼程11 小时前
深度学习——基础知识
人工智能·深度学习
#include<菜鸡>11 小时前
动手学深度学习(pytorch土堆)-04torchvision中数据集的使用
人工智能·pytorch·深度学习
拓端研究室TRL12 小时前
TensorFlow深度学习框架改进K-means聚类、SOM自组织映射算法及上海招生政策影响分析研究...
深度学习·算法·tensorflow·kmeans·聚类
i嗑盐の小F13 小时前
【IEEE出版,高录用 | EI快检索】第二届人工智能与自动化控制国际学术会议(AIAC 2024,10月25-27)
图像处理·人工智能·深度学习·算法·自然语言处理·自动化