異常検知ナイトで講演してきました

Tomoki Komatsu

2018-03-06 15:17:53

みなさん こんにちは!
2/14にDeep Learning Lab異常検知ナイトというイベントでPreferred Networksの比戸、中郷、小松が講演してきました。

異常検知というニッチなテーマでしたが、300人以上に聴講していただきました。

この講演は3パートに分かれていて、基本的な手法からディープラーニングの応用まで一通り話しています。

資料は、比戸パートがこちら、小松と中郷パートがこちらです。

また、発表当日の動画はこちらになります。(PFNパートは5:00~です)

異常検知入門(比戸)

Deep Learning Lab 異常検知入門 from Shohei Hido

スライドにもある通り、「データがあるところに異常あり」で、異常検知には様々なアプリケーションが想定されます。

では、そもそも異常とはなんでしょうか?というのが、このパートのメインテーマです。

異常検知には、3つの種類の問題があります。

  • 外れ値検知
  • 変化点検知
  • 異常状態検出

これらがどのような問題かを解説し、代表的なアプローチを紹介しました。

後半では「データサイエンティストあるある in 異常検知」を紹介し、異常検知の大変さ、奥深さについて説明しました。

異常検知ハンズオン(中郷)

DLLab 異常検知ナイト 資料 20180214 from Kosuke Nakago

このパートは外れ値検出の代表的な手法を、scikit-learnを使って実際にデモを行いました。
解説したアルゴリズムは、以下の5つです。

  • Kearnel Density Estimation
  • Gaussian Mixuture Model
  • Local Outlier Factor
  • Isolation Forest
  • One Class SVM

2つの正規分布から生成した正常データと、一様分布から生成した異常データに対して、これらの手法を適用しました。
コードは資料に書かれているので、すぐに試すことができます。
どのアルゴリズムも異常検知できていますが、分類平面に手法の個性が見られて面白いですよ!

以下の画像は、それぞれの手法の分類平面です。

時系列データのリアルタイム異常検知(小松)

最後のパートでは、時系列データに異常状態検出手法を適用するデモを行いました。

発表の分かりやすさのために、このパートでも人工データを使って実験を行いました。

早速ですが、青い波形は正常、赤い波形は異常データです。

正常データは、2つの正弦波とガウスノイズを合成して作られています。

みなさんどこか異常か分かりますか?

少なくとも私はいきなりこの波形を見せられてもすぐに気が付く自信はありません!

このパートでは、このように定常動作が決まっているような時系列データに対して異常検知を行っていきます。

時系列データの異常検知の代表的な手法は、自己回帰モデルを使った手法です。

これは線形回帰などで次の1点を予測し、予測が外れたら異常とするものです。

本発表では、この予測モデルをCNNにしてデモを行いました。

先ほどの例に対して異常検知をした結果はこちらになります。

実は異常データは、含まれる正弦波の周波数が違っていたんですね。

下の青いグラフが異常度なのですが、異常が起きているところで異常度が上がっていることが分かります。

 

このイベントが終わった後に、多くの方から質問をいただけました!

異常検知の関心と需要がますます高まっていることを感じます。

それではみなさん、よい異常検知ライフを!

 

「コンピューターサイエンスのすべての分野に精通していること」という応募資格に込めた想い

Toru Nishikawa

2018-02-27 16:00:55

※PFNの募集要項は、本ブログの内容をふまえ、適切に意図が伝わるよう一部更新しました


PFN代表の西川です。

今回は、SNS上でもたびたび話題(炎上?)になっているPFNの応募資格について、改めてご紹介したいと思います。
PFNの採用募集ページに書かれたリサーチャーの条件には、「コンピュータサイエンスのすべての分野に精通していること」という一文があります。この条件は、PFIの時から、リサーチャーの応募資格として常に掲げてきました。

その背景にある想いは、コンピュータサイエンスの研究をする上では、一つの分野だけでなく、幅広い分野について深い知見を有することが極めて重要である、ということです。たとえば、データベースの研究をする上では、トランザクション処理の理論や関係代数について詳しく知っているだけではなく、データベースを動かすコンピュータアーキテクチャ、ストレージ、また、今では分散データベースが一般的になってきているので、コンピュータネットワークについての知見も持っていることが必要不可欠です。深層学習を研究する上では、いまや、一台のコンピュータを使って実現するだけでは競争力が持てず、効率の良い並列処理が必須です。フレームワークを作る上では、コンピュータアーキテクチャや言語処理系の仕組みを理解していることが不可欠です。ドメイン特化した言語を作るような場面では、プログラミング言語理論についての理解がなければ、建増し建築のような言語が簡単にできてしまいます。強化学習においては、シミュレーションや、レンダリングの技術を洗練させていくことも重要です。

このように、一つの分野を知っているだけではもはや強みを出すことはできない時代になってきています。どのような分野と分野を融合したら新しい技術が生み出されるのか、最初から予見するのは難しいことです。私たちには、最先端の技術を切り拓いていくミッションがあります。そのために、すべての分野へ精通するべく、技術を追求していくことが極めて重要だと考えています。

精通という日本語は、その分野について広い知識や深い理解を持つことを示しています。必ずしも、その分野のトップカンファレンスに論文を出せるということを示しているわけではありません(そのためには、知識や理解だけでなく、新しい研究をするという重要な能力が必要になります。そして、そのような能力を身につけていくことも重要だと思います)。また、すべてを知り尽くしているということを表しているわけでもありません。むしろ、すべてのことを知り尽くしていると言い切れる人は、サイエンティストではないと思います。コンピュータサイエンスは今まさに急速に発展している分野であり、その進化を常に追い求めていくことは、極めて重要な姿勢だと考えています。

時にはSNSなどで「コンピュータサイエンスのすべての分野に」という部分が、誤解されたり、面白おかしく茶化されたりするようなことも散見されますが、この応募資格に込めたメッセージは、依然としてPFNの文化を形成する上では重要なことだと思っており、変えるつもりはありません。しかし、この応募資格について、誤解を生まないような表現を新たに考えていくことも必要だと考えています。

この10年間、コンピュータサイエンスの領域も急速に広がってきています。この流れはさらに加速するでしょう。また、コンピュータサイエンスの枠にとどまらず、様々な分野を融合することによって、新しい研究分野もできてくるでしょう。ですので、次のような要素を加味して考える必要があると思います。

  • 現時点でのコンピュータサイエンスのすべての分野に詳しいということよりも(もちろん広い分野を知っていることは必要ですが)、これから生まれてくる新しい分野、コンピュータサイエンスの発展の動きを吸収することのほうが、今後は重要になることを考え、現時点での知識よりも、学ぶ意欲を重要視します
  • コンピュータサイエンスだけでなく、ソフトウェア工学、ライフサイエンス、機械工学など、他の分野についても理解を深めていくという姿勢を評価します
  • 新しい技術の組み合わせによるイノベーションをおこすため、人工知能分野の専門家だけでなく、多様な専門性を持つメンバーを歓迎します


これまでは、この条件は、リサーチャーのみに適用していました。しかしPFNでは、リサーチャーもエンジニアも、分け隔てなく、一丸となって、新しい技術を切り拓いていくことが重要だと考えています。リサーチャーもエンジニアリング的な素養が必要ですし、エンジニアも研究について理解をしていく必要があります。ですので、リサーチャー・エンジニア関係なく、これを応募資格にしようと考えています。

 

また私は、大切な、すべてのPFNのメンバーが、新しい技術を切り拓くために全力を尽くせる環境を作っていくことも重要だと考えており、それは今後も継続的かつ積極的に取り組んでいきます。

 

PFNでは、多様な専門分野を持った人材を募集しています。興味を持ってくださった方は、ぜひご応募ください。
https://www.preferred-networks.jp/ja/job

コミックマーケット93 参加レポート

Taizan Yonetsuji

2018-02-06 11:33:30

コミックマーケット93

PFNでは、2017年12月29日から31日まで、東京ビッグサイトで開催されたコミックマーケット93に我々が開発しているPaintsChainerの企業ブースとして出展してまいりました。

年末にも関わらず、非常に多くの方々にご来展頂き、3日間で1000人を超える方に、プロジェクションマッピングを用いた新しいユーザーインターフェースを体験いただきました。

また、PaintsChainer公式キャラクター「絵愛ちえな」ちゃんのお披露目も行う事が出来ました。


PaintsChainer(ペインツチェイナー)とは

PFNが開発・提供するオンライン線画自動着色サービス。白黒等で描かれた線画ファイルや写真画像をアップロードするだけで、イラスト上の顔や服装、風景等を認識し、完全自動着色または色指定による自動着色をおこないます。

線画に対する自動着色のWebサービス化は世界初で、大きな反響を頂きました。その後、モデルの追加やサイトのリニューリアル等に取り組んでいます。

https://paintschainer.preferred.tech/

 

プロジェクションマッピング上での自動着色

今回のコミックマーケット93のPFNブースでは、紙に書いた絵に色がつくという新たな体験を提供しました。

デジタルデータではなく、実際の紙に描いた線画を専用着色ブースにセットすることで、その線画を4K高画質カメラで読み込み、PaintsChainerが着色し、プロジェクションマッピングを用いて実際の紙に着色されたように投影しました。実際にその場で書いた絵を着色できるということで、時間をかけて力作を描いて下さった方々もおられました。

さらに、着色結果にカラーヒントを与えることで、好きな色に変える機能もプロジェクションマッピング上で提供しました。

例えば、自動着色で黄色に塗られた髪の色を、カラーヒントを与えることにより一瞬にして青や赤など好きな色に変えることができます。

こちらは、もともとWeb版のPaintsChainerにも搭載されている機能ですが、今回は投影により着色された線画紙自体に、絵の具や色鉛筆で着色するかのように色指定ができるインターフェースに作り変えました。こちらもまるで魔法のようだという事で非常に楽しんでいただくことが出来ました。

 

スタイラスペンによって線画に対し直接カラーヒントを与えられるようにし、認識は、テーブルに埋め込んだペンタブレットにて行っています。

 

マンガ向けの着色モデルを限定公開

通常のイラスト向けの着色モデルに加えて、コミケ会場ではマンガ向けの着色モデルも選択できるようにしました。こちらは、今回が初公開のモデルです。

マンガ向けモデルは、Webで無料公開しているイラスト向けモデル(現在は、「たんぽぽ」「さつき」「かんな」の3つのスタイルを公開中)とは異なる学習を行い、マンガが持つセリフ、吹き出し、枠といった特徴に適した着色モデルとなっています。


イラスト用さつきモデルで着色(ノーヒント)マンガモデルで着色(ノーヒント)

(ブラックジャックによろしく 佐藤秀峰 Give My Regards to Black Jack SHUHO SATO )

こちらのマンガモデルは、現在出版社・デジタル配信事業者と共に実用化を目指しています。

 

漫画版は公開利用行っておりませんが、通常のPaintsChainerの3モデルは今回コミックマーケット93で体験いただいたものと同じものがWeb上で無料でご利用頂けます。是非ご利用ください。

https://paintschainer.preferred.tech/

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システムを自由自在に扱うことができるようになることが必要となるでしょう。

2017年 PFN夏季インターンシップのコーディング課題公開

Kosuke Nakago

2017-07-27 09:54:00

* English blog is also written here.

PFNでは毎年8、9月に学生の方を対象とした2カ月間の長期インターンシップを実施しています。

今年も2017年のPFN 夏季インターンを募集したところ多数の応募をいただき、先日無事に選考が終了しました。

PFN 2017夏季 インターン募集

それに伴い、今回PFNのインターンコーディング課題をgithub上で公開しました。

https://github.com/pfnet/intern-coding-tasks

 

続きを読む »

分散深層学習パッケージ 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 は今後、通信と計算のオーバーラップ、ワーカー間の非同期な計算、勾配の圧縮による通信効率化、耐障害性などの課題に取り組み、改善を続けていく予定です。

AIは医療分野にどのような変化をもたらすか

岡野原 大輔

2017-04-17 13:03:35

AIの分野で深層学習を中心とした大きな変革が起きているのと同時に、バイオテクノロジーの分野でもゲノムシーケンサやゲノム編集など革新的な科学技術が登場しています。
この二つの革命を融合させて生命の仕組みを理解し、未来の医療へとつなげていく動きが世界中に起きています。こうした動きを俯瞰した上で、私達がAIの技術を医療分野にどのように活用していくかについて以下の特集記事で述べています。基本的に、生体メカニズムはとても複雑であり、人間が全ての生命現象を正確に把握するのは困難です。バイオテクノロジーとAIの力を組み合わせることで、解明を進められると考えています。是非ご覧いただき、ご意見などいただければと思います。

「AIは医療分野にどのような変化をもたらすか」
岡野原 大輔、大田 信行
国際医薬品情報 2017年2月27日 第1076号 潮流
[pdf]
(発行元の国際商業出版株式会社様に転載許諾をいただいております。)