ハイパーパラメータ自動最適化ツール「Optuna」公開

秋葉 拓哉
リサーチャー

2018-12-03 13:45:42

ハイパーパラメータ自動最適化フレームワーク「Optuna」のベータ版を OSS として公開しました。この記事では、Optuna の開発に至った動機や特徴を紹介します。

 

 

ハイパーパラメータとは?

ハイパーパラメータとは、機械学習アルゴリズムの挙動を制御するパラメータのことです。特に深層学習では勾配法によって最適化できない・しないパラメータに相当します。例えば、学習率やバッチサイズ、学習イテレーション数といったようなものがハイパーパラメータとなります。また、ニューラルネットワークの層数やチャンネル数といったようなものもハイパーパラメータです。更に、そのような数値だけでなく、学習に Momentum SGD を用いるかそれとも Adam を用いるか、といったような選択もハイパーパラメータと言えます。

ハイパーパラメータの調整は機械学習アルゴリズムが力を発揮するためにほぼ不可欠と言えます。特に、深層学習はハイパーパラメータの数が多い傾向がある上に、その調整が性能を大きく左右すると言われています。深層学習を用いる多くの研究者・エンジニアは、ハイパーパラメータの調整を手動で行っており、ハイパーパラメータの調整にかなりの時間が費やされてしまっています。

Optuna とは?

Optuna はハイパーパラメータの最適化を自動化するためのソフトウェアフレームワークです。ハイパーパラメータの値に関する試行錯誤を自動的に行いながら、優れた性能を発揮するハイパーパラメータの値を自動的に発見します。現在は Python で利用できます。

Optuna は次の試行で試すべきハイパーパラメータの値を決めるために、完了している試行の履歴を用いています。そこまでで完了している試行の履歴に基づき、有望そうな領域を推定し、その領域の値を実際に試すということを繰り返します。そして、新たに得られた結果に基づき、更に有望そうな領域を推定します。具体的には、Tree-structured Parzen Estimator というベイズ最適化アルゴリズムの一種を用いています。

Chainer との関係は?

Optuna は Chainer を含む様々な機械学習ソフトウェアと一緒に使うことができます。

Chainer は深層学習フレームワークであり、Optuna はハイパーパラメータの自動最適化フレームワークです。例えば、Chainer を用いたニューラルネットの学習に関するハイパーパラメータを最適化する場合、Chainer を用いるユーザーコードの一部に Optuna からハイパーパラメータを受け取るコードを書くことになります。それを Optuna に渡すことによって、Optuna が自動的に何度もそのユーザーコードを呼び出し、異なるハイパーパラメータによりニューラルネットの学習が何度も行われ、優れたハイパーパラメータが自動的に発見されます。

社内では Chainer と共に用いられているユースケースがほとんどですが、Optuna と Chainer は密結合しているわけではなく、Chainer の以外の機械学習ソフトウェアとも一緒に使うことができます。サンプルとして、Chainer の他に scikit-learn, XGBoost, LightGBM を用いたものを用意しています。また、実際には機械学習に限らず、高速化など、ハイパーパラメータを受け取って評価値を返すようなインターフェースを用意できる幅広いユースケースで利用可能です。

なぜ Optuna を開発したのか?

ハイパーパラメータの自動最適化フレームワークとして、Hyperopt, Spearmint, SMAC といった有名なソフトウェアが既に存在しています。そんな中でなぜ Optuna を開発したのでしょうか?

複数の理由やきっかけがありますが、一言で言うと、我々の要求を満たすフレームワークが存在せず、そして既存のものよりも優れたものを作るアイディアがあったからです。また、実際には、機能面だけではなく品質面でも、既存のフレームワークにはレガシーなものが多く、不安定であったり環境によって動作しなかったり修正が必要だったりという状況でした。

Optuna の特徴

Define-by-Run スタイルの API

Optuna は Define-by-Run スタイルの API を提供しており、既存のフレームワークと比較し、対象のユーザーコードが複雑であっても高いモジュール性を保ったまま最適化を行うことを可能とし、またこれまでのフレームワークでは表現出来なかったような複雑な空間の中でハイパーパラメータを最適化することもできます。

深層学習フレームワークには Define-and-Run と Define-by-Run という 2 つのパラダイムが存在します。黎明期は Caffe など Define-and-Run のフレームワークが中心でしたが、PFN の開発した Chainer は Define-by-Run のパラダイムを提唱し先駆けとなり、その後 PyTorch が公開され、TensorFlow も 2.0 では eager mode がデフォルトになるなど、今では Define-by-Run のパラダイムは非常に高く評価されており、標準的にすらなろうとする勢いです。

Define-by-Run のパラダイムの有用性は、深層学習フレームワークの世界に限られたものなのでしょうか?我々は、ハイパーパラメータ自動最適化フレームワークの世界でも同様の考え方を適用できることに気づきました。この考え方の下では、全ての既存のハイパーパラメータ自動最適化フレームワークは Define-and-Run に分類されます。そして Optuna は Define-by-Run の考え方に基づき、既存のフレームワークと大きく異なるスタイルの API をユーザに提供しています。これにより、ユーザプログラムに高いモジュール性を持たせたり複雑なハイパーパラメータ空間を表現したりといったことが可能になりました。

学習曲線を用いた試行の枝刈り

深層学習や勾配ブースティングなど、反復アルゴリズムが学習に用いられる場合、学習曲線から、最終的な結果がどのぐらいうまくいきそうかを大まかに予測することができます。この予測を用いて、良い結果を残すことが見込まれない試行は、最後まで行うことなく早期に終了させてしまうことができます。これが、Optuna のもつ枝刈りの機能になります。

Hyperopt, Spearmint, SMAC 等のレガシーなフレームワークはこの機能を持ちません。学習曲線を用いた枝刈りは、近年の研究で、非常に効果的であることが分かっています。下図はある深層学習タスクでの例です。最適化エンジン自体は Optuna も Hyperopt も TPE を用いており同一であるものの、枝刈りの機能の貢献により、Optuna の方が最適化が効率的になっています。

並列分散最適化

深層学習は計算量が大きく一度の学習に時間がかかるため、実用的なユースケースでのハイパーパラメータの自動最適化のためには、性能が高く安定した並列分散処理を簡単に使えることが必要不可欠です。Optuna は複数ワーカーを用いて複数の試行を同時に行う非同期分散最適化をサポートします。下図のように、並列化を用いることで最適化は更に加速します。下図はワーカー数を 1, 2, 4, 8 と変化させた場合の例ですが、並列化により最適化がさらに高速化されていることが確認できます。

また、Chainer の分散並列化拡張である ChainerMN との連携を容易にする機能も用意されており、最適化対象の学習自体が分散処理を用いるような場合にも Optuna を簡単に使うことができます。これらの組み合わせにより、分散処理が含まれた目的関数を並列に分散実行するようなこともできます。

ダッシュボードによる可視化(実装中)

最適化の過程を見たり、実験結果から有用な知見を得たりするために、ダッシュボードを用意しています。1 コマンドで HTTP サーバが立ち上がり、そこにブラウザで接続することで見ることができます。また、最適化過程を pandas の dataframe 等で export する機能もあり、それらを用いてユーザがシステマチックに解析を行うこともできます。

終わりに

Optuna は既に複数の社内プロジェクトで活用されています。例えば、今夏準優勝を果たした Open Images Challenge 2018 でも用いられました。今後も活発に開発は続けられ、完成度の向上と先進的な機能の試作・実装の両方を精力的に進めていきます。現段階でも他のフレームワークと比較し Optuna を利用する理由は十分存在すると我々は考えています。お試し頂きお気づきの点があれば忌憚のないフィードバックを頂ければ幸いです。

先日開催された第 21 回情報論的学習理論ワークショップ (IBIS’18) では、弊社でのインターンシップにおける成果であるハイパーパラメータ自動最適化に関する研究を 2 件発表しました。これらは Optuna を実際に利用している中で出てきた問題意識に基づいており、成果はいち早く Optuna に組み込むことを目指して取り組んでいます。こういった技術により Optuna を更に優れたものとしていければと考えています。

我々の目標は、深層学習関連の研究開発をできるだけ加速することです。ハイパーパラメータの自動最適化はそのための重要なステップとして取り組んでいますが、他にも既にニューラルアーキテクチャー探索や特徴量の自動抽出といった技術に関しても取り組みを開始しています。PFN では、こういった領域や活動に興味を持ち一緒に取り組んでくれるメンバーをフルタイム・インターンで募集しています

Emergence of Locomotion Behaviors in Rich Environment の追試

Manabu Nishiura

2018-06-29 10:48:38

1.内容紹介

はじめまして。PFNでSummer Internship 2017に続き、アルバイトをしている東京大学の西浦です。現在は駒場2キャンパスの先端研で神経科学・循環器系の数理モデルの研究をしています。

さて、2017年の春頃、DeepMindから”Emergence of Locomotion Behaviours in Rich Environments”[1]という論文が公開され、その動画が話題になりました。しかし、この論文では公開されている情報が限られており(深層学習分野でよくあることなのですが)、実験環境の設定、ネットワークの構成や学習に必要なパラメータで不明なものが多く、論文の結果を再現するためには不明な部分を推定するために多くの組み合わせを試す必要がありました。そのため、このような実験の再現は深層学習の実践的な知識と学習のための大規模なリソースが必要とされ、個人で行うのはなかなか難しいと思います。今回はその論文をChainer FamilyのひとつであるChainerRLを利用して再実装し追試を行い、その結果として様々な知見が得られましたのでご報告させていただきます。

Emergence of Locomotion Behaviors in Rich Environmentsの元動画

2.元論文の概要

強化学習のパラダイムは、原理的には単純な報酬のみから複雑な振る舞いを学習することができるようになっています。しかし実際は、意図した振る舞いを学習させるためには、報酬関数を慎重にチューニングすることが一般的です。この論文では、報酬はなるべく直感的な構成で固定してしまい、学習に使う環境(タスク)を様々な種類用意して、エピソードごとにランダムにその環境を変更するというアプローチが採用されています。これにより、様々な環境に対してロバストで、複雑な行動を獲得させようということをモチベーションに実験が行われています。

アルゴリズムとしては、方策勾配法(Policy Gradient)をベースにして、現在の方策に近い方策へと徐々に更新していくProximal Policy Optimization(PPO)[3]を用いています。PPOは論文公開当時では一番性能の良い強化学習のアルゴリズムだったのでそれが採用されていて、論文には同じく性能のよいTrust Reigion Policy Optimization(TRPO)[4]との比較もされています。

3.アルゴリズム、実験手法の解説

前提知識

まず強化学習のフレームワークについて説明します。強化学習では環境とエージェントというのがあり、エージェントが環境に対して行動をし、環境はそれを受けてエージェントに対して観測と報酬を返すという枠組みになっています。エージェントは、報酬に基づいて行動を決定するためのルール「方策(Policy)」を学習していきます。この論文では、ロボットなど連続値の行動を扱いやすい方策勾配法を採用しています。方策勾配法ではActor-Criticモデルという、エージェントをActor(行動器)とCritic(評価器)でモデル化し、例えばそれぞれをニューラルネットワークで表現します。また、エージェントがActor-Criticモデルだと、例えば、Actorのネットワークを決定しているパラメータが方策に該当します。Criticは、現在の方策の元である状態がどれだけの価値を持つかを表す価値関数(ある状態以降の報酬の期待値に割引率をかけたものが一般的)でモデル化されます。

 

実験環境としては、物理エンジンのMuJoCo [2]と強化学習のフレームワークであるOpenAI Gym [5]を用いています。代表的なものとしては、Planar walker(またはWalker2d)と呼ばれる二次元平面内でエージェントに二足歩行を行わせるモデルが挙げられます。Planar walkerの場合、それぞれのエージェントは各関節を曲げるトルクにより行動を表現することになります。また、エージェントが環境から受けとる観測は、大きく内部状態と外部状態に分けられ、各関節の角度、角速度、位置、接触、トルクセンサ情報などを内部情報、地形の高さ情報を外部情報として受け取っています。報酬はPlanar walkerの場合だと以下のように設計されており、基本的には前に進むと報酬がもらえ、それに加えて姿勢のペナルティー(負の報酬)などが含まれています[1]。

Planar walker [4]

今回追試したアプローチでは、方策を決定するネットワークは内部状態と外部状態を別々に処理して最後に合わせて処理して、行動の次元個分、平均と分散の組を指定した正規分布を確率的方策としてを出力する構成になっています。

アルゴリズム

ここで、追試で使ったTRPOとPPOの二つのアルゴリズムについて解説します。まず、ベースになっている方策勾配法は、目的関数(原則としては現在の方策による期待値を用いる)を方策のパラメータに関して微分し、得られた勾配方向にパラメータを更新する方法です。目的関数を計算するために、現在の方策で行動して、その系列データを貯めること(一般化方策反復)を行います。しかし、方策の更新には慎重になる必要があり、一度方策が劣化してしまうと、それから後に得られるサンプル系列も悪化してしまい、持ち直すのが難しくなるという問題があります。

そこでTRPOは、方策の更新に制限をかけながら更新していきます。具体的には、KLダイバージェンスを使って信頼領域(trust region)を定義して、その信頼領域を超えないように、制約条件つきの最適化問題を解くことにより方策のパラメータを更新します。これにより方策の分布として大きな変化を抑制することができて、方策の大きな劣化を防ぐことができます。TRPOが二回微分を計算するので、計算量が多いことを踏まえ、PPOはTRPOの制約条件を目的関数に含めて非厳密化することで、TRPOより単純で軽い計算量でそれなりの性能を発揮するアルゴリズムになっています。

具体的には、方策を \(T * N\) time steps走らせて(Nはスレッドの数)集めた \(s_t\) ,\(a_t\), \(r_t\) を用いて \(A_t\)(アドバンテージ)を計算し、\(L^{CLIP} \)を前の方策と新しい方策の比率を \(\pm \epsilon\) 内にクリップして勾配方向にパラメータを更新していきます。方策のネットワークと価値関数のネットワークでパラメータを共有する(最後の出力層のみそれぞれのパラメータを使う)なら、方策と価値関数のネットワークを独立に更新できないので、目的関数に価値関数の誤差項を加え、探索の幅を増やしたければ、エントロピーボーナスを加えることもあります。(最終的な目的関数は \(L^{CLIP+VF+S} \))ここで登場するアドバンテージとは、収益(報酬の期待値)からベースラインを引いたもので、勾配の推定値の分散を減らすためのテクニックです。それぞれの計算式を以下に示します[3]。

元論文ではPPOをさらに分散版にしたものを使っています。追試としては、PPOで方策ネットワークと状態価値関数にLSTMを含んだものと、TRPOを用いましたが、1スレッドの場合では、TRPOの方がかなり性能がよかったです。したがって、以下の結果は全てChainerRLのTRPOで学習させた結果となります。

実験手法

追試としては2通りの環境で訓練しました。一つ目は元論文の動画に近い3種類のタスクがある環境で、もう一つは地形の凸凹の状態がランダムに変わるものです。

元論文に近い環境では、Planar Walkerを①箱を飛び越えるタスク、②穴を飛び越えるタスク、③浮いている板を避けるタスクの3種類の環境で順番に訓練した後、3種類の環境(タスク)がランダムにエピソードごとに切り替わる環境で訓練します。

地形の凸凹の状態がランダムに変わる環境では、エピソードごとにすべての地形が変わる中で訓練します。

4.結果

学習し始めのエピソードごとにランダムに地形が変わる中で試行錯誤している様子

学習後歩いている動画

こちらでは、学習初期段階からランダムに地形を変更していたためか、とにかく脚を高く上げて、どんな障害物でも越えられるような動きになってしまったようです。

動画に示した歩行行動を獲得するまでの学習曲線を上に示します。10,000ステップごとに10エピソード走らせて評価を行なっており、青のrewardは10エピソードの平均累積報酬で、上下の灰色の線は10エピソード内での最小値最大値になっています。200万ステップほどで収束していることが分かります。

 

元論文に近い環境で学習後歩いている様子

障害物によって頭を下げたり、ジャンプする高さが変わったり、動きが変わっていることが見て取れます。一つ目と二つ目の動画ではPlanar walkerの関節の減速比のパラメータが違っていて、このような微妙な差でも獲得される動きに違いが出てしまいます。

 動画に示した歩行行動を獲得するまでの学習曲線を上に示します。歩く動作は120万ステップほど、穴を飛び越える動作は800万ステップほど、浮いている板を避ける動作は400万ステップほどで学習が収束していることが分かります。

タスクによって報酬の平均がそこまで変動していないものもあり、歩く動作を獲得した状態から箱を飛び越える動作の獲得にはそれほど学習が必要ではないが、箱を飛び越える動作を獲得した状態から穴を飛び越える動作を獲得するのと、箱を飛び越える動作を獲得した状態から浮いている板を避ける動作を獲得するためにはかなり学習が必要であることが分かります。

元論文では適切に実験設定が考えられていて、カリキュラムラーニングになっていたために、タスクに応じて行動をうまく切り替えられるようになっていましたが、ただ単に地形やタスクをランダムに変えるだけでは、どんな環境にも対応するような方策を獲得してしまうようです。

5.考察

問題点の一つに、初期条件を注意深く設定しないと意図した学習結果になりづらいという問題があります。今回の場合も初期の状態変数の分散や、地面とMuJoCoのモデル(Planar walkerなど)との高さ方向の相対的な位置は学習の様子をみながら調整することが必要でした。具体的に注意した点としては以下のような点が挙げられます。

  • ある程度初期状態に分散がないと、分散の範囲で実現できる行動になってしまう。(逆に分散が大きすぎても学習がうまく進まないことがある)
  • 環境をリセットした時に何ステップ分フレームをスキップしてから指令を出し始めるか、によって獲得されるモーションが変わってくる。(例えばMuJoCo環境内で、完全に地に足が着いてから指令値を出すようにした、など)
  • 歩行を獲得させる場合、学習の過程で最初に獲得されるのはその場に立っているという方策なので、初期位置の周辺はなるべく平らな方がよさそう。

その他にも、下記の記事[6]に現状の深層強化学習の課題はよくまとまっているので、ぜひ読んでいただきたいです。(方策を更新していくために特定のアルゴリズムを採用しても、報酬関数、方策を表現するネットワークのパラメータなどは自分で任意に決定する必要があり、設定する報酬によって獲得される方策がかなり変わってしまうという問題など。)

 

失敗例の動画

けんけんを獲得している動画(初期化した時の相対的な高さの問題で、片足を前に出す方策を獲得できなかった例、初期状態の分散はうまくいった例と同じ)

6.PFNインターンの感想

ある仮説を検証するのに、「ある実験系でやってみて上手く行かなければもっと単純化した系でやってみる。」という、研究の基礎的なプロセスの体験ができたのはとてもよかったです。また、ロボティクス関係の様々な研究を知ることができ、そこで研究している人たちとの繋がりができたのは一番大きな収穫だったかもしれません。最後に、情報交換の重要性も強く意識することができました。有名なライブラリやパッケージの使い方(インストールで苦戦するものなど)や、こういう手法を試したけどいまいちだった、ハイパーパラメータの情報など、公開されていなけど実験をしていく中では欠かせない情報などを共有できる環境が、とてもありがたいなと感じました。

元論文の情報が結構少なく、なかなか学習が進まず進捗が出ずに精神的に辛い時期もありましたが、様々な方に積極的に相談するようになってからは比較的スムーズに乗り切ることができたように思います。最後になりましたが、ご指導いただいてるメンターの皆様をはじめ、社員の方々に感謝を表して報告を終わらせていただきたいと思います。

参考文献

[1] “Emergence of Locomotion Behaviours in Rich Environment” https://arxiv.org/abs/1707.02286v2

[2] MuJoCo advanced physics simulation http://mujoco.org/

[3] “Proximal Policy Optimization Algorithms” https://arxiv.org/abs/1707.06347

[4] “Trust Reigion Policy Optimization” https://arxiv.org/abs/1502.05477v5

[5] OpenAI Gym https://gym.openai.com/docs/

[6] “Deep Reinforcement Learning Doesn’t Work Yet” https://www.alexirpan.com/2018/02/14/rl-hard.html

 

CHI 2018とPacificVis 2018

Fabrice Matulic

2018-05-18 13:47:43

PFNでヒューマン・コンピュータ・インタラクション(HCI)を研究するリサーチャーのファブリスです。

現在ディープ・ニューラル・ネットワーク(DNN)を基にした自動化システムは急速に進化していますが、その過程に伴う人的要因を軽視しない「Human in the loop(人間参加型)」と呼ばれる考え方が重要です。この点において、HCI研究のコミュニティは、今までにないユーザー中心のアプリケーションを作るツールとして機械学習の応用技術を活用するだけでなく、この複雑なツールの導入・使用・管理を促進する手法を提供するという点で貢献できる良い状況にあります。また、情報可視化(InfoVis)コミュニティが、DNNの内部構造を理解する上で役立つユーザー・インターフェースや可視化手法を提案し、DNNのブラックボックス解明に光明が見え始めています。PFNでは、最新のHCIならびにInfoVis/Visual Analytics(視覚分析)分野の研究を常に追い求めるだけでなく、これらの分野において実際に貢献する事を目指しています。

PacificVis

アジア太平洋地域の第11回IEEE可視化シンポジウム (PacificVis 2018)が4月に神戸で開催され、PFNはスポンサーとして参加しました。初日には清華大学のShixia Liu教授が「Explainable Machine Learning(説明可能な機械学習)」と題した基調講演を行った他、IEEE VIS’17での最優秀論文がTensorFlow向け視覚解析システムに関する論文であったのに続き、今回も「GANViz: A Visual Analytics Approach to Understand the Adversarial Game」が最優秀論文賞に選ばれるなど、特に機械学習分野の成果が際立つシンポジウムとなりましたが、いずれも説明可能なモデルやインターフェースに基づく機械学習技術を作り出すという試み「Explainable Artificial Intelligence (XAI: 説明可能な人工知能)」と密接に関連しています。これは、自動化されたシステムが、ある特定の判断や結論に至った経緯や根拠を理解・解釈しようとする取り組みですが、これらのアルゴリズムやツールが果たしてEUの新たな一般データ保護規則(GDPR)における「説明を求める権利」に対応するに十分であるかは今後の課題です。

CHI

CHI2018

ACM Conference on Human Factors in Computing Systems (CHI) はヒューマン・コンピュータ・インタラクション分野における世界最高峰の国際会議です。今年はカナダのモントリオールで開催され、参加者は3300名を超えました。同国のジャスティン・トルドー首相も書簡で歓迎の意を表しています

HCI研究における機械学習の代表的な適用法として、複雑なセンサーデータからパターンを検出あるいは認識する事が挙げられます。これにより、未処理のタッチデータから手の平の接触を検知し、ペン先動作と書く音を利用して手書き文字を認識するなどの斬新なインタラクション技術を実現しています。深層学習のフレームワークが 広く利用可能になり、HCIのリサーチャーはこの様な新たなツールを組み合わせる事で、既存技術の認識性能を向上させたり、全く新たな技術を生み出したりしています。これらは既存の手法では非効率であったり、実現すること自体が困難でした。後者の良い例として、生成ネットが可能にしたシステムがあります。DeepWritingはタイプセットされたテキストから筆跡を作成する深層生成モデルで、書体を真似たり美化したりできます。IllumiRoom, から発想を得たExtVisionは、実際のコンテンツを使わずに、conditional adversarial nets (条件付き敵対的ネット)で周辺画像を自動生成します。

Aksan, E., Pece, F. and Hilliges, O. DeepWriting: Making Digital Ink Editable via Deep Generative Modeling. Code made available on Github.

HCI研究における機械学習の上記以外の応用分野としては、インタラクション予測と感情推測への応用が増えています。前者のインタラクション予測においては、DNNがどのようにして 垂直メニューの選択を使うインタラクション作業のヒューマン・パフォーマンスを予測できるのかについて、Li氏、Bengio (Samy)氏、Bailly氏が行った研究があります。感情と状態の認識については、MITの Lex Fridman 氏による入門講座 Deep learning for understanding the human(人間への理解を深める深層学習)に加えて、 動画の中の瞳孔の動き と EEG(脳波信号)  から認知負荷を推定する研究論文がそれぞれ発表されました。センサー付きのモバイル機器やウェアラブル機器が普及し続ける中で、人間をよりよく理解し、人間の動きを予測する「スマートな」システムが、良くも悪くも、今後次々に登場するでしょう。

CHIで は可視化関連の発表も多く、今年も例外ではありませんでした。特に、ビッグデータとDNNの理解に向けた視覚解析に関連が深かったのは、Cavallo氏 とDemiralp氏の研究でした。彼らは、高次元データの探査分析を向上させるヴィジュアル・インタラクション・フレームワークを作り出していますが、減次元グラフを探索し縮小データを修正する事が初期データセットにどのような影響を及ぼすかを観測できるツールを利用しています。MNIST および QuickDraw上で自動符号化器を利用する事例が特に興味深く、ユーザーが入力画像サンプルに直接描いて結果がどのように変わることを確認できます。

Cavallo M, Demiralp Ç. A Visual Interaction Framework for Dimensionality Reduction Based Data Exploration.

また、DuetDrawについても忘れずに触れておきたいと思います。これは、ユーザーとAIの共同作業を可能にするプロトタイプで、PFNのPaintsChainerを使って絵を描きます!

Multiray: Multi-Finger Raycasting for Large Displays

今年のCHIで発表した私自身の研究は機械学習関連ではなく、指から発射する複数の光線を利用して、離れた画面表示とインタラクションするというものでした。これはウォータールー大学在籍時に行ったDan Vogel氏との共同研究ですが、この度Honourable Mentionとして褒状をいただきました。この研究では、指一本のレイキャスティングを複数の指を使った多重光線へと高度化するという発想に基づき、スクリーン上に投影された点を指で操り様々な幾何学形状を形成する事で、インタラクションのボキャブラリを増やしています。


Matulic F, Vogel D. Multiray: Multi-Finger Raycasting for Large Displays

考察

今のところ、DNNのブラックボックスを開けて解明しようという取り組みは、可視化コミュニティにおいて最も盛んに行われていますが、これまで提案された多くのツールは可視化にフォーカスし、インタラクティブ性が限定的となっています。とりわけ入出力データを微調整して、これが中間層のニューロンにどのような作用を及ぼすかを理解するという点において乏しいです。そこでDNNの動的解析を支援するツールを作成し、モデルに対してインタラクティブな調整を施すことができるHCIリサーチャーの出番になります。さらに、機械学習の一連の処理において、データのラベル付け、モデル選択・統合、データの拡大・生成といった人間が関与するプロセスの改善にはHCIからのアプローチも必要です。このような側面を考慮した研究成果が今後CHIやHCIの関連学会でより多く公開される事が期待されます。

Chainerの可視化・実験管理を支援するChainerUIを公開

ofk
エンジニア

2017-12-20 10:58:59

Chainer上の実験中の学習ログの可視化や実験管理機能を追加するパッケージ、ChainerUIを公開しました。

ChainerUIは、多くのChainerユーザが持つ「学習中の実験ジョブの進捗を手軽に知りたい」、「複数の実験ジョブの手軽に管理したい」ニーズに応えるために開発しました。
具体的には、下記の機能を備えています。

  • 学習ログの可視化
  • 実験履歴閲覧
  • 実行中の実験に対する操作 (スナップショット・学習ハイパーパラメーター修正)

本パッケージは、Chainerの学習用Trainerを監視するChainer extensionとして機能するものです。このChainer extensionを有効化した実験を、Webブラウザからリアルタイムで監視、制御することができます。複雑な依存関係がないため、Trainerを用いる既存の実験スクリプトに簡単に導入できます。

学習ログの可視化


Chainerで実験中のLossやAccuracy等の学習ログを、Webブラウザで可視化することができます。表示する項目は、ユーザが任意に指定できます。

実験管理機能


Chainerを使った複数の実験を1つの画面に一覧表示することができます。各実験には、実験条件を表示することができます。また、ブラウザ上から実行中の実験に対して、スナップショット保存の実行や、ハイパーパラメータの修正が可能です。

セットアップおよび実行

ChainerUIのインストール後、セットアップを行います。

pip install chainerui
chainerui db create
chainerui db upgrade

プロジェクトを登録しサーバーを実行後、Webブラウザでhttp://localhost:5000/にアクセスします。プロジェクトの登録はサーバー起動後にも行うことができます。

chainerui project create -d PROJECT_DIR [-n PROJECT_NAME]
chainerui server

学習ログの可視化

Chainer標準のLogReportが出力するlogファイルを監視し、実験中の学習ログを表示します。下記はtrain_mnist.pyを使用した場合の実行例です。

chainerui project create -d path/to/result -n mnist
python train_mnist.py -o path/to/result/1

“mnist” プロジェクトに “…/result/1” という名前の実験が加えられ、”path/to/result/1”に出力されるlogファイルのデータをグラフに表示します。

実験管理機能

上記logファイルと同じディレクトリにあるargsファイルを一覧に表示します。このargsファイルはkey-value形式のJSONファイルです。下記はtrain_mnist.pyに対して、起動引数をargsファイルに保存するサンプルコード(抜粋)です。

# [ChainerUI] import chainerui util function
from chainerui.utils import save_args

def main():
    parser.add_argument('--out', '-o', default='result',
                        help='Directory to output the result')
    args = parser.parse_args()

    # [ChainerUI] save 'args' to show experimental conditions
    save_args(args, args.out)

実験中のジョブを操作するには、ChainerUIのCommandsExtensionを使用します。同じくtrain_mnist.pyに対するサンプルコード(抜粋)です。任意のタイミングでスナップショットを取ったり、学習率などのハイパーパラメータを修正することができます。

# [ChainerUI] import CommandsExtension
from chainerui.extensions import CommandsExtension

def main():
    trainer = training.Trainer(updater, (args.epoch, 'epoch'), out=args.out)

    # [ChainerUI] enable to send commands from ChainerUI
    trainer.extend(CommandsExtension())

コード全体は、examples/train_mnist.pyを参照してください。

公開の背景

ディープラーニングの応用によって、様々な課題に対するState-of-the-artが日夜目まぐるしく塗り替えられる現在、実験の可視化や管理の効率化は大きな課題となっています。そのため、効率化支援のアプリケーションが乱立する状況も生んでいます。

PFNは、Chainerユーザが上記の課題に悩まされることなく、心地よく実験をこなせることを望んでいます。このような背景から、本パッケージをChainerユーザの効率をよりいっそう高めるための公式ツールとして位置づけて公開します。

PFN2017夏インターンシップの成果

本パッケージは、PFN2017年夏インターンシップに参加した稲垣さんと小林さんの開発成果です。

多くのリサーチャーやエンジニアを抱えるPFN社内では、以前から効率的な機械学習の実験の実施が課題となっていました。しかしながら、各々個人の工夫に頼っていたのが実情でした。そこで、「実験の効率化を支援するためのフロントエンド・アプリケーション」をインターンシップの課題として位置づけて開発を開始しました。

フロントエンド・エンジニアとしてタッグを組んだおふたりは、2か月という短い期間ながらも社内に溶け込み、要件調整から設計・実装まで自発的にプロジェクトを進めました。そしてインターンシップ終了後もPEとして継続的にコミットを続けた上、社内での4ヶ月間のドッグフーディングを経ることで、本日の公開を迎えています。

今後の展望

PFNはChainerUIをChainer製品群の1つとして位置づけ、今後も積極的に開発を進めていく予定です。以下の機能の実装が予定されています。

  • グラフの出力機能
  • 操作コマンドExtensionの拡充 etc

また、PFNでは最先端の研究開発成果物を、エンドユーザに届けるスキルを持ったフロントエンド・エンジニアを募集しています。

化学、生物学分野のための深層学習ライブラリChainer Chemistry公開

Kosuke Nakago

2017-12-18 11:41:05

* English blog is also written here.

Chainer [1]を使った、化学、生物学分野のための深層学習ライブラリ Chainer Chemistry を公開しました。

 

本ライブラリにより、分子構造に対して簡単に深層学習(Deep learning)を適用することができるようになります。

例えば、化合物の分子構造を入力とした毒性の予測や、HOMO(最高被占軌道)レベルの回帰予測など、様々な化学的性質の予測に深層学習を適用することができます。

なお本ライブラリの開発にあたっては、PFN2017夏インターンシップに参加した京都大学の秋田大空さんにも実装に携わっていただきました。

 

特長

様々なGraph Convolutional Neural Network のサポート

Graph Convolutional Network (詳しくは下記参照)の登場により、”グラフ構造”を入力として深層学習が適用できるようになりました。Graph Convolutional Networkは現在盛んに研究がおこなわれていますが、本ライブラリでは今年発表されたばかりの論文も含めいくつかのネットワークを追実装しています。

現時点では以下のモデルが実装されています。

  • NFP: Neural Fingerprint [2, 3]
  • GGNN: Gated-Graph Neural Network [4, 3]
  • WeaveNet: Molecular Graph Convolutions [5, 3]
  • SchNet: A continuous-filter convolutional Neural Network [6]

 

データの前処理部分をライブラリ化・研究用データセットのサポート

様々なデータセットを共通のインターフェースで使えるように、ソフトウェアを設計しています。また、研究用によく使用されるデータセットに関してはライブラリ内でダウンロード・前処理を行うことができます。

現時点では以下のデータセットをサポートしています。

  • QM9 [7, 8]: 9個までのC、O、N、F原子とH原子から構成された有機分子に対して、B3LYP/6-31GレベルのDFT(密度汎関数法)で算出されたHOMO/LUMOレベル、内部エネルギーなどの物性値をまとめたデータセット
  • Tox21 [9]: 12種類のアッセイに対する毒性をまとめたデータセット

 

学習・推論コードのExample code を提供

ライブラリの使い方がわかるよう、モデルの学習コード・推論コードのExampleも公開しています。すでに実装済みのモデル・データセットに対して手軽に訓練・推論を試してみることができます。

 

背景

材料探索・創薬などの応用分野では、分子構造を入力とするシミュレーションが重要な位置を占めます。中でも量子力学的効果を高い精度で取り込みたい場合に用いられるDFT(密度汎関数法)のようなシミュレーション手法は、特に大きな分子に対して、膨大な計算量を要求することが知られています。このため、有用な新物質の候補となる多数の分子構造に対してシミュレーションを行うのが困難です。

そこで機械学習分野では、これまでに実測・計算されたデータを学習することにより、未知の分子の物性値を予測するというアプローチでの研究がおこなわれています。ニューラルネットワークを用いることにより、量子シミュレーションよりも高速に物性値の予測ができることが期待されています。

 

 

Cite from “Neural Message Passing for Quantum Chemistry”, Justin et al. https://arxiv.org/pdf/1704.01212.pdf

 

化合物に対して深層学習を適用することを考えた場合、その入出力をどのように扱うかということが問題となります。これは、通常の深層学習手法が固定長のベクトル値データを入力とするのに対し、分子構造は可変長で分岐やループを持ちうるデータ形式、つまりグラフであるためです。しかし、近年グラフ構造を扱うことのできるGraph Convolutional Neural Network が提案され、注目を集めています。

 

Graph Convolutional Neural Network とは

Convolutional Neural Network (畳み込みニューラルネットワーク)は、局所的な情報のみで計算を進める畳み込み層の導入によって、画像分類、セグメンテーションや画像生成などの分野で成功をおさめました。

Graph Convolutional Neural Network では、同様にグラフ上で近いノードに対する畳み込み演算を導入することにより、グラフ構造の取り扱いを可能にしています。

How graph convolutions work

CNNが画像を入力とするのに対し、Graph CNNではグラフ構造(分子構造など)を入力として深層学習を行います。

 

グラフ構造を入力とするGraph Convolutional Neural Network は、分子構造にかぎらず、ソーシャルネットワークや交通網などに広く適用でき、ここ最近研究が進んできています。例えば、文献[10] では画像、[11]ではナレッジベース、[12]では交通量予測にGraph Convolutionを適用しています。

Graph Convolutional Networkに関しては、以下のブログでもわかりやすく説明されています。

 

対象ユーザー

  1. Deep learningの研究者
    本ライブラリでは、最新のGraph Convolutional Neural Network の追実装を行っています。
    今後、Graph Convolutionは計算科学に限らず、様々な分野への適用が考えられる技術なので、ぜひ様々な方に使っていただきたいです。
  2. 物質探索・創薬などの研究者
    本ライブラリを用いることにより、様々な化合物に対する物性値予測のモデルを構築することができます。

 

今後の予定

本ライブラリはまだベータ版で、開発を行っているところです。今後は以下のような機能をサポートしていきたいと検討しています。

  • Pre-trained modelを提供し、推論だけでの使用をサポート。
  • データセットの拡充
  • モデルの追加

Tutorial も用意しているので、ぜひ試してみてフィードバックをいただけるとありがたいです。

 

参考文献

[1] Tokui, S., Oono, K., Hido, S., & Clayton, J. (2015). Chainer: a next-generation open source framework for deep learning. In Proceedings of workshop on machine learning systems (LearningSys) in the twenty-ninth annual conference on neural information processing systems (NIPS) (Vol. 5).

[2] Duvenaud, D. K., Maclaurin, D., Iparraguirre, J., Bombarell, R., Hirzel, T., Aspuru-Guzik, A., & Adams, R. P. (2015). Convolutional networks on graphs for learning molecular fingerprints. In Advances in neural information processing systems (pp. 2224-2232).

[3] Gilmer, J., Schoenholz, S. S., Riley, P. F., Vinyals, O., & Dahl, G. E. (2017). Neural message passing for quantum chemistry. arXiv preprint arXiv:1704.01212.

[4] Li, Y., Tarlow, D., Brockschmidt, M., & Zemel, R. (2015). Gated graph sequence neural networks. arXiv preprint arXiv:1511.05493.

[5] Kearnes, S., McCloskey, K., Berndl, M., Pande, V., & Riley, P. (2016). Molecular graph convolutions: moving beyond fingerprints. Journal of computer-aided molecular design, 30(8), 595-608.

[6] Kristof T. Schütt, Pieter-Jan Kindermans, Huziel E. Sauceda, Stefan Chmiela, Alexandre Tkatchenko, Klaus-Robert Müller (2017). SchNet: A continuous-filter convolutional neural network for modeling quantum interactions. arXiv preprint arXiv:1706.08566

[7] L. Ruddigkeit, R. van Deursen, L. C. Blum, J.-L. Reymond, Enumeration of 166 billion organic small molecules in the chemical universe database GDB-17, J. Chem. Inf. Model. 52, 2864–2875, 2012.

[8] R. Ramakrishnan, P. O. Dral, M. Rupp, O. A. von Lilienfeld, Quantum chemistry structures and properties of 134 kilo molecules, Scientific Data 1, 140022, 2014.

[9] Huang R, Xia M, Nguyen D-T, Zhao T, Sakamuru S, Zhao J, Shahane SA, Rossoshek A and Simeonov A (2016) Tox21 Challenge to Build Predictive Models of Nuclear Receptor and Stress Response Pathways as Mediated by Exposure to Environmental Chemicals and Drugs. Front. Environ. Sci. 3:85. doi: 10.3389/fenvs.2015.00085

[10] Michaël Defferrard, Xavier Bresson, Pierre Vandergheynst (2016), Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering, NIPS 2016.

[11] Michael Schlichtkrull, Thomas N. Kipf, Peter Bloem, Rianne van den Berg, Ivan Titov, Max Welling (2017) Modeling Relational Data with Graph Convolutional Networks. arXiv preprint arXiv: 1703.06103

[12] Yaguang Li, Rose Yu, Cyrus Shahabi, Yan Liu (2017) Diffusion Convolutional Recurrent Neural Network: Data-Driven Traffic Forecasting. arXiv preprint arXiv: 1707.01926

 

実センサを搭載したロボットカーの深層強化学習による自律制御

Megumi Miyashita

2017-12-12 12:24:19

はじめに

はじめまして。PFNで夏季インターンに続き、アルバイトをしている宮下恵です。普段は東京農工大学大学院で強化学習に関する研究をしており、ものづくりやロボットに興味があります。

「実センサを搭載したロボットカーの深層強化学習による自律制御」について報告させていただきます。

 

続きを読む »

ニューラルネットの逆襲から5年後

岡野原 大輔

2017-11-28 11:39:04

私が2012年にニューラルネットの逆襲当時のコメント)というのをブログに書いてからちょうど5年が経ちました。当時はまだDeep Learningという言葉が広まっておらず、AIという言葉を使うのが憚られるような時代でした。私達が、Preferred Networks(PFN)を立ち上げIoT、AIにフォーカスするのはそれから1年半後のことです。

この5年を振り返る良いタイミングだと思うので考えてみたいと思います。

 

1. Deep Learning Tsunami

多くの分野がこの5年間でDeep Learningの大きな影響を受け、分野特化の手法がDeep Learningベースの手法に置き換わることになりました。NLP(自然言語処理)の重鎮であるChris Manning教授もNLPで起きた現象を「Deep Learning Tsunami」[link] とよびその衝撃の大きさを表しています。

その適用範囲は最初想定されていた画像認識、音声認識分野だけにとどまらず、機械翻訳、生物情報処理、最適化、ロボティクスなど多岐にわたっていきました。

 

2. Deep Learning Frameworkの登場

2012年当時はDeep Learningの研究開発をしようと思った時、使える代表的なライブラリはTorchとTheanoしかありませんでした。その後、2013年末にYanqing Jiaが博士論文を書く過程で作ったCaffeが登場し、2015年6月には弊社PFNからChainerを発表、2015年9月にはGoogleからTensorFlowがリリースされます。その後も各会社がそれぞれのDeep Learning Frameworkを発表していきました。

Chainerは開発者の得居がGW明けに突然作ってきて、使ってみると簡単にかけるものだと驚いたのを覚えています。それまではC++やGoで書いていたのですが、その時とは雲泥の差でした。numpyをはじめとしたpythonの強力な数値計算/データ解析用ライブラリ群の力も合わせpythonによりDeep Learningの研究開発をする流れが急速に広まりました。

また、Chainerが最初に唱えたDefine-by-Runの考え方はコミュニティに受け入れられ、その後PyTorchやTensorFlow Eager execusionなどでも採用され影響を与えていきました。

今ではPythonで数十行から数百行コードを書くだけで、複雑なネットワークを持ったモデルを分散学習することができ、CPU、GPUどちらであっても気にせず、簡単に書くことができます。

 

3. 強化学習との融合

深層学習は強化学習と融合し、大きなブレークスルーをもたらしました。DQNによりAtari2600の様々なゲームが人間と同レベルでプレイできるように学習できることが大きな話題となりました。

元々強化学習は、教師あり学習とは違って、環境からのスカラー値の報酬のみで複雑な制御を獲得できる有望な手法でした。さらに深層学習により価値関数や方策(状態に応じてどの行動を選択するか)の表現力が大きく上がると、これまで困難と思われた問題を次々解けるようになりました。その中でもAlphaGo[オリジナル, AlphaGo Zero]がトップ棋士をやぶったことは大きなマイルストーンとなりました。

弊社もCES2016で強化学習を利用したロボットカーの自動運転のデモンストレーションなどでその可能性について世の中に示していきました[link]

強化学習は未だに学習、利用ともに様々な課題がありますが急速に研究が進んでおり今後ますます重要になるでしょう。最近の強化学習については、Deep RL Bootcampの資料などが参考になるでしょう。

 

4.  研究の爆発

DNNは最初は限られた研究グループのみが研究成果をあげていましたが、現在は世界中の企業、研究グループが次々と研究成果をあげるようになっています。どこの国や地域、企業でもいいアイディアさえあれば、すぐに大きなインパクトをあげられるようになっています。

これにはarxivなどのオープンジャーナルが大きな役割を果たしています。以下にarxivの関連カテゴリ(cs.AI,cs.LG,cs.CV,cs.CL,cs.NE,stat.ML)への投稿数のグラフをあげます[link より図を引用]

これまで研究は国際学会やジャーナル論文が中心でしたが、いつでも誰でも投稿できるオープンジャーナルが登場し、研究プロセスは非常に加速されました。発表された論文が数日後に別の論文で引用されることも珍しくありません。

また、論文と一緒に実験用コードをgithubなどで公開することで、さらに知識の共有が進むようになりました。

一方、オープンジャーナルでは査読がなく論文は玉石混交となり、質が下がるという危惧はあります。しかし注目された研究はすぐに世界中で追試がされチェックされ、怪しいところがあるとRedditなどで指摘されたりします。また、今後はコメントツール(例:Librarian)などを標準が使うことが普及すればさらに論文の信頼性を担保できるようになるかもしれません。

また、大量の論文が投稿され全部追うことは難しくなり、論文キュレーションツールとして、話題になっている論文をまとめるarxiv sanity preserverdeeplearn.orgなども登場しています。

私も読んだ論文の中から面白そうなものはをツイートしていますが、それでも重要な論文を見逃すことがよくあるほど、研究成果が爆発的に出てきています。

 

5. 生成モデル

Deep Learningは、生成モデルでも大きなブレークスルーを起こしました。

例えば、VAE(変分自己符号化器)は連続変数を潜在変数とした場合でも誤差逆伝搬法だけで効率的に学習できるものであり衝撃的でした。

そして二つのニューラルネットワークを競合させて学習するGAN(敵対的生成モデル)がこれまでの生成モデルではできなかった高精細な画像を生成できることは非常に大きなインパクトを与えました。

GANは学習が難しいため、登場から1年間は殆ど後続の研究がなかった中、DCGANが自然な画像生成モデルの学習に成功し、実写と変わらないレベルの画像を生成できることを示しました[最近のGANの生成例,イラストの生成例]   。一方で、GANはその学習の難しさからダイエット本や英語本と同じように多くの研究を生み出しています(GAN Zoo)。

その後、通常の確率モデルの最尤推定による学習では,現実世界のデータにみられるサポート(確率密度値が0ではない)が低次元であるような分布を学習することができず[link]、GAN(の変種)が実現するOptimal Transport (最適輸送)やIntegral Probability Metricsを使わなければいけないということがわかり、Implicit Probabilistic Modelという名とともにGANが注目されました。

 

6. 理論解明

Deep Learningがなぜ学習できるのか、なぜモデルが大きいのに汎化性能が高いのか、何を学習できて何はできないのかといった問題に多くの研究者が取り組んできました。

もともとDeep Learningは非線形のモデルであり,パラメータ数が非常に大きく、従来の統計モデルや機械学習理論からは、謎に包まれていました。

完全な解明には至ってはいないものの分かってきたのは、Deep Learningの確率的勾配降下法(SGD)は極小解にはまりにくいだけでなく[link1 link2]、汎化性能が高いような幅が広い解を見つけられるということ[link]、またミニバッチ正規化[link]、スキップ接続[link]といったテクニックが学習を容易にし、適切なノイズを与えることで汎化性能をあげていることがわかってきています。

また、従来の機械学習の考え方ではパラメータ数が少ない方がモデルの複雑さは下がり、過学習しにくくなりますがDNNの場合、汎化性能はモデルが大きければ大きいほど高いことも予想されています[link]。

 

7. Software 2.0

またDeep Learningが工学的にも、「推論時と計算量と使用メモリ量が固定で済む」「モデルサイズを変えることで計算量と精度のトレードオフをスムーズにできる」「GPUのような並列処理向けプロセッサの開発が非常に容易になる」という利点があることも注目されてきました。

これをAndrej KarpathySoftware2.0と名付け、Deep Learningが単なる機械学習のツールではなく、ソフトウェアの作り方を変える大きなパラダイム・シフトを起こすと述べています。

 

今後について

それでは今後はどのようになっていくのでしょうか。未来の予測は難しく、5年前に予想した時は、Deep Learningがここまで広く適用されるということは予想できていませんでした。それでもしてみましょう。

 

1. 多数の教師なし学習の登場

現在、ディープラーニングが大きく成功しているのは正解ラベルがついたデータを使った教師あり学習です。一方、本当に難しい問題を解くには教師なし学習が重要になると考えられます。

Yann LeCunは講演の中で「知能をケーキに例えるなら、教師なし学習は本体であり、教師あり学習はケーキの飾り、強化学習はケーキ上のサクランボぐらいである。私達はケーキの飾りやサクランボの作り方はわかってきたがケーキ本体の作り方はわかっていない」

と述べています。

また、Geoffrey Hinton教授も[link]「脳のシナプスは10^14個あるが,人は10^9秒しか生きられない。サンプル数よりパラメータ数の方がずっと多いことになる。(これらのシナプスの重みを決定するためには)1秒あたり10^5個の制約が必要となり,多くの教師無し学習をしているとの考えに行き着く」と述べています。

世の中の膨大なデータの大部分は教師データがついていません。これらのデータを活かせる学習手法が望まれています。教師なし学習の中でも”pretext task”は、関係のなさそうなタスクを学習することで、その副作用として本当に学習したいことを学習することが増えています。現時点でも、様々なpretext taskが提案されています。おそらくpretext taskは一つだけではなく無数あり、それらを組み合わせて強力な学習を実現していると思われます[例, 表1に例多数]。しかし、これまで多くの教師なし学習手法が提案されているものの、それを使って教師あり学習、強化学習の性能を大きく向上する決定的な手法はまだ見つけられていません。

また、大きく成功するには学習データ数やモデルの大きさのスケールが数桁足りないという可能性があります。

人は1年間に10時間/日*3600秒/時*365日*10Hz=1.3億回の画像をみてそれらで予測学習や、補間学習、ノイズ除去学習をすることができます。

ただでさえ教師あり学習は人よりもサンプルを必要としているので教師なし学習でも大きな成果を生み出すには莫大な量のサンプルが必要になるかもしれません。

 

2.  微分不可能な要素を含んだNN

現在のディープラーニングは微分可能な構成要素を組み合わせて作られています。これにより誤差逆伝播法が可能となり、どれだけネットワークが複雑になっても、出力を修正するには各モジュールをどれだけ修正すればよいかが正確にかつスケーラブルに求めることができます。

一方で、微分不可能な構成要素も困難な問題を解くためには不可欠です。例えば、汎化するロジックやルールを獲得するためには、過学習につながる情報の中で不要な情報を捨てることが必要になります。これには複数の値を一つの値に縮約(contraction)する、または離散化するということが必要になります。

あの猫もこの猫もそのまま扱わずに「猫」という離散値を割り振ってその上でルールを学習すれば、誤った入力との相関を見つけることはありません。

一方、離散化は微分不可能な計算ですので、誤差逆伝播が使えません。しかし、この場合でも勾配の不偏推定量を求められる手法がいくつか登場しています[例 Relax]。

また、強化学習においても”環境”は微分不可能でそもそもどのような計算がされるのかはわかりませんが、これも同様に環境のダイナミクスをシミュレーションするNNを作り、伝播することができるでしょう。これは環境を想像する能力やデータから獲得した上でのモデルベース学習とも関係します。

離散変数によるゲートはconditional computationやmixture of expertシステムのように使うモジュールをダイナミックに選択し、そのモジュールだけ計算させることで計算量を劇的にさげることができます。

今後は、誤差逆伝播法だけではなく、離散変数での最適化も可能な離散/組み合わせ最適化法[link]、遺伝的アルゴリズムや、進化戦略[link], を使った手法も必要になるでしょう。

 

3.  メタ学習、継続学習

より複雑な問題を解くために、ある学習問題に他の学習結果を利用することが必要となります。今のようにある問題に対して特定の学習器で学習させるのではなく複数の問題、タスクを同時にまたは順番に一つの学習器を学習させることが重要となってきます。

一つの人工知能システムが非常に多くの問題を解けるようになる汎用人工知能システムに到達するにはまだ多くの問題を解く必要があり難しいですが、それでも関連するタスクを一緒に、または次々と学習していくことで一つの学習に必要なサンプル数を大幅に削減できたり、性能を大きくあげるといったことは可能になると考えられます。

カリキュラム学習、ブートストラップ学習といった、複数の学習を計画をたてて学んでいくことも今後大きく伸びていくことと考えられます。

 

4.  シミュレーションとの融合、説明可能性

現実世界の問題を解く上で、現実世界の様々な制約を克服するためにシミュレーション上で学習、検証することがより一層必要になります。その上、どのように計画を立てているのかを説明する上でもブラックボックスであるニューラルネットワークモデルの中の計算処理を説明するのではなく、実際に実現例を示し、シミュレーション上でこうなっているからと説明することが増えていくと考えられます。

今の生成モデルは、様々な条件付けをして生成をすることで滅多にとれないデータを生成し、その上で学習、検証することを可能にします。これは、システムに想像力を備えさせた上で、まだ経験していない環境で学習できることを可能とさせるでしょう。

 

5. 人や既存システムとの協調

これらAIシステムが実問題に適用されていく中で、いかに人と協調するか、既存システムと協調するかが重要となってきます。全ての問題を完璧に解くことが理想ですが、そうならなかった場合でも、解けている問題だけを担当させ、残りを人や既存システムが担当することが多くなるでしょう。

その場合、認識結果や理由をわかりやすくするだけでなく、制御できるようにチューナーのようなツマミが必要になるかもしれません。また、人が自分の感覚を拡張したと感じられるように、操作可能性や応答性が重要になります。人馬一体という言葉がありますが、そのように人がAIシステムを自由自在に扱うことができるようになることが必要となるでしょう。

分散深層学習パッケージ ChainerMN 公開

秋葉 拓哉
リサーチャー

2017-05-09 06:28:29

Chainer にマルチノードでの分散学習機能を追加するパッケージ ChainerMN のベータ版を公開しました。

ChainerMN とは

ChainerMN は Chainer の追加パッケージで、Chainer を用いた学習を分散処理により高速化できます。柔軟で直感的に利用できる Chainer の利便性をそのままに、学習時間を大幅に短縮できます。1 ノード内の複数の GPU を活用することも、複数のノードを活用することもできます。既存の学習コードから数行の変更で ChainerMN を利用可能です。ChainerMN は既に社内の複数のプロジェクトで実証が行われています。

Chainer を用いた通常の学習における 1 イテレーションは下図のように Forward, Backward, Optimize の 3 つのステップからなります。

ChainerMN はこれに、下図のように、通信を行う All-Reduce のステップを挿入します。All-Reduce のステップでは通信を行い、全ワーカーが Backward で求めた勾配の平均を計算し全ワーカーに配ります。Optimize のステップでは、この平均の勾配が利用されます。全ワーカーは学習開始後は常に同じパラメータを持ちます。

下図は以前に行った大規模ベンチマークの結果です。ChainerMN で 128 GPU を利用し画像分類の学習を約 100 倍高速化することができました。詳しくはこちらの記事をご覧ください。

利用方法の概要

以下、ChainerMN の利用方法の概要を紹介します。詳しくはドキュメントをご覧ください。

セットアップ

ChainerMN をインストールする前に、CUDA-Aware MPI, NVIDIA NCCL のセットアップが必要です。

CUDA-Aware MPI

ChainerMN は MPI を利用しており、MPI は CUDA-Aware 機能が利用できる必要があります。CUDA-Aware 機能をサポートするオープンソースの MPI には Open MPI, MVAPICH などがあります。以下は Open MPI を CUDA-Aware でインストールする例です。

./configure --with-cuda
make -j4
sudo make install

複数ノードで利用する場合、InfiniBand 等の高速なインターコネクトの利用を推奨します。

NVIDIA NCCL

NCCL はノード内の GPU 間の集団通信を高速に行うためのライブラリです。こちらを参考にビルド・インストールし、環境変数を適切に設定して下さい。

ChainerMN

ChainerMN は pip よりインストールできます。

pip install chainermn

 

学習コードの変更

ChainerMN を利用した分散学習を行うためには、既存の Chainer による学習コードに変更を加える必要があります。ドキュメント内のチュートリアルでは順を追ってこの手順を説明しています。

以下では、そのうちの最も重要なステップである、コミュニケータの作成と、オプティマイザの置き換えについて説明します。

コミュニケータ

コミュニケータは以下のように作成します。

comm = chainermn.create_communicator()

通信はこのコミュニケータを通じて行います。コミュニケータからは、参加しているワーカー数や自分がその何台目か(rank と呼ばれます)などの情報を得ることができます。

オプティマイザ

ChainerMN は Chainer のオプティマイザを置き換えることによりワーカー間の通信処理を挿入します。以下は通常の Chainer のコードで Adam のオプティマイザを作成している部分です。

optimizer = chainer.optimizers.Adam()

ChainerMN では、以下のように create_multi_node_optimizer 関数を呼び出して、通信処理が追加されたオプティマイザを作成します。

optimizer = chainer.optimizers.Adam()
optimizer = chainermn.create_multi_node_optimizer(optimizer, comm)

create_multi_node_optimizer によって作成されたオプティマイザは、通信処理が追加されている以外は通常のオプティマイザと同様に扱うことができます。

実行

mpiexec または mpirun コマンドを用いて学習スクリプトを起動します。以下は localhost 内で MNIST example を 4 プロセスで起動する例です。

mpiexec -n 4 python train_mnist.py

終わりに

以上、ChainerMN の利用法を駆け足で紹介しました。かなりの部分を省略しているので、実際に利用される際にはドキュメントを見て頂ければと思います。

ChainerMN は今後、通信と計算のオーバーラップ、ワーカー間の非同期な計算、勾配の圧縮による通信効率化、耐障害性などの課題に取り組み、改善を続けていく予定です。

人工知能技術の健全な発展のために

Hiroshi Maruyama

2017-04-12 15:53:06

4月10日の日経ITproの記事「 AIベンチャーの雄が総務省の開発指針に反対する理由」で、総務省主導で推進されているAIネットワーク社会推進会議とその開発原則分科会からPFNが離脱したことを、取り上げていただきました。私とのとりとめのないインタビューを適切にまとめてくださった日経ITpro浅川記者に深く感謝いたします。また、その記事に対して、はてなブックマーク、NewsPicks、FacebookなどのSNSを通して多くのコメントを下さった方にも感謝の意を表します。ありがとうございます。離脱の理由は記事にある通りですが、総務省の方々も私達の立場を真摯に受け止めてくださっていて、実りのある議論を続けてくださっています。その上で、今後の議論を深めるために、いくつかの点について補足したいと思います。

汎用人工知能と特化型人工知能

現在、人工知能という言葉は大雑把には、

  • 汎用人工知能(「強い」人工知能とも呼ばれ、自意識・創造性などあらゆる面で人間と同等以上の知性を示す、いわゆる「人工知能」)と、
  • 特化型人工知能(ある特定のタスクで知性を示すソフトウェア、あるいはそれを組み込んだ自動機械)

のどちらかまたは両方を指す言葉として使われています(より詳細には、様々な知能の定義があり、百人いれば百通りの定義があるようです)。文脈によってどの意味であるかが明確であればよいですが、そうでないと混乱の元になります。

汎用人工知能がいずれ実現することは間違いないでしょう。汎用人工知能が社会に与えるインパクトは計り知れず、そのために私達の社会がどのように準備しておくべきか、今から議論することには大変意味があると思います。しかし、汎用人工知能が実現可能になるまでには、まだいくつもの未解決問題を解かねばなりません。過去約60年にわたる人工知能の研究において、探索、推論、知識表現など多くの技術革新がありました。最も最近のブレークスルーは深層学習です。これら様々な革新的な技術の積み重ねがあるにもかかわらず、汎用人工知能の実現は、今見えている技術の延長上には無い、というのが私達の認識です。

汎用人工知能の実現が、人工知能研究の究極のゴールだとすれば、特化型人工知能は機械をより知的にするための営みから生まれてきた技術だといえるでしょう。「より」知的という意味は、それまでは機械にできないと思われていたことができるようになる、ということです。初期の人工知能研究では、例えば手段目標分析(means-ends analysis)という探索技法が盛んに研究されました。これは数学の定理証明など「高度に知的な」問題を解くのに用いられ、当時の人工知能の成功例とされましたが、今では乗換案内における探索アルゴリズムなどに実装され、日々使われている手法です。他にもコンパイラに使われる形式言語理論、オブジェクト指向やモデリング言語に使われる概念階層など、人工知能研究から発生した手法は、現在では多くのシステムの中で道具として使われています。すなわち、特化型人工知能とは「その時代における情報技術の最先端を指す言葉」と捉えてもよいでしょう。その意味では、最近注目を浴びている深層学習も、いずれは日々のプログラミングの中で当たり前のように使われる道具になっていくでしょう。特化型人工知能とは、自動車や洗濯機などと同様、道具に過ぎないのです。

深層学習の持つポテンシャル

その一方で、PFNが注力している深層学習は情報技術の世界を大きく変えてしまうポテンシャルがあると、私達は考えています。それは、応用領域の爆発的拡大と、そもそも情報システムのあり方の革新に現れてきます。

深層学習の技術は、当初は画像認識において、高い認識精度を得たことで注目を浴びました。現在では、音声認識や機械翻訳においても広く使われるようになってきているのはご承知のとおりです。PFNでは、深層学習を特にIoTなど物理世界との接点で応用しようとしています。自動運転のための画像認識バラ積みロボットの学習深層強化学習による自動運転、同じく深層強化学習によるドローンの制御深層生成モデルによる異常検知がんの診断などは、今までPFNが深層学習の応用を試みて成功してきた分野です。また、最近話題になったものとして、線画の自動着色があります。しかし、これらは氷山の一角に過ぎません。深層学習の応用分野はこれからも爆発的に増えていくと考えています。特に、産業用機器の制御など組み込み分野では、より高い精度、より高度な制御を行うために今後は深層学習を使わないシステムは考えにくくなってくるでしょう。

深層学習は同時に、ハードウェアからシステム開発の方法論、さらには業界のエコシステムまで、情報システムそのもののあり方も変えていきます。1990年代からつい最近にいたるまで、コンピュータといえばほとんどがインテルのx86アーキテクチャに基づくものでした。一方、現在深層学習を使っている多くの企業は、GPUを使っています。PFNでも、石狩にあるさくらインターネットのデータセンターに、数百個規模のGPUクラスタからなる計算基盤を構築していただいて、これを日々使っています。しかし、私達はGPUが究極のアーキテクチャとは考えていません。これから多くのハードウェアのイノベーションが起きるでしょう。

プログラミングモデル、あるいはソフトウェアのレイヤでは、「深層学習フレームワーク」という技術が群雄割拠でしのぎを削っている段階です。PFNでもご存知の通り深層学習フレームワークChainerを開発していて、これはNVIDIA、Intel、IBMなど主要なITベンダーにサポートされていますし、世界で戦える技術だと自負しています。このようなフレームワーク、すなわち深層学習に基づくプログラミングモデルを使いこなせることが、これからのITエンジニアの必須スキルとなることでしょう。

さらに今後、

  • 深層学習を用いたシステム開発のための方法論、すなわちお客様の要求をどのように深層学習の問題として表現し、訓練データや学習環境を用意し、評価やデバッグを行い、運用するかという知識体系(今までのソフトウェア工学に代わる体系)、
  • 深層学習によって作成される学習済みモデルの知的財産の保護、
  • あるいはシステム開発や学習済みモデルをめぐる新しいビジネスのエコシステム

など、情報技術の現在の常識が、すべての局面において大きく変わっていくことでしょう。

人工知能技術の健全な発展のために

「人工知能」という言葉がひとり歩きする中で、人工知能に対する過度な期待と、その裏返しである脅威論が、多くの人々の判断を歪ませているように思います。私たちは、今の技術がどのレベルにあり、どのような発展が想定されているかを正しく理解し、その知識に基づいて社会がどうあるべきかを議論しなければなりません。

深層学習が世の中を大きく変えていく中で、私達が世界の中で競争力を失わずに、なおかつ人類社会の発展に貢献するために何ができるのか、私達人工知能技術に携わるものが、その現状と展望を正しく発信するように、戒めていきたいと思います。

 

深層強化学習による自動駐車の実装

Shiba Shintaro

2017-03-22 19:15:13

初めまして! PFN でアルバイトをさせてもらっている芝慎太朗です。普段は東京大学大学院で行動神経科学の研究をしています。僕が去年取り組んでいた、「車が自ら駐車場に向かい停止する」自動駐車プロジェクトについて報告します。まずはこちらのアニメーションをご覧ください。(アニメーションがうまく再生されない場合は画像をクリックしてください)

We implemented self-driving car that parks itself using deep reinforcement learning. The English slide is available at SlideShare!

背景

深層強化学習は、2015年から非常に注目され始めた人工知能技術であり、深層学習と強化学習を組み合わせたものです。深層強化学習によって、それまでできなかったような複雑なタスクにおいてもコンピューターが人を上回り始めました。プロ棋士を破ったことで一躍話題になった Google DeepMind による囲碁の人工知能 AlphaGo もこの技術を使っています。最近では スマッシュブラザーズにおいても威力を発揮し 話題になりました。

深層強化学習は制御タスクとの相性がよく、実際に PFN でもぶつからない車の自動運転ドローンの制御などに成功してきました。

PFN が CES 2016 で展示した自動運転(参照)では、アルゴリズムとして深層強化学習ブームの火付け役となった Deep Q Network(以下DQN)を用いています [Mnih et al., 2015]。ニューラルネットワークへの入力は、LIDAR(wikipediaによる解説)を模した近接物への距離と角度センサー、直前の行動、現在の車のスピードとステアリング(ハンドルの曲がり具合)でした。

しかし自動運転技術を現実に応用することを考えると、一般に距離センサーよりもカメラの方が安価という特徴があります。一方で、距離の計算が必要になるためカメラ画像の方が制御は難しくなると考えられます。実際、つい最近も ブラウザ上で動作するような簡単な自動運転デモ が公開されたばかりですが、これも距離センサーを使用しており、使用しているニューラルネットは3層程度の簡易なものです。
距離センサー・カメラそれぞれに得意・不得意な状況や利点・欠点があるので一概にどちらを用いるべきとは言えませんが、いずれにせよ、距離センサーに頼らずカメラ画像のみを用いて車を制御するようなアルゴリズムの研究開発は非常に重要です。

本プロジェクト

このプロジェクトでは、距離センサーではなく、車に取り付けられたカメラによる主観的な画像の入力によってend-to-endのアルゴリズムで車を制御できないか、ということに挑戦しました。具体的なタスクとして選んだのは駐車です。すなわち、車を駐車スペースに移動して停止させます。

アルゴリズムとしては DQN の改善版である Double DQN を使用しました。Double DQN は行動価値の見積もり値である Q 値の過大評価を防ぎ、ニューラルネットの発散を防ぐことで学習を安定させるという特徴があります [Hasselt et al., 2015]。詳しくは解説スライド(この投稿の最後にリンクが貼ってあります)や元論文をご覧ください。

まずは環境の定義です。今回は実機や既存のシミュレータを使用せず、簡単な車の物理シミュレータを自分で実装しました。このシミュレータはアクセル、ブレーキ、ハンドルの曲がり具合を受け取り、牽引力、空気抵抗、転がり抵抗、遠心力、制動力、コーナリング力を計算し、車の位置、速度、加速度を更新します。車や駐車スペースの大きさと、車が探索できる地面の範囲なども定義しました。次の図は、シミュレーションされた環境を上から見た俯瞰画像です。黒い長方形が駐車スペース、赤と黄色の長方形が車(黄色が前)になります。


次にエージェントへの入出力を定義します。エージェントは環境の状態を入力として受け取り、アルゴリズムにしたがって適切な行動を選択します。現実世界に例えるなら車に乗っている人に相当するでしょう。行動はアクセル、ブレーキ、ハンドルを左右に曲げることの組み合わせで全部で9種類用意しました。状態としては、環境を車から見た主観画像と、現在の車のスピードとステアリング(ハンドルの曲がり具合)を使用しました。つまり、車の現在位置や駐車スペースまでの距離を直接知ることはできません。

主観画像は、車を中心に3方向または4方向に設置されたカメラ画像を用意し、車の周りをぐるりと見渡せるようにします。次の画像はカメラが4台の場合の主観画像です。画像の大きさはニューラルネットに入力する直前で 80 x 80 に縮小します。わかりやすいように中心に先ほどと同様の俯瞰画像を載せました。


エージェントは、画像の入力に合わせて適切な行動を選択し、車を駐車スペースに導いてそこで停車することが求められます。状態がカメラ台数分の画像と、画像でないパラメータ(現在の車のスピードとステアリング)からなるため、ニューラルネットの構造を工夫して以下のようにしました。この図はカメラが3台の場合に使用されたニューラルネットワークです。図中の Convolution とは、画像を処理するための畳み込みニューラルネットを示します。


最後に報酬を定義しておきます。「車が駐車スペースに向かい、その中で停止する」、すなわち「車ができるだけ長く駐車スペースの内側にいる」ことを学習するような報酬の与え方を考えます。いろいろな設定を試しましたが、最終的に

  • 車が駐車スペースの内側にいる場合、+1
  • 車が地面の外にいる場合、-1
  • その他の場合、0.01 – 0.01 * ゴールまでの距離

というふうに設定してみました。
その他の細かい設定や、他に試した報酬の設計などは末尾のスライドをご覧ください。

結果

GeForce GTX TITAN X 上で約一週間ほど学習を回し続けた結果、冒頭で示したように、車が自動で駐車スペースに向かい停止するように学習できました。次のアニメーションは冒頭と同じもので、左が車の軌跡、右が実際にニューラルネットワークに入力された画像です。

しかしながらやはりタスクの難しさもあって、このまま学習を続けていくと車が地面をぐるぐる回り続けたり、パラメタによっては学習途中でニューラルネットの出力が発散してしまったりという場合もありました。こちらも詳細はスライドを見ていただければと思います。


考察

深層強化学習を用いて、主観画像の入力から自動駐車を学習できました。画像を入力して車を制御するのは、距離や角度のセンサーよりも一段階難しいタスクです。実は、このプロジェクトも距離などを入力にして学習させるところから始めました。距離を直接入力した場合には安定してすぐに学習できたものの、主観画像では Q 値の発散や、うねうねと動き続ける車が誕生したりとなかなか安定しませんでした。

原因として考えられることの1つに、畳み込み層で車や駐車スペースの場所がうまく検出しきれていない可能性があります。先にCNNから位置を回帰するような事前学習をおこなってその重みを初期値として使うことや、一度 CNN 部分の出力を可視化してみることも有用でしょう。

また学習を安定させるために、アルゴリズムの変更も効果的かもしれません。例えば A3C [Mnih et al., 2016] や TRPO [Schulman et al., 2016] を使ってみたり、モンテカルロ法と組み合わせた学習などは試す価値があると考えられます。

実際にはいきなり始めから主観画像を入力したわけではなく、上で少し述べたように、簡単なタスクから徐々に難しくしていました。また、報酬の設計を変更しつつ、駐車スペースの位置や車の初期設定を変えながらカリキュラム学習をしたりと細かい実験を試しています。これらの詳細が知りたい方は上記のスライドを見ていただければと思います。

まとめ

本プロジェクトの結果はまだ様々な状況で完全に対応できるものではありませんが、深層強化学習によってカメラ画像のみで自動駐車が実装できる可能性を示したものだと言えます。今後の方向性としては、学習アルゴリズムを変更して学習を安定させたいです。シミュレーションだけではなく、実機でも実現できれば非常に面白いと思います。

僕は現在も他のプロジェクトに取り組みながらアルバイトを続けています。初めからプログラミングや強化学習ができたわけではなく、自分で勉強しつつ、わからないところをメンターに教えていただきながら、大変恵まれた環境で進めることができたプロジェクトでした。学生の皆さんも興味があればアルバイトやインターンに積極的に飛び込んでいってみてはいかがでしょうか。