memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

Dゼミの現在地

数ヶ月前に今さらだけどDonkeyCarに興味を持ち出し、ゼミ生有志を募って勉強会を始めました。

Donkey Car

毎週、月曜日の2,3限のゼミのあと、4限(15:00〜16:30)の1時間だけ活動してきました。

ちなみに最初に思い立ったときの成功イメージは、学術的なことは置いておいてみんなでDonkeyCarの実機でレースをして楽しんでいる、でした。しかし、現実はそう甘くなかったのでした。。。💦

memorandums.hatenablog.com

まずやったのが、DonkeyCarの実行環境の整備とシミュレータの稼働でした。そもそもあまりPythonをまじめに使っていなかったのでpyenvやpipenvなどネット情報を集めて環境構築しているような状態でした。やっているうちに仕組みはなんとか理解しましたが。

memorandums.hatenablog.com

とりあえずシミュレータは動かせたんです。ただ、教師あり学習で走らせてみたもののつまらない でした。

教示した情報だけを反映して、あるいはルールベースで制御方式を記述していなくてもコースが走れるというのはNNの特性なのだとは思います。ただ、コースや環境が変わるたびにいちいち学習しなけれなならない手間があまりにも面倒でした。それでも、1名の学生が頑張ってくれてオンラインごしにシミュレータ上でレースまではできました。ただね。。。これ、動いてはいるけど自分で何かをやっている感じが全くしませんでした。

DonkeyCarのプロジェクトはまだまだ続いているようです。FBのコミュニティにも参加しましたが。でもね。。。楽しくない。面倒。これにつきます。これならリモートで自分で車をみんなで運転した方がエンタメとしては楽しく思いました。メンバー全員の感想です。

で、教師なしの強化学習の方がいいやん。。。となりまして、DonkeyCar、深層強化学習について書いているページが見つからず、海外の研究者?が公開してくれていたYouTubeをみながらみんなで写経していきました。

www.youtube.com

講義みたいなものなのでとりあえず4人で動画をみながら進めていきました。

でもね。。。配信者の通りにはならないんですね。。。うまくいかないところが出てくる。それでも仕組みの解説は全くないので、それくらいわかっている人が対象なのでしょう、なのでどこをどうすればいいかわからない。ググって解決するを少しずつ続けてはいきましたが、いよいよどうしようも前に進めなくなるところがありました。完敗です。OpenGymもついてもBaselineについても知識を持たない状態でただ写経していましたので当然の結果といえるでしょう。

そして、何より環境が古い。Python3.6や3.7であることを前提とします。M1などは3.6以降にリリースしていますのでそれに対応したtensorflowが動作しないとかもう我々のレベルではどうにもならない困難さに出会いました。

これと合わせて、せっかく思い立ったのだからDonkeyCarをいくつか買ってみんなで走らせたいとも思いました。でも、もうDonkeyCarのキットがないんですね。。。自作すればいいじゃんという記事はいくつかあるのですが、あくまでもサブのサブのプロジェクトなのでさすがにそれをやっている時間は私にも学生にもありませんでした。何より嫌な予感がしたのは、シミュレータでは強化学習するのに何度もリスタートさせることができますが、実機だとコースに戻す操作をいくどとなくする必要があると想像してしまったのです。。。この絶望感はたまらないものでした。いや、何か方法があるのだと思いたいですが、そんなことまでしてみんなでレースをしたいか?というとそうではないですからね。。。

それでも、ここまで来たんだしもう少し得るものが欲しいと思い、深層学習を手に取れる範囲のサイズで解説されているコンテンツを探しました。学生もいるので日本語で書かれたものです。で、個人的にもっとも平易に説明されているのが以下の書籍だと思いました。

これをもとに輪講を進めてきました。4,5週間くらいやったかと思います。4章までやりました。3章を解説してくれた学生が自分でQテーブルのコードを書いて解説してくれたので仕組みはちゃんと理解できました。しかし、4章に入ると途端何かが難しくなりました。とりあえず動かせるんです。。。でもどこがどうなっているか感覚が掴めない。うーん、読み進めることはできなくはないけど、読み終えたあとに何も残らない、そんな感覚がメンバーにありました。年内はもう来週月曜日で最後でしたが、「もうやめよう」ということになりました。

でも、やはり深層強化学習を何かに使いたいという気持ちはメンバーにはありました。私もです。とりあえず再度検索して以下の本を見つけました。これまた古い本なんですが。。。とりあえずポチって読み始めています。

結局、深層強化学習自体の研究がしたいわけではなく、あくまでツールとして活用したいといことを考えると、Baselineの使い方やそれを使った問題への適用方法を学ぶべきだし、学習対象としてのOpenAIGymの使い方や組み合わせ方も勉強すべきだというのがいまのところの感覚であって、それを教えてくれる本がこの本なのかな。。。というところです。

ちなみにご存知の通り、OpenAIGymは開発停止になっていますし、その後継プロジェクトのGymnasiumについて書かれた書籍はいまのところオライリーでも見つかりませんでした。

大昔、修士のときにGAに出会い、ライブラリもなかった時代でしたので、ゴールドバーグ先生や北野先生の本を読んで自分で実装して理解しました。

深層強化学習でもやろうと思えばそういう理解もできると思います。実際にそういう本もありますし買いました。

でもなぁ、パワーもないしライブラリ等が潤沢にある現在ではそんなことをチマチマ一人でやることではないな、とも思います。

こういう核心の周りをウロウロするのは新しいことを学ぶときによくやることです。昔ですが大学でJavaを教えなければならなくなったときに同じような感覚がありました。C++は書けるけどJavaはどうも理解ができない。本を買ったりIDEを入れたりして入口を探しました。理解してしまえばどうってことがないことなんですけどね。。。

自分にとって落とせない城のように。結局はいろいろなところから攻めないと本丸は取れないものです。そこまで攻め続ける情熱と時間があるかないか?学びにはセンスが必要だと実感しています。思い込みを排除して素直に理解していくことができればもっとスムーズに理解できるのでしょうけど、学び方って人それぞれだと思うんですね。

首の後ろに電極をつけて知識や経験を自由自在にロードできる。。。あのマトリクスのような体験ができるといいんですけどね。厨二病的な発想ですが。現実は日々淡々とやらなければならない。千里の道も一歩から、でした。

おしまい。