全3701文字
PR

 自社のディープラーニング(深層学習)フレームワークである「Chainer」の新機能開発を終了し、米フェイスブック(Facebook)が開発する「PyTorch」に移行すると発表したPreferred Networks(PFN)。その決断の背景を詳しく見ていこう。

 Chainer開発の責任者であるPFNの秋葉拓哉執行役員は、「PyTorchという非常に優れたフレームワークを使うメリットと、Chainerを使い続けるメリットとを比較した結果、PyTorchに移行すべきだと決断した」と説明する。「PyTorchは先進的なフレームワークで、機能や実行速度も優れている。PyTorchを利用することで、PFNの研究開発もより加速する。ChainerからPyTorchへの移行コストが低いことも決断を容易にした」(同氏)。

 これだけ聞くと「国産深層学習フレームワークであるChainerが、フェイスブックという巨大企業の開発するPyTorchに敗れた」ように受け止められる。しかし、PFNのメンバーに負けたという思いはないだろう。なぜならPyTorchはフェイスブックがChainerを参考に開発を始めたフレームワークだからである。

PFNのChainerをフェイスブックやグーグルが後追い

 PFNが2015年6月にオープンソースソフトウエア(OSS)として公開したChainerは、深層学習フレームワークの世界において画期的な存在だった。「Define-by-Run」と呼ぶ仕組みをいち早く取り入れたからだ。

 Define-by-Runは現在、フェイスブックのPyTorchだけでなく米グーグル(Google)の「TensorFlow」や、米Amazon Web Services(AWS)の「MXNet」が取り入れている。ソフトウエアの新技術は米国企業が考案して、日本企業はそれを輸入するだけ――。そんな長年の構図を覆したのがChainerだった。

 Chainerが先駆けとなったDefine-by-Runとは、ニューラルネットワークの計算を表現した計算グラフを、学習などデータを入力した際に動的に構築する手法である。開発者はニューラルネットワークの構造や学習の方法をPythonプログラムとして記述する。そして計算の実行時に、Pythonプログラムに基づき計算グラフが定義される。

 Chainerが登場するまでの主流は計算グラフを学習の前にあらかじめ構築する「Define-and-Run」と呼ぶ手法だった。開発者はニューラルネットワークの構造を定義ファイルやフレームワーク専用のプログラミング言語で記述する。

 深層学習ブームの初期はユーザーが使用するニューラルネットワークがCNN(Convolutional Neural Network)にほぼ限定されていたので、ニューラルネットワークの構造をあらかじめ決めておくDefine-and-Runで問題がなかった。

 しかし入力データによって計算グラフの構造が変化する「RNN(Recurrent Neural Network)」などCNN以外のニューラルネットワークが台頭するにつれ、ニューラルネットワークの構造を柔軟に制御できるDefine-by-Runが、Define-and-Runに比べて優勢になっていった。

 グーグルは2017年10月に、TensorFlowに「Eager Execution」と呼ぶ機能を追加してDefine-by-Runを使えるようにした。同じ2017年10月にはAWSと米マイクロソフトが共同で「Gluon」と呼ぶソフトウエアライブラリーをOSSとして公開し、MXNetでDefine-by-Runを使えるようにした。

 もっと分かりやすいのがPyTorchだ。フェイスブックがPyTorchのベータ版を一般公開したのは2017年1月のことで、主要開発者である同社のスミス・チンタラ(Soumith Chintala)氏はPyTorchの設計思想がChainerの影響を受けていると明言している。「Chainerのフォーク(分岐)と呼ばれても構わない」(チンタラ氏)との発言まである。