"機械学習","信号解析","ディープラーニング"の勉強

HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学などをテーマに扱っていきます

【ここまで分かれば概要を理解できる】強化学習問題の基本的考え方

 

 

f:id:s0sem0y:20170502022914p:plain

 

これまでの記事について

強化学習の狙いや他の手法との違い

 強化学習がどのようなケースに対応していようとしているのか、強化学習だからこそできる他にはない旨味を抑えておくことで、理解が容易になります。

s0sem0y.hatenablog.com

 

強化学習の基本となる行動価値関数

 強化学習では行動価値関数に従って行動の選択を行います。その行動価値関数なるものが如何にして構築されるのかを見てみましょう。

s0sem0y.hatenablog.com

 

基本的なまとめと、この記事を読む上での事前知識

強化学習では、行動価値関数Q_t(a)を考慮して、行動aを決定します。その行動価値関数は、まずは試行錯誤によって、それぞれの行動から報酬をとりあえず獲得してみることで見積もられます(それぞれの行動価値が、それまで得られた報酬によって推定される)。

 

ある程度の見積もりを得た後、更に強化学習では行動価値関数の推定と、実際に行動を取ることを同時に行っていきます。既に知られている良さそう方法を選ぶのか、失敗のリスクはあるがもっと良い価値があるのではないかと、他の選択肢を探ってみるのか、これらのバランスも重要です。俗に、知識の「利用」をするのか、知識の「探査」をするのかのバランスが大事だということです。

 

突き詰めれば、強化学習というのは、利用をするのか探査をするのかを含めた「方策」を決定していくことです。

 

方策というのは複数の選択肢がある中で、どれを選ぶのかを決める基準です。知識の利用をする確率を高く設定しておくのか、探査をする確率を高くしておくのか、あるいは探査をするにしてもどのような選択肢について調べてみるのか、方策はこれらを含めて、選択肢から選択を行う基準を定めます。

 

 

f:id:s0sem0y:20170502012611p:plain

 

行動価値関数が、行動を繰り返していくうちに推定が進んでいくのと同じように、状況に応じて方策を変えていく必要もあります。

 

例えば1000回しかプレイできないn本腕のスロットにおいては

 

  • 各腕の価値を推定する
  • 1000回のプレイで得られる報酬を最大化する

 

ことが同時に必要となります。

 

例えば最初の100回は、価値見積もりのために使うとして、その後の選択は、価値の見積もり精度を高めることに使う(探査する)のか、既に価値が高そうだと分かっているもののみを選択する(利用する)のかは、残りプレイ回数に依存するでしょう。極端な話、1000回目のプレイでは大抵の人は利用の方を選択するはずであり、プレイ経過と共に方策の変更が必要なのは明らかです。

 

 

強化学習は、どのように方策を書き換えていくのか(利用と探査)と方策をどのように決定するか(価値をどのように反映するか)がポイントになってくるのです。

 

強化学習問題

強化学習問題の図式化

強化学習の簡易版

まず強化学習問題の簡易版を見てみます。

何らかの行動を選択する(つまり学習を行っていく)ものを、エージェントと呼びます。エージェントは行動を選択して、報酬を実際に確認しながら、価値の見積もりと方策の書き換えを行っていきます。そして行動を受け取って、報酬を返してくれる相手を環境と呼びます。

例えばn本腕スロットにチャレンジする人間はエージェントであり、スロットは環境に対応します。

 

f:id:s0sem0y:20170502014947p:plain

 

これが今まで説明してきた強化学習に関する話を図式化したものです。ここでは、エージェントの目的は、「方策に従い行動を選択し、行動価値関数を上手く調整していくこと」と「最終的な総報酬が大きくなるように、方策自体も変えていくこと」です。

 

単純な例は、3本腕のスロットで報酬額を最大にしたいが、それぞれの価値が分からない状態で、価値を見積もりながら、腕の選び方も調整していきたいというものです。

 

f:id:s0sem0y:20170427033653p:plain

 

実際の強化学習

実際の強化学習はもう少し複雑です。

わかりやすくするために、スロットの例を続けていきましょう。スロットの各腕が、実は当たりを出した次の回は、当たりが出にくくなるとか、あるいは前回選んだ腕によって報酬額が変動するだとかの傾向があったとしましょう。

 

環境がただただ黙って、エージェントの行動に報酬を返すだけとは限らないということです。こちら出方に合わせて、環境の方も状態を変えている可能性があるということです。

 

この手の問題に対応するために、簡易の強化学習の考えは拡張され、環境は「状態」というものを持っていると考えます(仮にそんなものが無いとすれば、環境の状態が常に一定であるという問題を考えればいい)。

 

仮に、スロットが人間の選択した行動に依存して状態を変えているとしましょう。その場合に、スロットは「状態1」であるとか、「状態2」であるとかいう表示が画面にされるとします(ただし、状態の意味するところは分からない)。つまり行動に応じて状態が変化している様子だけは知ることができるという設定です。

 

f:id:s0sem0y:20170502020032p:plain

 

するとエージェントの役割は、「選択肢の価値を推定しながらも、探査と利用を考慮した方策を作り上げつつ、相手の状態も考慮する」ということになります。ここで、概念はそれほど難しくないということを認識できると良いでしょう。世の中でありがちな状況です。

 

囲碁や将棋などのゲームは典型的な例です。対戦相手はこちらの出方によって対応を変えるわけですから、盤面という環境は、上記の強化学習問題で捉えることができそうです。

 

 

強化学習問題の概要

時間経過を踏まえた図式化

これまでの話を踏まえて、強化学習問題を定式化します。エージェントは環境の状態報酬を考慮した方策に基づいて行動を取り、環境はエージェントの行動によって状態を変え、その状態を知らせてきます。

 

方策:π_t(s,a)

行動:a_t

状態:s_t

報酬:r_t

 

の4つです。添字tはスロットではプレイ回数に相当し、囲碁なら何手目かに相当します。一般的には時間的経過を表していると考えればいいでしょう。

 

f:id:s0sem0y:20170502022914p:plain

 

方策について

ここで、方策について少し詳しく話しておきます。

例えば、現在の環境の状態がs=s_1であるとしましょう。すると、この環境下でエージェントは行動をa_1,a_2,a_3から1つ選択しなければなりません。この場合における方策π_t(s,a)というのは、以下のように使われます。

 

π_t(s_1,a_1)=0.3

π_t(s_1,a_2)=0.1

π_t(s_1,a_3)=0.6

 

といった具合です。和が1になっています。例えば一番上は、状態s=s_1のときに行動a=a_1を取る確率を表しています。従って一般的に方策π_t(s,a)とは、状態sで行動aを取る確率を表していると言えます。

 

方策は、行動価値関数や、あるいはプレイ回数(時間)に依存して決められます。単純に価値の高い行動を選択する確率を高くしてもいいですし、時間が立っていないうちはむしろ探査を優先的に行うようにしてもいいでしょう。

 

つまり、方策の決定の仕方に価値(これまでの報酬を考慮したもの)が含まれており、その方策に従って、ある環境の状態sにおける行動aを取るのがエージェントと言うことになります。そう考えると、行動価値関数なるものは方策を書き換えるための1つの手段に過ぎなく、これを用いないような強化学習の方法もあります(ただし、行動価値関数を考えるのが主流である)。

 

 

s0sem0y.hatenablog.com

 

 

強化学習利用に関する話

ここからは強化学習という枠組みを実問題に適用しようという場合の話です。

エージェントと環境の堺

選択肢の境は、完全な制御が可能かで決める

スロットの例だと、人間がエージェントでスロットが環境ということで良いでしょう。これは直感的にも納得行くことかもしれません。これは、たまたま人間とスロットマシンという物理的に隔離されたエージェントと環境という配置になっていました。

 

しかしエージェントと環境の境目というのは、制御が可能か否かで決めるものです。

 

物理的に繋がりがあるものをまとめてエージェントと考えるのではなく、どこが制御可能であるかを判断し、その制御を上手く調整するために、他の部分を環境とみなさなければなりません。

 

倒立振子ロボット

モータの動きは電気の与え方で完全なる制御が可能ですが、ロボットの他の部位(腕など)は重力や空気抵抗などの影響で、完全なる制御が困難かもしれません。モータをエージェントとして、完全に制御できるとは言えないものは全てエージェントの外に配置して、環境と見なすべきです。モータの働きという行動によって、(重力や空気抵抗の影響を受けながらも)腕が状態を変えており、それを観測しながら、更にモータの働きを調整するという問題と見なすのです。

 

制御工学で倒立振子は典型的な問題として挙げられます。制御理論を使わずに、強化学習により振子を直立させることが可能であり、この場合はエージェントはモータであり、振り上げられる腕は環境に配置されます。(倒立振子で学ぶ DQN (Deep Q Network) - Qiita

 

(Wikipedia)

 

制御対象が複雑化するに連れて、どこをエージェントとするか分からなくなる場合もあるかもしれませんが、キーワードは直接的に完全に制御できるものをエージェントとすることです。仮に、何らかの法則が分かっており、その動作が予測できるとしても、完全に制御できないならばエージェントの外に出すべきです。

 

 

 

強化学習の目標とユーザーの目標

強化学習の目標

強化学習の目標は、得られる報酬の総量を最大化することです。つまり、エージェントは将来的に得られる報酬額に関しても考慮しなければなりません。

 

仮に、選択肢1は「即時に2億円得られる代わりに、その後の収入が永久的に0円になる」というもので、選択肢2は「毎年1000万円振り込まれる」というものだったとしましょう。現在の報酬にのみ気を取られたら前者を選びますが、今後も考えれば後者の方が良いでしょう。強化学習にこれらの規則を学ばせれば、きっと後者を選ぶようになってくれます。

 

逆の言い方をすれば、強化学習はあくまで報酬の総和を最大にするように学習するということです。これは以下に述べるように注意しておかねばなりません。

 

報酬の設定

強化学習は、将来的に得られる報酬額の総和が最大になるように方策を学んでいきます。これは、強化学習を利用しようと言う場合における重大なポイントになります。なぜならば、報酬の与え方を間違えると、強化学習の目標(報酬を最大化)と、強化学習の利用者の目標が一致しないことが起こってくるためです。

 

例えば、将棋で相手の大駒を獲得することは、確かに報酬に値するかもしれません。実際、「歩」を犠牲に「飛車」が獲得できる場合に、これを実行しない手はありません。しかし大駒獲得のみを報酬にしてしまえば、勝ち負けを度外視して、最後まで相手の大駒を獲得することに専念することになってしまいます。

 

エージェントに与える報酬というのは、「どのような手段で問題を解決するのか」を規定するのではなく、「何を達成したら問題解決と言えるのか」を規定すべきです。プラスアルファで手段に対して報酬を考えることはあっても、最も重要なのは、達成目標それ自体です。

 

以下に、人工知能ベンチャーのPFNによる(深層)強化学習の実験例の記事を載せておきます。

深層強化学習による自動駐車の実装 | Preferred Research

強化学習によって決められた駐車スペースに自動駐車できるエージェントを作り上げていますが、例えばハンドルの切り方であるとか、スピードの調整などの手段を報酬に反映するのではなく、達成目標である「駐車スペースにいるかいないか」を報酬にしています。

 

 

まずはいつでも「達成目標が何なのか」を把握し、それを報酬という形で反映することを考えましょう。

 

 

最後に

現在、深層強化学習を学びたいと思っている人は、おそらく何から学べば良いかわからないという状態にあるかと思います(この記事にたどり着く人も、おそらく深層強化学習に興味があってだと思われます)。まずは個別に深層学習と強化学習を学ぶことをお勧めします。できれば、強化学習に関することは力を入れて学んでください。

 

深層強化学習は、強化学習の一部分に深層学習を導入したものになります。

 

深層学習の登場で、確かに強化学習の対応できるタスクが非常に増えました。深層学習のもたらす成果にも注目は行くかもしれませんが、「強化学習」という枠組みなしに、このような成果はありえません。強化学習は他にはない学習のパラダイムを持っています(報酬信号を与えるというのは他には無い発想です)。

 

強化学習の枠組みに含まれる処理の一部を深層学習に置き換えたものが深層強化学習ですから、兎にも角にも基本となる強化学習を知らないことには始まりません。

 

 

逆に、強化学習によって、深層学習のニューラルネットの構造を学習させるという応用もあります。

 

s0sem0y.hatenablog.com

 

qiita.com