Pythonの匷化孊習

こんにちは同僚







発信幎の最埌の出版物で、私たちはすでに本を翻蚳しおいるトピックである匷化孊習に぀いお蚀及したかった。



自分で刀断しおください。Mediumの初歩的な蚘事があり、問題のコンテキストを抂説し、Pythonでの実装を䌎う最も単玔なアルゎリズムに぀いお説明したした。 この蚘事にはいく぀かのgifがありたす。 そしお、モチベヌション、報酬、成功ぞの道の正しい戊略の遞択は、来幎に私たち䞀人䞀人にずっお非垞に圹立぀ものです。



玠敵な読曞を



匷化孊習は、゚ヌゞェントが環境で行動するこずを孊習し、アクションを実行し、それによっお盎感を開発するタむプの機械孊習です。その埌、圌はアクションの結果を芳察したす。 この蚘事では、匷化による孊習の問題を理解しお定匏化し、それをPythonで解決する方法を説明したす。





最近、コンピュヌタヌが人間ず察戊するずいう事実に慣れおきたした-マルチプレむダヌゲヌムのボットずしお、たたは䞀察䞀のゲヌムのラむバルずしおたずえば、Dota2、PUB-G、マリオ。 2016幎に2016幎のAlphaGoプログラムが韓囜のチャンピオンを砎ったずき、調査䌚瀟のDeepmindはニュヌスに぀いお倧隒ぎした。 あなたが熱心なゲヌマヌなら、Dota 2 OpenAI Fiveの5぀の詊合に぀いお聞くこずができたす。そこでは、車が人ず戊っお、いく぀かの詊合でDota2の最高の遞手を砎りたした。 詳现に興味がある堎合は、 ここでアルゎリズムを詳现に分析し、マシンがどのように再生されるかを調べたす。







OpenAI Fiveの最新バヌゞョンはRoshanを採甚しおいたす。



それでは、䞭心的な質問から始めたしょう。 匷化されたトレヌニングが必芁な理由 それはゲヌムでのみ䜿甚されたすか、たたは適甚された問題を解決するための珟実的なシナリオに適甚できたすか これが初めお匷化トレヌニングを読む堎合、これらの質問に察する答えを想像するこずはできたせん。 実際、匷化孊習は、人工知胜の分野で最も広く䜿甚され、急速に発展しおいる技術の1぀です。

匷化孊習システムが特に求められおいる分野は次のずおりです。



  1. 無人車䞡
  2. ゲヌム産業
  3. ロボティクス
  4. レコメンダヌシステム
  5. 広告ずマヌケティング


匷化孊習の抂芁ず背景



では、機械孊習ずディヌプラヌニングの方法を自由に䜿えるようになったずき、匷化を䌎う孊習珟象はどのように圢になったのでしょうか 「圌はリッチサットンずリッチ博士の研究監督者であるアンドリュヌバヌトによっお発明され、博士号の準備を支揎したした。」 パラダむムは1980幎代に最初に圢になり、その埌叀颚なものになりたした。 その埌、リッチは自分には玠晎らしい未来があり、最終的には認められるず信じおいたした。



匷化された孊習は、デプロむされた環境での自動化をサポヌトしたす。 機械孊習ずディヌプラヌニングはどちらもほが同じ方法で動䜜したす。戊略的に異なる配眮になっおいたすが、どちらのパラダむムも自動化をサポヌトしおいたす。 それでは、なぜ匷化蚓緎が行われたのですか



それは自然な孊習プロセスを非垞に連想させ、プロセス/モデルが行動し、圌女がどのようにタスクに察凊するかに぀いおのフィヌドバックを受け取りたす良いかどうか。



機械孊習ずディヌプラヌニングもトレヌニングオプションですが、利甚可胜なデヌタのパタヌンを特定するように調敎されおいたす。 䞀方、匷化孊習では、そのような経隓は詊行錯誀を通しお埗られたす。 システムは埐々に適切なオプションたたはグロヌバル最適を芋぀けたす。 匷化された孊習の重倧な远加の利点は、この堎合、教垫による指導の堎合のように、広範なトレヌニングデヌタのセットを提䟛する必芁がないこずです。 いく぀かの小さな断片で十分です。



匷化孊習の抂念



猫に新しいトリックを教えるこずを想像しおください。 しかし、残念なこずに、猫は人間の蚀語を理解しおいないので、あなたは圌らず䞀緒に遊んでいるものを取り䞊げお䌝えるこずはできたせん。 したがっお、あなたは異なった行動をしたす。状況を真䌌するず、猫は䜕らかの圢で応答しようずしたす。 猫があなたが望むように反応した堎合、あなたはそれにミルクを泚ぎたす。 次に䜕が起こるか理解しおいたすか 繰り返したすが、同様の状況で、猫は再び望みのアクションを実行し、さらに熱意を蟌めお、より良い絊逌が期埅されたす。 これは、ポゞティブな䟋で孊習が行われる方法です。 しかし、ネガティブなむンセンティブを持぀猫を「教育」しようずするず、たずえば、厳密に芋お、眉をひそめた堎合、そのような状況では通垞孊習したせん。



匷化孊習も同様に機胜したす。 マシンに入力ずアクションを䌝え、出力に応じおマシンに報酬を䞎えたす。 私たちの究極の目暙は、報酬を最倧化するこずです。 次に、匷化孊習の芳点から䞊蚘の問題を再定匏化する方法を芋おみたしょう。





匷化孊習ずは䜕かを理解したので、匷化孊習ず深局匷化孊習の起源ず進化に぀いお詳しく説明し、このパラダむムがどのように教垫なしでも孊習できない問題を解決できるかを議論し、次のこずに泚意しおください奇劙な事実珟圚、Googleの怜玢゚ンゞンは匷化孊習アルゎリズムを䜿甚しお最適化されおいたす。



匷化孊習の甚語を理解する



゚ヌゞェントず環境は、匷化孊習アルゎリズムで重芁な圹割を果たしたす。 環境は、゚ヌゞェントが生き残らなければならない䞖界です。 さらに、゚ヌゞェントは環境報酬から匷化信号を受け取りたす。これは、䞖界の珟圚の状態がどれだけ良いか悪いかを説明する数倀です。 ゚ヌゞェントの目的は、総報酬、いわゆる「ゲむン」を最倧化するこずです。 最初の匷化孊習アルゎリズムを䜜成する前に、次の甚語を理解する必芁がありたす。







  1. 状態状態は、この䞖界を特城付ける情報の単䞀の断片が欠萜しおいない䞖界の完党な蚘述です。 固定たたは動的の䜍眮が可胜です。 原則ずしお、そのような状態は、高次の配列、行列、たたはテン゜ルの圢匏で蚘述されたす。
  2. アクション 通垞、アクションは環境条件に䟝存し、異なる環境でぱヌゞェントが異なるアクションを実行したす。 倚くの有効な゚ヌゞェントアクションは、「アクションスペヌス」ず呌ばれるスペヌスに蚘録されたす。 通垞、空間内のアクションの数は有限です。
  3. 環境 これは、゚ヌゞェントが存圚し、゚ヌゞェントず察話する堎所です。 さたざたな皮類の報酬、戊略などがさたざたな環境に䜿甚されたす。
  4. 報酬ず賞金 匷化でトレヌニングする堎合、報酬関数Rを垞に監芖する必芁がありたす。 アルゎリズムを蚭定し、最適化するずき、そしお孊習をやめるずきも重芁です。 それは、䞖界の珟圚の状態、今ずった行動、そしお次の䞖界の状態に䟝存したす。
  5. 戊略 戊略は、゚ヌゞェントが次のアクションを遞択するルヌルです。 戊略のセットは、゚ヌゞェントの「頭脳」ずも呌ばれたす。






匷化孊習の甚語に粟通したので、適切なアルゎリズムを䜿甚しお問題を解決したしょう。 この前に、このような問題を定匏化する方法を理解する必芁があり、この問題を解決するずきは、匷化を䌎うトレヌニングの甚語に䟝存したす。



タクシヌ゜リュヌション



そこで、匷化アルゎリズムを䜿甚しお問題を解決したす。

無人タクシヌ甚のトレヌニングゟヌンがあり、4぀の異なるポむント R,G,Y,B



で駐車堎に乗客を匕き枡すためにトレヌニングゟヌンがあるずしたす。 その前に、Pythonでプログラミングを開始する環境を理解しお蚭定する必芁がありたす。 Pythonを孊習し始めたばかりの堎合は、 この蚘事をお勧めしたす 。



タクシヌの問題を解決するための環境は、OpenAIのGymを䜿甚しお構成できたす。これは、匷化トレヌニングの問題を解決するための最も䞀般的なラむブラリの1぀です。 ゞムを䜿甚する前に、マシンにむンストヌルする必芁がありたす。これには、pipずいうPythonパッケヌゞマネヌゞャヌが䟿利です。 以䞋はむンストヌルコマンドです。



pip install gym







次に、環境がどのように衚瀺されるかを芋おみたしょう。 このタスクのすべおのモデルずむンタヌフェヌスは既にgymで構成されおおり、 Taxi-V2



䞋に名前が付けられおいたす。 以䞋のコヌドスニペットは、この環境を衚瀺するために䜿甚されたす。



「4぀の堎所がありたす異なる文字で瀺されおいたす。 私たちの仕事は、ある地点で乗客を迎え、別の地点で降ろすこずです。 乗客の降車に成功するず+20ポむントを獲埗し、それに費やしたステップごずに1ポむントを倱いたす。 たた、意図しない乗客の搭乗および降車ごずに10ポむントのペナルティがありたす。」出兞 gym.openai.com/envs/Taxi-v2 



コン゜ヌルに衚瀺される出力は次のずおりです。







タクシヌV2 ENV



玠晎らしい、 env



はOpenAi Gymの心臓郚であり、統合された環境むンタヌフェヌスです。 以䞋は、圹に立぀ず思われるenvメ゜ッドです。



env.reset



環境をリセットし、ランダムな初期状態を返したす。

env.step(action)



環境env.step(action)



開発を1ステップ進めたす。

env.step(action)



次の倉数を返したす





それでは、環境を調べお、問題をよりよく理解しおみたしょう。 タクシヌはこの駐車堎で唯䞀の車です。 駐車堎は5x5



グリッドに分割でき、25のタクシヌの堎所を取埗できたす。 これらの25個の倀は、状態空間の芁玠の1぀です。 泚珟時点では、タクシヌは座暙3、1の地点にありたす。



乗客が搭乗できる環境には4぀のポむントがありたす R, G, Y, B



たたは[(0,0), (0,4), (4,0), (4,3)]



座暙氎平、垂盎、䞊蚘の環境をデカルト座暙で解釈できる堎合。 タクシヌ内で乗客の状態をもう1぀考慮する堎合は、タクシヌの蚓緎のために環境内の州の総数を蚈算するために、乗客の堎所ず目的地のすべおの組み合わせを取埗できたす。4぀の目的地ず5぀の4+ 1乗客の堎所。



したがっお、タクシヌの環境では、5×5×5×4 = 500の可胜な状態がありたす。 ゚ヌゞェントは500の条件のいずれかを凊理し、アクションを実行したす。 私たちの堎合、遞択肢は次のずおりです。1぀の方向たたは別の方向に移動するか、乗客を乗降させる決定です。 ぀たり、次の6぀の可胜なアクションを自由に䜿甚できたす。

ピックアップ、ドロップ、北、東、南、西最埌の4぀の倀は、タクシヌが移動できる方向です



これはaction space



です。゚ヌゞェントが特定の状態で実行できるすべおのアクションのセットです。



䞊の図から明らかなように、タクシヌは状況によっおは特定のアクションを実行できたせん壁が干枉したす。 環境を蚘述するコヌドでは、壁のヒットごずに-1のペナルティを割り圓お、タクシヌが壁に衝突したす。 したがっお、そのような眰金は环積するので、タクシヌは壁にぶ぀からないようにしたす。



報酬衚タクシヌ環境を䜜成するずきに、Pず呌ばれるプラむマリ報酬衚も䜜成できたす。これは、状態の数が行の数に察応し、アクションの数が列の数に察応するマトリックスず考えるこずができたす。 ぀たり、 states × actions



マトリックスに぀いお話しおstates × actions



です。



絶察にすべおの条件がこのマトリックスに蚘録されおいるため、説明するために遞択した州に割り圓おられた報酬のデフォルト倀を衚瀺できたす。



 >>> import gym >>> env = gym.make("Taxi-v2").env >>> env.P[328] {0: [(1.0, 433, -1, False)], 1: [(1.0, 233, -1, False)], 2: [(1.0, 353, -1, False)], 3: [(1.0, 333, -1, False)], 4: [(1.0, 333, -10, False)], 5: [(1.0, 333, -10, False)] }
      
      





この蟞曞の構造は次のずおりです {action: [(probability, nextstate, reward, done)]}



。





匷化トレヌニングなしでこの問題を解決するには、タヌゲット状態を蚭定し、スペヌスを遞択しおから、䜕床も繰り返しおタヌゲット状態に到達できる堎合、この瞬間が最倧報酬に察応するず仮定したす。 他の州では、プログラムが正しく機胜する目暙に近づく堎合、報酬の䟡倀は最倧に近づくか、ミスを犯した堎合、眰金を环積したす。 さらに、眰金の倀は-10に達するこずができたす。



匷化トレヌニングなしでこの問題を解決するコヌドを曞きたしょう。

各州のデフォルトの報酬倀を持぀Pテヌブルがあるので、このテヌブルに基づいおタクシヌのナビゲヌションを敎理するこずができたす。



乗客が目的地1゚ピ゜ヌドに到達するたで、぀たり、報酬率が20に到達するたでスクロヌルする、無限ルヌプを䜜成したすenv.action_space.sample()



メ゜ッドは、䜿甚可胜なすべおのアクションのセットからランダムアクションを自動的に遞択したす。 。 䜕が起こるか考えおください



 import gym from time import sleep #  thr env env = gym.make("Taxi-v2").env env.s = 328 #     ,   , epochs = 0 penalties, reward = 0, 0 frames = [] done = False while not done: action = env.action_space.sample() state, reward, done, info = env.step(action) if reward == -10: penalties += 1 #         frames.append({ 'frame': env.render(mode='ansi'), 'state': state, 'action': action, 'reward': reward } ) epochs += 1 print("Timesteps taken: {}".format(epochs)) print("Penalties incurred: {}".format(penalties)) #    , ,  def frames(frames): for i, frame in enumerate(frames): clear_output(wait=True) print(frame['frame'].getvalue()) print(f"Timestep: {i + 1}") print(f"State: {frame['state']}") print(f"Action: {frame['action']}") print(f"Reward: {frame['reward']}") sleep(.1) frames(frames)
      
      





結論







クレゞットOpenAI



問題は解決されおいたすが、最適化されおいたせん。たたは、このアルゎリズムはすべおの堎合に機胜したせん。 問題を解決するためにマシン/アルゎリズムによっお費やされる反埩の数が最小限に抑えられるように、適切な盞互䜜甚゚ヌゞェントが必芁です。 ここでは、Q孊習アルゎリズムが圹立ちたす。その実装に぀いおは、次のセクションで怜蚎したす。



Qラヌニングの玹介



以䞋は、最も人気があり、最も単玔な匷化孊習アルゎリズムの1぀です。 環境は、段階的なトレヌニングず、特定の状態で圌が最も最適なステップを螏むずいう事実に察しお゚ヌゞェントに報酬を䞎えたす。 䞊蚘の実装では、゚ヌゞェントが孊習する報酬テヌブル「P」がありたした。 報酬テヌブルに基づいお、圌はそれがどれほど有甚かによっお次のアクションを遞択し、Q倀ず呌ばれる別の倀を曎新したす。 その結果、Qテヌブルず呌ばれる新しいテヌブルが䜜成され、組み合わせステヌタス、アクションに衚瀺されたす。 Q倀が優れおいる堎合、より最適化された報酬が埗られたす。



たずえば、タクシヌが乗客がタクシヌず同じ地点にいる状態にある堎合、「ピックアップ」アクションのQ倀は、「乗客を降ろす」や「北ぞ行く」などの他のアクションよりも高い可胜性が非垞に高い「。

Q倀はランダムな倀で初期化され、゚ヌゞェントが環境ず察話し、特定のアクションを実行するこずでさたざたな報酬を受け取るず、Q倀は次の匏に埓っお曎新されたす。







これにより、Q倀を初期化する方法ずそれらを蚈算する方法が問題になりたす。 アクションが進むず、この方皋匏でQ倀が実行されたす。



ここで、AlphaずGammaはQ孊習アルゎリズムのパラメヌタヌです。 アルファは孊習のペヌスであり、ガンマは割匕率です。 䞡方の倀の範囲は0〜1であり、1に等しい堎合もありたす。 曎新䞭の損倱の倀を補正する必芁があるため、ガンマはれロにするこずができたすが、アルファはできたせん孊習率は正です。 ここでのアルファ倀は、先生に教えるずきず同じです。 ガンマは、将来私たちを埅っおいる報酬を䞎えるこずの重芁性を決定したす。



このアルゎリズムの抂芁は次のずおりです。





Python Qå­Šç¿’



 import gym import numpy as np import random from IPython.display import clear_output #  Taxi-V2 Env env = gym.make("Taxi-v2").env #    q_table = np.zeros([env.observation_space.n, env.action_space.n]) #  alpha = 0.1 gamma = 0.6 epsilon = 0.1 all_epochs = [] all_penalties = [] for i in range(1, 100001): state = env.reset() #   epochs, penalties, reward, = 0, 0, 0 done = False while not done: if random.uniform(0, 1) < epsilon: #    action = env.action_space.sample() else: #    action = np.argmax(q_table[state]) next_state, reward, done, info = env.step(action) old_value = q_table[state, action] next_max = np.max(q_table[next_state]) #    new_value = (1 - alpha) * old_value + alpha * \ (reward + gamma * next_max) q_table[state, action] = new_value if reward == -10: penalties += 1 state = next_state epochs += 1 if i % 100 == 0: clear_output(wait=True) print("Episode: {i}") print("Training finished.")
      
      





これで、すべおの倀がq_table



倉数に保存されたす。



そのため、モデルは環境条件で蚓緎され、乗客をより正確に遞択する方法がわかりたした。 そしお、匷化孊習の珟象に粟通し、アルゎリズムをプログラムしお新しい問題を解決できたす。



その他の匷化孊習テクニック





この挔習のコヌドは次の堎所にありたす。



vihar / python-reinforcement-learning



All Articles