ラベル MATLAB の投稿を表示しています。 すべての投稿を表示
ラベル MATLAB の投稿を表示しています。 すべての投稿を表示

2019年10月11日金曜日

MATLABの強化学習Toolboxと自作Javaで簡単なGrid World探索

【要旨】MATLAB(R2019a以降)には、強化学習用のToolboxがある。それを使った簡単なGrid Worldの強化学習例題を試行した。同時に、自作Javaプログラムでも同じ例題を実行して理解を深めた。

 前回の強化学習の記事では、参考文献[1]に従って、行動価値関数を計算するためのQ学習を、Javaプログラムを自作して、3x3の簡単なグリッドに対して行いました。そのプログラムを、もう少し複雑な例題に適用してみたいと思っていました。それに最適な例題が、最近アナウンスされたMATLABのReinforcement Toolboxの解説に載っていました。それをやってみました。

 その例題の概要は図1のとおりです。詳細は、参考文献[2]をご参照下さい。5x5のグリッドワールドで、開始状態から終了状態までの、累積報酬が最大になる経路を学習させるものです。可能行動は、東西南北の4方向。障害物があり、また、special jump(ワープ)が設定されています。どの動きも次の状態で-1の報酬を得ます。罰としてです。例外は2つです。最終状態に達した場合は+10の報酬、また、特定の状態に到達した場合のみ、無条件に特定の状態にワープし報酬+5が動的に得られます。



これをQ学習で解くMATLABプログラムの主要部は図2のとおりです。Reinforcement Toolboxを使っているのが特徴です。詳細は、ここには書けませんが、これはPythonがMATLABになり、KerasがReinforcement Toolboxになったような感じです。


 これを学習(training)させた結果が図3です。結論として、赤丸の軌跡が最適経路であることを学習できました。そして、その経路で得られた累積報酬額は、+11です。これが可能な累積報酬の最大値であることは明らかです。


 今回の記事の本題は、実は、上に示した自作Javaプログラムでこの例題を解くことでした。結論を述べますと、自作プログラムでも同じ結果が得られて、ひと安心というところです。その結果が図4です。図4の右側は、各状態での行動価値関数を示しています。すなわち、赤い矢印は、その状態で、4方向の行動のうち、最大の行動価値(複数個あり得る)があることを示しています。したがって、赤い→をたどると最適経路となります。この学習の行動選択においては、ε-Greedy(単純なランダムではなく)を採用してみました。


 最初に述べたとおり、今回は、自作Javaプログラムの動作を確認するのが主な目的であり、MATLABのReinforcement Toolkitの最も簡単な例題を対象としたに過ぎません。このToolkitは、もっと複雑で規模が大きい問題において、その真価を発揮しそうです。記述の簡便さだけでなく、高性能CPU/GPUや、Hadoopのような分散並列機構もバックで利用できるようになっているようです。

 上記のようなグリッドワールドの問題でも、規模が大きくなると行動状態価値関数(Q値)の計算は次第に困難になることは明らかです。したがって実問題では、「関数近似法」が必要となります。関数近似のひとつとして、deep neural networkを利用するのが深層強化学習(DQN: Deep Q-Network 等)であり、これが現代の主流となっているようです。これについても、調べて書いて行く予定です。

【参考文献】
[1] 大内東、川村秀憲、山本雅人:マルチエージェントシステムの基礎と応用―複雑系工学の計算パラダイム、コロナ社、2002.(特に、3.2 強化学習、pp.70-90)
[2] 以下は、MATLAB(R2019a, R2019b)の強化学習用ツールボックスの説明
・Reinforcement Learning Toolbox
https://jp.mathworks.com/help/reinforcement-learning/index.html?s_tid=CRUX_lftnav
・Train Reinforcement Learning Agent in Basic Grid World
https://jp.mathworks.com/help/reinforcement-learning/ug/train-q-learning-agent-to-solve-basic-grid-world.html
・Create Custom Grid World Environments
https://jp.mathworks.com/help/reinforcement-learning/ug/create-custom-grid-world-environments.html
・Load Predefined Grid World Environments
https://jp.mathworks.com/help/reinforcement-learning/ug/create-custom-grid-world-environments.html


2018年10月21日日曜日

自然言語処理をMATLABで楽しむ(その1)

(最後の方に、Word2Vec Word Embeddingを追加しました。)

 現代の自然言語処理は、機械学習(Deep Learningを含む)が重要な役割を担っているようです。しかし、この記事は、難しいことを言うのではなく、楽しんでみようというつもりで書きます。ここでは、MATLABを使います。というのも、その最新版(R2018b)のText Analytics Toolboxでは日本語対応の機械学習機能も提供されているからです。もとのテキストの前処理や、解析結果のビジュアル化なども含んでいます。
 何か実際のまとまった日本語のテキストデータを対象としたいですね。ここでは、以下のWebサイトを利用させていただきました。

植物の名前を探しやすい デジタル植物写真集(作成:渡辺 坦 氏)
http://plantidentifier.ec-net.jp

 植物の名前を探し出して、その説明を見つけるためのサイトです。「大まかな特徴から細かな特徴へと段階的に見て探す」、「花の色によって探す」、「葉の形状によって探す」等々などが提供されています。豊富な写真も掲載されています。また、「植物の名前で探す」のセクションには、約2,500の植物それぞれについて、その特徴が1行で簡潔に記述されています。葉の形状や花の色などを含めて、特徴が自由形式で書かれています。JsonやXmlなどのフォーマットではなく、まさに自然言語の様式なのです。具体的には、以下のような記述が約2,500行あります。
 
 ... 前省略
 ムキュウギク: ゲンペイコギク の別名
 ムギワラギク: 葉は被針形で、花茎先に盛り上がった総苞片が開く。
 ムクゲ: 先が3浅裂した葉が互生し、紅紫色の5弁花が咲く。
 ムクノキ: 葉は長楕円形で、丸い核果が黒紫色に熟す。
 ムクロジ: 偶数羽状複葉、花は黄緑色で、飴色の袋に黒い核がある。
 ムサシアブミ: 3出複葉が2枚あり、あぶみ状の仏炎苞が出る。
 ムシクサ: 葉は狭被針形で、葉腋に白い4弁花が単生し、蒴果がつく。
 ムシトリナデシコ: 葉は長卵形で花は薄紅色で萼筒が長く花下の茎が粘る。
 ムシトリビランジ: 根生葉は線形で、紅紫色で花筒の長い5弁花が咲き蒴果がつく。
 ムシヨケギク: 葉は羽状に細裂し、舌状花は白く筒状花は黄色い。
 ムスカリ: 葉は細長く、ブドウの房のように青く丸い花がぶら下がる。
 ムツオレグサ: 淡緑色の小穂のついた枝が花茎に密着し細長い花序となる。
 ムニンノボタン: 葉は長楕円形で3脈明瞭で、白い花が咲き丸い蒴果がつく。
 ムベ: 葉は革質の掌状複葉で、楕円形の液果は割れない。
 ムユウジュ: 羽状複葉の小葉は長楕円形で、赤橙色の花が散形状に咲く。
 ムラサキ: 根は暗紫色で太く葉は被針形で、花冠の5裂した白い花が咲く。
 ... 後省略


 MATLABのText Analytics Toolboxでこのテキスト全体を解析してみます。まず、単語の出現頻度解析です。原文を一定の前処理を行って整形したあと、形態素解析して単語を切り出し、単語をベクトル化し、と言う手順を含みます。その結果として得られたWord Cloudが以下の図です。この結果は、単語間の相互関係には関知せず、単に単語の出現頻度の高いものを大きく表示しただけです。しかし、これだけでも、このテキスト全体の概要をよく表していると思います。

2,500の植物の特徴記述における単語出現状況 - Word Cloud

上の左図からは、「花」や「葉」や「...状」を主題として書かれたテキストであることが分かります。また、右図には、左図に項目に関する色や大きさについての形容詞が示されています。これらの図だけでも、約2,500行の文書に対するある種の要約になっていると言えるのではないでしょうか。

 次に、もう一歩踏み込んで、この文書全体を解析します。トピックモデルというやつです。難しそうですが、LDA(Latent Dirichlet Allocation)という手法が、関数呼び出し一発で使えるようになっています。これは、文書のなかから自動的にトピックスを見つける(潜在的な意味を見つける)というものです。MATLABでは、"An LDA model discovers underlying topics in a collection of documents and infers word probabilities in topics"と書かれています。 さっそくやってみます。もちろん、トピックスのキーとなる単語などは全く指定していません。結果は以下の通りでした。(幾つかのパラメータにより変動します。)


LDAにより自動的に発見(抽出)された3つのトピックス

 先に示したWord Cloudで出現頻度の高かった「花」、「葉」、「...状」を中心としたトピックスが示され、それぞれを形成する単語の出現頻度(確率)が示されています。例えば、「花」と「葉」のトピックスはちょっと微妙ではありますが、花の色や葉の形状がおぼろげながら纏められているようです。また、「...状」のトピックでは、葉や枝の付き方などの状況がある程度示されているように思われます。応用としては、これらのトピックスにある値(特性を表す単語)を手がかりに、特定の植物の特徴を与えて検索することに繋がるかも知れません。

 さらに奥へ進んでみます。Word2VecによるWord Embeddingです。だんだん、混沌とした未知の領域に入って行く感がありますが、可能性は感じ取れます。下図のように、形態素解析後の有効な単語(word)をベクトル空間へ埋め込みます。この場合のベクトル空間の次元は、形態素解析後の語彙の数になり、単語のベクトル成分は、その単語の周りにくる他の単語の出現確率を反映しているはずです。埋め込み結果の一例を以下に示します。(拡大してご覧下さい。)


 100次元ベクトルを、t-SNEによる2次元scatteringでプロットした図なので、近くに見える単語のベクトルが必ずしも近い(良く似ている)とは言えませんが、それらのベクトルの成分(単語の出現確率)のいくつかは近いはずです。一例として、図の赤枠内にある、近くにある3つの単語に関して、その出現元の文を示します。

 マルバアオダモ: 奇数羽状複葉の小葉は卵形で鋸歯不明瞭、花は白く果実は披針形。
 ハマクサギ葉は広卵形で、花は白→淡黄と変わり、丸い核果が黒紫に熟す。
 ギンバイカ葉は卵形で芳香があり、長い雄しべが多数ある白い5弁花が咲く。

確かに、3つの植物の葉の形状(卵形)と花の色(白)に共通的な記述がありました!とりあえずGoodですね。
これら3者の写真(Wikipediaより引用)も確認します。主観的にも、上記の結果は納得できそうです!