簡單粗暴理解與實現機器學習之神經網絡NN(一):神經網絡基礎詳談、感知器PLA、playground使用、神經網絡發展史

7.1 神經網絡基礎

學習目標

  • 目標
    • 瞭解感知機結構、作用以及優缺點
    • 瞭解tensorflow playground的使用
    • 說明感知機與神經網絡的聯繫
    • 說明神經網絡的組成
  • 應用

7.1.1 神經網絡

人工神經網絡( Artificial Neural Network, 簡寫爲ANN)也簡稱爲神經網絡(NN)。是一種模仿生物神經網絡(動物的中樞神經系統,特別是大腦)結構和功能的 計算模型。經典的神經網絡結構包含三個層次的神經網絡。分別輸入層,輸出層以及隱藏層。

在這裏插入圖片描述

其中每層的圓圈代表一個神經元,隱藏層和輸出層的神經元有輸入的數據計算後輸出,輸入層的神經元只是輸入。

  • 神經網絡的特點
    • 1、每個連接都有個權值
    • 2、同一層神經元之間沒有連接
    • 3、最後的輸出結果對應的層也稱之爲全連接層
  • 組成:
    • 輸入層:神經網絡的第一層,原始的樣本數據
    • 輸出層:神經網絡的最後一層,最終的計算結果
    • 隱藏層:其餘的中間層都被稱爲隱藏層(hidden layer)
    • 權重(weight):就是之前所說的參數,這裏被稱爲一個神經節點的權重。
    • 激活函數(activation function):激活函數是兩層神經元之間的映射函數,是一種輸出到輸入的轉換,一般是非線性的,而且是單調可微函數(因爲優化方法是基於梯度的)。常見的激活函數有:sigmoid,tanh

那麼爲什麼設計這樣的結構呢?首先從一個最基礎的結構說起,神經元。以前也稱之爲感知機。神經元就是要模擬人的神經元結構。

在這裏插入圖片描述

一個神經元通常具有多個樹突,主要用來接受傳入信息;而軸突只有一條,軸突尾端有許多軸突末梢可以給其他多個神經元傳遞信息。軸突末梢跟其他神經元的樹突產生連接,從而傳遞信號。這個連接的位置在生物學上叫做“突觸”。

要理解神經網絡,其實要從感知機開始。

7.1.1.1 感知機(PLA: Perceptron Learning Algorithm))

感知機就是模擬這樣的大腦神經網絡處理數據的過程。感知機模型如下圖:

在這裏插入圖片描述

感知機是一種最基礎的分類模型,前半部分類似於迴歸模型。感知機最基礎是這樣的函數,而邏輯迴歸用的sigmoid。這個感知機具有連接的權重和偏置

在這裏插入圖片描述

我們通過一個平臺去演示,就是tensorflow playground

7.1.2 playground使用

在這裏插入圖片描述

網址:http://playground.tensorflow.org

那麼在這整個分類過程當中,是怎麼做到這樣的效果那要受益於神經網絡的一些特點

在這裏插入圖片描述
要區分一個數據點是橙色的還是藍色的,你該如何編寫代碼?也許你會像下面一樣任意畫一條對角線來分隔兩組數據點,定義一個閾值以確定每個數據點屬於哪一個組。

其中 b 是確定線的位置的閾值。通過分別爲 x1 和 x2 賦予權重 w1 和 w2,你可以使你的代碼的複用性更強。

在這裏插入圖片描述
此外,如果你調整 w1 和 w2 的值,你可以按你喜歡的方式調整線的角度。你也可以調整 b 的值來移動線的位置。所以你可以重複使用這個條件來分類任何可以被一條直線分類的數據集。但問題的關鍵是程序員必須爲 w1、w2 和 b 找到合適的值——即所謂的參數值,然後指示計算機如何分類這些數據點。

7.1.2.1 playground簡單兩類分類結果

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-WRgR7Qxp-1583574735782)(../images/playground%25E4%25B8%25A4%25E7%25B1%25BB.png)]

但是這種結構的線性的二分類器,但不能對非線性的數據並不能進行有效的分類。如下面異或問題例子:

  • 感知機結構,能夠很好去解決與、或等問題,但是並不能很好的解決異或等問題。我們通過一張圖來看,有四個樣本數據

與問題:每個樣本的兩個特徵同時爲1,結果爲1

或問題:每個樣本的兩個特徵一個爲1,結果爲1

如果解決異或:每個樣本的兩個特徵相同爲0, 不同爲1?

畫圖理解:

在這裏插入圖片描述

公式理解:

其實上述我們可以就理解:Z= sigmoid(AX1+BX2+C), 本身sigmoid函數是單調遞增函數。

左上角點:x1=0,x2=1輸出z=1

右上角點:x2=1,x2=1輸出z=0

左下角點:x1=0,x2=0輸出z=0

右下角點:x1=1,x2=0輸出z=1

觀察異或運算我們來看下面結果:

  • 如果當X2=0, 將X1的取值從0到1,使得Z的結果也從0到1,意味着Z的變化時與X1正相關,需要設置A爲正數
  • 如果當X2=1, 將X1的取值從0到1,使得Z的結果也從1到0,意味着Z的變化時與X1負相關,需要設置A爲負數

上面的兩個結論是矛盾的,所有采用邏輯迴歸無法精確得到一個輸出爲異或的模型

相當於給出這樣的數據

在這裏插入圖片描述

在這裏插入圖片描述

7.1.2.2 單神經元複雜的兩類-playground演示

在這裏插入圖片描述

那麼怎麼解決這種問題呢?其實我們多增加層或者多幾個感知機即可解決?也就是下圖這樣的結構,組成一層的結構?

在這裏插入圖片描述

7.1.2.3多個神經元效果演示

在這裏插入圖片描述

7.1.3 神經網絡發展史

在這裏插入圖片描述

  • 1、深度學習其實並不是新的事物,深度學習所需要的神經網絡技術起源於20世紀50年代,那個時候叫做感知機。當時也通常使用單層感知機,儘管結構簡單,但是能夠解決相當複雜的問題。
  • 2、後來感知機被證明存在嚴重的問題,因爲只能學習線性可分函數,連簡單的異或(XOR)等線性不可分問題都無能爲力,1969年Marvin Minsky寫了一本叫做《Perceptrons》的書,他提出了著名的兩個觀點:1.單層感知機沒用,我們需要多層感知機來解決複雜問題 2.沒有有效的訓練算法。
  • 3、1974年哈佛大學博士畢業生Paul J. Werbos首次提出反向傳播算法應用在神經網絡的可能,但並未得到學術界的重視。直到1986年BP算法才真正開始流行起來,主要是因爲Rumelhart、Hinton、Williams合著的《Learning representations by back-propagating errors》
  • 4、 雖然訓練算法有了突破,但是還存在很多問題,比如以當時計算機的計算能力,訓練一次神經網絡耗時太久,不具備實際使用價值。同時還會存在過擬合以及梯度消失等問題。而90年代中期,由Vapnik等人發明的支持向量機(Support Vector Machines,SVM)算法誕生,它同樣解決了線性不可分問題,但是對比神經網絡有全方位優勢:
    • 1、高效,可以快速訓練;
    • 2無需調參,沒有梯度消失問題;
    • 3高效泛化,全局最優解,不存在過擬合問題,幾乎全方位的碾壓神經網絡。
  • 5、幾乎在這10幾年的時間,只有Hinton等幾位學者在研究神經網絡。直到2006年,提出了"深度置信網絡"概念,有一個預訓練的過程。使用微調技術作爲反向傳播和調優手段。減少了網絡訓練時間,並且提出了一個新的概念叫做"深度學習"
  • 6、直到2012年,在ImageNet競賽中,Hinton教授的團隊,使用以卷積神經網絡爲基礎的深度學習方案,他們訓練的模型面對15萬張測試圖像時,預測的頭五個類別的錯誤率只有 15.3%,而排名第二的日本團隊,使用的SVM方法構建的模型,相應的錯誤率則高達 26.2%。從此一戰成名!2012年後深度學習就成爲主流。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章