覚え書きブログ

OpenAI GymのインストールとQ学習の実装(Windows)

windows subsystem for Linuxubuntu環境に、OpenAI Gymをインストールし、Q学習してみた。以下は、手順のメモである。

準備

1) windows subsystem for Linuxの設定とUbuntuのインストール
Qiitaのページhttps://qiita.com/Aruneko/items/c79810b0b015bebf30bbを参考にして、windows subsystem for Linuxの設定を行い、Ubuntuをインストールした。

2)Anacondaのインストール
hirotaka-hachiya.hatenablog.com
を参考にし、wgetでAnacondaのLinux版「Anaconda3-5.0.1-Linux-x86_64.sh」をwgetでダウンロードし、実行してインストール。

~/.bashrcにAnaconda3のパスを設定し、「source ~/.bashrc」を実行。

export PATH=/mnt/c/Users/hachiya/Documents/works/anaconda3/bin:$PATH


3) WindowsのXサーバXmingのインストール
windowsUbuntuがインストールできると言っても、GUI無しの状態でインストールされるので、自前でXserverを用意する必要がある。幸い、Windowsにはフリーでも優れたXserver「Xming」があるので、それをインストールする。具体的には、Xming-6-9-0-31-setup.exeを、
https://ja.osdn.net/projects/sfnet_xming/releases/
からダウンロードし実行してインストールした。

~/.bashrcにDISPLAYの設定をし、「source ~/.bashrc」を実行。

export DISPLAY=localhost:0.0

OpenAI Gymのインストール

Qiitaのページhttps://qiita.com/ishizakiiii/items/75bc2176a1e0b65bdd16を参考にインストールする。

1) 基本パッケージのインストール

> pip install gym

2) 基本パッケージのインストール

> sudo apt-get install -y cmake zlib1g-dev libjpeg-dev xvfb libav-tools xorg-dev libboost-all-dev libsdl2-dev swig

これらのパッケージは基本的な開発環境に関するものなので、ある程度開発用途で使っている環境であれば必要ないかもしれない。今回のwindow上のubuntuは使い始めたばかりだったので、インストールが必要だった。なお、pythonまわりのパッケージはAnaconda3を用いているため一切インストールしていない。インストールするとpython環境が2つ存在してややこしいことになるので、注意。

3) Atari社のGameおよびその他の環境ライブラリのインストール

> pip install 'gym[atari]'
> pip install 'gym[all]'


4) 動作確認
以下のように、pythonインタラクティブモードで、mountaincarの環境を読み込み、render()を実行しxmingでmountaincarが表示されるかどうか確認。

> python
>>> import gym
>>> env = gym.make('MountainCar-v0')
>>> env.reset()
array([-0.44697984,  0.        ])
>>> env.render()

f:id:hirotaka_hachiya:20180528184959p:plain

pythonを用いたQ学習の実装

Qiitaのページhttps://qiita.com/ishizakiiii/items/75bc2176a1e0b65bdd16を参考にし、mountainCarタスクを学習するQ学習のアルゴリズムオブジェクト指向で実装してみた。
github.com

コードは以下の通り(GitHubGistでも公開中)。
128行目のisDemoが「Flase」の時は158行目以降の学習が始まり、100エピソードごとにmodelsディレクトのpklファイルにQテーブルが保存される。一方、学習後にisDemoを「True」にして実行すると、136行目からのデモが始まり、保存したpklを所定のエピソード間隔(100エピソードごと)で読み込んで、各エピソードでの方策を再現してくれるようになっている。

Tokyo Deep Learning Workshop2018

今日から4日間Tokyo Deep Learning Workshopに参加している。発表を聞いて気になったところをメモる。
http://www.ms.k.u-tokyo.ac.jp/TDLW2018/

  • Jun Zhu先生の発表

Bayesian Deep LearningのツールZhusuanの紹介.Tensorflow上で動く.
http://zhusuan.readthedocs.io/en/latest/

  • Emtiyaz Khan先生の発表

RMSpropやAdamでの勾配の計算は,variational inferenceの場合複雑になるが、natural gradientを導入すると簡単になるとのこと.
詳細は、以下の論文を参照.
Conjugate-Computation Variational Inference - Emtiyaz Khan
https://emtiyaz.github.io/papers/ism_talk.pdf
https://arxiv.org/abs/1712.01038
https://emtiyaz.github.io/papers/vprop_poster.pdf

  • klaus-robert mueller先生の発表

LRP: What makes a car a car
http://iphome.hhi.de/samek/pdf/BinICISA16.pdf

Deep Taylor Decomposition
http://heatmapping.org/deeptaylor/

  • Tom Schaul先生の発表

cumulant c: 報酬のことrewardとは言わないみたい
Markov: (c, \gamma, \pi)

Universal value function approximators (UVFA)
http://proceedings.mlr.press/v37/schaul15.pdf

universal value function V(s, f): 入力が状態sだけではなく、Forecast fの表現方法もある
sとvをそれぞれtwo streamで学習して、統合する方法などがある
forecastは、質問に対応してる。例えば、Questions about reaching goal directions

  • kevin murphy先生の発表

Neural Architecture Search (NAS)
learning transferable architecures for scalable image recognition
https://arxiv.org/pdf/1707.07012.pdf

Progressive neural architecture search
https://arxiv.org/abs/1712.00559

  • 甘利先生

ニューラルネットワークを解析するために,ランダム(正規分布に従う)に接続したネットワークを考える
各レイヤーのニューロンが多いという仮定
ネットワークのフィッシャー情報行列は,対角ブロッグ行列で表せる。各ブロックはレイヤーに対応し、
ブロック内の要素はレイヤーのノードに対応している
フィッシャー情報行列は、ブロック行列とバイアスの接続を考慮すると3つの項の和の形に分解することができる。また、その逆行列も同じ形となり、解析的に求められる
この解析的求めた逆行列を用いて、勾配を計算する

  • Pradeep Ravikumar先生

destructive approach

  • Watanabe Sumio先生

Leverage sample point: a sample point that affects the statistical estimation result strongly
Widely Applicable Information Criterion (WAIC)
E[G] = E[W] + O(1/n^2)
E[W] = d/n
AICの拡張
Gは,損失関数

cross valication requires that {Xi, Yi} is independent
AIC and WAIC do that {Yi|Xi} is independent

  • Le Song先生

fc層をkernel modelに置き換える
Algorithm: structured composition of manually designed operation
Embedded algorithm is flexible yet structured
モデルのノードをベクトル化(Embedding)

1. Identify structure
2. define graphical model
3. Embed inference algorithm
4. Link mebedding to target
5. Train

  • Li Erran Li先生

3D Object Detection: recent Advances
N=H x W pixel image has O(N^2) windows

prior, anchor
Focal loss to handle extreme foreground-vs-background class imbalance
F-pointnet
3D Point Cloud Data: 3D点群データ
PointNet
Unordered Input

  • Harada先生

Between Class Learning
複数カテゴリのデータを、ある割合でまぜて、NNにその割合を予測させる
BC Learning for Image: 異なるカテゴリの画像を合成する。その際にwaveformを用いる
少ないでデータのときに、精度が改善する、なぜ?
Fisher's criterionを用いて説明する。通常の分類問題はsmall Fisher criterionなので簡単すぎるが、
BC Learning for Imageを用いると、問題を難しくすることができる。

Domain Adaptation:
1) Maximize discrepancy by learning classifiers of categories in source domain
2) Minimize discrepancy by learning features
を繰り返す

GTA5で学習したモデルを実写のsemantic segmentationに応用

Alexaの覚え書き(設定と簡単なテスト)

まず、初期設定はスマートフォンアプリの「Amazon Alexa」を用いて行う。
アプリを開き、メニューから「設定」を選択して、「新しいデバイスをセットアップ」ボタンを押す。
以下のような画面が出るので、デバイス(今回はEcho Dot)を選択し、あとはガイドに従って設定をすればよい。
f:id:hirotaka_hachiya:20180221172241j:plain:w150

Amazon関連のスキル(いわゆるアプリ)はデフォルトで入っているが、それ以外にも様々なスキルが提供されている。
Amazon以外のスキルは、上記Amazon Alexaのメニューから「スキル」を選択して、以下のような画面を表示して好きなものをインストールする。
f:id:hirotaka_hachiya:20180221172746j:plain:w150

radikoクックパッドなどが人気があるようだ。
https://robotstart.info/2018/02/20/alexa-ranking-201801.html


以下は、Amazon musicで音楽を聴きながら、Alexにいろいろ聞いてみた例。
youtu.be

スキルを独自に開発するためには、AWSAWSデベロッパーへの登録が必要となる。
AWS
https://aws.amazon.com/jp/

AWSデベロッパー:
https://developer.amazon.com/ja/

それぞれ右上にある「コンソール」をクリックして新規にアカウントの登録すればよい。
AWSの登録にはクレジットカードが必要になるが、「Free」アカウントとして登録すれば特にお金はかからない(はず?)。