いものやま。

雑多な知識の寄せ集め

AI

強化学習について学んでみた。(その22)

昨日はSarsa法によるAIの実装を行った。 今日はQ学習によるAIの実装を行っていく。 QLearningCom さっそくQ学習によるAIの実装を。 #!/usr/bin/env ruby require './tic_tac_toe' require './state' require './value' module TicTacToe class QLearningCom …

強化学習について学んでみた。(その21)

昨日は○×ゲームをプレイできるようにするところまで実装した。 今日はSarsa法を使ったAIを実装していく。 Valueクラス まずは行動価値を表すValueクラスから。 #==================== # value.rb #==================== require './state' module TicTacToe …

強化学習について学んでみた。(その20)

昨日はSarsa法とQ学習の説明をした。 今日からは実際にこれらのアルゴリズムを使って○×ゲームのAIを作ってみる。 ○×ゲーム まぁ、○×ゲームの説明は不要だよね・・・ とりあえずは、○×ゲームをCUIで遊べるようにするところから。 モジュールと定数の定義 とり…

強化学習について学んでみた。(その19)

昨日はTD学習の考え方について説明した。 今日は方策オン型制御であるSarsa法と、方策オフ型制御であるQ学習について説明していく。 Sarsa法 Sarsa法は方策オン型制御のアルゴリズムの1つで、方策としてソフト方策を使うことで知識利用と探査のバランスをと…

強化学習について学んでみた。(その18)

前回までは、モンテカルロ法について説明していた。 今日からはTD学習(Temporal Difference Learning: 時間的差分学習)について説明していく。 おさらい まず、強化学習のベースとなる考え方は、Bellman方程式を解いて、ある方策の元での状態や行動の価値…

強化学習について学んでみた。(その17)

昨日は方策オン型モンテカルロ制御と方策オフ型モンテカルロ制御について説明した。 今日は、実際にこれらのアルゴリズムを使ったプログラムを書いてみる。 レーストラック 本で練習問題とされているレーストラックの問題を、方策オン型モンテカルロ制御、方…

強化学習について学んでみた。(その16)

昨日はモンテカルロ-ES法を使ってブラックジャックのAIをプログラミングした。 今日は、開始点探査の仮定を外す方法について考えていく。 方策オン型手法と方策オフ型手法 まず、開始点探査の仮定を外す方法として、大きく分けて2通りの方法が考えられる。 …

強化学習について学んでみた。(その15)

昨日はモンテカルロ-ES法による方策の評価と改善を説明した。 今日は、モンテカルロ-ES法で実際にプログラムを書いてみる。 ブラックジャック 本で例として挙げられているブラックシャックのAIをモンテカルロ-ES法で実装してみる。 ブラックシャックはカジノ…

強化学習について学んでみた。(その14)

久々に強化学習の話。 前回は、価値反復について説明し、プログラムを書いてみた。 今日からは、そもそも状態遷移のモデルが分からない場合に、どうすればいいのかを考えていく。 おさらい まず、以下の記事で状態遷移のモデルとBellman方程式について説明し…

強化学習について学んでみた。(その13)

昨日は方策反復について説明し、実際にプログラムも書いてみた。 今日はもう一つのアルゴリズムについて説明する。 価値反復 方策反復の場合、方策評価の中で何度もスイープを行うので、方策改善が行われるまでに時間がかかる。 なら、1回スイープを行うごと…

強化学習について学んでみた。(その12)

昨日は方策改善について説明した。 今日は、方策評価と方策改善を使って実際に学習を進めていく方法について。 方策反復 方策評価でまず方策の評価を行ったら、次に方策改善で方策の改善を行う。 そしたら、今度は改善された方策で再び方策評価を行い、さら…

強化学習について学んでみた。(その11)

昨日は方策評価について説明した。 今日は、評価された状態価値を使って、方策を改善していくことを考えていく。 方策改善 さて、方策評価が出来たのなら、今度はその方策を変えることで、状態価値(や行動価値)を改善していきたいとなる。 これを、方策改…

強化学習について学んでみた。(その10)

昨日の続き。 今日はどうやってBellman方程式を解いていくのかを考えていく。 方策評価 昨日言及した通り、ある方策の元でBellman方程式を解くと、その方策での状態価値(あるいは行動価値)が計算できる。 なので、Bellman方程式を解くことを方策評価と呼ん…

強化学習について学んでみた。(その9)

久々に。 前回までは、非連想的な問題である、n本腕バンディット問題を扱っていた。 今回からは、元々考えていた、強化学習について学んでみた。(その3) - いものやま。で述べたような状況ーーすなわち、行動の選択によって、状態がどんどん変化していって…

強化学習について学んでみた。(その8)

昨日はグリーディ法とグリーディ法を扱った。 今日はn本腕バンディット問題に対する別のアルゴリズムを考えていく。 ソフトマックス法 グリーディ法では、探査を行うために、の確率でランダムに行動を選択していた。 もう一つ、探査を行うための方法として、…

強化学習について学んでみた。(その7)

昨日はn本腕バンディット問題の行動の価値について考えた。 今日は、それを使って具体的なアルゴリズムを考えていく。 グリーディ法 一番最初に思いつく方法は、現在の推定される行動の価値の中で、最も価値の高い行動を選ぶという方法。 すなわち、回目に選…

強化学習について学んでみた。(その6)

昨日はn本腕バンディットをプログラムで書いてみた。 今日はn本腕バンディット問題に対するアルゴリズムを考えるために、「行動の価値」について考えていく。 行動の価値 どのレバーを下すのかを考えるときに、これまでの結果から、出来るだけ良さげなレバー…

強化学習について学んでみた。(その5)

昨日は、n本腕バンディット問題と、「知識利用」と「探査」のバランスの問題について説明した。 今日はn本腕バンディット問題をプログラム(Ruby)で実際に動かしてみる。 正規分布に従う乱数生成器 今回、n本腕バンディット問題のレバーの期待値、および、…

強化学習について学んでみた。(その4)

昨日は、強化学習で考える具体的な状況や、用語について説明した。 今日は、もうちょっと簡単な場合について考えていく。 非連想的な問題 昨日の「報酬」に関する説明を聞いて、次のように思ったかもしれない。 「(猿の例で)大きな箱を選んでも小さな箱を…

強化学習について学んでみた。(その3)

昨日は強化学習の「強化」とは何なのかについて説明した。 今日は、強化学習で考える具体的な状況や、そこで使われる用語について。 エージェントと環境 強化学習では、学習したり行動を決定する主体(つまりAI自身)のことを、エージェントと呼ぶ。 そして…

強化学習について学んでみた。(その2)

昨日の記事は以下。 今日は、強化学習についてもう少し説明したいと思う。 「強化」って何? そもそも、「強化学習」の「強化」って何なんだ?という話。 「強化」っていうと、何かを強くするのかなぁ、という感じだけど、「強化学習」という訳語の元になっ…

強化学習について学んでみた。(その1)

ゲームを作っていくときに必要となるのが、AIの作成。 変種オセロを作っているときにもいくつかの探索アルゴリズムを実装したけれど、盤面の評価については単純に「出来るだけ自分の色が多く、そして相手の色が少ない方がいい」としただけだった。 ただ、こ…

変種オセロの思考ルーチンを作ってみた。(まとめ)

これまでの各記事は、以下から。 変種オセロの思考ルーチンを作ってみた。(その1) - いものやま。 変種オセロの思考ルーチンを作ってみた。(その2) - いものやま。 変種オセロの思考ルーチンを作ってみた。(その3) - いものやま。 変種オセロの思考ル…

変種オセロの思考ルーチンを作ってみた。(その6)

昨日の記事は、以下から。 今日は、ミニマックスAIのさらなる高速化を目指す。 アルファベータ法 アルファベータ法の基本的な考え方は、ミニマックス法と同様、「相手が自分にとって一番都合の悪い手を打ってくる前提で、その中で一番マシな局面になる手を選…

変種オセロの思考ルーチンを作ってみた。(その5)

昨日は、パフォーマンスを改善して、ミニマックスAIがそれなりのスピードで動くようにした。 今日はちょっと話題を変えて、千日手の話。 千日手 将棋の場合、何度も同じ局面になってしまって、手が進まなくなってしまうことがある。 これを「千日手」といっ…

変種オセロの思考ルーチンを作ってみた。(その4)

昨日はミニマックス法を実装したけど、処理が遅いという問題が。 そこで、今日はパフォーマンスの改善を行っていく。 プロファイル パフォーマンスの改善を考えるときに、まず最初にやらないといけないことが、プロファイル。 ボトルネックを勘違いして修正…

変種オセロの思考ルーチンを作ってみた。(その3)

昨日は貪欲法のAIを作成。 今日はミニマックス法のAIを作成する。 ミニマックス法 昨日の貪欲法は、「1手読んで、その中で一番いいと思われる手を選ぶ」というもの。 ただ、実際には1手読むだけだと、簡単に取り返されてしまうということがよく起こる。 そこ…

変種オセロの思考ルーチンを作ってみた。(その2)

昨日はランダムAIを作った。 今日はもうちょいマシな思考ルーチンを作る。 貪欲AI すぐに思いつくのは、可能な手をそれぞれ実行してみて、その中で一番よさそうな手を選ぶというもの。 「選択肢の中からとりあえず一番いいものを選ぶ」というのを「貪欲法」…

変種オセロの思考ルーチンを作ってみた。(その1)

変種オセロ「良い子悪い子普通の子」については、以下を参照。 今回は、この変種オセロの思考ルーチンを作っていく。 ランラムAI もっとも簡単なAIは、これ。 実行可能な手からランダムに返すだけのもの。 #!/usr/bin/env ruby require_relative "board" req…