2016年夏季インターンシップ開催報告

大野 健太
エンジニア

2016-10-28 18:41:49

PFI・PFNでは今年8, 9月に夏季インターンとして14名の方に来て頂き、機械学習・深層学習に関する様々なプロジェクトに取り組みました。このブログエントリでは、PFI・PFNのインターンシッププログラムの概要と、今年のインターンシップ、特に最終成果発表会についてを紹介します(写真は中間発表のポスター発表の様子です)。

2016%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%b3%e4%b8%ad%e9%96%93%e7%99%ba%e8%a1%a8

PFI・PFNのインターンプログラムについて

PFI, PFNでは、2010年からインターンシップを実施しています(PFNは2015年から)。夏季のインターンシップは毎年行っており、また毎年ではありませんが、春季にもインターンを実施しています。PFI・PFNのインターンシップの特徴として、8, 9月の2ヶ月間と比較的長期であること、インターンで行うプロジェクトのテーマに精通している社員がメンターにつき一緒にプロジェクトを進めていくこと(大抵の場合1人の学生に対してメンター2人)、インターン中の成果は論文やOSSなどの形で可能な範囲で公開できることなどが挙げられます。

準備に関しても4月から募集要項の作成を進めており、春季インターンも含めると、1年のうち半分以上はインターンに関して何らかのプロジェクトが動いていることになります。PFI・PFNがここまでインターンシップに力を入れている理由として、インターンを行った後に社員としてPFNに来ている方がメンバーとして活躍していること、社員の側もインターンで来ていただく学生の方々から最新の研究について学んでいること、インターンでのプロジェクトが学生の方の研究・学業にも直接的・間接的に役に立っているという自負があることなどが挙げられます。

選考は書類審査・コーディング審査・面接審査で実施しております(選考方法に関しては今後変更になる可能性は十分あります)。コーディング試験に関しては別のブログエントリにて、過去の選考で出題した課題を公開しておりますのでご参照ください。選考では、本人の興味・研究分野・得意な技術などを考慮し、指導できるメンターとの間でマッチングを行います。幸いなことに、PFI・PFNでのインターンを希望していただける方は多く、また、皆さん優秀な方が多いので、毎年選考には頭を悩ませています(そして、大体毎年想定以上の人数を採用してインターン期間中はてんやわんやになります)。今年の募集要項は過去のNewsをご参照ください。

今年の夏季インターンについて

PFNが事業を拡大し、人数面・設備面でキャパシティが増えたことで、今年の夏季インターンでは14人と例年以上に多くの方に参加していただきました(倍率としては例年と同等程度でした)。今年4月にオフィスを本郷三丁目から大手町に移転した時には空席がたくさんあると思っていたのですが、実際にインターンを開始したら、危うく席が足りなくなりそうになり、若干ヒヤヒヤしました。

インターンシップの募集する際に、大まかなテーマは設定していますが、具体的にどのようなテーマで行うかは採用後にインターン生とメンターとの間で議論を行い、プロジェクトの方向性を決めていきます。今年のテーマは以下の通りです。どのプロジェクトでも関しても異常検知・強化学習・深層生成モデルなどに関する最先端のテーマに取り組んでいただきました。

  • 対話における商品の営業
  • Automatically Fusing Functions on CuPy
  • Generation of 3D-avatar animation from latent representations
  • Response Summarizer: An Automatic Summarization System of Call Center Conversation
  • Imitation Learning for Autonomous Driving in TORCS
  • 3D Volumetric Data Generation with Generative Adversarial Networks
  • DQN with Differentiable Memory Architectures
  • Anomaly Detection by ADGM / LVAE
  • Multi-modal Deep Generative Model for Anomaly Detection
  • CNN based robotic grasping for randomly placed objects by human demonstration
  • Bayesian Dark Knowledge and Matrix Factorization

今年の新しい試みとして、中間発表・最終発表を従来の口頭発表形式から、ポスター形式に変更しました。また、最終発表は一般公開し、外部の方も参加していただけるようにしました。発表をポスター形式にしたことで、インターンの学生の方たちがPFI, PFN社員やお客さんと双方向の議論が出来たのはよかったのではないかと思います。最終発表会は当初2時間を予定していましたが、終了時間が過ぎても活発に議論が続いていました。最終発表会当日のポスターはリンク先のconnpassページにまとめておりますので、是非ご覧になってください(発表資料は順次追加していきます)。

今後のインターンシップに関して

PFNでは(私がPFN所属なのでこのような主語を置きます)来年以降も夏季インターンシップを実施する予定で、募集要項は4月頃に掲載する予定です。また、PFNでは、春季インターンなどの通年インターンシップやアルバイトも随時実施しております(通年でのインターンシップはまだ仕組みが整備されていないため、受け入れられる数が限定されていますが、HPへの募集要項の掲載などの準備を進めています)。PFI・PFNでのインターンシップやアルバイトに興味のある方は是非ご一報いただければと思います。

CEATEC2016に出展してきました 〜ロボット編〜

Taizan Yonetsuji

2016-10-20 16:03:19

PFNは2016年10月4-6日に千葉幕張メッセで開催されたCEATEC2016で、スマートピッキングロボットおよびバラ積みロボットの展示を行ってきました。ロボットの他にもドローンやDIMoに関する展示も一緒に行いました。こちらに関しては関連記事をご参照ください。

以下では、もう少し詳細な解説をしたいと思います。

続きを読む »

CEATEC2016に出展してきました 〜ドローン編〜

PreferredNetworks

2016-10-17 15:58:17

PFNは2016年10月4-6日に千葉幕張メッセで開催されたCEATEC2016で、深層強化学習に基づくドローン(マルチコプター)の自律飛行に関する展示を行ってきました。ドローンの他にもロボットやDIMoに関する展示も一緒に行いました。こちらに関しては関連記事をご参照ください。

ドローンスペースでは実機による自律飛行を披露しただけではなく、説明用のデモ動画を作って上映しました。以下がその動画となります。

 

以下では、この動画よりも少し踏み込んだ内容について知りたい方向けに解説したいと思います。

続きを読む »

Amazon Picking Challenge 2016 ~ドイツ・ライプチヒにて~

神谷保徳

2016-09-02 16:25:17

神谷です。

7月上旬、ドイツ・ライプチヒで開催されたAmazon Picking Challenge(以降APC)に、PFNとして参加しました。これは、Amazonが主催しているロボット競技会で、Amazonの倉庫内に在庫された商品から、購入された商品を棚から集めるタスクの自動化を想定した競技です。今回で2回目で、前回からのタスクである、指定された商品を棚からロボットで取得しカゴに入れるPickタスクと、新しく加わった、カゴに入っている商品を棚に入れるStowタスクの、二つのタスクがあります。Pickタスクは、前回から商品の種類や難易度も上昇しています。

実際に我々が作り上げたシステムの技術内容に関しては、PFI&PFNセミナーで概要ではありますが既に発表しており[1][2]、また日経Roboticsに弊社システムの解説記事や弊社岡野原のコラム、APC全体の技術解説も載る予定ですので、今回はドイツ・ライプチヒにおいて、実際に我々がどんなことを行っていたか、旅行記風に紹介しようと思います。


6/28、お昼頃、会場入りしました。スーツケースをたくさん持っているのは、手持ちのロボット部材や、工具があるためです。ぎりぎりまで開発を行っていたため、手持ちとなった物が多くあります。
DSC01675

輸送されたロボットアーム達。実は、輸送に時間がかかるため、本番用ロボットアームは先に送り、直前までの開発には別のロボットを使用していました。それにまつわる様々なトラブル回避もありました。そうまでしたのは、それだけ短期間での開発だったためでもあります。
DSC01691

箱開け。きれいに、きっちりと梱包されています。ぎりぎりまでの輸送タイミング交渉、また税関など、この輸送自体に関してもかなりの問題解決/回避が行われました。
DSC01701
DSC01699

設置の様子。設置に関しても準備を凝らしていましたが、それでも電圧の違いによるトラブルが少しありました。ロジスティクスの方と協力し、短時間で完了しました。
DSC01707

本番前々日
設置後、調整と改良が続きました。
本番前の調整では、奇跡的に隣にあった、ホームセンターが大活躍しました。例えば、照明条件の違いから、ライトを購入したり。ロボット競技では、現地でのイレギュラーがつきものです。
DSC01840

本番前日
調整と改良を続けます。
DSC01847

また、Amazon.deの見学にも行きました。
DSC01775

試走のスケジュール表。試走では本気を出していない(動作の確認に徹している)チームもあり、まだまだ分かりません。
DSC01789

本番直前。ぎりぎりまで改良を行いました。
DSC01999

そして本番。オレンジのTシャツの人が、Amazonの委員の人です。ターゲットのアイテムと、棚内のアイテムの配置は数パターンあり、くじで選択する形です。委員の人がアイテムを慎重に配置していました。また、棚のずらしも、配置前に行われます。
DSC02006

本番中。ハラハラドキドキ。本番のロボットの動作の様子はYouTubeに上がっています[3]。
DSC02007

終わりました。幾つかミスはありましたが、満足のいく動作でした。
DSC02009

そして表彰式
DSC02015

表彰式後の一コマ
DSC02018

その夜のパーティ。みんな笑顔。
他のチームの方やAmazonの方ともいろいろなお話をしました。
DSC02026

次の日はデモです。試合までは調整であまり見られなかった他チームのシステムについて、拝見、質問をしました。我々が開発中に気付かなかったアイディアも幾つかありました。また、我々のシステムについてもいくつも質問を受けました。
DSC02036

お片付け。ロボット達はまたPFNに戻ってきます。おつかれさまです。
DSC02038



この数か月間、非常に大変でしたが、結果も伴い、とても良い形となりました。
DSC02011

—————————————————————————
[1]http://www.slideshare.net/pfi/amazon-picking-challenge
[2]https://www.youtube.com/watch?v=gqcO8ZX0jB8
[3]https://www.youtube.com/watch?v=w7NgejZMSsA

GPUの祭典・GTC2016に参加しました

hido
Chief Research Officer

2016-04-27 08:13:33

比戸です。4月4日から開かれていた世界最大のGPUイベント、NVIDIAのGPU Technology Conference (GTC) 2016に参加しました。

続きを読む »

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

自動運転チーム

2016-01-21 10:14:40

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

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

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

続きを読む »

Chainer Meetup #01 を開催しました

Hideto Masuoka

2016-01-04 15:03:39

あけましておめでとうございます!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等で告知しますので、お待ち下さい!

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

mattya

2015-12-07 18:48:07

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

こんにちは、松元です。今回は、国際ロボット展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公式サイトより引用)

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

・ビジョンセンサ
箱の上方に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 #0 を開催しました。

Hideto Masuoka

2015-10-19 13:57:49

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

 

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

mattya

2015-06-10 16:50:33

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

“分散深層強化学習”の技術デモを作成し、公開いたしました。ロボットカーが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
四角い小さな障害物がランダムに存在していた環境で学習したら、丸い大きな障害物が突然現れる環境にも汎化して適応することが出来る。

123