1. 从"学术速递"这个栏目说起:为什么值得单独做一期拆解
做机器学习方向的朋友大概都有个共同的痛点:这个领域更新太快了。快到什么程度?你上周刚把某篇图神经网络的论文读完,这周就冒出来三篇改进版本,而且每一篇都声称在节点分类任务上刷了新高。更麻烦的是,这些论文散落在不同的渠道里,有的在预印本平台上,有的在会议论文集里,有的干脆只在某个实验室的博客上挂了个PDF链接。你如果没有一个稳定的信息获取节奏,很容易就陷入"追着论文跑但永远追不上"的状态。
"机器学习学术速递"这个栏目,本质上就是在解决这个问题。它做的事情说起来简单:把最近一段时间内值得关注的机器学习论文筛选出来,用简练的语言把核心贡献、方法思路和实验结果讲清楚,让读者在几分钟内就能判断"这篇跟我有没有关系、值不值得深读"。但真正做过内容筛选的人都知道,这件事的难度远不止"把论文摘要翻译一遍"那么简单。
我自己做这个栏目有一段时间了,从最开始每期只推三四篇、阅读量惨淡,到后来逐渐找到节奏、形成固定的读者群,中间踩过的坑不少。这一期(5.21)的关键词集中在图神经网络、ADMM、节点分类和图卷积神经网络这几个方向上,正好是当前图学习领域比较活跃的几个分支。我打算借这一期的内容,把"学术速递"这个栏目从选题、筛选、精读到成文的完整流程拆开来讲,同时把这一期涉及的几篇代表性工作做一次深度解读。
如果你也在做类似的技术内容整理,或者你只是想找一个高效跟踪机器学习前沿的方法,这篇内容应该能给你一些可以直接用的东西。我不会只讲"应该怎么做",而是把我实际操作的步骤、判断标准、以及那些只有做过才知道的细节都摊开来说。
2. 学术速递的选题逻辑:不是所有新论文都值得推
2.1 什么样的论文能进"速递"名单
做学术速递最核心的判断力,不是"这篇论文好不好",而是"这篇论文对读者有没有用"。这两个标准看起来接近,实际上差别很大。一篇理论证明极其漂亮的论文,如果它的方法需要特殊的硬件条件或者数据集,对大多数读者来说就是"知道有这么回事"而已,不值得花篇幅去展开。反过来,一篇方法不算新颖但工程实现特别扎实的论文,可能对正在做落地的人更有价值。
我筛选论文的时候会过一遍下面这个清单,任何一条不满足都会降级处理:
- 核心问题是否清晰:论文要解决的是什么问题,这个问题在当前领域里是不是公认的痛点。比如图神经网络里的过平滑问题、异构图上的节点分类精度问题,这些都是大家公认的难点,相关论文天然就有关注度。
- 方法是否有可复现的细节:有些论文只给了一个框架图,关键的超参数、数据预处理步骤、训练技巧全部略过,这种论文即使结果好看,读者也没法用。我一般会优先选择那些在附录里给了完整实验配置的工作。
- 实验对比是否扎实:至少要在两个以上标准数据集上和主流基线方法做对比,而且不能只挑对自己有利的指标报。如果一篇论文只在自家构造的数据集上跑了个高分,我基本不会推。
- 是否有开源代码:这一点在实际操作中权重很高。有代码的论文,读者可以自己跑一遍验证,可信度完全不一样。没有代码的论文,我会在速递里明确标注"暂未开源",让读者心里有数。
这一期里关于图卷积神经网络的几篇工作,之所以能入选,就是因为它们在节点分类任务上不仅报了标准数据集的结果,还附带了消融实验和复杂度分析,读者能清楚地看到每个模块到底贡献了多少。
2.2 从热词到选题:怎么判断一个方向正在升温
做速递不能只看单篇论文,还要看整个方向的温度变化。我判断一个方向是否值得重点关注,主要看三个信号:
第一个信号是预印本平台上的投稿密度。如果某个关键词在两周内出现了五六篇质量不错的工作,说明这个方向正在被集中攻关,大概率是有新的问题被提出来了,或者有新的工具让之前做不了的事情变得可行了。图神经网络和ADMM的结合就是这样一个例子——ADMM本身是优化领域的经典方法,但把它用到图神经网络的训练和推理上,是最近才密集出现的工作。
第二个信号是顶会的工作坊和教程。如果某个方向在最近的会议上有了专门的tutorial或者workshop,说明社区已经认可了它的重要性。这个信号比单篇论文更可靠,因为它是集体判断的结果。
第三个信号是工业界的跟进速度。当某个方法开始出现在大厂的技术博客或者开源框架的更新日志里,说明它已经过了纯学术阶段,开始进入工程验证了。图卷积神经网络在推荐系统和风控场景里的应用就是这条路径。
把这三个信号结合起来,就能大致判断出一个方向是"刚冒头"、"正在爆发"还是"已经成熟"。速递的选题应该重点覆盖"正在爆发"阶段的方向,因为这时候读者最需要有人帮他们梳理清楚脉络。
2.3 这一期为什么把图神经网络放在首位
5.21这一期,我把图神经网络相关的工作放在了最前面,原因很直接:这个方向目前同时满足上面说的三个信号。预印本平台上关于图卷积神经网络和节点分类的投稿量在过去一个月里明显上升;最近的几个机器学习会议上都有图学习相关的工作坊;工业界这边,几个主流的图计算框架也在密集更新。
更重要的是,图神经网络这个方向有一个特点:它的入门门槛不算特别高,但深入之后会发现坑特别多。很多刚入门的朋友看完几篇综述就觉得"我懂了",结果一上手做实验就发现,同样的模型在不同数据集上的表现差异巨大,调参的空间比想象中大得多。这种"看起来简单、做起来复杂"的方向,恰恰是速递最能发挥价值的地方——帮读者把那些藏在细节里的关键点拎出来。
3. 图卷积神经网络在节点分类任务上的核心机制拆解
3.1 从"邻居聚合"这个直觉说起
图卷积神经网络的核心思想,用一句话概括就是:每个节点的表示,应该由它自己和它的邻居共同决定。这个直觉其实很朴素。想象你在一个社交网络里,要判断一个人的兴趣标签,你不仅会看他自己发的内容,还会看他经常互动的朋友发的内容。图卷积做的就是类似的事情:通过聚合邻居节点的特征来更新当前节点的表示。
但"聚合"这两个字背后有很多选择。最简单的做法是把所有邻居的特征取平均,这就是最早的图卷积形式。后来大家发现,取平均会丢失结构信息,于是有了加权聚合、注意力聚合、以及各种考虑边类型的聚合方式。这一期里涉及节点分类的几篇工作,基本上都在这个"怎么聚合更合理"的问题上做文章。
我实际跑实验的时候发现一个很容易被忽略的点:聚合方式的选择和图的稀疏程度高度相关。在稠密图上,平均聚合和注意力聚合的差异可能只有一两个百分点;但在稀疏图上,这个差异可能拉到五个点以上。原因是稀疏图上每个节点的邻居数量少,聚合时每个邻居的权重就变得很关键,注意力机制能发挥的空间更大。所以如果你在做一个稀疏图的节点分类任务,不要直接套用稠密图上的经验,聚合函数值得多花时间调。
3.2 过平滑问题:为什么层数一多效果反而变差
图卷积神经网络有一个非常反直觉的现象:层数增加,效果先升后降。两三层的时候节点分类精度最高,再往上加层,精度反而掉得厉害。这个现象叫过平滑(over-smoothing),本质原因是每一层卷积都在做邻居聚合,层数多了之后,所有节点的表示会趋同,最后变得几乎一样,分类器自然就分不开了。
这个问题在实际操作中非常致命。因为按照深度学习的常规思路,模型越深表达能力越强,很多人会习惯性地把层数设大,结果训练出来的模型效果还不如浅层版本。我自己最开始做图卷积实验的时候就踩过这个坑,设了八层,训练loss降得很漂亮,但验证集上的节点分类准确率比两层的时候低了将近十个百分点。
解决过平滑的思路主要有几类:一是残差连接,把浅层的表示直接传到深层,保留原始信息;二是跳跃连接,让每一层的输出都参与最终表示;三是自适应层数,让模型自己决定每个节点需要几层聚合。这一期里有一篇工作提出了一种基于ADMM的层间正则化方法,思路是在优化过程中显式地约束不同层表示之间的差异,防止它们过快趋同。这个角度比较新颖,后面我会展开讲。
3.3 节点分类的评价体系:准确率之外还要看什么
做节点分类实验,很多人只报一个准确率就完事了。但实际做研究或者做落地的时候,只看准确率是不够的。我一般会关注下面这几个维度:
| 评价维度 | 为什么重要 | 常见陷阱 |
|---|---|---|
| 整体准确率 | 最直观的指标 | 类别不平衡时会被多数类主导 |
| 宏平均F1 | 衡量少数类的表现 | 计算方式不同论文可能不一致 |
| 每类准确率 | 看模型是否偏科 | 有些论文只报最好的几类 |
| 训练时间 | 影响实际可用性 | 不同硬件上的时间不可直接比 |
| 参数量 | 影响部署成本 | 大模型在小数据集上容易过拟合 |
| 对图扰动的鲁棒性 | 实际图数据常有噪声 | 很多论文不做这个测试 |
特别是宏平均F1这个指标,在节点分类任务里比整体准确率更能反映模型的真实能力。因为真实世界的图数据几乎都是类别不平衡的,如果只看整体准确率,一个把所有节点都预测成多数类的模型也能拿到不错的分,但这显然没有意义。我在筛选论文的时候,会特别留意作者有没有报宏平均F1,如果没有报,这篇论文的可信度就要打个折扣。
还有一个容易被忽略的点是数据集划分方式。节点分类的标准划分是每类取固定数量的节点做训练,剩下的做验证和测试。但不同论文用的划分比例可能不同,有的用20%训练,有的用60%训练,结果自然不可直接比较。我在速递里会尽量标注每篇论文用的划分方式,方便读者做横向对比。
4. ADMM与图神经网络的结合:这一期的技术亮点
4.1 ADMM到底是什么,为什么突然和图学习扯上关系
ADMM的全称是交替方向乘子法(Alternating Direction Method of Multipliers),是优化领域的一个经典算法。它的核心思想是把一个复杂的大优化问题拆成几个简单的子问题,然后交替求解。这个思路听起来很朴素,但威力在于:很多在图神经网络上直接优化很困难的目标函数,拆开之后每个子问题都有闭式解或者可以用简单方法高效求解。
ADMM和图神经网络的结合,主要出现在两个场景里。第一个场景是分布式训练。当图特别大的时候,整张图没法放进单台机器的内存,需要把图切分成子图分布到不同节点上训练。ADMM天然适合这种场景,因为它本来就是把问题拆开交替求解的框架。第二个场景是带约束的优化。图神经网络训练时经常需要加一些约束,比如表示向量的范数约束、层间差异约束等,这些约束直接加到损失函数里用梯度下降处理起来很别扭,但用ADMM可以很自然地处理。
这一期里有一篇工作就是用ADMM来做图卷积网络的层间正则化。具体做法是:把每一层的表示作为一个变量,在目标函数里加入相邻层表示之间的差异惩罚项,然后用ADMM交替更新每一层的参数和表示。这样做的好处是,层与层之间的更新可以并行进行,而且正则化项的强度可以自适应调整,不需要手动设一个固定的权重。
4.2 ADMM求解图学习问题的具体步骤
我把这类方法的通用流程整理了一下,如果你要复现或者改进,可以按这个框架来:
第一步:问题形式化。把图神经网络的训练目标写成带约束的优化形式。假设网络有L层,第l层的表示为H_l,参数为W_l,那么原始目标是最小化损失函数L(H_L, Y)加上正则项。引入ADMM之后,需要引入辅助变量Z_l,把问题改写成:
minimize L(H_L, Y) + sum_l g(Z_l) subject to H_l = Z_l, for l = 1, ..., L这里的g(Z_l)就是层间正则项,通常取相邻层差异的范数。
第二步:写增广拉格朗日函数。引入对偶变量U_l,增广拉格朗日函数为:
L_rho = L(H_L, Y) + sum_l g(Z_l) + sum_l <U_l, H_l - Z_l> + (rho/2) * sum_l ||H_l - Z_l||^2其中rho是惩罚参数,控制约束违反的惩罚力度。
第三步:交替更新。ADMM的核心就是下面三个更新步骤循环执行:
- 更新H:固定Z和U,对H做梯度下降。这一步就是常规的神经网络训练,只是损失函数里多了和Z、U相关的项。
- 更新Z:固定H和U,对Z求解。这一步通常有闭式解,因为g(Z)一般取简单的范数形式。
- 更新U:对偶变量更新,U_l = U_l + rho * (H_l - Z_l)。
第四步:收敛判断。检查原始残差||H_l - Z_l||和对偶残差||Z_l - Z_l_old||是否小于阈值,满足则停止。
这个流程看起来步骤不少,但实际实现的时候,更新H那一步可以直接复用现有的图神经网络训练代码,只需要在损失函数里加一项。更新Z和U都是逐元素的简单运算,计算开销很小。所以整体增加的复杂度是可控的。
4.3 实操中ADMM的调参经验
ADMM有一个关键参数rho,它控制约束的惩罚力度。rho太大,约束满足得好但收敛慢;rho太小,收敛快但最终解可能不满足约束。我实际调的时候发现,rho的取值和图的规模有关系:小图上rho取0.1到1之间比较合适,大图上可以取到1到10。如果拿不准,可以先从一个中间值开始,然后根据残差的变化趋势调整。
还有一个实用技巧是自适应rho。标准的ADMM里rho是固定的,但实际用的时候可以根据残差动态调整:如果原始残差比对偶残差大很多,说明约束违反得厉害,应该增大rho;反过来则减小rho。这个技巧在原始ADMM论文里就有提到,但在图学习的应用里很多人会忽略。我自己试下来,自适应rho能让收敛速度提升30%到50%,特别是在图结构比较复杂的时候效果更明显。
另外要注意的是,ADMM的收敛性在非凸问题上没有理论保证。图神经网络的训练本身是非凸的,所以ADMM在这里更多是一种启发式的优化策略,不能指望它一定收敛到全局最优。实际使用的时候,我一般会设一个最大迭代次数,然后取验证集上表现最好的那个checkpoint,而不是等到完全收敛。
5. 从论文到速递成文:我的信息压缩流程
5.1 读论文的顺序:不要从摘要开始
很多人读论文的习惯是从摘要开始,然后引言、方法、实验一路读下去。这个顺序在做精读的时候没问题,但在做速递这种需要快速判断的场景下效率很低。我的习惯是反过来的:
先看实验部分的表格。表格里能直接看到这篇论文在哪些数据集上做了实验、和哪些方法做了对比、结果差距有多大。如果表格里的对比方法都是三四年前的老方法,或者数据集只有一个,那这篇论文的优先级就可以降下来。如果表格里对比了最新的几个强基线,而且提升幅度明显,那才值得继续读。
然后看方法部分的框架图。框架图是作者对方法最精炼的概括,一张好的框架图能让你在三十秒内理解整个方法的流程。如果框架图画得含糊不清,要么是作者没想清楚,要么是方法本身太复杂,两种情况都会增加读者的理解成本。
最后才看摘要和引言。这时候你已经对论文有了基本判断,读摘要和引言主要是确认自己的理解是否正确,以及看看作者自己怎么定位这篇工作的贡献。
这个顺序能帮我在十五分钟内判断一篇论文值不值得推,比从头读到尾快得多。
5.2 速递文案的写法:把技术细节翻译成"人话"
速递的读者里,有做这个方向的 researcher,也有刚入门的学生,还有做工程落地的工程师。要让这三类人都能看懂,文案的写法就很关键。我的原则是:核心思想用大白话讲,关键细节用准确术语讲,实验结果用具体数字讲。
举个例子,如果一篇论文提出了一种新的注意力聚合方式,我不会一上来就写"我们提出了一种基于多头注意力的自适应聚合机制",而是先写"这篇论文的做法是让每个节点在聚合邻居信息时,根据邻居和自己的相似度分配不同的权重,而不是一视同仁地取平均"。先把直觉讲清楚,再补一句"具体实现上用了多头注意力,和Transformer里的做法类似",这样不同背景的读者都能找到自己的锚点。
实验结果的部分,我坚持报具体数字。不写"显著提升",而是写"在Cora数据集上比GCN提升了2.3个百分点,在Pubmed上提升了1.8个百分点"。数字是最诚实的,读者可以自己判断这个提升幅度对自己有没有意义。
5.3 每篇论文的推荐理由怎么写才有信息量
速递里每篇论文后面我都会跟一句推荐理由。这句话看起来简单,实际上很考验判断力。我见过很多速递的推荐理由写的是"本文提出了一种新颖的方法,实验效果良好,值得一读",这种话等于没说。
我的推荐理由一般会包含三个要素:这篇论文解决的具体问题是什么、它的方法相比现有方案的关键差异在哪里、什么样的读者最应该看这篇。比如这一期里关于ADMM的那篇工作,我的推荐理由是:"如果你正在做图神经网络的深层训练,并且遇到过平滑问题,这篇论文提供了一种不同于残差连接的解决思路。它的ADMM正则化框架可以直接加在现有模型上,不需要改动网络结构,适合想快速验证想法的人。"
这样的推荐理由,读者看完就知道这篇论文跟自己有没有关系,不需要点进去看全文才能判断。
6. 这一期几篇代表性工作的快速解读
6.1 基于ADMM的深层图卷积网络训练
这篇工作的核心贡献是把ADMM用到了深层图卷积网络的训练上,目标是在增加层数的同时抑制过平滑。具体做法是在每一层的输出上加一个正则项,惩罚相邻层表示之间的差异,然后用ADMM交替更新网络参数和层表示。
实验部分,作者在Cora、Citeseer和Pubmed三个标准数据集上做了节点分类实验,层数从2层一直加到16层。结果显示,不加ADMM正则的时候,层数超过4层之后精度就开始明显下降;加了正则之后,8层以内精度基本保持稳定,甚至在Pubmed上16层的时候还有微弱提升。这个结果说明ADMM正则确实起到了抑制过平滑的作用。
不过要注意的是,这篇论文的训练时间比标准GCN长了大约40%,因为ADMM需要额外的交替更新步骤。如果你的场景对训练时间敏感,这个开销需要纳入考虑。
6.2 面向异构图节点分类的注意力聚合改进
第二篇值得关注的工作是针对异构图(节点类型和边类型都不止一种的图)的节点分类。异构图上的节点分类比同构图难很多,因为不同类型的邻居对当前节点的影响方式不一样,不能简单地用同一个聚合函数处理。
这篇论文提出了一种类型感知的注意力机制,在为每个邻居计算注意力权重的时候,不仅考虑邻居的特征相似度,还考虑边的类型。具体实现上,它为每种边类型维护一组独立的注意力参数,然后在聚合时按边类型分组计算再加权求和。
在ACM和DBLP两个异构图数据集上,这个方法比标准的HAN(异构图注意力网络)分别提升了1.5和2.1个百分点。提升幅度不算特别大,但考虑到异构图任务的难度,这个改进是有实际意义的。论文附带了代码,我跑过一遍,复现结果和论文报告的基本一致。
6.3 图卷积网络的轻量化:减少参数量而不掉精度
第三篇工作关注的是图卷积网络的部署效率问题。标准的图卷积网络虽然比传统深度学习模型小很多,但在一些边缘设备上部署时,参数量和计算量仍然是瓶颈。
这篇论文的思路是低秩分解加稀疏化。它把图卷积层的权重矩阵分解成两个低秩矩阵的乘积,然后对其中一个矩阵施加稀疏约束。这样参数量可以减少60%到70%,而节点分类精度只下降0.5个百分点以内。在Cora和Citeseer上,压缩后的模型精度甚至和原模型持平。
这个工作对做落地的人比较有价值。如果你需要在资源受限的环境里跑图神经网络,这种轻量化思路可以直接借鉴。论文里还给了不同压缩率下的精度曲线,方便你根据自己的精度要求选择合适的压缩比例。
7. 做学术速递这段时间踩过的坑和攒下的经验
7.1 不要追求"全覆盖",宁可少推几篇也要推准
我最开始做速递的时候,总想着把一周内所有相关的论文都覆盖到,结果每期推十几篇,每篇只有两三句话,读者看完什么印象都没留下。后来我改成每期只推三到五篇,但每篇都给出足够的信息量,阅读完成率和读者反馈都明显好转。
这个转变背后的逻辑是:速递的价值不在于"信息全",而在于"筛选准"。读者关注你,是因为你帮他们省去了筛选的时间,而不是因为你把所有的信息都堆给他们。少推几篇但每篇都推到位,比推一堆但每篇都浅尝辄止要好得多。
7.2 论文里的"提升"要打折扣看
论文里报的实验结果,和实际复现出来的结果,经常有差距。这个差距可能来自数据划分方式的不同、超参数调优的程度不同、甚至随机种子的选择。我现在的做法是:论文里报的提升幅度,如果小于1个百分点,我会在速递里标注"提升幅度较小,需谨慎看待";如果大于3个百分点,我会尽量自己跑一遍验证,确认后再推荐。
还有一个细节是对比基线的选择。有些论文会故意选一些弱基线来对比,让自己的方法看起来提升很大。我在读实验部分的时候,会特别留意作者有没有和该数据集上当前最好的方法做对比。如果没有,这篇论文的实验说服力就要打折扣。
7.3 读者反馈是最好的选题指南
做了一段时间之后我发现,读者的反馈比任何选题工具都管用。哪篇论文的解读读者讨论得多,哪个方向的论文读者反复问"有没有更多",这些都是下一期选题的重要参考。我现在的做法是每期发出去之后,会花时间看读者的评论和私信,把高频出现的问题记下来,作为下一期的选题方向。
比如之前有读者问"图神经网络在小样本场景下怎么做节点分类",这个问题我一开始没太关注,但问的人多了之后,我专门做了一期小样本图学习的专题,反响很好。所以做速递不能只顾着输出,还要留一只耳朵听读者在关心什么。
7.4 保持自己的判断,不要被论文的"包装"带偏
学术论文的写作本身就有一定的"包装"成分,作者会尽量把自己的工作说得重要、新颖。做速递的人要有能力透过这层包装看到工作的本质。我判断一篇论文是否真正有价值,主要看两点:一是它解决的问题是不是真实存在的痛点,二是它的方法是不是有可推广性。如果一篇论文只是在一个很窄的设定下有效,换一个数据集或者换一个任务就不行了,那它的价值就有限,即使论文里写得再漂亮,我也不会重点推荐。
这个判断力需要时间积累,但有一个简单的训练方法:每次读完一篇论文,试着用一句话说出它的核心贡献,然后问自己"这句话如果去掉所有修饰词,还剩下什么"。如果剩下的东西很少,说明这篇论文的实质贡献可能没有看起来那么大。
8. 关于图神经网络节点分类,几个常被问到的问题
8.1 入门图神经网络应该从哪篇论文开始读
如果你是完全新手,我建议从GCN那篇原始论文开始,就是Kipf和Welling在2017年发的那篇。它的方法足够简单,公式也不复杂,而且后续的大部分工作都是在它的基础上做改进。读完GCN之后,可以接着读GraphSAGE,它解决了GCN无法处理新节点的问题(inductive learning)。这两篇读完,你对图神经网络的基本框架就有了概念,再去看其他论文会顺畅很多。
不要一上来就去读那些方法特别复杂的论文,容易打击信心。图神经网络这个领域,核心思想其实就那么几个,把基础打牢之后,后面的各种变体都是在这个基础上做组合和调整。
8.2 节点分类任务中,特征工程还重要吗
重要,而且比很多人想象的更重要。图神经网络虽然能自动学习节点表示,但输入特征的质量仍然直接影响最终效果。我做过对比实验,在Cora数据集上,用原始词袋特征和用经过降维处理的特征,节点分类精度差了将近三个百分点。
实际操作中,我建议在做节点分类之前,先花时间检查一下输入特征:有没有缺失值、有没有量纲差异特别大的维度、有没有高度相关的冗余特征。这些基础工作做好了,后面模型训练会顺利很多。不要指望图神经网络能自动帮你解决所有特征问题。
8.3 小图和大图上的调参策略有什么不同
小图(几千个节点以内)和大图(百万级节点)的调参策略差别很大。小图上过拟合是主要风险,所以正则化要强一些,dropout率可以设到0.5甚至更高,权重衰减也要加上。大图上欠拟合和训练效率是主要问题,正则化可以弱一些,重点放在优化器的选择和学习率的调整上。
另外,大图上通常需要用邻居采样来降低计算量,采样数量的选择很关键。采样太少,邻居信息不完整,效果差;采样太多,计算量下不来。我的经验是先从每层采样10到15个邻居开始试,根据效果和训练时间做调整。
8.4 怎么判断一个图神经网络模型是否过拟合了
最直接的信号是训练集和验证集上的表现差距。如果训练集上的节点分类准确率到了95%以上,但验证集上只有70%多,那基本可以确定是过拟合了。这时候可以采取的措施包括:增加dropout、加权重衰减、减少模型层数、增加训练数据(如果可能的话)。
还有一个不太直观的信号是训练loss的下降曲线。如果训练loss一直在降但验证loss很早就开始上升,这也是过拟合的典型表现。我一般会在训练脚本里加上early stopping,验证loss连续若干轮不下降就停止训练,取验证loss最低的那个checkpoint。
9. 把速递做成一个可持续的栏目:一些实际建议
做学术速递这件事,最难的不是某一期的内容质量,而是持续做下去。我见过很多人做了一两期就停了,原因无非是太耗时间、看不到反馈、或者觉得自己的解读不够专业。如果你打算长期做这件事,我有几个实际建议。
第一,建立自己的论文池。不要等到要写速递的时候才开始找论文,平时看到有意思的工作就随手记下来,标注一下核心贡献和推荐理由。这样到了要写的时候,你只需要从池子里挑几篇出来展开就行,效率会高很多。我用的是一个简单的表格,字段包括论文标题、链接、核心方法、实验结果、推荐指数,维护起来不费事。
第二,固定发布节奏。不要今天发一期明天发一期,然后隔两周没动静。读者的阅读习惯是需要培养的,固定的节奏能让读者形成预期。我目前是每周一期,每期三到五篇,这个节奏对我来说压力不大,对读者来说也刚好能消化。
第三,接受自己的解读可能不完美。你不是论文作者,不可能对每个细节都理解得完全准确。重要的是把核心思想传达清楚,细节上有偏差读者会指出来,这也是学习的过程。我早期有几期的解读后来被读者纠正过,虽然当时有点尴尬,但确实帮我加深了对那些方法的理解。
第四,把速递当成自己的学习工具。做速递最大的受益者其实是自己。为了把一篇论文讲清楚,你必须真正理解它,这个"以教代学"的过程比单纯读论文的效果好得多。我做了这段时间之后,对图神经网络的理解比之前深了不少,很多之前模糊的概念在写解读的过程中被逼着搞清楚了。
这一期关于图神经网络、ADMM和节点分类的内容就整理到这里。如果你在做类似的方向,或者也在做技术内容的整理和分享,欢迎交流。下一篇我打算聚焦图神经网络在推荐系统里的应用,那个方向的工程细节更多,踩坑经验也更有参考价值。