AI研究所 - AI(人工知能)に脅かされないために、AI(人工知能)を作る側の人間になる -

HOME  >  強化学習とは?強化学習の仕組みを徹底解説2

公開日:2019.09.06 

強化学習とは?強化学習の仕組みを徹底解説2

カテゴリー: AI(人工知能)の作り方







強化学習とは?強化学習の仕組みを徹底解説2


こんにちは、AI研究所見習い研究員のショウです。

今回は、前回の記事「強化学習とは?強化学習の仕組みを徹底解説」に引き続き、どのような仕組みになっているのかを少し違う視点でご紹介します。

強化学習(Reinforcement learning)とは?

強化学習を理解するのに分かりやすい例えは「パブロフの犬」です。

パブロフの犬

「パブロフの犬」とは、ソビエト連邦の生理学者イワン・パブロフの発見した、
犬にエサを与える時、ベルを鳴らしてから与えるという事を繰り返していると、
ベルを鳴らすだけで犬がよだれを垂らすようになるというものです。

これは「条件反射」として有名ですが、

強化学習を語る際にも十分適用できます。

なぜなら強化学習を単純に考えると
「報酬を与えることによって行動を促す」
ことだからです。

報酬をパブロフの犬に当てはめると、
報酬は「餌」になります。

この「餌」が与えられる「条件」をベルの音とすると、
この「条件」を何百回も「餌を与える前」に繰り返すことによって
「条件」だけで「涎を流す」という行動が促されるます。

つまり、餌という報酬が与えられる時、
食べ物を消化するための涎が分泌されます。

ベルの音とという条件が「必ず餌の前に鳴る」と
脳が判断したら、ベルの音=餌と認識して、
ベルの音=餌=「餌を消化するための涎を流す」という
一連の行動が生まれます。

本来なら餌が報酬になりますが、
ベルの音がなった時必ず餌が貰えるなら、
ベルの音を報酬として、脳が認識するようになります。

教師あり学習と強化学習

強化学習の説明の続きをする前に、
よく誤解される「教師あり学習」と強化学習の違いを、軽く説明します。

「教師あり学習」は、
「ベルの音」と「餌が貰える」の関連付け作業を
最初から教師(正解データ)が与えます。

一方、強化学習では、この関連付け作業を
学習を行っていく過程で、自分で「発見」をしていきます。

このことを考えると、
強化学習は、大脳が発達している動物の、
より自然な学習形態に近いと言えそうです。

エージェントと人間

強化学習においてはさらに「罰則」が存在します。

例えば「子供がテスト勉強をする」場合、
いい点数が取れることも、それによって親兄弟、先生、友達に
褒められることも、自分は頑張ったと感じる充足感も「報酬」になります。

しかし、頑張れなかった、サボった、それによってもたらされる「劣等感」
さらに、周りの人間に失望されること、親などに叱られることが
「罰則」になります。

強化学習で出てくる専門用語「エージェント」を
「子供」とすると、
「エージェント」は「いい点数をとって人に褒められる」ことを
目的として、行動することになります。
そして「悪い点数をとって人に叱られる」ことが罰則となり、
これを避けるようにも行動します。

これをコンピューターによって「エージェント」は「何百回」も「実際に体験」します。
しかし、現実の「子供」は「エージェント」のように
「何百回もの実体験」を「短期間」で重ねることはできません。

そして「現実」のように「必ずしも人は報酬と罰則のみによって行動している」
とは限りません。

あくまでも強化学習をイメージしやすくするための例えです。

ですが、行動が単純に「報酬と罰則によって決定付けされている物事」なら
コンピューターによってこの「訓練」を「短期間」で「繰り返す」ことによって
「エージェント」は「短時間」で賢くなり、「人が望む行動」してくれるようになります。

例えば「AlphaGo」などがそれにあたります。
近年では、チェスよりもAIが人に勝つことが難しいとされる「囲碁」で、
プロの囲碁棋士に対して、それもかなりの実績がある人物に対して、
勝ち越すなど、かなりの成果をあげています。

ゲームなどでは「高スコアをあげる」、「対戦で人に勝つ」ような行動が「報酬」にあたり、
「低スコア」「負ける」ような行動が罰則となり、
それを基に行動させるよう、コンピューターに計算させることができます。

では強化学習はこの「報酬」と「罰則」のルールをどうように決めているのでしょうか。

今からそのルールにあたる、アルゴリズム(計算方法)を説明していきたいと思います。


Q-Learning(Q値)

それでは強化学習がどのように学習を進めていくかの概要を基本的なアルゴリズムQ-Learningで説明していきます。

状態と行動と報酬

ここで、簡単に3つの大事な要素を紹介します。

状態:s(State):現在どのような状態、状況になっているかを示すもの。
将棋でいう「現在の譜面そのもの」や「戦況」です。

行動:a(Action):どのような行動を起こすか。
将棋でいうなら「2六步を指す」や「7六歩を指す」です。

報酬:r(Reward):行動を起こした結果の利益です。
将棋なら、最終局面においてかなり簡略化していますが、
下の図のような場面があるとします。

shogi image

ここで、1二金と打つと、玉は3一玉と移動して、詰めなくなってしまいます。

shogi image

しかし、2二金と打てば、ここで詰みになります。

shogi image

この詰みになることをReward(r:報酬)として、+1点とすると
詰みにならない行動は(r:報酬)−1点。
その他を0点と決めます。

将棋の場合持ち駒がありますのでより複雑になりますが、
ここでは簡略化して、持ち駒「金」を各マス目に置いた場合の点数を振り分けます。

ここで、あと何手か進めれば詰みになる可能性がある手に0点をつけているのは、
話をわかりやすくするため、あくまで「この1手で詰みになるものだけに」
報酬を与えているからです。

shogi image

Q-Learningは極端にいうと、上の画像の左上(右上からでもいい)
から順次「取り敢えず試してみて」、「その行動によってどんな報酬が得られたのか」
を計算していく方法になります。

状態行動価値Q:Q値=Q(ある時刻 s:状態 の時,ある a:行動 をとった時)
この値を最大化していけばいいのです。

ここで上の画像を見て気付いたかたもいるかもしれませんが、
1手で詰む「2二金」と2手で詰む「3二金」が同じ+1になっています。

将棋の目的は「相手に勝つ」ことです。
どれだけ詰みに「手間」がかかったか、
美しい指し手を披露したら「点数が加算される」
といったことは加味されません。

つまり、将来的に「相手を詰ませる」
「玉を奪う」=「相手に勝てる」
1手であればどれだけ手間がかかろうが、
同じ1点とみなされます。

要するに短期的にもらえる報酬ではなく、
将来的にもらえる報酬を鑑みた値をみています。

時間割引率

しかし、実際問題としてはできるだけ最短で勝利を得たほうが
その1手に「価値」があると考えるでしょう。

そこでγ(ガンマ)「時間割引率」の考えが出てきます。

この時間割引率に行動した回数を指数として累乗していき、
さらに報酬を掛けて加重していきます。

これにより、最終的には同じ報酬でも時間が経過するごとに最大値が減っていくように調整してあげます。

分かりやすく考えます。ある状態:s:の時、ある行動:a:を取ると、将来的には同じ報酬:r:を受け取れるが
時間割引率:γ:を0.9と設定すると

時刻:t:の時の報酬を
rt =R(st、at、s’t+1)

rtが最終的に報酬+10を得られるとして、
行動回数を2回と4回に分けて時間割引された累積報酬を求めると

2回
行動回数=2
9 =(0.9)^0*rt(0) +(0.9)^1*rt+1(10)

4回
行動回数=4
7.29 =(0.9)^0*rt(0) +(0.9)^1*rt+1(0)+(0.9)^2*rt+2(0) +(0.9)^3*rt+3(10)

となり、報酬が最大になるような方策(ポリシー)を見つけることが、強化学習の目的とすると

4回より、2回で報酬が最大となる方策(ポリシー)を選択するように学習します。

因みに、一回で目的が達成されれば当然の結果ですが、

10 =(0.9)^0*rt(10)となります。

Deep Q-Network (DQN)

Q-Learningをある方策のもと繰り返し、繰り返し行っていけば
いつかは最適な値Q(s,a)を見つけてくれます。

QーLearningは単純なタスク。
決められた3×3ほどのマス目に
チーズがあり、ネズミが歩いて
チーズを食べるみたいな状況だと
直感的にも分かりやすく、
計算もすぐに終わります。

ですが、前述した「将棋」などは
とても複雑な構成をしています。

何せ、9マス×9マス棋盤に
駒数が自分相手合わせて、40。
駒ごとに動き方が違い、
二歩などの数種類の禁止ルールが存在し、
さらに相手の駒を再利用できる、持ち時間制限、
玉を囲う布陣、飛車角落ちハンデなど、
多種多様な戦略と戦術とそれに基づいた行動が存在します。

ここで、Deep Learningの手法を組み合わせることができれば、最適な値Q(s,a)の近似値
を複雑な状況下に置いて導き出すことができることをGoogleの子会社ディープマインドが発見しました。

この方法の名前がそのままDeep Q-Networkです。

Deep Learning

DQNの説明の前に軽く、Deep Learningの芯の部分を説明します。

そうすればQ値の最適解を導く方法に何故Deep Learningの手法が使われたのかも理解でき、
さらに、今まで説明してきた簡単な強化学習の概念と実は似ていることにも気付くはずです。

誤差伝搬法 (Back Propagation)

shogi image

上の画像のニューラルネットワークから伸びる
矢印は省略してあります。

そして各矢印には「重み」と呼ばれる、
入力が出力に与える影響の「重要度」を調整する値が含まれています。

上の画像の赤い矢印こそDeep Learningの真髄です。

簡略して説明するなら入力に対して出力した値を
正解データと見比べて、その誤差を計算。
そして、誤差伝搬法によって最適な重みを調整していき、
正解データに近付けることこそDeep Learningがやっていることです。

組み合わせる

では、このDeep Learningモデルと、Q-learningを
どのように組み合わせているのかを説明していきます。

shogi image

画像の上がQ-Learningを図解したもので、
下がDeep Q Learningを図解したものです。

Q-Learningは各時刻の行動:a:と状態:s:からQ-Tableを作り、それを基にQ値を導き出します。

一方 Deep Q-Learningは各時刻の状態:s:が
Q-Learning用のニューラルネットワーク層
を介して、各行動:a:の時のQ値を求めます。
更にそれをまたQ-Learning用のニューラルネットワーク層に戻し、
逆伝播で重みを最適な値に更新していきます。

ピンポンゲーム

では具体的な事例を混じえた説明をしていきます。

始めに、学習対象となる素材は「単純なピンポンゲーム」にします。

これは画像の通り、単純にやってくるボールを穴に入れるだけです。
入れたら1ポイント。ボールを落としたらゲームオーバー
どれだけ高得点できるかで競い合います。

shogi image
shogi image
shogi image

畳み込み層

これらの画像一つ一つを状態として認識させます。
ただこれだと情報量がとても多くなり、計算量が増大しますので、
計算量の削減のため、必要な情報だけを整理させます。

色々な方法がありますが、
今回のピンポンゲームで重要なステータス(状態)は
玉の位置と、それを弾くボードの位置、それからスコアのための穴の位置です。
それだけ把握できればいいので、画像をグレイスケール(白黒にする)して
さらに小さくして重ねていきます。

shogi image

そしてそれを幾つもの畳み込み層(CNN)を使用して、
画像の特徴を掴んでいき、Flatten層で一次元にしたのち、
FC層(Fully Connected Layer)で活性化関数を使い
各アクションごとのQ値を導きだします。

shogi image

CNNを簡単に説明すると、画面を小さな画面に分割して、
それを端から端までスライドさせて、各画像のピクセル情報を
認識していく手法です。

ReLU関数は入力の値が0以下であれば、全て0にして出力し、
入力した値が1より大きければそのまま入力の値を出力します。

Experience Replay

ここでもう少し機能を付け足せば
DQNの完成です。
まずExperience replay(経験の繰り返し)です。

これは前述したDQNの前段階の2つの弱点を補う形になります。

・前に行った経験を忘れないようにする。

・各経験のデータの相関関係を減らす。

前に行った経験を忘れないようにする。
これはそのままですが、前述の内容だと
連続してまとまった環境のサンプル(画像を重ね合わせたもの)を
繰り返しの中でニューラルネットワークに渡すだけでしたが、
これだと前の経験を次の経験で上書きしてしまいます。

最初のステージのレベルの環境は学習したが、
新たにレベル2のステージを学習する時はレベル1の情報を忘れてしまうのです。

これを解決するために、Replay Bufferというものを作ります。

これはまとまった経験値を保存しておくフォルダーようなもので、
これを纏めてBatch of Experiencesとして保存しておけば
各経験値ごとの期待値をニューラルネットワークにて精査できます。

shogi image

各データの相関を減らす

もう一つの問題です。
それは、全ての行動は次の状態に影響してしまうということです。
そうなると最終的に報酬を得た状態へ辿り着くために見つけたルートを
エージェントはワンパターンに繰り返すだけになってしまいます。

機械学習における過学習に似ているかもしれません。

これを解消するための方法としては、
とりあえず経験した(s:状態、a:行動、r:報酬、s’:遷移先)を
前述したreplay bufferに保存し、
学習を行う際はそこから
ランダムに選び出して利用させます。

考え方は至ってシンプルで、
行動を起こした結果の報酬が「左パターン」だった。
今度はもう一回はじめから学習して、「右パターン」を発見した。
「真ん中パターン」もあった。

そしてこの経験をランダムにサンプリングすることによって
同じゴールでも様々なバリエーションの行動を取ることができます。
(はっきりいって今回の場合は非常にシンプルなので
バリエーションも何もないですが)

decition tree

おわりに

ここまでで一旦強化学習についての説明は終わります。

もっと深く理解されたい方は、強化学習プログラミングセミナーを受講してみてください。

最後までお読み頂きありがとうございました。


タグ:


参考になったら「いいね!」と「シェア」をお願いします!!

このエントリーをはてなブックマークに追加
AI(人工知能)セミナー開催中
AI(人工知能)入門セミナー AI(人工知能)入門セミナー IoT入門セミナー

AI入門ブログの中の人

AI研究所 研究スタッフ

【マサミ】

アメリカ・サンフランシスコにある情報メディアの専門学校を卒業。大手金融会社での事務経験を経て、2016年9月よりAI研究所に入所。見習い研究員として、AI技術を日々勉強中。


【三谷】

AIセミナー責任者、講師。AIについての幅広い知識を持ち、人に分かりやすく伝える技術を持つ。特にAIを事業や仕事に取り入れる方法について日々講義しています。

AI研究所Twitter

Facebookページ