---
# System prepended metadata

title: ゼロから作るDeepLearning3章まとめ

---

# ゼロから作るDeepLearning3章まとめ

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

### 3.1.2　パーセプトロンの復習
- パーセプトロンの復習
    - バイアス（ｂ）
        ニューロンの発火しやすさをコントロールする
    - 重み（$w_{1}w_{2}$）
        各信号の重要性をコントロールする
![](https://i.imgur.com/2viCDQV.png)
![](https://i.imgur.com/NyE0K5Z.png)
- バイアスを明示してみる
    バイアスの値は変わらないので灰色で塗り差別化する
![](https://i.imgur.com/jzr8FwI.png)
- 場合分けの動作の関数化
![](https://i.imgur.com/7Ah7Vg0.png)
![](https://i.imgur.com/ZdnFpDK.png)
### 3.1.3　活性化関数の登場
- 活性化関数
    入力信号の総和を出力信号に変換する関数
    入力信号の総和がどのように活性化するかを決定する
- 総和の計算
![](https://i.imgur.com/5ooaEHa.png)
- 活性化関数
![](https://i.imgur.com/H6eC2Z2.png)
総和の計算式と活性化関数を分離することで活性化関数fに他の関数を使うことができる
- 活性化関数の明示
![](https://i.imgur.com/pxWUKNo.png)


## 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]
```