2018-01-01から1年間の記事一覧

pytorchでcategorical(distributional) dqnを実装

categorical dqnの論文はこちら A Distributional Perspective on Reinforcement Learning https://arxiv.org/pdf/1707.06887.pdf 元のdqnでは報酬を一つの値として扱っているが、分布として扱うことによって学習のパフォーマンスが向上したというもの。 ま…

gcpのdatalabにchromeからアクセスできない

しばらくdatalabを使っていたらブラウザからアクセスできなくなった。 対応するportにchromeからアクセスすると、このページは動作していません、という画面になる。 gcloud compute ssh hogeでVMに直接入ることは可能だったのでいろいろ試してみるとこんな…

google colaboratoryで学習が進まなくなった

google colaboratoryで強化学習のプログラムを書きつつ動かしていたのだが、少し間があいて1ヶ月ぶりくらいに動かしてみたら、学習がまったく進まなくなってしまった。こんな感じで青が以前、赤が今回。 自分のプログラムを同じ状態に戻して↑の状態なので、…

hatena blogでtexによる下付き文字がうまく表示されない

以下のような形で書いたところうまく表示されない [tex: x_{i,j} + x_{j,k}] このように表示される [tex: x{i,j} + x{j,k}] 少しググってみるとこちらのブログでその原因が解説されていた はてなブログのTeX記法で数式を書く時用のチートシートと注意点 - ぴ…

pytorchでnoisy networkを実装

元の論文はこちら [1706.10295] Noisy Networks for Exploration 常にその時点で価値の高い行動を取り続けた場合、最初に価値が高くなった行動が取られ続け、別の行動を取る可能性がなくなってしまう。それを防ぐため元のDQNではε-greedy法と呼ばれる手法を…

pytorchでprioritized experience replyを実装

元の論文はこちら [1511.05952] Prioritized Experience Replay DQNで学習を進めるための重要なテクニックとしてexperience replyというものがあり、これはメモリにためておいたstateやactionの記録をmini batchとしてランダムに取り出して学習させるという…

グループ毎に重複が存在することを検知するクエリ

あるカラム(group_id)の値でグルーピングした上で、カラム(value)の値が重複しているgroup_idを抽出したい。 # table: example group_id value 1 1 1 2 1 3 2 1 2 3 2 3 例えば上記のようなテーブルがあった場合は、group_id=2のvalue=3が重複している。 以…

pytorchでindexのリストを指定してtensorの要素を取得

Double DQNの実装に必要になるちょっとした計算についてメモ 2つの2次元tensor x, yを用意し、"xの各行において最大の値を持つ要素"と同じ位置にあるyの要素を取得する >>> x = torch.rand(3,5) >>> x tensor([[ 0.0778, 0.6633, 0.4953, 0.1461, 0.4691],…

dueling networkを調べつつpytorchで実装

強化学習の性能を改善する方法の一つであるdueling networkについて調べたのでメモ。まず参考にしたのはこちらのqiitaの記事 【深層強化学習】Dueling Network 実装・解説 詳細な部分についてはこちらの論文を参考にした [1511.06581] Dueling Network Archi…

Google Colab上でgym-retroのソニックを学習

以前迷路の学習を方策勾配法でやってみて、それをこちらにまとめた 方策勾配法とニューラルネットワークで迷路を学習 - MEMOcho- これと同じ方法をgym-retroに適用してソニックの学習を試してみた。ちなみに先に結果を書いておくと、スコアをちゃんと取れる…

OpenAI Retro Contestの環境でリプレイ映像を見る

OpenAI Retro Contestの環境構築そのものは既にまとめてくれている方がいて、大変わかりやすかった。この通りにやったら簡単にGym Retro Integrationを動かすことができた。ありがとうございます。 OpenAI Retro Contestの「Gym Retro Integration」でソニッ…

方策勾配法とニューラルネットワークで迷路を学習

DQNで実装したものはネット上でよく見かけるが方策勾配法を使ったものは意外と見つからないのでやってみた。 題材はこちら 第5回 ⽅策勾配法で迷路を攻略|Tech Book Zone Manatee 私はこの連載で強化学習の基本的な実装方法を学んだがとてもわかりやすかっ…

pytorchでエラー(Leaf variable was used in an inplace operation)

タイトルに書いたエラーが出たのでわかったことをメモ とりあえず解決に最も有用だった情報はこれ Leaf variable has been moved into the graph interior - autograd - PyTorch Forums 生成したtensorの要素を直に書き換える処理をした上で、backwardを行う…

ios向けビルドは通るがandroid向けビルドは失敗

cocos2dxで開発している際、タイトルのようなことがあったので原因を調査。 ちなみにiosはxcodebuild、androidはgradleでビルドしていた。 iosとandroidのビルド結果を見比べると、iosのビルド時には以下のようなビルドオプションがついていることがわかった…

git lfs管理下のファイルに対するコンフリクト解消漏れを防ぐ

git

コンフリクト解消をしそこねて>>>>>>みたいなマーカーがそのまま上がってしまってる場合がある。以下に紹介されているようにhookを書いてがマーカーが含まれていればcommitをキャンセルすることで回避できる。 [Git]コンフリクトをよりスマートに解消したい…

中身がポインタのvectorから特定要素を削除

c++

vectorから特定の条件でフィルターをかけて要素を削除するにはerase-removeというイディオムがある。std::remove_ifで条件に当てはまる要素を後ろに移動させ、返り値のiteratorから元のvectorの最後尾までをeraseにかける、というもの。 cf. std::remove_if…

photonとの通信で接続が切れたことを検知する

photonとの接続が切断されたことを検知する方法を調べたのでメモ 公式のドキュメントはこちら https://doc.photonengine.com/ja-jp/realtime/current/reference/analyzing-disconnects photonのサーバとクライアントはheartbeatのメッセージを投げあって、接…

c+11でメンバ変数初期化のされ方

c++

c+11で書いていてクラス内のメンバの中に、コンストラクタで初期化子が定義されてないものがあったのでどのような挙動になるのか調べてみた。 これらを見るとわかりやすい C++11: Syntax and Feature C++の初期化は分かりにくい - ぷろみん まず、staticが付…