# ゼロから作るDeepLearning3章まとめ ## 3.1 パーセプトロンからニューラルネットワークへ - パーセプトロンの利点・欠点 - 利点 複雑な関数を表現できる可能性を秘めている - 欠点 重みを手作業で設定する必要がある ### 3.1.1 ニューラルネットワークの例 - 一番左の層を入力層、真ん中のそうを中間層、一番左の層を出力層と呼ぶ - 隠れそうが2層以上のNNをDNNと呼ぶ - ニューロンのつながり方はパーセプトロンと同じ ![](https://i.imgur.com/uyFiwj6.png) ### 3.1.2 パーセプトロンの復習 - パーセプトロンの復習 - バイアス(b) ニューロンの発火しやすさをコントロールする - 重み($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] ```