有個事情可能會讓初學者驚訝:神經(jīng)網(wǎng)絡(luò)模型并不復(fù)雜!『神經(jīng)網(wǎng)絡(luò)』這個詞讓人覺得很高大上,但實際上神經(jīng)網(wǎng)絡(luò)算法要比人們想象的簡單。
這篇文章完全是為新手準備的。我們會通過用Python從頭實現(xiàn)一個神經(jīng)網(wǎng)絡(luò)來理解神經(jīng)網(wǎng)絡(luò)的原理。本文的脈絡(luò)是:
- 介紹了神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)——神經(jīng)元;
- 在神經(jīng)元中使用S型激活函數(shù);
- 神經(jīng)網(wǎng)絡(luò)就是連接在一起的神經(jīng)元;
- 構(gòu)建了一個數(shù)據(jù)集,輸入(或特征)是體重和身高,輸出(或標簽)是性別;
- 學習了損失函數(shù)和均方差損失;
- 訓練網(wǎng)絡(luò)就是最小化其損失;
- 用反向傳播方法計算偏導(dǎo);
- 用隨機梯度下降法訓練網(wǎng)絡(luò)。
***01 ***磚塊:神經(jīng)元
首先讓我們看看神經(jīng)網(wǎng)絡(luò)的基本單位,神經(jīng)元。神經(jīng)元接受輸入,對其做一些數(shù)據(jù)操作,然后產(chǎn)生輸出。例如,這是一個2-輸入神經(jīng)元:
這里發(fā)生了三個事情。首先,每個輸入都跟一個權(quán)重相乘(紅色):
然后,加權(quán)后的輸入求和,加上一個偏差b(綠色):
最后,這個結(jié)果傳遞給一個激活函數(shù)f:
激活函數(shù)的用途是將一個無邊界的輸入,轉(zhuǎn)變成一個可預(yù)測的形式。常用的激活函數(shù)就就是S型函數(shù):
S型函數(shù)的值域是(0, 1)。簡單來說,就是把(?∞, +∞)壓縮到(0, 1) ,很大的負數(shù)約等于0,很大的正數(shù)約等于1。
***02 ***一個簡單的例子
假設(shè)我們有一個神經(jīng)元,激活函數(shù)就是S型函數(shù),其參數(shù)如下:
就是以向量的形式表示
?,F(xiàn)在,我們給這個神經(jīng)元一個輸入
。我們用點積來表示:
當輸入是[2, 3]時,這個神經(jīng)元的輸出是0.999。給定輸入,得到輸出的過程被稱為前饋(feedforward)。
***03 ***編碼一個神經(jīng)元
讓我們來實現(xiàn)一個神經(jīng)元!用Python的NumPy庫來完成其中的數(shù)學計算:
import numpy as np
defsigmoid(x):
# 我們的激活函數(shù): f(x) = 1 / (1 + e^(-x))
return 1 / (1 + np.exp(-x))
classNeuron:
def__init__(self, weights, bias):
self.weights = weights
self.bias = bias
deffeedforward(self, inputs):
# 加權(quán)輸入,加入偏置,然后使用激活函數(shù)
total = np.dot(self.weights, inputs) + self.bias
return sigmoid(total)
weights = np.array([0, 1]) # w1 = 0, w2 = 1
bias = 4 # b = 4
n = Neuron(weights, bias)
x = np.array([2, 3]) # x1 = 2, x2 = 3
print(n.feedforward(x)) # 0.9990889488055994
還記得這個數(shù)字嗎?就是我們前面算出來的例子中的0.999。
***04 ***把神經(jīng)元組裝成網(wǎng)絡(luò)
所謂的神經(jīng)網(wǎng)絡(luò)就是一堆神經(jīng)元。這就是一個簡單的神經(jīng)網(wǎng)絡(luò):
這個網(wǎng)絡(luò)有兩個輸入,一個有兩個神經(jīng)元(和
)的隱藏層,以及一個有一個神經(jīng)元(
)的輸出層。要注意,
輸入就是
和
的輸出,這樣就組成了一個網(wǎng)絡(luò)。
隱藏層就是輸入層和輸出層之間的層,隱藏層可以是多層的。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4798瀏覽量
102420 -
神經(jīng)元
+關(guān)注
關(guān)注
1文章
368瀏覽量
18718 -
python
+關(guān)注
關(guān)注
56文章
4822瀏覽量
85902
發(fā)布評論請先 登錄
人工神經(jīng)網(wǎng)絡(luò)原理及下載
labview BP神經(jīng)網(wǎng)絡(luò)的實現(xiàn)
【PYNQ-Z2試用體驗】神經(jīng)網(wǎng)絡(luò)基礎(chǔ)知識
卷積神經(jīng)網(wǎng)絡(luò)如何使用
【案例分享】ART神經(jīng)網(wǎng)絡(luò)與SOM神經(jīng)網(wǎng)絡(luò)
人工神經(jīng)網(wǎng)絡(luò)實現(xiàn)方法有哪些?
如何構(gòu)建神經(jīng)網(wǎng)絡(luò)?
matlab實現(xiàn)神經(jīng)網(wǎng)絡(luò) 精選資料分享
基于BP神經(jīng)網(wǎng)絡(luò)的PID控制
卷積神經(jīng)網(wǎng)絡(luò)一維卷積的處理過程
用Python從頭實現(xiàn)一個神經(jīng)網(wǎng)絡(luò)來理解神經(jīng)網(wǎng)絡(luò)的原理2

用Python從頭實現(xiàn)一個神經(jīng)網(wǎng)絡(luò)來理解神經(jīng)網(wǎng)絡(luò)的原理3

用Python從頭實現(xiàn)一個神經(jīng)網(wǎng)絡(luò)來理解神經(jīng)網(wǎng)絡(luò)的原理4

評論