{"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-hant","path":"/content/papers/zh-hant/classic-cnns/highway-networks.29bb1472915e.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-hant","path":"/content/papers/zh-hant/classic-cnns/resnet.859f62e9e37d.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}}}
