最近読んだDeepLearning系の論文メモ


はじめに
=========

最近勉強のため http://arxiv.org/ に投稿される論文を読むようにしています。
しかし、ただ読んだだけだと内容とか何を読んだかすら忘れてしまうので、アウトプットを残すという意味でメモします。

※ **間違った理解をしている可能性がある**ので、このメモを読むときはご注意ください。

読んだもの
=========

[A Neural Conversational Model](http://arxiv.org/abs/1506.05869)
---------
###概要
seq2seqを使って会話するModelを作ってみた話。
いろいろな分野の会話を単にseq2seqで学習させたけど、わりと良い感じだったみたいです。
例えば、ITに関するHelpdeskで、以下の様な会話になったそうです。他にもいくつか会話例が載っています。

	(論文より引用)
	★ Conversation 1: VPN issues.
	
	Machine: hi
	Human: hello
	Machine: could you please let me know what are
	the operating systems you are using ?
	Human: i am using linux
	Machine: ok it was in the ssl vpn on which you
	stated it was broken
	Machine: please check if you are logged in to
	corp network
	Machine: what is the error that you are running
	please
	Human: i am seeing an error related to vpn
	Machine: what is the error message that you are
	getting when connecting to vpn using network
	connect ?
	Human: connection refused or something like
	that
	Machine: may i know the version of network
	connect you connect ?
	Human: i am not sure i know that
	Machine: is the network connect prompting for
	any user certificate
	Machine: ?
	Human: yes
	Machine: are you at home or at work at the moment
	?
	Machine: office ?
	Human: i am at home
	Machine: try this
	Machine: goto <URL> page and enter your
	name and password
	Human: done
	Machine: try logging in with <NAME> and
	check if its working fine now
	Human: yes , now it works !
	Machine: great
	Machine: anything else that i can help
	Human: no , that was very useful
	Machine: you are other than <NAME> : )
	Machine: have a nice night

### 感想

これをStackoverflow とかでやったら楽しそう。

[Large-scale Simple Question Answering with Memory Networks](http://arxiv.org/abs/1506.02075)
------------
###概要
Memory Networksというのを使って、大規模なQ&Aモデルを作ったという話。
あまり内容を覚えてない・・・
###感想
Memory Networkというのが何かと思って読んだのだけど、今読み返してもよくわからないな・・・

[Learning to Execute](http://arxiv.org/abs/1410.4615)
-------------
###概要
LSTMに(かなり制限のある)Pythonっぽい言語を character-by-character で読み込ませて、正しい出力が予測できるか、という話。例えばこういう感じ。

```
Input:
	j=8584
	for x in range(8):
		j+=920
	b=(1500+j)
	print((b+7567))
Target: 25011.
```

結果的には、結構ちゃんと学習できたそうですが、学習のさせ方はかなりセンシティブだったようです。

###感想
こんな入出力の関係をLSTMなどだけで学習できるというのはかなり驚きました。

[Probabilistic Reasoning via Deep Learning: Neural Association Models](http://arxiv.org/abs/1603.07704)
----------

### 概要
Neural Association Models(NAM) というのを使って ２つのevent A-(関係r)->Bの間の条件付き確率Pr(B|A)を計算させようという話。

基本的にはこんな感じで計算します（もう少し構造を変えたものも紹介されています）。 最後 `f`の部分でsigmoid関数を適用して0~1の確率を計算しています。
左下の`Relation vector`が関係rで、右下の`Head entity vector`がEventA、上の`Tail entity vector`がEventBになります。

![1603_07704v1_pdf.png](https://qiita-image-store.s3.amazonaws.com/0/11124/69e913f3-6077-f3ae-1516-bdb632338164.png "1603_07704v1_pdf.png")
<div style="text-align:right">(論文より)</div>

### 感想
こういう NNを向かい合わせて出力結果をにょっろっと計算して利用するモデルはいくつか見る気がします。NNはこの辺の自由度が非常に高いのが面白いですね。

[Weight Normalization: A Simple Reparameterization to Accelerate Training of Deep Neural Networks](http://arxiv.org/abs/1602.07868)
----------
### 概要
WeightNormalization という BatchNormalizationとは少し異なる正規化を用いることで、学習の高速化と精度の向上が実現するという話。
通常各レイヤーで一つのNodeの出力$y$は、入力ベクトル$\boldsymbol{x}$ に対して下記のようにベクトル$\boldsymbol{w}$、スカラー$b$ で計算されますが、

$y= \phi(\boldsymbol{wx}+b) $

その $\boldsymbol{w}$ を下記のように更に２つに分解します。
$g$ はスカラーで、 $\boldsymbol{v}$ はベクトルです。

$\boldsymbol{w} = \frac{g}{||\boldsymbol{v}||}\boldsymbol{v}$

つまり、「大きさ」と「方向」の２つに分けるというのがポイントみたいで、基本的にはこれだけで色々うまくいくみたいです。
ただ、 $\boldsymbol{v}$ が発散しないように初期値に気をつけるとか少しそういうのもあるようです。

この手法は、CNN、LSTM、強化学習などでも効果があるとのことです。

### 感想
とても面白いですね。
$g$ と $\boldsymbol{v}$ が 偏微分で別々に変化するので大きさの発散などが起こりにくくなるという感じなのかな。割と単純な方法で良い成果が出るとのことで自分でも試してみたい手法です。

[Identity Mappings in Deep Residual Networks](http://arxiv.org/abs/1603.05027v1)
---------
### 概要
Residual Network(残差?誤差? ネットワーク)についての研究で、結論としては割りと単純(Identity Mapping)にした方が色々成果が良かった、という話。
色々やってみたけど、(b)のように 純粋な入力を下の層まで真っ直ぐに伝える構造が一番良かったようです。1000Layerを重ねても学習できているらしいです。

![1603_05027v1_pdf.png](https://qiita-image-store.s3.amazonaws.com/0/11124/540395da-5160-848f-4d53-543452bff53d.png "1603_05027v1_pdf.png")


### 感想
これも面白い。今度試してみたい。
Weight Normalizationでもそうですが、学習において誤差の伝播を如何に伝達できるかというのがとても重要なんだなと思いました。Weight Normalizationと組み合わせてみるとより良い結果になりそうですね。

[Neural Turing Machines](http://arxiv.org/abs/1410.5401)
-------------

下記サイトでも紹介されていますが、少し昔だけど有名な話なようです。
http://aptenodytesforsteri.hatenablog.com/entry/2015/01/04/153800

ニューラルネットワークとチューリングマシンの組み合わせとか胸熱です。
文字列のコピーやソートなどの簡単なアルゴリズムを学習させることができるようです。

https://medium.com/snips-ai/ntm-lasagne-a-library-for-neural-turing-machines-in-lasagne-2cdce6837315#.5mbzzjfcg
には、同じようにNTMの説明と学習していく様子(メモリを書き換えていく様子）がAnimeGif的にあって面白いです。

ググると出てきますが、[TensorFlowでの実装](https://github.com/carpedm20/NTM-tensorflow)などもある（まだ私は動かしてもいないですが）のでいろいろ楽しそうです。

[Neural Programmer-Interpreters](http://arxiv.org/abs/1511.06279) (added 2016/5/6)
-------------------------
### 概要
ICLR 2016 Best Paper Award に選ばれた話。
「小学生が習うような筆算の足し算」「数値のソート」「画像を見ながら車を正面になるように回転させる」というようなアルゴリズムを１つの Neural Programmer-Interpreters(NPI) と呼ぶ仕組みで学習させるという話。
従来の大量のIN/OUTデータからアルゴリズムを抽出して学習するというのではなく、手順自体を教師あり学習で習得するというもの。ポイントは１つのNPIが複数のアルゴリズムを学習していけるところと、それほど多くないトレーニングで手順を習得し、汎化能力も単純なLSTMなどより高いところかな。

### 感想
* こういうのは人間が既に認識しているアルゴリズムや手順を学ばせるのには向いているかもしれない。人間がよく行う作業をマクロ化するような感じで、Agentが学習してあとは良しなにやってくれる、みたいに。
* ある意味当たり前のことをやっているようにも見える。でもこれをNNで表現できると実証したことは素晴らしいなぁ。
* 内部構造も面白い。最近こういうLSTM+外部メモリ?のような構成をよく見るなぁ。人間の脳もこんな印象なので納得感はある。
* プログラムを人間が書けなくても、AIに丁寧に手順を説明すればプログラムを書くのと同じ効果が得られるということなのかな。子供にやり方を教えるように。Program言語での表現はある程度厳密さが求められるわけだけど、子供に教えるときは厳密さはそこまで必要ではない。こういうのが普及してくるとまた違う世界が待っているのかなぁ。

[Revisiting Batch Normalization For Practical Domain Adaptation](http://arxiv.org/abs/1603.04779) (added 2016/5/6)
----------------------
### 概要
* BNのLayerがDomain(異なるデータソースのデータセット？)の特徴を表しているとの仮説をもとに、各LayerのBNの部分をTargetデータからの平均と標準偏差で更に正規化すると異なるDomainで学習したモデルでも良い結果が出るという話。BN部分の平均と標準偏差のベクトル集合は、異なるDomainだとはっきり分類できる(SVMなどで)という実験もあった。

### 感想
* んー、わかったようなわからないような。まあとにかくデータは白い方がいいのだな、と思った。NNの内部状態を調べると面白いことがわかることがしばしばあるなぁ。

[Towards Bayesian Deep Learning: A Survey](http://arxiv.org/abs/1604.01662) (added 2016/5/6)
----------------
### 概要
* Bayesian deep learning(BDL)についてのSurvey。BDLは「DeepLearningによる認知」と「Bayesianによる推論」を組み合わせたらもっと高度なタスクをこなせるようになるというイメージ。前半では基本的なDeepLearningの仕組み(MLP,AE,CNN,RNN)とProbabilistic Graphical Models (PGM)を説明し、後半では色々なBDLの紹介がある。

### 感想
* PGMやBDLの用語や記法・式が全然慣れてなくて雰囲気しかわからなかった。。まあ、いつか読み返したらもう少しわかるかな。確かにDeepLearningとBayesianの組み合わせは上手く行けば強そうなので、いつか理解したい。


さいごに
=======

もう少し、英語を早く精度よく読めるようになりたいものです。
徐々に慣れてはきているものの、電車読んでいると10分くらいで眠くなる・・・