第8讲 深度学习(五)
一、注意的认知理论
1.1 注意及其生理机制
人的认知由环境作用于人开始,经感觉、知觉与注意形成感性认识,再通过思维形成理性认识;学习与记忆、动机与情绪也参与其中。注意机制在整个认知过程中具有重要作用。注意是人的心理活动对一定对象的指向和集中,其功能包括信号检测、选择性注意和分配性注意,特征包括选择性、持续性和注意转移。
注意的最初生理机制是朝向反射:情景的新异性会引发复杂而特殊的反射。脑干网状结构的激活使大脑保持觉醒,并与边缘系统、大脑皮层相连;边缘系统中的注意神经元会对环境中的新异刺激反应,大脑皮层则是产生注意的最高部位。
注意的选择性包含指向性和集中性。指向性指人在每一瞬间选择某一对象而忽略其他对象;集中性指心理活动指向对象后在其上聚集。鸡尾酒会效应说明,即使一个人在嘈杂环境中专注于音乐或某段谈话、忽略其他声响,别处一旦有人提到他的名字,他仍可能立即反应。
注意理论分为注意选择与认知资源分配两组。选择理论包括过滤器理论、衰减理论和后期的反应选择理论;资源分配理论包括认知资源理论和双加工理论。
1.2 注意的选择理论
双耳分听实验让被试戴立体声耳机,两耳接收不同信息,要求追随一只耳朵的输入并尽快复述。被试能很好地再现追随耳内容,却对非追随耳所知很少。另一个选择性注意实验要求观看传球并统计穿白衣者的传球次数,用来展示任务目标会使人忽略显眼但无关的信息。
Broadbent 于 1958 年提出过滤器理论:外界信息很多,而神经系统高级中枢的加工能力有限,会出现瓶颈。系统为避免过载,在早期设置过滤器,只选少量信息进入高级分析并被识别、存储,其余信息完全不能通过。流程是“大量刺激→感觉登记(瞬时记忆,是刺激的精确表象)→选择性过滤→知觉分析→短时记忆→反应”。
双耳同时分听实验以每秒 2 个数字的速度呈现 右耳 4,9,3 与 左耳 6,2,7。若先完整复述右耳 493,再复述左耳 627,正确率为 65%;若按时间顺序成对复述 4,6; 9,2; 3,7,正确率只有 20%。未预先规定复述方式时,多数被试采用第一种方式。这支持人按通道选择信息的观点。
Treisman 的衰减理论也承认高级分析容量有限,需要过滤器调节,但未追随通道不是完全关闭,只是信号被衰减,因而其中一部分信息仍可能进入高级加工。两种理论的差异是:过滤器理论认为选择建立在对刺激物理属性的粗略分析上,过滤是“全或无”的;衰减理论认为前注意分析可以更复杂,甚至包含语义加工,未选择通道只是被关小或抑制。二者的共同点是都从高级通道容量有限出发,过滤器都位于初级分析与高级意义分析之间,都选择一部分信息进入高级知觉分析,因此统称知觉选择模型。
反应选择理论认为,各输入通道的信息都能进入高级分析并完成知觉加工,注意选择的不是刺激,而是对刺激的反应。输出按重要性排列,这种安排受长期倾向、上下文和指导语影响。Hardwick 于 1969 年设计双耳分听靶词实验,靶词随机、等量地出现在左右耳,要求无论从哪只耳朵听到都分别反应。左右耳靶词反应率均达到 59%~68%,且很接近,支持选择发生在反应阶段。知觉选择模型与反应选择模型的核心区别,就是选择机制位于“觉察与识别”之前还是位于知觉加工之后、反应择定之前。
1.3 注意与认知资源分配
认知资源理论认为,人通过灵活的注意机制分配有限认知资源,协调不同任务。双加工理论则区分自动化加工和意识控制加工。自动化加工不受人控制,也不受认知资源和固定容量限制,无需注意,一旦形成便很难改变;意识控制加工受意识和认知资源限制,需要注意,容量有限,但能灵活适应变化环境。意识控制加工经过大量练习,可能转变为自动化加工。
二、深度学习中的注意力机制
2.1 从局部关系到 Key-Value 注意力
媒体信息处理使用全连接前馈网络、CNN、RNN、基于自注意力的 Transformer 和图神经网络。提高模型非线性描述能力的途径包括增加层数和节点数、增加非线性激活、在 RNN 中引入反馈、在 LSTM 中引入门控,以及引入注意力。注意力既可以是 CNN 的通道或空间注意力,也可以用于 RNN Encoder-Decoder 和 Transformer;Transformer 已用于自然语言处理(如 ChatGPT)、图像处理与识别、语音识别等序列任务。
卷积网络具有局部感受野,对变长序列输入会产生相应变长的输出序列,主要建模局部时序依赖。CNN 的通道注意力把特征图在空间维压缩成一个长度等于通道数的系数向量,Squeeze-and-Excitation Network 是代表。空间注意力包括:Hard Attention 直接选取合适图像子区域;Soft Attention 用空间掩膜加权;也可以把通道维压成 1,产生单通道空间注意力图。
RNN Encoder-Decoder 的注意力把编码状态按对齐系数汇聚:
固定连接的全连接层不能适应变长输入;注意力则动态生成连接权重 \(\alpha_{ij}\),可以建立非局部依赖。其思想与图像非局部平均类似:高斯模糊等局部算法只在局部模板内卷积,非局部平均则比较当前像素 \(p\) 与所有像素 \(q\) 的邻域图像块 \(B(p),B(q)\),按相似度对所有像素加权:
其中 \(C(p)\) 是归一化系数,\(d\) 是两邻域块的欧氏距离,\(u(q)\) 是 \(q\) 点像素值。这种动态权重可获得较清晰的去噪结果。课件用“所有黑色扑克牌的数字之和是多少”说明,查询目标会让注意聚焦到与“黑色”和“数字”相关的牌。
Key-Value 注意力把数据组织为键值对:key 类似数据库字段名,如“年龄”;value 是某条记录在该字段下的取值。给定查询 \(q\)、键 \(k_j\) 和值 \(v_j\),注意力汇聚为
评分函数先把 \(q,k_j\) 映射成能量标量 \(e_j=\operatorname{Score}(q,k_j)\),再经 Softmax 得到
若 \(q,k_j\) 都是 \(d\) 维列向量,常用评分包括加性、点积和缩放点积:
高维点积方差较大,数值过大会使后续 Softmax 饱和并造成梯度消失。若 \(q,k_j\) 各元素相互独立、均值为 0、方差为 1,则内积均值为 0、方差为 \(d\);除以 \(\sqrt d\) 后方差变为 1。例:\(q=(0.9,0.9,0.2,0.2)^T\),\(k_j=(0.1,0.1,0.2,0.2)^T\),\(d=4\),则
机器翻译可将注意系数画成源词与目标词之间的对齐图。PyTorch 中,torch.mm() 只处理二维矩阵,在一些情形下比 matmul 更快;torch.bmm() 对三维张量执行批量矩阵乘法;torch.einsum() 使用爱因斯坦求和约定,可灵活表达更复杂的张量运算。
2.2 自注意力的计算
自注意力是缩放点积注意力的特例:
\(Q,K,V\) 都由同一输入 \(X\) 线性变换得到,因此称“自”注意力。
课件的第一个数值例把三个输入排成
并设置
线性变换结果为
该例为方便手算,评分直接用点积:
精确 Softmax 行分别约为 \((0.063379,0.46831,0.46831)\)、\((0.000006,0.98201,0.017986)\)、\((0.000295,0.88054,0.11917)\)。课件保留一位近似成
因此
这个三 token 例把 token 放在 \(X\) 的行中,所以写成 \(Q=XW_Q\)。下面的图像例把每个 token 写成列向量 \(t_i\),约定随之改成 \(q_i=W_Qt_i\)、\(k_i=W_Kt_i\)、\(v_i=W_Vt_i\);两种写法只是数据排布不同,不能把转置混用。
第二个例题问能否不用 CNN、直接用自注意力识别 \(6\times6\) 的 O 和 X。两幅图并排写成
把每一列看作一个 6 维 token,一幅图共有 6 个 token。以第一个 token \(t_1\) 为例,训练后参数为
保留两位小数,\(t_1\) 变换得到
同样可得其余 \(q_i,k_i,v_i\)。第一个查询与六个键的点积为
Softmax 后近似为
将六个 value 加权后,第一个 token 的新表示是
线性分类器对 O 使用权重 \((0.15,-0.76,0.85,0.58,0.53,-0.71)\) 和偏置 \(0.29\),对 X 使用权重 \((-0.77,0.37,-0.38,-0.87,-0.58,0.08)\) 和偏置 \(-0.44\)。两类得分分别为 \(-3.99\) 和 \(3.61\),因为 \(3.61>-3.99\),所以判为 X。
2.3 自注意力的一次梯度更新
课件用同一个 6 维 token 分类任务完整展开一次训练。第一步随机初始化:
线性层初值为
用初值预测时,第一 token 得到
它与六个键的评分、Softmax 系数和聚合结果分别是
线性层输出 logits \((0.20,0.02)\),Softmax 概率为 \((0.54,0.46)\)。真值是 X,即 \(y=(0,1)\),所以
反向传播先从交叉熵开始:
Softmax 的 Jacobian 为
由链式法则得到 \(\partial L/\partial\hat O_1=0.54\)、\(\partial L/\partial\hat O_2=-0.54\)。线性层中 \(\partial\hat O_c/\partial w_{cj}=a_{1j}\)、\(\partial\hat O_c/\partial b_c=1\),于是可继续求 \(W_C,b_C\) 以及输入 \(a_1\) 的梯度。课件给出的
注意力汇聚满足 \(a_1=\sum_{j=1}^{6}s_{1j}v_j\),所以
课件列出的六个 value 梯度依次为
由于 \(v_i=W_Vt_i\),每个 \(v_{ij}\) 对 \(W_V\) 的导数只在对应输出行出现 \(t_i^T\),故
对注意力权重求导得到
Softmax 注意力的 Jacobian 同样满足
因而
评分 \(h_{1i}=q_1^Tk_i\) 有
再结合 \(q_i=W_Qt_i\)、\(k_i=W_Kt_i\),其矩阵导数与 \(W_V\) 情形相同,可分别按链式法则求出 \(\partial L/\partial W_Q\) 和 \(\partial L/\partial W_K\)。最后以学习率 \(\eta=0.01\) 更新任一参数:
保留两位小数时,大部分参数变化被舍入;课件列出的更新结果中,\(W_Q\) 与初值显示相同,\(W_V\) 的第二行末项为 \(-0.16\)、第五行第三项为 \(-0.15\),\(W_K\) 的第五行后两项为 \(0.12,-0.08\)。线性层更新后为
课件第 74、82、85 页把几乎等于初值的这些矩阵放在 \(\partial L/\partial W_V\)、\(\partial L/\partial W_Q\)、\(\partial L/\partial W_K\) 等号右边,但数值实际对应保留两位小数后的更新参数,不可能是按前述链式法则得到的梯度。这里按“更新后参数”保留其数值,并把该处视为动画标注错误。
2.4 多头注意力与 Transformer
多头注意力把模型维度 \(d_{model}\) 均分成 \(h\) 份,每份单独计算注意力,再拼接并线性变换:
每个头类似分组卷积的一个 group,可以关注输入的不同部分。
Transformer 整体采用 Encoder-Decoder:编码器把输入序列映射到特征空间,每层含一个多头注意力层和前馈层;解码器把特征转换为输出序列,每层含两个多头注意力层和一个前馈层;二者输入都加入位置编码。
第一步是词嵌入。若词表大小为 \(m\)、嵌入维度为 \(d\) 且 \(d\ll m\),一个 \(m\times d\) 的线性映射即可把 one-hot 转成实向量,PyTorch 可用 nn.Embedding。
第二步是位置编码。纯点积自注意力不直接区分词序,而“I like cats because they don't bark.”与“I don't like cats because they bark.”词序不同、语义也不同,因此要把位置向量显式加到词嵌入上。Transformer 使用正弦、余弦编码:
两个位置越接近,其位置编码点积通常越大。
第三步是编码器。输入 \(X\) 为词嵌入与位置编码之和,多头自注意力输出
随后做残差连接 \(Z=X+Y\) 和层归一化。Layer Normalization 在网络中间层,对当前时刻、单个样本的特征计算均值和标准差后标准化。前馈层由两个全连接层组成:
若共有 \(N\) 层,第 \(l\) 层输出 \(H^l\) 是第 \(l+1\) 层输入,\(H^N\) 再送往解码器;编码器输出长度与输入序列长度相同。
第四步是解码器。以“我喜欢猫”翻译成 I like cats 为例,解码从 <sos> 预测 I,再以 <sos> I 预测 like,以 <sos> I like 预测 cats,最后以 <sos> I like cats 预测 <eos>。训练时使用 Teacher Forcing,把已知真值文本全部输入,通过掩码并行计算多个解码时刻;测试时没有后文真值,只能利用已解码文本逐步迭代。
为防止第 \(t\) 步看到未来 token,解码器第一层使用因果掩码。若 \(X=[x_1,\ldots,x_n]\),\(y_1\) 只能依赖 \(x_1\),\(y_2\) 只能依赖 \(x_1,x_2\),依此类推。把严格上三角位置设为 \(-\infty\),其余为 0:
Softmax 后,被掩码的未来位置权重为 0,每一行只在当前及此前位置归一化。
课件用一个 \(4\times4\) 数值例具体展示掩码前后的变化。设缩放后的评分为
不加掩码时,逐行 Softmax 得
把严格上三角位置填为 \(-\infty\) 后,评分矩阵和 Softmax 结果分别为
被屏蔽的未来位置权重都变成 0;最后一行没有未来位置,所以与未掩码结果相同。
解码器第二个注意力层是 Encoder-Decoder Cross Attention:掩码多头自注意力的输出作为 query,编码器输出同时作为 key 和 value。\(Q\) 的长度可以不同于 \(K,V\),输出长度等于 \(Q\),从而建立输入序列与输出序列的对应关系。解码器还使用与编码器相同的前馈层、残差连接和层归一化。若有 \(N\) 层解码器,第 \(l\) 层文本部分输出送入第 \(l+1\) 层,编码器输出保持不变;第 \(N\) 层输出经线性层和 Softmax 得到每个词的概率。
因此 Transformer 的完整过程是:词嵌入与位置编码;编码端的多头注意力、前馈、残差与层归一化;解码端的掩码多头注意力、交叉注意力、前馈、残差与层归一化;最后线性映射和 Softmax。
三、预训练语言模型
3.1 自回归语言模型 GPT
GPT(Generative Pre-Training)提出“生成式预训练+判别式精调”:先在大规模文本上训练高容量语言模型,学习丰富上下文;再把预训练模型适配到下游任务,用有标注数据学习判别任务。这一框架开启了自然语言处理“预训练+精调”的阶段。
GPT 用多层 Transformer 作为基本结构,在无监督预训练中从左到右建模文本,并对给定序列做最大似然估计。有监督精调使用下游任务标注数据,利用 GPT 最后一层表示完成预测;某些任务再加入额外预训练损失可进一步提高性能。不同下游任务按任务特点设置不同输入、输出形式。
无监督预训练从左到右最大化文本序列的对数似然:
输入词向量与位置向量相加后,依次经过 \(L\) 个 Transformer block,并用词嵌入矩阵作输出映射:
有监督精调用最后一层表示预测下游标签:
某些任务同时保留预训练目标:
课件把这些 \(\mathcal L\) 定义成要最大化的对数似然;若统一把 loss 定义成要最小化的量,就要给整个式子加负号。
GPT-3 的论文题为 Language Models are Few-Shot Learners,参数量扩展到 175B,展示超大模型的小样本学习能力,标志预训练模型进入超大规模阶段。传统模型直接在下游数据上精调,GPT-3 类模型则可做 zero-shot、one-shot 和 few-shot;例如可在提示中给少量翻译示例,再询问 cheese 的法语翻译。
3.2 掩码语言模型 BERT
BERT(Bidirectional Encoder Representations from Transformers)采用 Transformer Encoder。BERT-base 有 12 层、110M 参数,BERT-large 有 24 层、330M 参数。它使用两个无监督预训练任务:掩码语言模型 MLM 和下一个句子预测 NSP。[CLS] 标记输入起始,[SEP] 分隔句子。
BERT 输入表示是三部分相加:词向量把 token 映射为实值向量;块向量表示当前 token 属于哪个句子块;位置向量编码绝对位置。
MLM 从输入中选择 15% 的 token 让模型还原。其中 80% 替换成 [MASK],10% 替换成词表中的随机词,10% 保持原词不变。处理流程是输入层、BERT 编码层和输出层。
课件把 MLM 的计算链写成
其中 \(h_i^m\) 是第 \(i\) 个被选中位置的编码表示。
NSP 学习两段文本的上下文关系,判断 Sentence B 是否紧接 Sentence A。正样本取文本中相邻的 A、B,负样本把 B 换成语料库任意句子;同样经过输入、BERT 编码和输出层完成二分类。
两段文本先连接为
再用 [CLS] 对应的 \(h_0\) 做二分类:
预训练模型可用于特征提取或模型精调。特征提取只用 BERT 生成上下文语义表示,BERT 参数不参与目标任务训练;精调则以 BERT 为下游模型基底,在目标任务学习过程中同步更新其参数。自注意力可视化还能帮助分析 BERT 对关系特征的学习能力。课件最后展示了预训练模型参数量持续增大的趋势。
本讲要求与思考
本讲应掌握注意选择理论、CNN 注意力和基于自注意力的 Encoder-Decoder,理解向量相似度计算。编程实践包括网络学堂第 8 讲的 Transformer 机器翻译、Transformer 场景文本识别,以及与课件数值例对应的自注意力训练、推理与反向传播教程。
- 只使用矩阵乘法,能否为维度不同的查询和键设计新的评分函数?
- 输入序列过长时 Transformer 会遇到什么挑战?有哪些方法可以缓解?
