{"notes":[{"id":"classic-cnns/highway-networks","category":"classic-cnns","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"Highway Networks","subtitle":"残差的前夜","author":"Z. Yuan","paperDate":"2015-05-03","publishedOn":"2025-11-03","world":"external/highway-networks","paperTitle":"Highway Networks","paperUrl":"https://arxiv.org/abs/1505.00387","bibliography":{"title":"Highway Networks","authors":["Rupesh Kumar Srivastava","Klaus Greff","Jürgen Schmidhuber"],"url":"https://arxiv.org/abs/1505.00387","pdfUrl":"https://arxiv.org/pdf/1505.00387v2","codeUrl":null,"preprint":{"id":"1505.00387","submittedOn":"2015-05-03","url":"https://arxiv.org/abs/1505.00387"},"publication":null,"citation":"@misc{classiccnnshighwaynetworks2015,\n  title = {{Highway Networks}},\n  author = {Rupesh Kumar Srivastava and Klaus Greff and Jürgen Schmidhuber},\n  year = {2015},\n  eprint = {1505.00387},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1505.00387}\n}\n","citationPath":"/content/papers/citations/classic-cnns/highway-networks.f7d3ef9547ef.bib"},"thumbnail":{"src":"/content/papers/assets/2cef37bd2a2388f57a76965431810cb86f976db701ba1647b75c81c9a59ac779.png","width":1344,"height":360},"locale":"zh-hans","path":"/content/papers/zh-hans/classic-cnns/highway-networks.5d61f447ab06.md","headings":[{"id":"定义问题","text":"定义问题","depth":2},{"id":"解决问题","text":"解决问题","depth":2},{"id":"加两道门","text":"加两道门","depth":3},{"id":"一开始先偏向直接通过","text":"一开始先偏向「直接通过」","depth":3},{"id":"讨论","text":"讨论","depth":2},{"id":"越深越好训练吗","text":"越深越好训练吗？","depth":3},{"id":"好训练那准确率呢","text":"好训练，那准确率呢？","depth":3},{"id":"门学到了什么","text":"门学到了什么？","depth":3},{"id":"结论","text":"结论","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/resnet","relation":"referenced","topic":""}]},{"id":"classic-cnns/resnet","category":"classic-cnns","legacyPath":"classic-cnns/1512-resnet","legacySlug":"1512-resnet","legacyPaths":[],"title":"ResNet","subtitle":"卷积网络 100 层","author":"Z. Yuan","paperDate":"2015-12-10","publishedOn":"2024-08-08","paperTitle":"Deep Residual Learning for Image Recognition","paperUrl":"https://arxiv.org/abs/1512.03385","bibliography":{"title":"Deep Residual Learning for Image Recognition","authors":["Kaiming He","Xiangyu Zhang","Shaoqing Ren","Jian Sun"],"url":"https://arxiv.org/abs/1512.03385","pdfUrl":"https://arxiv.org/pdf/1512.03385","codeUrl":null,"preprint":{"id":"1512.03385","submittedOn":"2015-12-10","url":"https://arxiv.org/abs/1512.03385"},"publication":{"venue":"CVPR","year":2016,"kind":"conference","url":"https://doi.org/10.1109/cvpr.2016.90"},"citation":"@misc{classiccnnsresnet2015,\n  title = {{Deep Residual Learning for Image Recognition}},\n  author = {Kaiming He and Xiangyu Zhang and Shaoqing Ren and Jian Sun},\n  year = {2015},\n  eprint = {1512.03385},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1512.03385}\n}\n","citationPath":"/content/papers/citations/classic-cnns/resnet.cf4014e8baae.bib"},"thumbnail":{"src":"/content/papers/assets/b8fe87fe757249ea6d7bb667fef3196754b9f80e28bf842a69b540ca94585d08.jpg","width":1224,"height":408},"locale":"zh-hans","path":"/content/papers/zh-hans/classic-cnns/resnet.98d0474f71e6.md","headings":[{"id":"定义问题","text":"定义问题","depth":2},{"id":"解决问题","text":"解决问题","depth":2},{"id":"什么是残差","text":"什么是残差？","depth":3},{"id":"残差学习","text":"残差学习","depth":3},{"id":"残差模块","text":"残差模块","depth":3},{"id":"网络架构","text":"网络架构","depth":3},{"id":"参数配置","text":"参数配置","depth":3},{"id":"讨论","text":"讨论","depth":2},{"id":"resnet-18-vs-resnet-34","text":"ResNet-18 vs ResNet-34","depth":3},{"id":"更深的瓶颈架构","text":"更深的瓶颈架构","depth":3},{"id":"在-imagenet-上的表现","text":"在 ImageNet 上的表现","depth":3},{"id":"结论","text":"结论","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/vgg","relation":"background","topic":"如何训练更深的卷积网络"},{"id":"classic-cnns/densenet","relation":"next","topic":"如何训练更深的卷积网络"}]}],"text":"到了 2015 年，大家已经很清楚深度的好处。作者在引言里举了 ImageNet 的例子：top-5 准确率从 AlexNet 的约 84%，靠着更深的网络与更小的感受野，几年内提升到了约 95%。\n\n麻烦的是，网络一深就很难训练。\n\n为了把深网络训练起来，当时的人想了好几种办法：设计能让信号方差保持稳定的初始化；先训练浅的，再一段一段加深；或者在中间层挂上辅助的损失函数。这些做法都有用，却都是在绕着深度想办法。\n\n瑞士 IDSIA 的 Rupesh Kumar Srivastava、Klaus Greff 与 Jürgen Schmidhuber 在 2015 年 5 月发布了这篇短文，换了一个角度：与其想办法让信号安全地通过每一层，不如给它一条可以不经过那一层的路。\n\n\n> [!NOTE]\n> \n> 这篇是 ICML 2015 Deep Learning Workshop 的扩展摘要，只有几页。同一组作者后来把研究扩充成 [Training Very Deep Networks](https://arxiv.org/abs/1507.06228)，发表在 NIPS 2015，有更多的实验与分析；本文读的是较早的短版。\n\n\n## 定义问题\n\n普通的前馈网络，每一层都对输入做一次非线性变换：\n\n$$\ny = H(x, W_H)\n$$\n\n$H$ 通常是仿射变换加上激活函数。网络很深时，用 SGD 训练常常一开始就卡住，除非权重初始化得恰到好处，让信号在前向与反向传播时都不放大、也不衰减（例如 Glorot 初始化、He 初始化）。\n\n这类初始化有两个限制。第一，它依赖 $H$ 的具体形式：换一种激活函数，可能就得重新推导一个初始化。第二，作者发现即使用了 He 初始化，非常深的普通网络还是很难优化，后面的实验会看到。\n\n那么，有没有一种架构，不管 $H$ 长什么样、不管叠多少层，都能直接用 SGD 训练？\n\n## 解决问题\n\n### 加两道门\n\n作者的灵感来自 LSTM。LSTM 用门来决定记忆要保留多少、更新多少；这里把同样的想法搬到前馈网络的每一层。\n\n他们额外定义了两个非线性变换：变换门 $T(x, W_T)$ 与携带门 $C(x, W_C)$，\n\n$$\ny = H(x, W_H)\\cdot T(x, W_T) + x\\cdot C(x, W_C)\n$$\n\n$T$ 决定输出有多少来自「变换输入」，$C$ 决定有多少来自「直接携带输入」。为了简单起见，论文设 $C = 1 - T$：\n\n$$\ny = H(x, W_H)\\cdot T(x, W_T) + x\\cdot\\big(1 - T(x, W_T)\\big)\n$$\n\n看两个极端情况：\n\n$$\ny=\\begin{cases}x, & T=0\\\\ H(x, W_H), & T=1\\end{cases}\n\\qquad\\qquad\n\\frac{dy}{dx}=\\begin{cases}I, & T=0\\\\ H'(x, W_H), & T=1\\end{cases}\n$$\n\n$T=0$ 时，这一层直接把输入交出去，对输入的导数是单位矩阵，梯度也原封不动地传回来；$T=1$ 时，它就是一个普通的网络层。实际上 $T$ 介于两者之间，每一层可以在「普通层」与「直接通过」之间平滑地调节。\n\n这里的 $T$ 是和 $x$ 长度相同的向量，每个单元各有自己的门：第 $i$ 个单元的输出是 $y_i = H_i(x)\\,T_i(x) + x_i\\,\\big(1 - T_i(x)\\big)$。所以 $x$、$y$、$H(x)$、$T(x)$ 的维度必须相同。\n\n需要改变维度时怎么办？作者提了两种方法：对 $x$ 做适当的下采样或补零；或者用一层普通的网络层改变维度，之后再接 highway 层。论文用的是后者。\n\n卷积版的 highway 层也一样：$H$ 和 $T$ 都用卷积来算，各自共享权重，再用补零让两者的特征图和输入一样大。\n\n### 一开始先偏向「直接通过」\n\n变换门的形式是：\n\n$$\nT(x) = \\sigma(W_T^T x + b_T)\n$$\n\n作者给出了一个不依赖 $H$ 的初始化：把偏置 $b_T$ 设成负值，例如 $-1$ 或 $-3$，让网络一开始偏向携带，也就是偏向直接通过。这个想法同样来自 LSTM：Gers 等人在 1999 年建议把 LSTM 门的偏置初始化为特定方向，让模型在学习初期就能捕捉长距离的依赖。\n\n偏置设成负值，$T$ 会变得多小？\n\n```python\nimport torch\n\nfor b_T in (0.0, -1.0, -3.0):\n    print(f\"b_T = {b_T:4}：T 约为 {torch.sigmoid(torch.tensor(b_T)).item():.3f}\")\n```\n\n```text\nb_T =  0.0：T 约为 0.500\nb_T = -1.0：T 约为 0.269\nb_T = -3.0：T 约为 0.047\n```\n\n$b_T=-3$ 时，每一层大约只有 5% 来自变换，95% 是直接携带过来的输入。因为 sigmoid 的输出始终在 0 和 1 之间，前面两个极端条件永远不会恰好成立，只会很接近。\n\n叠很多层以后呢？我们用 50 维的向量，比较 50 层的普通网络与 50 层的 highway 网络，在刚初始化时，输出和输入还有多相似：\n\n```python\nimport torch\nimport torch.nn.functional as F\n\ntorch.manual_seed(0)\nD, depth = 50, 50\nx = torch.randn(D)\n\ndef run(highway, b_T=-3.0):\n    h = x\n    for _ in range(depth):\n        W_H = torch.randn(D, D) * (2 / D) ** 0.5     # He 初始化\n        H = F.relu(W_H @ h)\n        if highway:\n            W_T = torch.randn(D, D) * (1 / D) ** 0.5\n            T = torch.sigmoid(W_T @ h + b_T)\n            h = H * T + h * (1 - T)\n        else:\n            h = H\n    return F.cosine_similarity(h, x, dim=0).item()\n\nprint(f\"普通网络 {depth} 层后，输出和输入的余弦相似度：{run(False):.2f}\")\nprint(f\"Highway  {depth} 层后，输出和输入的余弦相似度：{run(True):.2f}\")\n```\n\n```text\n普通网络 50 层后，输出和输入的余弦相似度：0.01\nHighway  50 层后，输出和输入的余弦相似度：0.44\n```\n\n普通网络经过 50 层，输出和输入几乎没有关系；highway 网络还保留着相当一部分输入的方向。换几个随机种子，普通网络落在 $-0.13$ 到 $0.20$ 之间，highway 网络落在 $0.26$ 到 $0.51$ 之间。\n\n这只是初始化时的示意，不是论文的实验。它想说明的是：训练一开始，信息和梯度就有一条几乎不经变换的路可走，网络可以从这里慢慢学会什么时候该变换、变换多少。作者在实验中发现，只要偏置设成负的，不管 $W_H$ 用哪种零均值的初始分布、$H$ 用哪种激活函数，非常深的网络都能开始学习。\n\n## 讨论\n\n### 越深越好训练吗？\n\n为了只看优化、不混入泛化的问题，作者在 MNIST 上测量**训练集**的交叉熵。\n\n网络的第一层一律是普通的全连接层，后面接 9、19、49 或 99 层，最后是 softmax。普通网络每层 71 个单元，highway 网络每层 50 个单元，让两者的参数量差不多。为了公平，两种网络各做 40 次随机搜索，调学习率、动量、学习率衰减、$H$ 的激活函数（ReLU 或 tanh），highway 网络另外调变换门偏置（$-1$ 到 $-10$）；其他权重都用 He 初始化。\n\n[![四张并排的训练曲线，标题分别是深度 10、20、50、100。纵轴是平均交叉熵（对数坐标），横轴是 epoch。蓝线是普通网络，绿线是 highway 网络。深度 10 时蓝线最后最低；深度增加后蓝线越来越高，深度 100 时几乎降不下来；绿线在四张图中都降到很低](/content/papers/assets/2cef37bd2a2388f57a76965431810cb86f976db701ba1647b75c81c9a59ac779.png)](/content/papers/assets/2cef37bd2a2388f57a76965431810cb86f976db701ba1647b75c81c9a59ac779.png)\n\n*原论文 Figure 1，取自 [**v2 PDF 第 4 页**](https://arxiv.org/pdf/1505.00387v2#page=4)，CC BY 4.0。每条曲线是该设置下随机搜索得到的最佳结果；蓝线是普通网络，绿线是 highway 网络。*\n\n纵轴是对数坐标，每往下一格就小十倍。\n\n深度 10 时，普通网络的表现很好，最后甚至比 highway 还低。深度一增加，普通网络就越来越难降下来；到了深度 100，蓝线几乎停在高处。\n\n绿线则看不出深度的影响。作者指出，100 层的 highway 网络，最终误差比 10 层的 highway 网络还好约一个数量级，和 10 层的普通网络相当；而且 highway 网络始终比普通网络收敛得快。他们也在 CIFAR-100 上开始训练一个 900 层的 highway 网络，写论文时才跑到第 80 个 epoch，到那时都还没看到优化困难的迹象。\n\n### 好训练，那准确率呢？\n\n好训练是一回事，测试集上的表现是另一回事。作者拿 FitNets 来比较。FitNets 是 Romero 等人在 2014 年提出的细长网络，用 maxout 搭建；他们发现，在参数量限制在约 25 万、乘法约 3,000 万次的条件下，直接用反向传播只能训练到 5 层左右；更深的网络得先训练一个浅的教师网络，再用教师的中间层作为提示、配合教师的软标签，分两阶段训练学生网络。\n\nhighway 网络则全部直接用反向传播训练，在加了随机平移的 CIFAR-10 上比较：\n\n| 网络 | 层数 | 参数量 | 测试准确率 |\n| --- | ---: | ---: | ---: |\n| Teacher（FitNets 的教师网络） | 5 | 约 900 万 | 90.18% |\n| Fitnet 1 | 11 | 约 25 万 | 89.01% |\n| Fitnet 4 | 19 | 约 250 万 | 91.61% |\n| Highway 1（对应 Fitnet 1） | 11 | 约 23.6 万 | 89.18% |\n| Highway 2（对应 Fitnet 4） | 19 | 约 230 万 | **92.24%** |\n| Highway 3* | 19 | 约 140 万 | 90.68% |\n| Highway 4* | 32 | 约 125 万 | 90.34% |\n\n*表：摘自原论文 Table 1。标 * 的网络只用了 5 万张训练图像中的 4 万张。正文把对应 Fitnet 4 的网络称为 Highway 4，表格则标成 Highway 2，这里以表格为准。*\n\n参数量相近时，直接训练的 highway 网络和两阶段训练的 FitNets 准确率相当或更高。更细、更深的 Highway 3、4，参数只有一百多万，表现也和 900 万参数的教师网络差不多。\n\n### 门学到了什么？\n\n最后，作者打开训练好的 50 层全连接 highway 网络，看门的实际行为：\n\n[![两行、四列的热力图。上面一行是 MNIST，下面一行是 CIFAR-100；每张图的纵轴是深度、横轴是 50 个单元。第一列是变换门的偏置，第二列是 1 万个样本上变换门的平均输出，第三列是单个样本的变换门输出，多数是蓝色的低值、只有零星亮点；第四列是单个样本的块输出，呈现一条条上下延伸的竖条纹](/content/papers/assets/6457aa77c955b4147a7edaeae2028f69f8bf7daf4a7ad70d6a53384f6ed9bfff.png)](/content/papers/assets/6457aa77c955b4147a7edaeae2028f69f8bf7daf4a7ad70d6a53384f6ed9bfff.png)\n\n*原论文 Figure 2，取自 [**v2 PDF 第 5 页**](https://arxiv.org/pdf/1505.00387v2#page=5)，CC BY 4.0。第一行是 MNIST，第二行是 CIFAR-100。四列依次是变换门偏置、1 万个样本的平均门输出、单个样本的门输出，以及同一个样本的块输出。*\n\n这张图有几件事值得对照着看。\n\n**偏置比预期更负**。两个网络的偏置分别初始化为 $-2$ 与 $-4$。作者原本以为训练会把它们往上推，结果大多数反而变得更负。在 CIFAR-100 上，偏置随着深度增加而升高，形成一个梯度；这个梯度和第二列的平均门输出正好相反。作者的解读是：浅层那些很负的偏置让门变得更挑剔，只对特定的输入打开。第三列单个样本的门输出非常稀疏，也支持这个解读。\n\n**大多数单元一路直通**。第四列的块输出呈现一条条竖条纹：很多单元的输出在几十层里几乎不变，这就是所谓的信息高速公路。输出的变化大多集中在前面几层，MNIST 约前 10 层，CIFAR-100 约前 30 层；作者推测这和 CIFAR-100 更复杂有关。\n\n作者据此认为，门不只是让训练变容易的工具；训练好的网络也真的用它来决定信息走哪条路，而且会随着输入的不同而强烈变化。\n\n## 结论\n\nHighway Networks 让每一层学会「该变换多少、该直接传多少」，配合偏向直接通过的初始化，100 层的网络也能用简单的 SGD 训练；在 CIFAR-10 上，它不用教师网络，也达到了 FitNets 的水平。\n\n七个月后，微软研究院的 ResNet 用不带门的恒等捷径，把网络推到了 152 层，拿下 ILSVRC 2015。ResNet 的论文在相关工作中提到了 highway 网络，并说明了两者的区别：highway 的门依赖输入、带参数，门关上时就不再学习残差；ResNet 的恒等捷径没有参数，永远不关，所有信息都会通过；另外，highway 网络还没有展示出极深（例如超过 100 层）时的准确率提升。\n\n\n> [!TIP]\n> \n> ResNet 的做法可以参考我们的笔记：\n> \n> - **[[15.12] ResNet：卷积网络 100 层](/blog/papers/classic-cnns/resnet)**\n\n\n这段关系后来也有不同的说法。Schmidhuber 在 2025 年的技术报告 [Who invented deep residual learning?](https://arxiv.org/abs/2509.24732) 中，把 ResNet 描述为「像一个门全开的 Highway Net」，并把残差连接的源头追溯到他的实验室 1991 年以来的工作。\n\n如今要训练很深的网络，大概不会选 Highway：ResNet 的恒等捷径没有门、没有额外参数，也不用操心门的偏置该初始化成多少。\n\n不过「给信号一条不经变换的路」，是 Highway 率先在一百层的网络上做出来的。接下来可以看看 ResNet 是怎么把这道门拆掉的。\n","imageSizes":{"/content/papers/assets/2cef37bd2a2388f57a76965431810cb86f976db701ba1647b75c81c9a59ac779.png":{"width":1344,"height":360},"/content/papers/assets/6457aa77c955b4147a7edaeae2028f69f8bf7daf4a7ad70d6a53384f6ed9bfff.png":{"width":1352,"height":724}}}
