読者です 読者をやめる 読者になる 読者になる

いものやま。

雑多な知識の寄せ集め

強化学習用のニューラルネットワークをSwiftで書いてみた。(その8)

前回は○×ゲームをSwiftで実装した。 今日はSarsaComの実装。 なお、Rubyでの実装は、以下を参照: SarsaComクラス ということで、さっそく。 //============================== // TicTacToe //------------------------------ // SarsaCom.swift //========…

強化学習用のニューラルネットワークをSwiftで書いてみた。(その7)

昨日はValueNetworkの保存とロードの実装をした。 (ただ、いろいろ問題があったので、後で修正する予定) これで実際に学習をするために、今日は○×ゲームをSwiftで実装する。 Markクラス まずはマークを表すMarkクラスから。 enumで実装するのも一つの手だ…

強化学習用のニューラルネットワークをSwiftで書いてみた。(その6)

昨日は強化学習用のHMEの実装を行った。 今日はそれらのデータの保存とロードが出来るようにする。 (2016-04-08追記:いろいろ問題があったので、大幅に修正する予定) NSKeyedArchiver、NSKeyedUnarchiver データをファイルに保存し、ロードする一つの方法…

強化学習用のニューラルネットワークをSwiftで書いてみた。(その5)

昨日は強化学習用のHMEの計算を行列で表現した。 今日はそれを使って実際に実装していく。 なお、Rubyでの実装は、以下を参照: GateNetworkクラス まずはゲートネットワークの実装。 //============================== // ValueNetwork //-----------------…

強化学習用のニューラルネットワークをSwiftで書いてみた。(その4)

昨日は強化学習用のニューラルネットワークの実装を行った。 今日はHMEの実装を行うために、同様にHMEの計算を行列で表現していく。 強化学習用のHMEの計算 ここでは、HMEへの入力を 、出力を とする。 また、エキスパートネットワーク の出力を 、パラメー…

強化学習用のニューラルネットワークをSwiftで書いてみた。(その3)

昨日は強化学習用のニューラルネットワークの計算を行列で表現した。 今日はそれを使って実際に実装していく。 なお、Swiftでの行列演算については、以下を参照: ここで定義したMatrixクラス、Vectorクラスを使っていくことになる。 また、Rubyでの実装は以…

強化学習用のニューラルネットワークをSwiftで書いてみた。(その2)

昨日は乱数生成器の実装を行った。 今日は強化学習用のニューラルネットワークの計算を行列で表現する。 強化学習用のニューラルネットワークの計算 説明を簡単にするために、ここでは次のようなニューラルネットワークを考える: 3層ニューラルネットワーク…

強化学習用のニューラルネットワークをSwiftで書いてみた。(その1)

強化学習の関数近似にニューラルネットワークを組合せるということをやってきていた。 強化学習については以下から: ニューラルネットワークについては以下から: 複数のニューラルネットワークを組合せるHME(Hierarchical Mixtures of Experts)について…

シンギュラリティはやってくるのか。

AlphaGoが囲碁のトップ棋士に4-1で勝ち越したことで、にわかにシンギュラリティ(技術的特異点ーー AIが人間を超えること)が起こる真実味が増してきた、というのがある。 これに関して、自分が思っていることを書いてみたい。 ちなみに、シンギュラリティに…

強化学習とニューラルネットワークを組合せてみた。(まとめ)

これまでの各記事は以下から。 イントロ 強化学習とニューラルネットワークを組合せ中。 - いものやま。 ○×ゲームの実装 強化学習とニューラルネットワークを組合せてみた。(その3) - いものやま。 テーブル型Sarsa()法の実装 強化学習とニューラルネット…

強化学習とニューラルネットワークを組合せてみた。(その15)

昨日は関数近似にHMEを使ったSarsa()法の実装を行った。 今日はそれを使って実際に学習を行ってみる。 HMEの構成 学習を行うにあたって、HMEの構成は、TD Learning of Game Evaluation Functions with Hierarchical Neural Architecturesとほぼ同じ構成にし…

強化学習とニューラルネットワークを組合せてみた。(その14)

昨日は関数近似のためのHMEの実装を行った。 今日はいよいよHMEを関数近似に使ったSarsa()法の実装。 ファイルの整理 ただ、いざ実装しようと思うと、違ってくるのは関数近似の部分だけで、それ以外はまったく同じ。 なので、ちょっとバカらしい感じが。 そ…

強化学習とニューラルネットワークを組合せてみた。(その13)

昨日はゲートネットワークの実装を行った。 今日はそれを使って関数近似のためのHMEの実装を行う。 ValueHMEクラス 関数近似のためのHMEをValueHMEクラスとして実装していく。 #==================== # value_hme.rb #-------------------- # 価値ベクトルを…

強化学習とニューラルネットワークを組合せてみた。(その12)

昨日はHMEを強化学習の関数近似に使うときの勾配計算について説明した。 今日からは実際にRubyで実装を進めていく。 まずはゲートネットワークの実装から。 GateNNクラス ゲートネットワークをGateNNクラスとして実装していく。 #==================== # gat…

強化学習とニューラルネットワークを組合せてみた。(その11)

前回はドロップアウトを実装したニューラルネットワークを強化学習の関数近似に使う実験をした。 けど、結果としてはうまくいかなかった。 そこで、次はHMEを強化学習の関数近似に使うのを試してみる。 HMEについては、以下を参照: HMEの出力の重みに関する…

強化学習とニューラルネットワークを組合せてみた。(その10)

昨日はドロップアウトの実装を行った。 今日はそれで実際に学習を行ってみた。 中間層のユニット数: 128、ドロップさせるユニット数: 32 まず、中間層のユニット数を128、ドロップさせるユニット数を32にして、1,000,000回、2,000,000回、3,000,000回、学習…

強化学習とニューラルネットワークを組合せてみた。(その9)

昨日は複数のインスタンスを同時に学習するということを試してみた。 これ自体は有効に思われ、あとは複数のインスタンスの出す結果をどうやって統合するのかが課題になった。 その方法の一つとして考えられる、ドロップアウトの実装を行ってみた。 なお、ド…

強化学習とニューラルネットワークを組合せてみた。(その8)

昨日は中間層のユニット数を増やす実験をしてみた。 大体うまく動いていたけど、そこで出た課題として、自己対戦だと局所的な戦略に特化してしまって、他の場面に出くわしたときにうまく動けないことが多いようだった。 そこで、複数のインスタンスを用意し…

強化学習とニューラルネットワークを組合せてみた。(その7)

昨日はパラメータをいろいろ変える実験をやってみた。 結論から言えば、そもそも学習がうまくいっていない感じだった。 そして、論文をちょっと調べてみると、○×ゲームに対して関数近似にニューラルネットワーク(+α)を使うものだと、中間層のユニット数に8…

強化学習とニューラルネットワークを組合せてみた。(その6)

昨日は関数近似にニューラルネットワークを使ったSarsa()法を実装してみた。 けど、うまくいかなかったので、いろいろパラメータを変えてみるということをやってみた。 パラメータテスト パラメータとして調整しないといけないものは、次の4つ: 中間層のユ…

強化学習とニューラルネットワークを組合せてみた。(その5)

昨日はテーブル型のSarsa()法の実装を行った。 今日はいよいよ関数近似にニューラルネットワークを使ったSarsa()法の実装してみる。 NNSarsaComクラス 関数近似にニューラルネットワークを使ったSarsa()法のクラスは、NNSarsaComクラスとした。 #===========…

強化学習とニューラルネットワークを組合せてみた。(その4)

昨日は○×ゲームを人がプレイできるようにするところまで実装した。 今日はテーブル型のSarsa()法を実装する。 SarsaComクラス ということで、さっそく。 #==================== # sarsa_com.rb #-------------------- # テーブル型のSarsa(λ) AI #==========…

強化学習とニューラルネットワークを組合せてみた。(その3)

昨日は強化学習の関数近似として使うニューラルネットワークの実装を行った。 さっそくSarsa()法と組合せたいところなんだけど、その前にいろいろ実装。 Markモジュール まずはマーク(○、×、空白)を表すためのMarkモジュールから。 #==================== …

強化学習とニューラルネットワークを組合せてみた。(その2)

昨日は強化学習の関数近似としてニューラルネットワークを使うときの勾配計算について書いた。 今日はそのニューラルネットワークを実際にRubyで実装してみる。 ニューラルネットワークの仕様 まず、ざっとした仕様を。 構造 3層ニューラルネットワーク 入力…

強化学習とニューラルネットワークを組合せてみた。(その1)

昨日書いたとおり、現状ではあまり上手くいってない。 でも、とりあえず書いてみる。 関数近似としてニューラルネットワークを使う Sarsa()法の関数近似としてニューラルネットワークなどを使う場合、その関数のパラメータに関する勾配を求める必要がある。 …

強化学習について学んでみた。(まとめ)

ということで、長く続いてきたけど、これでオシマイ。 これまでの各記事は、以下から。 強化学習とは? イントロダクション 強化学習のコンセプト 基本的な用語の定義 「知識利用」と「探査」のバランスの問題 非連想的な問題、n本腕バンディット問題 n本腕…

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

昨日は、関数近似を組合せる方法が、従来のテーブル型の拡張になっていることを確認した。 今日は、関数近似の1つである、線形手法について説明する。 線形手法 線形手法では、線形関数を使って、価値ベクトルを近似する。 といっても、状態や状態行動対はの…

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

昨日は強化学習に関数近似を組合せる方法を説明し、パラメータの更新式を導き出した。 ところで、この方法はこれまでのテーブル型の手法と矛盾したものになっていないのか、というのが気になるところ。 そこで、今日は、昨日導き出したパラメータの更新式が…

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

昨日は関数近似の説明をするための準備を行った。 今日は関数近似を強化学習とどのように組合せていくのか説明する。 関数近似による価値ベクトルの表現 強化学習に関数近似を組合せる場合、状態価値ベクトルや行動価値ベクトルを、パラメータをもった関数で…

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

前回はSarsa()法について説明した。 今日からは関数近似について説明していく。 これまでの方法の限界と関数近似 これまでの方法では、状態価値ベクトル、行動価値ベクトルの各要素を、メモリ上に(配列などで)そのまま保存し、参照、更新してきた。 このよ…

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

昨日は、前方観測的見方と後方観測的見方が等価であることを示した。 今日は、Sarsa法に適格度トレースの考えを適用したSarsa()法について説明する。 Sarsa()法 といっても、もう準備は終わっていて、強化学習について学んでみた。(その25) - いものやま。…

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

昨日は、適格度トレースについて説明した。 ただ、元々の前方観測的見方と、適格度トレースを使った後方観測的見方が等価であるかどうか、という問題が残った。 今日はそれについて。 前方観測的見方と後方観測的見方の等価性 さて、正直、この説明は本来な…

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

昨日はTD()法について説明した。 今日は、これを実際に実装できるようにするために、適格度トレースについて考えていく。 TD()法のイメージ まず、TD()法のイメージを確認しておくと、次のような感じ。 各段がそれぞれステップTD法になっていて、それぞれの…

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

一昨日はこれまでのおさらいと、ステップTD法とついて説明した。 今日は、さらにアルゴリズムを融合させて、TD()について考えていく。 モンテカルロ法とTD学習の融合(続き) TD()法 ステップ収益は、いずれも本質的には同じ値を推定しているので、重みを使…

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

すごく久々に。 前回の内容、覚えてるかなw 前回まではTD学習について説明していて、最後に○×ゲームに対してQ学習を使ったAIを実装した。 今日からはTD()について説明していく。 動的計画法、モンテカルロ法、TD学習のおさらい まずは、これまでのおさらいか…

「BirdHead」の思考ルーチンを作ってみた。(その5)

昨日はアクション選択と学習のアルゴリズムを実装した。 今日は、パラメータの保存とロードを実装して、クラスとして完成させる。 SarsaComクラス(続き) 保存とロード 保存とロードの実装を入れたクラス全体の様子は、以下のようになる。 (省略されている…

「BirdHead」の思考ルーチンを作ってみた。(その4)

昨日はプレイヤー・ビューの特徴ベクトル化とそれを使った価値の計算について説明した。 今日はそれを使ったアクションの選択と学習について説明していく。 SarsaComクラス(続き) アクションの選択 アクションの選択は、Sarsa()法を使うので、任意のソフト…

「BirdHead」の思考ルーチンを作ってみた。(その3)

昨日はグリーディAIを実装した。 今日からは強化学習を使ってAIを作っていく。 方針 まず、方針について。 強化学習にはいくつかのアルゴリズムがあるけれど、今回はSarsa()法を使う。 これは強化学習について学んでみた。(その19) - いものやま。で説明し…

強化学習について学んでみた。(その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) - いものやま。 今日は、評価された状態価値を使って、方策を改善していくことを考えていく。 方策改善 さて、方策評価が出来たのなら、今度はその方策を変えることで、状態価値(…