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

ニューラルネットの逆襲

$
0
0

岡野原です。Deep Learningが各分野のコンペティションで優勝し話題になっています。Deep Learningは7、8段と深いニューラルネットを使う学習手法です。すでに、画像認識、音声認識、最も最近では化合物の活性予測で優勝したり、既存データ・セットでの最高精度を達成しています。以下に幾つか例をあげます。

画像認識

  • LSVRC 2012 [html]  優勝チームスライド [pdf], まとめスライド[pdf]
  • Googleによる巨大なNeuralNetを利用した画像認識(猫認識として有名)[paper][slide][日本語解説]
音声認識
  • マイクロソフトによるプロジェクト [pdf] [html]
  • 言語モデルへの利用 [pdf]
  • ニューラルネット言語モデルの高速な学習[pdf]
化合物の活性予測
  • Merck Molecular Activity Challenge [html]

また、各分野のトップカンファレンスでDeep Learningのチュートリアルが行われ、サーベイ論文もいくつか出ました。おそらく来年以降こうした話が増えてくることが考えられます。

  • ICML 2012 [pdf]
  • ACL 2012 [pdf]
  • CVPR 2012 [html]
  • DeepLearning サーベイ論文 [pdf]
  • DeepLearning 実装テクニック論文 [pdf]

ニューラルネットは人工知能の初期から存在し、非常に歴史のある手法です。脳のニューロン・シナプスを模倣して考えられたモデルは、複数の入力を受け取って、出力を行う単純な関数(多くは非線型のシグモイド関数など)が複雑につながりあった形をとっています。脳が単純なニューロンの組み合わせによって高度な認識・知識活動を実現しているのと同様に、ニューラルネットも複雑な現象を学習できるのではないのかと期待されていました。しかし、一度盛り上がった機運は70年頃には一度下火となり、人工知能や機械学習の中心はもっと現実的な手法(線形識別器、カーネル法など)に置き換わっていました。そうした中でもトロント大のHintonらなどを中心にニューラルネットの研究は地道に進んでいました。
その中でも2000年代後半にいくつかのブレークスルーがおき、状況は大きく代わりました。以下にそれらを順に紹介します。

Greedy Layer-wise Training

[pdf][pdf]
最初の大きなブレークスルーは2006年に起きました。

はじめにこれまでのニューラルネットとその問題点を説明します。一般的なニューラルネットワークは複数の層からなり、前の層の出力結果を次の層の入力として受け取り、次々と深い層に情報が渡っていきます。例えば5段から10段ぐらいの層が使われる場合が多いようです。ある入力と出力を紐付けるような学習を行う場合は、back propagationと呼ばれる方法を利用して出力側の誤差を逆向きに伝搬させ、内部パラメータを調整する方法がとられていました。しかし、その層の数が多くなるほど、更新部分が拡散してしまってうまく更新できない問題が知られていました。

Greedy Layer-wise Trainingでは最初に教師無しデータを利用して、各レイヤーのパラメータを一層ずつ調整していきます。最初に一番はじめの層を学習する場合は入力を変換し、さらに逆変換をかけ元の入力と比較し、一致するようにパラメータを更新します。式で書くとxを入力1層目の変換関数をf、その逆変換の関数をgとした時、g(f(x))を計算します。そして、xとg(f(x))が一致するようなパラメータを学習します。

この時、パラメータが十分な数があれば元の入力をそのまま返すような関数が学習されてしまうのですが、パラメータに何らかの正則化をかけて学習することにより、少ない表現力でなんとか入力の情報を表現するようにパラメータは調整され、結果として入力情報をもっともうまく表現できるような関数が抽出されます。例えば画像であればエッジやパターンなどの基本的な特徴情報が取得されます。このように変換をかけて元に戻した上でうまく戻せるように学習する方法をautoencoderと呼びます。

autoencoderの代表的な例はPCAです。PCAは元の入力を線形変換を利用して低次元に圧縮し、また逆変換をかけた時の誤差が最小になるような操作に対応します。ニューラルネットの場合は、非線型な変換を使うため、PCAよりも複雑な表現を捉えることができると主張されてます。また、PCAの問題点を改善した別の形のautoencoderもいくつか登場しています(例えば ICA with Reconstruction Cost

次に二段目のレイヤーを学習する時は、一段目の出力を入力として扱い、これを符号化した上で、復元できるようなパラメータを学習します。この時、一段目のパラメータは固定で二段目のパラメータだけを調整します。建造物を作る際の下の土台から順にかためていくようなイメージです。三段目のレイヤーは同様に二段目のレイヤーの出力を入力として扱い、これをうまく復元できるように学習を行います。これを各層毎に繰り返していきます。

こうしてできあがったニューラルネットは、入力データをよりよく表現できるような低次元のデータに変換する力を持っています。そして最後のレイヤーからでてきた出力をいろいろな用途に変換します。なのでこの場合のニューラルネットワークは生の特徴を変換するような装置だと考えることができます。このように変換されたデータを例えば分類を学習するのであれば、このデータを利用して分類を行います。(例えば pdf の 11枚目などは顔の認識での良い例だと思います)。この際、教師データを利用してback propagationを行い、各層のパラメータを微調整することも行われます。

こうした学習が最も大規模に適用された例が最初にも示したGoogleの例でYoutubeから取得された1000万枚の200 x 200 の画像を対象に学習を行いました。パラメータの数は10億であり(画像解析でよく使われる異なる位置のフィルターの重みを共有するConvolutional Neural Netではなく、各位置で違うパラメータを使う)、これを1000〜2000台のマシン(16000コア)で1週間かけて学習しています。この結果最後のレイヤーの出力のそれぞれが、例えば猫や人を認識できるようになっています。

Dropout

[paper]

ここ最近のコンペティションで優勝した主要因がこのDropoutと呼ばれる技術だと言われています。ニューラルネットは表現力が強すぎるので過学習してしまうという問題がありました。

Dropoutでは学習時にパラメータのいくつかを使わないようにします。例えば間の層(隠れ層)の50%のパラメータを入力データ毎にランダムに使わないようにし、それで学習します。そして推定時には各パラメーターからの出力結果を50%にして推定します。
Hintonらの解説によれば、各データ毎に違うモデルを利用して学習し、推定時にはあたかも全部の結果の 平均を使っていることに対応しているので過学習しない(random forestやbaggingににている)と説明しています。

まだ理論的な解析は進んでいないですが実用的にはこのDropoutのおかげでテスト時の精度がかなり向上しました。

Randomized Weight

[pdf]
画像解析分野でconvolutional neuralnetとL2プーリングと組み合わせた場合greedy layerwise trainingによって重みを設定されたニューラルネットではなく、ランダムに重みを設定したニューラルネットの出力を利用して学習してもstate-of-the-artより数%低いだけの高い分類精度を持つということが知られています。(しかし入力画像をそのまま入力ベクトルとして学習しても分類精度は出ません)

ランダムな重みを利用しても高精度が出てしまう謎を論文では解明しました。彼らはどんな重みを利用したとしてもその後にL2-pooling(隣接する出力値の二乗和を出力する)を適用した形で構成されるニューロンはどのような重みを利用しても単純なサイン波に強く反応することを示しました(これは以前時系列データを滑走窓で特徴抽出してクラスタリングすると中心が正弦波になる現象を説明した井手さんの研究に似ているのかなと思いました。)。なのでランダムな重みを利用しても、それによるニューロンもある形のサイン波に反応します。こうしたサイン波のフィルターはGabor filterなどで利用されているものと良く似ているので画像の特徴をうまく捉えることができているのだと考えられています。

このRandomized Weightは研究的にはベースラインとしてしか使われていませんが、実用的にはわざわざ面倒な学習しなくても精度が出てしまうので、もっと多く使われるのではないかと思います。また、ランダムな基底を用いても重要な情報を取得できるというのはcompressed sensingや行列のランダムサンプリング[pdf]でも多く利用されており,もっとdeep learningでも使われてもよいのではと思っています。

今後

Deep Learningが今のデータ解析、機械学習を全て置き換えてしまうことは無いとは思いますが、いくつかの分野、特に人の認識に関係するような画像、音声、言語といった分野では既存の技術を大きく超えている感があります。

しかし、Deep Learningは発展途上で何が本当に上手くいっているのか良くわかっていない状況です。例えば正則化においてsparse化は重要だという人達がいる一方、その効果に疑問を出している人たちもいます。

また、SVMにおけるlibsvmのようなdeep learningにおける標準的なライブラリが存在しないので一般の人が手を出すことができない状況ではあります(いずれどこかが出し一般的に使える様になるのだと思いますが。例えばNLPであればsennaがあります)。

こうした状況は初期のSVMやNonparametric Bayesが流行りはじめの頃の得体の知れないものがやってきた感に似ています。今後実際の理論的な解析や実用化への改良が進み同じようにメジャーになるのではないかと思います。


NIPS2012に行ってきました

$
0
0

先日、NIPS (Neural Information Processing Systems)という学会に参加してきました。今回はその報告です。

NIPSは機械学習の分野においてはトップに位置づけられる会議の一つです。今回、私は特に発表とかはなかったのですが、幸運にも参加することができました。2012年からしばらくは、アメリカ合衆国ネバダ州タホ湖湖岸にあるHarveys HotelとHarrah’s Hotelで開催されます。今回はチュートリアルからワークショップまで、6日間すべてに参加してきましたので、その印象を独断と偏見で語ります。

NIPSはシングルトラックで招待講演と口頭発表を聞いて、残りは全部ポスターセッションという構成になっているのですが、これは口頭発表で聞き逃しもないし、詳しく聞きたい奴はポスターで詳しく聞けるし、なかなかうまい方式だと感じました。代償として口頭発表は非常に数が絞られるわけですが、厳選されているとも言えるわけで、個人的にはマルチトラックで聞けない発表が大量に出るより、こちらのほうが好みです。

NIPSは名称に「Neural(神経)」と入っていることからわかるように、機械学習専門の学会ではなく、脳の構造のモデリングの研究なども含まれる幅の広い学会です。私は機械学習についてはそれなりにわかりますが、脳関係の話は正直用語が違ってまだよくわかりません。以下は機械学習関係についてのみの話になります。

招待講演は毎日あるのですが、その中でも特にScott Aaronsonの“Quantum information and the Brain”は彼の専門である量子力学の解説と、NIPSのテーマである脳についてジョーク交じりでわかりやすい解説に感銘を受けました。(しかし、それでもやはり、量子力学は難しいなと感じました…。)他にも、Computational Sustainability(計算機を使って環境保護を効率的に行う)の話など、普段ちょっと関係はないけれど機械学習の応用として興味深いものでした。

流行について

研究には流行があり、流行に乗るにせよ乗らないにせよ一家言ある人が多いですが、ともかく、流行というのものが重大であることは同意が得られるものと思います。私が受けた印象としては、Deep Learningに関しては話題にしている人が多かったように感じます。後はSpectral Learningも、ワークショップが開かれるなど、盛り上がっていたように思います。(私はSpectral Learningのワークショップに出ましたが、狭い部屋ではありましたが、立ち見が出るぐらいに盛況でした。)

NIPSにくるまで全然知らなかったけれどよく見たキーワードとしては(Partially Observed) Markov Decision Processがあります。自然言語処理の方だと強化学習というのはそれほど重要視されていない(実際、使いどころがなかなか思いつかない気がします)ので、新鮮な驚きがありました。この分野に詳しい人からしたら今年の流行というわけではないのでしょうが、そういった点が肌で感じられるのも学会の良さですね。

個別の発表について

私は理論は苦手なので、どうしても実装しやすいもの、実験があるものに評価が偏ってしまうのですが、面白かったものをいくつかかんたんに紹介します。

Volume Regularization for Binary Classification (K. Crammer, T. Wagner)

 これは二値分類のための手法です。SVMやロジスティック回帰、ナイーブベイズなど、多くの手法ではパラメーターは点推定されます。この手法では、それぞれのパラメーターに対し上限と下限を推定することで、ノイズに対してより耐性のある学習を実現します。

内容についてはkisa12012さんが既にレポートを書かれていますので、そちらに譲ります。

Dropout: A simple an effective way to improve neural networks (G. E. Hinton, G. E. Dahl)

 学習時に0.5の確率でランダムに各ノードを無効化した状態でニューラルネットを学習する。これをドロップアウトと言う。隠れニューロンの数をHとすると「学習時に0.5の確率でランダムに各ノードを無効化した2^Hのモデル」に対して、「同じフィーチャー間では同じ重みの大きさとなる」ように制約を入れた上で学習し、テスト時にはその2^Hのモデルの幾何平均を取ることになる、という話だった。アンサンブルするとなんか結果良くなるからドロップアウトも結果が良くなる。だいたいエラーレートが10%ぐらい下がる、とのこと。
 アンサンブルすると性能が上がると入っても、こんなほぼ同じモデルをアンサンブルして性能が上がるのか直感的には疑問だし、どうもイマイチ説明にもまだ得心がいかないのですが、エラーレートが下がっているのは事実みたいです。

Fast dropout training for logistic regression (S. Wang, C. D. Manning)

 この論文ではロジスティック回帰に対してドロップアウトを適用しています。面白いのは、ドロップアウトをそのまま実装するのではなく、「ドロップアウトした場合のロジスティック回帰の目的関数」を導出し、そこから閉じた形の勾配を導き出しているところです。これによって、普通のSGDでドロップアウトつきロジスティック回帰の最適化が行えます。その結果、収束も早く、エラー率も低いと、いいことずくめになっています。

 しかし、比較対象が正則化のないロジスティック回帰なので、L1/L2正則化ありの場合と比較してどうなのだろうか、というところは少し気になりました。

Confusion-Based Online Learning and a Passive-Aggressive Scheme (L. Ralaivola)

 二値分類は正例と負例の数が大幅に違う場合の学習は難しく、こういった問題設定をimbalanced dataといいます。imbalanced dataでは単にどちらか数が多い方を答えにしておけば正解数が稼げてしまい、特にオンライン学習だと学習が難しいのですが、この論文では混同行列(confusion matrix, true-positiveとかtrue-negativeとかが並んでるあの行列です)を最適化するという新しい目的関数を定義し、imbalanced dataに対して性能が良い、Passive-Aggressiveっぽい感じのアルゴリズムを提案しています。

 正直なところ、普通のデータに対して二値分類器の性能を上げるというのはもう何年か前から限界な感じになってきていると感じているのですが、imbalanced dataやnoisy dataへの対応という点についてはまだできることがあるのかなと、この研究を見て思いを新たにしました。

Multiclass Learning Approaches: A Theoretical Comparison with Implications (A. Daniely, S. Sabato, S. S. Shwartz)

 多クラス分類のための方法には1 vs rest (1 vs all)や1 vs 1、ECOCなどいろいろありますが、それらの理論的な解析をしています。性能のためにはMulticlass SVMのような方式が良いが、test running timeがかかるね、みたいなことが書いてありました。

Learning with Recursive Perceptual Representations (O. Vinyals, Y. Jia, L. Deng, T. Darrell)

 これはLinear SVMをstackingして性能を上げるという研究です。stackingにより、非線形識別が可能になります。第n層の学習データは、第n-1層のprediction vectorに random matrixをかけてデータを揺らしたものを用いるそうです。prediction vectorを学習に使うというあたりは誤差逆伝播っぽい感じで、random matrixをかけてデータを揺らすのはoverfit対策、というような理解で良いのでしょうか? 正直、紹介している自分もまだあまりイメージが掴めていません。
 線形識別器で非線形識別というとRandom Fourier FeatureとかNyström methodがありますので、それとの比較が欲しかったなぁと論文を読んでいて感じました。ただ、非線形識別は魅力的なのでとても興味があります。

Accuracy at the Top (S. Boyd, C. Cortes, M. Mohri, A. Radovanovic)

 Learning to Rank (機械学習で順序付けをおこなう分野)で、上位だけを重視する新しい目的関数を新しく定義しました。上位を重視するのはListNetなどListwiseアプローチ全般的な傾向であると思いますが、この新しい目的関数の方がNDCGとかで性能が高いということです。
 “Convex Optimization”を書いたBoyd先生なのに目的関数が非凸であるというところがなんとなく面白く、一人でニヤニヤしていました。

Ordered Rules for Classification: A Discrete Optimization Approach to Associative Classification (D. Bertsimas, A. Chang, C. Rudin)

 よく使われる分類アルゴリズムである決定木とSVMを比較すると、決定木の方が学習結果がわかりやすいが性能が低く、SVMはその逆であると言われます。この研究では、結果の可読性が高く、性能もSVM並の分類器を新しく提案します。学習結果としてルールのリストが得られ、ルールを順繰りに適用していくことで分類を行います。結果のわかりやすさは実用的には重要なので、実際どれぐらいわかりやすそうなのか、気になっています。

Privacy Aware Learning (J. Duchi, M. I. Jordan, M. J. Wainwright)

 プライバシー保護のため、学習用データにあらかじめノイズをのせておく。どれだけノイズをのせるとどれぐらい学習が遅くなるのか、という話です。ノイズ乗せたらそれでいいのか、病院のデータで同じ人が何回も検査に来た場合にこれで安全なのかは直感的には疑問に思える、という話を報告会とかでしていたら、それが差分プライバシの概念である、と指摘されました。

Collaborative Ranking With 17 Parameters (M. Volkovs, R. Zemel)

 協調フィルタリングを行列穴埋めじゃなくlearning to rankだと思って解こう(レコメンデーションだと結局、レートが高いやつだけが重要だよねというアイデアに基づいている)という話です。うん、こういうの、やりたかったなぁ……と、遠い目をしながらポスターを眺めました。

Tensor decompositions for learning latent variable models (A. Anandkumar, R. Ge, D. Hsu, S. M. Kakade, M. Telgarsky)

 Spectral Learningについての話です。この論文では、Spectral Learningを行う場合、HMMやLDAを含む多くのモデルがテンソル分解の特殊な場合として定式化できること、この特殊なテンソル分解は効率的に解けることを示しています。やっぱりまだ難しい感じのするSpectral Learningですが、これまでの話と比べると、だいぶ見通しが良くなってきた印象を受けました。

他にも色々面白い発表はたくさんあったのですが、あんまり長くなりすぎても読んでもらえないでしょうからこの辺で終わりにします。次回はまたなにか実装して、実験結果を報告したいと思います。

NIPS2013読み会を開催しました

$
0
0

もう花粉飛んでるらしいですね。比戸です。

昨年開いたICML2013読み会に続き、NIPS2013の論文を紹介する会を開きました。平日夜にも関わらず60名以上の申し込み、50名以上の参加があり、改めて機械学習への興味の高さを裏付けるものとなりました。会場提供にご協力頂いた東大の武田朗子先生、中川裕志先生、および発表者の皆さんありがとうございました。

ここで特筆したいのが、@mooopanさんが選んだ”Playing Atari with Deep Reinforcement Learning“です。

話題のDeep Neural Networkと強化学習を組み合わせて、テレビゲームで人間にも勝ったという、この日唯一のワークショップ論文紹介だったのですが、なんと著者の所属するDeepMind TechnologiesがGoogleに500億円以上で買収されたというニュースが3日前飛び込んできました。買収交渉がいつからあったのかわかりませんが、多くのDeepMindとGoogle関係者がNIPS会場にいたわけで、Deep Learningそして機械学習を取り巻くホットな状況を感じられる一件でした。

以下に改めて発表論文と資料へのリンクを掲載させて頂きます。

@unnnonouno: “Distributed Representations of Words and Phrases and their Compositionality

@beam2d: “DeViSE: A Deep Visual-Semantic Embedding Model

yoshifumi_seki: “A Gang of Bandits

@Quasi_quant2010: “Similarity Component Analysis

@nozyh: “One-shot learning by inverting a compositional causal process

@delta2323: “Inverse Density as an Inverse Problem: The Fredholm Equation Approach

@hamukazu: “Approximate Bayesian Image Interpretation using Generative Probabilistic Graphics Programs

@moopan: “Playing Atari with Deep Reinforcement Learning

@tb_yasu: “Scalable kernels for graphs with continuous attributes

@sla: “More Effective Distributed ML via a Stale Synchronous Parallel Parameter Server

第2回全脳アーキテクチャ勉強会でDeep Learningについて講演しました

$
0
0

得居です。1月30日にリクルートGINZA8ビルで開催された第2回全脳アーキテクチャ勉強会にて、Deep Learningについて講演しました。

全脳アーキテクチャ勉強会は「人間のように柔軟汎用な人工知能の実現に興味のある研究者、脳に興味のあるエンジニア,関連分野(神経科学、認知科学等)の研究者間での交流をはかりつつ、こうした取組へ関わるきっかけ」作りが目的の勉強会です。今回は主催者の一人である産総研の一杉裕志先生、筑波大学の酒井宏先生、そして私が講演を行いました。最終的な来場者数は把握しておりませんが、200名超の大規模な勉強会となりました。

私の発表は Deep Learning の最近の進展について、できるだけ幅広い学習手法やモデルを紹介する内容です。各手法の実際の成果がどうかというよりは、今後の研究の種になりそうな面白そうな話題を詰め込みました。発表後にも多数の質問を頂き、その後の懇親会でも終電まで脳と機械学習の関係について議論が尽きず、脳の研究をしている人にとっても Deep Learning は気になる話題なのだということを実感しました。逆に私自身も学習機構としての脳にますます興味が膨らみました。

私の直前に話された酒井先生の講演は視覚野についてでした。前半は V2 野における Border Ownership(輪郭を作っているのがどちらの領域にうつっているものなのか判定する問題)を簡単な線分の pooling 処理で実現できるという話で、ビジョンに対する知識として面白かったです。後半は V4 野における曲率選択的なニューロンの反応を V2 野の発火を入力としたときの Sparse Coding で模倣できるという話で、Sparse Coding がここまでニューロンの反応に似るというのは驚きでした。

全脳アーキテクチャ勉強会は今後も開催されるようです。工学の側にいる身としては、脳の科学的知見がさらに技術の発展に活かせると嬉しいですし、逆に Deep Learning のモデルの進歩が神経科学や認知科学の発展に貢献できる日がくるとよいなと思っています。

顔認証技術: DeepFace と Pyramid CNN

$
0
0

得居です。3月下旬とは思えない寒さに凍えています。

Facebook が CVPR2014 に投稿しアクセプトされていた顔認証に関する論文 [1] が MIT Technology Review にて紹介されたことで注目を集めています。DeepFace と名付けられた手法で、同社が集めた4030人の顔写真440万枚を用いた大規模学習によってほぼ人間並の人物識別性能を達成しているということで、なかなかキャッチーな話題です。一方、Face++ という顔認証・分類のプラットフォームを展開する Megvii社 がつい先日公開したプレプリント [2] でも DeepFace と同程度の性能を達成しています。今日はこの2つの論文を解説します。

deepface

DeepFace の論文では、検出された顔矩形に対して以下の3つの処理を施しています。

  • 矩形の2次元アラインメント
  • 3次元モデルを用いた out-of-plane のアラインメント
  • アラインメントされた画像を Deep Neural Network (DNN) に入力して顔表現ベクトルを得る
  • 得られた顔表現ベクトルをもとに2つの顔矩形を比べて、同一人物化どうかを判定する

前半のアラインメント部分は深層学習とは関係ありませんが門外漢として興味深いです。2次元アラインメントでは顔のうち特定の6箇所(両目、鼻の先端、両口角および下唇の中心)を検出し、その位置が合うように画像の位置とスケールを調整します。特徴点検出には Local Binary Pattern と呼ばれる特徴を用いた Support Vector Regression を用いています。3次元アラインメントではさらにこの特徴点を67点に増やし、予め用意した標準的な顔の3Dモデル(顔3Dモデルのデータセットに対して平均をとったもの)の対応する基準点に対応させて特徴点の3次元位置を推定します。これをもとに、3次元空間の点をカメラの平面上に射影するカメラ行列を推定します。正面から撮った場合の特徴点の位置を求めます。同時に、特徴点を頂点とするポリゴンを生成しておき、元画像の画素値を正面画像の対応する三角形上にアファイン変換します。こうして斜めを向いた画像からも正面顔画像が得られます。顔の一部が隠れている場合、見えている側の画像で補完するような処理も行っているようです。

DeepFace で用いる DNN は一般的な画像認識で用いられるものとは少し変わっています。画像認識では位置不変な特徴を捉えるために畳み込み層とプーリング層を用いるのが一般的です。一方 DeepFace の場合は入力画像がアラインメントされているので、位置不変性がそこまで必要になりません。低次の特徴(エッジやテクスチャ、グラデーションなど)は位置不変の特徴で十分ですが、高次の特徴(目、鼻、口やより広い範囲の顔部分)についてはむしろ位置ごとに異なる特徴を捉えたくなります。そこで DeepFace では3層目以降で位置ごとに異なる重みを用います。また、1層目以外ではプーリング処理も行いません。畳み込み・プーリングを用いた場合との比較がされておらず、個人的には効果のほどに懐疑的ですが、工夫としては面白いと思いました。

さて、この DNN の学習ではまずデータセット内のどの人かを判別する 4030 クラス分類問題を解きます。得られたネットワークの最後の隠れ層を顔の表現ベクトルとして実際の顔認証に用います(ここは距離ベースの手法を使っていて、その部分でも Neural Net を使う方法も試しています)。DeepFace の難しい点は、平行移動による data augmentation が使えないことです。画像認識ではよく、入力画像を少しずらしたものも訓練データに加えることでデータを水増しすることをよくします。これを data augmentation と呼びますが、複雑な DNN を学習するため非常に有用な方法です。ところが DeepFace の場合、入力のアラインメントに依存したモデルを学習するのが目標なので、ずらした画像を使うわけにはいきません。440 万枚という大規模データセットを作ったのにはここらへんも理由だったりするのかなと想像しています。

結果はみなさんすでにご存知かと思いますが、人間に肉薄するレベルとされています。Labeled Faces in the Wild (LFW) データセットにおいて 97.25% の正解率で、これは検出された人画像矩形だけを見たときの人間の回答 97.53% にかなり近いレベルです。間違った画像には、年をとるなどして見た目が大きく変わった人物の同定などが含まれていて、人間にも判別が難しいということです。

さて、一方で冒頭で紹介した Face++ の論文も紹介しましょう。こちらはより標準的な方法で、Convolutional Neural Network (CNN) を用いています。ただし、学習の仕方が少し変わっています。ネットワークは shared layers と unshared layers に分かれていて、shared layers が入力側に並ぶような形になっています。まず1層だけの shared layer を用いて、顔画像のうち小さなパッチを入力として学習を行います。得られた重みのうち shared layer の部分だけを残して、一段 shared layer を増やしてもう少し大きなパッチで学習します。これを繰り返して、最終的に深い CNN を学習します。これは一種の greedy layerwise training ですが、教師ありで行う点、毎回出力側に余計なレイヤーを挟む点が特殊です。この方法を著者らは Pyramid CNN と呼んでいます。はじめの方では小さなパッチを入力として学習しますが、その際には後ろの unshared layer をパッチの位置(目、鼻、口など)によって異なるものを使う方法も提案していて、学習コストは上がりますが精度が上がることを確認しています。Pyramid CNN は、顔の色んなパーツやスケールにおける特徴を識別の観点から学習することに主眼を置いていると言えます。

Pyramid CNN の学習では外部のデータセットは用いずに LFW のデータセットのみで学習・評価を行っています(標準的な方法です)。正解率の結果は出ていませんが、DeepFace 論文と比較可能なROC曲線が載っていて、単体の CNN としてはほぼ同程度の性能を達成しているように見えます。こちらも人間並の精度と言うことができそうです。面白いのはこちらでは比較的小さなデータセット(1万枚程度)でも近い性能を発揮している点です(ただし同じデータセットで学習・評価を行っている点には注意)。細かい実験プロトコルが載っていないのでわからない点もありますが、DeepFace と比較するとパラメータ数が少ないので小さなデータセットでもうまくいっているのかもしれません。個人的な印象としては DeepFace の方がさらに精度を伸ばす余地があるのかなと思っています。

以上、今話題の DeepFace に加え、Pyramid CNN を紹介しました。深層学習の実験や工夫の例として興味深い内容だと思いますので、論文本体も読んでみることをおすすめします。

[1] Y. Taigman, M. Yang, M.’A. Ranzato and L. Wolf. DeepFace: Closing the Gap to Human-Level Performance in Face Verification. CVPR2014.
[2] H. Fan, Z, Cao, Y. Jiang, Q. Yin and C. Doudou. Learning Deep Face Representation. arXiv:1403.2802.

PyData Tokyo Meetup #1でCaffeとmafについて発表しました

$
0
0

10月30日のPyData Tokyo MeetUp #1にて「Caffeとmafを用いたディープラーニング開発・実験方法」というタイトルで発表を行いました。

当日の発表に関する情報はconnpassにまとめられています(私以外の発表の資料へのリンクや当日のUstreamでの配信へのリンクもあります)。また、当日までのtwitterの反応はtogetterにもまとめられています。

発表資料はSlideShareで公開しています(当日きちんと答えられなかった質問の回答を資料の最後に追記しました)。

今回はディープラーニングライブラリの中でも特に開発が活発に行われているCaffeと、PFI/PFNで開発している実験ビルドツールのmafをそれぞれ紹介しました。発起人の柴田さんから、Caffeを用いて自分で何か作れるようになるとうれしい人が集まっていると事前に聞いておりましたので、デモを通じてmafとCaffeを用いて実験を行う具体的な方法の紹介を意識したつもりです。

勉強会主催の方々が標榜しているようにとても濃い勉強会でした。勉強会の立ち上げ会での発表で恐れ多かったですが、多くの方に興味を持っていただきました。発表の機会をくださった発起人の皆様、発表を聞いてくださった方々に改めてお礼を申し上げます。今後も微力ながら活動を応援をさせていただければと考えております。

Deep Learningと自然言語処理

$
0
0

クリスマスイブの夜は男三人しかいないオフィスで関数型言語の素晴らしさについて語っていた西鳥羽です。こんにちは。

昨日のPFIセミナーで「Deep Learningと自然言語処理」というタイトルで発表させていただきました。以下がその時の資料です。


この辺りに興味を持たれた方は今度の1月20日に「NIPS 2014 読み会」http://connpass.com/event/10568/ もどうぞ。残り枠数少ないので申し込みはお早めに。

本当はBoltzmann Machine, Deep Belief Network, Auto Encoder, Stacked Auto EncoderなどのDeep Learningの歴史的なところも説明したかったのですが端折ってしまいました。Deep Learningそのものの説明も含めて以下の資料が参考になります。

その他、自然言語処理に置けるDeep Learningなどは以下も参考になりました。

補足として資料内で参照していた論文です。

それでは皆さん良いお年を。

NIPS2014読み会を開催しました

$
0
0

大野です。
先日2015年1月20日に、NIPS2014読み会を開催しました。

当日に関する情報はこちらをご覧ください:connpass, togetter
当日の発表タイトルとインターネット上で入手可能な資料は記事の最後に掲載します(connpassからも入手可能です)。

昨年と同時期、同場所での開催にも関わらず、前回の1.5倍以上の方に参加いただきました。また、正確な統計はありませんが、機械学習に限らず様々なバックグラウンド方がいらっしゃったようです。ビジネス系メディアで特集で組まれるなど、機械学習・人工知能への注目度が高まっておりますが、それと並行して機械学習を専門に研究されている方や、最先端の機械学習研究に関心を持つ方の層が広がっているのではないかと思います。このような勉強会で交流が増えて分野の発展につながれば、今回の勉強会を開催したかいがあったと考えています。

改めまして、発表者の皆様、参加者の皆様、そして会場をご提供いただいた東京大学の武田先生・中川先生にお礼を申し上げます。

会議に関する所感

会議全体を見ると、最適化の理論解析もあれば特定の業界への実応用もあり、また特定のトピックについて基礎から応用まで垂直に扱われているワークショップがいくつも開催されました。参加人数からみても、KDDなど他の機械学習・データマイニング系の研究集会と同様に、NIPSもここ数年の規模の拡大が顕著なようです。
個別のトピックで言えば、Deep Learning/Deep Neural Networkが依然として関心を集めているようです。DLを主題としたワークショップが少なくとも2件あり、主題ではなくても、DLに関連と予想される発表が多くのワークショップで散見します。今回の読み会でも7件中2件(山本さん、得居さん)がDL関連でした。
大岩さんに発表していただきましたが、今回のNIPSではのレビュープロセスについての実験的な企画が行われました。同じ投稿論文を独立した2グループ両方に査読してもらいその相関を調べたもので、1つ目のグループでAcceptされた論文のうち57%が2つ目のグループではRejectされたという結果が話題になりました。例えば「NIPS review experiment」などで検索すると、より詳細にこれらを論じた記事がいくつも見つかり、レビュープロセスに関しては多くの方が問題意識や関心を持っているのだと感じました。

読み会発表タイトル一覧

  • 山本浩司さん , Learning Generative Models with Visual Attention : Proceeding arXiv
  • 大岩秀和さん,  Partition-wise Linear Models : Proceeding arXiv
  • 楠本充さん,  Advances in Learning Bayesian Networks of Bounded Treewidth : Proceeding arXiv
  • Quasi_quant2010さん,  Analysis of Learning from Positive and Unlabeled Data : Proceeding
  • 得居誠也さん , Semi-supervised Learning with Deep Generative Models : Proceeding arXiv
  • 加藤公一さん , A Safe Screening Rule for Sparse Logistic Regression : Proceeding arXiv
  • 関喜史さん , Content-based recommendations with Poisson factorization Proceeding

発表資料








オンライン機械学習(機械学習プロフェッショナルシリーズ第1期)発売のお知らせ

$
0
0

お久しぶりです。徳永です。

講談社からオンライン機械学習というタイトルの本が出版されます。著者はPreferred Infrastructure/Preferred Networksの海野, 岡野原, 得居, 徳永の4人です。

機械学習の中でもオンライン機械学習に特化した本で、単純パーセプトロンから始まり、Passive Aggressive, Confidence Weighted, AROW, Soft Confidence Weightedなど(Passive Aggressive, Confidence Weighted, AROWは分散オンライン機械学習フレームワークJubatusでも実装されています)についてアルゴリズムの概要を説明したり、リグレット解析による性能解析について説明しています。また、分散環境でのオンライン機械学習や、深層学習での応用、効率的な実装方法など、応用的なトピックも色々載っています。

機械学習のツールを使おう、的な本ではなく、オンライン機械学習アルゴリズムの中身はこんな感じです、という本なので、Jubatusの使い方を知りたい、というような用途には向きませんが、Jubatusの中で使われているアルゴリズムが知りたい、というような場合にはおすすめです。

講談社のページによると、発売日は4/7です。全国の書店、ネット通販などでお求めになれます。オンライン機械学習に興味がある方、最近話題の深層学習(の学習方法)に興味がある方にピッタリの一冊になっておりますので、ぜひお買い求めください。

本書は講談社から出版される機械学習プロフェッショナルシリーズというシリーズの1冊です。このシリーズは全29巻の予定で、これから3ヶ月ごとに刊行されていくそうです。(シリーズではありますが、それぞれ独立した本なので、29冊全部揃えないと意味がない、というようなことはありません。)以下の3冊も同時に出版されますので、そちらもぜひチェックしてみてください。なお、本書の表紙の画像は熊です。ほかの3冊も、それぞれ生き物が表紙になっています。

ネット通販でお買い上げの場合はこちらから:

サポートページはこちらから:「オンライン機械学習」 サポートページ

Deep Learning のフレームワーク Chainer を公開しました

$
0
0

こんにちは、得居です。最近は毎晩イカになって戦場を駆けまわっています。

本日、Deep Learning の新しいフレームワークである Chainer を公開しました。

Chainer 公式サイト
GitHub – pfnet/chainer
Chainer Documentation

Chainer は、ニューラルネットを誤差逆伝播法で学習するためのフレームワークです。以下のような特徴を持っています。

  • Python のライブラリとして提供(要 Python 2.7+)
  • あらゆるニューラルネットの構造に柔軟に対応
  • 動的な計算グラフ構築による直感的なコード
  • GPU をサポートし、複数 GPU をつかった学習も直感的に記述可能

ニューラルネットをどのように書けるか

次のコードは多層パーセプトロンの勾配を計算する例です。

from chainer import FunctionSet, Variable
import chainer.functions as F

# 多層パーセプトロンの定義
model = FunctionSet(l1=F.Linear( 784, 1000),
                    l2=F.Linear(1000, 1000),
                    l3=F.Linear(1000, 10))
def forward(x_data, y_data):
    x, t = Variable(x_data), Variable(y_data)
    h1 = F.relu(model.l1(x))
    h2 = F.relu(model.l2(h1))
    y  = model.l3(h2)
    return F.softmax_cross_entropy(y, t)

# 勾配計算
x_data, y_data = ...            # ミニバッチを初期化
loss = forward(x_data, y_data)  # 順伝播
loss.backward()                 # 逆伝播

ここで x_datay_data はともに NumPy または PyCUDA の配列です。順伝播の処理をそのまま書けば、あとは最終的な結果に対して backward 関数を実行することで、それまでに行った処理と逆順で誤差逆伝播が実行されます。この例はもっとも単純な例なので現れませんでしたが、順伝播の処理には分岐やループなど Python の制御構造を自由に含めることができます。

なぜ今新しいフレームワーク?

Deep Learning のフレームワークとしては Caffe, Theano/Pylearn2, Torch7 の 3 つが人気です。これらはフィードフォワードなネットワークを書くことが基本的な目標として開発されています。ですが、最近では Deep Learning の進展に伴い、より複雑なネットワークを柔軟に書けることの必要性が高まっています。そこで、この中でも特に自由度が高い Theano をベースに、新しいフレームワークがたくさん模索されています(例:Blocks, Keras, Lasagne, deepy など)。

これらのフレームワークを含め、既存の実装のほとんどは、一度ニューラルネット全体の構造をメモリ上に展開して、その処理を順に見てその通りに順伝播・逆伝播を実行するというアプローチを取っています。これは、独自のミニ言語に対するインタープリタを実装しているようなものです。例えば Caffe ならば Protocol Buffer で定義されたスキーマがミニ言語に対応します。Torch7 の場合には、コンテナと呼ばれる特殊なモジュールが制御構造の役割を果たします。Theano はより柔軟な定義が可能ですが、ループを書くために scan と呼ばれる特殊な機能を使います。このアプローチにおいて、より複雑な計算フローをサポートしようと思ったら、基本的にはこのミニ言語を拡充していく必要があり、学習コストや記述コストは高くなっていきます。基本的には今後、ニューラルネットの構造はさらに複雑化していくことを考えると、この展開は好ましくありません。

Chainer はこれとは異なるアプローチを取ります。Python をベースとしていますが、Theano は使いません。制御構造はすべて Python のものがそのままつかえます。Chainer は、実際に Python のコードを用いて入力配列に何の処理が適用されたかだけを記憶しておき、それを誤差逆伝播の実行に使います。このアプローチは、複雑化していく Deep Learning の研究・開発速度を保つために必要だと考えており、私たちが新しいフレームワークの開発に乗り出した理由です。

使い方

ドキュメントも同時に公開しました。チュートリアルとリファレンスを提供しています。チュートリアルでは、基本的な多層パーセプトロンの書き方から、リカレントネットの書き方、GPGPU の利用法などを紹介しています。今のところドキュメントはすべて英語のみとなっていますが、要望が大きければ日本語への翻訳も検討します。

また、公式リポジトリ内の examples ディレクトリの中にサンプルがいくつか入っています。こちらは、実際にデータの読み込みから学習までを Chainer で書く方法を知るのに適しています。

質問やバグ報告

Chainer はまだ公開されたばかりのフレームワークで、機能面ではまだまだ足りない部分もあります。PFI/PFN の Chainer 開発チームでは、これから継続的に開発を行い、定期的に新しいバージョンをリリースしていく予定です。プルリクエストも受け付けます(今のところ Contribution Guide のような文書はありませんが、今後用意する予定です)。

使用法やバグについての報告も随時受け付けます。使用法の質問については、Google Groupsを開設しましたので、こちらに投稿してください。また、バグの報告や修正については、GitHub の Issue やプルリクエストを登録していただければと思います。GitHub のアカウントをお持ちでない場合は、Google Groups へ投稿していただいても構いませんし、Twitter アカウント (@ChainerOfficial)にメンションを送って頂いても対応可能です。

分散深層強化学習でロボット制御

$
0
0

新入社員の松元です。はじめまして。

“分散深層強化学習”の技術デモを作成し、公開いたしました。ロボットカーが0から動作を学習していきます!
まずはこの動画を御覧ください。

以下で、動画の見どころと、使っている技術を紹介します。

動画の見どころ

Screen Shot 2015-06-10 at 1.09.41 PM
Car 0(○の付いている車)が右折カーブの手前で減速する様子(右画面の白いバーのところが、ブレーキのところで赤くなっている。ニューラルネットはブレーキが最も多く報酬が得られると推測していることがわかる)。速い速度ほど報酬は大きいが、カーブを曲がりきれず壁にぶつかってしまうので学習が進むとカーブ手前でのみ減速するようになる。

Screen Shot 2015-06-10 at 1.18.49 PM
目の前に車がいるときは一時停止して、いなくなってから加速する。
エチオピアには本当にこのような交差点があるらしい。

Screen Shot 2015-06-10 at 1.22.24 PM
ぎりぎりですれ違う2台。学習途中ではすれ違いきれずにぶつかって倒れてしまうこともある(早送りシーン中に人が写っているのは、倒れたり詰んだりするたびに起こしていたためです)。

この動画で使われている技術について少し解説をしたいと思います。

強化学習

このデモにおけるロボットは、強化学習という手法で学習しました。
よくあるロボットの制御では、ある状況でどの行動をとるべきかのルールを人間が作り、そのルールに従って制御を行ったり、ロボットの取るべき軌道を予め人間が設計しておいて、その目標とのズレが最小になるように制御を行います。しかし、あらゆるシチュエーションに対してとるべき行動を設計するのはとても大変です。それに、臨機応変に軌道を変更することができません。
そこで、強化学習では、目標とするロボットの最適な動きを正解として与える代わりに、ロボットの各行動に対して報酬を与えます。今回の課題では、道にそって速い速度で進んだときにプラスの報酬を、壁や他の車にぶつかったり、道を逆走したときにマイナスの報酬(罰)を与えています。
ロボットはどのように行動するとどれくらいの報酬が得られそうかを学習していき、最も多くの報酬が得られそうな行動を選択することで、結果的に最適な行動をとることができるという仕組みです。これによって、「障害物が何mの位置に来たら、ハンドルを何度に回す」みたいなルールを人間が設計しなくても、自然とそのような行動を獲得してくれるわけです。

センサー

ロボットはセンサーを使って自分の今の状態を認識します。
Screen Shot 2015-06-10 at 10.45.28 AM
このデモでは、車は周囲32方向に仮想的なセンサビームを飛ばしていて、壁、他車、道路の中心線までの距離と角度を取得しています(図のcar 0が出している黄色い線がビームを表している。正確には遠距離センサ16本と近距離センサ16本に分かれている)。現実の自動運転車に搭載されているレーザー距離センサーをイメージしています。
そのセンサ情報に現在速度とハンドル位置、直近3ステップの自車の行動を加えて、合わせて273個の数を入力として受け取ります。右上のグラフにそれが可視化されていますが、車はこの情報だけから、今どの行動(アクセル、ブレーキ、左右ハンドル、バック)を取るべきかを決定しなければなりません。このような多様かつ多数のセンサ情報をうまく統合して適切な判断を行う問題はセンサフュージョンと呼ばれていて、これからのスマートデバイスや機械制御などに必須となる技術と考えられています。

ちなみに、学習開始時点では、ロボットはどのセンサ入力が何の入力を表しているのか、どの行動がどういう結果をもたらすのかを全く分かっていない状態から始まります。人間は「壁との距離」とか「アクセル」とか言われればその意味を理解できますが、ロボットは、まずはそこから学んでいかないといけないというハードな問題設定です。

Q-learning

強化学習には様々なアルゴリズムがありますが、今回はQ-learning + ε-greedyというベーシックな手法を使いました。
Q-learningでは、ある状態sである行動aをとったときに、将来にわたってどのくらいの報酬が得られそうかを表す関数Q(s, a)を学習します。
もし、Qが完全にわかっていたなら、状態sで取るべき行動は次のようにして決定できます。
行動の候補a1, a2, …があったとして、Q(s, a1), Q(s, a2), …を求め、最もQが大きくなったaを選ぶ。
Q関数は将来に渡る報酬の期待値をあらわすので、その行動が最も多くの報酬を生むことになります。

しかし、学習の開始時点では、Q関数は全くわかっていません。そのような状況では、Qが最大になるaを選んだとしても、それが最適な行動である保証は全くありません。Q関数を学習するためには、いろいろなシチュエーションを体験して、ある行動がどのくらいの報酬に結びつくのかを学ぶ必要があります。そのために、最初はランダムに動いて経験を貯めます。ある程度学習が進むと、(学習中の)Q関数が最大になるような行動が、そこそこ良い行動を表すようになっていきます。
そこで、ある割合εでランダムな行動を、1-εでQが最大になるような行動を選択します。これをε-greedy法といいます。「基本的には現在把握している最善の行動をとって、ときどき違うことも試してみる」というイメージです。

Deep Reinforcement Learning

Q-learningは古くから使われている手法ですが、昔は小さいサイズの問題にしか適用できていませんでした。例えばロボットが直面する状態が100通りしかなくて、行動も5通りしかないとしたら、Q関数は、100*5の表を埋めていくことで学習できます。Q(s, a)は表のs行a列目になるわけです。
ここで、状態1番のときに行動3番をとったら、10点の報酬がもらえて、状態が20番に移ったとしましょう。このとき、Q(1, 3) (状態1で行動3をとったときに将来得られそうな報酬の期待値)は、10 + max{ Q(20, a) }と考えることができます。10は今得られた報酬で、max{ Q(20, a) }は次の状態20のときに、現在わかっている最善の行動をとったときに得られる将来の報酬期待値になります。そこで、Q関数をあらわす表の1行3列目の値を10 + max{ Q(20, a) }に近づけます。この操作を繰り返すことで、この表は次第に正しいQ(s, a)に近づいていきます。

さて、今回のロボットは273成分の入力を受け取ります。これがロボットの認識する状態になるわけですが、各センサの値が0か1だとしても、2^273 ~ 10の82乗もの状態数になります。Q関数を表で表すならこれだけの数の行数が必要になりますが、とても不可能です。

そこで、表を使う代わりに、状態sを与えたら各aに対するQ(s, a)を出力するようなニューラルネットワークを使います。近年のDeep Learning(深層学習)技術の発展により、画像データのような数万成分の入力から、数千成分の出力を出すような巨大なニューラルネットが学習可能になりました。強化学習分野にDeep Learningを適用して有名になったのが、DeepMind社の発表したAtariのゲームをプレイする”DQN”(Deep Q-Network)です。
参考:昨夏のインターンでDQNの再現と改良に取り組んだ。
http://www.ustream.tv/recorded/53153399

今回の問題では273成分から5成分への7層(273-600-400-200-100-50-5)のニューラルネットを用いました。図の左下の白と赤のバーが、ニューラルネットの出力したQ(s, a)になります。

Screen Shot 2015-06-10 at 12.57.37 PM

学習には、もちろん、昨日発表したあの、Chainerが使われています!!!Chainerサイコー!!

ニューラルネットが入力をどのように変換していくのかを解析することは容易でないですが、出現しない状態を見ないようにしたり、よく似た状態をひとまとめにするなどして効率的に情報処理を行っていると考えられます。この性質により、見たことがない状態に直面しても、そこそこ適切な答えを返すことが出来るという力(汎化能力)を持ちます。
動画中で突然現れた障害物にも対応できているのは、この能力のおかげと言えます。
Screen Shot 2015-06-10 at 1.29.09 PM
四角い小さな障害物がランダムに存在していた環境で学習したら、丸い大きな障害物が突然現れる環境にも汎化して適応することが出来る。

Deep Learningと音声認識

$
0
0

西鳥羽です。こんにちは。

本日セミナーで「Deep Learningと音声認識」という内容で(ustreamで公開されているけども)社内セミナーで紹介させて頂きました。タイトルは前回の「Deep Learningと自然言語処理」に被せてます。



Broadcast live streaming video on Ustream

こちらがその資料になります。尚、セミナーでは「話し言葉コーパス」とすべきところを「書き言葉コーパス」としてしまっていました。資料では訂正してあります。

また、個々の参照は以下の通りです。

CTC関数に関しては以下が詳しいです。Chainerで実装してますがちゃんと動くようになったら公開したいですね。

巨人たちが語るディープラーニングの未来(翻訳記事)

$
0
0

比戸です。スムージーの美味しい季節ですね。

今回は「ディープラーニングの未来」というパネルディスカッションに関するブログの翻訳をお送りします。なぜなら、この業界の有名人が多数参加していて、かつとても興味深い内容だからです。

そのパネルディスカッションは2015年7月に開かれた機械学習の国際会議、ICML内のディープラーニングワークショップでの企画でした。オリジナルのブログはBrief Summary of the Panel Discussion at DL Workshop @ICML 2015であり、著者のKyunghyun Cho氏の許可を得て、日本語訳を掲載します。

— ここから翻訳

<はじめに>

ICML 2015で開かれたワークショップのフィナーレは、ディープラーニングの未来についてのパネルディスカッションだった。数週間に及ぶワークショップ主催者間のメール往復と議論の末、我々は以下の6人のパネリストを招いた。

ディープラーニングによる近年の革命はアカデミアとインダストリー(民間企業)の両方が支えてきたものなので、聴衆がそれぞれに属する専門家の主張を聞けるよう、偏りない人選に最善を尽くしたつもりである。内容について記す前に、まず登壇してくれたパネリストの皆さんに感謝したい。

パネルのモデレータはMax Wellingが務めてくれた。個人的にも、彼は完璧なモデレータだったと思う。ディープラーニングの未来における重要なトピックの議論を、6人の素晴らしいパネリストを巻き込んで、1時間というタイトなスケジュールの中、Max以上にうまくハンドルできる人は思いつかない。主催者を代表して(実はMaxもその中の一人だが)彼に感謝したい。

すでにパネルディスカッションは終了したが、6人のパネリストから聞くことができたことをこのブログにまとめて残したいと考えている。残念ながらディスカッションが始まった後に、私はノートを持ってないことに気がついた。あわててバックパックを引っ掻き回して1枚の紙見つけたが、言い換えれば、十分な余白がなかったわけなので、ここに記すものはそこでの議論を全てを正確にカバーしているわけではない。

いま飛行機でこれを書いているため、この後(あるいは前)の記述には誤りがあるかもしれないが、どうか許して欲しい。ただ、ディスカッションの熱が冷め切ってしまう前に書き留めておきたかったのだ。なお、引用符マークの中の記述はほぼ引用ではなく言い換えである。

<ディープラーニングの現在と未来>

このトピックはまずBengioの指摘から始まった。自然言語処理(NLP)の分野では過去1年間で様々な研究上の進展があったものの、(訳注:音声認識や画像認識と比較すると)ディープラーニングによる革命が起こったとまでは言えない、という。BengioはNLPがディープラーニングの次の大きな応用分野(next big thing)になる可能性があると信じている。また、Bengioはディープラーニングによる教師無し学習についても、もっと研究的な努力が割かれるべきだと考えており、LeCunやHassabis、Schmidhuberも同調していた。

興味深いことに、6人のパネリスト中4人、LeCun、Hassabis、Lawrence、Murphyが、医療/ヘルスケアがディープラーニングのnext big thingになるだろうと考えていた。彼らが興味を持っている応用分野は、例えば医療画像解析(LeCun)や創薬(Hassabis)などである。これに関しては、Lawrenceがすでのその方向で研究を進めており(当日彼が招待講演で触れたDeep Healthがそうだ)、そのアプローチをGoogle DeepMindやFacebookのそれと後日比較すれば面白い結果になるだろう。

LeCunとHassabisは共に、NLPにおける質問応答(QA)システムと対話システムを、next big thingとして取り上げていた。特に、知識ベース推論や知識獲得、プランニングなど(訳注:いわゆる伝統的な人工知能の研究分野)を、いかにニューラルネットワーク(あるいは、実際には他のどの機械学習モデルでもいい)と組み合わせるか、という視点をLeCunが持っていたのに私は感銘を受けた。この組み合わせについてはHassabisとSchmidhuberの2人の口からも繰り返されていた。

SchmidhuberとHassabisは連続した意思決定が次の重要な研究トピックになると考えているらしい。Schmidhuberが語ったカプチン・モンキー(訳注:オマキザル、高い知能を持つことで知られる)の例は楽しく気付きのあるものだった(彼がカプチーノ・モンキーと間違って発音したことだけでなく)。カプチン・モンキーは、木の上にある果物を取るために、順序だったサブゴールを難なく設定することができるという。例えば、木に近づく、木に登る、果物を掴む、などである。Schmindhuberの予測によれば、機械がこのような動物レベルの知能を持つのは10年以内だという(例えばカプチン・スマートフォンだろうか)。

他のパネリストとは少し異なり、LawrenceとMurphyは、人間がうまく解決できない種類のタスクやデータセットにも、ディープラーニングの成功をもたらすことに深い関心があるようだった。ここではそのようなタスクを”非認知的タスク”(non-cognitive task)と呼びたい。Lawrenceの指摘では、これまでディープラーニングが成功した応用先は、人間であれば難なくこなせるタスクに限定されているという。だが、今後はそれが非認知的タスクまで広がる可能性がある。もしそうなれば、モデルの解釈可能性がさらに価値のあるものになるだろうとMurphyは付け加えた。

階層的なプランニング、知識獲得そして非認知タスクの実行能力などが合わさると、自動化された研究環境(automated laboratory)というアイデアが自然に現れると、MurphyそしてSchmidhuberは説明した。そこでは、機械が能動的にゴールを設定し、(実験と観測により)知識を拡大でき、世界で起きている事象についての洞察(つまり解釈)を与えることができるという。

<インダストリーとアカデミアの格差について>

LeCunの驚くべき主張では、インダストリーとアカデミアの研究組織の研究インフラにおける格差は、今後拡大するのではなく、むしろ縮小していくということだった。もしそうであれば素晴らしいことだが、私は今のところLeCunよりも悲観的だ。

LeCunは続いてFacebook AI Research (FAIR)におけるオープンな研究インフラに関する取組みを説明した。彼によれば、FAIRだけでなくインダストリーがオープンな研究を推進すべき理由は以下の3つだという。
それが一般に科学が進む道であるから
外部にいる潜在的な社員/研究員に対して会社を魅力的なものにできるから
それが他社との研究競争において一歩先行し続ける手段であるから

にわかには信じがたいが、HassabisによればGoogle DeepMind(以下単にDeepMindとする)は研究用のTorchベースのソフトウェアフレームワークをFAIRと共有することで合意したという。そのような噂をしばらく前に何となく聞いたような記憶はあるが、まさにそれが実現したというのである。この合意が、FAIRとDeepMind両社の研究をさらに加速することは間違いないだろう。一方で、すでにディープラーニング研究者が集中している2大組織がコードベースを共有することが、他の研究組織(例えば大学)にとってもメリットがあるのかどうかは、今後の進展を見守る必要がありそうだ。

Hassabis、Lawrence、MurphyそしてBengioの4人は、インダストリーの研究組織に多くのリソース(訳注:人やデータや計算機すべてを含むだろう)が集まってることは、アカデミアの研究組織にとってそこまで大きな問題にはならないと考えているという。データ・ドリブンな会社(GoogleやFacebookを考えて欲しい)に限らず、多くの会社は大量に蓄積されたデータの恩恵を受けているというよりも、むしろその扱いに困っている状態にあって、それがアカデミアの研究組織の研究者にとって大きなチャンスであるとLawrenceは述べた。Murphyは、現在のアカデミアの状況を、宇宙開発競争をアメリカとの間で繰り広げていた時代のロシア(訳注:当時はソ連)にたとえた。つまりリソース不足は、アルゴリズムのブレークスルーにとって依然有用か、もしかしたら必要条件であるかもしれない、とBengioやHassabisは考えているのだ。さらにHassabisは、人工的なデータの生成が容易であるタスクや問題を見つけるのも、一つの手であると指摘した(例えばゲームなど)。

Schumidhuberの答えは最もユニークで、真に人間レベルに達した人工知能エージェントのコードは、高校生でも触れるほどシンプルかつ短いものになるだろう、という。言い換えれば、インダストリーが人工知能とその研究を独占してしまうという恐れはないということだ。全く心配ない!

<バブルと二度目の人工知能の冬の危機について>

(訳注:冬は三度目だと思われるが、これまで2度あった人工知能ブームの終焉後にやってきた、研究も投資も下火になった不遇の時代のこと)

ジャーナリストのインタビューの度に、人工知能への過度の期待がバブルになって弾けること(訳注:以下overhypeと呼ぶ)について尋ねられてきたLeCunが、この話題の口火を切った。やはりoverhypeの危険であり、4つの要因があるという。

  1. 研究資金を必要とし自己欺瞞に陥ったアカデミアの人間
  2. 投資を必要としているスタートアップ創業者
  3. 投資会社の投資担当者
  4. ジャーナリストの暴走(おそらく彼らも原稿料を欲している)

ディープラーニングにおけるoverhypeではこれまで、4.のジャーナリストが主要な役割を果たしてきており、想像とは違って、全てのニュース記事がGoogleやFacebookの熱心なPRの結果というわけではないという。そういう状況なので、ナンセンスな記事を書いてしまう前に研究者に意見を尋ねるのは好ましいことだとLeCunは語った(訳注:研究者にインタビューしないジャーナリストの記事が酷い、という意味か)。

LeCunとBengioは、研究スピードを維持しながらoverhypeを防げる可能性のある解決策として、オープンなレビューシステムを考えている。そこでは(本物の)科学者や研究者が論文を発表して公開の場でコメントを付け合うことが出来る。そうすれば、人々は各論文の利点だけでなく欠点も理解できる(そしてその単一の論文がいきなりシンギュラリティを引き起こすなどありえないないことも)。この方向性をさらに押し進めて、Murphyは論文で使用されたコードを公開することの重要性を強調し、論文で提案された手法の弱みや制約について第三者が容易に把握できるようにすべきだと言った。またその上で、提案アプローチの限界については論文の中で著者らが明確に述べることも重要だ、と付け加えた。もちろん、それにはLeon BottouがICML本会議の講演で語ったような査読環境が条件とはなるけれども(著者が自ら提案手法の限界について考察することが、論文を抹殺する=リジェクトする根拠として査読者に使われてしまうのは望ましいことではなく、むしろ推奨されてしかるべきである、ということ)。

同様に、我々研究者や科学者はゆっくりと、だが着実に、一般大衆にアプローチしていくべきだとLawrenceは提案した。もしジャーナリストが信用出来ないならば、我々自身でその役割を果たす必要があるかも知れない、と。その良い例は、Ryan AdamsとKatherine Gormanによる”Talking Machine”ポッドキャストである。

Hassabisは、overhypeは危険だが、同時に3度目の人工知能あるいはニューラルネットワークの冬は今後起きないだろうと信じているとのことだった。理由としては、我々はこれまでの冬の時代をもたらした原因(訳注:人工知能がすぐに人間を超えるような楽観的な主張・宣伝で過度の期待を集めすぎたこと)をより良く理解しており、今なら我々は度を越した誇張をせずに上手く対応出来るはずだからだ。もし私が意見を加えるならば、Hassabisに同意したい。何故なら特に、ニューラルネットワークはすでに商用アプリケーション(Google音声検索を考えて欲しい)で広く使われており、冬がもう一度訪れることは今後より難しくなるからだ(つまり、ニューラルネットワークはすでに社会で使われている!)。

Schumidhuberも、人工知能の冬について心配は無いという点については他のパネリストに同意しつつ、そこには別の理由があると言った。それは、より再帰型ニューラルネットワーク(Recurrent Neural Network)型に近いアーキテクチャを指向した(つまり脳の構造に近い)ハードウェア技術の進展だという。彼が信じるところでは、今こそニューラルネットワークにより適した(特に再帰型の)ハードウェア・アーキテクチャに移行すべき時であり、それは多くの短い配線と少数の長い配線で接続された多数のプロセッサが詰まった、小型の3次元集積回路だという。

私が一番感心したMurphyのコメントはこうだ。「それは、まさに人間の脳の仕組みそのものだ。」

<人工知能脅威論とシンギュラリティについて>

イーロン・マスクやスティーブン・ホーキング博士、ビル・ゲイツなどの超有名人から最近投げかけられた人工知能の危険性への指摘だが、DeepMindのHassabisは確実にその核心にいる人物だ。何故ならHassabisが人工知能をイーロン・マスクに紹介したことが、彼にその警戒心を与えたかもしれないからだ。しかしながら、最近数ヶ月のうちにHassabisはイーロン・マスクを説得し、ホーキング博士とも3時間に渡るチャットを行ったという。Hassabisによれば、ホーキング博士の懸念は以前よりも和らいだという。一方、我々は未来を恐れるのではなく、それに備えるべきだということを彼は強調した。

Murphyはこの類の人工知能脅威論とシンギュラリティ論争は大いなる無駄ではないかと述べた。何故なら、気候変動や経済格差の拡大など、今すぐ注目を集めるべき重要な問題が世界には他にもたくさんあるからだという。人工知能脅威論は過度に耳目を集める憶測に過ぎず、今すぐやめるべきだと言い、それにBengioとLeCunも同意していた。同じように、Lawrenceも人工知能脅威論は心配に値する問題ではないと考えており、むしろデジタル寡占やデータ格差の方に重大な関心を寄せていた(訳注:個人に関するデータの企業による所有や、そこから得られる知見・予測を商用利用する権限の範囲に関するもの)。

LeCunからは、我々はインテリジェンス(の有無)とその性格を区別するよう注意すべきだ、という興味深い主張がなされた。多くの人が人工知能を恐れる理由である、様々な問題行動(訳注:シンギュラリティの文脈で語られる破滅的な振る舞い)というのは、およそ全て人間にも成しうるものだが、その場合でも人間が十分に賢いからではなく、その性格(訳注:悪意や不注意をもたらすもの)に原因がある。そしてインテリジェントな機械は、そのような性格まで受け継ぐとは限らないのだ。

Schumidhuberはこの問題に関して、とてもユニークな視点を持っていた。彼が言うには、有能な人工知能エージェントとそれほどでもないエージェントのコミュニティが現れ、そしてそれらはお互いに興味を持つが、人類に対してはそれほど関心を持たないかもしれないという(10歳の女の子が同年代の女の子と遊ぶことに興味を持つように、あるいはカプチン・モンキー同士がそうであるように)。さらに、人工知能エージェントの集団は、人類(あるいはSchumidhuber)よりも圧倒的に賢くになる一方、人間の性格のようなものを持たないとSchumidhuberは考えている。これはLeCunの主張と似ている。

<オーディエンスからの質問>

質疑応答の間、残念ながら私はマイクを持って動き回っていたので、結果としてメモを取ることが出来なかった。そこでは素晴らしい質問(例えばTijmen Tielemanのもの)とパネリストと返答があった。もしこれを読んで、他の質疑応答を覚えている人がいたらコメント欄に書いてもらいたい。

私が覚えている質問の一つが、Tielemanからのものだ。彼はパネリストに、能動的な学習と探索が効率的な教師無し学習に使えるという点に関しての意見をぶつけた。SchumidhuberとMurphyが答えたが、内容を明らかにする前に、私が本当にこの質疑応答を気に入ったことを記しておく。簡単にいえば(あるいは私の記憶が定かであると言える範囲では)、世の中の事象をより正しく説明することを推奨すれば、機械が能動的な探索を行うようになるのは必然ということだ。周囲の環境(世界)に対する知識とその蓄積は報酬を与えられるべきことなので、その報酬を最大化するために、人工知能エージェントまたはそのアルゴリズムは能動的に周囲の環境を探索するようになる(たとえ教師有り学習の設定でなくても)。Murphyによれば、これは赤ん坊が教師ありデータどころか教師無しデータも十分にない状況で、あのように迅速に学習する仕組みに近いのかもしれないという(能動的に探索することが、品質の高い教師無しデータの収集を促進し、その不足を補っている)。

実は、幸運なことに私が最後の質問をすることができた。主にHassabis、LeCun、Murphyに直接向けたものである。その質問は、もしインダストリーの企業が(偶然にしろ意図的にしろ)真の知能を持つ人工知能エージェント(その定義には拘らない)を作り上げたとしたら、どうするのだろうか、というものである。まだ社会的な準備ができてないことを考えて封印するのか?商用化のチャンスを考えて秘密にしておくのか?ここに彼らの返答をまとめたいと思う(もちろん私が覚えている限りであり、繰り返しになるが、メモは無い)。

彼らの反応に共通していたのは、真の人工知能の実現はそんな風には起こらない、ということだ(つまり、偶然によって思考する機械が誕生することはない)。LeCunの返答は、だからそんな心配は無用とのことだった。完璧な人工知能の達成は、アカデミアとインダストリーの多くの科学者が皆で努力した結果として徐々に実現されるはずだという。HassabisもLeCunと同様に考えており、そのように完璧な人工知能が誕生することは想像できないし、もしそれが起きたとしても、秘密にはしておけないだろう(もし起きれば人類の歴史において最大の機密漏洩になるだろう)という返答だった。しかしHassabisはまた、私が意味したような真に思考する機械を手にする未来に向けて、我々人類は準備をすべきだとも付け加えた。HassabisとLeCunは2人とも、今年公開された映画「Ex-Machina」(訳注:「エクス・マキナ」日本未公開)について触れ、とても良く出来た美しい映画だが、あんなことは起きないと言った(ところで、私は今のところ今年の映画の中で一番好きだ)。

私もパネリストらの返答は全て正しいと思う。しかし残念ながら、私の質問には別の意図もあったのだが彼らは触れなかった(明らかに時間制限のせいだが)。それは、もし我々が実際に「思考する」アルゴリズムや機械を手にして、かつその仕組みの重要な部分が少数の営利企業(つまりHassabisやLeCunやMurphy達が所属するような企業=GoogleやFacebook)によって開発されたとしたら、一体誰がその極めて重要なコンポーネントの権利を持つのか?開発した少数の企業や個人が独占的に所有するのか?それとも公的なもの(人工知能に関する普遍的な権利のような何か)にされるべきなのか?そして最も重要なこととして、これらの選択肢の中から、誰が決断を行うのか?

<結論(?)>

(ディープラーニングの未来に関して)結論なんていうものが無いことは明らかだ。それはこれからも続いていく取り組みであり、私、そして我々ワークショップ主催者はこのパネルディスカッションがディープラーニングの未来そして汎用的な人工知能へ至る道に少なくともうっすら明かりを当てることができていたら、と期待している(ところで、Lawrenceは”汎用的な人工知能”という言葉の不合理さについて、Zoubin Ghahramaniの言葉を引用した「鳥が飛ぶことを飛行と呼ぶなら、飛行機のそれは人工的な飛行なのだろうか?」)。

  • ただ、個人的にとても興味深く、気付かされた点についていくつかまとめさせて欲しい。
    強化学習としての教師無し学習とautomated laboratory:各教師無しサンプルを個別に扱うよりも、集積された知識の量に応じて定義された報酬を最大化するようにモデル自身が選択的に教師無しサンプルの一部を選ぶようにすべきである
  • overhypeは、研究者が最新の成果やアイデアを広めることに積極的に参加すればかなり防げるものであり、それは(ジャーナリストなどの)非専門家が(一般の)非専門家に対して語るよりも効果的である。その手段としてポッドキャストやオープンな論文レビューシステム、ブログ記事はどれも役立つだろうが、単一の解というのはなく、組み合わせる必要がある。
    インダストリー対アカデミアのトピックについては、合意されたことは何一つなかったようだ。ただ、インダストリーとアカデミアはそれぞれ(単一の大いなる目標に向けて)一部異なるが重複する役割を担っている、という点では、アカデミア側のパネリスト3人もインダストリー側の3人と同じ考えを持っているように見受けられた
  • ディープラーニングは人間が得意とするタスクで成功を収めてきた(例えば画像認識や音声認識)。今後は研究者として我々も、人間が決して得意ではない(あるいは習熟に時間がかかりすぎる)種類のタスクやデータについても取り組んだほうがよい。その意味では、医療/ヘルスケアはパネリストの多くが興味を持ち、そしておそらく研究努力をすでに投じている分野のように思われた

パネルディスカッションを行うと、残念ながらいくつか不満な点が出てくることが多い。私はたいていの場合それらに耐えられるが、どんなトピックであろうともまず避けられないことだ。今回最も不満だったのは、1時間という自分たちで決めた時間制限だった。これは、聴衆と共有しきれないほどの知見を持つ6人の素晴らしいパネリストを迎えておきながら、平均して1人あたり10分しか時間が許されていなかったということになる。主催者の一員として述べるが、この誤った決定の責任の一部は私にある。パネルディスカッションが1日開催で、より多くのパネリストとトピックと聴衆を迎えられていればどれだけ良かったことか(少なくとも私はそうしたかった!)。しかし、もちろん、3日間続くワークショップというのは我々の業界ではありえないことだ。

もう一点、改善できるはずだと思うのは、パネルディスカッションの非継続性である。このようなパネルディスカッションは、毎年恒例のイベントにもなりうる。ワークショップと並列開催にできるかもしれないし、オンラインで行うことだって可能だ。それは、パネリストの多くが指摘したように、我々(そして他の人々が)ディープラーニングの研究成果、あるいはより広大な機械学習分野の未来について、overhypeを引き起こすことを抑制できるだろう。それは今よりはるかに多くの聴衆、それもベテラン・若手研究者だけでなく、興味を持つ一般人にもアプローチできる素晴らしい機会となるだろう。もしかしたら、私か、この記事を読んだあなたが、”Talking Machines”の責任者にEメールを送ってそれを提案すべきかもしれない。

<(追記)Schmidhuberからのコメント>

パネリストの1人、Schmidhuberがこの投稿を読んで幾つかの点をはっきりさせたいとしてコメントを送ってきてくれた。許可を得て、彼のコメントをここに原文のまま記す。まとめてくれたことに感謝したい。もしかしたら詳細な原稿を出版するのも良いかもしれないと私も思う。とりあえずいまはただいくつか説明を加えさせて欲しい。

  • なぜニューラルネットワークの冬はもう来ないのか?

我々が持つハードウェアは、物理法則によってもっと3次元RNN型に(つまり脳型に)近づかざるをえない。それは多数の短い配線と少数の長い配線で接続され高密度に3次元集積されたプロセッサの集合だ()。

物理法則自体がその3次元ハードウェアアーキテクチャを示唆しているようであり、その物理法則こそが高性能なコンピュータと我々の脳の双方が似たものになる理由なのだ。つまり、生物学的な動機付けを一切抜きにしたとしても、RNN型のアルゴリズムは今後ますます重要になるということであり、そうすればニューラルネットワークの冬の再来の可能性は見当たらない。

  • 人工知能脅威論について

私は「心配することは何もない」とは言っていない。ただ、遠い未来に過度に賢くなった人工知能からの保護望むとすれば、それは彼らがほとんど人類に興味を持たないという点においてだろうと、以下のコメントのように主張しただけだ(証拠)。そして近い将来について言えば、ビジネス的な激しいプレッシャーによって、フレンドリーだがそれほど賢くはない人工知能が、ユーザー満足度向上のために使われるだけだろう。

子供のように柔軟に学習できる人工知能ができたとすると、残念なことにそれを少年兵((訳注:人間に危害を加えうるもの)のように訓練することは、倫理的に問題のある人間がいればできてしまうかもしれない。それは恐ろしいことだろう。なので、私は「全く心配ない」とは決して言わないが、それと同時に、有名なSF映画(「Matrix」や「ターミネーター」等)のストーリーによくある、ロボットと人類の馬鹿げた対立は全く考慮に値しないと思と思っている。

以上。
Juergenより

— ここまで翻訳

いかがだったでしょうか。以下は比戸個人の感想です。

  • 教師無し学習と探索の組み合わせ
  • 連続的な意思決定
  • 非認知的タスク

このあたりがディープラーニングの次のターゲットになると、アカデミアだけでなくDeepMindやFacebook AI Researchのトップが考えているというのは知っておいたほうが良いと思いました。

一方で、人工知能の脅威論やバブル崩壊については日本と同様にメディア側が過熱しすぎてる現状があって、それに主体的に触れたことがある人からすると、海外の大物たちも自分たちと同じような感想を抱いているというのは、安心できることではあります。

SchumidhuberはICML前にLeCunと論文の引用の仕方について議論を起こすなどしていましたが、視点や言動もユニークな人のようですね。特に「フレンドリーだがそれほど賢くはない人工知能が、ユーザー満足度向上のために使われる」という辺り、ニクいですね。

論文のオープンなレビューシステムについては、arXivの各論文ページの下の余白にReddit/スラドのようなモデレーション付きスレッド型掲示板があったら、それで機能しそうな気がしました。

まとまらないですが、このへんで。

画風を変換するアルゴリズム

$
0
0

Deep Neural Networkを使って画像を好きな画風に変換できるプログラムをChainerで実装し、公開しました。
https://github.com/mattya/chainer-gogh

こんにちは、PFNリサーチャーの松元です。ブログの1行目はbotに持って行かれやすいので、3行目で挨拶してみました。
今回実装したのは”A Neural Algorithm of Artistic Stlye”(元論文)というアルゴリズムです。生成される画像の美しさと、画像認識のタスクで予め訓練したニューラルネットをそのまま流用できるというお手軽さから、世界中で話題になっています。このアルゴリズムの仕組みなどを説明したいと思います。

概要

2枚の画像を入力します。片方を「コンテンツ画像」、もう片方を「スタイル画像」としましょう。
コンテンツ画像とスタイル画像

このプログラムは、コンテンツ画像に書かれた物体の配置をそのままに、画風をスタイル画像に変換した画像を生成します。

生成された画像

いろいろな例を見てみましょう。コンテンツ画像は先ほどの猫の画像で、左がスタイル画像、右が生成された画像になります。
Screen Shot 2015-09-10 at 2.03.20 PM

Screen Shot 2015-09-10 at 2.03.35 PM

美術作品をスタイル画像とすると、その画風をかなり良く再現してくれます。色合いだけでなく、小さめの空間パターンまで似せて生成されます。ここには載せないですが漫画作品やゲーム画面なども面白い結果を生み出してくれます。

Screen Shot 2015-09-10 at 2.03.29 PM

スタイル画像は絵である必要はありません。美しく生成するのは難しいですが…
他にも寄木細工のような工芸品や、ロマネスコブロッコリーのようなフラクタル系の画像もスタイル画像として優秀でした。

Screen Shot 2015-09-10 at 2.03.24 PM
正直ここまでできるとは思ってなかったのですが、新聞や設計図のような画像でも、そのスタイルを抽出することができました。特に、新聞の文字もどきを塗りに使っているところや、設計図のカクカクした感じが猫の輪郭に当てはまっているのには感動です。

元論文や、こちらのサイトなどにも面白いサンプルが多数掲載されているので、もっと見たい方はご覧になってみてください。また、これらの例は全部上のリンクのchainer-goghで生成できるので、興味のある方はぜひ自分で作ってみてください。

アルゴリズムの解説

モデル

このアルゴリズムはCNN(convolutional neural network)を使って画像を生成します。
このCNNとしては予め物体認識で訓練したニューラルネットを使用し、これ以上の学習は行いません
caffeのmodel zooにILSVRCなどの画像認識ベンチマークで好成績を収めた学習済みモデルが多数公開されており、それを使います。Chainerはこれらのcaffemodelを読み込むことができるのです。

上でお見せした生成例は、VGG 16-layerのCNNモデルを使用しています。これは、次のような構造になっています(後半のFC層などは省略)。

使用したCNNの構造

使用したCNNの構造

書かれている数字は[チャネル数*縦*横]を意味します。入力画像はRGBの三色なのでチャネル数が3ですが、層が進むとチャネル数が増えていきます。縦横解像度はこの図は256*256を例にしましたが、変えても動作します。
本アルゴリズムでは中間層である①〜④からの出力を使用します。

CNNの中間層

猫の画像をこのCNNに入力し、中間層の出力を可視化すると次のようになります。
猫画像を入力した時の中間層
①~④は、上のVGGの図と対応します。中間層はもっとチャネル数が多いですが、その中から3つのチャネルの画像を選び出して描いています。
CNNの場合、深い層まで進んでも空間的な位置関係は保たれる(④の場所でもかろうじて猫にみえる)ことは重要です。④で左上の方にある出力は、入力画像でも左上の方の特徴を表しています。これは、CNNが画像のローカルなフィルタ操作を繰り返しかけていることに起因する特徴です。

Deep Neural Networkは層が進むにつれて、タスクにとって重要な特徴量を強調するように情報処理が進んでいくと言われています。
そのことを④の512*32*32のデータのみを使って入力を復元することで、調べてみます。
④からの復元
この絵から分かるのは、まず、CNNを10層以上進んでも、元画像のかなりの情報が残っているということです。一方で、色合いや質感は、元画像から少し変わっています。このことは、もともとこのCNNが物体認識のタスク用で、多少色合いや質感が変わっても物体は同じ物体とみなしてほしいため、その情報を、形などの情報と比較して相対的に弱めているからと考えられます。
本研究のアイデアは、この情報が弱まっている部分を、別の画像の画風に置き換えてやれば、コンテンツ画像の形状を保ったまま別の画風に画像を変換できるのではないか、ということになります。

スタイル行列

画風の情報を表現するために、スタイル行列という概念を導入します。これがこの論文の一番のポイントです。
この行列は、同じ中間層の各チャネル間の相関を計算したものです。入力画像で言えば、チャネルはRGBの各色に対応するので、赤と緑の相関など、つまり「画像全体でどんな色が使われているか」という情報を表すことになります。もう少し層が進めば、「どれくらいの太さの線で書かれているか」といった情報を取り出すことが出来、より深い層で統計すると「どの色とどの色が隣り合って描かれやすいか」「どのようなテクスチャが使われているか」といった情報が反映されると考えられます。

猫画像における、VGGの①〜④の各中間層でスタイル行列を計算したものを可視化すると、以下のようになります。
cat_style
この行列の2行3列目は、チャネル2とチャネル3の相関をとったものになります。
ここに、色合い、筆のタッチなどの画風情報が埋め込まれることになります。

目的関数

中間層④の出力をコンテンツ画像と同じようにしつつ、スタイル行列はスタイル画像と似せてやることで、ゴッホ風猫画像を生成できると考えられます。
すなわち、このアルゴリズムで最小化したい目的関数は、
  中間層のコンテンツ画像とのズレ + スタイル行列のスタイル画像とのズレ
という形になります。

前者のコンテンツ画像とのズレは、物体のおおまかな配置や形状が合うようにしたいので、抽象的な情報が抽出されてる深い層で値の差を測ります。ここを浅い層で差をとってしまうと、ピクセル単位の細かいズレに鋭敏になってしまい、大胆な画風の変更が出来なくなってしまいます。

後者のスタイル画像とのズレは、浅い層でも深い層でも差を測ります。細かい筆のタッチのような情報は浅い層で、大きめの空間パターンは深い層で取り出すという狙いです。

画像の更新則

目的関数が定まったので、あとは確率勾配降下法などで最適化を行います。
画像をCNNに通して中間層を求める処理、中間層の相関を計算する処理、コンテンツ画像・スタイル画像とのズレを計算する処理はすべてChainerのFunctionで書かれているので、backward()を呼び出すだけで各パラメタを動かすべき方向を計算できます。

一般のニューラルネットの学習と異なるのは、動かすパラメタがニューラルネットの結合荷重ではなく、入力画像の方だということです。今回のアルゴリズムではニューラルネットは固定されています。
入力画像はまず乱数で作ったノイズ画像からはじめて、backwardで計算した勾配を利用して最適化していきます。chainer-goghでは、ニューラルネットの学習によく用いられるAdamを使って最適化しています。この部分も、ChainerのOptimizer機能を使えば、update()を呼ぶだけでパラメタの更新をやってくれます。
更新されていく猫

画像が生成されていく様子を動画にしてみました。まずスタイル画像の模様を全体に描いて、それを少しずつコンテンツ画像にマッチするように変化させていくという描画方法をするようです。おそらく、スタイル画像とのズレのほうが浅い層から誤差が伝搬してくるので、先に最適化されるのだと考えられます。

結果の分析

さて、本当にこのゴッホ猫が、中間層出力がコンテンツ画像と似つつ、スタイル行列はスタイル画像と似ている、という状態になっているのかを確認してみましょう。

まず、猫画像の中間層出力とスタイル行列を再掲します。
cat_cnn

cat_style

次に、ゴッホ画像です。

gogh_cnn

gogh_style

最後に生成したゴッホ猫です。

goghcat_cnn

goghcat_style

ちょっとわかりづらいですが、中間層④の出力は、ゴッホよりも猫に近いこと、そしてスタイル行列は①〜④まですべてゴッホの方に近いことが確認できます。こうして、形状をコンテンツ画像から、画風をスタイル画像から受け継いだ画像が誕生したわけです。

おわりに

画像の自動生成は、Deep Learning研究者の一つの夢であり、多くの研究者が研究しているテーマです。
現在成功しているアプローチは大きく分けて2つあります。

まず1つ目は、オートエンコーダー(画像を低次元のベクトルに符号化するNNと、符号から画像に戻す復号NNを両方同時に学習する)を使う方法で、訓練データの画像が符号の空間で正規分布のようなきれいな分布をしていれば、逆に符号側を正規分布からサンプルし、それを復号NNで画像化してあげれば、それっぽい画像が生成されるだろうという発想です。VAEやAdversarial networkを使った研究が有名ですが、このアプローチは”もやっと”した画像が生成される事が多く、手書き数字や顔画像の生成はうまくいっているものの、より大きく複雑な画像生成はそれほど成功していません。
Adversarial
Adversarial networkで生成した自動車、動物、船

2つ目のアプローチは画像を反復的に改良していく方針で、物体認識NNが「犬」と判断するような方向に入力画像の方を動かしていけば犬の画像が描けるだろうという発想になります。ちょっと前に流行ったDeep Dreamがこれにあたります。
しかし、あれは”もやっと”はしていなくても、グロテスクな画像を生成してしまう傾向にありました(まだ見たことない人はDeep Dreamで検索してみましょう)。これは、自然な画像とは似ても似つかなくても、物体認識NNを騙せてしまうことに原因が有ります。

今回紹介した研究は2つ目のアプローチですが、Deep Learningを使って”もやっと”もグロくもない画像を生成することができます。もちろんコンテンツ画像とスタイル画像を入力に必要としているので全自動ではないのですが、コンテンツ画像は深い層の出力のみ、スタイル画像はスタイル行列のみしか情報を使っていないので、画像の完全自動生成に一歩近づいたと言えるのではないでしょうか。今後の発展に要注目です。

Chainer Meetup #0 を開催しました。

$
0
0

2015年10月14日に、Chainer Meetup #0を開催しました。

こんにちは、PFI エンジニアの舛岡です(前回の松元さんに習い自己紹介を後ろに書きました)。製品事業部で、何でも屋として仕事をしています。research ブログに投稿する日が来るとは思ってませんでした。

Meet Upの概要

今回のMeet Upは、「開発陣がコントリビュータの方に会ってみよう」をコンセプトに開催をしました。(開発陣の2名が出張でいないという・・・・)。そのため、コントリビュータの方を招待し、13名の方に参加して頂きました。

まず始めに得居さんから、Chainer 1.5の開発方針について話をし、その後、参加者の皆様に以下の内容でLTをして頂きました。

  • Chainerをどのような場面で使用されているのか?
  • Chainerの良いところ
  • Chainerの改善点・もっとこうしてほしい

LTの総括

Chainerをどのような場面で使用されているのか?
  • RNN/CNNのプロトタイピング
  • 画像認識(研究/ウェブサービス)
  • 自動翻訳
  • 為替市場の時系列データ分析
  • 音声認識

など

Chainerの良いところ
  • 環境構築が簡単
  • 可読性が高い
  • 複雑なネットワークを構築できる
  • 入力データを柔軟に変更できる

など

Chainerの改善点・もっとこうしてほしい
  • Save/load機能
  • もう少し速度がほしい
  • コミュニティの強化:交流会増やして欲しい
  • ベンチマークが欲しい

などなど

発表資料

以下は、発表資料(アップされたのもののみ)です。

@beam2d


@mitmulさん


@jnoryさん



@sinhrksさん

@jnishiさん


@y-tag
https://docs.google.com/presentation/d/1d2VTgaPpdHM2dgSNX7HEL2K-_YgditTa2wuqoejxD5Q/edit?usp=sharing

@odashi

@kikusu

感想

Chainerがどのような場所で使われているか、どういう課題があるかを知ることができました。
今後も継続的にこのようなイベントは行う予定です。
詳細が決まり次第ご連絡します。

 


深層学習でバラ積みロボットの0から学習

$
0
0

乱雑に積まれた物体を取り出す産業用ロボットの動作を、ディープラーニングで学習しました。

こんにちは、松元です。今回は、国際ロボット展2015にてFANUCブースで出展した「バラ積みロボットの0から学習」について解説したいと思います。

まずは次の動画をご覧ください。

背景

「物を取る」というのはロボットの最も基本的なタスクの一つで、あらゆる場面で必要となります(たとえば産業用では、カゴから部品を取り出してベルトコンベアに乗せるといった用途で頻繁に使われます)。このときに、取るべき部品が決まった位置に整然と並んでいたり、平らな面に一つだけ置かれているなら簡単なのですが、箱にぐちゃっと積まれたところから一つ取り出したいというケースもあります。このようなタスクをバラ積み取出しといいます。

様々なバラ積み取出しの活用例(google画像検索)

いま、3Dカメラによってバラ積みされた領域の深度付き画像が得られているとして、取り出したい対象(ワークという)の座標を返すことを目標とします。通常は次のような手法が用いられます。

  • 取りたいワークの写真やCADデータとパターンマッチして、目標位置を探す
  • ワークの形状が予め完全に分かっている場合に有効です。

  • ある程度以上の面積の平らな場所を探して、そこを目標とする(吸着やマグネット式のハンドの場合)
  • こちらはワーク形状が未知の場合にも使えます。

既存手法(FANUCの製品)によるワーク位置の検出 しっかりチューニングを行えば高い精度が出る

既存手法(FANUCの製品)によるワーク位置の検出
しっかりチューニングを行えば高い精度が出る

しかし、いずれの手法でも、判別の閾値などのパラメタチューニングには熟練を要します。また、特定のハマりパターンがあったときに、それを回避するのが難しいという問題もあります(今回取り組んだ円柱ワークの場合、ワークが複雑に重なっている時や、円柱が2つピッタリくっついて並んでいるときなどに、誤検出することがありました)。

今回私たちはディープラーニングを用いることで、このような問題を解決し、既存手法の熟練者によるチューニングに匹敵する精度を自動で達成することができました。

手法

セットアップ

・ワーク
鉄製の円柱(高さ5.0cm, 直径2.5cm)が200個程度箱にバラ積みされています。

ワークとハンド

ワークを吸着して持ち上げている様子

・ロボット
取り出しには、FANUC製の「LR Mate 200iD」というロボットアームを用いました。ロボット展の会場を見渡すと、あちらこちらで使われているのを目撃できるくらい、産業用では広く使われている優秀な機体です。
このアームは同じくFANUCの「R-30iB」というコントローラーから制御します。
PCからコントローラーに目標座標(x, y, z, yaw, pitch, roll)を指示すれば、そこに移動するまでの経路を自動で計算して正確に動いてくれます。
動作も高速で、3秒に1つくらいのペースでワークを取っていくことができます。

今回用いたロボット「LR Mate 200iD」(FANUC公式サイトより引用)

実験に用いたロボット「LR Mate 200iD」(FANUC公式サイトより引用)

・ハンド
ロボットの先端に取り付け、ワークとコンタクトする部分をハンドといいますが、
今回は空気による吸着式のハンドを用いました。
先端はジャバラ状になっていて、多少ワークが傾いていても取ることができます。
吸着動作後に気圧を測ることで、ワークの取得に成功したか失敗したかを自動で判別します。

・ビジョンセンサ
箱の上方に3Dカメラがついていて、箱内部の深度付き画像を取得します。
3Dカメラとロボットの座標系の対応をキャリブレーションして、
深度付き画像から、ロボットの移動目標座標を求められるようにしてあります。

学習

学習は次のような流れで行います。
(1) 深度付き画像を撮影する
(2) 現在の予測モデルのもとで最善の(x, y)を選ぶ(学習初期では領域内の点をランダムに選ぶ)。深度付き画像からzが求まるので、この(x, y, z)を目標座標とする
(3) (x, y, z)にロボットを動かし、ワークの吸着を試み、成否を取得する
(4) (x, y)周辺の深度付き画像を切り出して、成否のラベルと組にして保存する
(5) 現在得られているデータから、画像から取得成否を予測するモデルを学習してアップデートする(この処理は数百回おきに行う)
(6) 以上を繰り返す

集めたデータの一例

集めたデータの一例。こういったラベル付きデータから、CNNを教師あり学習する

予測モデルにはChainerで実装したCNN(convolutional neural network)を用いました。目標座標周辺を切り出した深度付き画像を入力とし、取得成功確率が出力となります。
(5)での学習処理は教師あり学習ですが、学習に用いるデータセットの構築に現在のモデル自身を用いるため、能動学習の一つと捉えることができます。

ロボットを動かすのはPCから自動で指示が送れるので、ときどき空になった箱をリフィルする以外は自動でサイクルを回すことができます。ディープラーニングではデータの数を揃える必要があるので、ほっとけばどんどんデータが集まってくるという設定にすることはとても大事です。

結果

学習当初のランダムモデルでは50%ほどの取得成功率だったものが、
学習データが集まるにつれて、2000データ(約4時間)で70%、5000データ(約10時間)で90%の取得率を達成できました。

学習に伴う取得成功率の向上

学習に伴う取得成功率の向上

学習の進捗は、実際の撮影された画像に対して、CNNがどのような評価値を出力しているかを可視化することでも評価できます。
下の図は、1000データ学習後と5000データ学習後のCNNで、同じ盤面に対して評価値を出力させた図になります。明るい色で塗られている部分が、「取れる」と判断した座標になります。

学習による予測精度の向上

学習による予測精度の向上

基本的には他のワークが上に重なっていないワークの、側面あるいは端面の中心付近を狙えば取得に成功しますが、
1000データ学習の時点でも大まかにはその性質が学習できていることが分かります。
しかし、青い丸が付けてあるところのように、ワークとワークの境界部分や、上に他のワークが重なっているワークにも高い評価値が割り振られているところがあります。このようなエラーが、5000データ学習後にはぐっと減っていることが分かります。

このような精度の改善は、取りやすいワークを全て取ってしまった後のような難しい局面にて威力を発揮します。
学習前は何回も連続で失敗してしまうようなところで、数少ない取れるワークを正確に狙うことが出来るようになり、90%の取得率を達成できるのです。

本手法の意義

  • 熟練を要するチューニングのプロセスを、自動で行うことができるようになりました
  • ある程度までは手動チューニングで精度を高め、それでどうしても誤検出するケースを学習で改善するという使い方もできます

  • 取得するワークの形状が不定の場合にも適用できます
  • 食材を扱うロボットや、ゴミを分別するロボットといった応用が考えられます

  • 転移学習が可能
  • Deep Learningの優れている点として、汎用的なモデルをひとつ作ってしまえば、様々なタスクに転移できることが挙げられます(imagenetの画像分類タスクで学習したモデルが、画像からのキャプション生成に使えるなど)。
    バラ積み取出しにおいても、複数種類のワークで学習を行ったり、シミュレータ上で大量に学習したものを、転移学習することも可能でしょう

  • 分散学習が可能
  • 複数台で同時にデータを集めれば、それだけ高速に学習できます

関連する研究

Supersizing Self-supervision: Learning to Grasp from 50K Tries and 700 Robot Hours
一般物体をハンドで掴むロボット。本研究と同じように、ランダムに掴むところからデータを貯めて学習を行う。取得したい物体が任意の一般物体であり、ハンドも挟むタイプのものであるため難しい問題設定。700時間という時間をかけても取得成功率は70%くらいでちょっと悲しい。

Dex-Net 1.0: A Cloud-Based Network of 3D Objects for Robust Grasp Planning Using a Multi-Armed Bandit Model with Correlated Rewards. Ken Goldberg, et al. ICRA 2016
UC BerkeleyとGoogleの共同研究で、Bay area robotics symposium 2015で発表があった。
10000種類の物体の3Dモデルを用意して、シミュレータ上でどこが掴みやすいかを1000台のマシンで並列に学習するという。
産業用ロボットは指示されたとおりに非常に正確に動き、また、学習初期の頃から実機でいきなり実験すると物を壊してしまう可能性もあるため、シミュレータを使うことは理にかなっている。
一方で、バラ積み取り出しのよくある失敗例として、取得動作の際にワークが崩れて動いてしまったり、ワーク間の光の反射によって位置推定がずれたりといった、シミュレーションしにくい要素が絡んでいることも事実である。
シミュレータで得た学習結果を、いかに実機に適用するのかというのは今後の大きな課題であろう。

Chainer Meetup #01 を開催しました

$
0
0

あけましておめでとうございます!PFI舛岡です。12/19にChainer Meetup #01@スマートニュースを行いました。

参加の倍率が1.8倍と参加するだけでも大変なイベントのようでした。
(ちなみに弊社社員P氏は抽選で落選しました)
また参加率も90%以上でとても大盛り上がりのイベントでした。
会場をご提供くださったスマートニュース株式会社、会場を準備してくださった@tkngさんありがとうございます!

イベントの様子はtogetterにまとめております。

イベント概要

今回のイベントのテーマを以下の様に設定しました。

  • Chainerとはなにか?
  • Cupyとはなにか?
  • Chainerはどのように使われているか?
  • Chainerの開発はどうなっていくのか?
  • Chainerの開発を手伝うにはどうすればいいのか?

Chainer開発者全員と、Chainerをサービスに使っている担当者の方に話をして頂きました。
またLTも募集をして8名の方に話をして頂きました。

発表資料

発表に使用した資料は以下の通りです。

Chainer入門と最近の機能(@unnonouno)

CuPy解説(奥田)

超自然言語リアルタイム解析をサービスに組み込んだ話(@ixixi)

http://qiita.com/ixixi/items/a3d56b2db6e09249a519

Capitalicoでのchainer 1.1→1.5バージョンアップ事例(@arrow_elpis)

ディープラーニングにおける学習の高速化の重要性とその手法(@yukofuji)

学習済み Caffe モデルを移植してみた(@ohtysk)

ボケるRNNを学習したい(@aonotas)

深層学習ライブラリのプログラミングモデル(yutakashino)

Chainer向けGUI環境DEEPstationについて(shi3z)

Webアプリ診断AIの開発(bbr_bbq)

デモ画面

Chainer ハンズオン勉強会について(@SnowGushiGit)

アカデミアでの Chainer 利用の実例 深層ニューラルネットワークを用いた日本語形態素解析(@Ace12358)

Chainer: Development Plan(@beam2d)

Chainer Contribution Guide(@@delta2323)

イベントの雰囲気

IMG_20151219_175632IMG_20151219_171928

 

IMG_20151219_164703IMG_20151219_163707

IMG_20151219_165531IMG_20151219_163104

Chainerドーナツスポンサー

今回、Chainerロゴにそっくりのドーナツをエヌディビア合同株式会社の@yukofuji様に準備頂きました!ありがとうございます!その他にチョコや本もご提供頂きありがとうございます!
(セブ○イレブ○のドーナツが一番そっくりだったんですが、1週間前に関東で販売を停止してしまいました。。。)

CWkPmRlVAAAfegICWkPmReU8AAd-03

今後のイベント開催予定

懇親会等でも継続的にイベントを開催して欲しいとの声をたくさん頂きました。(実は)次回イベントも準備中です。詳細が決まり次第またconnpass等で告知しますので、お待ち下さい!

CES2016でロボットカーのデモを展示してきました

$
0
0

こんにちは。Preferred Networksの自動運転チームです。

PFNは、2016年1月6日〜1月9日にアメリカのラスベガスで開催されたCES 2016でロボットの学習による自動走行のデモを行いました。これはPreferred Networksとトヨタ自動車様、NTT様との共同展示です。展示はトヨタ自動車様のブースの一部で行われました。

このブログではその中でどのような技術が使われているのかについて簡単に解説します。

 

背景

人工知能(強化学習)による自動走行は人工知能の黎明期よりとりくまれており,ロボットカーの自動走行などが60年代頃から試行されていました。

ルールベースやプログラムでも走行できますが、なぜ学習が必要なのでしょうか?

実際の交通環境、特に市街地の交通環境は非常に複雑であり、全てのパターンをあらかじめ列挙し、それに対する制御を漏れ無く書き表すのは困難です。一説には交差点のありうるパターンは千を超えるという話があります。

特に問題なのが、例外が大きな事故を引き起こしてしまう点です。例えば車線を逆走してきた車がいた場合や突然隣の車両がルールをやぶり車線を割り込んできた場合、またそれらの組み合わせが発生した場合に、それに正しく対応できなければ事故をひきおこします。それら全ての例外に対する対処法をあらかじめ用意しておくのは困難です。

また、新しいセンサや認識手法の登場により空間認識の精度は大幅に向上し、周辺の車や人をかなり正確に検出することが可能となっています。しかし大量に認識された結果を制御にどのように使うのかは難しくなっています。例えば交差点においては100を超える障害物(車、人、自転車など)が検出され、それらの位置や速度、向きといった情報が得られます。これらの情報を利用しての制御の複雑度は急速にあがります。

学習による制御はこれらの問題を解決します。学習の過程で経験から最適な運転技術を獲得します。また、センサ情報から制御を決めており、様々な種類のセンサ情報を組み合わせて最適な制御を実現できます。学習により獲得された運転技術は汎化されており、未知の状況にも対応できます。もし危ない場面があったとしても、次からは同じような間違いをおかすことはありません。経験を積めば積むほどより安全な運転を実現することができます。

一方で学習による制御が全てを解決するわけではありません。例えば強化学習により作られたモデルはブラックボックスでどのような挙動をとるのかがわかりません。作ったプログラムの安全性をどのように保障できるのか、既存の制御とどのように組み合わせられるのかが問題となります。そのため現時点では実際の自動車で使われているわけではありません。今後こうした課題を一つ一つ解決していく必要があります。学習の理論面の理解もこれから非常に重要になってきます。

今回のデモンストレーションでは、現時点での人工知能、強化学習ではどの程度のことまでできているのかを示したものであり、機械学習、特に深層学習の最新の研究成果を多く取り込んでいます。

 

今回のデモの手法

今回のデモで使用したロボットカーとステージは以下の様なものです。

  • ロボットカーの大きさ
    縦幅43cm, 横幅20cmの車両を利用しました。
    写真のようにシルバーのプリウスのカバーを付けました。
    car1
  • ロボットカーのモーター
    左と右のタイヤにそれぞれモーターがついており、タイヤの回転の強弱を調整することで、車の速度と角速度を決めることができます。
  • ロボットカーのARマーカー
    各ロボットカーの屋根にはユニークなARマーカーが貼り付けられています。ステージの真上に設置されているカメラでこれを撮影し、サーバー上で動いているシミュレータと同期を取ります。なお,強化学習の入力には車の位置は与えません(現実の問題では使えません。また位置情報が使えると問題はとても簡単になります。)。このARマーカーによる位置情報はライダーのシミュレーション、報酬計算のみに利用されます。
  • ステージ
    アクリル板の壁に囲まれた3m x 3mの正方形のステージを利用しました。中央付近には4つの障害物(CES本番では直径10cmの円柱)を設置しました。交差点コースのデモでは各車は障害物の間を通り抜けるようなコースを与えられています。隣り合う障害物の間隔は約60cmのため、複数台の車が中央に集まった場合には、避けるための空きスペースはほとんどありません。

デモシステムは強化学習の一種であるDeep Q Learningをベースに作られています。詳しくは以前の松元の記事の解説をご参照ください。
https://research.preferred.jp/2015/06/distributed-deep-reinforcement-learning/

今回のデモでは、「前方向」「後方向」「右方向」「左方向」「左前方向」「左後方向」「右前方向」「右後方向」「ブレーキ」の9種類の行動を用意しました。車はセンサから得られた情報から各行動のQ値を比較し、どの行動を取るべきかを選択します。

前提として各車には走行コースが割り当てられており、主に以下の二つの指標をベースに賢い走行を学んでいきます。

  1. コースにそってなるべく速く移動する。
  2. 他の車両や壁、障害物にぶつからない。

理由は後述しますが、ニューラルネットの学習はすべてシミュレータ上で行い、その学習結果を実機で動かしました。学習時には以下の様な手順でニューラルネットを訓練していきます。

  1. センサ情報の計算
    シミュレータ上で32方向のライダーから得られる情報を計算します。各ライダーは光線を発射し、光線が障害物や他のロボットカーにぶつかるとその距離と角度を得ることができます。以下のGUIのスクリーンショットで、車を中心に360度各方向に伸びている直線がシミュレーションされたライダーの光線です。このGUIでは1台しか表示していませんが、実際にはすべてのロボットカーのセンサ情報を計算しています。これらのセンサ情報はQ値を計算するニューラルネットの入力として使われます。このほかに自車のモーターの状態、過去の行動履歴も入力として使います。それ以外のexplicitな情報(自車や他車の位置や向きなど)は入力として使っていません。
    lider
  2. 行動の選択
    確率1-εでQ値が最大となる行動、または確率εでランダムな行動を選択します。これはε-greedyと呼ばれる手法です。
  3. 車の移動
    2.で選択された行動に従ってシミュレータ上の車を動かします。
  4. 選択された行動の評価
    3.で車を移動させてそれが良い行動(例:コースにそってまっすぐ走っている)であったならばプラスの報酬、悪い行動(例:車や障害物と衝突してしまった)であればマイナスの報酬を与えます。そのときのセンサ情報、行動、報酬などをメモリーと呼ばれる場所に記録し、複数の車で共有します。メモリーには上限があり、古いものから順に捨てられます。
  5. ニューラルネットの学習
    メモリーに記録されている情報からランダムに選び出し、その結果を用いてニューラルネットを訓練していきます。車の数が多ければ多いほど多種多様な情報がメモリーに蓄積されるため、学習が効率よく進みます。

 

実機環境で動かすデモシステムの流れは以下のようになります。ここでは予めシミュレータで学習済みのニューラルネットを利用します。

  1. ロボットカーの認識
    車に取り付けられたARマーカーを天井に取り付けられたカメラで撮影し、実環境とシミュレータの同期を取ります。
  2. センサ情報の計算
    シミュレータ上で各車両の32個のライダーから得られる情報を計算します。
  3. 最適な行動の選択
    得られたセンサ情報を入力として与え、Q値が最大となる行動を最適な行動とみなして選択します。
  4. 実機に命令を送る
    計算された最適な行動からモーターの変化量を決め、サーバーから通信モジュールを介して実際の車に命令を送り、モーターの値を調整します。

 

今回のデモは2015年6月のInterop用に松元が開発したものを作り直し、改良を加えたものです。車やコース以外での主な改良点は以下の様なものです。

  • 強化学習
    最近発表されたばかりの論文も含め、様々なアルゴリズムを試行錯誤しながら実験しました。また、学習時にカリキュラムを組むことで易しい問題から始め、徐々に難しい問題を学習させたり、学習が進むに従い報酬のパラメータを変更するなどの複雑なパラメータチューニングも試してみました。しかし、最終的にはアルゴリズムを改良することでカリキュラム学習や複雑なチューニングを行うことなく賢い走行を獲得できるようになりました。実装にはもちろんChainerを使いました。
  • シミュレータ
    ニューラルネットの学習には実機環境を使わずに全てシミュレータ上で行いました。実機での学習ではロボットカーが衝突した時の復帰に人手が必要で手間がかかってしまったり、カメラのFPSなどがボトルネックとなり学習に時間がかかってしまいます。これを実現するためには現実の実機環境とできるだけ同じ条件のシミュレータを実装することが重要です。また評価も人が目で動作を確認する方法だと人間がボトルネックとなってしまうため、良い学習の指標をスコア化して評価を自動化し、実験効率を上げる必要がありました。今回のデモではこれらの課題をクリアすることでシミュレータ上で効率良く様々な学習方法を試すことができました。
  • カメラ認識
    車の検出はARマーカーを用いて行われますが、CESの展示会場では様々な照明機器が使われており、可視光カメラを使って検出した場合に誤検出が多くなる可能性があります。今回はよりロバストな検出をするために、赤外線カメラを使って認識しています。カメラの付近に強い赤外線光を放つLEDライトを設置し、ARマーカーとして再帰性反射材を用いることで、検出対象のARマーカー以外のものがカメラにほぼ写り込まないようにできます。
  • 通信
    会場では様々な無線通信が飛び交っており、サーバーと車の間で安定して通信を行うことは通常は困難です。今回は、NTT様に特別な通信モジュールを用意していただくことで、この通信を安定して行うことができました。
  • ストリーム処理基盤
    今回のデモシステムのパイプラインを実現するために弊社で開発中のストリーム処理基盤を利用しました。こちらについては後日情報公開をする予定です。

 

これまでの強化学習による自動走行と異なる点

よく質問で「強化学習で昔から自動運転をやっていたので何が新しいの?」という話がありましたが、次の点で異なります。

  1. 車両の幅に対して道路が狭く、車が密集した交差点という難易度の高い問題を扱っています。また、学習時には存在しない、人が操作する車からの回避という困難な問題も扱っています。

    これまでに説明したように最初の段階では衝突だらけで全く走らず様々な技術を組み合わせることでシミュレーション上でも実機でも衝突は全く起きないレベルになりました。

  2. センサはライダー情報(32方向の距離と角度)を使っており、お互いの車両の位置や速度はわかっていません。また、センサや通信などはランダムに”わざと”一時的に落とし、実際の車で使えるようなシナリオを扱っています。
  3. Deep Q Learningと同様に、生の入力から直接制御を決めるように学習しています。そのため、違うセンサ、制御方式であっても特に工夫しなくても使うことができます。
  4. 学習結果は全ての車でリアルタイムで共有されており、学習を加速することができます。また、ある車でしか経験しなかったレアイベントの経験を共有することができます。

 

まとめ

今回のデモの中で,学習で獲得された走行技術は人間が良いと思っている走行とは異なる場合があることがわかりました。例えば,ロボットカーは周囲を全て同時に集中して見ることができるため、前方向と同じように後方向にも躊躇なく移動します。そのため,交差点では車両間隔をあけるために後ろがあいているなら少し後ろに下がります。
今回のデモは実際の車ではありませんでしたが、人間よりもリッチなセンサを載せた車で、できるだけ早くより安全な走行を実現できるように研究開発を加速させていきたいと思います。
また、今回のCESデモ出展に関して、トヨタ自動車様とNTT様をはじめ、様々な方々からのご協力を頂きました。この場を借りてお礼申し上げます。

カーシミュレータでゼロから学ぶ,自動運転

$
0
0

こんにちは!吉田です.東北大学で博士学生をしています.

このたび,Preferred Networks(PFN)で4月・5月と春インターンに参加させていただきました.

インターンでは,Deep Deterministic Policy Gradientと呼ばれる強化学習の手法を用いて,TORCSというレースゲーム内で自動車に自動運転を自分で1から学習させるという内容に取り組みました.

これは私が以前 Chainer を使って Deep Q-Network (DQN) と呼ばれる深層強化学習を再現した経験があり,またインターンでも強化学習に関連したタスクをしたいという希望をマッチングした結果で,個人的にも大変興味をもって取り組めたと思います.

TORCS(The Open Racing Car Simulator)はオープンソースのドライビングシミュレータとして公開されていて,近年の強化学習ではこのシミュレータ内での自動運転をタスクとした研究がいくつかされています.今回の強化学習では車のハンドル操作を出力とする,DQNとは異なり連続値の出力を扱う強化学習問題となっています.この問題を扱うため,先に紹介したDDPGと呼ばれる手法を用いることにしました.DDPGやその他,技術的な内容に関する説明は,Slideshareで公開しているPFIセミナーでの最終発表スライドでご確認ください↓


 

 

実は実験にはさまざまな困難があり,残念ながら今回のインターン期間中では画像入力だけから自動運転を学習させるというところまでは到達できなかったのが悔いの残るところです.しかしながら,今回のインターンシップを通してメンターの方々の他,様々な人とお話する機会があり,私にとってこれまでとは異なる,たくさんのフレッシュな経験を積むことができたと思います.

なお,今回のインターンプロジェクトで作成・使用したTORCS環境で強化学習を行うためのpythonコード 「gym_torcs」をgithubにて公開しています.我こそはという方は是非,自動運転 from-scratch を強化学習でトライしてみてください!

夏季インターンのコーディング課題を公開します

$
0
0

PFNの大野です。暑くなってきましたね。

PFI/PFNでは毎年8, 9月にインターンシップを実施しています。2ヶ月間と日本で行われるインターンシップの中では比較的長期間のプログラムですが、毎年多くの方にご参加いただいています。我々自身、インターンで来ていただく方から多くの事を勉強することができ、最も力を入れているイベントの1つです。今回は本社を大手町に移転してから初めてのインターンシップです。今年は例年以上の応募をいただき、過去最大規模でのインターンシップとなりそうです。

さて、インターンシップの選考では、応募者の方々にコーディング課題を解いていただいています。このコーディング課題は情報科学の基礎知識・プログラミング能力・問題解決能力を測ることを目的としており、毎年担当者が趣向を凝らした問題を作成しています。例年、どのような問題がコーディング課題として出題されるのか問い合わせをいただいておりましたが、公平性の観点からお答えできることが限られておりました。

そこで今回、過去のインターンの選考で出題したコーディング課題を公開することにいたしました。PFI/PFNのインターンに興味のある方はぜひ参考にしていただければと思います。改めて見ますと、我々の会社が得意としているアルゴリズムとデータ構造・文字列処理・画像処理・機械学習などのテーマでの出題が多かったようです。これらの分野を勉強・研究する方にとっても良い練習問題になるのではないかと思います。

  • 2011年(テーマ:文字列処理・回文)問題文
  • 2012年(テーマ:文字列処理・一般化しりとり)問題文
  • 2013年(テーマ:グラフ・探索アルゴリズム)問題文
  • 2014年(テーマ:画像処理・テンプレートマッチング)問題文
  • 2015年(テーマ:機械学習・前処理・教師あり学習)問題文
  • 2016年(テーマ:深層学習・AutoEncoder・ハイパーパラメータの決定)問題文
Viewing all 45 articles
Browse latest View live