進化計算と強化学習の紹介

ここでは,私達が研究の対象としている「進化計算」や「強化学習」を紹介します.

進化計算と強化学習の紹介:船舶の自動着桟を例に

私達が応用研究として大阪大学のグループと共同で取り組んでいる「自律運航船の実現に向けた研究」を例にとり,進化計算や強化学習を紹介します.

自動着桟

自律運航船の実現に向けた重要な技術要素の一つとして,「自動着桟」が挙げられます.着桟とは,船舶を桟橋や岸壁の目標位置に安全に停泊させることを指します.大型船の着桟の様子は,大阪大学のグループが公開している動画を参照ください.自動着桟とは,自動的に着桟を実現する技術を指します.自動着桟を実現するためには,時々刻々と変化する制御対象となる船舶の状態(位置や速度など)と周りの環境(障害物や気象状況など)を観測し,次に取るべき制御信号(舵角やプロペラ回転数)を定める「ルール」を定める必要があります.船の状態や環境の状態をまとめて「状態 s」と呼び,制御信号を「行動 a」と呼ぶことにします.このとき,前述の「ルール」は,状態 s を入力にとり行動 a を出力する関数,もしくは各状態 s で各行動 a の選択確率を定める確率分布,などとして表すことが出来ます.これは「制御則(controller)」や「方策(policy)」などと呼ばれます.自動着桟を実現するということは,それを実現する方策を獲得する問題に帰着することになります.

強化学習

さて,方策はどのようにして獲得すれば良いでしょうか.その一つの方法が「強化学習」です.強化学習は,試行錯誤を繰り返していくことで,最適な方策を学習するための方法です.強化学習では,学習主体をエージェント,それ以外を環境と考えます.自動着桟の場合には,船舶がエージェント,それ以外が環境ということになります.船舶は何らかの方策に従って,行動を決定し,行動を取ります.その結果,船舶は動くことになります.また,行動とは無関係に風環境などの状態も変化することがあるでしょう.このようにある状態sである行動aをとったときに次の状態s'に変化することを,状態遷移と呼びます.状態遷移をすると,エージェントは次の状態を観測し,同時に現状態の良さを表す報酬を受取ります.なお,報酬は基本的に使用者が設計することになります.エージェントはこの情報をもとに得られる報酬が高くなるように方策を改善します.これを繰り返していくことで,得られる報酬を最大にするような方策を学ぶ方法が,強化学習です.

自動着桟の場合,実は単純に強化学習を適用することは現実的ではありません.強化学習では,試行錯誤を繰り返しますが,現実環境で試行錯誤を繰り返した場合,学習途中で必ずしも適切ではない行動をとってしまうかもしれません.これは,船舶が桟橋に衝突するなどの安全上の重大な懸念があります.また,実際に船舶を動かして学習するためには,金銭的・時間的なコストが膨大にかかります.これらの問題点に対する一つの解決策として,船舶の運動モデルを表すシミュレータを設計し,シミュレーション上で強化学習を実施する方法があります.この方法であれば,安全でない行動をとったとしても,シミュレーション上でクラッシュするだけであり,学習中における安全性の懸念はなくなります.また,一度シミュレータを設計してしまえば,金銭的にも時間的にもコストを大幅に削減することが出来ます.一方で,シミュレータが完璧では無い,などといった問題もあります.これについては重要な研究課題であり,我々も取り組んでいるところです.

進化計算

上の項目においてシミュレータを設計すると書きましたが,船舶の運動モデルを表すシミュレータを設計すること自体に難しさがあります.シミュレータは,船舶のある状態である行動をとったとき次にどの状態に遷移するのかを定める運動方程式(微分方程式)を数値的に解くことになります.船舶の運動方程式を表す代表的な数学モデルはあるものの,運動方程式の係数を正しく決定することは容易ではありません.そこで,実際の船舶の運動の軌跡(ある状態sである行動aをとったときに次の状態がs'になったという履歴)を沢山集めておき,実際に観測された軌跡を再現できるような係数を求める,といった逆問題を解くアプローチが取られています.このような逆問題をシステム同定などと呼びます.システム同定では,係数の組 x を与えると,その係数を用いて船舶の運動をシミュレートして実際に観測された軌跡との差を目的関数 f(x) とした,最適化問題 min_x f(x) を解くことが目的となります.このとき,係数の組 x と目的関数の値 f(x) は数学的に陽に書き下すことは出来ないため,「ブラックボックス最適化」などと呼ばれます.

「進化計算」は,ブラックボックス最適化を数値的に解くための方法の一つです.強化学習と同じ様に,進化計算も試行錯誤を繰り返しながら解を求める方法です.もとは生物の進化の過程に着想を得ており,個体群の環境への適応を模倣するように突然変異や交叉,自然淘汰といったプロセスを最適化に応用したものですが,近年では数学的な解釈も与えられるようになるなど,洗礼されてきています.進化計算,特に進化戦略(Evolution Strategy)と呼ばれる方法では,正規分布から解の候補を複数生成し,それぞれの目的関数値をシミュレーションにより計算します.計算された目的関数値を用いて,次に生成される解候補の目的関数値の期待値が改善されるように,解を生成する正規分布のパラメータ(平均ベクトルや共分散行列)を更新します.これらのステップを繰り返すことで,正規分布を最適解へと収束させることが目的となります.

進化計算の強みは,目的関数に関する知識を必要としないこと(利用しやすさ)や一般に計算コストのボトルネックとなるシミュレーションを並列評価しやすい点が挙げられます.強化学習が対象としている方策の最適化も,ブラックボックス最適化の一種と見なすことができ,一般の強化学習が苦手とするタスクにおいて強化学習の代わりに進化計算を用いる,ということも行われています.他方,目的関数の知識を使わないことで比較的多くの目的関数評価を必要とするといった課題や,最適性の保証が限られているなどといった課題もあり,我々もこれらの課題に取り組んでいます.

進化計算と強化学習の紹介:Video Game を例に

Video Gameにおける「レベル(ステージやマップ)生成」や「AIエージェント」を例に,進化計算や強化学習を紹介します.

機械学習と進化計算によるVideo Gameのレベル生成

Video Gameのレベル生成における進化計算の応用事例を紹介します.Video Gameのレベルとは,プレイヤーがプレイするステージやマップのことを指します.Video Gameのレベルを生成する際,そのレベルがプレイ可能であること(開始と同時にゲーム終了となってしまったり,ゲームを攻略することが不可能とならないこと)が最低限要請されます.加えて,プレイヤーの実力に対して適切な難易度であることや,プレイヤーにとって面白いと感じるようなレベルを生成することが求められます.前者については,生成されたレベルに対して形式的に評価することが可能です.しかし,後者二点のついての「望ましさ」は,生成されたレベルにおいてプレイヤーが実際にプレイを通して評価するか,既存のAIエージェントにプレイさせた結果を評価するなどの方法が必要となります.このとき,「生成されたレベル」とその「望ましさ」の関係はブラックボックスとなり,「望ましさ」を最大化するようなレベルを見つけ出す「ブラックボックス最適化」が必要となります.ここで,進化計算が活躍します.レベルの生成とその評価を繰り返すことで,望ましさの高いレベルを生成することが可能です.

ここでは,Science Birds(Angry Birdsの研究用クローン)のレベル生成を行った我々の研究 [Tanabe et al., GECCO2021][田邊ら, JSAI2021]を紹介します.まず,機械学習技術の一つであるSequential VAEと既存のレベルのデータセットを用いて,実数ベクトル x を入力するとそれに対応するプレイ可能なレベル L を出力する関数 G を学習しておきます.この関数をデコーダーなどと呼びます.デコーダーへの入力 x が変われば結果として生成されるレベル L = G(x) が変わり,その望ましさ U(L) はAIエージェントもしくは人力によって評価されます.進化計算は,Lを直接最適化する代わりに,xを最適化します.これにより,「プレイ可能である」という制約を常に満たすようにしながら,望ましさの高いレベル(に対応するx)を探索することが可能になります.デコーダーへの入力 x は実数ベクトルであり,実数ベクトルを最適化対象とする進化計算として広く利用されているCMA-ESというアプローチを用いて,関数 f(x) = U(G(x)) を最大化しました.CMA-ESは,候補となる解 x を正規分布から一度に複数生成し,その中から目的関数値が望ましいと判断された解集合を用いて,解候補を生成するための正規分布のパラメータ(平均ベクトルや共分散行列)を更新します.統計学的な観点から,パラメータ更新方法が設計されています.これを繰り返すことで,目的関数値が高い(最大化の場合)解の領域へと正規分布を収束させていきます.

以下の動画は,生成されたレベルをAIエージェントがプレイしている様子です.このレベルは,的(ブタ)とブロックの数は多く,しかし,1ショットで的だけを全て破壊できるように生成されています.レベルの評価(目的関数値)は,生成された各レベルに対してAIエージェントを実行し,その結果残った的の数やそれ以外のブロックの数をもとに計算されています.この目的関数f(x)はxの関数として明示的に書き下すことができないことは,容易にわかるかと思います.このようなブラックボックスな目的関数であっても解を発見できることが,進化計算の強みになります.

angrybirds.mov

強化学習によるAIエージェントの学習

AIエージェントを設計する場合には強化学習の出番です.上記のScience Birdsを例にあげれば,AIエージェントは現在のレベルの状態(ブロックの配置状況や残っている鳥の数)に基づいて,次に取るべき行動(鳥を撃つ方向や強さ)を決定することが求められます.この状態を観測し,行動を決定するルールである「方策」を,試行錯誤を通して学習していきます.方策は,「報酬」と呼ばれる,状態と行動の組に対して与えられる良さの指標をもとに,学習されていきます.例えば,的をできるだけ多く壊すことを最優先するならば,破壊した的の数を報酬とすれば良いかもしれません.また,他のブロックを壊さないように的を壊すようなエレガントな方策を学習したければ,破壊した的の数から破壊した的以外のブロック数に小さな値をかけたペナルティを引いた値を報酬とすることが考えられます.強化学習では,ある状態で何らかの行動を取り,その結果得られる報酬をもとに,得られる報酬が高くなるように方策が学習されていきます.このように,各状態でどの行動を取るべきか,といった正解を教えてもらうことなく,得られる報酬を最大化するように方策を学習していくことが,強化学習の特徴です.

一方,望ましい方策を得るためには報酬を上手く設計する必要があり,その難しさが強化学習の実用上の課題の一つに挙げられます.これに対しては,プロフェッショナルな人の行動系列からその人が用いていると思われる報酬を推定し,これを用いて強化学習を行う逆強化学習と呼ばれるトピックが研究されています.

強化学習を用いてゲームのAIエージェントを学習させる場合,もう一点重要な点があります.それは,学習時に経験したレベル以外では,学習された方策が必ずしも望ましい性能を示さないという点です.この課題が,強化学習における「汎化」の問題として知られています.これを回避するために,学習時に多様なレベルを経験させておく必要があります.そのために,レベルの自動生成を行う方法が活用されます.また,今の方策にとって困難なレベルを効率よく学習させるための枠組みなども研究されています.

自動機械学習の紹介

上述の強化学習や,より一般の機械学習は,近年非常に広い応用を見せています.しかし,強化学習や機械学習を用いる場合,利用者が定めなけれなならないパラメータが複数あります.これをハイパーパラメータなどと呼びます.このハイパーパラメータを適切に設定することが,強化学習や機械学習のアプリケーションを成功させるために重要な要因となりますが,これは多くの場合に困難な問題となります.ハイパーパラメータの組 x とそのハイパーパラメータを用いて学習された結果の性能 f(x) の関係はブラックボックスとなるためです.そこで,適切なハイパーパラメータの組を,探索的に求める技術を総称して「自動機械学習(AutoML)」と呼びます.AutoML技術によって,近年発展の目覚ましい機械学習(特に深層学習)や強化学習の導入加速につながることが期待されています.また,AutoML技術そのものにも,強化学習や進化計算の技術が広く用いられています.