視覚からの触覚特性の推定 (ICRA2019 Best Conference Paper Award Finalist)

Kuniyuki Takahashi

2019-09-30 09:49:25

リサーチャーの高橋城志(Takahashi Kuniyuki)です.

2019年5月にロボティクス分野のトップ会議であるICRA2019が開催されました.そこに投稿された約2900件の論文から3件だけ選ばれるBest Conference Paper Award Finalistを受賞しました.この論文はリサーチャーのJethro Tanと執筆したもので,その紹介をします.論文,動画,データセットは下記から閲覧できます.

論文タイトル:Deep visuo-tactile learning: Estimation of Tactile Properties from Images

論文のリンク:https://arxiv.org/abs/1803.03435

データセット:https://github.com/pfnet-research/Deep_visuo-tactile_learning_ICRA2019

論文の動画:https://www.youtube.com/watch?v=ys0QtKVVlOQ&feature=youtu.be

視覚からの触覚特性の推定

 Fig. 1に物体の写真を何枚か載せています.人は物体の表面を触ることで,柔らかさや粗さといった触覚特性を知覚することができます.また,画像だけから触覚の特性とその度合い(e.g. 柔らかさとその程度)を推定できます.この能力は物体操作や歩行方法などの判断に必要になります.例えば,柔らかそうなものは優しく把持を行い,滑りそうな床では気をつけて歩くなどです.

Fig. 1 視覚からの触覚特性の推定

関連研究

 これまでの方法では,触覚特性やその度合を手動でラベル付けする,教師あり学習がほとんどでした.しかし,この方法では手動でつけられたラベルの種類や粒度に結果が依存することになります(Fig. 1).特性の種類(e.g. 柔らかさ,滑らかさ,べたつき)やどの程度の粒度を用意するかは事前に決めなければならなず,手動でのラベル付けで想定していない未知の物体や粒度に対しては,既存のラベルに割り振られてしまうという課題があります.

Deep visuo-tactile learning

 そこで,手動でのラベル付けをせずに,教師なし学習で触覚の特徴を獲得する,deep visuo-tactile learningを提案します(Fig. 2).このモデルはエンコーダ・デコーダ型の深層学習の入力を画像情報,出力を触覚情報を用いており,潜在変数に触覚特性を獲得させます.出力は教師信号がある教師あり学習ですが,潜在変数には教師がないため,触覚特性の獲得に関しては教師なし学習です.

Fig. 2 Deep visuo-tactile learning

 このモデルの学習後,潜在変数に触覚特性が連続値として表現されることになります.そのため,度合いの粒度を事前に決める必要がありません.物体の触覚特性の推論には,対象となる物体の画像を入力するだけで物体の触覚特性である潜在変数が得られます(Fig. 3).つまり,触覚センサは学習にのみ必要で,学習後の推論には触覚センサを必要としません.触覚センサは高価で壊れやすいため,触覚センサを使わずに触覚の特性を推論できるという利点があります.さらに,シミュレーションでは接触状態を扱うのが困難で,触覚情報を扱うことは難しいですが,本手法ではシミュレーションでの画像から触覚情報の推定も可能となります.

Fig. 3 学習後のDeep visuo-tactile learning

データセットの作成

モデルの評価のため,25種類の物体を用いて,新たなデータセットを作成しました(Fig. 4).このデータセットは公開していて,自由に使用できます.
https://github.com/pfnet-research/Deep_visuo-tactile_learning_ICRA2019
実験には,Sawyerと呼ばれる7自由度の腕を持ったロボット,及び,その手先にウェブカメラとuSkinと呼ばれる触覚センサを取り付けたものを使用しました.uSkinは16点のそれぞれのセルで圧力方向とせん断方向の力を取得できます.ロボットは物体表面をなぞる動作を行い,そのときの画像と触覚センサのデータを取得します.実際に取得した時系列における触覚センサの各セルの圧力方向とせん断方向の力のグラフをFig. 4に示します.

Fig. 4 データセット作成

評価実験:潜在変数の可視化

 作成したデータセットを学習させて,触覚センサの特性が表現されている潜在変数を可視化したものをFig. 5に示しています.図中の赤色の星は学習に使用した物体で,青色は学習に使用していない未知物体です.取得した触覚センサの値から,物体の摩擦が大きいほど緑色の円の色が濃くなるように描画しています.Fig. 5から布でない物体はLatent varialbe 1の軸の低い値にプロットされる一方,布の物体は高い値でプロットされていることが分かります.これは,触覚センサの表面を布で覆っていたため,触覚センサ表面の布と布の物体との摩擦が大きくなったためだと考えられます.このことから,潜在変数には摩擦情報が表現されていることが示されました.

Fig. 5 摩擦を表現したLatent Variable

 Fig. 5と同じ方法で,センサ情報から硬くて粗い物体ほど円の緑色が濃くなるように描画したものをFig. 6に示しています.図から硬くて粗い物体であるほど,Latent variable 2の軸において小さな値にプロットされていることが分かります.例えば,カーペットは硬くて粗いですが,バスタオルは柔らかくて滑らかと認識されています.また,色のみ異なる物体や似ている物体は近い位置でプロットされていることが分かります.このことから潜在変数に触覚の特性として柔らかさと硬さが表現されていることが示されました.

 本手法の性能限界を調べるため,紙に印刷された畳の画像から触覚特性を推論させました.その結果,印刷された畳は硬くて粗い物体と認識されていますが,本来推定するべきものは紙であるため,実際の特徴とは異なります.今回の手法では入力としては画像のみを使ったために生じた問題です.深さ情報まで含めた入力にすることで,物体表面の形状情報が取得できるようになるため,このような問題を解決できると考えています.

Fig. 6柔らかさと粗さを表現したLatent Variable

まとめ

画像からの触覚特性とその度合を推定するために,教師なし学習であるdeep visuo-tactile learningを提案しました.この研究の新規性は,教師なしで潜在変数に触覚特性を表現したこと,及び,画像と触覚情報を含んだ新たなデータセットを作成したことです.今後の展望として,推定した触覚特性を元にロボットに把持や歩行などの行動をさせることです.

化学反応におけるDeep learningの適用

Kosuke Nakago

2019-09-06 10:57:59

近年様々な分野に対してDeep learningの応用が研究されてきています。

化学の分野でも物性値の予測モデルや、化合物の生成モデルの研究などが盛んになってきています。最近では、有機化合物の合成を行う際に必要な化学反応の予測をDeep learningで行うという試みが行われてきているのでその先行研究サーベイをしました。

サーベイ資料はこちらのSlideshareにアップロードしています。

合成経路探索 -論文まとめ- (PFN中郷孝祐) from Preferred Networks

 

問題設定:反応予測および逆合成経路探索

化学反応で、反応物 (reactant) AとBを触媒 (reagent) Cの下で反応させたときに 生成物 (product) D ができたようなプロセスは Reaction SMILES を用いると “A.B.C>>D” というように表すことができます。

 

 

ここで、 AとBとC から何ができるか? (答えはD)を予測する問題を順方向の反応予測問題と呼び、Dを作るためには何を用いればよいか? (答えはA, B, C)を予測する問題を逆方向と呼ぶことにします。

一般的に、A, B, Cを与えた時に順方向でどういった反応が起こるかは限定されていますが、ある生成物 Dを作る方法は複数可能性がある場合があり、逆方向の解析の方が難しい問題です。

例えば創薬など、目的の性質を持つある有機化合物が先に決まっていて、それを工業的に合成するためにどういった反応物を用いればいいか知りたい場合は、逆合成解析 (retrosynthetic analysis)・逆合成経路探索が必要となります。

機械学習で予測モデルを作る際、順方向の予測問題は実際にデータセットにある反応で生成物が当てられたかどうかの精度で評価することができますが、逆方向の予測問題はデータセットにはないが現実で起こりうる反応物の組み合わせに分解することもできるため評価も難しいです。今回読んだ論文では、既に知られている化合物の合成プロセスを見つけることができたかどうか?で、逆合成経路の性能評価を行っていました。

 

研究動向

従来は、機械学習を用いるのではなく、反応パターンを事前に人が定義しておいて、そのパターンに当てはまるかどうかをルールベースで計算することで反応の予測計算をしていました。しかし、この方法では以下の問題があります

・反応パターンとして事前定義したパターンの適用しかできず、複数パターンにマッチした場合の優先度決めが難しい(精度面)

・パターンのマッチにはグラフのサブグラフマッチングが必要で計算が重い(速度面)

 

そこでデータドリブンで反応を扱う取り組み、特に深層学習を用いるアプローチが考えられ始めました。

2016年頃は合成ルール等をある程度制限し、限定された合成ルールに対して機械学習を適用するといったアプローチが主でした。(上図、一番左側)

これまではそもそも研究用途に使えるデータが整備されておらず、一部の研究機関のみがClosedで研究しているような状況でしたが、最近 アメリカのパテントから化学反応を集めて整備した、USPTOデータセットが公開され、順方向の反応予測に適用されました。

データセットが公開された2017年頃から一気に、Deep learningの適用により順方向の予測精度をあげる研究が盛んになってきました。(上図、真ん中・右側)

現在、2通りのアプローチが競争している状況です。

1.分子をグラフとみなして Graph Convolutionモデルを用いるアプローチ

2.分子をSMILES記法の文字列で表現してNLPの分野で発展した自然言語処理モデル(seq2seq、Transformer)を用いるアプローチ

(それぞれ手法の詳細は割愛します、SlideShare でご覧ください。)

 

どちらのアプローチも高精度で反応を予測できるようになってきており、すでに化学研究者よりもきちんと反応を予測できるという報告もあります (下図は Jin et al. より)

 

現時点では MolecularTransformer という自然言語処理側のモデルがSoTAを達成しているようです。IBM RXNとしてWebサービスでも公開されています。

上記のように順方向の反応予測は精度が向上してきており、今後の課題・発展として逆方向経路探索への適用や合成可能性を考慮した生成モデルの研究などがあげられます。

 

さいごに

今回紹介したような領域では、反応・合成の知識(化学側)と研究スピードの速いDeep learningの最先端の知識(コンピュータ側)双方を深く理解する必要があり、画像などの領域と比べるとまだ参入者がそれほど多くない印象です。

しかし、徐々に論文や公開実装も出てきており、このような領域でもDeep learningの技術優位性がでるかどうかの研究はこれからどんどん盛んになっていくのではないかと感じています。

再計算でニューラルネット学習時のメモリ消費を減らす

楠本充
エンジニア

2019-09-04 11:40:25

エンジニアの楠本です。深層学習で再計算と呼ばれる手法を使って学習時のメモリ消費を削減する研究や実装に取り組んでいるのでその紹介をしたいと思います。

背景

大規模なニューラルネットの学習ではしばしば誤差逆伝播(以下同様)で GPU のメモリ不足に陥ることがあります。

通常、誤差逆伝播ではパラメータについての勾配を求める際に必要な順伝播の計算結果を (途中の計算結果も含めて) すべて覚えた状態で勾配計算を行います。

一方で、例えばコンピュータビジョンの重要なタスクであるセグメンテーションや物体検出では入力画像として高解像度のものがしばしば扱われます。モデルについても高精度を達成するために複雑なネットワーク設計、すなわち層が深くまた中間表現のチャンネル数の多いネットワークが使われることが少なくありません。

このように入力やモデルが巨大である場合には記憶しておくべき途中の計算結果全体が巨大になり、学習中のメモリ不足に繋がります。

GPU のメモリサイズはハードウェアの進歩で大きくなってはいるものの、大規模な学習には足りないことがあります。現状で商用販売されているGPUのメモリは最もハイエンドな Tesla V100でも最大 32 GB であり、大規模な学習ではメモリ不足を回避するためにバッチサイズをかなり小さい値にしなければいけないことがあります。バッチサイズを小さくすることは Batch Normalization で使われる統計情報推定を不正確にし、モデルの精度低下につながることが検出等のタスクで知られています[1]。

メモリ不足は深層学習の根幹的な問題であるため様々な解決方法が試されています。例えば半精度浮動小数点数 (FP16) やネットワークのサイズ削減などはその一例でしょう。しかしこれらは本来学習したいモデルに直接変更を加えることになるため、予測精度を悪化させることに繋がりえます。これから紹介する再計算と呼ばれる手法を使うとモデルの予測精度を変えることなくメモリを削減することができます。この場合、精度ではなく、学習時の計算時間が増えることを引き換えにします。

逆誤差伝播法の復習

ここで少し順番が前後しますが、ニューラルネットの学習方法である誤差逆伝播法について今一度復習します。

ニューラルネットワークは変数と計算の順序関係を示す計算グラフによって表現できます。この計算グラフをどう表現するかはいくつか流儀がありますが、ここでは計算グラフは変数を頂点とするグラフとします。これには入力変数、中間変数、出力変数を含みます。変数から変数の間には直接的な依存関係がある場合に枝が生えているものとします。

誤差逆伝播法は入力変数(モデルパラメータを含む)に対してその勾配を求めるための方法です。誤差逆伝播法の計算は多変数関数のチェインルールに基づいて計算されます。一般に勾配計算ではネットワークの出力を y として、それぞれの変数 z に対して勾配 ∂y/∂z を求めるのが目的です。これは∂y/∂y=1 から出発して再帰的に勾配を求めることができます。いま、z=f(x) のような関係があるときに ∂y/∂z を表すテンソルがわかっているとすると ∂y/∂x = ∂y/∂z ・ ∂z/∂x = ∂y/∂z ・ F(x) (ここで、F(x) := ∂f(x)/∂x とした) となるため、f に対してその勾配関数 F を事前に計算できる状態にしておけば勾配を計算できます。計算グラフの観点からすると、元の計算グラフ (順伝播部分と呼ぶことにします) から勾配の計算部分(逆伝播部分)を足していることになります。例えば3層のニューラルネットの順伝播部と逆伝播部は以下のような図になります (簡単のため、∂y/∂z を gz のように記しています) 。

再計算

計算グラフは勾配計算のための実行手順を与えてくれますが、これをそのまま実行すると順伝播部分での計算結果は逆伝播時に基本的にすべて必要となるため、単純に中間結果もすべて記憶しておくと、大規模学習ではメモリが足りなくなることがあります。しかしよく考えると順伝播ですべてを記憶せずに一部の中間結果を破棄したとしても、残りの中間結果からもう一度順方向に計算して必要な中間結果を復元さえできれば、逆伝播時に勾配計算を行うことができます。これにより計算のオーバーヘッドが発生する代わりにピーク時のメモリ消費を下げることできます。

このような手法を再計算あるいはチェックポインティング (checkpointing) と呼びます。再計算自体はニューラルネット固有の手法ではなく、自動微分のコミュニティで研究されていました[2][3]。再計算はメモリ消費を抑える代わりに追加の計算時間を発生させます。どの変数をどのタイミングで捨てるかという戦略によってメモリ消費とオーバーヘッドは変わります。近年になってディープラーニングの問題設定に特化した再計算手法が提案されるようになりました[4][5]。

ここではその一つである Chen らの手法 [4] を紹介します。簡単のため、計算グラフが n 層の直線的なネットワークになっている場合を考えます。実際の計算ではモデルパラメータが付いているかもしれませんが一旦無視します。いま、グラフを √n 個ごとに切って √n 個のブロックに分けたとします。順伝播ではそれぞれのブロックを計算した後にブロック間の境界となる部分の変数以外をメモリから捨てることにします。逆伝播では捨てた部分が必要になってしまいますが、残しておいた部分を起点として順伝播のブロックを一時的に復元することでそれぞれのブロック内で逆伝播を実行できます。これにより順伝播部分で再計算のオーバーヘッドが順伝播1回分だけ掛かる代わりに、メモリ消費を O(n) から O(√n) 程度に減らすことができます。ResNet のようにスキップ接続がある場合でも、関節点等でグラフを切れば似たようなことができます。

グラフ的形式化による再計算 (我々の提案手法)

ここからは我々が少し前に arXiv に投稿した論文である “A Graph Theoretic Framework of Recomputation Algorithms for Memory-Efficient Backpropagation” の紹介をします。こちらは2018年夏PFNインターンの井上卓哉さんとの研究成果でもあります。

深層学習で知られている再計算手法は適応可能範囲が計算グラフが限定的で、やや砕けた表現をすると「グラフが直線っぽい場合」に特化していました。しかし近年着目されているネットワークには U-Net のように大きなスキップ接続が存在したりして多様な構造を持っています。また、メモリと計算時間について良いトレードオフを取るという点も大事です。つまりメモリ不足がそこまで深刻でない状況ではできるだけオーバーヘッドを少なくするような再計算スケジュールを求めたいはずです。

そこで我々の論文では、任意の構造の (静的な) 計算グラフ *1 と利用可能なメモリ容量が与えられたときに、メモリ容量を超えない範囲でできるだけオーバーヘッドを小さくするスケジュールを求める離散的な最適化問題を考えます。

任意のグラフに対する再計算も、Chen らの手法の核である「グラフをブロックごとに切ってそれぞれのブロックごとに順伝播、再計算、逆伝播を行う」という考えを拡張できます。すなわち、元の計算グラフの頂点集合 V を V1, V2, …, Vk というブロックに分割し、V1→V2→…→Vk と順伝播計算するものだとします。するとこのような分割方法に対してそれに付随する再計算方法も自然に定まります。砕けた言い方をすると、順伝播で各ブロックを計算し終えた後には境界となるところをだけを覚えて、そうでないところは捨て去るようにします。逆伝播では忘れたところを復元します。よって分割方法を決めればそれに付随する自然な再計算方法の消費メモリとオーバーヘッドが定まります。

分割方法は残念ながら指数的に多く存在するので全探索などはできそうにないですが、もし分割列の途中状態の集合 (V1∪…∪Vi) としてありうるパターン数が少ないのだとすると動的計画法によって最適化問題の解を用いて求めることができます。パターン数が多いときでも、近似的に解くことで現実的に性能の良い解を求める方法も提案しています。

実験では PSPNet, ResNet, DenseNet, U-Net などのネットワークに対して提案手法を用いると計算時間が1.3~1.4倍程度になる代わりに40%-80%のメモリ削減を実現できることや、メモリに余裕がある場合には既存手法よりも計算時間のオーバーヘッドを小さくできることを確認しています。

*1 RNN のようなループを含む計算グラフであっても、ループ回数がイテレーションごとに固定であればループを展開して静的なグラフとみなせます。

Chainer-compiler 上での実装

まだ実験的な段階ではありますが、再計算手法を Chainer の学習で使えるようにする取り組みをしています。再計算では事前に計算グラフの構造が分かっている必要があるため、Chainer 本体ではなく計算グラフのコンパイラである Chainer-compiler 上でその実装を進めています。学習させるときの流れは以下のようになります。

  1. まず Python で記された Chainer のモデルを静的な計算グラフとして ONNX 形式にダンプします。これは ONNX-chainer を使えばできます。
  2. ONNX 形式の計算グラフを Chainer-compiler に渡すと学習のための逆伝播部分を足して勾配計算を実行可能な形式にします(Python からは `chainer.Chain` でラップされた状態で見られます)。オプション次第で再計算を含めたスケジュール生成を自動で行います。

Chainer-compiler には Python ラッパーがあり、元の Python コードに少し変更を加えるだけで使えるような形になっています。もし試してみたい方がいらっしゃったらドキュメントの Train your model with chainer-compiler を参考に実行してみてください。

まとめ

深層学習における再計算という手法の紹介と PFN での取り組みについて紹介しました。メモリ不足が深層学習研究開発のボトルネックにならない世の中が来ると素敵なのかもしれません。

ちなみに手動スケジューリングでいいのであれば、Chainer なら functions.forget を使うと比較的カジュアルに再計算ができます。

文献

[1] Chao Peng, Tete Xiao, Zeming Li, Yuning Jiang, Xiangyu Zhang, Kai Jia, Gang Yu, and Jian Sun. MegDet: A large mini-batch object detector. In IEEE Conference on Computer Vision and Pattern Recognition (CVPR), pages 6181–6189, 2018.

[2] Andreas Griewank and Andrea Walther. Evaluating derivatives: principles and techniques of algorithmic differentiation. Vol. 105. Siam, 2008.

[3] Benjamin Dauvergne and Laurent Hascoët. The data-flow equations of checkpointing in reverse automatic differentiation. International Conference on Computational Science. Springer, Berlin, Heidelberg, 2006.

[4] Tianqi Chen, Bing Xu, Chiyuan Zhang, and Carlos Guestrin. Training deep nets with sublinear memory cost. arXiv preprint, arXiv:1604.06174, 2016.

[5] Audrunas Gruslys, Rémi Munos, Ivo Danihelka, Marc Lanctot, and Alex Graves. Memory-efficient backpropagation through time. In Advances in Neural Information Processing Systems (NIPS), pages 4125–4133, 2016.

プログラミング教育推進月間の教材について

Hiroshi Maruyama

2019-02-18 18:00:37

PFNフェローの丸山です。2月18日に、PFNは文部科学省、総務省及び経済産業省の「未来の学び プログラミング教育推進月間」に協力して、小学校向けのプログラミング教材を作成することを発表しました。この教材は、今年の9月に一部の小学校で、総合学習の一環として利用されることを目指しています(指導案のページはこちらです)。この記事では、私達PFNがなぜこのような活動をしているかをお話ししたいと思います。

PFNは若い会社です。多くの若い社員が次々に家庭を持ち、子どもを育て始めています。社長の西川をはじめ皆、次の世代が活躍し、よりよい社会を作っていくことを強く願っています。これからの社会を考えたとき、マーク・アンドリーセンが「ソフトウェアが世界を侵食する」(Software is eating the world) と言ったことに象徴されるように、社会の価値の多くが情報技術、特にソフトウェアから得られることは明らかです。ですから、私達の次の世代の誰もが、小さい頃から情報技術に親しみ、プログラミングの楽しさを知る機会を持てることは、私達にとっても大変喜ばしいことです。そんな若い人たちが、ソフトウェアに興味を持ち、将来社会のあらゆる場で活躍している、そんな社会の実現をPFNは願っています。

新しいスタイルのプログラミング

同時に私達は、技術の進歩によって、今までとは違う新しいスタイルのプログラミングが現れつつあることも強く認識しています。簡単にするため、プログラムとはある入力Xに対して出力Yを計算する箱であると考えます。

このようなプログラムを作る1つの方法は、計算のルールを書き下すことです。たとえば、商品の価格を入力としてその消費税を出力するプログラムを考えましょう。このようなプログラムは、入力Xに対して「X の0.08倍を計算してYとせよ」 というルールで表現することができます。これが普通のプログラムの作り方で、ここではルールによるプログラミングと呼ぶことにしましょう。

しかし、深層学習という新しい技術によって、別の形のプログラミングが現れてきました。こんな例を考えてみましょう。人とじゃんけんをする機械を作るために、カメラで撮った手の画像を入力として、それがグー・チョキ・パーのいずれであるかを判定して出力するプログラムを作りたいとします。

このようなプログラムを、ルールによるプログラミングで作るのは容易ではありません。カメラで撮影した画像は画素が格子状に並んだものですが、ある画素が肌色だからこれはチョキだ、と判断するわけにはいきません。同じチョキでも位置や角度や光源が違ったりして毎回異なる画像になるからです。

そこで、深層学習では、様々に異なるチョキの画像をプログラムに見せて「これはチョキだよ」と教えていくことによってプログラミングを行います。これを例示によるプログラミングと呼ぶことにします。例示によるプログラミングでは、ルールを書くのが難しいようなプログラムも作ることができます。

一方で、例示によるプログラミングでは、例示に使うデータによっては、必ずしも毎回正解が出ないかもしれません。あるいは例示に偏りがあった場合には、偏りのある結果が出るかもしれません。これは、ルールによるプログラミングが(プログラムに誤りが無い限り)常に正しい答えを出すこととは対照的です。

将来のソフトウェア

例示によるプログラミングは、ここ10年ほどの、深層学習の急速な発展によって可能になってきていて、今までのルールによるプログラミングでは難しかった画像認識、音声認識、機械翻訳などに応用されつつあります。これは、1950年代にデジタル計算機が発明されて以来の最大のパラダイムシフトかもしれません。おそらく、将来のソフトウェアの多くは、ルールによるプログラミングと例示によるプログラミングを組み合わせたハイブリッドなものになるでしょう。

私達が今回の「未来の学び プログラミング教育推進月間」にご協力している真の理由はここにあります。今の子供達が大人になって、社会におけるソフトウェア開発の一翼を担うころには、例示によるプログラミングが広く使われていることは間違いありません。ルールによるプログラミングが苦手でも、例示によるプログラミングは得意だ、という子どももいるでしょう。

「プログラミング」を狭く捉えないで、いろいろな考え方があるのだ、ということを知ってほしい、それが私達の願いです。

 

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

Tomoki Komatsu

2018-03-06 15:17:53

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

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

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

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

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

異常検知入門(比戸)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

 

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

岡野原 大輔

2017-04-17 13:03:35

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

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

深層学習でバラ積みロボットの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台のマシンで並列に学習するという。
産業用ロボットは指示されたとおりに非常に正確に動き、また、学習初期の頃から実機でいきなり実験すると物を壊してしまう可能性もあるため、シミュレータを使うことは理にかなっている。
一方で、バラ積み取り出しのよくある失敗例として、取得動作の際にワークが崩れて動いてしまったり、ワーク間の光の反射によって位置推定がずれたりといった、シミュレーションしにくい要素が絡んでいることも事実である。
シミュレータで得た学習結果を、いかに実機に適用するのかというのは今後の大きな課題であろう。

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

mattya

2015-09-10 18:38:02

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

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

概要

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の構造

書かれている数字は[チャネル数*縦*横]を意味します。入力画像は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を使って”もやっと”もグロくもない画像を生成することができます。もちろんコンテンツ画像とスタイル画像を入力に必要としているので全自動ではないのですが、コンテンツ画像は深い層の出力のみ、スタイル画像はスタイル行列のみしか情報を使っていないので、画像の完全自動生成に一歩近づいたと言えるのではないでしょうか。今後の発展に要注目です。

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

hido
Chief Research Officer

2015-08-12 11:37:56

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

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

それは2015年7月に開かれた機械学習の国際会議・ICML内のDeep Learning Workshopの企画でした。元記事はワークショップ主催者のKyunghyun Cho氏のBrief Summary of the Panel Discussion at DL Workshop @ICML 2015です。ご本人の許可を得られたので、以下に日本語訳を掲載します。なるべく原文に忠実に訳したつもりですが、分かりづらい部分は意訳が入っているため、もし誤りがあればご指摘下さい。

— ここから翻訳

<はじめに>

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

続きを読む »

のび太とインターネット・オブ・シングス

hido
Chief Research Officer

2014-03-20 14:55:55

卒業式シーズンですね。比戸です。

今回はIoT (Internet of Things)やM2M(Machine-to-Machine)の話をします。

この2つの単語を日経記事やITニュースサイトで目にすることが増えました。将来PCやケータイ以外の様々なモノやセンサーデバイスがインターネットに繋がって情報を送り合って賢く連携することで、家が、オフィスが、街が、そして社会システム全体が便利で最適になる世の中が実現されると言われています。一方で、言葉やコンセプトは昔から存在しており、一時流行ったものの下火になっていたこともあって懐疑的な見方もあります。

「ドラえも~ん、ジャイアンが『そんなの俺も10年前に考えてた、のび太のくせに生意気だ!』っていじめてくるよ〜」

「スネオのやつも、『僕らが昔やってダメだったのにのび太にできるわけないだろ!』って言うんだ〜」

かわいそうなのび太くん、さて実際のところはどうなのでしょうか。

続きを読む »