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

いものやま。

雑多な知識の寄せ集め

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

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

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

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

Swiftでの行列計算について調べてみた。(まとめ)

これまでの各記事は以下から。 行列、ベクトル、Splatの生成 Swiftでの行列計算について調べてみた。(その1) - いものやま。 Swiftでの行列計算について調べてみた。(その2) - いものやま。 行列、ベクトルの演算 Swiftでの行列計算について調べてみた。…

Swiftでの行列計算について調べてみた。(その4)

昨日は行列とベクトルの演算について説明した。 今日はもうちょっとスマートな書き方が出来るようにするために、ラッパークラスを作っていく。 Matrixクラス まず、行列を表すMatrixクラスの実装。 なお、途中に出てくるVectorクラスはMatrixクラスを継承し…

Swiftでの行列計算について調べてみた。(その3)

昨日はベクトルとSplatの説明をした。 今日はこれらを使った演算について。 転置 まずは転置。 次の関数が用意されている: // 転置した行列を生成して返す。 la_object_t la_transpose( la_object_t matrix); // 行列 スカラー倍 次はスカラー倍。 // スカ…

Swiftでの行列計算について調べてみた。(その2)

昨日はAccelerateフレームワークの概要と、行列の生成と内容の取得について説明した。 今日はベクトルとSplatについて。 ベクトルの生成 ベクトルといっても、実際には1行もしくは1列の行列。 ただ、扱いやすいように、いろいろマクロや関数が用意されている…

Swiftでの行列計算について調べてみた。(その1)

ニューラルネットワークの実装をするときに必要となるのが、行列計算。 もちろん、Arrayを使ってベタに実装してもいいんだけど、それだと速度が気になるところ。 調べてみると、Accelerateフレームワークを利用するといいようだったので、少し調べてみた。 …

端末でGitを使いやすくする。

Gitには、端末での操作を楽にするためのツールが用意されている。 今日はそれらの紹介。 なお、シェルはBashを使っているという前提。 プロンプトに現在のブランチを表示する Gitのワークツリーで作業をしているとき、GitはSubversionとは違ってブランチを頻…

『ロボットの心 7つの哲学物語』を読んでみた。

ここ数日、過去に書いた文章を引っ張り出してきてるけど、これも過去に書いたもの。 書いたのは2004年8月31日。 『ロボットの心 7つの哲学物語』(講談社現代新書、柴田正良 著)を読んでいてふと思ったことのメモ。 ロボットの心-7つの哲学物語 (講談社現代…

『存在』を生むもの。

昨日は『ちょびっツのツの字』に投稿した文章を紹介した。 この文章には「関係性」の哲学がよく表れているんだけど、いろいろ足りていない部分がある。 その足りていない部分に関する、当時の自分の問題意識を書いた散文を紹介してみる。 書いたのは2003年の…

大切な『ココロ』。

昨日の記事に関連して、『ちょびっツのツの字』に投稿した他の文章も。 ちょびっツのツの字―Chobits fan book (KCデラックス)作者: CLAMP出版社/メーカー: 講談社発売日: 2003/03メディア: コミックこの商品を含むブログを見る 昨日の記事は、以下から。 以…

「この身体」の位相性について。

昨日、シンギュラリティに関する話をした。 ここでは最後にステークホルダーになるための身体の必要性について述べた。 そのことに関して、昔自分が書いた文章をちょっと思い出したので、紹介したいと思う。 ちょびっツのツの字 自分はCLAMPが好きなんだけど…

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

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

Curses for Ruby。(まとめ)

これまでの各記事は以下から。 インストールと動作確認 Curses for Ruby。(その1) - いものやま。 cursesライブラリの初期化・終了と、構成要素 Curses for Ruby。(その2) - いものやま。 ウィンドウの描画について Curses for Ruby。(その3) - いもの…

Curses for Ruby。(その6)

昨日は文字の入力について説明した。 基本的な内容はこれで終わりなんだけど、出力する文字を修飾したり、色をつけたい場合もあるかと思うので、今日は出力する文字の修飾について説明していく。 出力文字の修飾 出力する文字に修飾をつけたい場合、属性を指…

Curses for Ruby。(その5)

昨日はウィンドウの位置と移動について説明した。 今日は文字の入力について。 文字の入力と入力モード 通常、文字の入力はバッファリングされ、Enterキーを押された時点で初めてユーザプログラムにはデータが渡される。 しかし、それではCUIアプリケーショ…

Curses for Ruby。(その4)

昨日はウィンドウの生成・削除と描画について説明した。 今日はウィンドウの位置と移動について説明する。 ウィンドウの位置と移動 ウィンドウは、位置を変えたりサイズを変更したりすることが可能。 まず、ウィンドウの位置を取得するには、以下のメソッド…

Curses for Ruby。(その3)

昨日はcursesライブラリの基本的な内容について説明した。 今日はウィンドウの生成・削除と描画について。 ウィンドウの生成・削除 ウィンドウは、画面に出力する文字情報を持った矩形の領域。 Cursesでは、ウィンドウに対して文字を追加・削除する操作を行…

Curses for Ruby。(その2)

昨日はcursesライブラリの動作確認まで行った。 今日はcursesライブラリの基本的な内容について。 cursesライブラリの初期化・終了処理 cursesライブラリを使う場合、まず初期化が必要となる。 cursesライブラリを初期化するには、次のモジュール関数を呼び…

Curses for Ruby。(その1)

以前、noteに書いた記事だけど、こちらにも。 CUIのアプリケーションを作るときによく利用されるのが、Cursesというライブラリ。 Rubyの場合、準標準ともいえるcursesライブラリがあり(※1.9.3までは標準添付ライブラリ)、これを使うのが一般的だと思う。 …

キーボード。

自分が昔ブログに書いた文章を見ていて、そういえばこんな記事も書いてたよなというのがあったので、こちらでも。 以下の記事の中で引用している文章は、ホントに素晴らしいと思う。 書いたのは2005年9月20日。 先日、母校の文化祭に行って手に入れた文芸誌…

Rubyはいいぞ。

昔ブログに書いた記事から。 当時のタイトルは『Rubyとは・・・。』で、書いたのは2005年10月23日。 当時のことを補足しておくと、自分はもっぱらPerlでプログラムを書いてて、Perlのオブジェクト指向機能も知ってた。 で、他に使ってた言語はCとJavaという…

CodeIQ「ロング・ロング・ストリング」問題を解いてみた。

CodeIQで出題された「ロング・ロング・ストリング」問題。 自分もRubyで解いたので、コードを公開してみる。 問題 問題は、以下のとおり: 自然数 に対して、関数 を、( の 乗)を 10 進数で表したときの桁数と定義します。 例えば、 ですので、 です。同様…

wpコマンドの紹介。

昨日、Screenの紹介をした。 それに関連して、wpコマンドを紹介したい。 別の仮想端末と同じディレクトリに移動したい Screenを使っていてよくあるのが、「別の仮想端末と同じディレクトリに移動したい」ということ。 そんなときに使えるのが、wpコマンド。 …

Screenのススメ。

プログラムをするとき、長時間を過ごすことになる端末。 このとき、一つのウィンドウ、一つのディレクトリだけで作業していると、何かと不便。 かといって、何個もウィンドウを開いたりすると、煩雑。 Macのターミナルの場合、タブを使うことも出来るけど、…

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

これまでの各記事は以下から。 イントロ 強化学習とニューラルネットワークを組合せ中。 - いものやま。 ○×ゲームの実装 強化学習とニューラルネットワークを組合せてみた。(その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の出力の重みに関する…

HMEについて学んでみた。(まとめ)

これまでの各記事は以下から。 HMEの構造と出力の計算 HMEについて学んでみた。(その1) - いものやま。 HMEでの学習 HMEについて学んでみた。(その2) - いものやま。 HMEの出した結果 HMEについて学んでみた。(その3) - いものやま。 HMEの構造 HMEは…

HMEについて学んでみた。(その3)

昨日はHMEでの学習について説明した。 これでHMEについての説明自体は終わりなんだけど、せっかくなので、論文内で言及されているHMEの成果についても。 参照している論文は、以下のもの: TD Learning of Game Evaluation Functions with Hierarchical Neur…

HMEについて学んでみた。(その2)

昨日はHMEの構造と出力の計算について説明した。 今日はHMEでの学習について説明する。 HMEでの学習 HMEでの学習は、HMEを一種の混合分布モデルとみなして、尤度が最大になるように学習を行う。 ・・・ということみたいなんだけど、これをまだ自分がちゃんと…

HMEについて学んでみた。(その1)

○×ゲームに対して、強化学習にニューラルネットワークを組み合わせるということをやってきた。 その中で、複数のインスタンスを同時に学習していくのは、ある程度有効だということが分かった。 ただし、それらの結果を組み合わせる方法が必要という話になっ…

『組み立て×分解! ゲームデザイン ゲームが変わる「ルール」のパワー』を読んでみた。

気になったので、さっそく読んでみた。 組み立て×分解! ゲームデザイン ――ゲームが変わる「ルール」のパワー作者: 渡辺訓章,やまい出版社/メーカー: 技術評論社発売日: 2016/02/18メディア: 単行本(ソフトカバー)この商品を含むブログ (2件) を見る ちなみ…

端末とエスケープシーケンスの話。

昔のブログで書いた記事から。 書いたのは2010年9月26日。 事の起こり 会社でscreenを使い出すようになって、じゃあ家でもscreenを使えるようにしようと思い、ついでにbashのプロンプトも会社で使っているのと同じにしようと思って、会社での設定を自分のPC…

グリグリやれば音楽が出来るアプリ「PlayGround」の紹介。

画面を指でこすってグリグリやるだけでいい感じの音楽が作れるアプリ「PlayGround」が面白かったので、紹介。 PlayGround • Music At Your FingertipsHLO S.A.ミュージック無料 操作は画面をこするだけ! アプリを起動すると、いくつかのカタログが用意され…

顔画像から音楽を生成するサービスの紹介。

音楽を簡単に作れる方法ってないのかなぁ、と思って、いろいろ調べてみたら、顔画像から音楽を生成してくれるサービスを見つけた。 これがなかなか面白かったので、紹介。 FACE MELODY サイトにアクセスすると、軽快なBGMが。 実際、このBGMで流れているよう…

強化学習とニューラルネットワークを組合せてみた。(その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()法の関数近似としてニューラルネットワークなどを使う場合、その関数のパラメータに関する勾配を求める必要がある。 …

強化学習とニューラルネットワークを組合せ中。

強化学習の関数近似器としてニューラルネットワークを組合せるのを試しにやってみてる。 けど、正直、うまくいってない。。。 とりあえず、現状についてちょっと書いてみる。 ○×ゲームに対する強化学習 試しているのは、○×ゲームに対する強化学習について、…