Skip to content

经典论文

「经典」的标准:提出今天仍在被直接引用/继承的关键机制,且论文本身值得重读。本页按主题分组精读,每篇结构遵循 论文笔记模板,阅读方法与入库流程见 文献追踪方法

  • 深度学习革命:ResNet(2015)→ Attention Is All You Need(2017)→ BERT(2018)——覆盖「让网络更深 → 换掉循环 → 预训练范式」三条主线;
  • 大数据系统:GFS(2003)→ MapReduce(2004)——覆盖「可靠存储 → 编程模型」,是现代数据栈(Spark/HDFS/Hadoop/现代 OLAP)的源头。

Deep Residual Learning for Image Recognition(ResNet)

一句话贡献:用跨层恒等短路(identity shortcut)把梯度通路缩短,首次让上百层网络稳定训练,ILSVRC 2015 夺冠且 top-5 错误率 3.57% 首次低于人类(约 5.1%)。

信息:Kaiming He et al. · arXiv 2015-12 / CVPR 2016(最佳论文)· 论文

背景与问题

  • 卷积网络的趋势是越深越强(VGG 靠 16-19 层取胜),直觉是深度带来更强的特征抽象;
  • 但实验出现退化(degradation):56 层网络的训练错误率反而高于 20 层——这不是过拟合,而是优化困难(深网络难以收敛到足够优的解);
  • 此时的主流手段是更好的初始化/归一化(如 BN 已出现),都不能根治「网络越深越难学」。

方法

  • 思想:若让网络学习「残差」而非「完整映射」:设期望映射为 H(x),堆叠层只学 F(x) = H(x) − x,再加一条恒等短路 x,输出 F(x) + x;
  • 直觉:学习「和恒等映射的差」容易得多——当最佳映射接近恒等时,F(x) 趋向 0、能量小;更重要的是,反向传播时梯度可经短路无损直通浅层,缓解梯度消失;
  • 工程细节:快捷连接无额外参数、复杂度不增(加深到 152 层但计算量低于 VGG-19);瓶颈块(bottleneck:1×1→3×3→1×1)在深网络中降低计算量。

关键实验

实验设置结果
退化问题验证CIFAR-10,plain vs residual 20/56 层56 层 residual 收敛更好,plain 出现退化
ImageNet 主结果152 层残差网络top-5 错误率 4.49%(单模型)/ 3.57%(集成,ILSVRC 2015 第一)
深度扩展CIFAR-10 上千层1000+ 层仍可训练

局限与展望

  • 论文当时的残差块并非为「长程依赖建模」设计,却无意中成为后续序列模型的核心部件;
  • 作者自述:恒等映射之外的 shortcut 形式也可行;后续工作(PreAct-ResNet、DenseNet)探索了残差单元内部结构;
  • 深度学习的「残差+归一化+预激活」结构,后来被 Transformer 的每个 block 继承——这是它影响最深远的部分。

我的思考

  • 给梯度留一条直路是通用设计模式:从 ResNet 的短路,到 Transformer 的残差、扩散模型的预测噪声,再到优化器的动量——「提供一条不衰减的传递通道」反复出现;
  • 与本站关联:Attention Is All You Need 的残差结构、AI 方向深度学习 主题可挂载本笔记。

Attention Is All You Need(Transformer)

一句话贡献:彻底抛弃循环与卷积,只用自注意力(self-attention)堆叠出序列模型,并行度高、效果全面超过当时的 SOTA,成为此后一切大模型(GPT/BERT/T5)的骨架。

信息:Ashish Vaswani et al. · arXiv 2017-06 / NeurIPS 2017 · 论文

背景与问题

  • 序列建模长期由 RNN(LSTM/GRU)主导:逐时间步递推,t 步必须等 t−1 步算完,无法并行,长序列还有梯度传播困难;
  • 注意力机制(attention)此前只作为 RNN 的附属增强(Bahdanau 2015),从未独立承担主干;
  • 本文问题:能不能不要递推,用全对全的注意力一步建模任意位置的关系?

方法

  • 缩放点积注意力:对 Q/K/V 计算 softmax(QKᵀ/√d)V——QKᵀ 刻画「两位置的相关强度」,除以 √d 防止点积随维度增长而软饱和;softmax 得到权重后再加权 V;
  • 多头注意力:把 d 维拆成 h 个头分别计算再拼接,让不同头关注不同关系类型(语法、指代、长程语义);
  • 位置编码:注意力本身置换不变,必须注入位置信息(正弦波编码,后演进为可学习/旋转位置编码 RoPE);
  • 结构:编码器 6 层(每层 = 多头注意力 + 前馈 + 残差与 LayerNorm),解码器另加掩码注意力,使位置 i 只能看已生成的 i 之前的 token(teacher forcing 训练)。

关键实验

实验设置结果
WMT2014 EN-DEbase/largeBLEU 27.3 / 28.4(当时 SOTA,集成 28.4→41.8 在后续变体)
训练成本8×P100 GPU3.5 天,远低于同期需数周 SOTA 模型

局限与展望

  • 自注意力复杂度 O(n²·d):长序列的内存与时间开销是硬伤(促生 FlashAttention、稀疏注意力、线性注意力等);
  • 当时未做生成式预训练——GPT(2018)把 decoder 预训练化、BERT(2018)把 encoder 双向化,才引爆大模型时代;
  • 论文结论「attention alone suffices」后来被证明对 CV、语音、蛋白质等领域同样成立。

我的思考

  • 「用点积相似度做全局关系建模,再用归一化加权聚合」= 可微的软检索,与记忆、向量检索(见 RAG)同构;
  • 关注后续论文流:BERTLoRA 都站在它的肩膀上。

BERT:Pre-training of Deep Bidirectional Transformers

一句话贡献:用「掩码语言模型 + 双向 Transformer」做大规模预训练,再对下游任务轻量微调,把 NLP 迁移学习推到当时顶点(GLUE 80.5、SQuAD 2.0 F1 83.1)。

信息:Jacob Devlin et al. · arXiv 2018-10 / NAACL 2019(最佳论文)· 论文

背景与问题

  • 预训练词向量(Word2Vec/GloVe)不感知上下文;ELMo/GPT 引入上下文表示,但 ELMo 是浅层拼接、GPT 用从左到右单向自回归——「看右边」的能力缺失;
  • 本文问题:能否训练一个双向上下文的深度预训练模型,让下游只需换头微调?

方法

  • 掩码语言模型(MLM):随机掩掉 15% token,让模型用左右两侧上下文预测被掩词——双向信息由此进入;
  • 下一句预测(NSP):二分类判断两句是否相邻,让模型学到句间关系(后续 RoBERTa 证明其增益存疑并移除);
  • 结构:Transformer encoder(12 层 110M / 24 层 340M),输入 = token 嵌入 + 段嵌入 + 位置嵌入,以 [CLS] 开头;
  • 范式:大规模无标注预训练(BooksCorpus + Wikipedia)→ 下游任务微调(分类用 [CLS] 向量,问答用 span 预测头)。

关键实验

实验设置结果
GLUE11 项任务80.5(此前 SOTA 72.8,一举提升约 7.7 分)
SQuAD v1.1 / v2.0抽取式问答F1 93.2 / 83.1,均超人类基线

局限与展望

  • 预训练与微调的掩码不一致、MLM 训练效率低(ELECTRA 用判别式替代);生成任务弱(decoder 型 GPT 接棒);
  • 需要超大数据与算力,催生蒸馏/压缩研究;
  • 直接后继:RoBERTa、ALBERT、DistilBERT、T5(把 NLU/NLG 统一成 text-to-text)。

我的思考

  • BERT 确立「预训练 + 微调」是少标注场景的普惠范式,今天的 Embedding/多模态模型仍沿用「两阶段」;
  • 双向 vs 单向的选择是理解 encoder 型(NLU)/decoder 型(NLG) 分野的钥匙,也解释了为何后期「纯 decoder + 指令微调」能统一二者。

The Google File System(GFS)

一句话贡献:面向大规模数据密集型应用的分布式文件系统:以「组件故障为常态」为前提,用 64MB 大块、三副本与主控式元数据管理,在廉价机器上支撑 PB 级吞吐。

信息:Sanjay Ghemawat et al. · SOSP 2003 · 论文

背景与问题

  • 单机文件系统无法扩展;网络文件系统(NFS)以单文件服务器为中心,规模与容错受限;
  • Google 的抓取/索引/排序作业动辄 TB 级,需要吞吐优先、追加为主的访问模型;
  • 设计前提与学术界不同:故障是常态(廉价硬件)、文件巨大且少、以追加写与顺序读为主。

方法

  • 架构:单 master 持元数据(命名空间/副本位置)+ 多 chunkserver 存数据;客户端先问 master、后直连 chunkserver,避免 master 成瓶颈;
  • 数据:文件切成 64MB chunk,每块默认 3 副本分布于不同机器/机架;写时由主副本(lease)定序、数据流水线式传输;
  • 追加语义:record append 保证「至少一次写入、并发安全」——契合日志类应用(分布式系统的「只追加日志」DNA 在此成型);
  • 容错:心跳探活、副本缺失即补;客户端/主控定期校验和(checksum)发现静默损坏;快照与版本号支持一致性检查。

关键实验

实验设置结果
读吞吐数百客户端聚合读带宽达到 GB/s 级
写/追加数百客户端并发追加与副本数近似线性扩展,瓶颈在应用端而非系统

局限与展望

  • 单 master:命名空间小、单点风险,需 master 故障切换机制;后续 Google 以 Colossus(分片元数据)回应;
  • 强一致模型有限(支持常规文件操作强一致,但并发追加是「至少一次」语义);
  • 直接影响 HDFS 与整个 Hadoop 生态;「数据就近计算」思想被 Spark、Flink 继承。

我的思考

  • GFS 是一份被规模逼出来的设计:每一项取舍(大块、追加优先、容忍弱一致)都能在今天的对象存储/日志系统中找到回声;
  • 与 MapReduce(见下)是同一批论文中的「存储层 + 计算模型」,合读才完整。

MapReduce:Simplified Data Processing on Large Clusters

一句话贡献:把大规模分布式计算收敛为 map 与 reduce 两个函数,运行时自动并行、容错与负载均衡——程序员写业务,系统管机器。

信息:Jeffrey Dean & Sanjay Ghemawat · OSDI 2004 · 论文

背景与问题

  • 大批简单任务(网页抓取统计、倒排索引、日志分析)本可并行,但分布式编程要处理分区、调度、故障、通信——复杂度劝退;
  • 本文问题:能不能定义一种足够表达这些任务、又足够简单的抽象,把并行细节全部交给系统?

方法

  • 模型:输入为键值对列表;map(k, v) → list(k', v') 产出中间键值;系统按 key 分组(partition + shuffle);reduce(k', list(v')) → list(v'') 归并输出;
  • 运行时:master 调度 map/reduce 到 worker;中间结果落本地盘(避免网络);master 记录任务状态以做故障处理;
  • 容错:worker 失效则其任务在其他节点重执行;对「慢速拖后腿」的节点启动备份任务(straggler mitigation),大幅缩短尾延迟;
  • 经典用例:WordCount(计数)、倒排索引、分布式 grep、排序(利用分区保证全局有序)。

关键实验

实验设置结果
单词计数1TB 数据,数百台机器约几十秒级完成,吞吐随集群线性扩展
容错/备份注入节点故障备份任务显著降低 straggler 造成的尾延迟

局限与展望

  • 有状态、迭代式、图算法表达不便:中间结果每轮落盘,迭代收敛慢——直接催生 Pregel(图)、Spark(RDD 内存迭代);
  • 编程自由度低,复杂业务写成「map 套 map」很痛苦(催生 SQL-on-Hadoop:Hive、以及更晚的 Dataflow/Beam 统一批流模型);
  • 思想遗产远超实现本身:如今 Spark SQL、Flink 的算子模型仍可视为「泛化 MapReduce」。

我的思考

  • MapReduce 的意义在于把「并行细节」从业务里抠掉:今天 Serverless、向量化的分治框架,仍是同一个「声明式 + 系统代劳」理念;
  • 阅读建议与 GFS 对照:文件系统解决「数据放哪、怎么不丢」,MapReduce 解决「计算怎么组织、失败怎么办」。

阅读路径建议

  • 第一次接触深度学习:先读 ResNet 理解「训练深网络的核心矛盾」,再读 Transformer 理解「现代架构的全局关系建模」;
  • 想进入大模型时代:在 Transformer 之后紧跟 LLM 前沿(InstructGPT/LoRA/RAG/ReAct)补全「预训练 → 对齐 → 应用」链条;
  • 系统方向:按 GFS → MapReduce 顺序读,配套动手:用本地 Hadoop/Spark 跑 WordCount,或读 HDFS 源码注释对照设计取舍。

基于 VitePress 构建 · 内容以知识共享方式沉淀