ディープラーニングの超基本論文一覧

[JTPA ML勉強会](https://github.com/JTPA/learn_DL_together)向けに、基本となるクラシックなDL論文をまとめておきます。

2014-2016はファンダメンタルなテクニック／アーキテクチャについての論文が多く、導入することで一気にパフォーマンスが上がったり収束しやすくなったりして大変エキサイティングな _あげあげ〜_ な時代でした。

今では何気なく普通に使われているものばかりですが、それぞれの論文がどんな問題にフォーカスをあて、どうやって解決してきたのかを見ておくことでML/DLの本質が理解しやすいと思っています。

__みんなで読もう、DL!__


# 基本テクニック系 論文

### 1. ReLU

__[“Rectified Linear Units Improve Restricted Boltzmann Machines”](http://www.cs.toronto.edu/~fritz/absps/reluICML.pdf) (2010) Cited by 9,076__

DLの立役者ヒントン先生の論文。それまでに使われていたシグモイドやtanhなどの伝達関数では、入力の値が大きくなると出力値の傾きがゼロに近くなってしまって学習時にバックプロパゲーションでフィードバックを与えることができないという問題がありました。

ReLUを使うとx>0なら傾き（微分値）は常に1となり計算コストがかからず、それでいて非線形性も担保できます。これによりDLでレイヤーを重ねることのコストが大幅に下がりました。

<div align="center"><img width="480" src="https://upload.wikimedia.org/wikipedia/commons/6/6c/Rectifier_and_softplus_functions.svg"></div>

### 2. Dropout

__[“Dropout: A Simple Way to Prevent Neural Networks from Overfitting”](https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf) (2014) Cited by 19,126__

これもヒントン先生の論文。学習中にランダムにノードの出力をカットすることで、まだ学習の進んでいないセル・経路の学習を促すテクニックです。例えば一つ前のレイヤーで有能なノードが現れて後段の皆がそれに迎合する出力を出すようになったところで、突然その有能なノードが消えたため他の情報を使って推測することを促されるイメージです。あるいは汎化性能をあげることにも役立ちます。

<div align="center"><img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145675/36898e2b-835e-c3fe-3b77-0998be6357c6.png"></div>

### 3. Network In Network

__[“Network In Network”](https://arxiv.org/pdf/1312.4400.pdf) (2013) Cited by 3,688__

”CNNの一つのセルの中にさらにNeural Netを入れたもの”と聞くと何やら複雑に聞こえますがこれは単に1x1のCNNです。これを使って入力データの次元を削減し新しい特徴量にマッピングし直したり、後述するResidual Blockに入れるために次元数を合わせることができます。複数のレイヤーからの入力をマージしたり、安価に非線形性をあげたりなどシンプルで使いやすいアーキテクチャです。

<div align="center"><img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145675/0f2163c6-95d1-d873-65fb-fad0bbcdba39.png"></div>

### 4. Heの初期化

__[“Delving deep into rectifiers: Surpassing human-level performance on imagenet classification”](https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/He_Delving_Deep_into_ICCV_2015_paper.pdf) (2015) Cited by 7,668__

tensorflowなどのフレームワークを用いた場合、大抵のウェイトはデフォルトでこの論文の方法で初期化されていると思います。

例えば初期のウェイトが大きすぎた場合、各層の出力値は層を経るごとにどんどん大きくなり発散しオーバーフローしてしまいます。逆にウェイトが小さすぎた場合は値が減衰し最終レイヤーに到達する前に消失してしまいバックプロパゲーションで学習することができません。この論文では利用する伝達関数ごとに、各レイヤーでの出力値の分散が一様になるように初期値を決める方法を提案しています。

ただし後述するBatch Normalization, Adam optimizer, ResNetなどのアーキテクチャが浸透するにつれ、現在では初期値はあるていど適当でも大丈夫な気もしますが。

### 5. Adam オプティマイザ

__[“Adam: A Method for Stochastic Optimization”](https://arxiv.org/pdf/1412.6980.pdf) (2014) Cited by 41,484__

個人的なDL3種の神器の一つ。全てのパラメータに共通の学習係数を持つのではなく、各パラメータごとに学習係数を保持しておく手法です。最初は学習係数を小さくすることで初期のパラメータの発散を抑え、さらにはパラメータ探索時にモーメントを持たせることで勾配が小さいところでもパラメータ探索を進めることができます。

これと合わせて学習係数のdecay（減衰）を組み合わせることで比較的簡単にモデルの最高性能を得ることができます。


### 6. Batch Normalization

__[“Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift”](https://arxiv.org/pdf/1502.03167v3.pdf) (2015) Cited by 17,501__

個人的なDL3種の神器の一つ。BN(Batch Normalization)は、各レイヤーの特徴量の出力を平均が0で分散が一定になるように整流してくれます。

これが何故重要かというと、例えばあるレイヤーが学習をした結果、パラメータ（ウェイト＋バイアス）が更新されたとします。その場合次のレイヤーに入ってくる値の分布が変わることになり、次のレイヤーは学習済みのパラメータを新しい入力値に合わせて修正しないといけません。それがどんどん次のレイヤーに伝播していくことになり、モデルのレイヤー数が増えると前段の学習時に後段のモデルの修正に大きな時間がかかりどんどん不安定になってしまいます。

またBNを使うと入力特徴量がノーマライズされていなかったりダイナミックレンジが高い状態でもDLを適用することができ、大変便利なテクニックです。



# CNN/画像処理アーキテクチャ系 論文

とりあえず下記の論文をさらっと読んで構造を確認しておくと、ネットワークの構成やハイパーパラメータ（CNNのサイズ、レイヤー数、フィルタ数、プーリング）にあたりをつけるのに役立ちます。

### 1. AlexNet

__[“ImageNet Classification with Deep Convolutional Neural Networks”](https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf) (2012) Cited by 60,985__

大規模画像認識コンテスト(ILSVRC)で優勝し、DLが着目される発端となったモデルです。当時の他の画像処理アルゴリズムに対してシンプルな構成にも関わらず大量のパラメータ（約6000万）を使って高い性能を出しました。CNN + Max pooling + Dropout + FCN の基本構成（8レイヤー）です。

<div align="center"><img width="480" src="https://qiita-image-store.s3.amazonaws.com/0/145675/d6cca561-f00d-ca92-8925-74f557ef571b.png"></div>

### 2. VGGNet

__[“Very deep convolutional networks for large-scale image recognition”](https://arxiv.org/pdf/1409.1556v6.pdf) (2014) Cited by 36,846__

3x3の最小のCNNを使うことで学習の負担を減らし、代わりに計19レイヤーまで深さ方向に拡張して非線形な表現力を上げました。このネットは画像から特徴を抽出するのに便利で、学習済みモデルは特徴抽出機としても今でも良く使われてます。

<div align="center"><img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145675/2742739d-4aa1-d4e2-8359-07722d8b5fcb.png"></div>

### 3. GoogLeNet

__[“Going Deeper with Convolutions”](https://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Szegedy_Going_Deeper_With_2015_CVPR_paper.pdf) (2015) Cited by 20,961__

CNNを並列に構成することで複数サイズのカーネルを使って特徴を計算できるだけでなく、計算資源の有効活用も図られています。さらには推論の出力も三箇所用意されていて、複雑なモデルでも部分的に学習することが可能です。


<div align="center"><img width="480" src="https://qiita-image-store.s3.amazonaws.com/0/145675/045270b4-303d-6106-abf6-2938e1c17679.png"></div>

### 4. ResNet

__[“Deep Residual Learning for Image Recognition”](https://arxiv.org/pdf/1512.03385v1.pdf) (2015) Cited by 44,206__

レイヤーの入力値を、複数のCNNで構成される中間層のアウトプットに足しこんだボトルネットと呼ぶ構造を提案しました。Residual(残差あるいは差分)だけを学習するようにして、学習の最初期段階でも出力が安定していて発散しにくく、152層という非常に深いモデルでも学習できるようになっています。

<div align="center"><img width="480" src="https://qiita-image-store.s3.amazonaws.com/0/145675/7abfcd72-d504-bc6f-2008-342a2d9817d2.png"></div>

<div align="center"><img width="480" src="https://qiita-image-store.s3.amazonaws.com/0/145675/c6b87277-fc83-e050-d203-f3a68dc34a95.png"></div>

### 5. U-Net

__[“U-Net: Convolutional Networks for Biomedical Image Segmentation”]
(https://arxiv.org/pdf/1505.04597.pdf) (2015) Cited by 13,442__

今まで上で見たモデルは全て、画像内の各部から得られた情報を集約し最終的に一つの答えを出すものでした。こちらは各ピクセルごとに情報を出力できます。医療系の画像診断や、写真内に写っている人や背景を分離する時などに良く使われます。

各CNNブロックの出力を保持しておき、pooling(縮小)を経てより広域のサマライズされた情報を抽出した後、それをup sampling(拡大)しながら浅いレイヤーのローカルな情報と合わせて最終的な情報を出力します。

<div align="center"><img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145675/52979a95-1cee-12e1-b227-77717d934524.png"></div>

### 6. DenseNet

__[“Densely Connected Convolutional Networks”]
(https://arxiv.org/pdf/1608.06993.pdf) (2016) Cited by 8,513__

イメージとしてはResNetをより広域のブロックに適用したものです。各CNNブロックの出力を単に次のブロックに送るのではなく、それより前のブロックの出力を入力に使うことでreceptive fieldの狭いより一次入力に近い値も合わせて使うことができます。

<div align="center"><img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145675/565632e8-0df6-f7ae-f778-f080bb59f0d5.png"></div>



# 時系列処理／重要アーキテクチャ系 論文

### 1. RNN
__[“Sequence to sequence learning with neural networks”](http://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf) (2014) Cited by 10,067__

例えば時系列データ処理において、前フレームのモデルの出力層の一つ前の中間層出力を保持しておき、次のフレームで入力データと共に別の入力値として利用する構造です。

今までのDNNでは常に決まったサイズの入力しか入れられなかったものが、可変長のサイズの入力を受け取りまた可変長の出力を出すことができる点でも画期的なものでした。これにより一気に文章や音声のような時系列データの処理にDLが応用されていきます。


<div align="center"><img width="480" src="https://qiita-image-store.s3.amazonaws.com/0/145675/4770920d-495b-4d6e-2682-15d98a2eb3d7.png"></div>

### 2. LSTM

__[“Long short-term memory”](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.676.4320&rep=rep1&type=pdf) (1997) Cited by 30,320__

個人的なDL3種の神器の一つ。例えばRNNで文章を処理する場合、ずっと前の段落で言及された内容を保持しておくことは構造的にほぼ不可能でした。LSTM(Long Short Term Memory) では内部にstateを持つことができ、時系列でのパターン認識能力が格段に向上しています。

<div align="center"><img width="480" src="https://qiita-image-store.s3.amazonaws.com/0/145675/570a8277-a736-7ca7-3af6-1c2a0f5b9157.png"></div>

### 3. GAN

__[“Generative adversarial nets”](http://papers.nips.cc/paper/5423-generative-adversarial-nets.pdf) (2014) Cited by 17,929__

__["Unsupervised representation learning with deep convolutional generative adversarial networks"](https://arxiv.org/pdf/1511.06434.pdf) (2015) Cited by 6,010__

Generator（生成器,G）と、Discriminator（識別器,D)の2つのモデルを使って画像生成をするGANという技術です。まず、Gは与えられたランダムな入力パラメータから画像を生成します。Dは、この画像が通常の画像なのか、Gが生成した画像なのかを正しく識別するようトレーニングされます。その後、GはDが画像を識別できない画像を生成するようにトレーニングされこれを繰り返していきます。

ここで上記のGANに、DLのCNN技術や各種のテクニックを適用したDCGAN(Deep Convolutional Generative Adversarial Networks)が提案され、以降で非常に様々なGANの応用モデルが提案されることになります。DCGANでは生成機Gに対して丁度反対のアーキテクチャを持つモデルを識別器Dとして利用しています。

<div align="center"><img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145675/a2852feb-feff-eeb4-a33c-62f0c8b8f512.png"></div>

### 4. DQN

__[“Human-level control through deep reinforcement learning”](https://daiwk.github.io/assets/dqn.pdf) (2015) Cited by 9,497__

DeepMindの構築した強化学習の論文です。ある時点では一つの選択肢しか選べず、その結果からしか学習できない点で俗にいう"AI"のイメージに近いです。

Q Learningと呼ばれる古典的な強化学習の手法にプラスして、画像からの特徴抽出にCNNを使いさらにミニバッチやオプティマイザなどのDL技術を組み合わせて一気にパフォーマンスを上げた論文です。これを機にロボットの制御やボードゲームのAIなどへの応用が進みました。

<div align="center"><img width="480" src="https://qiita-image-store.s3.amazonaws.com/0/145675/3327b55e-e9c3-34fe-ad68-fd0e01429261.jpeg"></div>