官术网_书友最值得收藏!

2.1 人工神經元——機器學習的早期歷史

在更詳細地討論感知器及其相關算法之前,讓我們先簡要地回顧機器學習的早期歷史。為了設計人工智能,人們試圖了解生物大腦的工作原理。Warren McCulloch和Walter Pitts于1943年首先發表了一篇論文,提出簡化腦細胞的概念,即所謂的McCulloch-Pitts(MCP)神經元[1]。生物神經元是大腦中那些聯結起來參與化學和電信號處理與傳輸的神經細胞,如圖2-1所示。

028-01

圖 2-1

麥庫洛和皮茲把神經細胞描述為帶有二元輸出的簡單邏輯門。多個信號到達樹突,然后整合到細胞體,并當累計信號量超過一定閾值時,輸出信號將通過軸突。

在論文發表之后僅幾年,Frank Rosenblatt就基于MCP神經元模型首先提出了感知器學習規則的概念[2]。根據其感知器規則,Rosenblatt提出了一個算法,它能先自動學習最優的權重系數,再乘以輸入特征,繼而做出神經元是否觸發的決策。在監督學習和分類的場景下,這樣的算法可以用來預測新數據點的類別歸屬。

2.1.1 人工神經元的正式定義

更準確地說,可以把人工神經元邏輯放在二元分類的場景,為簡化操作,我們將這兩個類分別命名為1(正類)和-1(負類)。然后定義決策函數(?(z)),該函數接受特定輸入值x的線性組合及其相應的權重向量w,兩者計算的結果z為所謂的凈輸入z=w1x1+w2x2+…+wmxm

029-01

如果某個特定樣本的凈輸入值x(i)大于定義的閾值θ,則預測結果為1,否則為-1。在感知器算法中,決策函數?(·)是單位階躍函數的一個變體:

029-02

為了簡化起見,我們把閾值θ放在等式的左邊,權重零定義為w0=-θ,x0=1,這樣就可以用更緊湊的方式來表達z:

z=w0x0+w1x1+…+wmxm=wTx

029-03

在機器學習文獻中,我們通常把負的閾值或權重w0=-θ稱為偏置

008-01

線性代數基礎:向量點積與矩陣轉置

本書后續部分將經常用到線性代數的基本表達方法。例如,用向量點積的方法表示xw的值相乘后再累加的結果,上標T表示轉置,該操作將列向量轉換為行向量,反之亦然:

029-04

例如:

029-05

轉置操作也可以從矩陣的對角線上反映出來,例如:

029-06

請注意,轉置操作只嚴格定義在矩陣上。然而,在機器學習中,向量一詞通常指n×1或者1×m矩陣。

本書僅涉及非常基本的線性代數概念,然而,如果需要做個快速回顧,可以看下Zico Kolter的Linear Algebra Review and Reference,該書可以從http://www.cs.cmu.edu/~zkolter/course/linalg/linalg_notes.pdf免費獲得。

圖2-2闡釋了如何通過感知器的決策函數把凈輸入z=wTx(左圖)轉換為二元輸出(-1或者1),以及如何區分兩個可分隔的線性類(右圖)。

030-01

圖 2-2

2.1.2 感知器學習規則

MCP神經元和Rosenblatt閾值感知器模型背后的邏輯是,用還原論方法來模擬大腦神經元的工作情況:要么觸發,要么不觸發。因此,羅森布拉特的初始感知器規則相當簡單,其感知器算法可以總結為以下幾個步驟:

1)把權重初始化為0或者小的隨機數。

2)分別對每個訓練樣本x(i)

a. 計算輸出值030-02

b. 更新權重。

輸出值為預先定義好的單位階躍函數預測的分類標簽,同時更新權重向量w的每個值wj,更準確的表達式為:

wj:=wj+Δwj

其中,Δwj是用來更新wj的值,根據感知器學習規則計算該值如下:

030-03

其中η為學習速率(一般是0.0~1.0之間的常數),y(i)為第i個訓練樣本的正確類標簽,030-04為預測的分類標簽。需要注意的是,權重向量中的所有值將同時被更新,這意味著在所有權重通過對應更新值Δwj更新之前,不會重新計算030-05。具體來說,二維數據集的更新可以表達為:

030-06

在用Python實現感知器規則之前,讓我們先做個簡單的思考實驗來說明該學習規則到底有多么簡單。在感知器正確預測兩類標簽的情況下,保持權重不變,因為更新值為0:

031-01

然而,如果預測有誤,則權重應偏向陽或陰的目標類:

031-02

為了能更好地理解乘積因子031-03,讓我們再來看下另外一個簡單的示例,其中:

031-04

假設031-05,模型錯把該樣本判斷為-1。在這種情況下,把相應的權重增加1,這樣當下次再遇到該樣本時,凈輸入031-06就會更偏向陽,從而更有可能超過單位階躍函數的閾值,把該樣本分類為+1:

Δwj=(1-(-1))0.5=(2)0.5=1

權重更新與031-07成正比。例如,假設有另外一個樣本031-08被錯誤地分類為-1,可以將決策邊界推到更大,以確保下一次分類正確:

Δwj=(1(i)-(-1)(i))2(i)=(2)2(i)=4

重要的是,我們要注意只有兩個類線性可分且學習速率足夠小時,感知器的收斂性才能得到保證(感興趣的讀者可以在我的講義找到數學證明,地址為:https://sebastianraschka.com/pdf/lecture-notes/stat479ss19/L03_perceptron_slides.pdf.)。如果不能用線性決策邊界分離兩個類,可以為訓練數據集設置最大通過數(迭代次數)及容忍誤分類的閾值,否則分類感知器將會永不停止地更新權重,如圖2-3所示。

031-09

圖 2-3

008-01

下載示例代碼

可以直接從華章網站或下述網站下載示例代碼:

https://github.com/rasbt/python-machine-learning-book-3rd-edition

在開始進入下一節進行實現之前,讓我們先把剛所學到的知識用一個簡單的圖做個總結,以此說明感知器的一般概念,如圖2-4所示。

031-10

圖 2-4

圖2-4說明了感知器如何接收輸入樣本x,并將其與權重w結合以計算凈輸入。然后再把凈輸入傳遞給閾值函數,產生一個二元輸出-1或+1,即預測的樣本分類標簽。在學習階段,該輸出用于計算預測結果的誤差并更新權重。

主站蜘蛛池模板: 竹北市| 桐庐县| 镇雄县| 阿荣旗| 汕尾市| 兰西县| 水富县| 东阳市| 成武县| 苏尼特左旗| 南漳县| 永泰县| 图木舒克市| 璧山县| 永福县| 洛南县| 黎川县| 沐川县| 富源县| 江川县| 三亚市| 白河县| 柳河县| 东至县| 恩施市| 朔州市| 阳信县| 壶关县| 泌阳县| 大邑县| 黄骅市| 攀枝花市| 大荔县| 奉化市| 穆棱市| 台北县| 集贤县| 新安县| 巴青县| 克东县| 汨罗市|