スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--/--/-- --:-- | スポンサー広告 | pagetop↑


自律学習型ラジコン
orehatoyotahasukidehanainodakedone.jpg

強化学習とRNNSOMを使った自律学習ロボットが動きましたので、
とりあえず現状をご報告。

強化学習_解説
と、その前に強化学習についてちょっと話しておきます。
強化学習器は一般に「エージェント」と呼ばれ、
こいつが環境(外界)を観測(センサ情報を読み取り)し、
現在の状態において最適な行動を繰り返し学習する中で獲得していく
という学習制御になっています。

目的を達成した時に得られる報酬から最適な方策を学習出来るアルゴリズムである点が
ニューラルネットワークのような教師付き学習との一番の違いですね。

RNNSOMを利用した階層型強化学習
と、ここまでで「自分で学習してくれるなら凄いじゃん!人工知能じゃん!」
と思われるかもしれませんが、世の中そうは甘くありません(笑)

エージェントが観測出来る環境は基本的に人間が切り分けたメモリ空間であり、
その切り分け方が間違っていると最適な行動を学習出来ない場合があります。

例えば「サッカーボールをゴールに蹴り入れる」という問題があったとして
ロボットが認識出来る状態を
「足を振り上げた状態」と「ゴールにボールが入っている状態」
と切り分けてしまったします。
これだと「足を振り下ろした状態」がロボットには認識出来ないので
何度学習しても自分の足とボールとゴールの
関連性を正確に獲得することは期待出来ませんよね?

ということで、状態空間をいかに切り分けるかが強化学習の一つのポイントなわけです。
で、学生時代のオレは自己組織化を行ってくれるSOMに目をつけたという訳。

SOMは日本語では「自己組織化マップ」と呼ばれる物で、
入力情報を類似度に応じて分類する能力を自律的に獲得していく事が出来ます。
入力情報に対して、その情報の特徴を最もよく捉えたある1つのニューロンが発火し、
その発火ニューロンとその周りのニューロンのベクトルを
入力情報に近づくように更新することで、自身の内部を少しずつ整理していきます。
これを何度も繰り返し「似たような性質の情報同士が近い場所に集る」
ようにしていくわけです。

これなら外界の情報から状態空間を構築するので、
大きく変化する部分で自動的に状態を切り分ける事が出来ます。

単純なSOMでは時系列データに対応出来ないので、
ニューロンにフィードバックループをくっつけて
時系列のセンサ情報を扱えるように改変。
上の図にあるように、入力層に入った各種センサ情報を元に
一番ベクトルが近い出力層のニューロンが発火、
そのニューロンの位置情報を状態としてエージェントが観測し、
そこから行動を決定する仕組みを作成しました。

まあ、実は今回はメモリが足りなくて階層構造に出来なかったんだけど、
RNNSOMと強化学習の組み合わせ方は上の図のまんまです。
(Arduinoのメモリが少なくて5×5のニューロンでしか状態空間を構成出来ませんでした)


そんで、現状こんなヘボい動きですがなんとか動いてます、、、
障害物を避けるようなロジックは書いていません。
報酬は「なるべく前へ進んだ分だけプラス」「衝撃があるとマイナス」としました。
後はセンサからの情報を頼りに、自分でどうすれば前進出来るか考えて
モーターの動きを学習しています。
自動車というより昆虫みたいな動きになっちゃいましたね、、、

まあ、これが最終段階というわけじゃなくて
これも作りたい物のテストの一環なんですけどね、、、
関連記事
2010/03/05 01:21 | ロボット | 自作制御Arduino知能モデル | コメント(7) | Trackback(0) | pagetop↑


<<やっぱドレスシューズの雰囲気があるスニーカーが好き | ホーム | やっぱブラックメタルなんすよね!>>

質問

状態観測には何を使ってるんですか?

ニューロンベクトルの中には、”過去の選んだ行動”と、”選ばなかった行動”と、その”結果”が入ってるように感じるんですが、間違いありますか?目次である”状態”から、中身を引き出すという感じかなと思ったんですが。
shimotuki  †  URL  [編集] 2010/03/05 18:43

良い質問ですね

>ニューロンベクトルの中には、”過去の選んだ行動”と、”選ばなかった行動”と、その”結果”が入ってるように感じるんですが、
まさにその通りです。
ただし、その情報が格納されているのはニューロンではなく
エージェントの中にある「価値関数」という数式に格納されます。
これは一般的な強化学習(Q-learning)においては「Q値」と表現され
その「状態」において、ある「行動」を行った場合の「価値」を算出する事が出来る式です。
この「価値」という所が重要で、単純な「結果」ではなく
「未来に得られるであろう報酬」を含んだ、予測値とも言える物になっています。
この「価値」を獲得することを学習と呼んでいます。

目次として過去の「状態」と「行動」を使い、
「価値」を元に次の行動を決定するという感じでしょうか?

単純に目次を用いて過去の行動結果を参照するだけでは
過去に行っていない行動に関して予測する事は出来ません。
これまでのロボットと全く同じですね。
プログラムされた範囲の事しか分からない。
しかも目次もその内容も膨大になり過ぎて、恐らく処理しきれないでしょう。

それに対して強化学習では未来の結果を抽象化した「価値」という考え方を導入する事で情報を簡略化し、
初めて経験する場面であっても状態の観測が出来れば、
おおよそ最終的な目的を達成するために必要であろう(価値の高い)反応を返すことができます。

>状態観測には何を使ってるんですか?
この部分にニューロンを平面結合させたSOMを用いています。
衝撃センサ、加速度センサ、距離センサからの情報を直接ニューロンに接続し、
自己組織化させることで状態空間の分割を自動で行っています。
どのような分割になるかは経験した環境によって異なってきます。
N.d  †  URL  [編集] 2010/03/06 00:06

なるほど・・・

情報が近く集まったニューロンベクトルの更新という部分が疑問です。

教師付きと違って、インデックス化を自分でできるところが(解決へ収束させていくのではなく、解決に至った行動をたくさん出す感じ?)、このシステムの強みだと思うんですが、キックの話で例えると、「ゴールに入る」、「振り下ろす」が追加される分には良いとしても、「足を振り上げる」状態も、初期、中期、後期といった感じでインデックス化されますよね。

更新という部分の認識が間違っていたら申し訳ないのですが、更新を繰り返すうちに、初期、中期、後期もそれぞれが同じ「足を振り上げる」状態として、最終的に同じ物が3つ持つことになるような考え方になってしまいます。結果的に、「足を振り上げる」という状態が出来上がるには良いと思うのですが、過去の履歴を更新してしまうことは、逆に環境を判断するベクトルの範囲が狭くなってしまって、他の状態と誤認を引き起こす可能性が増えるのではと心配してしまいます。
shimotuki  †  URL  [編集] 2010/03/06 01:41

かなり簡単化して話しているので

>(解決へ収束させていくのではなく、解決に至った行動をたくさん出す感じ?)
いえ、収束させていきます。
最適解を探索しつつ、そこまでの行動について「価値」をつけていくことで、
準最適解もおのずと獲得出来るようになっています。

>他の状態と誤認を引き起こす可能性
各ニューロンは初期値としてランダムなベクトルを持っています。
これに対し、順次環境からベクトルが入力され、
そのベクトルに一番近いニューロンとその周辺について
入力ベクトルに近づくように「少し」更新するようになっています。
確かに、自己組織化が上手くいかず
>他の状態と誤認を引き起こす可能性
はありえます。
ただ、基本的にはセンサ情報からその違いを明確にできる状態に関しては切り分ける事が出来ます。

一番の理想はこの世の全ての状態を記憶し、
その全ての状態での最適な行動を算出する事です。
しかし、そんなことは世界最高速のスパコンでも実現不可能でしょう。

SOMによる状態空間の曖昧化は
センサ値が若干違ったとしても「前に経験したのと似たような状態」
と認識する事で、ロボットの行動を決定しやすくする効果があると考えています。

これ以上詳しい内容は勉強してもらった方が早いかもしれませんね。
興味があるようなら、下記のような本が参考書として最適かと思いますので、
一応ご紹介しておきます。

<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4627826613/zetuboutoshi-22/ref=nosim/" name="amazletlink" target="_blank">強化学習</a>

<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4303732311/zetuboutoshi-22/ref=nosim/" name="amazletlink" target="_blank">自己組織化マップ応用事例集―SOMによる可視化情報処理</a>
N.d  †  URL  [編集] 2010/03/06 15:43

補足

SOMは「平面上でどのニューロンが発火したか」という位置情報を出力するニューラールネットワークです。
SOM全体で一つの情報を絶えず保持している訳ではありません。
むしろ一つ一つのニューロンが過去の情報を別々に蓄積しているとも言えます。
(この説明は語弊があるかもしれませんが、簡単のため)
N.d  †  URL  [編集] 2010/03/07 21:07

おかげさまで

実はあの後、色々とSOMに関するサイトを回ってみました。経緯は省きますが、疑問の結論としては、同じニューロンベクトルが出来上がるのではなくて、最適な区切りへと進化していく、が正しかったようです。

>どのような分割になるかは経験した環境によって異なってきます。

お恥ずかしながら、この言葉をやっと理解した次第です。

前職での経験なのですが、顧客属性、販促や他社の活動など、要素を別々に考えていては、市場分析は十分ではなく、当然結果は、複数の相互作用によるものです。ただ、それぞれの属性を分類しながら調べていれば、導き出された結果によっては時間的損失の方が重く、今回のSOMを含めた制御システムの考え方は興味をひきました。独自研究の範囲として黙っておこうかとも思っていたのですが、既にそういった分野での応用も研究されているようです。

http://www.mindware-jp.com/basic/index.html

ま、規模に対して高価なので、僕が考える次元では実用的ではありませんでしたが、CMSをデザインするときに、概念として入れてみてもおもしろそうです。

そういえば、歌を歌うというところからハイハイできるようになったみたいですが、今何歳くらいの赤ちゃんですか笑?大人の価値関数に追いつく日が楽しみやね。超えては欲しくないですがw
shimotuki  †  URL  [編集] 2010/03/08 10:32

実は、、、

絨毯の上を走らせると摩擦係数が高過ぎて
即電池切れするという根本的な問題に悩まされておりますlol

鋭意、アンビリカルケーブルを作成中。
完成次第、再度学習させる予定です。

今の時点でも小学生低学年の子が操作するラジコン並の動きぐらいは学習できていますw
残念ながら本気で強化学習を行うにはこのチップじゃ非力なんですよね、、、
N.d  †  URL  [編集] 2010/03/08 21:47
コメントの投稿












[管理人のみ閲覧可]

トラックバック
トラックバックURL
http://kafuka.blog12.fc2.com/tb.php/1198-826424b5
この記事にトラックバックする(FC2ブログユーザー)
| ホーム |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。