有個(gè)事情可能會(huì)讓初學(xué)者驚訝:神經(jīng)網(wǎng)絡(luò)模型并不復(fù)雜!『神經(jīng)網(wǎng)絡(luò)』這個(gè)詞讓人覺(jué)得很高大上,但實(shí)際上神經(jīng)網(wǎng)絡(luò)算法要比人們想象的簡(jiǎn)單。
這篇文章完全是為新手準(zhǔn)備的。我們會(huì)通過(guò)用Python從頭實(shí)現(xiàn)一個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)理解神經(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)建了一個(gè)數(shù)據(jù)集,輸入(或特征)是體重和身高,輸出(或標(biāo)簽)是性別;
- 學(xué)習(xí)了損失函數(shù)和均方差損失;
- 訓(xùn)練網(wǎng)絡(luò)就是最小化其損失;
- 用反向傳播方法計(jì)算偏導(dǎo);
- 用隨機(jī)梯度下降法訓(xùn)練網(wǎng)絡(luò)。
***01 ***磚塊:神經(jīng)元
首先讓我們看看神經(jīng)網(wǎng)絡(luò)的基本單位,神經(jīng)元。神經(jīng)元接受輸入,對(duì)其做一些數(shù)據(jù)操作,然后產(chǎn)生輸出。例如,這是一個(gè)2-輸入神經(jīng)元:
這里發(fā)生了三個(gè)事情。首先,每個(gè)輸入都跟一個(gè)權(quán)重相乘(紅色):
然后,加權(quán)后的輸入求和,加上一個(gè)偏差b(綠色):
最后,這個(gè)結(jié)果傳遞給一個(gè)激活函數(shù)f:
激活函數(shù)的用途是將一個(gè)無(wú)邊界的輸入,轉(zhuǎn)變成一個(gè)可預(yù)測(cè)的形式。常用的激活函數(shù)就就是S型函數(shù):
S型函數(shù)的值域是(0, 1)。簡(jiǎn)單來(lái)說(shuō),就是把(?∞, +∞)壓縮到(0, 1) ,很大的負(fù)數(shù)約等于0,很大的正數(shù)約等于1。
***02 ***一個(gè)簡(jiǎn)單的例子
假設(shè)我們有一個(gè)神經(jīng)元,激活函數(shù)就是S型函數(shù),其參數(shù)如下:
就是以向量的形式表示
。現(xiàn)在,我們給這個(gè)神經(jīng)元一個(gè)輸入
。我們用點(diǎn)積來(lái)表示:
當(dāng)輸入是[2, 3]時(shí),這個(gè)神經(jīng)元的輸出是0.999。給定輸入,得到輸出的過(guò)程被稱為前饋(feedforward)。
***03 ***編碼一個(gè)神經(jīng)元
讓我們來(lái)實(shí)現(xiàn)一個(gè)神經(jīng)元!用Python的NumPy庫(kù)來(lái)完成其中的數(shù)學(xué)計(jì)算:
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
還記得這個(gè)數(shù)字嗎?就是我們前面算出來(lái)的例子中的0.999。
***04 ***把神經(jīng)元組裝成網(wǎng)絡(luò)
所謂的神經(jīng)網(wǎng)絡(luò)就是一堆神經(jīng)元。這就是一個(gè)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò):
這個(gè)網(wǎng)絡(luò)有兩個(gè)輸入,一個(gè)有兩個(gè)神經(jīng)元(和
)的隱藏層,以及一個(gè)有一個(gè)神經(jīng)元(
)的輸出層。要注意,
輸入就是
和
的輸出,這樣就組成了一個(gè)網(wǎng)絡(luò)。
隱藏層就是輸入層和輸出層之間的層,隱藏層可以是多層的。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4781瀏覽量
101178 -
神經(jīng)元
+關(guān)注
關(guān)注
1文章
363瀏覽量
18511 -
python
+關(guān)注
關(guān)注
56文章
4807瀏覽量
85040
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
人工神經(jīng)網(wǎng)絡(luò)原理及下載
labview BP神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)
【PYNQ-Z2試用體驗(yàn)】神經(jīng)網(wǎng)絡(luò)基礎(chǔ)知識(shí)
卷積神經(jīng)網(wǎng)絡(luò)如何使用
【案例分享】ART神經(jīng)網(wǎng)絡(luò)與SOM神經(jīng)網(wǎng)絡(luò)
人工神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)方法有哪些?
如何構(gòu)建神經(jīng)網(wǎng)絡(luò)?
matlab實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò) 精選資料分享
基于BP神經(jīng)網(wǎng)絡(luò)的PID控制
卷積神經(jīng)網(wǎng)絡(luò)一維卷積的處理過(guò)程
用Python從頭實(shí)現(xiàn)一個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)理解神經(jīng)網(wǎng)絡(luò)的原理2
![<b class='flag-5'>用</b><b class='flag-5'>Python</b><b class='flag-5'>從頭</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b><b class='flag-5'>來(lái)</b><b class='flag-5'>理解</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的原理2](https://file.elecfans.com/web2/M00/94/9C/pYYBAGP8U36ANnbKAAADnFLC5D4377.jpg)
用Python從頭實(shí)現(xiàn)一個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)理解神經(jīng)網(wǎng)絡(luò)的原理3
![<b class='flag-5'>用</b><b class='flag-5'>Python</b><b class='flag-5'>從頭</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b><b class='flag-5'>來(lái)</b><b class='flag-5'>理解</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的原理3](https://file.elecfans.com/web2/M00/94/1A/poYBAGP8U3-AZU0mAAAIVtrMUhQ981.jpg)
用Python從頭實(shí)現(xiàn)一個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)理解神經(jīng)網(wǎng)絡(luò)的原理4
![<b class='flag-5'>用</b><b class='flag-5'>Python</b><b class='flag-5'>從頭</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b><b class='flag-5'>來(lái)</b><b class='flag-5'>理解</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的原理4](https://file.elecfans.com/web2/M00/94/9C/pYYBAGP8U3-AQE5dAAAM2u2p9qs820.jpg)
評(píng)論