1.感知機是神經網路的起源。
2.偏置決定了神經元被啟用的容易程度。具體表現我為 y = wx + b b為偏置項 w為權重
3.常用啟用函式及實現
1)階越函式
y = x>0?1:0
實現:
def step_function(x):
return np.array(x > 0, dtype=np.int)
2)sigmoid函式
y = 1/(1+exp(-x))
實現:
def sigmoid(x):
return 1 / (1 + np.exp(-x))
3)relu函式
y = x>0?x:0
實現:
def relu(x):
return np.maximum(0, x)
4.輸出層設計(softmax,)
yk = exp(ak)/sum(exp(ai))
通常會大數溢位,
因此做個改動,都減去最大值,歸1化處理。
實現:
def softmax(x):
x = x - np.max(x)
return np.exp(x) / np.sum(np.exp(x))
5 . 感知機與神經網路的區別
主要是啟用函式不一樣,感知機用的不連續的階越函式,而神經網路一般用連續的relu或者sigmoid函式。
6.批處理學習一下
7.損失函式
表示神經網路的惡劣程度,效能有多好。常用的損失函式有:
<1>均方誤差
實現:
def mean_squared_error(y, t):
return 0.5 * np.sum((y-t)**2)
<2>交差商誤差
def cross_entropy_error(y, t):
delta = 1e-7
return -np.sum(t * np.log(y + delta))
誤差的值越小,表示與真實值越相近。
8.mini-batch學習
onehot 編碼
def cross_entropy_error(y, t):
if y.ndim == 1:
t = t.reshape(1, t.size)
y = y.reshape(1, y.size)
batch_size = y.shape[0]
return -np.sum(t*np.log(y + 1e-7))/batch_size
包含非onehot編碼
def cross_entropy_error1(y, t):
if y.ndim == 1:
t = t.reshape(1, t.size)
y = y.reshape(1, y.size)
if t.size == y.size:
t = t.argmax(axis=1)
batch_size = y.shape[0]
return -np.sum(np.log(y[np.arange(batch_size), t] + 1e-7)) / batch_size
損失函式:
在進行神經網路的學習時,不能將識別精度作為指標。因為如果以識別精度為指標,則引數的導數在絕大多數地方都會變為0.
9.誤差反向傳播
啟用層的實現:
1)relu
class relu:
def __init__(self):
self.mask = none
def forward(self, x):
self.mask = (x <= 0) #萃取小於等於0的數的座標
out = x.copy()
out[self.mask] = 0 #將小於等於0的數置0
return out
def backward(self, dout):
dout[self.mask] = 0 #反向傳播小於等於0 為0 大於零,原樣
dx = dout
return dx
2)sigmoid
class sigmoid:
def __init__(self):
self.out = none
def forward(self, x):
out = sigmoid(x)
self.out = out
return out
def backward(self, dout):
dx = dout * (1.0 - self.out) * self.out
return dx
3)affine層
class affine:
def __init__(self, w, b):
self.w =w
self.b = b
self.x = none
self.dw = none
self.db = none
def forward(self, x):
self.x = x
out = np.dot(self.x, self.w) + self.b
return out
def backward(self, dout):
dx = np.dot(dout, self.w.t)
self.dw = np.dot(self.x.t, dout)
self.db = np.sum(dout, axis=0)
return dx
4)softmax-with-loss
class softmaxwithloss:
def __init__(self):
self.loss = none
self.y = none #
self.t = none #
def forward(self, x, t):
self.t = t
self.y = softmax(x)
self.loss = cross_entropy_error(self.y, self.t)
return self.loss
def backward(self, dout=1):
batch_size = self.t.shape[0]
if self.t.size == self.y.size: #
dx = (self.y - self.t) / batch_size
else:
dx = self.y.copy()
dx[np.arange(batch_size), self.t] -= 1
dx = dx / batch_size
return dx
10.學習演算法步驟
神經網路存在合適的權重和偏轉,調整權重和偏轉以便擬合訓練資料的過程稱為學習,神經網路的學習主要分成如下4個步驟:
步驟1 mini-batch
從訓練資料中挑選一部分資料,稱為mini-batch
步驟2 計算梯度
為了減小mini-batch的損失函式的值,需要求出各個權重引數的梯度。
步驟3 更新引數
將權重引數沿梯度減小的方向進行微小更新。
步驟4 重複
重複步驟1,步驟2,步驟3,直至訓練完成。
深度學習入門 理論雜談 1
前言 第一章 6 具有這種多層結構的網路 兩個或更多隱藏層 被稱為深度神經網路。深網能夠建立複雜的概念層次。這有點像傳統程式語言使用模組化設計和抽象概念來建立複雜的電腦程式。將深層網路與淺層網路進行比較有點像將程式語言與能夠呼叫精簡語言的函式進行比較而無法進行此類呼叫。抽象在神經網路中採用與傳統程式...
深度學習入門基礎概念(1)
自 csdn star先生 作者專欄 1 神經元 neuron 就像形成我們大腦基本元素的神經元一樣,神經元形成神經網路的基本結構。想象一下,當我們得到新資訊時我們該怎麼做。當我們獲取資訊時,我們一般會處理它,然後生成乙個輸出。類似地,在神經網路裡,神經元接收輸入,處理它並產生輸出,而這個輸出被傳送...
深度學習入門
generative adversarial network gan 生成對抗網路 梯度消失 梯度擴散 gradient diffusion deep learning i.e.unsupervised feature learning 目的是讓機器自動學習良好的特徵,而免去人工選取過程 深度學習是...