# ゼロから作るDeepLearning3章まとめ
## 3.1 パーセプトロンからニューラルネットワークへ
- パーセプトロンの利点・欠点
- 利点
複雑な関数を表現できる可能性を秘めている
- 欠点
重みを手作業で設定する必要がある
### 3.1.1 ニューラルネットワークの例
- 一番左の層を入力層、真ん中のそうを中間層、一番左の層を出力層と呼ぶ
- 隠れそうが2層以上のNNをDNNと呼ぶ
- ニューロンのつながり方はパーセプトロンと同じ

### 3.1.2 パーセプトロンの復習
- パーセプトロンの復習
- バイアス(b)
ニューロンの発火しやすさをコントロールする
- 重み($w_{1}w_{2}$)
各信号の重要性をコントロールする


- バイアスを明示してみる
バイアスの値は変わらないので灰色で塗り差別化する

- 場合分けの動作の関数化


### 3.1.3 活性化関数の登場
- 活性化関数
入力信号の総和を出力信号に変換する関数
入力信号の総和がどのように活性化するかを決定する
- 総和の計算

- 活性化関数

総和の計算式と活性化関数を分離することで活性化関数fに他の関数を使うことができる
- 活性化関数の明示

## 3.3 多次元配列の計算
### 3.3.1 多次元配列
- 一次元の配列
```
>>> import numpy as np
>>> A = np.array([1,2,3,4])
>>> print(A)
[1,2,3,4]
>>> A.shape
(4,)
>>> A.shape[0]
4
```
- np.ndim()で配列の次元を取得
- shapeプロパティで形状取得
- shapeの値はタプル
- タプルとは
- 要素の追加削除変更ができない
- メモリの消費が少ない
- 二次元配列
```
>>> B = np.array([[1,2],[3,4],[5,6]])
>>> print(B)
[[1 2]
[3 4]
[5 6]]
>>> np.ndim(B)
2
>>> B.shape
(3, 2)
```
### 3.3.2 行列の積
- 行列の積の計算方法
```
>>> A = np.array([[1,2], [3,4]])
>>> A.shape
(2, 2)
>>> B = np.array([[5,6],[7,8]])
>>> B.shape
(2, 2)
>>> np.dot(A, B)
array([[19, 22],
[43, 50]])
```
### 3.3.3 ニューラルネットワークの行列の積
```
>>> X = np.array([1, 2])
>>> X.shape
(2, )
>>> W = np.array([[1, 3, 5], [2, 4, 6]])
>>> print(W)
[[1 3 5]
[2 4 6]]
>>> W.shape
(2, 3)
>>> Y = np.dot(X, W)
>>> print(Y)
[5 11 17]
```