深度学习

Tutorial 10 – 百折不挠:强化学习(Reinforcement Learning)

Deep Learning create by Deepfinder Agenda 师徒相授:有监督学习(Supervised Learning) 见微知著:无监督学习(Un-supervised Learning) 无师自通:自监督学习(Self-supervised Learning) 以点带面:半监督学习(Semi-supervised learning) 明辨是非:对比学习(Contrastive Learning) 举一反三:迁移学习(Transfer Learning) 针锋相对:对抗学习(Adversarial Learning) […]

Tutorial 10 – 百折不挠:强化学习(Reinforcement Learning) Read More »

ViLT: 视觉与语言多模态框架

1. 摘要 视觉与语言预训练(VLP)在跨模态任务(如图文检索、视觉问答等)上取得了显著进展。然而,现有方法大多依赖计算量大的图像特征提取模块(如基于目标检测的区域特征或CNN提取的全局特征),这不仅降低了效率,还限制了模型的表达能力。本文提出 ViLT(Vision-and-Language Transformer),一种极简的VLP模型,其核心创新是完全摒弃传统卷积或区域监督方法,改用类似文本处理的“无卷积”方式直接建模视觉输入。实验证明,ViLT 比现有方法快数十倍,同时在下游任务上保持甚至超越SOTA性能。 论文地址:http://proceedings.mlr.press/v139/kim21k/kim21k.pdf 2. 介绍 2.1 背景 作者总结了视觉-语言模型(Vision-and-Language Models)的 四种计算范式分类,通过比较 视觉嵌入(VE)、文本嵌入(TE)和模态交互(MI) 三个模块的 相对计算量(矩形高度表示),揭示了不同模型的设计差异。以下是详细解析: (a) VE > TE > MI特点:视觉嵌入计算量最大,文本次之,模态交互最小。需运行Faster R-CNN提取区域特征(VE耗时高),文本用轻量BERT(TE中等),交互较简单。代表模型:早期基于区域检测的模型(如UNITER、VILBERT)。 (b)

ViLT: 视觉与语言多模态框架 Read More »

GraphGAN

GraphGAN是一种结合了图神经网络和生成对抗网络(GAN)概念的机器学习模型。它旨在通过对抗学习框架解决图数据中的节点分类和链接预测问题,特别是在缺少标签数据的情况下。GraphGAN通过结合生成器和判别器两个主要组件来学习图中节点的有效表示。 GraphGAN的框架如下:设\(G=(V,\mathcal{E})\)为一个给定的图,其中\(V=\begin{Bmatrix}v_1,\ldots,v_V\end{Bmatrix}\)代表顶点的集合,而$\mathcal{E} = \left\{ e_{ij} \right\}_{i,j=1}^{V}$代表边的集合。对于给定的顶点\(\nu_{c}\),定义\(\mathcal{N}\left(\nu_{c}\right)\)为直接连接到\(\nu_{c}\)的顶点集,也就是顶点\(\nu_{c}\)的1-hop邻居。我们将顶点\(\nu_{c}\)的真实连通性分布表示为条件概率\(p_{\mathrm{true}}\left(\nu|\nu_{c}\right)\),它反映了\(\nu_{c}\)的连通性偏好和它所连接顶点的类型。从这个视角来看,\(\mathcal{N}\left(\nu_{c}\right)\)可以被看作是从\(p_{\mathrm{true}}\left(\nu|\nu_{c}\right)\)抽取的一组观察样本。给定图\(\mathrm{G}\),GraphGAN旨在学习以下两个模型: 生成器\(\mathrm{G}\)和判别器\(\mathrm{D}\)作为两个对手: 生成器\(\mathrm{G}\)将试图完美地匹配\(p_{\mathrm{true}}\left(\nu|\nu_{c}\right)\)并生成类似于\(\nu_{c}\)的真实直接邻居的相关顶点以欺骗判别器。而判别器\(\mathrm{D}\)则相反,会尝试检测这些顶点是\(\nu_{c}\)的真实邻居还是由其对手\(\mathrm{G}\)生成的。形式上, \(\mathrm{G}\)和\(\mathrm{D}\)在一个有以下价值函数\(V(G,D)\)的双人博弈中进行对抗: \(\min_{\theta_G}\max_{\theta_D}V(G,D)=\sum_{c=1}^V\left(\mathbb{E}_{\nu\sim p_{\mathbf{tne}}(\nu|\nu_c)}\left[\log D(\nu,\nu_c;\theta_D)\right]+\mathbb{E}_{\nu\sim p_G(\nu|\nu_c;\theta_G)}\left[\log\left(1-D(\nu,\nu_c;\theta_D)\right)\right]\right)\)       (1) 上式描述的最小最大(Minimax)博弈公式是生成对抗网络的核心。在图生成对抗网络(GraphGAN)的上下文中,生成器\(\mathrm{G}\)的目标是生成看起来像真实数据的样本。在GraphGAN的情境下,生成器试图生成看似是\(\nu_{c}\)的1-hop邻居的顶点。而鉴别器\(\mathrm{D}\)的目标是区分输入样本是来自于真实数据还是生成器生成的假数据。在GraphGAN中,它试图区分一个顶点对\((\nu,\nu_{c})\)是否是真实的1-hop邻点对。这个公式包含了两个期望(Expectations): 第一部分为真实数据的期望\(E_{v\sim p_{\mathrm{true}}\left(v\mid v_{c}\right)}\left[\log

GraphGAN Read More »

Deep Graph Infomax

Deep Graph Infomax(DGI)是一种基于图的无监督学习方法,其主要目标是学习图中节点的有效表示,即图数据的Embedding。DGI由Petar Veličković等人在2019年的论文中提出,这种方法通过最大化局部图结构(节点)和全局图结构(整个图)之间的互信息来学习节点表示,DGI整体的模型计算流程如图1所示。 从图1可以看出,第一步,算法需要一个正常图\((X,A)\)的扰动版本\((\widetilde{X},\widetilde{A})\),扰动版本通过负样本操作\(\mathrm{C}\)来实现。负样本操作可以通过多种方式实现,本质是一个函数。这个函数会接受图的节点特征\(\mathbf{X}\)和邻接矩阵\(\mathrm{A}\)作为输入,然后对原图结构进行变换,比如随机打乱节点的特征,或者在邻接矩阵中随机重排列边。目的是创建一个与原始图在统计特性上有显著区别的样本,这个负样本在后续步骤中用来帮助判别器学习如何区分图的正样本表示和与图不相关的表示。 第二步使用编码器函数\(\varepsilon(X,A)\)处理原始图的每个节点,从而得到每个节点的向量表示。这里的编码器\(\mathcal{E}\)通常是一个图神经网络(如GCN),它能够考虑节点的特征以及节点之间的连接(通过邻接矩阵\(\mathrm{A}\))来产生一个低维而信息丰富的特征向量\(\boldsymbol{h}_i\)。编码器的目的是捕获节点的局部图结构和节点特征,生成的集合\((H,A)=h_1,h_2,\cdots,h_n\)包含了输入图所有节点的这些表示。同理,在上一步中采样的负样本也需要经过编码器\(\boldsymbol{\varepsilon}\)的处理得到对应的\((\widetilde{H},\widetilde{A})\)。 第三步,算法需要从整个输入图的节点表示中提取一个单一的图级别的表示\(\mathbf{s}\)。这通常通过一个汇总函数\(R\left(\boldsymbol{H},A\right)\)完成,它可以是简单的平均节点表示,或者一个更复杂的结构,如基于注意力的汇总方法。这个图级别的表示\(\mathbf{s}\)应该捕获整个图的全局性质,它将在损失函数中用于比较正样本和负样本的节点表示。 最后一步是模型学习的关键。在这一步中,通过梯度下降来更新编码器\(\boldsymbol{\varepsilon}\)、汇总函数\(\text{R}\)以及判别器\(\text{D}\)的参数。判别器也是一个图神经网络,其任务是根据节点表示(\(h_{i}\)或\(h_{j}\))和图表示来判断节点是否属于该图。损失函数\(\text{L}\)在正样本的情况下鼓励判别器给出高的得分,而在负样本的情况下给出低的得分。通过最大化损失函数中定义的互信息量,模型能够训练出区分原始图节点和负样本节点表示的能力。 这个训练过程的目标是调整模型的参数,使得从正样本图中提取的节点表示与图的全局表示尽可能接近,而从负样本图中提取的节点表示则与图的全局表示尽可能远。即最大化节点表示和对应图级表示的互信息。这种方法认为,如果节点表示能够捕捉到与整个图表示高度相关的信息,那么这些节点表示就是有用的。这便完成了DGI的主要目标:学习图中节点的有效表示,即图数据的Embedding。 随机游走算法的目的也是学习图中节点的有效表示,且与DGI同属无监督学习方法,但在方法和理念上存在显著差异。随机游走侧重于通过模拟从一个节点开始的随机路径来捕捉图中节点的局部连接模式,以探索和利用图的局部结构特性。这种方法通过观察节点间的“游走”行为,直接反映了节点的邻近关系。相比之下,DGI采用基于互信息最大化的策略,通过学习节点表示和全局图表示之间的互信息来提取特征,不仅考虑了局部结构,还尝试捕捉整个图的全局上下文。DGI通常使用图神经网络如图卷积网络(GCN)作为编码器,更侧重于深度学习技术。总体而言,随机游走方法更加直观和简单,适用于图的局部特征学习;而DGI则是一种更复杂的深度学习方法,能够综合局部与全局信息,适合于需要深层特征提取的复杂图形任务。 此外,DGI(Deep Graph Infomax)和GAN(生成对抗网络)虽然都涉及到一个判别器组件,但它们的目标和训练过程有本质的不同。GAN由两个模型组成:生成器(Generator)和判别器(Discriminator)。生成器的目标是创建尽可能接近真实数据的新数据实例,而判别器则试图区分真实数据和生成器创建的伪造数据。这两个模型在训练过程中相互竞争,生成器不断改进其生成的数据质量以试图“欺骗”判别器,而判别器也不断改进其识别真伪数据的能力。这种对抗性的训练过程导致了生成器学会生成高质量的数据。DGI的目的不是生成新的数据,而是从图数据中学习有用的节点表示。在DGI中,判别器的作用不是与编码器对抗,而是帮助编码器学习生成高质量的节点嵌入。DGI使用一个非对抗的信息最大化原则,这个原则指导编码器生成的节点表示要包含足够的信息以便判别器可以准确区分节点是来自原始图还是扰动后的图(即正样本或负样本)。换句话说,判别器用于指导编码器捕捉到有意义的特征——使得这些特征对于区分不同图结构是有信息的。DGI的目标是通过这种方式提升表示的质量,而不是在编码器和判别器之间创建对抗。

Deep Graph Infomax Read More »

Relational Graph Convolutional Neural Network

对比GCN讲解RGCN的基本思想。GCN通过将图的邻接矩阵与节点特征结合,利用统一的权重矩阵\(\mathrm{W}\)来更新节点的特征,从而捕获图中的拓扑结构信息。这种方法在处理同质图时非常有效,即所有节点和边被假定具有相同的类型和属性。然而,GCN不直接处理图中的异质性或复杂的关系类型。 与GCN不同,RGCN(Relational Graph Convolutional Neural Network)被设计用来处理具有多种关系的异构图。此时,节点或边的种类有很多种情况,每种类型可能有其特定的属性和语义。例如,在生物医学的异构图中,不同类型的节点(如药物分子、疾病名称、蛋白质名称、生物通路等)和边(如促进、抑制、治疗、包含等)包含丰富的语义信息。RGNN能够对这些不同类型的实体和关系分别学习表示,这样能够更好地理解它们各自以及它们之间的复杂关系。用公式表示为: \(G=(V,E,R,T)\) 其中\(\text{V}\)为节点集,每个节点在下文表示为\(\nu_{i}\);\(\text{E}\)为边集,边\((\nu_{i},r,\nu_{j})\in E\);\(T(\nu_{i})\)为节点类型;\(\mathrm{R}\)为边类型集合,\(r_{i}\)在下文表示每个边的属性。 【例1】边有三种不同的类型\((r_1,r_2,r_3)\),分别用三种不同的线段格式表示,如图1所示。例如,节点A通过类型为\(r_{1}\) 的边与节点B和D相连,通过类型为\(r_{2}\) 的边与节点C相连等等。图1中也展示了关系图卷积网络(RGCN)的一个关键特点:不同类型的边使用不同的权重矩阵\((W_{_{r1}},W_{_{r2}},W_{_{r3}})\)来处理信息。这意味着,当更新一个节点的特征时,RGCN 会根据边的类型使用不同的权重矩阵。值得注意的是,在这个例子中,\(r_{1}\) 有三种类型,但这并不意味着要维护三个独立的神经网络。实际上,\(W_{_{r1}},W_{_{r2}},W_{_{r3}}\)可以共同组成一层神经网络的参数。假设用于更新边信息的神经网络输入输出都是由12个神经元组成的网络层,那么第1-3个神经元可以用于更新第一种边类型;第4-6个神经元用于更新第二种边类型;第7-9个神经元用于更新第三种边类型。 RGCN为每种类型的边引入了不同的权重矩阵,以此来捕获不同关系类型之间的细微差异。每一种关系类型的权重矩阵负责编码特定类型的边对节点特征更新的贡献。这样,RGCN能够综合节点的特征以及与其相连的各种类型边的信息,生成更丰富的节点表征。实际上,RGNN更像是一种思想,而不是固定的模型,它可以扩展到其它GNN模型上,如GraphSAGE、RGAT等。节点\(\mathrm{i}\)的特征更新规则在RGCN中可以表示为: \(\boldsymbol{h}_i^{(l+1)}=\sigma\left(\sum_{r\in R}\sum_{j\in N_r(i)}\frac{1}{c_{i,r}}\boldsymbol{W}_r^{(l)}\boldsymbol{h}_j^{(l)}\right)\) 其中: 在每一层中,对于每种类型的关系\(\mathrm{r}\),我们首先使用权重矩阵\(W_{r}^{(l)}\)来转换与节点\(\mathrm{i}\)相连的每个邻居节点\(\mathrm{j}\)的特征。然后,我们将所有这些转换后的特征进行加权求和,其中每个邻居的特征向量除以归一化常数\(c_{i,r}\),以避免不同数量的邻居对聚合结果的不均衡影响。最终,我们对所有关系类型的累加结果应用非线性激活函数,以得到节点\(\mathrm{i}\)在下一层的新特征向量\(h_i^{(l+1)}\)。这种机制允许RGCN分别学习不同类型的关系如何影响节点特征,而不是像GCN那样对所有边一视同仁,或者像GraphSAGE那样只是简单地聚合邻居节点的特征。

Relational Graph Convolutional Neural Network Read More »

Residual Gated Graph Convnets

Gated GCN 结合了GCNs的空间聚合能力和LSTM中的门控机制。这种结构设计旨在解决传统GCN在处理复杂图数据时面临的信息过载和信息损失问题。每个节点的状态更新不仅依赖于其邻居的信息,还受到门控机制的控制。这种操作使得网络可以在每一层学习到如何最有效地聚合邻近节点的信息,同时根据任务的需要丢弃无关信息,使其能够适应不同的图结构和动态变化的图数据,提供了更精细的信息处理能力。Gated GCN的模型设计如图1所示。 从图1中可以看到节点特征向量\(h_{i}\)和边特征向量\(e_{ij}\)的具体数据更新流程。首先每个节点\(\mathrm{i}\)在每一层\(\mathrm{l}\)有一个特征表示\(h_i^l\),节点\(\mathrm{i}\)邻居节点的特征向量集合为\(\begin{Bmatrix}h_j^l\end{Bmatrix}\)。每条边\((i,j)\)在每一层\(\mathrm{l}\)也有一个特征表示\(\boldsymbol{e}_{ij}\)。节点特征\(h_{i}^{l}\)通过矩阵\(U^{l}\)和\(A^{l}\)转换。相邻节点的特征\(\begin{Bmatrix}h_j^l\end{Bmatrix}\)通过矩阵\(V^{l}\)和\(B^{l}\)转换。边特征\(\begin{Bmatrix}e_{ij}^l\end{Bmatrix}\)通过矩阵\(C^{l}\)转换,这里的矩阵实际上是神经网络层中的参数矩阵。节点特征\(h_{i}^{l}\)、邻居节点的特征\(\begin{Bmatrix}h_j^l\end{Bmatrix}\)和边特征\(\begin{Bmatrix}e_{ij}^l\end{Bmatrix}\)分别经过\(A^{l}\)、\(B^{l}\)和\(C^{l}\)映射后的新特征表示将进行求和(Sum)操作,这一步的含义是进行边特征与节点特征的信息交互和融合,求和后的结果会经过激活函数ReLU的处理。处理后的结果一方面作为更新后的边特征\(\begin{Bmatrix}\boldsymbol{e}_{ij}^{l+1}\end{Bmatrix}\);另一方面将经过Sigmoid函数\(\sigma\)的处理产生一个门控信号,这个门控信号与相邻节点特征的加权(经过\(V^{l}\)变换后的\(h_{j}^{l}\))和相乘,实际上是对每个邻居节点的贡献进行缩放。这就是门控机制,它控制着信息的流向,与LSTM中的门控机制类似。最终,门控后的信息被累加到当前节点特征上 (经\(U^{l}\)变换后的\(h_{i}^{l}\)),通过一个求和(Sum)操作。结果再次通过ReLU激活函数得到当前层的输出结果。 经过上述处理后得到的结果\(\boldsymbol{h}_i^{l+1}\)是节点\(\mathrm{i}\)在下一层\(\mathrm{l+1}\)的新特征表示。同时,边的特征也更新为\(e_{ij}^{l+1}\)。这个过程体现了Gated GCN在图卷积中加入门控机制的重要性。通过调节门控信号,模型能够控制每个节点在其邻居之间传递的信息量,这样就可以捕捉到图中更加复杂的结构模式,同时减少不必要的信息传递,提高了模型的泛化能力和处理大规模图数据的效率。

Residual Gated Graph Convnets Read More »

Graph Isomorphism Network

在讲解Graph Isomorphism Network(GIN)之前,有必要先学习了解一下GNN模型的表达能力(Expressive Power),即GNN将不同图数据表示为不同嵌入向量的能力。这里会涉及一个被称为计算图的概念,图神经网络(GNN)的计算图是一种数据结构,它表示图中的节点以及它们之间的连接关系,用于有效地实施图数据上的学习算法。在这种结构中,每个节点聚合其邻居节点的信息,通过多次迭代更新其状态,从而捕捉和利用图的局部连接性质。为了研究GNN模型的表达能力,先来了解一下图数据的局部信息结构,如图1所示。 考虑图1两跳(2-hop)范围内计算图的几个特殊情况: (1)节点1和节点4,具有相同度数,但到其两跳(2-hop)邻居的信息上度数不同,导致计算图结构不同,因此可以区分这两个节点,如图2所示。 (2)节点1和节点5,因其自身度数不同而具有不同的局部结构信息,如图3所示。 (3)节点1和节点2,具有相同度数,也具有相同的邻居结构,在两跳邻居上,都具有相同的局部结构,如图4所示。 在图4的情况下,假设所有节点的初始化特征向量相同,且聚合节点信息时仅考虑两跳范围内的信息,那么节点1和节点2将被嵌入到同一个表示向量,GNN无法区分这两个节点。相比之下节点3、4、5由于计算图不同,理论上是可能由GNN区分开的。GNN模型应该有将不同的计算图映射到不同的节点向量的能力。想要区分不同的计算图,聚合的方式是关键,聚合函数表达能力越强,GNN表达能力越强。 然而,不管是求和、求平均,还是求最大值这些广泛被使用的聚合方式,都不是最佳的选择,如图5所示,两种图数据的计算图是不同的。但针对图5 (a)的初始化节点向量,求平均和求最大值的聚合方式都不能有效的区分出不同的计算图。类似的,对于图5(b)的初始化节点向量,求和的聚合方式也不能有效区分这两种计算图。这是因为图通过聚合节点向量后却得到了相同的新的节点向量。 从数学的角度上来讲,希望GNN的聚合函数是一种单射函数(Injective Function),即可把不同的元素映射成不同输出。换句话说,希望GNN的聚合函数能把不同的计算图映射生成不同的节点向量。显然,求和函数、求平均函数、求最大值函数都不是单射函数。根据Xu et al. 在论文Graph Wavelet Neural Network中得到定理可知:任一单射函数都可以表示为: \(\phi(\sum_{x\in

Graph Isomorphism Network Read More »

欠拟合,过拟合与正则

1、优化过程中过拟合与欠拟合 过拟合和欠拟合模型是深度学习模型在训练过程中比较容易出现的不好的现象。 当模型的表现能力弱于事件的真实表现时,会出现欠拟合现象。某个非线性模型合适的解如图1(a)所示。如果用线性模型去训练这个非线性问题,自然难以得到合适的解,如图1(b)所示。 相反,当模型的表现能力强于事件的真实表现时,会出现过拟合现象,过拟合现象是指模型为了追求训练集的准确率,过多地学习一些非普遍的特征,导致模型的泛化能力下降。虽然能很好地拟合训练集,但是在测试集上表现不佳。正常拟合的模型如图2(a)所示,过拟合的模型如图2(b)所示。 影响模型过拟合和欠拟合的原因主要有两个:数据(数据量大小)和模型容量(模型复杂度),其关系见表1。 数据简单 数据复杂 模型容量低 正常 欠拟合 模型容量高 过拟合 正常 表1 欠/过拟合现象产生原因 从数据量的角度理解:当用于训练模型的数据太少时容易出现过拟合现象;数据太多容易出现欠拟合现象。这个现象可以通过生活中的例子来解释:假设一个大学生正在努力准备期末考试。如果用于考试的备考题库(训练集)太简单,学生可能试图通过死记硬背考题的答案来做准备。他甚至可以完全记住过去考试的答案,实际上这样做他并没有真的理解题目。这种记住训练集中每个样本的现象被称之为过拟合。相反,如果用于考试的备考题库太多太难,超出学生记忆过的范围,同时学生也很难理解题目之间相关性以及分析数据的特征。这种训练集太难,模型无法胜任处理工作的现象被称之为欠拟合。 从模型复杂程度的角度理解:为什么一个大学生会想到背答案?如果换个幼儿园的小朋友来做题还会想到背答案这个方法吗?其实,一个大学生可以类比成一个复杂的模型,而一个幼儿园小朋友可以类比成一个简单的模型。由此可以轻易地判断出,一个复杂的模型更容易出现过拟合现象,因为它更容易记住训练集中的每个样本而不是学习到普适的特征。 最后,训练误差和泛化误差是衡量模型拟合效果的两个重要指标。首先解释一下什么是训练误差和泛化误差: (1)训练误差(Training Error),指模型在训练数据集上计算得到的误差。

欠拟合,过拟合与正则 Read More »

优化算法与优化器

当解决房价预测问题时,首先制作一个训练数据集,在房价的例子中,收集了过去两年的房子交易记录。房子的数据(面积、地域、采光等)作为训练集,对应的房子成交价格作为真实值。这些训练数据会随着时间的积累越来越多。然后可以创建一个神经网络模型或其他机器学习模型,先随机初始化其中的权重和偏置,再将训练数据送进模型,得到一个计算结果,即估计值。此时,由于参数是随机初始化的,这个预估值大概率不准确;接下来使用损失函数进行真实值与预估值的比较,根据比较的结果反馈,来更新新的模型权重,这个更新权重的方法被称为优化算法。 优化算法是机器学习领域的一个核心任务,简单说就是通过调整模型的参数来最小化或最大化某个目标函数(通常是损失函数或效用函数)。为了实现这一目标,研究人员和工程师们开发了多种优化算法,这些算法可以大致分为几个类别,包括梯度下降及其变体、进化算法、以及基于统计的方法。这些算法在不同的情境和对不同类型的问题中各有优势。 进化算法,如遗传算法、免疫算法、鸟群算法、鲸鱼算法、灰狼算法、蝙蝠算法、蚁群算法、模拟退火等等。这些算法一般模仿生物进化过程中的自然选择、遗传、变异等机制来迭代地改进模型参数。这些算法属于启发式搜索算法,一般用于全局优化问题。 基于统计的优化算法,如期望最大化(EM)、马尔可夫链蒙特卡罗(MCMC)方法等等,采用统计学原理来引导优化过程。例如,EM算法通过交替计算期望和最大化步骤来估计模型参数,尤其适用于包含隐变量的情况。MCMC通过构造马尔可夫链生成符合目标分布的样本序列,广泛应用于贝叶斯统计中后验分布的估计。这些算法在处理高维空间和存在多个局部最优解的复杂问题时特别有用,但是计算复杂度一般非常昂贵。 在深度学习领域,最常用的优化算法实际上是梯度下降及其变体。梯度下降是一种求解可微分函数局部最小值的迭代算法。简单说,它的工作原理是计算目标函数关于参数的梯度(即斜率),然后沿着梯度下降的方向调整参数,逐步逼近最小值点。由于其简单、高效且易于理解的特点,梯度下降成为了深度学习和其他机器学习领域中最基础和最广泛使用的优化算法。梯度下降及其变体之所以在机器学习中至关重要,是因为它们为如何有效地训练模型提供了可行的路径,特别是在处理非常大的数据集和非常复杂的模型结构时。这些算法的进一步发展和改进将继续是机器学习和人工智能领域研究的一个活跃方向。下面将重点对梯度下降算法进行展开讲解。 1、梯度下降算法 在深度学习领域使用的优化算法一般是梯度下降算法,具体解释如下: 从某种程度上,读者可以把梯度理解成某函数偏导数的集合,例如函数\(f(x,y)\)的梯度为: \(\mathrm{grad}f(x,y)=\left(\frac{\partial f}{\partial x},\frac{\partial f}{\partial y}\right)\) 当某函数只有一个自变量时,梯度实际上就是导数的概念。 需要注意的是,梯度是一个向量,既有大小又有方向。梯度的方向是最大方向导数的方向,而梯度的模是最大方向导数的值。另外,梯度在几何上的含义是函数变化率最大的方向。沿着梯度向量的方向前进,更容易找到函数的最大值,反过来说,沿着梯度向量相反的方向前进是梯度减少最快的方向,也就是说更容易找到函数的最小值。 例如,维基百科上用来说明梯度的图片特别典型,说明非常形象,所以引来供读者学习。 【例1】设函数\(f(x,y)=-(\cos2x+\cos2y)^{2}\),则梯度\(\mathrm{grad}f(x,y)\)的几何意义可以描述为在底部平面上的矢量投影。每个点的梯度是一个矢量,其长度代表了此点的变化速度,而方向表示了其函数增长速率最快的方向。通过梯度图可以很清楚地看到,在矢量长的地方,函数增长速度就快,而其方向代表了增长最快的方向,梯度图如图1所示。 现在回到损失\(\ell\)的概念,\(\ell\)也是一种函数(例如平方差损失函数),因此要求\(\ell\)的最小值,实际上只需要沿着\(\ell\)梯度的反方向寻找即可,这就是梯度下降的概念。其公式表示为: \(\mathrm{grad}=\frac{\partial\ell}{\partial\boldsymbol{\omega}_{t-1}}\) \(\omega_t=\omega_{t\cdot1}-\eta\times\mathrm{grad}\)

优化算法与优化器 Read More »

Attention进阶史(MHA, MQA, GQA, MLA)

在深度学习领域,注意力机制(Attention Mechanism)自诞生以来便成为推动自然语言处理和计算机视觉等任务发展的核心动力。从最初的多头注意力(MHA)到如今的高效变体,如多查询注意力(MQA)、分组查询注意力(GQA)和多层注意力(MLA),注意力机制不断演进,旨在解决计算效率、内存占用和模型性能之间的平衡问题。与此同时,KV Cache等技术的引入进一步优化了推理阶段的效率,使得大规模模型在实际应用中的部署成为可能。本文将带您回顾注意力机制的进阶史,深入探讨这些技术的设计思想、优势及其对深度学习领域的深远影响。 1. Transformer Transformer是典型的编码器-解码器模型,该模型主要由两个块组成,如下图所示 Transformer算法之所以基于编码器-解码器框架,是因为该模型最开始是进行翻译或QA问题的,此时编码器负责接受问题,提取问题中的语言与意图给到解码器,解码器在对应生成相关答案。实际上,不管是编码器还是解码器都可以独立或联合使用,具体取决于任务,以文本信息为例: (1)仅使用编码器的模型:适用于需要理解输入的任务,例如句子情感取向分类和命名实体识别等。 (2)仅使用解码器的模型:适用于文本生成等生成任务。 (3)使用编码器-解码器的模型:适用于需要输入的生成任务,例如语言翻译或摘要提取等任务。 1.1 MHA: 多头自注意力机制(Multi-heads Self-Attention) Transformer模型中最关键部分就是自注意力(Self-Attention)机制,正如 Transformer 的论文的标题是“Attention Is All You

Attention进阶史(MHA, MQA, GQA, MLA) Read More »

Scroll to Top