社区
教程
Wiki
注册
登录
创作新主题
社区所有版块导航
Python
python开源
Django
Python
DjangoApp
pycharm
DATA
docker
Elasticsearch
分享
问与答
闲聊
招聘
翻译
创业
分享发现
分享创造
求职
区块链
支付之战
aigc
aigc
chatgpt
WEB开发
linux
MongoDB
Redis
DATABASE
NGINX
其他Web框架
web工具
zookeeper
tornado
NoSql
Bootstrap
js
peewee
Git
bottle
IE
MQ
Jquery
机器学习
机器学习算法
Python88.com
反馈
公告
社区推广
产品
短视频
印度
印度
一周十大热门主题
用Python优雅地写LaTeX
易点天下入选虎嗅智库大鲸榜AIGC数字营销技术商TOP15
Python 3.8 新运算符 := 让我们懒出新高度
从AIGC到AGI,为什么我们需要更多的“技术信仰派”?
建筑人坦白局 | AIGC如何引爆传统设计?
开源机器学习编译器的“理想与现实” src:网页链接 -20240423084002
免费课程:机器学习辅助材料模拟实践
GitHub工业级开源软件:CAD 的官方源代码开放!
Open WebUI 私有部署本地chatgpt应用
自动驾驶十年:AI 大爆发、Transformer「登基」和特斯拉的 ChatGPT 时刻︱酷商业
关注
Py学习
»
机器学习算法
深度学习attention机制中的Q,K,V分别是从哪来的?
人工智能爱好者社区
• 2 年前 • 250 次点击
👇点击关注公众号
👇
第一时间获取人工智能干货内容
来自 | 知乎
作者 | lllltdaf
地址 | https://www.zhihu.com/question/325839123
本文仅作学术分享,若侵权,请联系后台删文处理
我一做CV的,因为在了解Transformer,今天看Self-Attention中的QKV,也产生了此疑惑,为什么非要定义三个tensor,故搜到此问题。感觉各位都讲得不错,但还可以说得更直白一点。我大概意会了一下,因为写答案做图很麻烦也没什么经验,就简单说说我的理解,不一定准确,见谅。
注意力机制说白了就是要通过训练得到一个加权,自注意力机制就是要通过权重矩阵来自发地找到词与词之间的关系。因此肯定
需要给每个input定义tensor,然后通过tensor间的乘法来得到input之间的关系
。那这么说是不是给每个input定义1个tensor就够了呢?不够啊!如果每个input只有一个相应的q,那么q1和q2之间做乘法求取了a1和a2的关系之后,这个结果怎么存放怎么使用呢?而且a1和a2之间的关系是对偶的吗?如果a1找a2和a2找a1有区别怎么办?只定义一个这模型是不是有点太简单了。
一个不够就定义两个,
于是有了q和k。q你可以理解为代表自己用的,用q去和别的输入找关系;k理解为给别人用的,专门对付来跟你找关系的输入。这样子,用自己的q去和别人的k(当然和自己的k也行)做乘法,就可以得到找出的关系:权重α了。
仅定义q和k两个够吗?可能也还是不够的。找出来的关系是要用的,不用等于白找。
权重α是要对输入信息做加权,才能体现找到的关系的价值的。那跟输入直接加权行吗?这么做也不是不行,就是显得直接和生硬了点。所以又定义了个v。要知道,v和q、k一样,都是通过系数矩阵对输入a做乘法得到的。所以定义了个v大概等于又对a加了一层可以学习的参数,然后对经过参数调整后的a再去做加权、把通过注意力机制学到的关系给用上。所以,通过α和v的乘法进行加权操作,最终得到输出o。
综上,我的感觉是,定义这3个tensor,一方面是为了学习输入之间的关系、找到和记录谁和谁的关系权重,一方面也是在合理的结构下引入了可学习的参数,使得网络具有更强的学习能力。底下这个图把他们之间的关系画得挺好了,来源于“极市平台《搞懂 Vision Transformer 原理和代码,看这篇技术综述就够了》”,侵删。
个人粗浅解读,如有不妥请指教。我继续学习注意力去了……
—— 推 荐 阅 读 ——
假如,人工智能也去摆地摊
作为一个乘风破浪的程序员,我每天除了疯就是浪
程序员最卑微的瞬间
Python社区是高质量的Python/Django开发社区
本文地址:
http://www.python88.com/topic/118956
250 次点击
登录后回复