2018.07.20

深層強化学習でマルチエージェント学習してみた

Pocket

次世代システム研究室のJK(男)です。よろしくお願いします。

前回のブログは、この論文この論文を参考に、マルチエージェント(複数エージェント)学習の実験を行いました。前回のブログを軽くサマると、実験1で論文で使用されたライブラリに付属している複数のシナリオ(ゲーム)を試して、MADDPGという手法の有用性を確認しました。実験2では、このライブラリを利用して新しいゲーム(suikawari)を自作し、目隠しされたagentが他のagentの指示に従ってスイカにまで辿りけるように学習できることを確認しました。これはMADDPGにより、効率的にagent間で言語の伝達の学習が行われたからだと考えることができました。

今回も引き続き、前回使ったライブラリを用いてゲームを自作して、マルチエージェント強化学習の実験をしてみたいと思います。強化学習は、正解のない世界でベターな方法を模索する手法でしたね。具体的な説明は以前のブログなどを見て下さい。マルチエージェント強化学習、使用したライブラリの説明については前回のブログを見てください。ここではそれらの説明はすっ飛ばして、Section1で今回行った実験環境の説明、Section2, 3, 4で今回行った実験の結果と考察を行い、Section5でまとめをします。このブログでは行った実験のハイライト部分を紹介します。他の実験結果については、githubにまとめてありますので、興味のある方は参照してください。

1. 実験環境

前回と同様、OpenAIによって開発されたマルチエージェントの実験環境と、マルチエージェント強化学習を行うアルゴリズムのライブラリを使って実験を行います。実験環境はMAPEです。詳しくは前回のブログを観てください。MAPEの良い点は、レゴブロックのようにagent, goalなどを組み立てることで、簡単に新しいシナリオ(ゲーム)を自作できるところです。今回は wanderer1wanderer2というゲームを自作して、深層強化学習の一種であるDDPGというアルゴリズムを用いてagentを学習させました。前回と異なり、今回の実験ではMADDPGではなくDDPGを用います。つまり他のagentの動きは(featureとして入らない限り)わからない、普通の強化学習のアルゴリズムを使います。wanderer1とwanderer2の全ての実験はgithubのexp7–11に上げてあり、今回紹介する実験1はexp7、実験2はexp10、実験3はexp11にあります。以下では、その一部の結果を紹介します。

2. 実験1 (wanderer1_1agent)

いきなりマルチエージェントだとわかりづらいので、イントロダクションも兼ねて1 agentの場合を実験します。

ゲームの説明

  • 構成要素:
    • 1 agent
    • 1 goal
  • 観測情報:
    • agent自身の速度 + “agentからゴールへの方向”(注:下記参照
      • スタート時のagentは視界がないため、ゴールの方向はわからない。
      • Agentは”energy”という変数を内部に持っている。
      • “energy”を消費した分だけ、agentの周囲の視界が広く見えるようになっていく。
      • 視界の範囲内にゴールが入ると「ゴールの方向」が情報として入力される。
  • 行動:
    • 移動 (上 or 下 or 左 or 右 or ニュートラル) + energy消費の選択(A or B)
      • A: “energy”を消費 (energy -= 1)
      • B: 何もしない
  • 報酬:
    • agentがgoalに近づくほど高い報酬
    • “energy”の累積消費分だけ負の報酬(-1 * PENALTY_WEIGHT * energy累積消費)
    • “PENALTY_WEIGHT”はパラメータで、”energy”消費のペナルティの重みを調整
ざっくり言えば、energyを消費して視界を広げるほど、ゴールを見つける確率が上がります。しかしenergyを消費するほど負の報酬が増えます。視界の確保と報酬のトレードオフがあるのですね。

実験1-1 (PENALTY_WEIGHT=0)

上の説明だけだと分かりづらいと思うので、実際の学習結果を使いながら説明していきます。下の動画が学習後のagentです。さらに下の図は動画に対応した図です(詳しい内容は以下で説明します)。


まず動画ですが、動いている大きな丸がagentで、黒色の小さな点がゴールです(ゴールは動きません)。Agentの周囲に広がる半透明の円がありますが、これが上のルールで説明したagentの”視界”です。最初、agentの視界はありませんが、時間経過(step)ごとに視界が広がっていきます。視界が十分に広がり、ゴールを視界に捉えるとagentがゴールに向かって動くのが確認できますね。

動画の下の図は、動画でagentが消費したenergyの累積値です。1回のstepでenergyは1消費することが可能で(消費しない選択もできる)、このゲームでは1 game = 50 stepsなので、energyを毎step消費すると1 gameで-50まで消費されます。50 stepごとに1 game終わるので、energyが0にリセットされているのがわかりますね。動画では5 gamesしています。

実験1-1ではPENALTY_WEIGHT=0なので、energyをいくら消費してもペナルティ(負の報酬)がありません。したがって、energyを使いまくって視界をガンガン広げるのが得策です。実際、そのように学習されているのが確認できます。

実験1-2 (PENALTY_WEIGHT=0.02)

次に、PENALTY_WEGHTを0から0.02に上げます。



視界を確保しないことにはゴールの位置がわからないので、最初はガンガンenergyを消費して視界を広げていきます。ただしゴールを見つけた後は、それ以上の視界はいらないのでenergyの消費をやめます。実験1-1と異なりPENALTY_WEIGHT>0なので、energyを消費した分、負の報酬が増えてしまうからです。無駄な消費をやめることで、負の報酬を小さくすることを学習しましたね。期待通りの学習と言えます。

実験1-3 (PENALTY_WEIGHT=0.1)

次に、PENALTY_WEGHTを0.02から0.1まで大きく上げます。


PENALTY_WEIGHTが大きすぎるため、energyを消費することによる負の報酬の方が、ゴールに近づく報酬よりも大きくなったようです。そのためagentはenergyを消費してゴールを探すのをやめて、その場から動かなくなってしまいました。これも期待通りですね。

3. 実験2 (wanderer2_2agents)

さてここからマルチエージェント学習に入ります。といっても最初は2 agentsです。ゲームもwanderer1からwanderer2に切り替えます。Agent数が1→2になった以外のルールはほぼwanderer1と同じですが、異なる部分もあるので以下で説明します(ちなみにwanderer1でマルチエージェント学習した結果についてはexp8exp9にあります)。

ゲームの説明

実験1からの変わった場所は太字になっています。
  • 構成要素:
    • 2 agents
    • 1 goal
  • 観測情報:
    • agent自身の速度 + agentからゴールへの方向 + “他のagentへの方向”(注:下記参照)
      • 「agentからゴールへの方向 」の特性は変化なし(energyも)。
      • Agentは”energy”の他、”attention”という変数も内部に持っている。
      • “attention”を消費した時だけ「他のagentへの方向」が情報として入力される。
  • 行動:
    • 移動 (上 or 下 or 左 or 右 or ニュートラル) + energy消費の選択(A or B or C
      • A: “energy”を消費 (energy -= 1)
      • B:”attention”を消費 (attention -= 1)
      • C: 何もしない
  • 報酬:
    • agentがgoalに近づくほど高い報酬
    • “energy”の累積消費分だけ負の報酬(-1 * PENALTY_WEIGHT * energy累積消費)
      • “PENALTY_WEIGHT”はパラメータで、”energy”消費のペナルティの重みを調整
    • “attention”の累積消費分だけ負の報酬(-1 * PENALTY_WEIGHT2 * attention累積消費)
      • “PENALTY_WEIGHT2″はパラメータで、”attention”消費のペナルティの重みを調整
注意点としては、
  • energyを消費→ゴールを見るための視界が広がる
  • attentionを消費→(その次のstepだけ)他のagentの位置が完全にわかる
    とそれぞれのパラメータの消費で、異なる振る舞いをします。
    また、energyとattentionの消費は同時にはできません(どちらか一方、またはどちらも消費しない、から選択)。

    実験2-1 (PENALTY_WEIGHT=0, PENALTY_WEIGHT2=0)

    まずは、energyとattentionどちらのペナルティも0の場合のゲームです。下記が学習後のagentです。動画の下の図は、各stepごとのenergy(棒線)とattention(点線)の値です。動画のagentの色とプロットの色は合わせています(ここでは、agent0が赤、agent1が緑)。



    このパラメータセットでは、attentionを消費せずにenergyを消費した方が良いようです。ペナルティを受けないならenergyをとにかく消費して視界を広げ、直接ゴールを見る方が(報酬の期待値が)良いのでしょう。

    補足ですが、複数回(異なるseedで別々に)学習すると、学習結果が若干異なることがあります。実際、今回の実験でも結果がゆらぐ事があります。これは強化学習ではよくあることで、定量的に評価するときなどは、多くのseedで学習した結果の平均値などを使う事が多いです。この実験では厳密な評価をするのが目的ではないので、そこまではしません。実際の実験では異なるseedで3回学習していますが、このブログでは代表的な1つを選んで説明しています。他の場合は、githubのノートで見ることができます。

    実験2-2 (PENALTY_WEIGHT=0.01, PENALTY_WEIGHT2=0)

    実験2-1ではenergy消費にペナルティがなかったので、ほぼenergy消費するという学習結果になりました。ここではenergy消費に(適度に)ペナルティをつけてみましょう。適度に、というのが重要ですね。低すぎるとペナルティをつけていないのと変わらないし、高すぎると全くenergy消費をしなくなるので、その中間というイメージです。この実験では、attention消費にはペナルティをつけないままにします。学習した結果が以下です。



    動画だけだとわかりづらいので下の図も参考にしてもらいたいのですが、2つのagentともenergyとattentionどちらも適度に消費しながらゴールを目指すように学習しています。まず最初にenergyとattention交互に消費することで、視界を広げつつ相手のagentの位置も把握して相手agentに近づきます。ある程度まで視界が広がるとゴールが見えるので、ゴールを目指します。この実験では、attentionを消費してもペナルティにはなりません。しかしattention消費という行動を選択したstepでは、energy消費はできず視界を広げる機会を逃しています。視界を広げずに相手の位置を探るとどんな良いことがあるのか?実は相手がゴールを先に見つけていた場合、相手に近づくことで(自分の視界にゴールがなくても)ゴールに近づけるんですね。energy消費にペナルティがあるため、一人でガンガンenergy消費して視界を広げるより、(相手もゴールを探していると期待して)相手に近づくことで、ゴールを(少ない負の報酬で)見つけようという戦略のようです。この戦略がこのパラメータセットでは最適解のようで、どちらのagentもこの戦略に収束しています。

    実験2-3 (PENALTY_WEIGHT=0.01, PENALTY_WEIGHT2=0.005)

    さて最後にattentionの消費にもペナルティを入れます。ただしenergy消費のペナルティよりは低めに設定します。実験結果は以下です。



    若干attentionを消費して相手の位置を探る場合がありますが、energy消費が主ですね。attention消費にペナルティがついた分、attentionを使うモチベーションが下がりました。期待通りの結果といえるでしょう。

    実はもう一つ別の(seedでトレーニングした)結果があります(以下)。



    このケースでは、agent1(緑)がほぼenergyを消費せず(=自力でゴールを探そうとせず)agent0(赤)に追従します。相手に乗っかる戦略ですね。この戦略は相手がゴールを探す戦略を取っていないと成り立ちません。もし相手も視界を広げずattentionしか消費しない場合、誰もゴールの位置を知らないことになり全員不幸になります。一方でもし相手が自力でゴールを探してくれる戦略を取るなら、”乗っかり戦略”も立派な戦略となります。囚人のジレンマみたいですね。ただしこのパラメータの場合、agent0(乗っかる戦略)の方がagent1より報酬の平均値は小さくなるので、基本的にはこの”乗っかり戦略”をとる事は少ないようです。

    実験2のまとめ

    Agentが取る戦略を大雑把に分けると、以下の3つになります。
    1. independent:主にenergyを消費して(他のagentは気にせず)独立してゴールを目指す。
    2. follower:主にattentionを消費して、ゴールの位置を知る他のagentに追従してゴールを目指す。
    3. hybrid:energyとattentionをどちらも適度に消費。相手の位置も利用しながら、自分の視界も広げゴールを目指す。
    実験2-1ではagentはどちらもindependent戦略で、実験2-2ではhybrid戦略。実験2-3の最初のケースはindependentで、2つ目のケースはindependentとfollowerになりました。実際の実験では、何度か(別seedで複数回)agentを学習させましたが、followerが現れることは少なかったです。これは、followerの期待値がindipendent/hybrid より小さいからのようです。実験2においては、基本的に定めたパラメータセットごとに最適の戦略(independent / hybird)があるようで、2つのagentともその最適の戦略に収束していく傾向が見えました。

    4. 実験3 (wanderer2_4agents)

    実験3では、実験2のセットアップと同じwanderer2を使いますが、agent数を2から4に増やします。では異なるパラメータごとの結果を見ていきましょう。

    実験3-1 (PENALTY_WEIGHT=0, PENALTY_WEIGHT2=0)

    まずenergyとattentionどちらにもペナルティがない場合です。



    Agent数が増えてすこしわかりづらいですが、動画の下の図も参考にしつつ読み解いてみると、(”実験2のまとめ”で定義した戦略名を使います) 1 independent(緑エージェント) + 2 hybrid(オレンジ、青エージェント) + 1 follower(赤エージェント)という結果になりました。independent戦略のみだった2agentの場合(実験2-1)と比べると多様性が発現しました。実はこのケース、followerが得ている報酬の期待値が高いんです。followできるagent数が増えたことで、ゴールを見つける確率が上がったのでしょう。面白いですね。

    実験3-2 (PENALTY_WEIGHT=0.01, PENALTY_WEIGHT2=0)

    次にenergy消費のペナルティだけ0から0.01に上げます。



    結果は、2 hybrid(赤、青) + 2 follower(緑、オレンジ)です。実験3-1よりenergy消費を抑える傾向になり、independentはいなくなりました。面白いのは、4agentsのうち半分がfollower戦略を取っていることですね。実際の実験では3回(別seedで)学習してみましたが、いずれの場合も2~3 followerが現れました。

    なぜこんなにfollowerが多いのか?学習過程に秘密があるようです。学習初期、全てのagentは(energy消費はペナルティがあり)attention消費はペナルティがないため、attentionを消費する事を学習します。しかし全員attentionを消費しても、energy消費をしていないので視界が広がらずゴールがわかりません。したがって報酬は小さいままです。ところが、ある時点でいくつかのagentが「あれ?energy消費をすると視界が広がってゴールが見つけられるんじゃね?」と気づきます。そしてenergy消費を学習し、報酬を増やしていきます。一方で、相変わらずattentionのみ消費するagentもいます。ところが彼らfollowerは、ゴール位置を知っているagent(independent / hybrid)に追従するので、independent / hybridの報酬が上がるとfollowerの報酬も上がることになります。

    学習初期に、偶然にもenergy消費を覚えたagentが現れ、変化せずそれに追従することを選ぶagentと共存することになり、学習が進むにつれてhybridとfollowerへと生態が分化していったようです。なんか生物の進化みたいで面白いですね。

    実験3-3 (PENALTY_WEIGHT=0.01, PENALTY_WEIGHT2=0.01)

    最後にattention消費のペナルティの重みをenergy消費と同じにします。2 agentsであれば、independent戦略一択になるところです。4 agentsのこのケースではどうなるのでしょうか?



    なんとこの場合でもfollower戦略をとるagentがいます。attention消費のペナルティはenergy消費と同じなのに(笑)不思議なことに、このときでもfollowerはindependentに匹敵する報酬を得ることができています。

    実験3のまとめ

    実験2の2 agentsの場合の比べ4 agentsにエージェント数が増えたことで、多様性が出てきました。特に(自分ではゴールを探さず)他のagentにただ追従するfollowerが多くのケースで見られました。なんと、消費ペナルティがenergyとattentionで同じでもfollowするagentも現れました。しかもfollowerの報酬期待値がindependent / hybridの場合よりも高い場合もあります。

    この状態、どこかで見たことあるな。。 我々の社会も似たようなことが起きてますね。independent / hybridがいないことには全agentの報酬が上がることはない。だから彼らは絶対に必要な存在です。一方で彼らに乗っかるfollowerは他のagentには貢献しないのですが、彼らよりも高い報酬を受取る場合があります。一生懸命働くことで良い成果を出すagentが増えると、それに乗っかるagentを生み出すことになる。しかもfollowerの方が高い報酬を得る場合がある。だからといって全員followerになろうとすると、今度は全員の報酬が大きく下がる結果になります。これは一種のジレンマです。我々人間はagent達ほど人間できてないので(笑)、「followerはズルい!」と思ってしまいますね。

    5. まとめ&余談

    OpenAIによって開発されたマルチエージェントの実験環境用のMAPEMADDPGを用いて新しいゲームwanderer1とwanderer2を作り、実験を行いました。

    実験1–3でagent数と消費ペナルティのパラメータを変化させて実験を行いました。実験の結果、agent数が1→2→4と増える毎にagentの振る舞いに多様性が発現することを見つけました。「数が増えたんだから多様になるのは当たり前では?」と思われるかもしれませんが、ここで面白いのは全てのagentは完全に同じ(平等)である、という点です。例えば人間社会を考えると、もって生まれた能力(才能)も違うし教育機会なども違う。だから他人と自分が異なるのは当然だって思いますよね?だから人間社会は多様になる、と。でもこの実験の場合、全てのagentは学習するネットワーク構造(= 才能)は同じで、学習環境(=教育機会)も(ランダムに初期位置を変えているだけなので)期待値としては平等です。つまり全くの同一・平等なんです。それでも学習途中のランダムに配置された位置とか、学習する際のランダム性によって、学習途中でagentの戦略が分化していきます。結果として、全く平等な集団のagentにおいても、agent数が多い場合は多様性が発現するのです。つまり、多様性というのはマルチエージェントなシステムに必然的に内包されたものなんですね。これっ面白くないですか?結局、人間社会が多様なのも、個々人の才能・環境の違いだけでなく、そもそも自然の本性として内包されたことなのだと。もちろん生命が多様なのもそういう解釈ができます。

    ちょっと話が大きくなりすぎましたね。。とはいえ、今回の実験のモチベーションは上記のことを調べたかったからです。人の社会は階層化していったけど、結局これって偶然で起きたことなのか、それとも必然で起きたことなのか?上記の仮説をそのまま当てはめると、階層(少なくとも多様性)が生まれるのは(マルチエージェントな社会システムができたら)必然で、だけど誰がトップになり誰がfollowerになるかは偶然で決まるってことになりますね。まぁ実際のシナリオはこんなに単純化はできないでしょうが(笑)

    実験の結果に戻ると、もう一つ面白い発見点としては、たとえば一度followerなどの戦略を取ってしまうと、その戦略からhybridなど別の戦略に移行するのは難しいようです。たとえfollowerよりhybridの期待報酬が高くてもです。期待報酬が高いんだから機械的に学習して移行するのでは?と思いますが、おそらくfollower→hybridの途中の戦略の報酬が低くなっていまうため、gapができてしまい移行が難しくなるようです。これって人間社会でもありがちですよね。今の職場では先が見えているので別の職場に移動したいけど、今の職場に最適化してしまい、違う職場に適応するにコストが発生するため動くに動けない、みたいな(笑)

    今回の実験で、ものすごく単純なルールであってもマルチエージェントにして学習することで、色々な知見が得られることがわかりました。複雑に見える我々の社会も、意外と単純な原理で動いているのかもしれませんね。そう思うとワクワクしませんか?

     

    次世代システム研究室では、ビッグデータ解析プラットホームの設計・開発を行うアーキテクトとデータサイエンティストを募集しています。ご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。