对自注意力机制的简要理解

之前初步接触深度学习里注意力机制的时候,一直不太理解为什么这个体现了不同向量之间的关联性,为什么有query、key-value pair这些东西,怎么体现多头注意力,为什么叫自注意力。后面看了李宏毅老师的课程和最近看的《普林斯顿计算机公开课》这本书,有了自己的理解。

前面两个问题,可以通过类比搜索引擎搜索的过程来理解。
先看《普林斯顿计算机公开课》中的介绍

搜索引擎是怎么工作的呢?从用户角度来看,他们在网页上的表单中填写查询条件,然后把这个查询发送给服务器。服务器差不多立即就会返回一个链接列表和文本摘要。从服务器的角度看则要复杂得多。服务器会生成一组包含查询关键词的页面,按照相关程度进行排序,再在HTML中附上页面的摘要,然后再发给用户。

从这句话里,我们搜索引擎需要一个查询条件,也就是query。

互联网实在太大了,每个用户在查询时不可能开启一个对整个Web的新搜索。因此搜索引擎的主要任务就是为满足查询需求,事先把所有页面信息有组织地保存在服务器上。......抓取网页后就要开始建立索引。这个阶段要从爬虫抓取的页面中抽取每个页面的相关部分,然后在索引中记录这些内容,以及它们的URL和在页面中的位置。这一阶段的具体处理方式取决于要索引的内容是文本、图片、表格文件、PDF文件、视频等,它们都有各自的处理方式。本质上,索引就是为网页中出现的词或其他可索引项,创建一组页面和位置,并以一种可以快速检索任何特定条目所在页面的方式存储起来。

这句话的意思,就是爬虫之后,服务器将会把爬取的内容进行处理,然后建立索引,这个索引就是key,而爬取的内容就是value(当然也经过了一些编码的处理)。另外很重要的一点,需要索引的内容(文本、图片、表格文件、PDF文件、视频等value)不同,索引的处理方式可能不同!这一点很重要等一下还会提到。

最后一个任务就是针对具体的查询进行响应。简单来讲,就是以查询中所有的关键词为依据,通过索引列表迅速找到匹配的URL,然后(同样也是迅速地)选择匹配度最高的URL。

最后,通过query在索引(key)列表中找到匹配度最高的URL(value)!
我们发现注意力机制计算的过程和搜索的过程确实很相似!而最终都是希望找到关联性很强的value。
那为什么要对原始的向量进行编码处理。因为我们知道,query和key或者value的内容其实几乎不可能完全一样,所以我们不能够通过像python字典数据那样直接按字符串类似的方式查找,所以我们必须通过编码的方式将发现向量中的隐藏结构或者说结构化信息(更高维度的信息?)然后通过点乘(一种比较常见的向量的相似程度计算)来计算隐藏信息中的关联性。所以我们才要用前面的几个W矩阵来对输入向量进行编码。
然后为什么有多头注意力。前面提到的这一阶段的具体处理方式取决于要索引的内容是文本、图片、表格文件、PDF文件、视频等,它们都有各自的处理方式。意思就是,如果我们感兴趣的点不同,他们编码建立索引和查询的方式就不一样!这样就在编码的过程中使用来完全不一样的W矩阵来计算,当然就反映来不同的注意力。
为什么是自注意力。我个人理解这是因为编码query、key、value的输入向量是自身大的输入向量的不同片段,而不是完全来源不同的内容。

以上

posted @ 2025-04-11 21:10  pomolnc  阅读(21)  评论(0)    收藏  举报