Hatena::ブログ(Diary)

MY ENIGMA このページをアンテナに追加 RSSフィード Twitter

2014-06-16 ロボティクスにおける線形代数

ロボティクスにおける線形代数

キーポイント線形代数 (理工系数学のキーポイント 2)キーポイント線形代数 (理工系数学のキーポイント 2)
薩摩 順吉,四ツ谷 晶二

岩波書店
売り上げランキング : 114739

Amazonで詳しく見る by AZlink


はじめに

大学の理系学科に進学すると、

まず初めに受ける授業の一つに『線形代数学』があります。


自分も学生時代頑張って勉強していましたが、

一つ大きな疑問がありました。

それは、「これは何に使うのだろう・・・?」

ということです。


固有値や、行列式、ランクなど、

抽象的な知識として学びましたが、

実際にどのようにエンジニアリングに結びつくのかがわからず、

全く興味が持てなかったことを思い出します(笑)。


しかし、大学の研究室でロボティクスの研究をし始めると、

これまで応用例が全く想像できなかった線形代数の知識が、

ふんだんに応用されていることを知りました。


今回は、大学での勉強とは逆の方向として、

それぞれのロボティクスにおける線形代数の応用について

簡単に説明したいと思います。

詳しい線形代数の知識に関しては、

大学時代の教科書や冒頭の参考文献を見てもらえると良いと思います。


特異値分解

特異値分解はある行列を、

ある特別な行列に分解する手法の一つです。

f:id:meison_amsl:20140617150858p:image


実は、この特異値分解は、

SLAMやScan Matchingという技術でよく使用される

Iterative Closest Point (ICP)アルゴリズムで利用できます。

ICPアルゴリズムを利用したSLAM用MATLABサンプルプログラム - MY ENIGMA


この特異値分解を使用することで、

2つの点群をマッチングさせるための、

片方の点群の移動量を簡単に計算できるようになるのです。



ヤコビ行列

ヤコビ行列は、複数の関数における

それぞれの変数偏微分の値を行列として表現したものです。

f:id:meison_amsl:20140616103135p:image

ヤコビ行列 - Wikipedia


このヤコビ行列を幾何学的に考えると、

下記の図のように、ある関数のある点における接平面の方向を表しています。

f:id:meison_amsl:20140616103623p:image


ロボティクスにおいて、このヤコビ行列の応用例は

下記の2つが上げられます。


1. 勾配法による最適化計算

複数の多変数関数における最適化をしなくてはならない場合、

このヤコビ行列が役に立ちます。

このヤコビ行列はある点における接平面の方向なので、

それを使って、勾配を下る方向に探索を行うことで

最小化(最適化)を実現できます。

ヤコビ行列が普通の関数微分の拡張だと考えると理解しやすいですね。


2. 非線形関数の一次項近似、共分散の遷移

ロボティクスの位置計測における有名な方法に、

拡張カルマンフィルタ(Extened Kalman Filter:EKF)がありますが、

このEKFは非線形関数の近似として、

ヤコビ行列を使用しています。


EKFでは、このヤコビ行列を使用して、

各Predict, Updateの際の共分散行列の遷移を実現しているのです。

詳しくは下記の記事を参照下さい。

拡張カルマンフィルタを使用した自己位置推定MATLABサンプルプログラム - MY ENIGMA


分散行列(分散分散行列)

ロボティクスにおいて、共分散行列は頻繁に出てきます。

カルマンフィルタを使用して、位置を推定した場合、

その位置の状態ベクトルと、その推定の精度として

分散行列(分散分散行列)が推定されます。

拡張カルマンフィルタを使用した自己位置推定MATLABサンプルプログラム - MY ENIGMA

この共分散行列の値を使うと、

推定精度の楕円を描画することができます。

カルマンフィルタにおける誤差楕円の計算方法 - MY ENIGMA


分散とは、ある二組のデータの各平均からの偏差の平均(期待値)です。

共分散 - Wikipedia


(分散)共分散行列は各組の共分散を行列として格納したものです。

分散共分散行列 - Wikipedia

f:id:meison_amsl:20140831202031p:image


この共分散行列の対角成分は同じ変数の偏差の積の平均(期待値)なので、

通常の各変数分散になります。

ですので、共分散行列の対角成分は必ず正の値になります。


また非対角成分は、それぞれの変数の共分散です。

この共分散行列の上対角成分と下対角成分は、

変数の平均の偏差を交換したものなので、

掛け算の左右の項を交換しても、

値が変わらないことを考えると、

分散行列の上対角成分と下対角成分は同じ値になります。


また、この共分散の値はそれぞれの変数の平均の偏差の掛け算なので、

正と負の両方の値をとります。

正の値の場合、片方の値が大きくなると、もう片方の値も大きくなる傾向にあり、

負の値の場合、片方の値が大きくなると、もう片方の値は小さくなる傾向にあります。


分散行列の詳しい説明は下記の資料を参考にされると良いと思います。

分散共分散行列 - 大人になってからの再学習


相関行列

相関行列は上記の共分散行列を標準化したものになります。

統計学における標準化

i行,j列の共分散の項をs_ijとすると、

その項に対応する相関行列の項r_ijは下記の式で計算されます。

分散共分散行列と相関行列*

つまり、それぞれの共分散の項を対応する変数標準偏差で割ったものになります。


分散行列の対角成分が各変数分散であることを考えると、

それらの値を標準化する相関行列では、対角成分は1になります。


また、非対角成分は相関係数になります。

相関係数 - Wikipedia

従って、非対角成分の値が、

1に近いほど、片方の値が大きくなると、もう片方の値も大きくなる傾向にあり、

-1に近いほど、片方の値が大きくなると、もう片方の値は小さくなる傾向にあります。


情報行列(精度行列)

情報行列は共分散行列の逆行列です。


この情報行列は、フィッシャーの情報行列や、

精度行列(Precision Matrix)とも呼ばれます。


分散行列の代わりにこの情報行列を使用するフィルタを、

情報フィルタといいます。

カルマンフィルター - Wikipedia

この情報行列を使用することにより、

大量の状態量を推定したいSLAMのような問題において、

計算コストを非常に小さくすることができます。

EKFによるSLAMのためのMATLABサンプルプログラム - MY ENIGMA


行列の二次形式

ロボティクスにおける重要なアルゴリズムの中には、

二次形式の形で書き表せるものが多いです。


二次形式は、二次関数の行列版だと言えますが、

一般的には下記のような形をしています。

f:id:meison_amsl:20140616140359p:image

ここでx,A,b,cはすべてのベクトルか行列になります。


例えば、下記の記事のようにベイズフィルタの

分散の遷移は二次形式で書き表すことができますし、

拡張カルマンフィルタを使用した自己位置推定MATLABサンプルプログラム - MY ENIGMA

あるよくわからない関数を、

局所的に二次形式で近似するとか

(一次だと不安だけど、三次だとやり過ぎな気がするなど(笑))

あると思います。


また、色々な文献を読んでいると、この二次形式が出てくるのですが、

多くの研究者が、何故わざわざ二次形式であることを強調するのかが

わかりませんでした。

それには実は理由があったのです。


それは

『二次形式の式は最適化がしやすい』

ということです。


ロボティクスでは、何かの認識する時に、

誤差を最小化したり、

確率(尤度)を最大化したりするのがお決まりですが、

二次形式ではそれが意外と簡単にできます。


では、先ほどの二次形式の式f(x)を最大化してみましょう。

f(x)を最小化(or -f(x)を最大化)することを考えると,

f:id:meison_amsl:20140616141617p:image

となるような\hat{x}を求めることになります。


そこで、よくやる方法として、

最小値 or 最大値となる、いわゆる極値

f:id:meison_amsl:20140616141825p:image

となることを考えます。


そこで、f(x)微分すると

f:id:meison_amsl:20140616142002p:image

となるので、f'(\hat{x})=0とすると

f:id:meison_amsl:20140616142220p:image

となって、これを整理すると

f:id:meison_amsl:20140616142522p:image

そして、左辺をxのみにすると

f:id:meison_amsl:20140616143134p:image

となります。

ここで、ロボティクスで使用される二次形式の式の

大部分に当てはまるのですが、行列Aが対称行列である場合、

f:id:meison_amsl:20140616143408p:image

となり、非常に簡単な式で極値を計算できることがわかります。


以上のように二次形式で目的のシステムを近似することにより、

簡単に極値を計算できる特性を利用して、

ロボットを動かすことができるのですね。


参考資料

  1. Robotics 2 A Compact Course on Linear Algebra
  1. オーム社『マンガでわかる統計学』シリーズの演習Excelファイル - MY ENIGMA

Probabilistic Robotics (Intelligent Robotics and Autonomous Agents series)
Probabilistic Robotics (Intelligent Robotics and Autonomous Agents series)

確率ロボティクス (ROBOT books)
確率ロボティクス (ROBOT books)