Quantcast
Channel: 機械学習 – Preferred Research
Viewing all 20 articles
Browse latest View live

Group Lassoでグループごと重みが0に潰れる理由

$
0
0

海野です。
先日会社の論文読み会で、ICML2014のMaking the Most of Bag of Words: Sentence Regularization with Alternating Direction Method of Multipliersという論文を紹介しました。さて、この時話題になったのが正則化項をグループ化すると何でグループごと重みが0に潰れるのかという話でした。式を見ても直感的にはわからなかったのですが、得居さんがとてもわかり易い説明をしてくれました。この話、日本語で検索してもあまり出てこないのでちょっと紹介します。

まず、Lassoというのは、正則化項にL1normを使ったいわゆるL1正則化のことで、大部分の重みが0に潰れて疎な解が得られます。

\(\Omega_{\mathrm{lasso}}(\mathbf{w}) = \|\mathbf{w}\|_1 = \sum_i |w_i|\)

この進化形として、Group Lassoという手法があります。Group Lassoでは、重みベクトルの次元をグループ分けして、各グループごとのL2norm(L1じゃないよ)の総和を正則化項として使います。具体的な式は以下のとおりです。

\(\Omega_{\mathrm{glas}}(\mathbf{w}) = \sum_g \|\mathbf{w}_g\|_2\)

ここで、gは特徴次元をグループ分けした時の、各グループを示します。Group Lassoを使うと、重みが潰れるときはグループ内の重みがいっぺんに潰れやすくなります。こうすることで、事前に類似の傾向がありそうな特徴の情報をいれこむことができます。ところで何でいっぺんに潰れるのでしょう。式を見ても直感的にわかりません。等高線を使った図で説明します。

その前に、LassoつまりL1正則化で重みが0に潰れやすい理由の復習です。入力次元が2次元として等高線を使った説明をします。入力が2次元の時、正則化項が同じ値になる領域(等高線)は原点を中心とする菱形になります(下図の黒線)。さて、一方の損失関数は何かしらの凸な関数ですので、等高線は丸っぽい形になります(下図の色線)。幅は外に行くにつれて狭まっていきます。この2つの和が最小の点を探すわけです。

lasso

ここで、最適点の時の正則化項の値が仮にわかっていたとして、それが図の菱型上のどこかだとします(もちろんこういう風に最適化するわけではないですが)。この時、最適点はどこでしょう? ここで、損失関数の等高線を見てみます。損失関数の値もなるべく小さいほうがいいので、菱型と交わる等高線の内、最も内側の等高線が最適です。内側の等高線から外側に見ていって、一番最初に菱型と接する等高線を探せば良いわけです。

ではどんな点で接しやすいのでしょうか。ここで大事なのは、正則化項は菱型をしている、つまり尖っているのです。丸い損失関数の等高線を大きくしていくと、正則化項の尖っている点と接しやすいのはイメージでわかりますね。そして、尖っている点はどんなところかというと、いずれかの次元が0になっている点です。そのため重みが0に潰れやすくなります。大事なのは尖っている点が最適点になりやすいという性質です。

長くなりましたが、ここまでが前置きです。ではGroup Lassoの正則化項の等高線はどうなっているでしょう。下の図は、\(\sqrt{x^2 + y^2} + \sqrt{z^2}=C\)の図です。入力は3次元です。

grouplasso

xとyが同一グループになっています。この時、3次元空間中で等高線(面?)は円錐を2つたしたような形になっています。先の菱型ではなくて、円推になるのはz=0の平面上で、\(\sqrt{x^2 + y^2}=C\)の円ができるというイメージです。ここが単なるLassoの場合は、円ではなくてやはり菱形になることに注意して下さい。

では、どんな点で最適点になりやすいか。もうわかったと思いますが、尖っている部分です。つまり、円錐の先と、円錐の縁の部分です。これはそれぞれ、前者がx=y=0の、後者がz=0に対応しており、各グループの値が全部0になっていることと対応しています。1つのグループ以外が全部0になっているとすると、正則化項は残りの次元で形成される球の式になります。これが円錐の縁に対応しているわけです。このとき、同一グループ内ではなめらかなため、グループ内のどれか一つだけが0になるということは起きにくいのです。さきの図の場合、z=0の平面中で円(xとyの2次元なので)になっているため、xかyだけが0になるということは起こりづらく、0になる時はみんな一緒に0になるわけです。

さらに、論文にあるようなグループに重複があるときはどうなるでしょう。下の図は\(\sqrt{x^2+y^2} + \sqrt{y^2+z^2} = C\)のグラフです。このとき、座布団のような形をしています。このとき尖っているのは、第1グループが全部0のx=y=0のときと、第2グループが全部0のy=z=0のときです。

group_lasso2

ちなみに、同様に入力が3次元のとき、Lassoは多次元菱型(?)になります。これは先の円錐2つに比べるとより尖っていて、そのため各頂点に最適解がみつかりやすいという風に振る舞うわけですね。各頂点は1つの次元以外は全部0というわけですから、独立にそれぞれの重みベクトルの値が0になりやすいということです。

3dlasso

最後に、このグラフ簡単にプロットできないかなぁと思ったらMacにはGrapherというツールがデフォルトでついていました。方程式を入れたらあっさりプロットしてくれました。Macスゴイ。


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
四角い小さな障害物がランダムに存在していた環境で学習したら、丸い大きな障害物が突然現れる環境にも汎化して適応することが出来る。

機械学習の経済学:クラウドはIoTの夢を見るか

$
0
0

比戸です。夏の思い出、もう作りましたか?

今回はPreferred Networksのポジショントークをします。と言っても、ディープラーニングではなく、Internet of Thingsのほうです。

前回IoT関連のブログ「のび太とインターネット・オブ・シングス」を書いてから1年半弱、枯れたバズワードどころか、IoTはあらゆる業界を巻き込んだムーブメントになりつつあります。ちょうど昨日発表された、ガートナーの2015年度版ハイプサイクルでも、去年に続きハイプカーブの頂点に位置付けられていました。

IoTではコネクションとデバイスの管理、プロトコルの互換性、セキュリティについての議論が盛んですが、それは脇において、我々はいつも通りデータ解析の話をしたいと思います。 興味は「クラウドコンピューティングはIoT向けデータ解析でも唯一の主役となるのか?」です。 結論はずばり「そんなにうまくはいかないよ、特にインダストリアルな、機械学習頼みの応用ではね。」です(ほら、ポジショントークっぽくなってきた)。

最近クラウドで提供されているデータ分析プラットホームのほとんどが、競うようにしてIoT対応を打ち出し、「IoTも我が社のクラウドサービスにお任せ」と謳うようになりました。一方で、IoT機器から発生するセンサーデータからタイムリーに有益な知見を見出すためには機械学習を中心とした高度な解析技術が不可欠、ということも言われています。この2つを合わせると、IoTにおいて機械学習を適用するユースケースにはクラウドが最適、と言えそうです。昨日出た日経コンピュータの特集も、全くの偶然ですが、「クラウドAIが変える世界」でした。

しかし、本当にクラウドだけで問題が解決するのか、それをコスト対効果の面から検証したいと思います。タイトルに経済学といれたのは大げさかもしれませんが、試算してみましょう。

対象とするのは、機械学習を用いたリアルタイム異常検知です。遠隔モニタリング系の応用はほぼ異常検知に属し、IoT応用の中でも花形と言える問題設定です。単純な状況として、すでに学習済みモデルが読み込まれているクラウド上の機械学習エンジンに、現在のセンサーの値の集合をクエリとして送り、異常か否かを判断するユースケースを扱ってみましょう。リアルタイムと銘打っているので、車やカメラなどIoT機器1台につき、1秒間3回のクエリが発生すると仮定します。往復のネットワーク遅延と機械学習の判定処理のオーバーヘッドが加わるので、クエリが送信されてから機器側で結果を得てアクションを行えるまでの所要時間は1.0秒ほどとします。これは異常検知の結果とそれにもとづくアクションが人命に関わるなど、シビアなケースでもぎりぎり許容できるかどうか、くらいの頻度・遅延でしょう。

ではコストを計算します。簡単のために、利用するネットワークは必要なスループットで安定したレイテンシが保証されていて、そのコストは除外されるとします。純粋に機械学習クエリのコストだけを計算するということです。参考にするのは泣く子も黙るAWSのAmazon Machine Learning です。現在のところロジスティック回帰モデルのみがサポートされていますが、簡単のために異常検知もそれで二値判別問題として解くとします。リアルタイム予測(Real-Time Predictions)の値段は1クエリで$0.0001です(2015年8月現在。Azure Machine Learningは5倍の$0.0005)。

「1万クエリ打ってもたった$1、120円ちょっとか、良心的だな、さすがAWS」と直感的に思われる方が多いかもしれません。しかし本当にそうでしょうか。

先ほどの設定では1秒3クエリですので、1分180クエリ、1時間10,800クエリになります。1時間で約$1かかります。すると1日$24、1ヶ月30日で$720、1年365日で$8,760。日本円に換算すると現在の為替レートで100万円を超えています。端末1台あたりのリアルタイム機械学習のコストが、年間で100万円かかってしまうというのは、驚くべきことです。

先ほど仮定したようにこれは純粋に機械学習クエリの値段です。 実際にクラウドで実行しようとすれば、そこまでのネットワークのコストや、インスタンス、ストレージ等などの値段もかかります。 また、画像認識など求められるスループットが大きく処理も複雑なタスクになれば、さらにコストは上がることでしょう。 これでは数千万円の高級車のリアルタイム故障モニタリングにだって、クラウド機械学習のコストを本体価格やサービス価格として付加することはできません。ましてや、端末価格が1台数千円や数百円というIoT機器に対して運用コストが100万円などありえないことです。

なんだか騙されたような気分の方もいらっしゃるのではないでしょうか。 ではいくつか考えられる想定質問について検証してみましょう。

「もっとクエリ数を減らしてもいいのではないか」
ビッグデータの問題を一部データのサンプリングで解く文脈で言えば正しそうに思えますが、異常検知ではクエリ数を減らすとそのままリアルタイム性が犠牲となってしまう問題があります。例えば1秒に3回を1分に3回にすると、異常はいつ発生するかわからないので、タイミングが悪いと検知まで20秒かかってしまいます。また、コスト削減効果は60分の1ですので、まだ1万円以上のコストはかかることになります。

「そもそもそんなリアルタイム性は必要なのではないか」
たしかに、IoTの機械学習応用が全て秒単位のレスポンスを必要としているわけではありません。これまでのビッグデータ応用と同様、蓄積したデータに対するバッチ機械学習を用いるべきケースも存在します。ただ、特にインダストリアルなIoT応用として、車の事故防止、産業機械の故障予兆検知、ネットワーク機器の攻撃検知、防犯カメラからの異変発見など、多くの重要なアプリケーションでリアルタイム性が必須となっています。ネットワークのスループットはどんどん向上していますが、レイテンシの短縮は物理的な制約などがあり、ミリ秒単位でクラウドとの間でやりとりするのも難しく、これも課題と言えます。

「クラウドだからそのうち劇的に値段が下がるはずではないか」
これまでクラウドの利用価格はどんどん下がってきたのは事実です。今でもAmazonとMicrosoft Azure、Google Compute Engineが競うようにして値下げを行っています。ただし、それは主にストレージの容量単価の低減によって実現してきたものです。それらストレージにデータが蓄積されている一方、CPUは待機、メモリは空の状態で、集計・分析クエリを受け付けてからストレージを読みに行くという典型的なクラウド上のデータ処理では、ストレージネックだったため、値段が下げられたということです。しかしながら、機械学習でリアルタイム応答を可能にするためには、学習済みモデルをメモリ上に展開しておく必要があります。つまりメモリネックなのですが、その値段がここ数年という期間でもほとんど下落していないのはみなさんご存知かと思います。Amazon Machine Learningにしても、このメモリのコストは機械学習APIの使用料に転嫁するしかありません。大容量・低遅延な次世代メモリのコストが今のDRAMを下回るようになれば不連続な変化が起きる可能性はありますが、今後数年という単位では、クラウドとはいえこのメモリに関係するコストが劇的に下がる見込みは少ないでしょう。

「モデルの構築はクラウド側でやって、学習済みモデルを端末側に送ればいいのでは」
そのとおりだと思います。ただ問題はリアルタイムの予測クエリはそちらで処理することを考えても、一般的な組み込み機器やIoTゲートウェイ等には機械学習を実現するだけのプロセッサ能力・メモリが無いことが多いことです。この点は、ARMプロセッサ、FPGAを代表とする、組み込みに近いIoT機器の性能向上とコストダウンが今後どれだけ進むかにかかっています。が、見通しに関する意見は別れるところかもしれません。個人的には、この部分にホワイトスペースがあるのではないかと考えています。

「異常検知以外はクラウドでもいいのでは」
もちろん分類などの設定もあります。蓄積されたデータにおいてバッチ学習を行えば良い分類やレコメンドの応用は、IoTのデータさえクラウド側に収集/蓄積できれば、解析については特に新しい仕組みは必要ない(応用先がIoTであることとは関係ない)ので、これまで通り既存のビッグデータ基盤が使えるのは間違いありません。ただし、生データをそのままクラウドに送ると膨大になりすぎるため、単価が下がったとはいえ得られるメリットのわりにストレージコストがかかりすぎるという問題があります。そのような場合でも、もし上記のようにIoT機器側で機械学習モデルをストリーム的に適用して、元データではなくその結果のみをクラウドに送ることで代替できるなら、ネットワークとストレージのコストを大幅に削減することができます。

(追記)「クラウド/オンプレで自前の機械学習エンジンを動かせば良いのではないか」
単一機械学習モデル、単一IoT機器だけを扱っていればいいのであればそれで済みそうですが、ビジネスにするには数千台の機器に対して複数のモデルを切り替えながら適用するような必要があり、導入・管理コストもかかります。また異常検知は特に、複数予測対象への同一モデルの使い回しが聞きづらいタスクです。いずれにせよメモリを常時確保すべき処理をネットワークの向こう側に置いておかなければならないのは変わりません。それをAmazonが代行して効率的にリソースを使っているはずのサービスよりも大幅に価格を下げるのは難しいと考えられます。自前でRedShiftやBigQueryのクエリ単価を下回るのが難しいのと同じ理屈です。

いかがだったでしょうか。クラウドにデータを蓄積し、その統計的な分析の一環として、手動でバッチ学習・分類を行うようなケースであれば、クラウドはもちろん適していますし、これからも使われていくでしょう。 しかしもし目的がリアルタイム性を含む場合、あるいは映像など生データをクラウドに貯めるのにコストが掛かり過ぎる場合、とりあえずクラウドにデータを集める基盤を作って、それから機械学習など解析をどうするか考えましょう、ではどうにもならないということです。

ここからは完全に宣伝ですが、どうすれば端末側にインテリジェンスな機能をもたせたアーキテクチャが実現できるのか、それがエッジヘビーコンピューティングという弊社が3年前から提唱しているコンセプトです。その実現として、Deep Intelligence in-Motionというソフトウェア製品を開発しています。 まだ表には出てきていませんが、様々なIoTアプリケーションを支える基盤として業界を問わず使われるものを提供できればと考えています。

以上、ポジショントークでした。それではまた。


ICML2015読み会を開催しました

$
0
0

大野です。夏も終わりますね。

先日8月20日に、株式会社ドワンゴ様のセミナールームにて、ICML2015読み会を開催いたしました。

トップレベルの会議に投稿された論文を真正面から紹介する勉強会でしたので、どの位の方々が興味を持つのか不安がありましたが、幸いにも前回のNIPS2014読み会に引き続き、100名近くの方に参加していただきました。休憩時間も含めて多くのディスカッションや質問がなされていたようです。懇親会にも40名近くの方々が参加していただきました、懇親会では、発表もしていただいた神嶌さんによるKDDの参加報告も行われました。

また、今回初めての試みとして、当日の様子をドワンゴ研究開発チャンネルにて生放送配信しました。私の予想をはるかに超えて、のべ1000名弱の方が来場したようです。ご視聴いただきありがとうございました。配信に関する感想なども今後の参考にさせていただきます。

参加者、発表者、視聴者の皆様のご協力で充実した勉強会になったと考えております。ご参加いただきありがとうございました。また、会場提供及び生放送配信をしていただいたドワンゴ様には改めてお礼を申し上げます。今回の勉強会を踏まえて、今後も機械学習の勉強会を継続して開催していきたいと考えておりますので、ご賛同・ご協力いただけると大変ありがたいです。

アンケート結果

今回の参加者の方々には事前に簡単なアンケートを実施しました。以下はその集計結果です。

アンケート実施人数:173人(発表者・参加者・補欠者・参加キャンセル者)

Q1. 現在の所属で当てはまるものをお答えください

  • 大学(学生):33人
  • 大学(教員・研究員):4人
  • 民間企業(研究員・エンジニア):99人
  • 民間企業(その他):19人
  • 公的研究機関:3人
  • その他・無回答:15人

今回参加登録していただいた方の所属割合は、7割弱が民間企業所属、2割が大学所属という結果でした。また、民間企業所属の方の多くがエンジニア、もしくは研究員の方でした。機械学習が基礎的な研究だけではなく、その産業応用が進んでいることを示す一つの表れなのかもしれません。
また、学生の方にも多くご参加いただきました。今後の勉強・研究の一助になれば幸いです。

Q2. 機械学習について当てはまるものをお答えください

  • 専門分野である、もしくは専門分野に近い:75人
  • 勉強・研究をしたことがある:73人
  • 名前は聞いたことがあるが、内容は知らない:8人
  • 全く聞いたことがない:1人
  • 無回答:15人

機械学習の国際会議の勉強会ということで、8割以上の方が機械学習の勉強もしくは研究を行ったことがあり、そのうち半数の方が自分の専門分野に近いという結果となりました。

Q3. 機械学習のどのような側面に興味がありますか(複数回答)

  • 理論・アルゴリズム:129人
  • 実装・ソフトウェア:98人
  • 産業応用:69人
  • 他分野への応用:65人

最も多かったのは理論・アルゴリズムで、75%の方が興味を持っていると回答していました。また、ざっと結果詳細を眺めると、「理論・アルゴリズム」+αという回答が目立ちました。Q1.と見比べると、よく言われるような理論->大学、産業応用->民間企業という単純な分かれ方にはなっていないのかもしれません。
また、数としては最も少ないですが、4割弱の方が機械学習そのものの研究・応用だけではなく、他分野へ応用するかに興味を持っていると回答しました。

怪我をしても歩ける6足歩行ロボットの学習

$
0
0

こんにちは。コロンビア大学の久米です。7月からの2ヶ月間、ロボットと機械学習をテーマにインターンをしました。この記事は先日、ustreamで発表した内容のダイジェスト版となっています。

インターンでは、6本脚ロボットが脚を失ってもすぐに新しい歩き方を学習する方法の実装を行いました。具体的にいうと、Natureで2015年に発表された、Robots that can adapt like animals(PDF)の再現実験です。ロボットの組み立て、シミュレーション(事前学習)、手法の実装、実験をしました。

下の動画を御覧ください。6本脚ロボットは、6本の脚を使って歩行します。左側の動きが通常時の動き方です。歩行中、脚を一部失ってしまうこともありえます(下の写真)。そうすると右側の動画のように同じように脚を動かすだけでは、前向きに歩くことができなくなってしまいます。



今までの方法では、ロボットが脚を損失した状態で前進する歩き方を見つけるためには、事前に色々な状況に対して歩き方を設定しておくか、学習するとすればたくさんの時間がかかっていました(強化学習など)。
提案手法では、脚がなくなってしまっても数回から数十回程度の試行で前進する方法を発見することができます。下の方に結果を掲載していますが、実際に実験してみると、1本脚の先がなくなったり、2本の脚が動かなくなっても、5種類の歩き方を試しただけで前進の方法を発見しました。

手法のコンセプトは次のような感じです。
まずは、健康な状態の時に色々な歩き方を試しておきます(事前学習)。上手く前進できなくなった時には、事前に覚えていた歩き方の中からいくつか試して、良い方法を発見します(Adaption step)。

propose

事前学習

実際の歩き方は36個のパラメーターを指定して決定するので、歩き方は膨大に存在します。
色々な状況に対処するためには、ただ良い歩き方を記憶するだけではなく、色々な状況に対して良い歩き方を記憶する必要があります。論文では「各脚の着地時間」をその指標にし、パフォーマンスのマップを作成しています。つまり、各脚の着地時間という6次元の値に対して、着地時間も5通りに離散化して、各脚0%,25%,50%,75%,100%に分類し、合計で15625通りの状況を想定します。

下の図が、このマップを2次元に表したもので、脚1と2の着地時間によって、大きい四角形の場所が決まり(左下ほど着地時間が少ない)、3と4の着地時間によって、各大きい四角形の中の小さな四角形の場所を決定、5と6については小さい四角形の中の場所を決定します。
各脚の着地時間に応じて場所が決定し、そこにパフォーマンスとパラメーターを記憶していきます。

map

jizeng

事前学習のやり方
  • 一つの歩き方を試す
  • 歩き方の距離(パフォーマンス)と各脚の着地時間(状況)について計測する
  • その状況の距離が今まで記録されていなければマップに記録する。記録されていても、今回の方がパフォーマンスが良ければ記録を上書き、悪ければこの歩き方は捨てる
  • 今までに記録されている歩き方を少し変化させて歩き方を試す(上に戻る)

何千万回もの試行が必要なため、事前学習は実機ではなくシミュレーション上で行います。

事前学習の結果

シミュレーションは、Open Dynamics Engine(ODE)という物理シミュレーターを使って行いました。

私は実際に 5188万4543回のシミュレーションを行って、マップを作成していきました。
Amazon AWSを使って並列実行し、10日間位で学習しました。

params
この図は、横軸がシミュレーション回数で、縦軸がマップの中で埋まったマスの個数です。
仮に全部埋まったとしたら15625マスですが、新しいパラメーターを既存のパラメーターから作っていくことと、動きようがない部分(0,0,0,0,0,0)なども存在するので全部は埋まりません。
result1

これらが、マップの途中経過です。回数の下の数字は最大値と平均値です。図は、最終マップの最大値を1(赤)とした時のそれぞれのマスのパフォーマンスを示しています。初めの1000万回くらいで、マップのマスの数自体は増えなくなりますが、パフォーマンスは向上しているのがわかります。

Adaption step

mboa4
実際にロボットが壊れてしまった時には、マップの中から新しい歩き方を試します。
その時には、今歩いている方法はあまり良くないので、それに似た歩き方を避けて、かつパフォーマンスが高そうな歩き方を探していきます。

mboa3
(論文より引用)

初めは壊れたロボットでの歩き方については、実際には試していないため確信度は全て最低レベルで、パフォーマンスは事前学習の時の値です。
一度実際に歩くと、マップ上で既に観測された歩き方に近い歩き方は、確信度が高くなっていき、それと同時にパフォーマンスも観測された値に応じて更新されていきます。マップの更新にはBaysian optimizationを使います。

実験結果

最後に、実験結果の動画です。

動画の見方

脚(6個の数字): 動画の歩き方において各脚がマップの中のどこにいるかを示しています。
各脚0-4までの数字。(着地時間 0%:0 25%:1 50%:2 75%:3 100%:4)

パフォーマンス:計測した値

期待MAX:更新されたパフォーマンスマップでの最高値

パフォーマンスマップの1.0は事前学習での最高値(0.17)。
色々な歩き方を試すうちにマップがどんどん下方修正されていきます。

確信度は青ほど低く、実測されると赤色になっていきます。

最後の方にでてくる相対的パフォーマンスマップというのが、ロボットがその時に持っているパフォーマンスマップの最大値を1としたときのパフォーマンスマップです。





このように、わずか数回の試行で、前進方法を学習することができました!2つ目の実験のように、実際には1回目で良い歩き方を発見した場合でもまずは、もっと良い歩き方がないか探します。調べているうちに全体のパフォーマンスが更新されていって、期待されるパフォーマンスが下がってきて、一回目の歩き方が良い歩き方だということが発覚します。

事前学習のシミュレーションの精度はどうしても完璧というわけにもいかないのですが、それでもこのように成果がでました。
この手法を用いれば、状況が変わった時に、改めて学習をするのではなく、理想的な状況(シミュレーション)にたいして学習を行えば、すぐに色々な状況に対処できるため、常に人間の監視下にいるわけではないロボットに対して応用できれば、突然の事故などに対応できると思います。

深層学習でバラ積みロボットの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等で告知しますので、お待ち下さい!

新入社員の丸山(宏)です

$
0
0

新入社員の丸山(宏)です。4/1に入社してから、一週間が経ちました。PFNにはもう一人先輩社員の丸山さんがいて、なのでもう先生ではないですが、「まるやませんせい」と社内で呼ばれたりもしています。

今回の転職は私にとっては3回めの転職になります。外資系のIBM、国内大手のキヤノン、それに政府の研究機関である統計数理研究所、それぞれに大きく環境や文化が違って、転職の度に「おおっ」と思うことがありました。PFNは4つ目の職場ですが、やはり大きく違います。なんと言っても、最大の違いは意思決定のスピードでしょう。私は入社時には「エグゼクティブ・フェロー」という肩書をいただいていましたが、翌週には「Chief Strategy Officerをやってください」、と言われてその場で肩書が変わりました。さらに、この一週間のうちに、どんどん会社の方針も変わっていくのを目の当たりにしました。大学共同利用機関法人(だいたい、国立大学と同じと思ってよいと思います)で新しいポジションを作ろうとすると、何ヶ月もかかったはずです。

PFNが現在注力している分野の一つは、製造業におけるイノベーションです。この分野は、ドイツでのIndustrie 4.0とか、米国を中心としたIndustrial Internetとか、かまびすしいです。その一方、すでに品質や生産性を極めている日本の製造業の中には、やや距離を置いて見ている方々もいるようです。製造業におけるIoTは一過性のブームなのでしょうか。それとも産業を変えていく大きな流れなのでしょうか。私がこの分野(とPFN)の可能性を感じるのは、2つの理由からです。

「製品」の価値から「製品による体験」の価値へ

1つは、「製品を作って顧客に販売する」という製造業のビジネスモデルが変化する兆しがあるからです。伝統的な製造業のビジネスモデルでは、顧客が製品から最大の価値を得るのは、たいていその製品を購入した直後です。その時には、とても欲しいと思った製品ですし、新品ですので、その製品はライフスパンの中で最大の性能を発揮しているはずです。使っているうちに、顧客の興味も変化していきますし、製品も劣化していきますので、だんだん顧客にとっての製品の価値は落ちて行くでしょう。しかし、価値の多くをソフトウェアに依存する製品ではこの限りではありません。電気自動車のテスラは、ソフトウェアのアップデートによって新しい機能が追加されたり、安全性が向上したりしています。もっと身近では、スマートフォンも、購入してからもソフトウェアの追加によって継続的に価値が向上していくタイプの製品と言えましょう。

そもそも、私たちが製品を購入するのはなぜでしょうか? その製品を通して何らかの価値ある経験をしたいからに違いありません。自動車でいうならば、その価値は移動すること、あるいは運転を楽しむことなどで表されることでしょう。だとすれば、「製品を購入する」というトランザクションももしかしたら必要ないかもしれません。最近では若者は自動車をあまり購入しないと聞きます。Uberや、TIMES24のカーシェアのように、共有経済の世界になれば、汎用のデバイスと、それをオンデマンドでカスタマイズして顧客に提供するサービスの組み合わせで、製品の価値が顧客にもたらされる世界が来るかもしれません。経済学者のジェレミー・リフキンは、その著書「限界費用ゼロ社会」の中で、IoTが真の共有化社会をもたらすのだ、ということを述べています。このような大きな変革を可能にする鍵が、IoT、すなわち情報技術なのです。

機械学習による組込み開発の半自動化

では、このようなIoTの世界をどのような技術で構築・運用していくのでしょうか。私がPFNの将来を信じるもう1つの理由は、機械学習の技術が今までのものづくりのやり方を根底から変える可能性を感じるからです。経済産業調査会「ものづくり白書」2013年版によれば、自動車のコスト構造に占めるエレクトロニクス・ソフトウェアの割合が2015年には40%にものぼるとされています。これら組込みシステムの開発の多くは現在、V字型開発モデルという、基本的にはウォーターフォール型の方式で行われます。この方式の主眼は、「作り始めてから要件の間違いが見つかるとコストが高いから、できるだけ上流できちんと考えて、後で手戻りが無いようにしよう」という考え方です。要求定義通りに正しい物を作る、という意味では、とても正しいやり方だといえます。この考え方の裏には「要求定義を厳密に定義さえすれば、それを詳細化してプログラミングすることが可能である」という本質的な仮説があります。製品が複雑化すると、ここが自明でないことがあります。

前回の自動運転のデモの記事をご覧になったでしょうか。このデモでは、要件は極めて明確です。「交差点でぶつからない車を作る」というものです。ただし、この要件を実装するうえで、V字型開発はまったくやっていないのです。要件は与えるが、その実装のやり方は、深層強化学習の仕組みが試行錯誤によって学んでいく、という方法論です。誤解を恐れずに言えば、組込み開発が自動化されているのです。これは素晴らしいことです。これからのものづくりの大きな部分を占めるソフトウェア開発が自動化されるのであれば、製造業にとってそれは大きな福音になるはずです。すべての組込み開発が機械学習に置き換わるわけではないでしょうが、これから、どんどん機械学習に基づくシステム開発が加速していくことは間違いないでしょう。

以上、2つの理由によって、今後製造業の産業構造そのものが大きく変わっていくのだと、私は信じています。その変化を、変化を起こす側から経験してみたい、それが私がPFNに来た主要な理由です。大きな夢を実現してみたいですね!

 

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

$
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・ハイパーパラメータの決定)問題文

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

$
0
0

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でのインターンシップやアルバイトに興味のある方は是非ご一報いただければと思います。

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

$
0
0

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

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

背景

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

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

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

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

本プロジェクト

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

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

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


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

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


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


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

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

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

結果

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

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


考察

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

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

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

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

まとめ

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

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

Emergence of Locomotion Behaviors in Rich Environment の追試

$
0
0

1.内容紹介

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

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

Emergence of Locomotion Behaviors in Rich Environmentsの元動画

2.元論文の概要

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

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

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

前提知識

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

 

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

Planar walker [4]

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

アルゴリズム

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

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

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

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

実験手法

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

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

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

4.結果

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

学習後歩いている動画

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

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

 

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

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

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

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

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

5.考察

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

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

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

 

失敗例の動画

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

6.PFNインターンの感想

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

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

参考文献

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

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

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

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

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

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

 

HCIグループの発足、UISTおよびISS 2018での論文発表・デモ実施のお知らせ

$
0
0

新たにHCI グループが発足しました

PFNでは最先端のAI技術を駆使して「インテリジェントな」次世代システムとサービスの実現を目指しています。しかし、システムの本質的な部分の開発や運用を担うのは依然として人間であるため、人間とマシンの対話を考える事は非常に重要です。ヒューマンコンピュータインタラクション(HCI)のアプローチは、人間とマシンの隔たりを埋め、機械学習においても人間の介入を要する複雑なプロセスの改善に大きく貢献します。この度PFNでは、「humans-in-the-loop(人間参加型)」の考えを採り入れながら、ユーザー中心のAI設計を推し進めるべく、新たにHCI専門のグループを立ち上げました。

HCIチームが探求する研究は大まかに以下の3分野です。

  • 機械学習のためのHCI: 機械学習には複雑で面倒なプロセスがあり、人間の関与が必要な部分がありますが、HCIの手法を利用する事でこれらの作業を容易にします(例えば、データ収集、ラベル付け、前処理、オーグメンテーション、ニューラルネットワークエンジニアリング、デプロイメントやマネージメントなど)
  • HCIのための機械学習: 深層学習を使って既存のインタラクション手法を強化したり、新たなインタラクション手法を実現します(例えば、高度なジェスチャー認識、行動認識、マルチモーダル入力、センサーフュージョン、身体的インタラクション、AIと人間のコラボレーション、インタラクティブなコンテンツを作成する生成モデルなど)
  • ヒューマンロボットインタラクション(HRI): 未来の賢いロボットとユーザーが、効果的かつ直感的に、さらには楽しくコミュニケーションやインタラクションできる事を目指します。

また、HCIグループの外部コンサルタントとして、HCIとHRI分野で豊富な経験をお持ちである東京大学の五十嵐健夫教授からアドバイスをいただく事になりました。五十嵐教授は、研究科学技術振興機構(JST)の戦略的創造研究推進事業(CREST)として、「機械学習のためのHCI」の研究にも取り組まれています。まさに私たちが注力する研究分野であり、今後の長期的な共同研究から実りある成果が生まれる事を大いに期待しています。

今年のUIST ISSで論文発表とデモを行います

HCIグループはまだ正式に立ち上げて間もないグループですが、すでに本格的な研究活動に着手し、直近の研究成果を二本の論文にまとめています。これらは今週開催されるUISTと来月開催のISSで個別に発表する予定です。

一つ目はウォータールー大学でDrini Cami氏とDan Vogel教授との共同研究ですが、タブレット画面に文字を書く際のスタイラスペンの握り方を変える事で様々な機能を呼び出すシステムです。本手法では機械学習を活用し、タッチ入力の生データにもとづいて、ユーザーの手が画面に触れた際の握り方を検知します。これにより、面倒で扱いにくいUIウィジットに頼らず、文字を書いている方の手でペンのモードを素早く変える事が可能です。詳しくは以下の動画をご覧ください。

UISTでは論文発表に加えてDrini Cami 氏が本手法のデモを行います。

二つ目の研究は、昨年12月のコミックマーケットに出展したPaintsChainerに用いたプロジェクションマッピングシステム(論文ではColourAIzeと呼んでいます)で、紙に描いた線画に自動で色を付けます。コミケに行けなかった方のために具体的に説明すると、PaintsChainerが自動的に判断した着色イメージを、線画に重ねるように投影して着色します。その結果、アナログとデジタルが融合した興味深い作品が出来上がります。Web版PaintsChainerと同様に、ヒントとなる色を指定してお好みの自動着色に仕上げる機能もサポートしており、任意の箇所をペンでなぞるだけで本機能が使用可能です。

最初にご紹介したペンの異なる持ち方の研究と同様、11月に東京で開催されるISSでは論文発表とデモの両方を行います。ご自身の線画やマンガにAIが自動着色する楽しい体験をしてみたい方は、カンファレンス期間中にぜひ私たちのデモにお越しください!

最後に、私たちは優秀なHCIリサーチャーを募集しています。前述の研究分野で貢献できる方は、弊社ウェブサイトの採用ページで募集要項をご確認いただき、ぜひご応募ください!お待ちしております。

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

$
0
0

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

 

 

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

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

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

Optuna とは?

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

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

Chainer との関係は?

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

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

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

なぜ Optuna を開発したのか?

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

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

Optuna の特徴

Define-by-Run スタイルの API

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

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

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

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

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

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

並列分散最適化

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

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

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

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

終わりに

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

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

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

Viewing all 20 articles
Browse latest View live