ラビットチャレンジ - 深層学習 Day1 Section1 入力層～中間層


# 0．概要
本記事は日本ディープラーニング協会認定の講座プログラムである「ラビット・チャレンジ」が提供している科目の1つである深層学習のレポートである。
記事タイトルに記載のとおり、Day1 Section1の入力層～中間層について以下にまとめる。

# 1．識別と生成

## 1.1．識別モデル
データを目的のクラスに分類する。
例）画像を犬や猫と識別(画像を入力とし、クラスの確率を出力)

条件「あるデータ$x$が与えられた」という条件のもとでクラス$C_{k}$である確率。

```math
P(C_{k}|x)
```

画像等の高次元なデータからクラスの確率のように低次元のデータを出力するため、必要な学習データは生成モデルより少ない。

### 1.1.1．具体的なモデル例
* 決定木
* ロジスティック回帰
* サポートベクターマシン(SVM)
* ニューラルネットワーク

## 1.2．生成モデル
特定のクラスのデータを生成する。
例）犬の画像がどういったものかを学習し、犬の画像を生成(クラスを入力とし、画像を出力)

条件「あるクラス$y$」に属する」という条件のもとでのデータ$C_{k}$の分布。

```math
P(x|C_{k})
```

クラスのような低次元データから画像のように高次元なデータを出力するため、必要な学習データは識別モデルより多く必要。
識別にも応用できる。

### 1.2.2．具体的なモデル例
* 隠れマルコフモデル
* ベイジアンネットワーク
* 変分オートエンコーダ(VAE)
* 敵対的生成ネットワーク(GAN)

## 1.3．識別関数
入力値$x$を直接クラスに写像(変換)する関数$f(x)$を推定する。
各クラスの確率を出すのではなくどのクラスに属するかのみを出力するため学習量は少なくて済む。

# 2．ニューラルネットワークの全体像

全体で4層以上(中間層が2層以上)あるニューラルネットワークをディープニューラルネットワーク(DNN)と呼ぶ。

## 2.1．入力層
説明変数を入力する部分。

## 2.2．中間層
入力層をもとに重み$w$とバイアス$b$を学習する部分。

## 2.3．出力層
最終的な結果(分類の確率等)を出力する部分。

## 2.4．誤差関数
目的変数と予測値の比較を行う関数。

## 2.5．ノード
ニューラルネットワークの1つ1つ(よくあるニューラルネットワークの図における丸で表されるもの)こと。

# 3．ニューラルネットワークでできること

回帰

* 結果予想(例：売上予想、株価予想)
* ランキング予想(例：競馬順位予想、人気順位予想)

分類

* 猫写真の判別
* 手書き文字認識
* 花の種類分類

回帰や分類自体は機械学習と同じ。

## 3.1．ニューラルネットワーク：回帰
連続する実数値を取る関数の近似。

例）

* 線形回帰
* 回帰木
* ランダムフォレスト
* ニューラルネットワーク

## 3.2．ニューラルネットワーク：回帰
離散的な結果を予想すること。

例）

* ベイズ分類
* ロジスティック回帰
* 決定木
* ランダムフォレスト
* ニューラルネットワーク

# 4．深層学習の実用例

* 自動売買

　ある時点の株価から1分後の株価を予測。
　時系列データ。

* チャットボット
* 翻訳

　入力された文章から答えとなる文章を出力する。
　文章を数字に置き換えて扱う。
　文章も1種の時系列データ(語順)。

* 音声解釈

　音声(波形)を数値として扱い、文字列を出力する。

* 囲碁、将棋AI

　ゲームの状況を数字に置き換えて扱う。

# 5．入力層～中間層

```math
u=wx+b
```

```math
z=f(u)
```

説明変数と重みの内積+バイアスの結果を活性化関数に入力して出力(ここでは中間層の出力なので次の層への入力となる)を得る。

$x_{i}$：入力(説明変数)
$w_{i}$：各説明変数に対する重み(どれだけ重視するか)
$b$：バイアス
$u$：総入力
$z$：出力
$f$：活性化関数

学習によって$w$と$b$を最適化していく。

# 6．確認テスト

## 6.1．確認テスト1
ディープラーニングは、結局何をやろうとしているか。
　→回答：ルールベースではなくデータから学習して識別や生成等といったタスクを行う。

どの値の最適化が最終目的か。
　→回答：重み、バイアス

## 6.2．確認テスト2
以下のニューラルネットワークを紙に書け。

* 入力層：2ノード1層
* 中間層：3ノード2層
* 出力層：1ノード1層

回答：
![nn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389699/9fdb37be-d5c2-9425-5bc7-7d83fc676a1d.png)

Excelで作りました…

## 6.3．確認テスト3
入力層～中間層の図式に動物分類の例を入れる。

回答：
![nn2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389699/d59188a4-685d-c91c-7014-509008e17086.png)

## 6.4．確認テスト4
以下の数式をPythonで書け。

```math
\begin{align}
u&=w_{1}x_{1}+w_{2}x_{2}+w_{3}x_{3}+w_{4}x_{4}+b \\
 &=Wx+b
\end{align}
```

回答：

```Python:
import numpy as np
u = np.dot(x, W) + b
```

numpyのdot関数でベクトルの内積や行列の積を計算できる。

## 6.5．確認テスト5
「1_1_forward_propagation.ipynb」から中間層の出力を定義しているソースを抜き出せ。

回答：

```Python:
z2 = functions.relu(u2)
```

入力層、中間層、出力症の3層構造のニューラルネットワークにおける中間層の出力部分。
u2は入力層から確認テスト4の式で算出した値を活性化関数ReLUに通して得られた値をもとに、中間層の重みとバイアスを使って確認テスト4の式で算出した値。
活性化関数ReLUを使用している。

# X．ラビットチャレンジとは
ラビットチャレンジとは、日本ディープラーニング協会認定の講座プログラムの1つ。
E資格を受験するためにはこのラビットチャレンジ等、いずれかの講座プログラムを修了しなければならない。

ラビットチャレンジの特徴は「現場で潰しが効くディープラーニング講座」の通学講座録画ビデオを編集した教材を使用した自習スタイルであるという点。
サポートは他の講座より少なく、受け身ではなく自主的に学んでいく姿勢でなければ進められないが、その分、他の講座に比べると安価であり、手が出しやすい。
ある程度知識がある人、自力で頑張るぞというガッツのある人向けではないかと感じる。

![bnr_jdla.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389699/bce66671-a2f5-a7f9-de6f-3f87e15c253b.png)