メニュー

技術ブログ

Denso IT Lab.社員による技術情報の紹介

Denso IT Laboratory researcher's blog sites

数式

RSS

ページトップへ

開発ー強化ー合宿

どうも,吉田悠一です.
デンソーの研修施設,AQUAWINGSを利用し,開発合宿に行ってきました.

場所

場所は,浜名湖の湖畔で,絶景の場所にあります.
ファシリテーションは最高で,非常に広いスペースでガラス張りで気持ちいい空間でコードを書くことができました.
ただし,日中は,浜名湖の反射でまぶしすぎて何もできないのでブラインドを下げることになってしまいます・・・・.

開発合宿のお題は,強化学習にしました.
恥ずかしながら,弊社で強化学習を実際に実装して,トライした人間がいなかったので,この際,合宿でOpenAI gymのチュートリアルであるspinning upを一から読んで,サンプルコードをPyTorchで実装するというのがお題になりました.

Spinning up

Spinning upは,Open AI gymが公開している,強化学習をディープラーニングで解くということを主眼に強化学習の基礎から実装までを解説しているコンテンツです.
Spinning upの中身は非常に読みやすく,実際に実装したコードまで公開しており,非常に勉強になる内容となっています.
私は強化学習を一通り,本と紙で学んだのですが・・・・実際に実装したことはありませんでした.
弊社のメンバーも実際に実装したメンバーがいなかったので,やってみようということで,お題が決まったのでした.
実際の成果物は,github.comに公開しています.

1日半黙々とドキュメントと論文とTensorFlowのコードを読んだので・・・・大変疲れましたが,みっちり強化学習を勉強するよい時間にすることができました.

ご飯

合宿といえば,ご飯です.AQUAWINGSのご飯,よいです.

晩御飯の前菜.
晩御飯

朝ごはん.
朝ごはん

おいしかった・・・・.
人間,いい場所でいいご飯があれば,パフォーマンス発揮できるものですね.

最後に

日は落ちて・・・合宿は終了しました.

bellman

これがベルマンキオスクに見えるようになったので,合宿の価値があったということでした.チャンチャン.

このエントリーをはてなブックマークに追加

Demitasse〜DNN高速化ライブラリを公開しました

どうも吉田悠一です.
弊社の近藤がNIPS2016のWorkshopで発表したDemitasseをオープンソースで公開します.

“Satoshi Kondo, “Demitasse: SPMD Programing Implementation of Deep Neural Network Library for Mobile Devices”, ML Systems Workshop NIPS 2016 PDF

https://github.com/DensoITLab/Demitasse

llvmとispcを使い,Deep Learningの計算を高速化します.
Demitasseによれば,iOSデバイス上でもGPUを使わずに数百msecの時間で,Caffe Model Zooによる画像認識を実行することができます.

ビルド方法は,githubのリポジトリのドキュメントに書いてあります.
また,Linuxで使いたい方は,dockerを使って,簡単に環境を構築できます.

簡単に処理性能を確認したいという方向けに、iOS限定ですが、デモアプリも公開しておりますので、お試しください。(アプリインストール後、アプリ内で事前学習済みデータのダウンロードを行う必要がありますが、データサイズが数百MBと大きいため、学習済みデータのダウンロードはWiFi環境などで行うことをお勧めいたします)

AppStore

このエントリーをはてなブックマークに追加

「変分ベイズ学習」の学習

機械学習プロフェッショナルシリーズの変分ベイズ学習を読んでいる時に,もっとも引っかかった変分ベイズの停留条件の導出の式展開を真面目にやってみました.
汎関数微分や試験関数の厳密性は勘弁してください・・・・・・.
間違っているところがあれば,指摘いただけるとうれしいです.

自由エネルギー$F$が停留する条件を考えると,それがベイズ事後分布の条件になるよ・・・というところです.

##

自由エネルギー$F$を$r_s$で微分し,汎関数微分の値が常に0となる停留条件を考える.
$r_s$の関数として,自由エネルギー$F$を整理する.

$\scriptsize{ \begin{eqnarray}
F({r_s}) &=& \int {\prod\limits_{m = 1}^S {{r_m}({\omega _m}) \cdot \log \frac{{\prod\limits_{m = 1}^S {{r_m}({\omega _m})} }}{{p(D|\omega ) \cdot \prod\limits_{m = 1}^S {p({\omega _m})} }}} } d\omega \tag{1} \\
&=& \int {\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot {r_s}({\omega _s})} \cdot \log \frac{{\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot {r_s}({\omega _s})} }}{{p(D|\omega ) \cdot \prod\limits_{m \ne s} {p({\omega _m})} \cdot p({\omega _s})}}} d\omega \tag{2} \\
&=& \iint {\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot {r_s}({\omega _s})} \cdot \log \frac{{\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot {r_s}({\omega _s})} }}{{p(D|\omega ) \cdot \prod\limits_{m \ne s} {p({\omega _m})} \cdot p({\omega _s})}}}d{\omega _{\backslash s}}d{\omega _s} \tag{3} \\
\end{eqnarray} } $

さらに,確率密度関数の全積分の値が$1$である制約条件をラグランジュの未定乗数をかけて,この自由エネルギーに追加する.

$\scriptsize{ \begin{eqnarray}
1 &=& \int {{r_s}({\omega _s})d{\omega _s}} \tag{4} \\
F({r_s}) &=& \iint {\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot {r_s}({\omega _s})} \cdot \log \frac{{\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot {r_s}({\omega _s})} }}{{p(D|\omega ) \cdot \prod\limits_{m \ne s} {p({\omega _m})} \cdot p({\omega _s})}}}d{\omega _{\backslash s}}d{\omega _s} \\ & & + \lambda \cdot (1 – \int {{r_s}({\omega _s})d{\omega _s}} ) \tag{5} \\
\end{eqnarray} } $

汎関数微分の定義微分を考える.

$\scriptsize{ \begin{eqnarray}
\delta F &=& \int {\frac{{\delta F[\varphi ({\omega _s})]}}{{\delta \varphi ({\omega _s}^\prime )}}} \cdot f({\omega _s}^\prime )d{\omega _s}^\prime \tag{6} \\
&=& \mathop {\lim }\limits_{\varepsilon \to 0} \frac{{F(\varphi ({\omega _s}) + \varepsilon \cdot f({\omega _s})) – F(\varphi ({\omega _s}))}}{\varepsilon } \tag{7} \\
\end{eqnarray} } $

試験関数と汎関数に代入する関数を以下のように定義する.

$\scriptsize{ \begin{eqnarray}
f({\omega _s}) & \triangleq & \Delta {r_s}({\omega _s}) \tag{8} \\
\varphi ({\omega _s}) & \triangleq & {r_s}({\omega _s}) \tag{9} \\
\end{eqnarray} } $

この定義微分$(6)(7)$に,定義$(8)(9)$を代入する.

$\scriptsize{ \begin{eqnarray}
\delta F &=& \int {\frac{{\delta F[{r_s}({\omega _s})]}}{{\delta {r_s}({\omega _s}^\prime )}}} \cdot \Delta {r_s}({\omega _s}^\prime )d{\omega _s}^\prime \tag{10} \\
\delta F &=& \mathop {\lim }\limits_{\varepsilon \to 0} \frac{{F({r_s}({\omega _s}) + \varepsilon \cdot \Delta {r_s}({\omega _s})) – F({r_s}({\omega _s}))}}{\varepsilon } \tag{11} \\
\end{eqnarray} } $

式$(11)$に,自由エネルギー$(5)$を代入する.

$\scriptsize{ \begin{eqnarray}
\delta F &=& \mathop {\lim }\limits_{\varepsilon \to 0} \frac{1}{\varepsilon }\iint {\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot ({r_s}({\omega _s}) + \varepsilon \cdot \Delta {r_s}({\omega _s}))} \cdot \log \frac{{\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot ({r_s}({\omega _s}) + \varepsilon \cdot \Delta {r_s}({\omega _s}))} }}{{p(D|\omega ) \cdot \prod\limits_{m \ne s} {p({\omega _m})} \cdot p({\omega _s})}}}d{\omega _{\backslash s}}d{\omega _s} \\
& & – \frac{1}{\varepsilon }\iint {\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot {r_s}({\omega _s})} \cdot \log \frac{{\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot {r_s}({\omega _s})} }}{{p(D|\omega ) \cdot \prod\limits_{m \ne s} {p({\omega _m})} \cdot p({\omega _s})}}}d{\omega _{\backslash s}}d{\omega _s} \\
& & + \frac{1}{\varepsilon }\lambda \cdot (1 – \int {{r_s}({\omega _s}) + \varepsilon \cdot \Delta {r_s}({\omega _s})d{\omega _s}} ) – \frac{1}{\varepsilon }\lambda \cdot (1 – \int {{r_s}({\omega _s})d{\omega _s}} ) \\
&=& \mathop {\lim }\limits_{\varepsilon \to 0} \frac{1}{\varepsilon }\iint {\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot ({r_s}({\omega _s}) + \varepsilon \cdot \Delta {r_s}({\omega _s}))} \cdot \left[ {\log ({r_s}({\omega _s}) + \varepsilon \cdot \Delta {r_s}({\omega _s})) + \log \frac{{\prod\limits_{m \ne s} {{r_m}({\omega _m})} }}{{p(D|\omega ) \cdot \prod\limits_{m \ne s} {p({\omega _m})} \cdot p({\omega _s})}}} \right]}d{\omega _{\backslash s}}d{\omega _s} \\
& & – \frac{1}{\varepsilon }\iint {\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot {r_s}({\omega _s})} \cdot \log \frac{{\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot {r_s}({\omega _s})} }}{{p(D|\omega ) \cdot \prod\limits_{m \ne s} {p({\omega _m})} \cdot p({\omega _s})}}}d{\omega _{\backslash s}}d{\omega _s} \\
& & – \frac{1}{\varepsilon }\lambda \cdot \int {\varepsilon \cdot \Delta {r_s}({\omega _s})d{\omega _s}}
\end{eqnarray} } $

${\log ({r_s}({\omega _s}) + \varepsilon \cdot \Delta {r_s}({\omega _s}))}$を線形近似する.

$\scriptsize{
\begin{eqnarray}
\frac{{\delta F}}{{\delta {r_s}}} &=& \mathop {\lim }\limits_{\varepsilon \to 0} \frac{1}{\varepsilon }\iint {\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot \left[ {{r_s}({\omega _s}) + \varepsilon \cdot \Delta {r_s}({\omega _s})} \right]} \cdot \left[ {\log {r_s}({\omega _s}) + \frac{{\varepsilon \cdot \Delta {r_s}({\omega _s})}}{{{r_s}({\omega _s})}} + \log \frac{{\prod\limits_{m \ne s} {{r_m}({\omega _m})} }}{{p(D|\omega ) \cdot \prod\limits_{m \ne s} {p({\omega _m})} \cdot p({\omega _s})}}} \right]}d{\omega _{\backslash s}}d{\omega _s} \\
& & – \frac{1}{\varepsilon }\iint {\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot {r_s}({\omega _s})} \cdot \left[ {\log {r_s}({\omega _s}) + \log \frac{{\prod\limits_{m \ne s} {{r_m}({\omega _m})} }}{{p(D|\omega ) \cdot \prod\limits_{m \ne s} {p({\omega _m})} \cdot p({\omega _s})}}} \right]}d{\omega _{\backslash s}}d{\omega _s} \\
& & – \lambda \cdot \int {\Delta {r_s}({\omega _s})d{\omega _s}} \\
&=& \mathop {\lim }\limits_{\varepsilon \to 0} \frac{1}{\varepsilon }\iint {\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot {r_s}({\omega _s})} \cdot \frac{{\varepsilon \cdot \Delta {r_s}({\omega _s})}}{{{r_s}({\omega _s})}}}d{\omega _{\backslash s}}d{\omega _s} \\
& & + \frac{1}{\varepsilon }\iint {\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot \varepsilon \cdot \Delta {r_s}({\omega _s})} \cdot \left[ {\log {r_s}({\omega _s}) + \frac{{\varepsilon \cdot \Delta {r_s}({\omega _s})}}{{{r_s}({\omega _s})}} + \log \frac{{\prod\limits_{m \ne s} {{r_m}({\omega _m})} }}{{p(D|\omega ) \cdot \prod\limits_{m \ne s} {p({\omega _m})} \cdot p({\omega _s})}}} \right]}d{\omega _{\backslash s}}d{\omega _s} \\
& & – \lambda \cdot \int {\Delta {r_s}({\omega _s})d{\omega _s}} \\
&=& \mathop {\lim }\limits_{\varepsilon \to 0} \iint {\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot \Delta {r_s}({\omega _s})} }d{\omega _{\backslash s}}d{\omega _s} \\
& & + \iint {\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot \Delta {r_s}({\omega _s})} \cdot \left[ {\log {r_s}({\omega _s}) + \frac{{\varepsilon \cdot \Delta {r_s}({\omega _s})}}{{{r_s}({\omega _s})}} + \log \frac{{\prod\limits_{m \ne s} {{r_m}({\omega _m})} }}{{p(D|\omega ) \cdot \prod\limits_{m \ne s} {p({\omega _m})} \cdot p({\omega _s})}}} \right]}d{\omega _{\backslash s}}d{\omega _s} \\
& & – \lambda \cdot \int {\Delta {r_s}({\omega _s})d{\omega _s}} \\
&=& \iint {\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot \Delta {r_s}({\omega _s})} }d{\omega _{\backslash s}}d{\omega _s} \\
& & + \iint {\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot \Delta {r_s}({\omega _s})} \cdot \left[ {\log {r_s}({\omega _s}) + \log \frac{{\prod\limits_{m \ne s} {{r_m}({\omega _m})} }}{{p(D|\omega ) \cdot \prod\limits_{m \ne s} {p({\omega _m})} }} – \log p({\omega _s})} \right]}d{\omega _{\backslash s}}d{\omega _s} \\
& & – \lambda \cdot \int {\Delta {r_s}({\omega _s})d{\omega _s}} \\
&=& \iint {\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot \Delta {r_s}({\omega _s})} }d{\omega _{\backslash s}}d{\omega _s} \\
& & + \iint {\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot \Delta {r_s}({\omega _s})} \cdot \log \frac{{{r_s}({\omega _s})}}{{p({\omega _s})}}}d{\omega _{\backslash s}}d{\omega _s} \\
& & + \iint {\prod\limits_{m \ne s} {{r_m}({\omega _m}) \cdot \Delta {r_s}({\omega _s})} \cdot \log \frac{{\prod\limits_{m \ne s} {{r_m}({\omega _m})} }}{{p(D|\omega ) \cdot \prod\limits_{m \ne s} {p({\omega _m})} }}}d{\omega _{\backslash s}}d{\omega _s} \\
& & – \lambda \cdot \int {\Delta {r_s}({\omega _s})d{\omega _s}} \\
&=& \int {\left[ {\int {\prod\limits_{m \ne s} {{r_m}({\omega _m})} d{\omega _{\backslash s}}} } \right]} \Delta {r_s}({\omega _s})d{\omega _s} \\
& & + \int {\left[ {\int {\prod\limits_{m \ne s} {{r_m}({\omega _m})} d{\omega _{\backslash s}}} } \right]} \cdot \log \frac{{{r_s}({\omega _s})}}{{p({\omega _s})}}\Delta {r_s}({\omega _s})d{\omega _s} \\
& & + \int {\left[ {\int {\log \frac{1}{{p(D|\omega )}} \cdot \prod\limits_{m \ne s} {{r_m}({\omega _m})} d{\omega _{\backslash s}}} } \right]} \cdot \Delta {r_s}({\omega _s})d{\omega _s}_s \\
& & + \int {\left[ {\int {\log \frac{{\prod\limits_{m \ne s} {{r_m}({\omega _m})} }}{{\prod\limits_{m \ne s} {p({\omega _m})} }} \cdot \prod\limits_{m \ne s} {{r_m}({\omega _m})} d{\omega _{\backslash s}}} } \right]} \cdot \Delta {r_s}({\omega _s})d{\omega _s} \\
& & – \lambda \cdot \int {\Delta {r_s}({\omega _s})d{\omega _s}} \\
&=& \int {\Delta {r_s}({\omega _s})d{\omega _s}} \\
& & + \int {\log \frac{{{r_s}({\omega _s})}}{{p({\omega _s})}}\Delta {r_s}({\omega _s})d{\omega _s}} \\
& & + \int {\left[ {\int {\log \frac{1}{{p(D|\omega )}} \cdot \prod\limits_{m \ne s} {{r_m}({\omega _m})} d{\omega _{\backslash s}}} } \right]} \cdot \Delta {r_s}({\omega _s})d{\omega _s}_s \\
& & + \int {const.} \cdot \Delta {r_s}({\omega _s})d{\omega _s} \\
& & – \lambda \cdot \int {\Delta {r_s}({\omega _s})d{\omega _s}} \\
\end{eqnarray}
}$

${r_s}({\omega _s})$に無関係な項は定数としてまとめる.また,${{\omega _{\backslash s}}}$の期待値計算としてまとめられる項は,期待値の表記でまとめる.

$\scriptsize{ \begin{eqnarray}
\frac{{\delta F}}{{\delta {r_s}}} &=& \int {\left[ {\log \frac{{{r_s}({\omega _s})}}{{p({\omega _s})}} + {{\left\langle {\log \frac{1}{{p(D|\omega )}}} \right\rangle }_{\prod\limits_{m \ne s} {{r_m}({\omega _m})} }} + 1 – \lambda + const.} \right] \cdot \Delta {r_s}({\omega _s})} d{\omega _s} \tag{12} \\
\end{eqnarray} } $

式$(12)$のラグランジュの未定乗数に定数を押し付ける.

$\scriptsize{ \begin{eqnarray}
\frac{{\delta F}}{{\delta {r_s}}} &=& \int {\left[ {\log \frac{{{r_s}({\omega _s})}}{{p({\omega _s})}} + {{\left\langle {\log \frac{1}{{p(D|\omega )}}} \right\rangle }_{\prod\limits_{m \ne s} {{r_m}({\omega _m})} }} + \lambda’ } \right] \cdot \Delta {r_s}({\omega _s})} d{\omega _s} \tag{13}
\end{eqnarray} } $

となり,${\log \frac{{{r_s}({\omega _s})}}{{p({\omega _s})}} + {{\left\langle {\log \frac{1}{{p(D|\omega )}}} \right\rangle }_{\prod\limits_{m \ne s} {{r_m}({\omega _m})} }} + \lambda’}$が0となるときに,汎関数微分の値は常に0となる.この条件を展開し,停留条件を得ることができる.

$\scriptsize{ \begin{eqnarray}
0 &=& \log \frac{{{r_s}({\omega _s})}}{{p({\omega _s})}} + {\left\langle {\log \frac{1}{{p(D|\omega )}}} \right\rangle _{\prod\limits_{m \ne s} {{r_m}({\omega _m})} }} + \lambda’ \tag{14} \\
– \lambda’ &=& \log \frac{{{r_s}({\omega _s})}}{{p({\omega _s})}} + {\left\langle {\log \frac{1}{{p(D|\omega )}}} \right\rangle _{\prod\limits_{m \ne s} {{r_m}({\omega _m})} }} \tag{15} \\
\exp ( – \lambda’ ) &=& \exp (\log \frac{{{r_s}({\omega _s})}}{{p({\omega _s})}}) \cdot \exp {\left\langle {\log \frac{1}{{p(D|\omega )}}} \right\rangle _{\prod\limits_{m \ne s} {{r_m}({\omega _m})} }} \tag{16} \\
\exp ( – \lambda’ ) &=& \frac{{{r_s}({\omega _s})}}{{p({\omega _s})}} \cdot \exp {\left\langle {\log \frac{1}{{p(D|\omega )}}} \right\rangle _{\prod\limits_{m \ne s} {{r_m}({\omega _m})} }} \tag{17} \\
{r_s}({\omega _s}) &=& \exp ( – \lambda’ ) \cdot p({\omega _s}) \cdot \exp {\left\langle {\log p(D|\omega )} \right\rangle _{\prod\limits_{m \ne s} {{r_m}({\omega _m})} }} \tag{18} \\
{r_s}({\omega _s}) & \propto& p({\omega _s}) \cdot \exp {\left\langle {\log p(D|\omega )} \right\rangle _{\prod\limits_{m \ne s} {{r_m}({\omega _m})} }} \tag{19} \\
\end{eqnarray} } $

このエントリーをはてなブックマークに追加