見出し画像

目的に囚われすぎずに新しいことを試す。

テストの点数がなかなか伸びない。売上目標になかなか到達できない。思うように研究が進まない。

目的に向かってひたすら邁進していても、なかなか思うように進まないということは、勉強や仕事でもよくあることです。それはひょっとしたら目的に囚われすぎて身動きが取れなくなっているのかもしれません。

そんなときは、目的とは関係ないこと、少し遠回りかもしれないと感じることをあえて試してみる。目的を達成できるかどうかとは関係なく行動することが、結果として目的を達成することがある。

そんなメッセージを示してくれるコンピュータアルゴリズム「新規性アルゴリズム」(Novelty Search)のライブラリを公開しました。

▼ 新規性探索アルゴリズムのライブラリ(developed by 斉藤拓己さん)

実は、同じような仮想生物を進化させるライブラリを数ヶ月前にも公開しています。

これら2つのライブラリは同じように見えるのですが、実装されている探索の方法が全く違います。

その違いは、目的を持った探索か、そうではないか、です。

目的を持った探索では、行動を目的と照らし合わせて評価します。もしその行動がより目的に近づいているのであればその行動をさらに進化させる、という方法です。これを目的型探索と呼ぶことにしましょう。

一方、目的を持たない探索では、行動の結果が目的に近づいているかは評価しません。その代わりに、これまでと違う新しい行動をしているかで、その行動をさらに進化させるかどうかを決めます。目的に囚われずひたすら新しい行動を選択していくのです。これを新規性探索と呼ぶことにしましょう。

これらふたつの方法で行動を進化させた場合、どちらがより目的に近づくことができるでしょうか?

直感的には、目的に近づくように行動を進化させる「目的型探索」選んだ方がよさそうです。より目的に近づくような動きを選んで、進化させることでさらに前に進めるようになるはずだからです。

この直感はある程度正しいです。多くのタスクに対して目的型探索で行動を進化させると、より目的を達成する動きが出てきます。

たとえば、次のような平な環境で仮想生物を進化させる実験を行います。
ここでの目的はより前に進むような動きを探索することです。

仮想生物を目的型探索で500世代ほど進化させた結果は次のようになります(gifをアップロードしたかったのですが、なかなか上手くいかずYouTubeに動画をアップしました)。

一方、新規性探索で同じく500世代ほど進化させた結果は次の通りです(500世代の中から最も遠くまで進むことができた仮想生物をピックアップしています)。

動画をクリックしなかった方のために結果を1枚の画像に展開した図を載せておきます。上が目的型探索の結果、下が新規性探索の結果です。目的型探索の方が新規性探索よりも、より遠くまで進めていることがよくわかります。

目的型探索
新規性探索

新規性探索では高くジャンプするというダイナミックな動きを獲得しています。ですが、高くジャンプするという行動は、より遠くまで進むという目的に大きく寄与するわけではありません。結果、目的型探索の方がより前に進むような行動につながりました。

ところが、タスクが難しいものになってくると必ずしも目的型探索でうまくいくとは限らなくなってきます。

目的に囚われずにひたすら新しい動きを探索するという新規性探索アルゴリズムで進化させた方が、より遠くまで行くことができる場合があるのです。

たとえば、前に進むためには段差を超えないといけない、少し難しい環境での実験がそのひとつです。

この環境は平面から始まります。そのため目的型探索では、まず平面を歩くために適した行動が進化してきます。ですが、この動きでは段差を超えることができないため、ジャンプするような動きを獲得しないといけません。ですが、目的型探索ではその変化にうまく対応することができず、段差を超える動きが進化しません。

一方、新規性探索では、目的に囚われずに新しい行動をひたすら探すことに注力します。その中で、より新しい行動につながるジャンプするような行動が選択されていきます。結果、段差を次々と超えて前に進むことができるようになっています。

動画を1枚の画像に展開した図での比較です。上が目的型探索の結果、下が新規性探索の結果です。今度は新規性探索の方が目的型探索よりも、より遠くまで進めていることがよくわかります。

目的型探索
新規性探索

目的を達成できるかどうかとは関係なく行動する。すると意外なところから道が開けてくる。新規性探索アルゴリズムを走らせる度に「目的に囚われすぎずに新しいことにチャレンジしよう」と思わせてくれる、私のお気に入りのアルゴリズムです。

今日も最後まで読んでくれてありがとうございました。
ciao!






この記事が気に入ったらサポートをしてみませんか?