参考链接:
卷积:https://www.bilibili.com/video/BV1Vd4y1e7pj/?spm_id_from=333.999.0.0&vd_source=fa1d778abbb911d02be7ac36f2b2e32a
Transformer:
https://www.bilibili.com/video/BV1TZ421j7Ke/?spm_id_from=333.999.0.0&vd_source=fa1d778abbb911d02be7ac36f2b2e32a
https://www.cnblogs.com/zhubolin/p/17156347.html
关于卷积的一点思考:
数字图像处理中设计各种卷积核对图像进行处理,比如模糊、锐化、检测横向和纵向边缘等
卷积神经网络则是根据目标(需要提取图像的哪些特征从而完成相应任务)去学习卷积核(不同卷积核用于捕捉不同特征)的内容。需要人为设置的参数包括kernal_size, stride, padding等
Attention
token——embedding(高维空间表示,比如女儿这个词,我们看到这个词会用一些复杂的表述来表示,这就相当于embedding)
*如何操作?全连接层(linear layer)增加output_dim即可
一开始,token的embedding仅有本义+position信息。我们要做的是,更新embedding,使其还包含与上下文相关的信息。比如“一斤+苹果”和“苹果+手机”的“苹果在高维空间中的tensor不应是同一个,前一个“苹果”应该和“水果”等词在高维空间中更靠近,后一个“苹果”应该和“手机”“乔布斯”等词在高维空间中更靠近
如何实现更新embedding以考虑上下文?计算token之间的相似度,用其更新embedding
如何计算相似度?把每个token的embedding映射至Q空间和K空间,计算Q空间中的每个embedding和K空间中的每个embedding的相似度,相似度大,则说明两个token越相关
为什么要先映射到Q、K空间再算相似度?如果直接算相似度,永远是同样的token相似度最大。而映射到Q、K空间后,Q=Query,\(W_Q\)乘某个token的embedding,得到一个低维的tensor,相当于在问“谁是和我相关的token”。K=Key,\(W_K\)乘某个token的embedding,也得到一个低维的tensor,相当于在回答“我是和...相关的token”【attend to】。这样,匹配上(相关度高)的两个tensor点乘的结果就会大(相似度大)。
因此,我们得到了一个Matrix,每个值为对应两个token的相似性(可正可负),然后做softmax(值0-1,和为1)和归一化,得到的matrix为Attention Pattern
*除以一个标量
*掩码:Attention Pattern的左下三角形强制为0(实际上是在进行softmax前强制为负无穷,这样softmax之后满足和为1),因为在生成next word时,不能让后面的token影响当前的生成,也就是说,进行当前生成时不能偷看后面的内容以帮助当前生成
把每个token的原embedding映射到V空间,V=Value。此tensor与Attention Pattern相乘,相当于用Attention Pattern的每列的每个值作为权重与V的每个向量相乘,然后相加,以更新V中的每个向量,从而得到各个\(\Delta{E_i}\),分别加在每个token原来的embedding上。能想到的是,\(\Delta{E_i}\)中与当前token越相似的token的向量占比重越大,这样加在原embedding上时,使其越靠近与当前token相似的token的embedding
【计算过程李宏毅和3B1B是一个思路,把embedding作为列向量,推荐这种。而Attention is all you need原文是把embedding作为行向量】
计算复杂度是上下文长度的平方\(O(n^2)\)
Multi-head Attention
多头注意力:待补充
Self-attention
Cross-attention
标签:思考,相似,卷积,Attention,token,embedding,注意力,tensor From: https://www.cnblogs.com/xjl-ultrasound/p/18342074