2014-06-16 ロボティクスにおける線形代数
ロボティクスにおける線形代数
キーポイント線形代数 (理工系数学のキーポイント 2) 薩摩 順吉,四ツ谷 晶二 岩波書店 売り上げランキング : 114739 Amazonで詳しく見る by AZlink |
はじめに
大学の理系学科に進学すると、
まず初めに受ける授業の一つに『線形代数学』があります。
自分も学生時代頑張って勉強していましたが、
一つ大きな疑問がありました。
それは、「これは何に使うのだろう・・・?」
ということです。
抽象的な知識として学びましたが、
実際にどのようにエンジニアリングに結びつくのかがわからず、
全く興味が持てなかったことを思い出します(笑)。
しかし、大学の研究室でロボティクスの研究をし始めると、
これまで応用例が全く想像できなかった線形代数の知識が、
ふんだんに応用されていることを知りました。
今回は、大学での勉強とは逆の方向として、
それぞれのロボティクスにおける線形代数の応用について
簡単に説明したいと思います。
詳しい線形代数の知識に関しては、
大学時代の教科書や冒頭の参考文献を見てもらえると良いと思います。
特異値分解
特異値分解はある行列を、
ある特別な行列に分解する手法の一つです。
実は、この特異値分解は、
SLAMやScan Matchingという技術でよく使用される
Iterative Closest Point (ICP)アルゴリズムで利用できます。
ICPアルゴリズムを利用したSLAM用MATLABサンプルプログラム - MY ENIGMA
この特異値分解を使用することで、
2つの点群をマッチングさせるための、
片方の点群の移動量を簡単に計算できるようになるのです。
ヤコビ行列
ヤコビ行列は、複数の関数における
このヤコビ行列を幾何学的に考えると、
下記の図のように、ある関数のある点における接平面の方向を表しています。
ロボティクスにおいて、このヤコビ行列の応用例は
下記の2つが上げられます。
1. 勾配法による最適化計算
このヤコビ行列が役に立ちます。
このヤコビ行列はある点における接平面の方向なので、
それを使って、勾配を下る方向に探索を行うことで
最小化(最適化)を実現できます。
ヤコビ行列が普通の関数の微分の拡張だと考えると理解しやすいですね。
2. 非線形関数の一次項近似、共分散の遷移
ロボティクスの位置計測における有名な方法に、
拡張カルマンフィルタ(Extened Kalman Filter:EKF)がありますが、
ヤコビ行列を使用しています。
EKFでは、このヤコビ行列を使用して、
各Predict, Updateの際の共分散行列の遷移を実現しているのです。
詳しくは下記の記事を参照下さい。
拡張カルマンフィルタを使用した自己位置推定MATLABサンプルプログラム - MY ENIGMA
共分散行列(分散共分散行列)
ロボティクスにおいて、共分散行列は頻繁に出てきます。
カルマンフィルタを使用して、位置を推定した場合、
その位置の状態ベクトルと、その推定の精度として
拡張カルマンフィルタを使用した自己位置推定MATLABサンプルプログラム - MY ENIGMA
この共分散行列の値を使うと、
推定精度の楕円を描画することができます。
カルマンフィルタにおける誤差楕円の計算方法 - MY ENIGMA
共分散とは、ある二組のデータの各平均からの偏差の平均(期待値)です。
(分散)共分散行列は各組の共分散を行列として格納したものです。
この共分散行列の対角成分は同じ変数の偏差の積の平均(期待値)なので、
ですので、共分散行列の対角成分は必ず正の値になります。
この共分散行列の上対角成分と下対角成分は、
各変数の平均の偏差を交換したものなので、
掛け算の左右の項を交換しても、
値が変わらないことを考えると、
共分散行列の上対角成分と下対角成分は同じ値になります。
また、この共分散の値はそれぞれの変数の平均の偏差の掛け算なので、
正と負の両方の値をとります。
正の値の場合、片方の値が大きくなると、もう片方の値も大きくなる傾向にあり、
負の値の場合、片方の値が大きくなると、もう片方の値は小さくなる傾向にあります。
共分散行列の詳しい説明は下記の資料を参考にされると良いと思います。
相関行列
相関行列は上記の共分散行列を標準化したものになります。
i行,j列の共分散の項をs_ijとすると、
その項に対応する相関行列の項r_ijは下記の式で計算されます。
つまり、それぞれの共分散の項を対応する変数の標準偏差で割ったものになります。
それらの値を標準化する相関行列では、対角成分は1になります。
また、非対角成分は相関係数になります。
従って、非対角成分の値が、
1に近いほど、片方の値が大きくなると、もう片方の値も大きくなる傾向にあり、
-1に近いほど、片方の値が大きくなると、もう片方の値は小さくなる傾向にあります。
情報行列(精度行列)
この情報行列は、フィッシャーの情報行列や、
精度行列(Precision Matrix)とも呼ばれます。
共分散行列の代わりにこの情報行列を使用するフィルタを、
情報フィルタといいます。
この情報行列を使用することにより、
計算コストを非常に小さくすることができます。
EKFによるSLAMのためのMATLABサンプルプログラム - MY ENIGMA
行列の二次形式
ロボティクスにおける重要なアルゴリズムの中には、
二次形式の形で書き表せるものが多いです。
二次形式は、二次関数の行列版だと言えますが、
一般的には下記のような形をしています。
ここでx,A,b,cはすべてのベクトルか行列になります。
例えば、下記の記事のようにベイズフィルタの
共分散の遷移は二次形式で書き表すことができますし、
拡張カルマンフィルタを使用した自己位置推定MATLABサンプルプログラム - MY ENIGMA
あるよくわからない関数を、
局所的に二次形式で近似するとか
(一次だと不安だけど、三次だとやり過ぎな気がするなど(笑))
あると思います。
また、色々な文献を読んでいると、この二次形式が出てくるのですが、
多くの研究者が、何故わざわざ二次形式であることを強調するのかが
わかりませんでした。
それには実は理由があったのです。
それは
『二次形式の式は最適化がしやすい』
ということです。
ロボティクスでは、何かの認識する時に、
誤差を最小化したり、
確率(尤度)を最大化したりするのがお決まりですが、
二次形式ではそれが意外と簡単にできます。
では、先ほどの二次形式の式f(x)を最大化してみましょう。
f(x)を最小化(or -f(x)を最大化)することを考えると,
となるような\hat{x}を求めることになります。
そこで、よくやる方法として、
最小値 or 最大値となる、いわゆる極値は
となることを考えます。
となるので、f'(\hat{x})=0とすると
となって、これを整理すると
そして、左辺をxのみにすると
となります。
ここで、ロボティクスで使用される二次形式の式の
大部分に当てはまるのですが、行列Aが対称行列である場合、
となり、非常に簡単な式で極値を計算できることがわかります。
以上のように二次形式で目的のシステムを近似することにより、
簡単に極値を計算できる特性を利用して、
ロボットを動かすことができるのですね。
参考資料
Probabilistic Robotics (Intelligent Robotics and Autonomous Agents series)