机器学习入门(01)— 感知机概念、实现、局限性以及多层感知机
1. 感知機(jī)概念
下圖是一個(gè)接收兩個(gè)輸入信號(hào)的感知機(jī)的例子。
x1 、 x2 是輸入信號(hào), y 是輸出信號(hào), w1 、 w2 是權(quán)重( w 是 weight 的首字母)。圖中的 ○ 稱為“神經(jīng)元”或者“節(jié)點(diǎn)”。輸入信號(hào)被送往神經(jīng)元時(shí),會(huì)被分別乘以固定的權(quán)重( w1*x1 、 w2*x2 )。神經(jīng)元會(huì)計(jì)算傳送過來的信號(hào)的總和,只有當(dāng)這個(gè)總和超過了某個(gè)界限值時(shí),才會(huì)輸出 1。這也稱為“神經(jīng)元被激活” 。這里將這個(gè)界限值稱為閾值,用符號(hào) θ 表示。
把上述內(nèi)容用數(shù)學(xué)式來表示,見下公式
感知機(jī)的多個(gè)輸入信號(hào)都有各自固有的權(quán)重,這些權(quán)重發(fā)揮著控制各個(gè)信號(hào)的重要性的作用。也就是說,權(quán)重越大,對(duì)應(yīng)該權(quán)重的信號(hào)的重要性就越高。
2. 感知機(jī)實(shí)現(xiàn)
2.1 簡單實(shí)現(xiàn)
與門是有兩個(gè)輸入和一個(gè)輸出的門電路。這種輸入信號(hào)和輸出信號(hào)的對(duì)應(yīng)表稱為“真值表”。如圖所示,與門僅在兩個(gè)輸入均為 1 時(shí)輸出1,其他時(shí)候則輸出 0。
以邏輯與門為例來看看如何實(shí)現(xiàn):
In [1]: def AND(x1, x2):...: w1, w2, theta = 0.5, 0.5, 0.7...: result = x1 * w1 + x2 * w2...: if result >= theta:...: return 1...: else:...: return 0...: In [2]:
按照同樣的步驟,也可以實(shí)現(xiàn)與非門和或門,不過讓我們來對(duì)它們的實(shí)現(xiàn)稍作修改。
2.2 導(dǎo)入權(quán)重和偏置
式(2.1)的 θ 換成 ?b ,于是就可以用式(2.2)來表示感知機(jī)的行為。
式(2.1)和式(2.2)雖然有一個(gè)符號(hào)不同,但表達(dá)的內(nèi)容是完全相同的。此處,b 稱為偏置,w1 和 w2 稱為權(quán)重。如式(2.2)所示,感知機(jī)會(huì)計(jì)算輸入信號(hào)和權(quán)重的乘積,然后加上偏置,如果這個(gè)值大于 0 則輸出 1,否則輸出 0。
使用 NumPy 實(shí)現(xiàn) 2.2 所描述的感知機(jī),代碼如下:
In [2]: import numpy as npIn [3]: x = np.array([0, 1]) # 輸入In [5]: w = np.array([0.5, 0.5]) # 權(quán)重In [6]: b = -0.7 # 偏置In [7]: w * x
Out[7]: array([0. , 0.5])In [8]: np.sum(w*x)
Out[8]: 0.5In [9]: np.sum(w*x) + b
Out[9]: -0.19999999999999996 # 大約為-0.2(由浮點(diǎn)小數(shù)造成的運(yùn)算誤差)In [10]:
在 NumPy 數(shù)組的乘法運(yùn)算中,當(dāng)兩個(gè)數(shù)組的元素個(gè)數(shù)相同時(shí),各個(gè)元素分別相乘,因此 w*x 的結(jié)果就是它們的各個(gè)元素分別相乘([0, 1] *[0.5, 0.5] => [0, 0.5])。之后, np.sum(w*x) 再計(jì)算相乘后的各個(gè)元素的總和。最后再把偏置加到這個(gè)加權(quán)總和上,就完成了式(2.2)的計(jì)算。
2.3 使用權(quán)重和偏置的實(shí)現(xiàn)
代碼如下:
In [11]: def AND(x1, x2):...: x = np.array([x1, x2])...: w = np.array([0.5, 0.5])...: b = -0.7...: result = np.sum(w*x) + b...: if result <= 0:...: return 0...: else:...: return 1In [12]:
這里把 ?θ 命名為偏置 b ,但是請(qǐng)注意,偏置和權(quán)重 w1 、 w2 的作用是不一樣的。
具體地說, w1 和 w2 是控制輸入信號(hào)的重要性的參數(shù),而偏置是調(diào)整神經(jīng)元被激活的容易程度(輸出信號(hào)為 1 的程度)的參數(shù)。
例如:
- 若
b為?0.1,則只要輸入信號(hào)的加權(quán)總和超過0.1,神經(jīng)元就會(huì)被激活。 - 但是如果
b為?20.0,則輸入信號(hào)的加權(quán)總和必須超過20.0,神經(jīng)元才會(huì)被激活。
像這樣,偏置的值決定了神經(jīng)元被激活的容易程度。另外,這里我們將 w1 和 w2 稱為權(quán)重,將 b 稱為偏置,但是根據(jù)上下文,有時(shí)也會(huì)將 b 、 w1 、 w2 這些參數(shù)統(tǒng)稱為權(quán)重。
3. 感知機(jī)局限性
感知機(jī)的局限性就在于它只能表示由一條直線分割的空間。下圖這樣彎曲的曲線無法用感知機(jī)表示。另外,由下圖這樣的曲線分割而成的空間稱為非線性空間,由直線分割而成的空間稱為線性空間。
4. 多層感知機(jī)
與門、或門是單層感知機(jī),而異或門是 2 層感知機(jī)。疊加了多層的感知機(jī)也稱為多層感知機(jī)( multi-layered perceptron )。
圖2-13中的感知機(jī)總共由 3 層構(gòu)成,但是因?yàn)閾碛袡?quán)重的層實(shí)質(zhì)上只有 2 層(第 0 層和第 1 層之間,第 1 層和第 2 層之間),所以稱為 “2 層感知機(jī)”。不過,有的文獻(xiàn)認(rèn)為圖 2-13 的感知機(jī)是由 3 層構(gòu)成的,因而將其稱為“3 層感知機(jī)”。
在圖2-13所示的 2 層感知機(jī)中,先在第 0 層和第 1 層的神經(jīng)元之間進(jìn)行信號(hào)的傳送和接收,然后在第 1 層和第 2 層之間進(jìn)行信號(hào)的傳送和接收,具體如下所示。
- 第 0 層的兩個(gè)神經(jīng)元接收輸入信號(hào),并將信號(hào)發(fā)送至第 1 層的神經(jīng)元。
- 第 1 層的神經(jīng)元將信號(hào)發(fā)送至第 2 層的神經(jīng)元,第 2 層的神經(jīng)元輸出 y。
這種 2 層感知機(jī)的運(yùn)行過程可以比作流水線的組裝作業(yè)。第 1 段(第 1 層)的工人對(duì)傳送過來的零件進(jìn)行加工,完成后再傳送給第 2 段(第 2 層)的工人。第 2 層的工人對(duì)第 1 層的工人傳過來的零件進(jìn)行加工,完成這個(gè)零件后出貨(輸出)。
通過這樣的結(jié)構(gòu)( 2 層結(jié)構(gòu)),感知機(jī)得以實(shí)現(xiàn)異或門。這可以解釋為 “單層感知機(jī)無法表示的東西,通過增加一層就可以解決”。也就是說,通過疊加層(加深層),感知機(jī)能進(jìn)行更加靈活的表示。
5. 總結(jié)
? 感知機(jī)是具有輸入和輸出的算法。給定一個(gè)輸入后,將輸出一個(gè)既定的值;
? 感知機(jī)將權(quán)重和偏置設(shè)定為參數(shù);
? 使用感知機(jī)可以表示與門和或門等邏輯電路;
? 異或門無法通過單層感知機(jī)來表示;
? 使用 2 層感知機(jī)可以表示異或門;
? 單層感知機(jī)只能表示線性空間,而多層感知機(jī)可以表示非線性空間;
? 多層感知機(jī)(在理論上)可以表示計(jì)算機(jī);
參考:《深度學(xué)習(xí)入門:基于Python的理論與實(shí)現(xiàn)》
總結(jié)
以上是生活随笔為你收集整理的机器学习入门(01)— 感知机概念、实现、局限性以及多层感知机的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求大佬给个百度云破解版
- 下一篇: 机器学习入门(02)— 由感知机到神经网