最近看LLM,说是transformer是基础,就去看了看。看懂了过程一直没明白为啥用Q K V。看了李宏毅的视频才明白。
先上链接!
李宏毅讲解的transformer:https://www.bilibili.com/video/BV1xF411D7TK
例子
看了很多文章基本都先从机翻为例子开始说。我们也用这个例子来说。
设置情景:给你一句中文,然后翻译成英文。
例子:我有一只猫 -------->>>> I have a cat.
那么首先让机器操作逻辑就是,机器要先能看懂这个输入,对吧。
在LLM里面,这个东西应该叫做token。
我们简单的理解,我/ 有 / 一只 / 猫。句子可以这样断句,然后每一个地方就可以理解为一个token。然后机器肯定看不懂,肯定要转换成机器能看得懂的东西,这里用的是向量。
也就是用一个向量表示‘我’。用一个向量表示‘有’等等。
问题来了
上面,比较直接解决方式就是,我断句完,分完token直接翻译,也能正确对吧?
那么现在问题来了,也是很多文章都没说这个transformer为啥要这样子搞的(也就是为啥要QKV),李宏毅说了。
有没有一种可能,我在机翻的时候存在一种情况:
假设,我现在要英文转中文.
原句: I book a book. ---------->>>> 我预定了一本书 (可能不地道,但不重要)
这里的第一个book是动词意思是预定,第二个Book是名词,是书的意思。
那么如果单纯用神经网络,或者说普通的翻译,你相同输入肯定会得到相同的输出,所以得改一改。
我们一般看单词怎么看词性呢?一般看位置吧,所以他就考虑我看这个单词顺便看看前面,看看后面。
也就是说构成了一个窗口这样的东西,
新问题出现了窗口多大? (这篇文章不说,我也不会。)
所以,引入Q K V 。用来看,我这个token 在这个窗口跟其他token之间的关系,从而得出更准确的结果。
后面就不说了,无非就是点乘来去,完了softmax之类的东西,看一看别的文章就好。
初看,若有问题还请指正。