強化学習
これだけは知っておきたい 3 つのこと
強化学習 (Reinforcement Learning) とは、機械学習の一種であり、コンピューター エージェントが動的環境と、繰り返し試行錯誤のやりとりを重ねることによってタスクを実行できるようになる手法です。この学習手法により、エージェントは、タスクの報酬を最大化する一連の意思決定を行うことができます。人間が介入したり、タスクを達成するために明示的にプログラムしたりする必要はありません。
強化学習で学習された AI プログラムは、囲碁やチェスなどのボードゲームやビデオゲームにおいて、人間のプレイヤーとの勝負で勝利を収めています。強化学習は決して新しい概念ではありませんが、近年のディープラーニングや計算能力の進歩により、AI (人工知能) の分野で目覚ましい成果をもたらしています。
強化学習、機械学習、ディープラーニングの違い
強化学習は機械学習の一分野です (図 1)。教師なし/教師あり機械学習とは異なり、強化学習は静的なデータセットに依存せず、動的な環境で動作し、収集した経験から学習します。データポイント、すなわち経験は、環境とソフトウェア エージェントの間で試行錯誤のやりとりを通して学習中に収集されます。これは強化学習の重要な特徴と言えます。これにより、教師あり学習や教師なし学習では必要とされる、学習前のデータ収集や前処理、ラベル付けが不要になるからです。つまり、事実上、適切なインセンティブがあれば、強化学習モデルは、(人間による) 監視なしに、それ自体で行動の学習を開始できます。
ディープラーニングの適用範囲は 3 種類の機械学習すべてに及び、そして強化学習とディープラーニングは相互に排他的なものではありません。多くの場合、強化学習の複雑な問題は、ディープニューラルネットワークに依存しています。これは、深層強化学習として知られる分野です。
強化学習の適用例
強化学習を用いて学習したディープニューラルネットワークでは、複雑な行動を符号化することができます。そのため、従来の方法では扱いづらかったり、取り組みが困難な用途に対して、別のアプローチが可能となります。たとえば、自動運転では、カメラフレームや Lidar 測定などの複数のセンサーを同時に確認し、運転者に代わってニューラルネットワークがハンドルの切り方を決めることができます。ニューラルネットワークがなければ、この問題は通常、カメラフレームからの特徴抽出、Lidar 測定値のフィルタリング、センサー出力の融合、センサー入力に基づく「運転」の意思決定などに細分化されます。
強化学習の手法は、運用システム向けとしてはまだ評価段階ですが、この技術は次のような産業用途に適していると言えます。
高度な制御: 非線形システムの制御は困難な問題であり、多くの場合、異なる動作点でシステムを線形化して対応します。強化学習は、非線形システムに直接適用できます。
自動運転: 画像アプリケーションにおけるディープニューラルネットワークの成功を考えると、カメラ入力に基づく運転の意思決定は、強化学習が適している分野と言えます。
ロボティクス: 強化学習は、ピックアンドプレース アプリケーションのさまざまなオブジェクトを操作する方法をロボットアームに学習させるといった、ロボットによる把持操作のような用途に役立ちます。他にも、人間とロボット、ロボットとロボットのコラボレーションなど、ロボット工学の用途は多岐にわたります。
スケジューリング: スケジューリング問題は、信号機の制御や、ある目的に対する工場の現場のリソース調整などの多くの場面で見受けられます。強化学習は、これらの組合せ最適化問題を解くための進化的手法の代替案として使用することができます。
キャリブレーション: 電子制御ユニット (ECU) のキャリブレーションなど、パラメーターの手動キャリブレーションを伴う用途は、強化学習に適していると言えます。
強化学習で使用される学習メカニズムには、実世界のシナリオが数多く反映されています。たとえば、正の強化によるペットのしつけについて考えてみましょう。
図 2. 犬のしつけにおける強化学習。
強化学習の用語 (図 2) を使用すると、この場合の学習の目的は、犬 (エージェント) のしつけ (学習) を行い、ある環境の中でタスクを完了させることです。これには、犬の周囲の環境や訓練士が含まれます。まず、訓練士が命令や合図を出し、それを犬が観察 (観測) します。続いて、犬は行動を起こすことで反応します。犬の行動が目的の行動に近い場合、訓練士は、おやつやおもちゃなどのごほうび (報酬) を与えますが、それ以外の場合、ごほうびは与えません。しつけ (学習) を始めたばかりの頃は、犬はランダムな行動を取る傾向にあります。犬は観測した特定の状況を行動やごほうび (報酬) と関連付けようとするため、与えられた指示が「おすわり」であっても、ローリングなど別の行動を取る場合があります。観測と行動の関連付け、つまりマッピングは、方策と呼ばれます。犬の立場から見ると、すべての合図に正しく反応して、おやつをできるだけ多くもらえるような状況が理想的です。そのため、簡単に言えば、強化学習のしつけ (学習) とは、犬が何らかのごぼうび (報酬) を最大化する理想的な行動を学習するように、犬の方策を「調整」することを指します。学習が完了すると、犬は飼い主を観察し、獲得した方策によって、その場にふさわしい行動 (「おすわり」と命令されたらおすわりをするなど) が取れるようになります。この時点で、おやつをあげれば喜びますが、理論的には必要ありません。
この犬のしつけの例を念頭に置き、自動運転システムを使って車両を駐車するタスクについて考えてみましょう (図 3)。目的は、強化学習によって、正しい駐車場に駐車することを車両コンピューター (エージェント) に学習させることです。犬のしつけの場合と同様に、この場合の環境はエージェントの外部にあるすべてのものを指します。たとえば、車両のダイナミクスや、近くにあるその他の車両、気象条件などがあります。学習中、エージェントはカメラ、GPS、Lidar (観測) といったセンサーの読み取り値を使用して、ステアリング、ブレーキ、加速指令 (行動) を生成します。観測から正しい行動を生成する方法を学習するために (方策の調整)、エージェントは試行錯誤を重ねながら車両の駐車を試みます。試行の良さを評価し、学習プロセスを進めるために報酬信号が与えられます。
図 3. 自動駐車における強化学習。
犬のしつけの例では、学習は犬の脳内で行われています。自動駐車の例では、学習は学習アルゴリズムによって処理されます。学習アルゴリズムは、収集したセンサーの読み取り値や行動、報酬に基づいてエージェントの方策を調整します。学習が完了すると、車両のコンピューターで、調整済みの方策とセンサーの読み取り値のみを使用して駐車できるようになります。
ここで注意すべきことは、強化学習はサンプル効率が低いという点です。つまり、学習のためのデータを収集するには、エージェントと環境との間で多くのやり取りが必要になります。一例として、囲碁で世界チャンピオンに勝利した最初のコンピューター プログラムである AlphaGo は、何百万ものゲームのプレイによる学習が、Q 学習というアルゴリズムを使いながら数日間休むことなく行われ、その結果、数千年分の人間の知識が蓄積されました。比較的単純なアプリケーションであっても、学習には数分から数時間、場合によっては数日かかることがあります。また、設計上必要な判断項目のリストがあるために、問題を適切に設定することが困難な場合があります。この場合、適切に進めるために反復が複数回必要になる場合があります。たとえば、ニューラルネットワークの適切なアーキテクチャの選択、ハイパーパラメーターの調整、報酬のシェイピングなどがあります。
強化学習のワークフロー
強化学習を使用してエージェントの学習を行うための一般的なワークフローには、以下のステップが含まれます (図 4)。
図 4. 強化学習のワークフロー。
1.環境の作成
まず、強化学習エージェントが動作する環境 (エージェントと環境の間のインターフェイスなど) を定義する必要があります。環境には、シミュレーションモデル、または実際の物理システムを使用できますが、シミュレーション環境の方が安全で、実験も可能であるため、最初のステップとして推奨されています。
2.報酬の定義
次に、エージェントがタスクの目標に対する性能測定に使用する報酬信号と、環境からこの信号を計算する方法を指定します。報酬のシェイピングは扱いづらいため、適切に進めるには反復が複数回必要になる場合があります。
3.エージェントの作成
次に、エージェントを作成します。エージェントは、方策と強化学習の学習アルゴリズムで構成されます。そのため、以下を行う必要があります。
a) 方策を表現する方法の選択 (ニューラルネットワーク、ルックアップテーブルなど)。
b) 適切な学習アルゴリズムの選択。多くの場合、異なる表現は、特定のカテゴリの学習アルゴリズムと結びついています。それにもかかわらず、一般的には、ニューラルネットワークが大規模な状態/行動空間や複雑な問題に適しているため、ほとんどの最新の強化学習アルゴリズムにニューラルネットワークが使用されています。
4.エージェントの学習と検証
学習オプション (停止条件など) を設定し、方策を調整するためにエージェントの学習を行います。学習が完了したら、必ず学習済みの方策の性能の検証をします。必要に応じて、報酬信号や方策アーキテクチャのような設計の選択を再検討し、再学習を行います。強化学習は一般的にサンプル効率が低いと考えられており、アプリケーションによっては、学習に数分から数日かかることがあります。複雑なアプリケーションでは、複数の CPU や GPU、コンピューター クラスター上で学習を並列化することで高速化できます (図 5)。
図 5. サンプル効率の低い学習問題の並列計算による学習。
5.方策の展開
生成された C/C++ コードや CUDA コードなどを使用して、学習済みの方策表現を展開します。この時点で、方策は、スタンドアロンの意思決定システムを指します。
強化学習によるエージェントの学習は、反復的なプロセスです。学習ワークフロー後半の意思決定や結果によっては、ワークフローの初期段階に戻る必要がある場合があります。たとえば、学習プロセスが妥当な時間内に最適な方策に収束しない場合は、エージェントの再学習を行う前に以下のいずれかの更新が必要になる場合があります。
- 学習設定
- 強化学習アルゴリズムの構成
- 方策表現
- 報酬信号の定義
- 行動信号および観測信号
- 環境のダイナミクス
MATLAB® や Reinforcement Learning Toolbox™ を使用して、Q 学習など強化学習タスクを簡略化することができます。強化学習ワークフローのすべてのステップを実行することにより、ロボットや自律システムなどの複雑なシステムのためのコントローラーや意思決定アルゴリズムを実装できます。具体的には、以下を行うことができます。
1.MATLAB および Simulink® を使用した環境および報酬関数の作成
2.ディープニューラル ネットワークや多項式、ルックアップテーブルを使用した強化学習方策の定義
図 6 Reinforcement Learning Toolbox™ を使用した二足歩行ロボットの歩行訓練
3.わずかなコード変更による一般的な強化学習アルゴリズム (DQN、DDPG、PPO、SAC など) の切り替え、評価、および比較や、独自のカスタムアルゴリズムの作成
4.Parallel Computing Toolbox™ や MATLAB Parallel Server™ で複数の GPU、複数のCPU、コンピュータークラスター、およびクラウドリソースを活用した強化学習方策の学習の高速化
5.MATLAB Coder™ および GPU Coder™ によるコードの生成と、組み込みデバイスへの強化学習方策の展開
6.参照例を使用した強化学習の開始。