【論文解説】 Designing Network Design Spaces 【NAS】

# 今回取り上げる論文
Facebook社から公開されているニューラルネットワーク探索に関する論文が面白かったので解説します。

Submitted on 30 Mar 2020/被引用数: 6
元論文 : https://arxiv.org/abs/2003.13678

# 1.概要・目的
## 1.1デザイン空間とは？
デザイン空間とはニューラルネットワークの設計における探索するモデルの母集団のことです。よりかみ砕いていうと、ニューラルネットワークを用いてタスクを行う際に、どんなモデル(例えば、幅、深さ、グループなどをどうするか)を選ぶかを考えるかと思いますが、その選ばれるモデルの候補になりうるモデルの集合です。
本論文では、このニューラルネットワークのデザイン空間を設計する手法を提案しています。
## 1.2デザイン空間設計

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/a42eeeb8-f8fc-03b1-ad27-968ddb713ce3.png)


本論文ではこのデザイン空間を設計していくことを考えます。デザイン空間を設計するというのは回りくどい表現に聞こえるかもしれませんが、要は上図の左のように、最初無数のニューラルネットワーク構造の候補がある状態(Aで表される集合)から、B、そしてCへと適切な「良いモデル」が存在するデザイン空間へと候補を絞っていく作業の事を指します。
右のグラフは横軸にモデルの誤差、縦軸に分布確率を表しています。A →B →Cとデザイン空間を洗練していくにつれ、誤差も減っていくことが確認できると思います。
## 1.3本論文の目的
本論文では背景として視覚認識のためのより良いネットワークを設計することが前提としてあります。
そのネットワーク設計において本論文では上で説明したようなニューラルネットワークを設計するための**デザイン空間を設計する事**を目的としており、それに際して**AnyNet**と呼ばれる比較的に制約がない(候補になるモデルの数が多い)デザイン空間をスタートに、最終的にRegNetと呼ばれる単純なデザイン空間に到達する手順を提案しています(まさに上図のA→Cのイメージ)。
論文中でも繰り返し述べられている事ですが本論文で提供しているのは無数の候補の中から具体的に一つの最良のモデルを得る手法ではなく、より一般的に有用なモデルのデザイン空間を得るための方法論であることがポイントです。(『デザイン空間をデザイン』という表題にある通り、あくまで目的はデザイン空間を得る事だということですね)

# 2.AnyNet
## 2.1デザイン空間設計のためのツール
デザイン空間を設計するにあたり、そもそもまず「デザイン空間の良さ」を測る指標が必要になります。個々のモデルに対して精度や計算コストなどでモデルの良さを評価するように、デザイン空間にも**誤差経験分布関数(EDF)**という指標を導入します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/5e00972d-a766-6e0c-dfe9-13d56b67e4b1.png)


ここでnはデザイン空間の大きさ(モデルの数)、eiはその中の個々のモデルの誤差で、ここでe を閾値として閾値より小さい誤差を持つモデルの割合を表しています(全部でn個のモデルの中で閾値より誤差が小さいモデルがいくつあるのかを表しています)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/c07ab359-115c-f6df-a150-ccc3ff6691a8.png)

N = 500での具体例を見ると、左の図はEDFの閾値をそれぞれ変化させていった時のEDFの値をプロットしています。つまり、曲線が左によるほど誤差が小さいモデルが多いので良いデザイン空間であるということが出来ます。
## 2.2 AnyNetの概要
### 2.2.1ネットワークの構成
AnyNetで定義されるネットワークのモデルは一般に以下の構成で表されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/820dddf6-1f0d-df94-3f63-a0637f9d5746.png)


上図(a)にあるように、本研究ではネットワークの構造を入力を受け取る単純なステム部分、計算の大部分を実行するボディ、出力クラスを予測するヘッドで定義しています。
本研究ではステムとヘッドは単純化のために可能な限り固定してシンプルにしたうえで、ネットワークの計算の精度や計算量を決定する上で中心となるボディの部分に焦点を当てていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/eb6f5891-9f2f-c5bf-7da7-e89675d07c2c.png)


ボディは(b)で表されるように徐々に解像度を下げながら動作する4つのステージから構成されています。各ステージは同一のブロックをシーケンスに接続して構成されています。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/5bccd939-9fbe-083e-8044-51f1cb3c3476.png)


### 2.2.2ネットワークの自由度
各ブロックは上図に表されるようにグループ畳み込みを用いた標準的な残差ボトルネックブロックを使用しています。
これらをまとめると各ネットワークは4つのステージで構成され、各ステージは
・ブロック数 : d
・ブロック幅 : w
・ボトルネック比 : b
・グループ幅  : g 
の4つの自由度を持つので、AnyNet全体で16もの自由度を持つことになります。AnyNetという名前の通り、ほとんど任意のネットワーク構造を表現できる巨大なニューラルネットワークのモデル群ですね。この膨大な探索空間を本論文では様々な制約を加えることでRegNetと呼ばれる低次元のデザイン空間へと導いていきます。


## 2.3　アプローチ
具体的にAnyNetをより洗練された良いデザイン空間へとデザインしていくためのアプローチを段階を追って説明してきます。なにも制約のない初期のAnyNetから2.2で挙げたようなネットワークの構成因子に制約を加えていくことでAnyNetを洗練させていきます。

### 1.AnyNetXA　　　
初期のAnyNetは前節に示した通りの16の自由度を持つAnyNetデザイン空間です。
本論文ではこれ以降特に制約のないデザイン空間をAnyNetXAと呼んでいます。

### 2.AnyNetXB
このステップでは共有ボトルネック比についての制約を加えます。つまり、AnyNetXAの中で500個のモデルをサンプリングし、各モデルのボトルネック比biをbで固定してbを変化させたときのEDFを考えます。結果は以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/61f6059e-4f6d-1981-bbc7-07ffe0c5b2f8.png)


* 左の図はAnyNetXA(制約なし)とAnyNeTXBでのEDFをプロットしています。図より明らかなように、ボトルネック比に制約を加えてもEDFは変化せず、精度が低下しないことが示されています。
* AnyNetXBの方が制約がある分AnyNetXAより単純な(サイズの小さな)デザイン空間であることから解析がより容易であることが分かります。
* さらに経験的ブーストラップをbに適用すると右の図にもあるようにほとんどのモデルはb <= 2の場合に誤差が小さいことがわかります。


### 3.AnyNetXC 
次のステップではAnyNetXBからスタートして前節と同様にサンプリングされた各モデルの共有グループ幅gに対してgi = g をテストを行い得られたデザイン空間AnyNetXBを得ることが出来ます。テストの結果は以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/a6c0eef6-09de-0b3f-c43c-51ddeb8664db.png)


* AnyNetXBと同様に、得られたデザイン空間はAnyNetXBよりシンプルなものであるのにかかわらず、精度はほとんど変化していないことからデザイン空間を上手く単純化することに成功しています。
* AnyNetXCはAnyNetXAに比べて自由度が6つ少なく，デザイン空間サイズが4桁近く小さくなっています．
* 図は提供されていませんが、g > 1 が最適であることが判明しました。

### 4.AnyNetD
2,3のステップでは主にデザイン空間を単純化させることを目的にしてきました。今回のステップではデザイン空間の品質を向上させ維持することに注力していきます。
前節で得られたAnyNetXCを用いて良いモデルと悪いモデルのネットワーク構造を比較してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/9772cdcc-7228-86a1-3ce6-8cc380bdfe92.png)


上段の青線で表されるのが良いモデル、下段のオレンジが悪いモデルをそれぞれ表しています。dはブロックの数、wはブロックの幅を表しています。

* グラフから良いネットワークほどブロックのインデックスの増加(ネットワークが深くなるにつれて)ブロックの幅が大きくなるというパターンが見られます。
* これを受けてネットワークの設計においてwi+1 ≧ wi の制約(ブロックのインデックスが大きくなるにつれてブロック幅も大きくなる)をAnyNetXCに導入して得られたデザイン空間をAnyNetXDと名付けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/a56e5af3-2ced-8c6f-d205-3014356d4010.png)


上記の制約を加えたAnyNetXDのEDFは上図のオレンジの線に対応しています。AnyNetXCやwi+1≦wiの制約を加えた場合に比べて飛躍的に性能が改善していることが分かると思います。

### 5.AnyNetXE
4の場合と同様に、AnyNetXDにさらにd(ブロック数)についての制約を加えることを考えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/92d9a178-145f-4627-40fe-7cf81869700f.png)


* 結果を見てみると、error値の低い領域(ベストのモデル群)ではAnyNetXDにdi+1≧diの制約を加えたオレンジの線が青で表されるAnyNetXDよりも精度が優れていることが分かります。
* wiとdiに対する制約がそれぞれデザイン空間の自由度を4(ステージ数に相当)削減し、精度だけでは無くデザイン空間自体単純化することに成功していることが分かります。

デザイン空間の設計というと仰々しいように思えましたが、要は母集団から条件をみたすものを段階的にふるいにかけて選択していって最善のモデルの探索空間(候補の数)を絞っていくという話ですね。
# 3.RegNet
## 3.1AnyNetの分析から見えてきたもの
いよいよ本題のRegNetの解説に入っていきます。その前にAnyTimeXEのベスト20モデルをを見てみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/85d0d97f-a147-b45f-a87c-2f0037b02cdc.png)


* 個々のモデル上の図（灰色の曲線）には大きなばらつきがありますが、全体としてはパターンが現れています。
* 同じ図でこの黒の曲線は0 ≤ j ≤ 20の場合の線 w j = 48×(j+1)を示します。これはつまり上の図の黒い実践は縦軸が対数であることより灰色の線で表されるAnyNetXEの最良の20モデルを上手く線形回帰させているということです(対数目盛なので図では曲線になっています)。

## 3.2「量子化」
上で述べた線形回帰はいくつかの注意が必要です。というのは、上の図で実際にAnyNetからサンプリングされたモデルは同じステージにおいては各ブロック全て同じブロック幅wを持つことに対して、上で記されている近似直線(黒色の曲線)は各ブロックにたいしてそれぞれ違う値を持つことが分かります。つまりこのままではAnyNetの同じステージのブロック感は同じブロック幅を持つという前提(2.2で各ステージは同一のブロックをシーケンシャルに接続したものだと定義していましたよね)に反してしまいます。そこで本論文では近似曲線をステージ間において定数関数に近似しており、それを本論文では**「量子化」**と呼んでいます。(量子力学での離散的なエネルギー準位にちなんでいそう)

## 3.3線形回帰によるモデル設計
1. 最初に各ブロックごとにブロック幅ujをブロックのインデックスに対して線形にパラメータ化します。jはブロックのインデックスを表し、深さ d、初期幅 w 0 > 0、傾き w a > 0 の 3 つのパラメータを持ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/ae724a68-ad89-9437-ec8a-ead60cfc30c8.png)
この段階ではまだブロック幅ujは量子化されていない(ブロックごとに異なる値をとる)ことに注意しましょう。

2. 続けてujが得られたら次式のように各ブロックjに対してsjを計算します。ここでwmはステージ間のブロック幅の比を表します。wm = 2であればステージ間のブロック幅は2倍されるということですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/3d140c5e-d31e-25a0-6992-671bfe51935a.png)


3. 求まったsjを整数値に丸めて再度上式を用いる事で量子化されたブロックごとの幅wjを得ることが出来ます。丸められたsjは鍵括弧で表されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/f5c071f4-f14f-774c-ba90-5bb02368b37a.png)

以上の手順を踏むことでujは同じブロック幅wiに量子化されることになり、同じwiを有するujを各ステージとみなしてやることで量子化出来たことになります。(例えばujがuj = [1,1.4,2.5,2.7,3.2,3.5]とかで与えられて上記のステップを踏んでwi = [1,1,2,2,3,3]とかに変換されたとき、最初異なる６つの数値をとっていたujをブロック幅の数値ごとに三つのステージに分類することができますよね)
この時各ステージ i は共通のブロック幅wiを持つブロックを有することになり前提を満たすことができます。

## 3.4 AnyNetXモデルを用いたテスト
前節で得られた線形回帰によるデザイン空間をAnyNetXのモデルを用いてテストします。この際にブロック当たりの幅の線形回帰による予測値と観測値の平均対数比をefitで表現しており、このefitを最小化するようにRegNetでの線形回帰のパラメータw0, wa, wmを最適化します。結果を以下に示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/f85e3544-5b81-bd28-8b1b-f6c36033621f.png)


* 数値化された線形計算量(破線の曲線)は、AnyNetの最良モデル(実線の曲線)を上手く近似することが出来ていますね。

AnyNetの各デザイン空間における線形回帰の性能も確認するために、AnyNetX CからAnyNetX Eのすべてのネットワークについてeﬁtをプロットします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/140e2a64-d57e-2dcb-5439-e1b0d5bfb315.png)


* 各デザイン空間における最良のモデルはすべて線形回帰におけるefitもかなり0に近い値を持っていることが分かります。これからも線形回帰で得られたモデルがベストなモデル探索を可能にしていることが分かりますね。
* AnyNetX CからAnyNetX Eに向かうにつれてeﬁtが改善されていることが分かります。これより線形回帰が自然に2.3で段階的に行ったw iとd iの増加に関連した制約を取り込んでいることが分かります。

## 3.5 RegNetへの拡張
以上のように、線形回帰を用いてニューラルネットワークのモデル構造を回帰することの威力が立証されたので、本論文ではこのような線形構造を持つモデルのみを含むデザイン空間を設計することを提案します。これこそがRegNetと呼ばれるデザイン空間です。
具体的にRegNetを構成するために6つのパラメータd, w0, wa, wm（およびb,g）を用いてネットワーク構造を指定します。これらを与えて、式(2)-(4)によりブロックの幅と深さを求めます。
このようにして求めたRegNetのEDFは下図のように表されます。

### 3.5.1 精度
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/33ca8537-a1a7-9317-7ab0-da7efd1fd986.png)


* 黄色で表されるRegNetXのモデルは一貫して最良のモデルを維持しておりAnyNetXよりも平均誤差が小さいことが分かります。
* 真ん中の図の赤色と青色の曲線に注目するとwm = 2（ステージ間の幅を2倍にする)を使用すると，EDFはわずかにしか改善されなのに対してw m ≥ 2を使用すると，より良い結果が得られることが分かります。ステージ間のブロック幅の比は大きいほうが結果が良いようです。
* 右図を見るとモデルの検索の効率が RegNetX の方がAnyNetXに対してはるかに高いことが分かります。図を見るとRegNetではサンプル数に限らずモデルの誤差が安定して低いことが分かります。これはデザイン空間としてRegNetがAnyNetXよりもより洗練されたデザイン空間だということですね(単純にデザイン空間に良いモデルがたくさん集まっているようです)

### 3.5.2サイズ

デザイン空間のサイズという観点でRegNetを見てみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/8898c7f9-02e8-b00b-abb8-a1d92eb372cd.png)


* RegNetXの設計では、元のAnyNetXのデザイン空間の次元を16次元から6次元に縮小し、サイズを10桁近く縮小していることが分かります。驚異的ですね。
* 一方でRegNetには，必要最低限の次元で様々な設定に合わせて調整可能なモデルの多様性を残していることが強調されています。

## 3.6 RegNetデザイン空間の分析

前節までにRegNetの概要や基本的な性能について様々な観点で観てきました。この優れたRegNetX デザイン空間をさらに分析することで、一般的にディープラーニングにおいて知られる通念と相反する興味深い結果が得られています。
ここではFLOP数ごとのRegNetモデルの六個のパラメータ間の分布の傾向を分析しています。それぞれ良いモデルを青で網掛けしており、最善のモデルは黒丸でプロットされていて傾向をつかみやすくなっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/ff90da79-221a-a5ba-64c3-1ef5d973f1be.png)


* 左上を見てみると最適なモデルの深さはflop数を通して最適な深さ約20ブロック（60層）で安定していることが分かります。これは、より複雑な処理においてはより深いモデルを使用するというディープラーニングの一般的な通念とは対称的な結果ですごく興味深いですね。
* 上段真ん中の最良のモデルでは、ボトルネック比bが1.0となっておりボトルネックを用いない手法がベストであることを示唆しています。これも一般的にボトルネックを用いた手法がディープラーニングにおいて広く知られている分面白い結果だと言えますね.

# 4.RegNet vs 既存のネットワーク

いよいよRegNetデザイン空間のトップ性能を持つモデルとImageNetの最先端のモデルを比較することでRegNetの実用性を検証していきます。

## 4.1使用するRegNetモデル群

モデルに関してそれぞれの複雑性を持つモデルを見るためにフロップ数別に得られた最良のモデルの分布を示しています。またそれぞれのモデルのflop数やactivationなどモデルの複雑性を表す指標を表にまとめられています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/b1a82d36-1e13-fdce-2e6a-45bfe877bf28.png)


* 図の三段目のグラフを見てみるとFlop数の大きいモデルでは、第3段階のブロック数が多く、最終段階のブロック数が少ないことが分かります。これは標準的なRESNETモデルの設計に似ていることが分かります。
* グループ幅gは複雑さが増すごとに増加していることが分かりますが、大規模モデルでは深さdが飽和していることが分かると思います。モデルが複雑になると一概に層を深くしてもあまり効果が見込めないことを示唆しています。

## 4.2 vs モバイルレジーム
ここではRegNetモデルを既存のモバイルレジーム(flop数が~600MFの低計算領域)との比較を行います。RegNetではflop数が600MFでのモデルを用いています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/0e326d03-a590-95a0-22aa-5a77c03fed2d.png)


* ここに挙げられているほとんどのモバイルネットワークが様々な機能強化が施され長いepoch数を使用しているのに対しREGNETモデルは重み減衰以外の正則化を行わず、かつ基本的100epochでの学習のみを行っていることを考えると驚異的な精度だと言えます。
* このように拡張を行わず短い訓練スケジュールで強力な性能が得られた事で今後の研究のためのシンプルなベースラインとしてRegNetが活用できることが期待できそうです。

## 4.3 vs ResNe(X)t
次に、REGNETXを標準的なRESNETおよびRESNEXTモデルと比較していきます。
。公正な比較のために、同じ訓練セット（標準的なREGNET訓練セット）でREGNETとRESNE(X)Tモデルを比較しています。以下のような結果になりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/31d6dded-a30b-8755-12f8-272e8c2a0c34.png)


下の表については結果がactivation によるグループ分けとflops数によるグループ分けで比較されていることに注意。
* 上の3つのグラフを見るとRegNetモデルはすべての複雑さの指標(flops、params,activations)においてResNet,ResNextと比べてもかなりの性能を発揮していることが分かります。
* 表a,bの1段目等をみるとRegNetモデルが、ResNextモデルが苦手とする低計算領域を含め、幅広い計算領域で性能的にかなり有意であることが分かります。
* アクティベーションはGPUなどのアクセラレータのランタイムに強く影響する可能性があり、結果は特に自動運転車のような推論やトレーニング時間が限られている場合にRegNetは非常に効果的であることが示唆されています。








## 4.4 vs EFFICIENT NET
最後に本研究では最先端のモデルとしてEFFICIENT NET とRegNet モデルを比較しています。EFFICIENT NET の構造を以下に示しておきます。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/55a2ceed-5a1a-9598-fe0f-716da8ea4314.png)

今回も100エポックの学習スケジュールでかつ重み減衰以外の正則化を行っていません。学習にはRegNetの標準的なトレーニング・セットアップを使用しています。比較の結果は以下になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647807/ca3b3f0e-81c9-5e5c-8ebc-14bebd7b918d.png)


* 上段のグラフを参照すると、flops数が低い領域ではでは、EFFICIENT NETはRegNetを凌駕している一方で高いflops数領域ではRegNetが優れた性能を発揮していることが分かります。
* 下の表のflopsとactsの数値に着目するとRegNetでは、activationがflopsの二乗根でスケーリングしていることが確認できます(flopsが4倍になるタイミングでactsが2倍ぐらいになっていることが確認できますね)。一方でEFFICIENT NETでは、activationがflopsに直線的に比例している様子が観察されます(activationがGPUなどのアクセラレータのランタイムに強く影響する因子であることを考えるとflopsの増加に影響され辛いというRegNetの性質は推論や学習時間が限られている状況ではEFFICIENT NETよりも有利であることを示唆しているのかもしれませんね)


# まとめ、感想
* 本論文で提案されたのは新しいネットワーク設計の方法論でした。本研究で得られた結果はネットワークデザイン空間の設計が今後の研究のための有望な手段であることを示唆していることが確認できました。

* RegNetモデルを分析することでこれまでディープラーニングにおいて広く知られていた層の深さやボトルネックによる性能改善についての通念が覆されたのは大変興味深いなと思いました。

* 単純に、これだけのモデルの訓練や比較実験を行っているFaceBookの計算資源すごい。