我在MacBook上泼了一大杯水后,崩溃了,浪费了大约3-4天。
现在回想起来,反正MacBook已经坏了,应该想着送修,干点别的事情。
无论如何,虽然有点晚了,但我觉得必须坚持到底,所以留下了第3章的读后感。
1. 注意力机制
第3章的主要内容是注意力机制。
注意力字面意思是在句子中想要关注哪个部分。
例如,假设理解我昨天吃了饭这句话。
我们自然会集中在我、昨天、饭、吃了等词上。
为了理解正在处理的单词,需要与哪些单词结合,通过注意力机制通过单词的组合来理解语境。

2. 自注意力
自注意力是求取句子内令牌之间的关系。
假设已经将令牌实现为如下嵌入向量。
import torch
inputs = torch.tensor(
[[0.43, 0.15, 0.89], # Your (x^1)
[0.55, 0.87, 0.66], # journey (x^2)
[0.57, 0.85, 0.64], # starts (x^3)
[0.22, 0.58, 0.33], # with (x^4)
[0.77, 0.25, 0.10], # one (x^5)
[0.05, 0.80, 0.55]] # step (x^6)
)在这里,通过对所需的一个令牌与其他令牌的点乘求取令牌之间的关系来获得注意力分数。
此时,点乘这个概念可能看起来很新,但在矩阵中的点乘与向量中的内积相同。

这意味着两个向量的方向性越相似,值越大,若相互垂直,则值为0。
通过它可以确认两个嵌入有多相似。
查看的不是向量本身,而是两个向量的相似性,是因为初始化嵌入时分散了无意义的向量。
因此,测量向量本身是没有意义的。

然后,将注意力权重的和正则化到1,并将输入向量与注意力权重相乘相加。
注意力权重越高,对语境向量的影响就越大,因此从各个嵌入之间获得以查询输入的嵌入为适当位置的方向向量。
这就是语境向量。
这样为每个嵌入计算,会得到如下形式的张量。
tensor([[0.4421, 0.5931, 0.5790],
[0.4419, 0.6515, 0.5683],
[0.4431, 0.6496, 0.5671],
[0.4304, 0.6298, 0.5510],
[0.4671, 0.5910, 0.5266],
[0.4177, 0.6503, 0.5645]])张量的结构本身是二维的,但其内部内容是三维语境向量。
可以利用它以方向表达各个嵌入之间的关系。
3. 可训练的自注意力
在可训练的自注意力中,将每个键、查询值降低到更低的维度。
此时最初处理的值全部是随机值。
处理后,通过反向传播过程进行更新。
torch.manual_seed(123)
W_query = torch.nn.Parameter(torch.rand(d_in, d_out), requires_grad=False)
W_key = torch.nn.Parameter(torch.rand(d_in, d_out), requires_grad=False)
W_value = torch.nn.Parameter(torch.rand(d_in, d_out), requires_grad=False)在上方可以看到初始的query、key、value值都是随机的。
初始值都没意义,但经过训练后会变为有意义的值。
通过这个过程,我们可以获得单个单词的语境向量。
4. 因果注意力
因果注意力是对令牌进行遮罩的方式。
这是通过预测未来来预测下一个语境的方式。
刚开始接触这内容时,首先想到的是过拟合问题,但...
ChatGPT的回答不同。

防止过拟合是因果注意力的副产品。
模型帮助学习实际的语言生成方向(左→右)。
这样训练的语境向量可以理解句子的意义,并生成新句子,甚至进行推理和类比。
有各种方法来支持这一点。
5. 疑问
读书时产生了许多想法。
为什么感觉比独热编码困难得多,这样做是为了什么?
进行因果注意力是因为过拟合吗?

和ChatGPT谈了很久,结论如下。
知道答案
--> 模型不再预测而只是复制
--> 损失几乎为0(可以计算)
--> 梯度几乎为0
--> 几乎没有更新
--> 反向传播没有产生有意义的变化
--> 学习实际上没有完成例如,要在黑暗的房间里找到东西必须用手摸索。
这个过程培养了理解空间和寻找物件的能力。
但如果你已经知道物品的位置,就不需要摸索,因此最终不会学会“寻找的方法”。
在语言模型中查看未来令牌也是类似的,如果知道答案,就会失去学习预测的能力。

因此,因果注意力(causal attention)是诱导损失的函数。
因果注意力通过遮罩未来引起损失,并根据该损失更新语境向量。
在减少预测误差的过程中,模型加深对语境的理解,并随着推理、类比、评估能力的提高。
6. 读后感
由于MacBook被水泼了,延迟了一周,感到焦虑。
所以想快速阅读然后跳过,但不可能。
每个初次看到的句子都很难理解并且以新的方式出现。

为什么要在这里乘以降维的矩阵?为什么要在这里进行突然的遮罩?
探索这些问题的过程十分漫长且无味。
虽然AI能回答问题,但当我做新的解释时,总是被告知是错误的,因此深入思考什么是正确的意义。
我想这样的思考过程或许会让我成长。
期待第4章能学习到什么。
댓글을 불러오는 중...