この記事は日経Robotics 有料購読者向けの記事ですが
日経Robotics デジタル版(電子版)』のサービス開始を記念して、特別に誰でも閲覧できるようにしています。
本記事はロボットとAI技術の専門誌『日経Robotics』のデジタル版です
著者の岡野原大輔氏
著者の岡野原大輔氏

 深層学習は学習に時間がかかることで有名である。データやモデルにももちろんよるが、学習に数日、数カ月といった単位の期間が必要になることも稀ではない。この学習を高速化することは研究開発の競争力に直結する。

 新しいアイデアを試してその結果が出るのに1週間以上かかる場合と、それが1時間で終わる場合では、試行錯誤の回数や仕方が大きく変わってくる。また、高速化によって、より大きな学習データセット、大きなモデルを使えるようになる。

 深層学習の学習にどれだけ時間がかかるのか感覚を掴んでもらうために、いくつか例をみてみよう。深層学習のチュートリアルで最初に取り上げられるMNISTデータセットの画像分類の学習から始める。MNISTの学習データは5万枚の28×28の白黒画像の手書き文字からなる。これを3層から成る多層パーセプトロンを使って学習する場合を考える。中間層に100個のニューロンを使った場合、ネットワーク全体で10万弱のパラメータから成る。

GPUの高速化とともにモデルも巨大化

 このとき、1つの画像を推論(Forward)するのに25万回の浮動小数点演算、学習するのにその約3倍の約75万回の浮動小数点演算が必要となる。学習全体では学習データ全体を20回走査し、その場合、CPU1つ(Intel Xeon E5-2667)では3分程度、GPU1つ(NVIDIA Tesla P100 PCIe)では1分程度かかる注1)。この程度の時間であればほとんど苦なく試行錯誤できる。

注1)Chainerのexampleにあるtrain_mnist.pyをそのまま使って実測した。

 次に、現実的な学習問題の例としてImageNetデータセットの学習を取り上げる。ILSVRC、通称ImageNetデータセットは120万枚の訓練画像から成り、1000クラスの分類問題を解く。

 2012年にILSVRCにおいてディープラーニングを使って優勝し金字塔を打ち立てたAlexNetは、当時のGPU(NVIDIA GTX 580、性能は1.6TFlops、Flopsは1秒間に可能な浮動小数点演算回数である)を2台使い、5~6日の学習時間が必要であった。その後、GPUの性能は毎年約2倍のペースで上がり続けるものの(2017年11月時点で最速のNVIDIA Tesla V100は15.7TFlops)、モデルも巨大化している。近年使われるモデルはResNetやDenseNetなど、層の数が数十~数百、チャンネル数(各層のニューロン数は幅×高さ×チャンネル数)は数百から数千という非常に大きなネットワークである。例えば50層から成る中程度の大きさであるResNet-50では、サイズが224×224の画像を推論するのに38億回の浮動小数点演算が必要であり、学習にはその約3倍の100億回の浮動小数点演算が必要となり、1台のGPUでImageNetデータセットを学習するために学習データを約100回走査し、2週間程度必要である。

高速化の主流となっているデータ並列

 この学習を高速化するために、現在はデータ並列による高速化が主流となっている。深層学習の学習である確率的勾配降下法(SGD)は次のように行われる。(1)学習データセットからミニバッチとよばれる一定数個のデータをサンプリングし、(2)それらミニバッチから目的関数のパラメータについての勾配を推定し、(3)この勾配の推定値を使ってパラメータを更新する。この勾配の推定は、各データ毎に独立に計算できるため、並列に計算することができる。データ並列による高速化では、複数台のワーカーを用意し、ミニバッチをさらに分割したデータ(マイクロバッチと呼ばれる)を各ワーカーに分配し、ワーカー毎に勾配を独立に推定し、それらを集約することで高速化する。

 このデータ並列による高速化には大きな問題が2つある。1つがパラメータのStaleness(新鮮ではないパラメータを使ってしまう)問題である。並列処理においてワーカー間で同期が必要な場合、遅いワーカーに全体の処理が引っ張られてしまう問題があるため、非同期処理が望ましい。そのため以前はDNNの学習でも非同期処理をし、最新ではないパラメータを元に勾配を求め、それを使って更新する手法がとられていた。しかし、古いパラメータを使って勾配を求める悪影響は大きく、特に汎化能力に大きな影響があることが実験的に分かってきた。そのため、常に全ワーカーが最新のパラメータを持ち、それを元に勾配を計算できるようにならなければならない。DNNはパラメータ数が多く全ワーカーで最新のパラメータを保持するには高スループットかつ低レイテンシなネットワークが必要となる。

 もう1つの問題として、データ並列による高速化の際にはミニバッチサイズを大きくする必要がある。これは各ワーカーのマイクロバッチが一定以上大きくなければ、各ワーカーが効率的に計算できないためである。現在のGPUやHPCを使った多くの計算処理ではデータあたりの計算回数、つまり計算密度が高いことが求められる。計算性能の向上に対し、データバンド幅の向上が追いつかないためだ。そのため小さなバッチで計算した場合は実効性能が大幅に落ちてしまう。そのため各マイクロバッチを大きく、結果としてミニバッチサイズも大きくする必要がある。しかし、ミニバッチサイズを大きくすると今度は汎化性能が落ちる現象がみられることが分かっている。つまり訓練誤差は最小化できるが、実際の推論時のテストデータの誤差が大きくなってしまうという問題である。

アニーリングのような効果を持つSGD

 この現象の原因は、現時点ではミニバッチサイズを大きくすると勾配のノイズが小さくなり、汎化に悪影響を与えているためだと分かっている1)。SGDは単に勾配をサンプルから求めることで高速化するだけでなく、勾配に適度なノイズを加えることでアニーリングのように最適化が局所解にはまらないようにするのを助けていたのだ。さらに適切なノイズはベイズ最適化やMDL(minimum description length)などとつながり、汎化性能向上に寄与していることが分かっている。

 これに基づいて、ミニバッチサイズが変わっても同じスケールのノイズが加わるように、ミニバッチサイズを大きくするのに合わせてSGDの学習率を大きくする1)。これによりノイズの大きさが元の学習と同じとなり、汎化性能を保ったまま高速化することができる。

ImageNetの学習がついに15分に

 こうしたさまざまな工夫を重ねることでデータ並列による学習の高速化が可能となってきた。今年に入り、この高速化は急速に進んできた。

 2017年1月、Preferred Networks(PFN)はGPUを100台使ってImageNetの学習問題を4時間で同じ精度(以降精度はテストデータでの精度を示す)で学習できることをDeep Learning Summit San Francisco 2017で発表した。このとき、学習率を大きくすれば汎化性能が落ちないという知見はPFNは実験によって独自に得ていた。その後、前述のように、このアイデアが正しいことが理論的にも証明された。

 2017年6年には米Facebook社が256台のGPUを使って1時間で同じ精度で学習できることを示した2)。また、学習開始時に学習率を徐々に上げ、学習を安定化するwarmup strategyを提案。ミニバッチサイズをn倍にし学習率もn倍にした場合の学習曲線(各epochでの目的関数値や精度の軌跡)が元の学習曲線とほとんど一致することも発見した。

 その後、2017年9月に米University of California Berkeleyなどの研究グループがIntel Xeon Phi 7250アクセラレータ付きのCPUを1600個使い30分で学習可能と報告した3)。彼らは層毎に学習率を正規化するLARSと呼ばれる手法を使って学習の安定化を図ることを提案している。

 2017年12月にPFNはGPUを1024台使って15分で同じ精度で学習できると発表した(図1)4)。この時のミニバッチサイズは32768であり、通常使われるミニバッチサイズの100倍近くにもなる。非常に大きな学習率を使うため、より詳細な学習率やモーメンタムの調整に加えて、初期はRMSpropを使い、後半はモーメンタムSGDを使って汎化性能を保つ工夫がなされた。また、PFNの今回の成果はC++で書かれたCaffeではなくChainer(ChainerMN)注2)を使っており、Pythonで開発できる効率さを保ったまま学習をスケールできることを示した。

図1 ResNet50 ImageNetの学習の高速化の度合い
8台のGPUの場合をベースラインとした際の高速化の度合いを示した。
[画像のクリックで拡大表示]

注2)ChainerMNは、Chainerでの学習を複数のノードで分散処理するためのChainerの追加パッケージである。

今後も大規模化と高速化は続く

 高速化がもたらす今後の可能性について述べてみよう。まず、より大きなデータセットで学習できるようになる。ImageNetより大きなデータセットはすでに数多く登場してきている。代表的なものとして、1000万枚、約5000クラスからなるOpen Images(https://github.com/openimages/dataset)、24万個のビデオ、1000万個のアノテーションからなるYouTube BB(https://research.google.com/youtube-bb/)、1億枚のラベル付き画像からなるYahoo Flickr Creative Commons(http://yfcc100m.appspot.com/)などがある。米グーグルは訓練データを3億枚まで増やして学習した結果、データ数の増加に応じて精度は伸び続けると報告している5)。そのほか、教師なし学習や半教師あり学習などのアノテーションコストの少ない学習手法が提案されていて、それらを使えばより大量の教師なしデータを活用できる。また、CGを使った学習のように実質無限のデータセットが使える手法も登場している。また、強化学習やGANはアルゴリズムの性質上、収束までに多くのイテレーションが必要であり、学習の高速化が期待されている。

 また、今より大きなモデルを使った学習も重要となる。通常の機械学習の理解とは違って、ニューラルネットワークはモデルが大きいほど過学習しないことが予想され、実験的には証明されており、計算コストさえ解決できればより大きなモデルを使うことが望まれている6)。また、学習時に大きなモデルを使ったとしても、学習が終わった後、性能を落とさず、それをずっと小さく圧縮することができることが分かっており、推論時には大量のリソースを使わずに済む。それなら最初から小さなモデルを使って学習できるのではと考えるが、小さなモデルでは学習は難しくなり、過学習しやすくなってしまう問題が起きる。大きなモデルは表現力を上げるだけでなく学習を容易にしているのだ。脳でも最初に神経回路網を多く作った後に重要ではない部分が間引かれることが分かっており、この考えに基づいた学習手法も提案されている7)。今後も高速化、大規模化の流れは続くと考えられる。

参考文献
1)S. L. Smith et al.,“A Bayesian Perspective on Generalization and Stochastic Gradient Descent,” https://arxiv.org/abs/1710.06451
2)P. Goyal et al., “Accurate, Lage Minibatch SGD: Training ImageNet in 1 Hour,” https://arxiv.org/abs/1706.02677
3)Y. You et al., “ImageNet Training in Minutes,” https://arxiv.org/abs/1709.05011
4)T. Akiba et al.,“Extremely Large Minibatch SGD: Training ResNet-50 on ImageNet in 15 Miniutes,” https://arxiv.org/abs/1711.04325
5)C. Shun et al.,“Revisiting Unreasonable Effectiveness of Data in Deep Learning Era,” https://arxiv.org/abs/1707.02968
6)M. S. Advani et al.,“High-dimensional dynamics of generalization error in neural networks,” https://arxiv.org/abs/1710.03667
7)S. Han et al.,“DSD: Dense-Sparse-Dense Training for Deep Neural Networks,” https://arxiv.org/abs/1607.04381
岡野原 大輔(おかのはら・だいすけ)
Preferred Networks 取締役副社長
岡野原 大輔2006年にPreferred Infrastructureを共同創業。2010年、東京大学大学院博士課程修了。博士(情報理工学)。未踏ソフト創造事業スーパークリエータ認定。東京大学総長賞。
出典:2018年1月号 pp.32-34 日経Robotics
記事は執筆時の情報に基づいており、現在では異なる場合があります。