Quantcast
Channel: 深層学習 (Deep Learning) – Preferred Research
Viewing all 45 articles
Browse latest View live

Chanier Chemistryの大規模グラフのタスクへの拡張

$
0
0

本記事は、2019年インターンシップで勤務した 阿部健信 さんによる寄稿です。

こんにちは。2019年夏季インターンに参加した東京大学の阿部健信です。「Chanier-Chemistryの大規模グラフのタスクへの拡張」というテーマで取り組んだ内容を説明させていただきます。インターン内容のスライドはこちらにアップロードされています。

 

TLDR;

  • Chainer Chemistryで大規模グラフのデータを扱えるようにしました。
  • convolution演算を\( O(V^2) \)から\( O(E) \)にしました。
  • メモリ使用量も抑えて、PyTorch Geometricでは動かないRedditデータセット(23万頂点, 1100万辺)を16GBのsingle GPU上で学習できるようにしました。

 

はじめに

 

graph convolution [1]

画像に対する2D ConvolutionとGraph Convolutionの比較 [1]

入力としてグラフを受け取ることのできる、Graph Neural Network(GNN)という分野が近年注目を集めています。
その注目の高まりから、PyTorch Geometric [2]やDeep Graph Library (DGL) [3]といった高機能で最適化されたGNNライブラリの開発が盛んに進められています。

Chainer Chemistryは、PFNが開発しているGNNのオープンソースのライブラリです。
名前からも分かるとおり、もともと分子など化学データへの適用を目的として作られたもので、qm9などの化学データセットが手厚くサポートされています。一方、他にGNNの研究でよく用いられるSNSなどのネットワークデータのサポートはなされていませんでした。

 

課題内容

今回のインターンのタスクは、Chainer Chemistryでネットワークデータのサポートを行うことです。そのために、大きく以下の2つの内容を行いました。

1. node classificationのサポート
化学分子データなどたくさんの小さなグラフのデータセットに対してGNNは、graph classification/regressionといった、グラフ全体の性質を学習するのに用いられます。
一方、巨大なネットワークデータに対しては、1つのグラフを入力として各頂点ラベルの分類を行うといった異なるタスクに用いられる事が多いです。
[4]で提案されているようなsemi-supervised node classificationへの対応を行いました。
具体的なフレームワークの違いはスライドをご参照ください。

2. 巨大でsparseなグラフのためのGNNの効率的な実装
こちらが今回のインターン内容のメインで、巨大なグラフを動かすためには必要不可欠な内容でした。
以下、\( V \) 個の頂点、\( E \)個の辺からなるグラフを考えます。
Message passingにもとづくGNNでは、各頂点に対して近傍の頂点の特徴量のaggregationの操作を行います。このaggregationの関数はpermutation invariantな様々な関数が用いられ、例えばよく使われるsumの場合は以下の式になります。
\( H’ = AH \)
(\( H \): 頂点の特徴量行列, \( A \): 隣接行列, \( H’ \): aggregateされた特徴量)

既存の実装は全てこの行列演算に基づくものでしたが、これは2つ問題点があります。
1つめは、グラフが疎な際にメモリ的にも実行時間的にも無駄が生じてしまうことです。
2つめは、batch化の際のゼロパディングのオーバーヘッドです。

これらの問題を解決するために、辺の情報を密な隣接行列ではなく、疎なデータ形式で持たせるという事が考えられます。今回のインターンでは、こちらのレポジトリでsparse patternとして紹介されているデータの持ち方を新たに実装しました。
これは辺の情報を\( [2, E] \)のサイズの行列で持つ手法で、PyTorch Geometricでも採用されています。

Sparse patternでは、scatter演算と呼ばれる命令を用いることでaggregation部分の計算量を\( O(E) \)で行うことができます。
またbatch化の際に、複数のグラフを全体として大きな1つのグラフとしてみなすことによってゼロパディングのオーバーヘッド完全になくすことができます。
こちらも、より詳細な手法が知りたい方はスライドをご覧ください。

 

結果

行列演算による既存実装と、sparse patternによる実装の速度比較は以下のようになりました。
まず、3312頂点、4660辺の疎なネットワークグラフに対しては、CPUでは50倍以上、行列演算との相性が良いGPU上でも2倍以上の速度改善が見られました。
また、1つ予想外だったのは、最大でも38頂点という比較的小さなグラフからなる化学データセットに対してもGPU上でも1.5倍程度の速度改善が見られたことです。
これには、バッチ化のオーバーヘッドをなくす工夫が効いていると考えられます。

sparse patternはグラフのconvolution演算に特化して実装されているため速いもののメモリ使用量にまだ無駄があり、Redditデータセット(23万頂点, 1100万辺)を動かすことはできませんでした。
これについては、ChainerのサポートしているCooMatrix演算によるモデルを用いたところsingle GPU (16GB)で動かすことができました。

これまで触れた、既存の隣接行列・sparse pattern・CooMatrixの3パターンについてまとめると、グラフが疎であったりバッチ化のオーバーヘッドが大きかったりすれば基本的にsparse patternが早く、それではメモリが足りない場合はCooMatrixを使うとよい、という結果になりました。
この結果を踏まえて、3つのパターンを場合に応じて使い分けられるように実装しています。
特に、現状のPyTorch Geometricでは動かすことができないredditなどの超巨大なグラフを動かせるという点は、Chainer Chemistryを使うモチベーションの1つになると思います。
新しいモデルを自分で実装したいときに、ChainerでサポートされているCooMatrix演算を普通の行列演算と同じようなインターフェースで直感的に使えるのも魅力です。

 

 

まとめ

今回の成果はChainer Chemistryにマージされています。新しい実装方針に対応しているモデルはまだ多くはありませんが、これからどんどん対応していく予定です。
exampleのコードを動かすことで簡単に巨大グラフ上での学習ができるようになっているので、ぜひ試してみてください。

 

参考資料

[1] https://arxiv.org/pdf/1901.00596.pdf
[2] https://rlgm.github.io/papers/2.pdf
[3] https://rlgm.github.io/papers/49.pdf
[4] https://arxiv.org/pdf/1609.02907.pdf

 


Implicit biasによる正則化効果

$
0
0


本記事は,2019年度インターン生だった東京大学 D1 の中島蒼さんによる寄稿です.中島さんはインターンシップにおいて,畳み込みニューラルネットワークの学習について研究を行いました.この記事は,インターンシップ中に文献調査していたimplicit bias に関するレビューとなっています.


NN の学習はなぜうまくいくのか

畳み込みニューラルネットワーク(Convolutional NN; CNN)は画像処理など様々な分野に応用され,大きな成功を納めています.すなわち,様々なデータについて,訓練データから学習したニューラルネットワーク(Neural Network; NN)を用いて未知のデータについての予測や分類が行われています.このようにNN の学習が上手くいく,すなわち未知データに良く汎化することは経験的には分かっていますが,理論的な説明はまだ完全には成功していません.

NN に限らず学習一般において,訓練データだけから未知なデータについて予測をするのは本来原理的に不可能です.未知のデータに対しては,何が起こってもおかしくないからです.それにも関わらず学習が上手くいくのは,未知のデータに関しても何らかの仮定ができ(帰納バイアス; inductive bias),その仮定を利用することで既知のデータから帰納的に推論が行えるためです.例えば,「データの生成過程は単純であり,学習されたモデルが単純なら未知のデータについても予測できる」と仮定し,過学習を抑制し単純なモデルが学習されるようにする正則化が良く行われてきました.NN の学習が上手くいく背景にも,このような正則化が働いていると考えられます.

しかしながら,現実に使われている NN はパラメタ数がデータより非常に多く,一見すると自由度が高すぎて過学習が起きやすいモデルに思えます.それにも関わらず,なぜ NN の学習は上手くいくのでしょうか?実はパラメタ数が多くなっても,学習された NN は過学習を起こしにくいことが実験的に示唆されています.例えば,Neyshabur ら [1] による実験では,NN のパラメタ数が増えても未知のデータに対する予測精度は保たれていて,過学習が防げていることが分かります.Zhang ら [2] による別の実験でも,\(l_2\)-正則化などの明示的な正則化がなくても学習後のNN の性能は良いことが示されています.これらの結果は,パラメタ数が多く明示的に正則化が行われない状況でも,何らかの形で過学習が抑制される正則化がかかっていることを示唆しています.

この暗黙的な正則化(implicit bias)の正体は何なのでしょうか?Neyshabur ら [1] は最適化アルゴリズムの性質によるものだという仮説を提示しました.例えば,確率的勾配降下法 (Stochastic Gradient Descent; SGD) は連続的にパラメタを更新していくアルゴリズムなため,初期値からあまり離れることができません.そのため,初期値が非常に小さい場合は,学習されたパラメタのノルムが小さくなると期待されます(図1).この小ノルム性が正則化として機能し,未知のデータに対する汎化性能に効いているのだというのが彼らの仮説です.Zhang ら [2] も同様に SGD に起因する小ノルム性に基づいた議論を行っています.

図1:SGD に起因する implicit bias.パラメタ \(\boldsymbol{\theta} = (\theta_i)_{i=1,2,\dots,}\) の数がデータより多い場合,大域的最適解(訓練誤差がゼロになる点)は典型的には複数あり,連続的に存在していることもあります.ゼロに近い初期値からSGD で最適化する場合,このように複数ある大域的最適解のうちで,ノルムが小さいものが得られることが期待できます.特に,行列補完という問題では,ノルムが最小な大域的最適解に到達するといくつかの状況で示されています.

Neyshabur ら [1] の議論は,行列補完という問題で,小ノルム性が良い解につながるという既存の知見に着想を得ています.行列補完は,行列 \(X \in \mathbb{R}^{n \times n}\) の成分の線形和がいくつか分かっているときに,すべての成分を求める問題です.具体的には,行列 \(A^{(\lambda)} \in \mathbb{R}^{n \times n}\) \(\lambda = 1,2,\dots, m\) と線形和 \(o^{(\lambda)} := \sum_{i,j = 1}^n A_{i,j}^{(\lambda)} X_{i,j} \) が与えられたとき,行列 \(X\) を推定する問題になります.行列補完は,線形 NN による回帰を具体例として含んでいて,NN の学習を単純化した問題とも捉えられます.線形話の個数 \(m\) が \(X\) の要素数 \(n^2\) より少ない場合,線形和の条件を満たす \(X\) は複数存在するため,元々の \(X\) を決定することは原理的には不可能です.しかし,\(X\) が低ランクであると分かっている場合には,トレースノルムを最小にする手法が上手くいくことが知られています.すなわち,線形和に関する条件を満たす \(X\) のうちで,トレースノルムを最小にするものを求めることで,元々の \(X\) を良く復元できることが知られています [3].ここで,行列 \(X\) のトレースノルムは,\(X\) の特異値が \(\{\sigma_i\}_{i=1,2,\dots,n}\) であるとき,以下の式で定義されます.

\[ \|X\|_{\mathrm{trace}} = \sum_{i=1}^n \sigma_i\].

Implicit bias は存在するのか

では,最適化手法に起因してパラメタのノルムが小さくなるという implicit bias は本当に起こっているのでしょうか?いくつかのモデルについては,implicit bias があることが理論・実験的に検証されています.例えば,先述した行列補完 [4,5,6] や,巡回畳み込みを行う線形 CNN [7] で証明されています.この記事では,行列補完に関する implicit bias について紹介します.

行列補完

先述した行列補完については,implicit bias の存在が理論的に証明されています.すなわち,明示的にトレースノルムを最小にする正則化を行わなくても,初期値が十分小さいなら勾配法の結果としてトレースノルム最小解が得られると,いくつかの状況で示されています.ここで,勾配法では,線形和についての二乗誤差

\[ \sum_{\lambda = 1}^m \left \| o^{\lambda} – \sum_{i,j=1}^n A_{i,j}^{(\lambda)} X_{i,j} \right\|_2^2 \]

を最小化します.また,最適化するパラメタとしては,\(X = U^\top U\) と分解された \(U\) を用います.この設定の下,Gunasekar ら [4] は,線形和を決めている行列 \(A^{(\lambda)}\) たちが可換であるときにimplicit bias の存在を証明しています.また,Li ら [5] は,線形和についてある種の等方性を仮定することで,implicit bias を示しています.一方で,Arora ら [6] は,より多層な分解 \(X = U_1 U_2 \dots U_n\) についての implicit bias を [4] と同じ設定の下で示しています.また,一般にはトレースノルムではなくeffective rank [8] という量が小さくなる正則化が起こっているのではないかと実験的に議論しています.行列補完は線形 NN による回帰を含んでいたので,これらの結果は線形 NN で回帰をする場合には implicit bias が存在することを意味しています.

まとめ

この記事では,パラメタ数が多く一見すると過学習が置きそうに思える NN であっても,学習アルゴリズムによる implicit bias のため過学習が抑制され,良い汎化性能につながっているという仮説を紹介しました.Implicit bias の存在は,限定的な状況ではありますが,いくつかの例では理論的に証明されていました.現実的な状況では,常にノルムの最小化が行われるわけではなく,アルゴリズムに起因する小ノルム性と勾配の関係で学習されるパラメタが決定されていると考えられますが,このような状況での実験・理論の両面での解析は未だに発展の余地があるものになっています.また,NN の学習を説明する試みは, Neural Tangent Kernel [9] のように他にも存在しています.

最後に,NN の学習という挑戦的で面白い課題に取り組む機会を与えてくださった PFN やサポートしてくださった皆さんにこの場を借りて謝意を表します.特に,メンターの林浩平さんと南賢太郎さんには,日々の議論など様々な面でご支援いただきました.本当にありがとうございました.

参考文献

[1] Behnam Neyshabur, Ryota Tomioka, Nathan Srebro: In Search of the Real Inductive Bias: On the Role of Implicit Regularization in Deep Learning. ICLR (Workshop) 2015.

[2] Chiyuan Zhang, Samy Bengio, Moritz Hardt, Benjamin Recht, Oriol Vinyals: Understanding deep learning requires rethinking generalization. ICLR 2017.

[3] Emmanuel J. Candès, Benjamin Recht: Exact matrix completion via convex optimization. Commun. ACM 55(6): 111-119 2012.

[4] Suriya Gunasekar, Blake E. Woodworth, Srinadh Bhojanapalli, Behnam Neyshabur, Nati Srebro: Implicit Regularization in Matrix Factorization. NIPS 2017: 6151-6159.

[5] Yuanzhi Li, Tengyu Ma, Hongyang Zhang: Algorithmic Regularization in Over-parameterized Matrix Sensing and Neural Networks with Quadratic Activations. COLT 2018: 2-47

[6] Sanjeev Arora, Nadav Cohen, Wei Hu, Yuping Luo: Implicit Regularization in Deep Matrix Factorization. NIPS 2019, to appear.

[7] Suriya Gunasekar, Jason D. Lee, Daniel Soudry, Nati Srebro: Implicit Bias of Gradient Descent on Linear Convolutional Networks. NeurIPS 2018: 9482-9491.

[8] Olivier Roy and Martin Vetterli. The effective rank: A measure of effective dimensionality. In15th European Signal Processing Conference, IEEE: 606–610. 2007.

[9] Arthur Jacot, Clément Hongler, Franck Gabriel: Neural Tangent Kernel: Convergence and Generalization in Neural Networks. NeurIPS 2018: 8580-8589.


総評

今回のインターンシップでは,中島さんには「最適化由来の正則化効果」という機械学習の中でも比較的新しいトピックに取り組んでいただきました.本記事で紹介されている implicit bias は理論研究としての側面が強く,正則化効果が発生することは限られた条件下では理論的に証明されているものの,現段階では工学的応用には結びついていません.しかしながら,implicit bias は最適化によって自動的に生じるため,追加の計算量を必要としない「経済的な」手法であるといえます.また,ニューラルネットワークがどのようにしてその強力な汎化能力を得ているのか,その原理の解明につながる一歩としても興味深い存在です.

PFNインターンでは,このような理論的トピックにも果敢に挑戦できる環境を提供しています.同様の興味を持つ学生の方はぜひ次の機会にご応募ください.

リサーチャー 林浩平,リサーチャー 南賢太郎

ニューラルネット3D表現に対する微分可能レンダラー

$
0
0

本記事は、2019年夏のインターンシップに参加された島田直治さんによる寄稿です。


PFNの2019年夏季インターンシップに参加させていただいた東京大学大学院・情報理工学系研究科・修士2年の島田直治 (http://ut25252.starfree.jp/) です。大学ではCG (コンピューター・グラフィックス) 関連の研究をしています。インターンでの研究テーマとして、CGとの関わりも深い「微分可能レンダラーを用いた3D再構成」を選びました。研究としては、3D表現としてニューラルネット関数を用いることを着想し、これに対する新たな微分可能なレンダリング方法を考案、実装して数値実験を行い3D再構成の精度を先行研究と比較評価しました。

研究内容に関するまとめスライドをこちらに公開しています。このスライドの内容について、以下で解説していきます。


 
また、作成したプログラムはこちらで公開しています。

微分可能レンダラーを用いた3D再構成

CV (コンピューター・ビジョン) の分野で現在精力的に研究が行われているテーマの一つに、たった1枚の画像が与えられた場合にそこに写っている物体や景色の3D構造を把握しようという “single-view 3D reconstruction” があります。


これは、例えばロボットが目の前にある物体を掴む動作(グラスピングと呼ばれる)を行う場合や、自動運転車が歩行者や障害物を把握して回避する場合などに応用が見込まれます。

問題点として、1枚画像からの3D再構成という課題は明らかに条件不足な不良設定問題であり、他の情報を使わない限りは解くことが出来ないということが挙げられます。我々が日常生活において視覚情報からある程度3D構造を把握できるのは、これまでの人生経験で「学習した常識」を使って形状を「予測」しているからです。パソコンに3D再構成を行わせる場合にも、同様に常識を学習させて予測させる手法が考えられます。

3D supervisionによる学習 [2]

画像を入力とし、3D構造を出力とするような予測モデルをニューラルネットワークで表現し、教師3D構造データとの差分を用いて最適化学習すれば出来そうです。実際数多くの研究が行われています[5-10]。このように3D構造を教師データとして用いる学習を3D supervisionと呼びます。

3D supervisionによる学習の問題点としては、教師データとなる3Dデータを大量に必要とすることです。現状では3Dの教師データを大量に用意するというのはあまり現実的な選択肢ではありません。そこで、画像のみを用いて予測モデルを学習させる、2D supervisionな学習方法が模索されています [1-4]。

2D supervisionによる学習 [2]

予測モデルの出力した3D構造から、2Dの画像を生成する (レンダリングと呼ばれる) ことは容易であり、その生成画像と教師データ画像との差分を計算することができます (この場合、教師画像データはどの位置・方向から撮影されたものであるかというカメラパラメータがわかっているものとし、レンダリングの際にはその位置・方向と同じような仮想カメラを設定して画像生成することになります)。出力画像における差分を誤差逆伝播させて、予測モデルのニューラルネットを学習させることになりますが、この時レンダリング部分が微分可能でないと誤差を逆伝播させることが出来なません (直感的には、3D構造を少し変化させた場合に、それに応じて出力画像がなめらかに変化することが要求されます。例えば、三角形メッシュで表現された3D構造をラスタライズの手法によりレンダリングする場合、ピクセル中央にメッシュが入るか入らないかで不連続にピクセル値が変化してしまいます。メッシュの位置変化に対して出力がなめらかに変化しないので、このままでは微分可能ではありません [1])。このように、2D supervisionな学習には微分可能なレンダラーの開発が必要となります。

3D表現と微分可能レンダラー

3D構造の表現方法にはボクセル、点群、メッシュ、ニューラルネットなどがあります。

各3D表現を可視化した図 [8]

それぞれの3D表現(点群以外)について微分可能レンダラーが提案されています。代表的な手法とその利点欠点を以下の表にまとめています。

メッシュ表現を用いる場合 [1][2]は、何らかの初期形状を仮定して、これを変形させることで3D構造の再構成を行うアプローチが主流です (例えば最初に球を仮定してメッシュ構造を作り、目的のティーポットなどに連続的に変形させていきます)。この場合、トポロジー的にことなる物体(穴が空いていたり、複数であったり)を再構成することが難しいという欠点があります。メッシュ表現のもう一つの難点としては、頂点と面からなる複雑な構造のデータを深層学習のフレームワークでうまく扱うことは容易でないことが挙げられます。また、ボクセル表現を用いたDRC [3]では、解像度を上げるにつれて必要なメモリ容量が解像度の3乗で増大するという欠点があります。さらに、ニューラルネット3D表現を用いたSRN [4]では、上2つの欠点を克服しているが、レンダラー部分までニューラルネットで表現することで微分可能レンダラーとしており、その分学習が大変になっているという欠点があります(1つの物体に対して50視点分もの画像を必要としています)。

今回のインターンでは、これらの欠点をすべて克服するような、ニューラルネット3D表現に対する微分可能レンダラーを開発することを目的としました。SRNのようなレンダラー部分をニューラルネットによるものにするではなく、より直接的に行うようなレンダラーを微分可能な形で実現することで達成出来るはずです。これにはボクセル表現のDRCを参考にして拡張することを考えました。まずはDRCについての簡単な解説を行います。

Differentiable Ray Consistency (DRC) [3]

DRCでは、以下のようなパイプラインで3D再構成とレンダリングを行っています。簡単のため、教師データとして白黒のmask画像を用いる場合に限定します。

3D再構成のパイプライン [3]

まず、RGBの画像 (64×64 ピクセル) をEncoder-DecoderによりVoxel 3D表現 (32×32×32) に変換します。次にカメラから見てレイの通り道にVoxelが存在すれば黒、しなければ白といった形でレンダリングします。

微分可能レンダリングとLoss関数 [3]

ただし、Voxelが存在するかしないかという2値表現では微分可能なレンダリングにはなりません。そこで、Voxelには曖昧な中間状態を許すことにし、[0,1]の実数値でレイの透過確率を表すものと定義します。つまり、レンダリング画像の各ピクセルには、レイが通過する全voxelの透過確率をかけ合わせた値が出てくることになります。ここで、Loss関数を教師画像と出力画像の各ピクセル値の絶対値差分の合計値と定義すると、各voxel値について微分可能であることが示されます(論文参照)。つまり、微分可能レンダラーとなっており、Encoder-Decoderのネットワークを学習させて3D再構成を行うことができます(上図参照)。

DRCによる3D再構成の例 [3]

実際に学習したモデルで3D再構成を行った結果はこのようになります(上左図)。また、教師データとしてmask画像だけでなくRGB画像を用いる場合にもLoss関数を拡張することで対応出来ます(上右図)。

Our algorithm (DRS)

DRCでの3D表現をvoxelからニューラルネットに置き換えることを考えます。

voxel表現というのは、323のメモリにそれぞれ一つの実数が格納されていて、(x,y,z)のindex値を指定するとそれに対応する値が一つ返ってくるようなものと考えることができます。これは一つの関数とみなすことが出来るため、上右図のような3入力-1出力のニューラルネットによる非線形関数で置き換えることが可能です。ニューラルネット表現に置き換えることで、一つ一つの値を保持するvoxelよりメモリ効率が大幅に改善することが見込まれます。さらに、入力のx,y,zには連続的な座標の実数値を直接使うことが出来るようになることで学習やレンダリングの自由度が高まり、またデータ点間が関数の滑らかさにより自動的に補完されるため、表面形状が綺麗に再現されるというメリットがあります。これらの特徴は、3D supervisionでの文脈で近年盛んに行われているニューラルネット表現の研究において確認されています [8-10]。

レンダリングについては、カメラから出たレイを適当な間隔で区切ってサンプリングし、サンプリング点の座標をニューラルネット3D関数に入力することで、その点でのレイ透過確率を計算します。これをかけ合わせた値をピクセル値として扱い、Loss関数はDRCの場合と同じように定義することで微分可能となります (上図)。

全体のパイプラインとしては上図のようになり、Encoder-Decoderはニューラルネット3Dの重みパラメータを出力するようになっています。

Results

学習条件をDRCと同様な設定で行いました。データセットにはshapenet V1を用い、car (chair)クラスについては、全7000 (5000) instancesをおよそ7:1:2の比率でTrain,Valid,Testに分け、教師データとしては各instanceにつきレンダリング画像5枚を使用します。

まずは、ニューラルネットによる3Dの学習および表現力をテストする目的で、1 instanceのみの学習を行いました。つまり、ある特定の1物体に限定して、その物体を様々な角度から見たRGB画像およびシルエット画像を用いてネットワークを学習し、学習データには含まれないような未知視点からの画像を再現出来るかどうかをテストします。

左から順に、InputのRGB画像、学習後に未知視点からのレンダリングを行った結果(Gt, 出力, 差分)、3D構造をスライスして可視化した図(ニューラルネット3Dを一定のthreshold値でvoxel化, 教師3Dデータ, 差分)、3D再構成の精度(voxel IoU)を表しています。DRCと比べても十分な精度が出ています。

次に、複数instanceでの学習を行いました。

3D再構成のQualitativeな結果 (見た目)とQuantitativeな結果 (平均精度) を示しています。DRCと同等の精度が得られました。つまり、ボクセルの予測と同等の精度を保ちつつ、メモリ使用量の問題を解決したことになります。さらに、同じくニューラルネット表現を用いたSRN [4]と比べても、学習に必要な視点数(1つの物体あたりに用いることが出来る画像数)が50→5枚へと大幅に削減することに成功しました (SRNでは3D再構成の精度を計測することが困難であるため、精度の比較に関しては行っていません)。

今後の課題

今後の課題としては、

  • 3D再構成の精度を上げる。
  • メモリ使用量の比較。
  • RGB画像での3D再構成実験。
  • DRC以外の先行研究と同条件での比較。

などが考えられます。

引用文献

微分可能レンダラー (2D supervision)

[1] “Neural 3D Mesh Renderer” (Kato+ CVPR 2018)
[2] “Learning View Priors for Single-view 3D Reconstruction” (Kato and Harada CVPR 2019)
[3] “Multi-view Supervision for Single-view Reconstruction via Differentiable Ray Consistency” (Tulsiani+ CVPR 2019)
[4] “Scene Representation Networks: Continuous 3D-Structure-Aware Neural Scene Representations” (Sitzmann+ NIPS 2019)

3D supervision (メッシュ、ボクセル、点群)

[5] “PM-GANs: Discriminative Representation Learning for Action Recognition Using Partial-modalities” (Wang+ ECCV 2018)
[6] “Octree Generating Networks: Efficient Convolutional Architectures for High-Resolution 3D Outputs” (Tatarchenko+ ICCV 2017)
[7] “A Point Set Generation Network for 3D Object Reconstruction From a Single Image” (Fan+ CVPR 2017)

3D supervision (ニューラルネット関数)

[8] “Occupancy Networks: Learning 3D Reconstruction in Function Space” (Mescheder+ CVPR 2019)
[9] “DeepSDF: Learning Continuous Signed Distance Functions for Shape Representation” (Park+ CVPR 2019)
[10] “Learning Implicit Fields for Generative Shape Modeling” (Chen and Zhang CVPR 2019)


メンターからのコメント

メンターを担当したPFNの加藤と安藤です。CGのスキルを活かしつつ深層学習のスキルを高めたい、という希望をもとに両者が交差するテーマである新規な微分可能レンダラーの開発を担当していただきました。自ら関連研究をサーベイし読み込み手法を開発してゆく能力が高く、本人の主軸とする分野から少し離れるにも関わらずメンターとしてのサポートは最小限で済み、さすがと思わせられました。

ニューラルネットワークによる3D形状の表現は近年急速にホットになりつつあるトピックですが [8, 9, 10]、そのレンダリングと深層学習との接続に関してはほとんど前例がない状況です。その中で、素直なアルゴリズムによって、複雑な学習 [4] を用いずともボクセルによる先行例 [3] と同等程度の性能が出せるという発見は大きな意味があると考えています。一方で、インターンは一ヶ月と少しという短い期間であったため細部の調整は十分ではなく、数値性能の向上や色の扱いなどまだまだ発展の余地があり、もっと長期間取り組めばさらに面白いものが見られたのでは、という無念さも残るインターンでした。

分散深層学習における耐故障性と可塑性

$
0
0

ImageNetを15分で学習して以来 [1]、Chainerと沢山のGPUを使って深層学習を並列化し、一回の学習に必要な時間を大きく短縮することができるようになりました。その後、ImageNetの学習は深層学習における並列化 ・高速化のデファクト標準ベンチマークとなりました [2]。それと同時に、深層学習の並列化および大規模化は進み、複数GPUどころか複数ノードで学習することは当たり前のこととなりました。深層学習の計算が大規模化し所要時間はどんどん短くなりましたが、一般的にはノードが増えれば増えただけ部分故障の確率は高くなります。また、大規模なクラスタでは個々の分散ジョブをスケールアウトしたりスケールダウンする機能、つまり可塑性をもとにした計算資源のやりくりが運用上重要になってきます。そこでChainerを拡張し、分散深層学習に耐故障性だけでなく可塑性を導入する実験を行いましたので、ここで報告したいと思います。また、実験に利用したライブラリを eChainer として公開しました [3]。

深層学習の計算が大規模化し所要時間はどんどん短くなりましたが、一般的にはノードが増えれば増えただけ部分故障の確率は高くなります。そこで、部分故障があっても計算が継続できるような仕組みがあれば、このような問題に頭を悩ませるようなこともなくなります。

また、ノードが途中で減っても動作継続できるということは、大抵の場合はノードを途中で追加しても動作継続できるということです。これができると、学習を実行中にGPUを追加することで学習を加速することができます。これは、大規模なクラスタ環境ではとてもメリットが大きいことで、例えば、ジョブ終了や失敗などが原因で、クラスタ上の別の場所で余っていた計算資源を動的にジョブに追加することで、ジョブを早く終わらせることができるようになり、クラスタ上のリソース配分の柔軟性が増します。リソース利用効率を上げることができ、同じ計算基盤への投資でより多くのリターン(よいモデル、よい計算結果)を得ることができるようになります。動的に計算資源と追加したり減らしたりできることを、そのシステムに可塑性(Elasticity)があるといいます。 eChainer というプロトタイプ名は、 Elastic Chainer を短縮してつけたものです。

基本設計とシステム構成

Chainerには、分散学習用の内部コンポーネントが含まれており、ChainerMN という名前がついています。これを使ったこれまでの分散深層学習については、弊社鈴木の解説[4] や、その肝となる AllReduce の計算についてはインターンの上野さんの寄稿 [5] をご覧ください。ChainerMNの Communicator [6] [7] は、MPIにおけるCommunicatorをPythonのインターフェースクラスとして表現し、それを実装したものです。ChainerMNにおける分散深層学習は、基本的に全てこのCommunicatorを使っています。Communicator の実装クラス PureNcclCommunicator を通じて NCCLを利用した場合のイメージを図1に示します。NCCLは、NVIDIAが開発しているGPU専用の集団通信ライブラリです[8] 。ChainerMNでは、CuPyのCythonの実装を通じてNCCLを利用します。

図1: Chainerを使った分散深層学習の内部コンポーネントの構成図
図1: Chainerを使った分散深層学習の内部コンポーネントの構成図: PureNcclCommunicator はCuPy を通じてNCCLを呼び出す

いくつかあるCommunicatorの実装は、いずれもシステムの部分故障を前提としたものにはなっていません。最も利用されているのは PureNcclCommunicator ですが、その内部で利用しているNCCLが 2.3 まではシステムの部分故障を前提としたものになっていませんでした。例えば ncclAllReduce() の集団通信に参加しているプロセスがひとつでも故障すると、他のプロセスで呼ばれた ncclAllReduce() は永遠にブロックされたままになります。

このとき、Communicatorの内部で起きていることを詳しく解説します。ChainerMNは内部的にはCuPy経由で ncclAllReduce() を利用します。CuPy は Cython 経由で全ての関数を呼び出します。ところがPythonのC拡張の仕様では、ユーザーから送られるUnixシグナルはPythonが設定したシグナルハンドラによって擬似的にブロックされた状態になり、シグナルに対するコールバックはPython上の実行に戻ってから呼ばれます [9] 。つまり、ncclAllReduce() の呼び出しが戻らない限りは SIGTERM等を全く受け付けず、ずっと ncclAllReduce() の中で止まったままになります。集団通信に参加しているプロセスが一つでも故障すると、その集団通信はずっと終わらないままブロックするということになります。この様子を図 2 に示します。


図2: AllReduce を呼んでいる最中はSIGTERMが擬似的にブロックされ、 ncclAllReduce() 中のループから抜け出すまでユーザー側で処理をすることはできない。ncclAllReduce() は故障プロセスを含む他のプロセスからの通信を待ち続ける。

実用的には、集団通信がハングしていることを検知して、シグナルハンドラを設定できないSIGKILL等で各ノードでひとつひとつ手動でkillしてまわらなければならなくなります。 OpenMPIはこの状態は検知してジョブを強制終了するといったことはできませんから、ジョブが進行しないまま半永久的に計算リソースを占拠し続けることになります。これが、 ncclDestroy() のAPI導入前の状態でした。

ちょうどよいタイミングで、昨年の今頃のことでしたが、NCCL 2.4から導入される ncclDestroy() というAPIをリリース前にテストすることができました [10]。この関数は、NCCLを使ったアプリケーションに耐故障性を導入するために、最小限でありながら十分な機能追加です。個人的なことですが、NCCLの開発者とメールをやり取りしてこのアイディアを聞いたときはに本当に感心しました。わたしが一年近く悩んでいたこの問題について、既存のコードに影響を与えず問題をエレガントに解決するベストなアプローチだったからです。

ChainerMNを利用した分散深層学習が全てCommunicatorに立脚しているということは、これさえ故障に耐えうる仕様になれば、ChainerMN上の分散深層学習は全て耐故障性を備えることができるようになります。ということで、まずはCommunicatorに耐故障性をもたせるためにncclDestroy() を導入することを目指します。 ncclDestroy() は、任意のタイミングで特定の ncclCommunicator (混乱しそうですが、これはNCCLで内部的に利用するオブジェクトです)を破壊して、そのタイミングで実行されていたあらゆる集団通信を強制終了させることができます。つまり、 ncclAllReduce() が故障したプロセスからの永久にこないメッセージを待っているときに横から強制終了させることができるということです。これによって、NCCLの集団通信中にブロックされた状態から戻れなくなるという問題が解決できます。あとは、NCCLを利用するアプリケーションが、どのようにシステムとして故障を検出し、 ncclDestroy() によってどのようにncclAllReduce() の強制終了をハンドリングするかという問題になります。

まず、ノードの死活監視のために etcd を導入します [11]。Chainerを使っている学習プロセス内で etcd クライアントを別スレッド上で動作させ、このスレッドが etcd とKeepAliveをします。これによって、システムの基本構成は図3 のようになります。


図3: eChainer を使った学習プロセスの基本構成:
Communicator 内にetcd を用いた故障検出器を追加した。

このように死活監視するチャンネルを設けることによって、ひとつのプロセスの故障を全体に通知することができるようになります。具体的には、各プロセスは etcd の特定のprefix上にエフェメラルファイルを作って、それをお互いに監視することで死活監視とします。エフェメラルファイルとは、クライアントとサーバーの双方が正常に動作してKeepAliveが維持されているときにだけ保持されるファイルです。例えばクライアントが故障すると、一定時間後にこのエフェメラルファイルが消滅し、他のプロセスはこのエフェメラルファイルが消滅した通知を受け取ることができます。実はここが分散システムで最も難しい故障検出の問題を解決している部分なのですが、etcdを使うことで複雑な実装も簡単に済ませることができました。

この通知をトリガーにして、全てのプロセスは学習(および集団通信)を一旦停止します。このときに ncclDestroy() を利用します。これによって動作中の ncclAllReduce() と、それを利用していた NCCL のリングは全プロセスで破棄されます。ncclAllReduce() は同期的な集団通信で、全てのプロセスが同じ iteration 中にいることが保証されていますから、このように破棄されたことをPythonの例外によって表現することができます。これで、アプリケーションからも故障を検出をできるようになりました。その様子を図4 に示します。


図4: プロセス故障の検出はファイル削除のイベントとして全ノードに通知され、それをもとに ncclDestroy() が呼ばれる。ncclDestory() であれば、通信待ちの ncclAllReduce() を強制的に終了させることができる

このようにノードの離脱を etcd のイベントとして表現しましたが、実は、ノードの追加も同様に etcd のイベント(エフェメラルファイルの追加)として表現することができます。同様に、 ncclDestroy() を発行してNCCLのリングを破棄して、あらたに追加されたノートを加えてNCCLのリングを再構築することにより、分散学習の動的なスケールアウトを実現することができます。

しかしながら、NCCLのリングの破棄と再構築はCommunicator の size や rank の変更を必要とします。つまり、全体のプロセス数が変わった場合は、配った学習データを割り当てなおしたり、学習率のスケールルール[12] に従って、改めて学習率を設定する必要があります。また、新しく追加されたプロセスはモデルのパラメータやオプティマイザのパラメータなどの学習の途中状態を知りませんから、学習を再開するためには、これらの情報を別のプロセスのメモリから集めてやる必要があります。これらの処理はなるべく共通化してユーザーが書かなくてもよいようにしたいところでしたが、今回の実験ではImageNetにフォーカスして学習スクリプト上に作り込むことにしました。基本的には、プロセス増減の例外を受けて、

  1. 学習データの割当をやり直す
  2. Optimizer やモデルのオブジェクトを作り直す
  3. ChainerのTrainerを作り直してプロセス間で配り直す
  4. 学習を再開する

という処理をフラットに while ループの中に実装しました。詳しくは eChainer に付属するサンプルコードをご覧ください。

ここまで基本的な設計を解説しましたが、実はこのアプローチには難しい問題がひとつあります。ノードの追加や故障は、現実的にはそうそう起こるものではありませんが、追加や故障を受けた際に計算を再開してよいかどうかの条件は自明ではありません。以下は簡単な例ですが、

  • 分散深層学習を実行するプロセス数が大きく減ると、学習率の調整によって学習自体は続けることができるが、学習にかかる時間は大きく延びる。例えば48時間で終わると思っていた学習が、途中でプロセスが大きく減って残りETAが64時間まで伸びてしまった。この学習を途中で停止してやり直した方が早くはないか?
  • 分散深層学習を実行するプロセス数が増えると、学習率の調整によって学習を続けることはできるが、例えばバッチサイズが64000まで増えてしまったら、32000のときとは別の学習レシピが必要になる(LARS [13] 等)。バッチサイズをある範囲でコントロールしたい
  • ノード追加のタイミングがすこしバラバラになってしまって、 8プロセス(8GPU)追加するときに1回ずつ認識されてしまい、計8回の例外が投げられてしまい、NCCLのリング再構築やモデルの再同期など重い処理が不必要に走ってしまうと非効率
  • ある学習レシピは32プロセス8GPUでしか動作しない(バッチサイズなどのパラメータが慎重に設計されている)。重要な学習なので、1プロセスの失敗で止まることなく、自動的に動作継続はしてほしいが、1プロセス減った状態で勝手に計算を再開させることなく、再度計算リソースが追加するまで待ちたい
  • ジョブの進捗が8割を過ぎていたら頑張って動作継続をしてほしいが、5割程度の進捗ならまた別途やり直してもよい

といったことがあります。こういった、計算資源の増減に対する複雑な対応や要件をすべて単一の実装で実現したり、設定ファイルで記述させるといったことは簡単ではありません。そこで、Chainerが持っている Define-by-Run という考え方[14]に触発されて、私もこれをDefine-by-Runで実現することができないかと考えました。

Define-by-Run Re-configuration

Define-by-Runの基本的な考え方は、 (1) やりたいことをプログラムで表現する (2) そのプログラム表現と実行が 1:1 で対応する、というものです。こうやって書くと当たり前のことに見えますが、これによって、高い表現力と、任意の条件判断を追加できる、失敗した箇所がスタックトレースと対応するなどのメリットがあります。 Chainerではニューラルネットワークの入力、途中の forward 処理、出力を表現して実行することが目的でしたが、 eChainer では計算資源の増減と、それに対してジョブがとるべき対応を表現して実行することが目的となります。 eChainer では、これを ScalePolicy() の継承クラス として実装してCommunicatorに渡すことで、学習時にポリシーが評価および実行されるようになります。ScalePolicy()を継承して、ok2run(self, hosts, initial) というメソッドを実装するだけです。例えば、Fail-stopといわれる最も簡単なポリシーを表現するには、以下で十分です。

class FailStop(echainer.ScalePolicy):
    def __init__(self, n): self.n = n
    def ok2run(self,  hosts, initial):
        if len(hosts) == self.n: return “ok”
        elif initial: return “wait”
        else: return “fail”

ok2run() は、計算を再開してよければ “ok” を返します。規定の条件を満たすまで待機するべきであれば “wait” を返します。このジョブを失敗として終了するには、 “fail” を返します。このオブジェクトはジョブの実行中は保持されますから、Optimizerなどの任意の状態や条件をこのオブジェクトのメンバーとして持たせることによって、上記で述べたような条件を好きなように設定することができます。ユーザーは計算の再開、待機、中止を決定する任意の条件をプログラムによって表現することができます。

このPolicyとetcdのアクセス先を渡すことで、ChainerMNのCommunicatorと互換で、耐障害性のあるCommunicatorを作ることができます。

policy = YourOwnCoolScalePolicy(...)
etcd = “etcd://e1:2379,e2:2379,e3:2379/your-job-name”
listen = “10.0.0.1:9889”
comm = echainer.NcclCommunicator(policy, etcd, listen)

実験

この eChainer を使って、実際にImageNetの学習をスケールアップさせたり、スケールダウンさせる実験を行いました。

ChainerCVの example にあるImageNetの学習スクリプトをベースにしたので、学習レシピは [12] と同じです。実験に用いた環境はMN-1b上のKubernetesを使ったコンテナです。ncclAllReduce は InfiniBand HDR上で動作しますが、その他の通信は 10GbE上のTCP/IP上で行われます。2-4 ノード(16−32GPU)の間で増減する実験をしました。ノード故障は簡単に SIGTERM で行われています。ScalePolicy は MinMax というものを実装しました。プロセス数が一定範囲内にある限り動作を継続するというものです。

まず、ノードの増減がなく正常に終了した学習の進捗です。以下の図はいずれも横軸に実時間、縦時間にImageNetの学習エポックをプロットしています。


図5: さまざまなGPU数でImageNet を学習した際の速度

GPUの数に応じて学習の速度(線の傾き)が変化しているのがわかります。以降のグラフもそうなのですが、 epoch が離散的に変化するために線が破線状になっています。次に、学習の途中で2ノード(8GPU)追加してみます。


図6: 学習途中でノード追加した場合の学習速度の変化

緑の線と、茶色の線がそれぞれ別のタイミングで途中ノードを追加したものです。追加の前後でも同様に学習が動作していることがわかります。それぞれ、20000秒付近、34000秒付近で学習の速度が変化し、32GPUと同じ速度になっていることがわかります。また、このときのvalidation set に対する最終精度は 76.4% でした。1回だけの測定ですが、元の論文[12]と同程度の精度がノード追加にも関わらず再現できました。

次に、ノードが途中離脱した場合です。32GPUと16GPUで実行していたジョブを、それぞれ途中でプロセスを落とすことでGPU数を減らしています。


図7: 学習途中でノード削除した場合の学習速度の変化

赤線では、GPU数が32から16に途中で減っています。同じタイミングで、線の傾きも16GPUのそれと同じになっています。同様に、16から8に減った緑線の場合でも8GPUと同じ速度に傾きが落ち込んでいることがわかります。また、プロセスが離脱する前後でもジョブ全体が落ちることはなく動作継続することができました。このときのvalidation set に対する最終精度は 76.0% でした(1回測定)。スケールダウンのときと比較して 0.4% 低下していますが、これが常に下がるものなのかどうかは原因も含めて今後調査する必要があります。

このように、分散深層学習のジョブを実行中に動的に計算資源を追加することにより学習の進行速度を上げたり、ジョブを止めることなく動的に計算資源を一部取り除くことができるようになりました。

関連研究および関連システム

分散深層学習の先駆けであるDistBeliefはもともとGoogleの大規模分散システム上で耐障害性を持って動作していました[15]。この系譜を受け継ぐ TensorFlow はパラメーターサーバーを持つモデルで、パラメーターサーバー以外のワーカーノードが故障しても、その部分のミニバッチを別のノードで再計算すれば済みました。これは非同期(Asynchronous) SGD といわれる分散方式で、始めから耐障害性を考慮されたものです。しかしながら、これにはパラメーターサーバーに負荷が集中してボトルネックになりやすい、古い勾配を使って学習してしまうなどの問題がありました。
ChainerMNを始めとするMPIベースの分散深層学習では、同期(Synchronous) SGDといわれる分散方式を採用し、HPC技術の恩恵を受けて上記の問題点を解決し、深層学習の高速化に寄与しました。しかしながら、HPC技術の恩恵を受ける代わりに、非同期SGDが持っていた耐障害性を失うこととなりました。
HPCの分野でも、もちろん同期的な集団通信に耐障害性を与える研究が行われています。中でもULFM (User Level Fault Mitigation) [15][16] はMPIのWGで精力的に標準化が検討されています。これはMPIに障害のハンドリングするAPIを追加しようとするものです。

まとめ

分散深層学習に耐障害性と、可塑性を導入する実験的なライブラリ eChainer と、その実験結果をまとめました。特にプロセス数が増減したときのハンドリングをどう行うかについて、 Define-by-Run の考え方に基づいた表現方法を提案しました。

[1] T. Akiba, S. Suzuki and K. Fukuda, “Extremely Large Minibatch SGD: Training ResNet-50 on ImageNet in 15 Minutes,” arXiv:1711.04325, 2017.
[2] https://mlperf.org
[3] eChainer
[4] 分散深層学習とChainerMNについて
[5] 分散深層学習を支える技術:AllReduceアルゴリズム
[6] 分散深層学習パッケージ ChainerMN 公開
[7] Chainer Doc: Communicators
[8] NVIDIA Collective Communications Library (NCCL) https://developer.nvidia.com/nccl
[9] signal — Set handlers for asynchronous events
[10] Preliminary abort mechanism and an API for querying asynchronous errors.
[11] https://etcd.io
[12] P. Goyal, P. Dollár, R. Girshick, P. Noordhuis, L. Wesolowski, A. Kyrola, A. Tulloch, Y. Jia and K. He, “Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour,” arXiv:1706.02677, 2017.
[13] Y. You, I. Gitman, and B. Ginsburg. Large Batch Training Of Convolutional Networks. arXiv:1708.03888, 2017.
[14] Tokui, Seiya, et al. “Chainer: A Deep Learning Framework for Accelerating the Research Cycle.” Proceedings of the 25th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. ACM, 2019.
[15] ULFM 2.0 Release
[16] George Bosilca , Aurelien Bouteiller , Amina Guermouche , Thomas Herault , Yves Robert , Pierre Sens , Jack Dongarra, Failure detection and propagation in HPC systems, SC’16.

深層学習モデルを用いたノンパラメトリック回帰問題に関する最近の研究

$
0
0

図1:ReLU-MLPによる2次関数の近似.このネットワークを用いるとHölder関数を効率的に近似できる([Yarotsky, 2017]より引用)

 

深層学習モデルはこれまで様々な機械学習タスクにおいて成功を収めてきています.それに触発され,深層学習モデルの成功要因を理論面から解明する試みが盛んに行われています.特に深層学習の理論研究(特に統計的学習理論と呼ばれる分野)では,主に3つの問題提起がなされ,それに対する様々な回答がなされています [Poggio et al., 2016]:

  • 表現能力:深層学習モデルはどんな関数を(効率的に)推定できるのか [Cybenko, 1989; Telgarsky, 2016; Eldan and Shamir, 2016; Sonoda and Murata, 2017]
  • 最適化:なぜ(確率的)勾配法が「良い」解を見つけることができるのか [Li et al., 2017; Jacot et al, 2018; Du et al., 2018; Allen-Zhu et al., 2018]
  • 汎化能力:深層学習モデルは多数のパラメータを持つにも関わらず,なぜ過学習せずに汎化するのか [Hardt et al., 2016; Belkin et al., 2018; Arora et al., 2018]

(関連文献を網羅することはできませんので代表的な研究や最近注目されている論文のみを挙げました,それぞれのトピックに興味のある方は上記の論文の関連研究を参照ください.また,[Suzuki, 2019b]も参考にしてください)本稿では,ノンパラメトリックな回帰問題における,表現能力と汎化性能に関する一連の研究を紹介します.

 

問題設定

問題設定を正確に記述するため,いくつか記号を導入します.XD次元の入力とし(簡単のため各次元は[0, 1]に値を取るとします),出力YY=f(X)+ξという関数で与えられると仮定します.ここで,fは推定したい対象の未知関数,ξは適当な仮定を満たすノイズ(例えばガウシアンノイズなど)です.また,回帰の問題を考えるので,Yは1次元の実数値とします.ここでの目標は,fに適当な仮定(例えば関数の滑らかさなど)を置いた時,未知分布から独立同分布でサンプリングされた入出力の組(Xi, Yi)(i=1, …, N)から,fを推定することです.

 

深層モデルのミニマックス最適性

Yarotskyは,未知関数fがHölder関数というある種の滑らかさを持つ関数である場合,ReLUを活性化関数として持つ多層パーセプトロン(ReLU-MLP)が,効率的に(つまり,少ないパラメータ数で)fを近似できることを示しました [Yarotsky, 2017].この論文の証明技法はReLUを用いた深層モデルのノンパラメトリック回帰に関する一連の研究で頻繁に利用されています(図1).Yarotskyの結果を用いて,Schmidt-Hieberは,未知関数fがHolder関数である場合に,ReLU-MLPは(logのオーダーを無視して)「ミニマックス最適」という,未知関数の推定に関するある種の理論的限界を達成できることを示しました(ミニマックス最適性は推定量の「良さ」を判定する基準で,統計学などでよく利用されます) [Schmidt-Hieber, 2017].Schmidt-Hieberは,その最適性を達成できるReLU-MLPの深さや幅も決定しています(ただし,それには未知関数fがどの程度滑らかかという情報が必要です).畳み込みニューラルネットワーク(CNN)に関しても,活性化関数がReLUの場合,ReLU-MLPと同じオーダーのパラメータ数で同じ関数を表現できることも示されています [Petersen and Voigtlaender, 2018] (正確に言うとReLU-MLPで表現した関数の同変バージョンを表現します).インフォーマルに言えば,ネットワークのパラメータ数のオーダーが同じ場合,ReLU-CNNはReLU-MLPと少なくとも同等以上の表現能力と予測性能を持つことを示しています.

 

深層モデルの優越性

Yarotsky, Schmidt-Hieberによる解析はノンパラメトリック回帰問題における深層モデルのミニマックス最適性を示したという点で画期的でした.しかし,カーネル法など他の機械学習の手法でも,同様にミニマックス最適性が達成できることが知られています.そのため,これだけでは「なぜ深層学習が他手法に比べて良いか」に対する回答としては不十分でした.すると次に「どのような未知関数ならば,深層モデルの構造が他手法を優越するか」という問いが自然に生じます.これに関しては,日本の研究グループが成果を挙げています.例えば未知関数が「区分的に滑らかな関数」[Imaizumi and Fukumizu, 2017],「Besov関数」[Suzuki, 2019; Suzuki and Nitanda, 2019],「ステップ関数」[Hayakawa and Suzuki, 2019]の場合,深層モデルはミニマックス最適性を達成できるが,カーネル法などの手法は一般には達成できないことが示されています.これらの解析に共通するのは,真の関数がある種の不連続さを持つ場合,深層モデルがその他の手法を優越しやすいという結果が得られているということです(図2).

図2:区分的に滑らかな関数の例.個々の小領域では滑らかであるが,領域の境界で不連続点を許容する ([Imaizumi and Fukumizu, 2017] より引用)

 

ResNet構造を持つ深層モデルの最適性

Yarotsky, Schmidt-Hieberの解析のもう一つの欠点は,理論的限界(ミニマックス最適)を達成できる最適なネットワークを得る手段が現実的とは言いづらい点です.理論的に最適なネットワークは「ネットワークが持てる最大の非ゼロパラメータを固定し,その非ゼロパラメータ数で実現できるネットワークのうち経験誤差を最小化するもの」として得られます(幅や深さなどのアーキテクチャは一つ固定します).具体的には,全パラメータのうち 100 × O(N^{-α})%のパラメータのみが非ゼロでなければなりません.ここで,Nはサンプル数,αは未知関数の滑らかさによって決まる正の定数です.これは,確率的勾配降下法(SGD)など,パラメータがスパースにならない一般の深層学習の訓練を説明できていません.この問題に関しては,通常のReLU-MLPやReLU-CNNではなく,ResNet構造を持つネットワークを考えると,そのような不自然なスパース性を仮定せず,単純に経験誤差最小解を取るだけでミニマックス最適性を達成できることを我々は示しました [Oono and Suzuki, 2019].証明においてキーとなるのは,Yarotskyの方法で得られる最適なネットワークはスパースなのですが,ランダムに非ゼロの重みの配置されているのではなく,「ブロックスパース」とでも呼ぶべき特殊なスパース構造を持っていることです.その構造をうまく利用すると,ミニマック最適性を保ったまま,ブロックスパースなネットワークを密なResNet構造を持つネットワークに変換することができます(図3).この論文に関しては,先日開催されたICLR/ICML2019読み会で発表しましたので,そちらのスライドもご参照ください:

 

図3:ブロックスパース構造を持つネットワークからResNet型のネットワークへの変換.前者のミニマック最適性から後者のミニマック最適性が導かれる.

まとめ

本エントリでは,深層学習の理論研究の一例として,深層モデルを用いたノンパラメトリック回帰問題に関する研究を紹介しました.深層モデルの理論解析は,日進月歩で進んでおり,この1, 2年だけでも,「Neural Tangent Kernel(NTK)」「過剰パラメータネットワーク(overparametrized)の大域解への収束」「二重降下(double descent)現象」「ネットワークの内在的次元(intrinsic dimension)による汎化性能改善」「グラフネットワーク(もしくはそれを一般化した不変ネットワーク)の表現能力」などさまざまなトピックが議論されています(機会があれば自分の勉強のためにもこのようなトピックについて解説したいと思っています).本エントリがそのような理論研究の理解の一助になれば幸いです.

参考文献

  • [Allen-Zhu et al., 2019] Zeyuan Allen-Zhu, Yuanzhi Li, and Zhao Song. A convergence theory for deep learning via over-parameterization. In Proceedings of the 36th International Conference on Machine Learning, volume 97 of Proceedings of Machine Learning Research, pages 242–252, 2019. PMLR.
  • [Arora et al., 2018] Sanjeev Arora, Rong Ge, Behnam Neyshabur, and Yi Zhang. Stronger generalization bounds for deep nets via a compression approach. In Proceedings of the 35th Interna- tional Conference on Machine Learning, volume 80 of Proceedings of Machine Learning Research, pages 254–263. PMLR, 2018.
  • [Belkin et al., 2018] Mikhail Belkin, Daniel Hsu, Siyuan Ma, and Soumik Mandal. Reconciling modern machine learning and the bias-variance trade-off. arXiv preprint arXiv:1812.11118, 2018.
  • [Cybenko, 1989] George Cybenko. Approximation by superpositions of a sigmoidal function. Mathematics of control, signals and systems, 2(4):303–314, 1989.
  • [Du et al, 2019] Simon S. Du, Xiyu Zhai, Barnabas Poczos, and Aarti Singh. Gradient descent provably optimizes over-parameterized neural networks. In International Conference on Learning Representations, 2019.
  • [Eldan and Shamir, 2016] Ronen Eldan and Ohad Shamir. The power of depth for feedforward neural networks. 29th Annual Conference on Learning Theory, volume 49 of Proceedings of Machine Learning Research, pages 907– 940, 2016.
  • [Hardt et al., 2016] Moritz Hardt, Ben Recht, and Yoram Singer. Train faster, generalize better: Stability of stochastic gradient descent. Proceedings of The 33rd International Conference on Machine Learning, volume 48 of Proceedings of Machine Learning Research, pages 1225–1234, 2016.
  • [Hayakawa and Suzuki, 2019] Satoshi Hayakawa and Taiji Suzuki. On the minimax optimality and superiority of deep neural network learning over sparse parameter spaces. arXiv preprint arXiv:1905.09195, 2019.
  • [Imaizumi and Fukumizu, 2018] Masaaki Imaizumi and Kenji Fukumizu. Deep neural networks learn non-smooth functions effectively. arXiv preprint arXiv:1802.04474, 2018.
  • [Jacot et al., 2018] Arthur Jacot, Franck Gabriel, and Clement Hongler. Neural tangent kernel: Convergence and generalization in neural networks. Advances in Neural Information Process- ing Systems 31, pages 8571–8580. 2018.
  • [Li et al., 2018] Hao Li, Zheng Xu, Gavin Taylor, Christoph Studer, and Tom Goldstein. Visualizing the loss landscape of neural nets. Advances in Neural Information Processing Systems 31, pages 6389–6399. 2018.
  • [Oono and Suzuki] Kenta Oono and Taiji Suzuki. Approximation and non-parametric estimation of ResNet-type convolutional neural networks. Proceedings of the 36th International Conference on Machine Learning, volume 97of Proceedings of Machine Learning Research, pages 4922–4931, 2019
  • [Petersen and Voigtlaender, 2018] Philipp Petersen and Felix Voigtlaender. Equivalence of approximation by convolutional neural networks and fully-connected networks. arXiv preprint arXiv:1809.00973, 2018.
  • [Schmidt-Hieber, 2017] Johannes Schmidt-Hieber. Nonparametric regression using deep neural networks with relu activation function. arXiv preprint arXiv:1708.06633, 2017. To appear in the Annals of Statistics.
  • [Sonoda and Murata, 2017] Sho Sonoda and Noboru Murata. Neural network with unbounded activation functions is universal approximator. Applied and Computational Harmonic Analysis, 43(2):233–268, 2017.
  • [Suzuki, 2019a] Taiji Suzuki. Adaptivity of deep ReLU network for learning in besov and mixed smooth besov spaces: optimal rate and curse of dimensionality. In International Conference on Learning Representations, 2019.
  • [Suzuki, 2019b] 鈴木大慈,深層学習の数理,https://www.slideshare.net/trinmu/ss-161240890
  • [Suzuki and Nitanda, 2019] Taiji Suzuki and Atsushi Nitanda. Deep learning is adaptive to intrinsic dimensionality of model smoothness in anisotropic Besov space. arXiv preprint arXiv:1910.12799, 2019.
  • [Telgarsky, 2016] Matus Telgarsky. benefits of depth in neural networks. I29th Annual Conference on Learning Theory, volume 49, pages 1517–1539. 2016.
  • [Yarotsky, 2017] Dmitry Yarotsky. Error bounds for approximations with deep ReLU networks. Neural Networks, 94:103–114, 2017.

Viewing all 45 articles
Browse latest View live