这篇文章是接上一篇通过在线编程彻底搞懂transformer模型之一:embedding嵌入,我在这篇文章着重介绍attention注意力机制
我想好一会儿发现attention用文字并不太好说清楚,而且可能写了一大堆,大家看完的几率也不太大。索性就把视频链接放在下面,自认为用视频能说的比较清楚。
在视频中提到的部分包括:
- 词的相关性矩阵
- 解释Attention中的Query,Key和Value
- Softmax在注意力机制的作用
- 注意力机制中Scale factor的讲解
- Attention中重矩阵的作用
- 详细分析输入输出和计算中的各种维度
- Tensorflow.js实现代码的讲解
- 多头注意力机制
- 总结
写代码彻底搞懂attention注意力机制 -- LLM transformer系列,附:在线编程地址
在我看来。Attention充分利用了embedding中的语义信息,创造一种找到在上下文中词组关联程度的机制,这种机制又能很好的利用GPU的并行能力,在众多模型机制中脱颖而出,在近年很多领域都有斩获。
下面附上代码
const d = 768
const tokens = {'每天': 0, '吃': 1, '苹果': 2, '可以': 3, '补充': 4, '维生素': 5, '和': 6, '纤维': 7, '对': 8, '身体': 9, '有': 10, '好处': 11}
const a = tf.tensor1d(Object.keys(tokens).map(k => tokens[k]))
const embedding = tf.layers.embedding({inputDim: 200, outputDim: d})
const x = embedding.apply(a)
console.log('x', x.shape)
const [dQ, dK, dV] = [24, 24, 30]
const wQuery = tf.randomUniform([dQ, d])
const wKey = tf.randomUniform([dK, d])
const wValue = tf.randomUniform([dV, d])
const querys = wQuery.matMul(x, false, true).transpose()
const keys = wKey.matMul(x, false, true).transpose()
const values = wValue.matMul(x, false, true).transpose()
console.log('querys', querys.shape)
console.log('keys', keys.shape)
console.log('values', values.shape)
const os = querys.matMul(keys, false, true)
const weights = os.div(tf.sqrt(dK)).softmax()
console.log('weights', weights.shape)
const atts = weights.matMul(values)
console.log(atts.shape)
大家也可以在我给大家提供的在线编码的网页上去试验。地址是:https://chn.ai/tf.html
有什么问题大家可以在下面留言。我看到后会尽量给大家解决。也希望大家多多分享点赞。给原创鼓励。
本文通过视频和代码详细介绍了Transformer模型中的注意力机制,包括Query、Key、Value的概念,Softmax的作用,以及在Tensorflow.js中的实现。作者强调了注意力机制如何利用语义信息和GPU的并行处理能力。读者可通过提供的在线编程地址进行实践。

1398

被折叠的 条评论
为什么被折叠?



