機械学習の効率的な学習方法

機械学習について(以下文責:濱翔平)

世の中で行われているコンピュータ制御は日に日に高度化してきています.例えば様々な企業が開発しているヒューマノイドロボットは自分の姿勢を周りの環境に合わせて整えたり,備えたカメラから相手の顔を見つけてその方向を向きながら話すといったことも出来るようになっています.こういったシステムが今よりもっと高度化していけば,いずれは人とロボットが同じ空間で暮らし,ロボットが人の仕事や家事をサポートするなどして良きパートナーとして存在してくれるようになるかもしれません(一部では既にそうなっているようですが).しかしこういったの動作を人間が一から考えてプログラムを書きロボットに搭載することは大変難しいです.無限に時間をかければ,いつかはロボットが人と同じように動いてくれるようになるかもしれませんが,とても現実的な話ではありません.


そこで登場したのが機械学習です.文字通り「機械」が「学習」するシステムです.


しかし機械が学習すると言ってもピンと来ない人もいるかもしれません.そこで一度私たち人間に置き換えて考えてみましょう.私たち人間が学習を行う時はどうしているでしょう.例えば小学生の時を思い出してください.小学生時代には漢字を勉強しましたが,その漢字を学習する時,覚えたい漢字をノートに何度も書きびっしり埋め尽くしていたのではないでしょうか.他にも例えば跳び箱を飛べるようになるために,何度も飛ぶ練習をして飛ぶための動作をその中で学習していたのではないでしょうか.私たち人間は何かを覚えるために,何かを出来るようになるために何度も何度もそのことを繰り返し行う場面多いと思います.実は機械学習も同じなのです.

本研究について

そんな中で本研究で取り扱っている機械学習のシステムは力学系学習木(以下,DLT)です.DLTについての詳しい説明はリンク先で取り扱っていますのでそちらをご覧ください.そして私はDLTにおいて効率よく学習を行うために,学習時にDLTへ与える教師データをどのように構成すれば良いかということを研究しています.


本研究の話に入る前に少しDLTのことについて説明します.DLTは汎化能力を有しています.力学系の予測を行う際,入力ベクトルの値を座標として状態木を辿っていくと,葉まで到達しないことがしばしばあります.そういう時は葉ではない上位のノードに登録されている状態遷移ベクトルを参照します.これがDLTでの汎化です.こうすることで学習時には無かった状態が入力されてもある程度予測が可能となります.また,DLTは木構造になっています.木の各階層は入力ベクトルの各要素と対応関係にあり,例えば入力ベクトルの先頭要素は木の(ルートを除いた)最上位の階層,二番目の要素は第2階層といった具合です.
以上の文をまとめると以下のようになります.DLTでは汎化によって予測の精度を高めています.また,木構造における葉の階層(最下層)よりも上位の層の状態遷移ベクトルを参照することで汎化が起こります.そして木のそれぞれの階層は予測時の入力ベクトルの各要素と対応しています.
これらのことから一つ考えられることがあります.それは,学習時の入力ベクトルの要素の構成によって汎化の能力に差が出るのではないか,ということです.もう少し砕けた言い方をすると,汎化が起こる際は上位の階層を参照するので,上位の階層に対応する入力ベクトルの先頭(やその付近)の要素が汎化の能力により強く影響しているのではないか,ということです.
そしてここから,力学系の状態変化に対して強い影響を及ぼしている要素をベクトルの上位要素へと持ってくれば,予測の際に良い結果が出る,という仮説を立てました.


仮説の検証

上記で立てた仮説が妥当なものかどうかを検証するためにヒト型ロボットシミュレータによる実験を行いました.実験ではコンピュータ上で生成されたクランク回しの動作を889ステップ分学習させ(0.05秒/step)ました.そして学習時に用いた動作の1ステップ目だけを与えて予測が行うことが出来るかを検証しました.そして予測したクランク回しの軌道を学習データと比較し,どれだけ誤差があるかを検証しました.クランク回しは以下の画像の通りで,ヒト型ロボットが目の前の丸いクランクの取手を掴んだ状態で回転させる動作を行います.実際には取手の部分は接続して固定されています.

クランク回し
図1.クランク回し

学習ではヒト型ロボットの肩・肘・手首それぞれの角度・角速度・トルクの9つの要素を学習しています.よって入力ベクトルは9次元になります.また,実験では上記の仮説を検証するために学習時に入力ベクトルの要素の構成を複数種類検討しています.以下が検討した要素の構成です.
  • 角度・角速度・トルク
  • 角速度・角度・トルク
  • 肩・肘・手首
  • 肘・肩・手首
  • 手首・肩・肘
  • またそれぞれの構成では9要素あるうちの3要素しか表記していませんが,角度・角速度・トルク内では肩・肘・手首,肩・肘・手首内では角度・角速度・トルクの順に構成されています.例えば1つ目は角度(肩・肘・手首)・角速度(肩・肘・手首)・手首(肩・肘・手首)という構成になります.


    実験結果

    実験は以下の通りとなりました.以下のグラフでは縦軸が予測結果と教師データとの間の誤差,横軸がステップ数になります.

    結果:角度_加速度_トルク

    図2.結果(角度・角速度・トルク)

    結果:角速度_加度_トルク

    図3.結果(角速度・角度・トルク)

    結果:肩_肘_手首

    図4.結果(肩・肘・手首)

    結果:肘_肩_手首

    図5.結果(肘・肩・手首)

    結果:手首_肘_肩

    図6.結果(手首・肘・肩)

    上図から図4の結果が最も誤差の少ない結果であり,ヒト型ロボットのクランク回しにおいては入力ベクトルの構成は肩・肘・手首の順に構成することが良いことが分かりました.ここで一旦上で挙げた仮説を振り返ってみると「力学系の状態変化に対して強い影響を及ぼしている要素をベクトルの上位要素へと持ってくれば,予測の際に良い結果が出る」でした.そしてここでいう「力学系」とはロボットの腕のことであり,その「状態変化」とはロボットの腕が動作することです.肩の動作による腕全体(=力学系)の動作(=状態変化)への影響はは手首や肘よりも大きくなることは,実際に肩や肘,手首を動かしてみれば体験として理解できると思います.そしてその肩に関する角度・角速度・トルクを上位要素とした入力ベクトルの構成が最も良い結果を出しているということは,まさに上で挙げた仮説が正しいことを示唆していることに他なりません.


    今回の実験では図1のヒト型ロボットによるクランク回しという非常に限定された環境での実験でした.また,入力ベクトルについても今回の構成だけではなく様々な入力データが考えられます.今後はもっと一般的な力学系についての検証や入力ベクトルの与え方について様々に検討していく必要があります.