1. 程式人生 > >深度學習1

深度學習1

文章目錄

啟用函式

啟用函式(activation function):將輸入訊號的總和轉換為輸出訊號。

階躍函式

python程式碼實現:

def step_function(x):
	y = x > 0
	return y.astype(np.int
)

對NumPy陣列進行不等號運算後 ,陣列的各個元素生成一個布林型陣列。
astype()方法轉換NumPy陣列的型別,陣列y的元素型別從布林型轉換為int型。
階躍函式的圖形

圖1 階躍函式的圖形

sigmoid 函式

sigmoid 函式數學公式:
h ( x ) =

1 1 + e x
h(x)=\frac{1}{1+e^{-x}}
python程式碼實現:

def sigmoid(x):
	return 1 / (1 + np.exp(-x))

sigmoid 函式

圖2 sigmoid 函式的圖形

ReLU函式

ReLU:Rectified Linear Unit

sigmoid 函式數學公式:
f ( x ) = { x ( x > 0 ) y ( x < 0 ) f(x)=\left\{ \begin{aligned} x & & (x>0)\\ y & & (x<0) \\ \end{aligned} \right.
python程式碼實現:

def relu(x):
    return np.maximum(0, x)

在這裡插入圖片描述

圖3 ReLU函式的圖形

三層神經網路的實現

3層神經網路:
輸入層(第0 層)有2 個神經元,
第1 個隱藏層(第1 層)有3 個神經元,
第2 個隱藏層(第2 層)有2 個神經元,
輸出層(第3 層)有2 個神經元。

神經網路符號含義

在這裡插入圖片描述

圖4 權重的符號

各層間訊號傳遞的實現

在這裡插入圖片描述

圖5 從輸入層到第1層的訊號傳遞

神經元“1”表示偏置,其右下角的索引號只有一個。這是因為前一層的偏置神經元(神經元“1”)只有一個。

用數學式表示 a 1 ( 1 ) a1^{(1)} ,通過加權訊號和偏置的和按如下方式進行計算
a 1 ( 1 ) = w 1 1 ( 1 ) x 1 + w 1 2 ( 1 ) x 2 + b 1 ( 1 ) a1^{(1)}=w11^{(1)}x1+w12^{(1)}x2+b1^{(1)} 使用矩陣的乘法運算,則可以將第1層的加權和表示成下面的式子
A ( 1 ) = X W ( 1 ) + B ( 1 ) A^{(1)}=XW^{(1)}+B^{(1)}

其中 A ( 1 ) A^{(1)} X X B ( 1 ) B^{(1)} W ( 1 ) W^{(1)} 、如下所示。

A ( 1 ) = ( a 1 ( 1 ) a 2 ( 1 ) a 3 ( 1 ) ) A^{(1)}=\begin{pmatrix}a1^{(1)} & a2^{(1)} & a3^{(1)}\end{pmatrix} X = ( x 1 x 2 ) X=\begin{pmatrix}x_{1} & x_{2}\end{pmatrix} B ( 1 ) = ( b 1 ( 1 ) b 2 ( 1 ) b 3 ( 1 ) ) B^{(1)}=\begin{pmatrix}b1^{(1)} & b2^{(1)} & b3^{(1)}\end{pmatrix} ,

W ( 1 ) = ( w 11 ( 1 ) w 21 ( 1 ) w 31 ( 1 ) w 11 ( 1 ) w 21 ( 1 ) w 31 ( 1 ) ) W^{(1)}=\begin{pmatrix} w_{11}^{(1)} & w_{21}^{(1)} &w_{31}^{(1)} \\ w_{11}^{(1)} & w_{21}^{(1)} &w_{31}^{(1)} \end{pmatrix}

在這裡插入圖片描述

圖6 從輸入層到第1層的訊號傳遞

a a 表示隱藏層的加權和(加權訊號和偏置的總和)
z z 表示啟用函式轉換後的訊號
h ( ) h() 表示啟用函式,這裡使用sigmoid 函式

在這裡插入圖片描述

圖7 第1層到第2層的訊號傳遞

在這裡插入圖片描述

圖8 從第2層到輸出層的訊號傳遞

這裡使用identity_function()恆等函式作為輸出層的啟用函式,記為 σ ( ) σ()

三層網路python程式碼實現

import numpy as np

def sigmoid(x):
	return 1 / (1 + np.exp(-x))

def identity_function(x):
	return x

def init_network():
	network = {}
	network['W1'] = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]])
	network['b1'] = np.array([0.1, 0.2, 0.3])
	network['W2'] = np.array([[0.1, 0.4], [0.2, 0.5]