{"notes":[{"id":"classic-cnns/regnet","category":"classic-cnns","legacyPath":"","legacySlug":"","legacyPaths":[],"title":"RegNet","subtitle":"好架構都很像嗎？","author":"Z. Yuan","paperDate":"2020-03-30","publishedOn":"2024-12-16","world":"external/regnet","paperTitle":"Designing Network Design Spaces","paperUrl":"https://arxiv.org/abs/2003.13678","bibliography":{"title":"Designing Network Design Spaces","authors":["Ilija Radosavovic","Raj Prateek Kosaraju","Ross Girshick","Kaiming He","Piotr Dollár"],"url":"https://arxiv.org/abs/2003.13678","pdfUrl":"https://arxiv.org/pdf/2003.13678v1","codeUrl":null,"preprint":{"id":"2003.13678","submittedOn":"2020-03-30","url":"https://arxiv.org/abs/2003.13678"},"publication":{"venue":"CVPR","year":2020,"kind":"conference","url":"https://openaccess.thecvf.com/content_CVPR_2020/html/Radosavovic_Designing_Network_Design_Spaces_CVPR_2020_paper.html"},"citation":"@misc{classiccnnsregnet2020,\n  title = {{Designing Network Design Spaces}},\n  author = {Ilija Radosavovic and Raj Prateek Kosaraju and Ross Girshick and Kaiming He and Piotr Dollár},\n  year = {2020},\n  eprint = {2003.13678},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/2003.13678}\n}\n","citationPath":"/content/papers/citations/classic-cnns/regnet.51d4a967c43d.bib"},"thumbnail":{"src":"/content/papers/assets/477f84998189b88eda3ae1c093bfad949ef34cf53e00368019c348b971c3a63d.png","width":1013,"height":550},"locale":"zh-hant","path":"/content/papers/zh-hant/classic-cnns/regnet.fa68d07aa71a.md","headings":[{"id":"定義問題","text":"定義問題","depth":2},{"id":"手工設計和-nas-各缺一塊","text":"手工設計和 NAS 各缺一塊","depth":3},{"id":"怎麼比較兩個設計空間","text":"怎麼比較兩個設計空間","depth":3},{"id":"解決問題","text":"解決問題","depth":2},{"id":"起點anynet","text":"起點：AnyNet","depth":3},{"id":"一步步收窄","text":"一步步收窄","depth":3},{"id":"寬度是一條斜線","text":"寬度是一條斜線","depth":3},{"id":"regnet","text":"RegNet","depth":3},{"id":"討論","text":"討論","depth":2},{"id":"和常見做法不一樣的地方","text":"和常見做法不一樣的地方","depth":3},{"id":"和-resnetresnext-比","text":"和 ResNet、ResNeXt 比","depth":3},{"id":"行動裝置的運算量","text":"行動裝置的運算量","depth":3},{"id":"和-efficientnet-比","text":"和 EfficientNet 比","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/nasnet","relation":"referenced","topic":""},{"id":"classic-cnns/efficientnet","relation":"referenced","topic":""}]},{"id":"classic-cnns/nasnet","category":"classic-cnns","legacyPath":"classic-cnns/1707-nasnet","legacySlug":"1707-nasnet","legacyPaths":[],"title":"NASNet","subtitle":"搜索網路架構","author":"Z. Yuan","paperDate":"2017-07-21","publishedOn":"2024-06-26","paperTitle":"Learning Transferable Architectures for Scalable Image Recognition","paperUrl":"https://arxiv.org/abs/1707.07012","bibliography":{"title":"Learning Transferable Architectures for Scalable Image Recognition","authors":["Barret Zoph","Vijay Vasudevan","Jonathon Shlens","Quoc V. Le"],"url":"https://arxiv.org/abs/1707.07012","pdfUrl":"https://arxiv.org/pdf/1707.07012","codeUrl":null,"preprint":{"id":"1707.07012","submittedOn":"2017-07-21","url":"https://arxiv.org/abs/1707.07012"},"publication":{"venue":"CVPR","year":2018,"kind":"conference","url":"https://doi.org/10.1109/cvpr.2018.00907"},"citation":"@misc{classiccnnsnasnet2017,\n  title = {{Learning Transferable Architectures for Scalable Image Recognition}},\n  author = {Barret Zoph and Vijay Vasudevan and Jonathon Shlens and Quoc V. Le},\n  year = {2017},\n  eprint = {1707.07012},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1707.07012}\n}\n","citationPath":"/content/papers/citations/classic-cnns/nasnet.f6a561f13f90.bib"},"thumbnail":{"src":"/content/papers/assets/b2d2e9edd0aa83df25d43fcba9a942774de024dfa090f0771473452abb1ff417.jpg","width":930,"height":966},"locale":"zh-hant","path":"/content/papers/zh-hant/classic-cnns/nasnet.43cfdd5f5f46.md","headings":[{"id":"定義問題","text":"定義問題","depth":2},{"id":"解決問題","text":"解決問題","depth":2},{"id":"可遷移架構","text":"可遷移架構","depth":3},{"id":"基礎結構","text":"基礎結構","depth":3},{"id":"搜索過程","text":"搜索過程","depth":3},{"id":"droppath-模組","text":"DropPath 模組","depth":3},{"id":"搜索實驗結果","text":"搜索實驗結果","depth":3},{"id":"討論","text":"討論","depth":2},{"id":"在-cifar-10-上的結果","text":"在 CIFAR-10 上的結果","depth":3},{"id":"遷移架構到-imagenet","text":"遷移架構到 ImageNet","depth":3},{"id":"在行動裝置上的評比","text":"在行動裝置上的評比","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/efficientnet","relation":"next","topic":"架構搜尋與有效率的模型擴展"}]},{"id":"classic-cnns/efficientnet","category":"classic-cnns","legacyPath":"classic-cnns/1905-efficientnet","legacySlug":"1905-efficientnet","legacyPaths":[],"title":"EfficientNet","subtitle":"聯合縮放架構","author":"Z. Yuan","paperDate":"2019-05-28","publishedOn":"2024-07-04","paperTitle":"EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks","paperUrl":"https://arxiv.org/abs/1905.11946","bibliography":{"title":"EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks","authors":["Mingxing Tan","Quoc V. Le"],"url":"https://arxiv.org/abs/1905.11946","pdfUrl":"https://arxiv.org/pdf/1905.11946","codeUrl":null,"preprint":{"id":"1905.11946","submittedOn":"2019-05-28","url":"https://arxiv.org/abs/1905.11946"},"publication":{"venue":"ICML","year":2019,"kind":"conference","url":"https://arxiv.org/abs/1905.11946"},"citation":"@misc{classiccnnsefficientnet2019,\n  title = {{EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks}},\n  author = {Mingxing Tan and Quoc V. Le},\n  year = {2019},\n  eprint = {1905.11946},\n  archivePrefix = {arXiv},\n  url = {https://arxiv.org/abs/1905.11946}\n}\n","citationPath":"/content/papers/citations/classic-cnns/efficientnet.ad7d6744b5d4.bib"},"thumbnail":{"src":"/content/papers/assets/f8202301fddceafac70e33ea34ffeb6b2255d2617c880baee08c51ce4c8a4c93.jpg","width":1596,"height":674},"locale":"zh-hant","path":"/content/papers/zh-hant/classic-cnns/efficientnet.30d889aa4545.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":2},{"id":"聯合縮放的重要性","text":"聯合縮放的重要性","depth":3},{"id":"imagenet-上的結果","text":"ImageNet 上的結果","depth":3},{"id":"推論速度","text":"推論速度","depth":3},{"id":"參數-精度曲線","text":"參數-精度曲線","depth":3},{"id":"結論","text":"結論","depth":2}],"anchorAliases":{},"guide":null,"relatedReading":[{"id":"classic-cnns/nasnet","relation":"background","topic":"架構搜尋與有效率的模型擴展"},{"id":"classic-cnns/efficientnet-v2","relation":"next","topic":"架構搜尋與有效率的模型擴展"}]}],"text":"2019 年前後，設計卷積網路最熱門的方法之一，是神經架構搜尋（NAS）。先定好一個搜尋空間，讓演算法在裡面找出最好的網路，NASNet、EfficientNet 都是這樣來的。\n\n\n> [!TIP]\n> \n> 這兩篇可以先看我們的筆記：\n> \n> - **[[17.07] NASNet：搜索網路架構](/blog/papers/classic-cnns/nasnet)**\n> - **[[19.05] EfficientNet：聯合縮放架構](/blog/papers/classic-cnns/efficientnet)**\n\n\n搜出來的網路很強，可是我們拿到的就是一個網路，針對某個運算量、某個硬體調好的一組數字。為什麼它長這樣？換一個運算量要怎麼改？搜尋結果本身回答不了。\n\nFacebook AI Research 的 Ilija Radosavovic、Raj Prateek Kosaraju、Ross Girshick、何愷明與 Piotr Dollár 想換個做法。他們不設計單一網路，而是設計「網路的設計空間」，從一大群網路的表現裡找出設計原則。\n\n## 定義問題\n\n### 手工設計和 NAS 各缺一塊\n\n回頭看 LeNet、AlexNet、VGG、ResNet，這些手工設計的網路留下的不只是模型，還有用卷積、加大資料和網路、加深、加殘差這些原則。這些原則可以套用到很多新的情境。問題是設計選項一多，靠人力很難一一試出最好的組合。\n\nNAS 解決了「試」的問題，但它的產出是一個針對特定設定調好的網路實例。作者想要的是簡單、好懂、可以推廣到不同設定的網路，以及背後的原則。\n\n至於不同運算量的需求，常見做法是拿一個網路，按某種規則縮放深度、寬度或解析度，EfficientNet 的複合縮放就是一例。可是這仍然是從一個網路出發。\n\n### 怎麼比較兩個設計空間\n\n如果要設計的是「一群網路」，就需要一個比較一群網路好壞的方法。作者沿用 Radosavovic 等人前一年提出的工具，從設計空間裡隨機抽樣 $n$ 個模型，全部訓練完，看錯誤率的分布。\n\n具體的工具是錯誤率的經驗分布函數（EDF）：\n\n$$\nF(e)=\\frac{1}{n}\\sum_{i=1}^{n}\\mathbf{1}[e_i<e].\n$$\n\n$F(e)$ 就是「錯誤率低於 $e$ 的模型佔多少比例」。曲線越靠左上，代表這個空間裡好模型越多。\n\n[![左邊是三個巢狀的橢圓，最外層藍色是 A，中間橘色是 B，最內層黃色是 C，箭頭從 A 指向 B 再指向 C。右邊是三條累積機率曲線，橫軸是錯誤率（40 到 60），縱軸是累積機率（0 到 1）。藍色的 A 最平緩、偏右；橘色的 B 往左移；黃色的 C 最靠左、最陡](/content/papers/assets/526c9907c4f475ec129b14c60e3189345920cb53e55b91dea16ee61a5c64c0b2.png)](/content/papers/assets/526c9907c4f475ec129b14c60e3189345920cb53e55b91dea16ee61a5c64c0b2.png)\n\n*原論文 Figure 1，取自 [**v1 PDF 第 1 頁**](https://arxiv.org/pdf/2003.13678v1#page=1)。設計空間的設計：每一步把空間 A 縮小成更簡單或更好的 B，再到 C；右邊是三者的錯誤率 EDF。*\n\n左圖是作者的流程。從一個很大的空間 A 開始，每次加一條限制，得到更小的 B、再到 C。右圖是三個空間各自抽樣訓練後的 EDF，C 的曲線最靠左，表示它裡面的模型整體上最好。\n\n比較整個分布，比只比較兩個空間各自搜出來的最佳模型穩定。作者也希望，對一整群模型都成立的原則，比較有機會推廣到別的設定。\n\n要抽樣訓練幾百個模型，成本是個問題。作者在「低運算量、短訓練」的設定下做設計，每個模型大約 4 億次乘加（400MF），只在 ImageNet 上訓練 10 個 epoch。這樣訓練 100 個模型的計算量，大約等於把一個 ResNet-50 訓練 100 個 epoch。\n\n## 解決問題\n\n### 起點：AnyNet\n\n作者先定一個很自由的設計空間，叫做 AnyNet。網路由三段組成。stem 是一層步幅 2、32 個通道的 $3\\times3$ 卷積；head 是平均池化加全連接層；中間的 body 才是重點，分成 4 個 stage，解析度依序減半，每個 stage 由幾個相同的區塊組成。\n\n區塊用的是 ResNeXt 那種帶分組卷積的殘差 bottleneck，作者叫它 X 區塊：\n\n[![X 區塊的示意圖。(a) 步幅 1 的版本：輸入 wi, ri, ri 經過 1x1 s=1 卷積變成 wi/bi 個通道，接著 3x3、分組寬度 gi、s=1 的卷積，再經過 1x1 s=1 卷積回到 wi 個通道，最後和右側的捷徑相加。(b) 步幅 2 的版本：中間的 3x3 卷積步幅為 2，捷徑上多了一個 1x1 s=2 卷積](/content/papers/assets/a529e6e4b1fdd3d828f2fabfc86390e33c5501faa9cca45a206d01dc23706bf0.png)](/content/papers/assets/a529e6e4b1fdd3d828f2fabfc86390e33c5501faa9cca45a206d01dc23706bf0.png)\n\n*原論文 Figure 4，取自 [**v1 PDF 第 4 頁**](https://arxiv.org/pdf/2003.13678v1#page=4)。X 區塊：$1\\times1$ 卷積、$3\\times3$ 分組卷積、$1\\times1$ 卷積，每個卷積後面接 BN 和 ReLU。*\n\n每個 stage $i$ 有四個參數可以調：\n\n- **區塊數 $d_i$**\n- **區塊寬度 $w_i$**：輸出的通道數\n- **bottleneck 比例 $b_i$**：中間那層的通道數是 $w_i/b_i$\n- **分組寬度 $g_i$**：$3\\times3$ 分組卷積每組有幾個通道\n\n4 個 stage、每個 4 個參數，一共 16 個自由度。抽樣的範圍是 $d_i\\le16$、$w_i\\le1024$ 且為 8 的倍數、$b_i\\in\\{1,2,4\\}$、$g_i\\in\\{1,2,\\ldots,32\\}$，組合起來大約有 $10^{18}$ 種網路。輸入固定 $224\\times224$。\n\n作者沒有在這 $10^{18}$ 種網路裡搜尋最好的一個，而是一步步加限制，每一步都要讓空間更簡單、更好理解，同時好模型不能變少。\n\n### 一步步收窄\n\n作者每加一條限制，就重新抽 500 個模型訓練，看 EDF 有沒有變差：\n\n| 空間 | 新增的限制 | 自由度 | 組合數 | 最低／平均錯誤率 |\n| --- | --- | ---: | ---: | ---: |\n| AnyNetX$_A$ | 無 | 16 | $\\sim1.8\\cdot10^{18}$ | 39.0 / 49.0 |\n| AnyNetX$_B$ | 所有 stage 共用 $b$ | 13 | $\\sim6.8\\cdot10^{16}$ | 39.0 / 49.2 |\n| AnyNetX$_C$ | 所有 stage 共用 $g$ | 10 | $\\sim3.2\\cdot10^{14}$ | 38.9 / 49.4 |\n| AnyNetX$_D$ | $w_{i+1}\\ge w_i$ | 10 | $\\sim1.3\\cdot10^{13}$ | 38.7 / 43.2 |\n| AnyNetX$_E$ | $d_{i+1}\\ge d_i$ | 10 | $\\sim5.5\\cdot10^{11}$ | 38.7 / 42.7 |\n| RegNetX | 量化線性 | 6 | $\\sim3.0\\cdot10^{8}$ | 38.2 / 41.0 |\n\n*表：組合數整理自原論文 Table 1，錯誤率來自 Figure 5、7、9 圖例，400MF、訓練 10 個 epoch 的 ImageNet top-1 錯誤率（%）。*\n\n前兩步讓每個 stage 共用同一個 $b$ 和 $g$，自由度少了 6 個，EDF 幾乎沒變，表示這兩個參數不需要每個 stage 分開調。\n\n第三步來自觀察。作者把 AnyNetX$_C$ 裡好的和差的網路各挑幾個畫出來，發現好網路的寬度都是往後越來越寬。加上 $w_{i+1}\\ge w_i$ 這條限制，平均錯誤率從 49.4% 一口氣降到 43.2%，最好的模型也沒有變差。第四步的 $d_{i+1}\\ge d_i$ 也讓結果再好一點。\n\n到這裡，空間縮小了三百多萬倍，好模型反而更集中。\n\n### 寬度是一條斜線\n\n接著作者把 AnyNetX$_E$ 裡最好的 20 個模型畫在同一張圖上，橫軸是區塊的編號，縱軸是區塊的寬度：\n\n[![上排左圖：20 條灰色的階梯狀曲線，代表 20 個最好的模型每個區塊的寬度（縱軸為對數刻度），一條黑色的平滑曲線穿過它們的中間。上排中、右兩張：各是一個好模型的實際寬度（藍色實線階梯）、線性擬合（點線）與量化後的擬合（虛線階梯），兩者幾乎重疊。下排三張散佈圖：AnyNetXC、AnyNetXD、AnyNetXE 中每個模型的擬合誤差 efit 對錯誤率，好模型都集中在 efit 接近 0 的地方，從 C 到 E 點越來越往左集中](/content/papers/assets/477f84998189b88eda3ae1c093bfad949ef34cf53e00368019c348b971c3a63d.png)](/content/papers/assets/477f84998189b88eda3ae1c093bfad949ef34cf53e00368019c348b971c3a63d.png)\n\n*原論文 Figure 8，取自 [**v1 PDF 第 5 頁**](https://arxiv.org/pdf/2003.13678v1#page=5)。好模型的寬度可以用量化的線性函數描述；擬合誤差 $e_\\text{fit}$ 大的模型，錯誤率也偏高。*\n\n左上那張圖裡，每個模型的灰色階梯都不一樣，但整體趨勢可以用一條很簡單的直線 $w_j=48\\cdot(j+1)$ 描述，也就是黑線（縱軸是對數刻度，所以看起來是彎的）。\n\n直線給每個區塊一個不同的寬度，實際的網路卻是同一個 stage 寬度相同，是一段段的階梯。作者用三個式子把直線變成階梯。\n\n先用一條直線給每個區塊一個連續的寬度：\n\n$$\nu_j=w_0+w_a\\cdot j,\\qquad 0\\le j<d.\n$$\n\n$w_0$ 是起始寬度，$w_a$ 是斜率，$d$ 是區塊總數。接著引入一個參數 $w_m$，把 $u_j$ 寫成 $w_0$ 乘上 $w_m$ 的幾次方：\n\n$$\nu_j=w_0\\cdot w_m^{s_j}.\n$$\n\n最後把指數 $s_j$ 四捨五入：\n\n$$\nw_j=w_0\\cdot w_m^{\\lfloor s_j\\rceil}.\n$$\n\n指數取整數之後，寬度只剩 $w_0$、$w_0w_m$、$w_0w_m^2$ 這幾種值，同一種寬度的區塊就是一個 stage，所以 $w_m$ 就是相鄰 stage 之間的寬度倍數。\n\n我們拿 RegNetX-1.6GF 實際算一次。它在 torchvision 裡的參數是 $d=18$、$w_0=80$、$w_a=34.01$、$w_m=2.25$，分組寬度 $g=24$：\n\n```python\nimport math\n\nd, w0, wa, wm, g = 18, 80, 34.01, 2.25, 24        # RegNetX-1.6GF\n\nu = [w0 + wa * j for j in range(d)]                 # 式 (2)：每個區塊一個連續的寬度\ns = [math.log(uj / w0) / math.log(wm) for uj in u]  # 式 (3)：換算成 w0 · wm^s 的指數\nw = [w0 * wm ** round(sj) for sj in s]              # 式 (4)：指數四捨五入，寬度變成階梯\nw = [round(wj / 8) * 8 for wj in w]                 # 寬度取 8 的倍數\n\nfor j in (0, 1, 2, 5, 6, 15, 16, 17):\n    print(f\"區塊 {j:>2}：u = {u[j]:6.1f}，s = {s[j]:4.2f} → 取整 {round(s[j])}，寬度 {w[j]}\")\n\nstages = sorted(set(w))\ndepths = [w.count(x) for x in stages]\nwidths = [round(x / g) * g for x in stages]         # 再調成 group width 的倍數\nprint(\"各階段區塊數：\", depths)\nprint(\"各階段寬度：\", widths)\n```\n\n```text\n區塊  0：u =   80.0，s = 0.00 → 取整 0，寬度 80\n區塊  1：u =  114.0，s = 0.44 → 取整 0，寬度 80\n區塊  2：u =  148.0，s = 0.76 → 取整 1，寬度 176\n區塊  5：u =  250.0，s = 1.41 → 取整 1，寬度 176\n區塊  6：u =  284.1，s = 1.56 → 取整 2，寬度 408\n區塊 15：u =  590.1，s = 2.46 → 取整 2，寬度 408\n區塊 16：u =  624.2，s = 2.53 → 取整 3，寬度 912\n區塊 17：u =  658.2，s = 2.60 → 取整 3，寬度 912\n各階段區塊數： [2, 4, 10, 2]\n各階段寬度： [72, 168, 408, 912]\n```\n\n18 個區塊的寬度沿著直線往上爬，指數取整之後分成四段，得到每個 stage 2、4、10、2 個區塊，寬度 72、168、408、912。這和論文列出的 RegNetX-1.6GF 一致，也和 torchvision 建出來的模型一致。stage 的區塊數不用另外指定，直線和取整就決定了。torchvision 的 `regnet_x_*`、`regnet_y_*`，以及 timm 的 `regnetx_*`、`regnety_*`，都是用這組公式產生的，依運算量挑就好。\n\n作者也回頭驗證這個描述。他們拿 AnyNetX$_C$ 到 AnyNetX$_E$ 的每個模型去擬合這條量化直線，算出擬合誤差 $e_\\text{fit}$。Figure 8 下排的散佈圖顯示，每個空間裡最好的模型，擬合誤差都接近 0；而且從 C 到 E，模型整體越來越貼近這種結構。\n\n### RegNet\n\n既然好模型都長這樣，乾脆只保留這種結構的網路。一個網路由 $d$、$w_0$、$w_a$、$w_m$ 四個參數，加上 $b$ 和 $g$ 決定。抽樣範圍是 $d<64$、$w_0,w_a<256$、$1.5\\le w_m\\le3$。作者把這個空間叫做 RegNet，意思是只包含規則（regular）的網路。\n\n自由度從 16 降到 6，空間大小少了將近 10 個數量級，平均錯誤率卻從 49.0% 降到 41.0%，最好的模型也略好一點。好模型夠集中，隨機抽大約 32 個模型，就很可能抽到不錯的。\n\n作者也確認這些結論不是低運算量、短訓練的設定下才成立的。換成更高的運算量、更長的訓練、5 個 stage 的網路，或是其他區塊類型，三個空間的排名始終是 RegNetX 優於 AnyNetX$_E$、優於 AnyNetX$_A$。\n\n## 討論\n\n### 和常見做法不一樣的地方\n\nRegNetX 的好模型很集中，作者接著改用每個運算量各抽 100 個模型、訓練 25 個 epoch，看各個參數的趨勢：\n\n[![六張折線圖，橫軸都是運算量（0.2 到 12.8 GFLOPs），每張圖有淺色的 all 範圍、藍色的 good 範圍與黑色的 best 線。d：最佳深度大約維持在 16 到 23 之間，多數是 20；b：最佳值始終是 1；wm：最佳值大約在 2.2 到 2.8 之間；g、wa、w0：最佳值都隨著運算量增加而變大](/content/papers/assets/88e61c9524447ce29968da46650f265df2c5f591a45aaf965adef78e49826d51.png)](/content/papers/assets/88e61c9524447ce29968da46650f265df2c5f591a45aaf965adef78e49826d51.png)\n\n*原論文 Figure 11，取自 [**v1 PDF 第 7 頁**](https://arxiv.org/pdf/2003.13678v1#page=7)。RegNetX 各參數在不同運算量下的趨勢，藍色區域是以 95% 信心包含最佳模型的範圍，黑線是最可能的最佳值。*\n\n有幾個結果和當時的習慣不同：\n\n1. **最佳深度很穩定。** 不論運算量多少，最好的模型大約都是 20 個區塊（約 60 層）。一般的做法是運算量越大，網路就越深。\n2. **不需要 bottleneck。** 最好的模型 $b=1$，中間那層和輸出一樣寬。\n3. **stage 之間的寬度倍數約 2.5。** 常見做法是每個 stage 加倍。\n4. **inverted bottleneck 和 depthwise 卷積都比較差。** 行動網路常用的 $b<1$ 會讓結果略差，$g=1$ 的 depthwise 卷積更差。作者在附錄用 6.4GF、100 個 epoch 重測，inverted bottleneck 的差距更大。\n5. **解析度固定 $224\\times224$ 最好。** 這和 EfficientNet「放大解析度有幫助」的結論相反，即使在較高的運算量也是如此。\n\n$g$、$w_a$、$w_0$ 則隨運算量增加而變大。另外，在 X 區塊上加 SE 模組，得到的 RegNetY 空間整體又更好。\n\n作者還加入一個平常少人看的指標，**activations**，也就是所有卷積層輸出張量的總大小。在 V100 GPU 上，推論時間和 activations 的相關係數是 0.897，和 FLOPs 只有 0.643。GPU 這類硬體常常卡在記憶體頻寬，所以中間結果有多大，比乘加次數更能預測速度。最好的模型裡，activations 大約隨運算量的平方根成長，參數量則是線性成長。\n\n根據這些趨勢，作者把 RegNetX 再加上 $b=1$、$d\\le40$、$w_m\\ge2$，並限制參數量和 activations，得到一個更快、更省記憶體的空間，後面的比較都用這個版本。\n\n### 和 ResNet、ResNeXt 比\n\n比較最終模型時，作者在每個運算量隨機試 25 組參數，挑出最好的再用 100 個 epoch 訓練 5 次。所有模型，包括被比較的 ResNet、ResNeXt，都用同一套基本訓練設定，除了 weight decay 之外，沒有額外的正規化或訓練技巧：\n\n| 模型 | GFLOPs | 參數 | 推論（ms） | top-1 錯誤率 |\n| --- | ---: | ---: | ---: | ---: |\n| ResNet-50 | 4.1 | 22.6M | 53 | 23.2% |\n| ResNeXt-50 | 4.2 | 25.0M | 78 | 21.9% |\n| **RegNetX-4.0GF** | 4.0 | 22.1M | 69 | **21.4%** |\n| ResNet-101 | 7.8 | 44.6M | 90 | 21.4% |\n| ResNeXt-101 | 8.0 | 44.2M | 137 | 20.7% |\n| **RegNetX-8.0GF** | 8.0 | 39.6M | 94 | **20.7%** |\n| ResNet-152 | 11.5 | 60.2M | 130 | 20.9% |\n| ResNeXt-152 | 11.7 | 60.0M | 197 | 20.4% |\n| **RegNetX-12GF** | 12.1 | 46.1M | 137 | **20.3%** |\n\n*表：摘自原論文 Table 3(b)，運算量相近的分成一組。推論時間是 V100 上一次處理 64 張影像。*\n\n三組都是 RegNetX 最好或並列最好。在 8GF 那一組，RegNetX 和 ResNeXt-101 打平，推論時間卻只要 94 ms，ResNeXt-101 要 137 ms。這些網路用的是同樣的元件和訓練設定，差別只在結構，作者因此認為，這些進步全部來自設計空間。\n\n### 行動裝置的運算量\n\n在 600MF 左右，RegNetX-600MF 的 top-1 錯誤率是 25.9%，RegNetY-600MF 是 24.5%。同一個運算量下，MobileNet-V2 報告的是 25.3%，ShuffleNet V2 是 25.1%，NAS 搜出來的 NASNet-A 是 26.0%、AmoebaNet-C 是 24.3%。\n\n這些對手的數字是各自論文報告的，通常用了更長的訓練和各種增強技巧；RegNet 只用 100 個 epoch 的基本設定，結果仍然相當接近。作者希望這組簡單的模型可以當成之後研究的基準線。\n\n### 和 EfficientNet 比\n\n最後是當時最強的 EfficientNet。作者用 EfficientNet 的原始架構，但改用和 RegNet 相同的訓練設定重新訓練，只替它另外調學習率和 weight decay：\n\n| 模型 | GFLOPs | 參數 | activations | 推論（ms） | 訓練（小時） | top-1 錯誤率 |\n| --- | ---: | ---: | ---: | ---: | ---: | ---: |\n| EfficientNet-B0 | 0.4 | 5.3M | 6.7M | 34 | 11.7 | **24.9%** |\n| RegNetY-400MF | 0.4 | 4.3M | 3.9M | 19 | 5.1 | 25.9% |\n| EfficientNet-B3 | 1.8 | 12.0M | 23.8M | 114 | 32.1 | 22.5% |\n| RegNetY-1.6GF | 1.6 | 11.2M | 8.0M | 39 | 10.1 | **22.0%** |\n| EfficientNet-B5 | 9.9 | 30.0M | 98.9M | 504 | 135.1 | 21.5% |\n| RegNetY-8.0GF | 8.0 | 39.2M | 18.0M | 113 | 28.1 | **20.1%** |\n\n*表：摘自原論文 Table 4 的三組。兩者都用 100 個 epoch、只有 weight decay 的基本訓練設定；推論時間的量法和前表相同。*\n\n運算量很低時，EfficientNet 比較好；運算量往上，RegNetY 開始領先。速度的差距更明顯，EfficientNet-B5 推論一批要 504 ms，RegNetY-8.0GF 只要 113 ms（B5 算完一批，它已經跑完四批），錯誤率還更低。\n\n速度的差距和前面的 activations 有關。EfficientNet 同時放大解析度和深度，activations 大約隨運算量線性成長，B5 的 activations 是 98.9M；RegNet 則是隨平方根成長，8.0GF 只有 18.0M。\n\n這張表要注意訓練設定。EfficientNet 原論文用更長的訓練、AutoAugment 等增強技巧，報告的錯誤率低得多，例如 B5 是 16.7%。作者自己的實驗也顯示，光是訓練設定，就能讓 EfficientNet-B0 的錯誤率差上 2 個百分點左右。所以這張表比較的是「同樣的訓練條件下，哪個架構比較好」，不是兩者各自能做到的最好成績。\n\n## 結論\n\n好架構都很像嗎？至少在這篇論文的設計空間裡，答案是肯定的。從 $10^{18}$ 種網路一路收窄，留下來的好模型，寬度都落在同一條量化的直線上，深度大約 20 個區塊，不用 bottleneck，stage 之間的寬度乘上 2.5 左右。\n\n這些規律是在固定的 X 區塊、低運算量、短訓練的條件下找出來的，作者也承認，把運算子等更多選項放進設計空間，可能會得到不一樣的答案。\n\n為了畫出這條直線，作者光是比較設計空間，就訓練了好幾千個模型。這個做法不便宜，但換來的是一組講得出道理的規則，比 NAS 交出一個「就是這樣，別問」的網路好懂多了。\n","imageSizes":{"/content/papers/assets/526c9907c4f475ec129b14c60e3189345920cb53e55b91dea16ee61a5c64c0b2.png":{"width":1013,"height":387},"/content/papers/assets/a529e6e4b1fdd3d828f2fabfc86390e33c5501faa9cca45a206d01dc23706bf0.png":{"width":863,"height":467},"/content/papers/assets/477f84998189b88eda3ae1c093bfad949ef34cf53e00368019c348b971c3a63d.png":{"width":1013,"height":550},"/content/papers/assets/88e61c9524447ce29968da46650f265df2c5f591a45aaf965adef78e49826d51.png":{"width":1004,"height":409}}}
