從Y = X到構建完整的人工神經網絡

 

 

文章發佈於公號【數智物語】 (ID:decision_engine),關注公號不錯過每一篇乾貨。算法

 

 

 

來源 | AI研習社(id:okweiwu)瀏覽器

做者 | Ahmed Gad網絡

譯者 | AI小山(工程師)、朱慧94(上海大學)、Mr-UC(中國科學院大學)機器學習

原標題 | From Y=X to Building a Complete Artificial Neural Network函數

 

 

在某些時候,你也許曾問過本身,人工神經網絡的參數的來源是什麼?權重的目的是什麼?若是不用誤差(bias)會怎樣?學習

 

在本教程中,咱們打算回答那些問題,咱們從最簡單的人工神經網絡(ANN)作起,一直到複雜得多的模型。讓咱們從構建一個沒有參數的機器學習模型開始,即Y=X。測試

 

而後,咱們將逐步增長一些參數到模型中,直到咱們創建了一個單個神經元,這個神經元被設計成接收一個或多個輸入。接着,神經元從數學公式映射成圖形形式。經過鏈接多個神經元,就能生成一個完整的ANN。讀完本教程後,我但願權重和誤差的用途就能清楚明白了。優化

 

 

01從最簡單的模型 Y=X 開始ui

 

 

機器學習的基礎部分其實很是簡單。即便是徹底的初學者也能構建一個基本的機器學習模型。所謂的監督式機器學習,它的目標是找到(即學習)一個函數,可以在輸入和輸出集合之間完成映射。等到學習過程結束,函數應該能對每個給定的輸入,返回正確的輸出。根據下表給出的數據,咱們來討論如何完成一個最簡單的目標。spa

 

有4組樣本。每一個樣本有一個單一的輸入以及一個單一的輸出。觀察了數據以後,咱們須要準備一個函數來針對每個給定的輸入返回正確的輸出,並使得偏差最小。觀察數據,咱們明顯發現輸出Y跟輸入X徹底相同。若是X等於2,Y也等於2。若是X是4,Y也是4。

 

所以,咱們須要的是一個函數,接收一個單獨的輸入X並返回一個單獨的輸出。這個輸出跟輸入相同。毫無疑問,函數是F(X)=X。爲簡單起見,咱們用Y代替F(X)。因而,函數變成Y=X。

 

 

02偏差計算

 

找到合適的機器學習模型(即函數)後,咱們須要對它進行測試,看看它能不能準確預測結果,是否還存在必定偏差(error)。咱們能夠用一個簡單的偏差函數,根據下面的公式,計算出正確的輸出與預測的輸出之間的差的絕對值。它在數據樣本中循環執行,對每個樣本,計算出正確輸出與預測輸出之差的絕對值,並最終對全部的差的絕對值求和,存入偏差變量中。求和運算中的符號N表示樣本的個數。

 

 

下表給出了計算的細節。根據這個表格,函數準確地預測了全部的輸出,因此總偏差爲0。很棒!可是不要忘這咱們作的只是純入門的最簡單的題目。在把題目改得更難一點以前,我要提一個問題。在每個機器學習模型中,有2個主要環節,分別是學習(即訓練)和測試。咱們已經看到了最基本的測試環節。可是學習環節在哪裏?在前面那個模型裏,咱們有沒有作學習?答案是否認的。

 

 

學習意味着模型裏的一些參數是在訓練環節中從數據裏學來的。前面那個模型的函數(Y=X)沒有參數可學。函數只是把輸入X與輸出Y等同起來,沒有中間參數來平衡二者的關係。在這種狀況下,就沒有了學習環節,由於模型是非參數的。「非參數」意思是說模型不須要從數據中學習參數。常見的非參數機器學習模型是K近鄰算法(K-nearest neighbors, KNN)。

 

03常數型權重

 

講明白不用學習參數的緣由後,咱們來對使用的數據作一些修改。新數據以下表所示。你發現哪些改動了嗎?其實很簡單。每個輸出Y再也不與輸入X相等,而變成輸入的兩倍,即2X。咱們仍是用前面的函數(Y=X)預測輸出並計算總的偏差。

 

 

偏差計算的細節在下面一張表格中。在這種狀況下,跟前面的例子不同,總的偏差不是0,而是14。數據中偏差的存在代表模型函數不能在輸入和輸出之間正確地映射。

 

爲了減小偏差,咱們必須修改函數。問題是,咱們改變函數裏的什麼東西,可以減小它的偏差呢?函數只有兩個變量X和Y。一個表明輸入,另外一個表明輸出。這兩個都不能改。最後結論是,函數是非參數的,因此沒有辦法對它進行修改以減小偏差。

 

 

可是還有但願,若是函數目前尚未參數,爲何不添加一個或多個參數呢?你能夠大膽採用能減小偏差的方法去設計機器學習模型。若是你發現往函數裏增長東西能解決問題,立馬就加。

 

在新數據中,輸出Y是輸入X的兩倍。但函數沒有針對這個作修改,仍然用Y=X。咱們修改函數,使得輸出Y等於2X而不是X。如今咱們獲得的函數是Y=2X。使用這個函數以後,總的預測偏差用下表來計算。總偏差如今又是0了。不錯。

 

 

在把2加到函數裏以後,咱們的模型變成有參數的了嗎?不!模型仍然是無參數的。一個有參數的模型從數據中學習到參數的值。這裏,參數值的計算與數據無關,因此說模型仍然是無參數的。剛纔的模型用2乘以X,可是數值2與數據無關。因此,模型還是無參數的。

 

咱們把前面的數據用下表進行修改。

 

 

由於沒有學習環節,咱們能直接跳到測試環節,在這個環節裏咱們用最新的那個函數(Y=2X)來計算預測輸出,而後計算出預測的偏差。總的偏差用下表進行計算。總的偏差如今再也不是0,而是14了。這是怎麼回事?

 

 

解決這個問題的模型是創建在輸出Y是輸入X的兩倍(2X)基礎之上的。如今,輸出Y再也不等於2X,而3X了。所以,咱們能夠確定偏差會增長。爲了消除這個偏差,咱們不得不改變模型函數,用3,而不是2。新的函數是Y=3X。

 

新的函數Y=3X會將偏差從新調整爲0值。但適用於處理先前數據的Y是X的兩倍即Y=2X,在處理當下數據時會形成偏差。因此,咱們必須以X的3倍去調整總偏差。在處理先前的數據時,咱們還必須手動把倍數變爲2。

 

看起來當每一次數據調整的時候,咱們就必須手動調整模型。對這種煩人的狀況,咱們有一個解決方法。咱們能夠避免在函數當中使用常量,而用變量代替。這就是代數,一個使用變量多於常量的領域。

 

04將權重做爲變量

 

比起在函數中使用常量,好比Y=2X中的2或者Y=3X中的3,咱們能夠在y=wx當中使用w這個變量。這個變量的數值能夠基於數據計算而來,由於這個模型涵蓋了由數據計算得來的變量,因此模型能夠說是有參數的。由於模型含有參數,在變量值能夠計算的基礎上,模型就有了學習步驟。這個參數就是人工神經網絡中的一個神經元。接下來就看一下,當先前的數據符合y=2x這一規律時,模型是如何爲參數w賦值2的。數據在下面已經給出。

 

將參數初始化爲一個一般狀況下隨機選擇的初始值,對於每個參數值,總偏差都是能夠計算的。在一些參數值的基礎上,咱們能夠決定減小偏差的方向,這有助於參數值的最佳(最優)選擇。

 

 

05優化參數

 

假設參數w的初始值設定爲1.5,咱們如今的函數是y=1.5x,咱們能夠根據下面的表格在此函數基礎上計算出總偏差。總偏差是8,由於這裏存在偏差,咱們能夠改變參數w的值。

 

可是目前咱們不知道應該向哪個方向改變參數w的值。我是說,哪種方向更好?咱們是應該增長仍是減小這個參數的值?因此咱們能夠選擇任何值,不管是比如今的1.5大仍是小。

 

 

假設新的w參數值是0.5,那麼新的函數是y=0.5x,咱們能夠在此基礎上計算新的總偏差獲得21。比起以前的參數值1.5和結果8,總偏差增長了。這就是咱們往錯誤方向爲參數值賦值的暗示。咱們能夠往數值更大的方向改變w的參數值,而後看結果有沒有改善。

 

 

若是新的參數值是2.5,新函數是y=2.5x, 在這個函數的基礎上計算總偏差,計算結果可見如下表格,當總偏差爲7時,比以前參數值1.5和0.5兩個案例的結果更優,因此咱們應該爲w賦比1.5更大的值,以減小總偏差。咱們能夠接着爲w增長賦值。

 

 

假設新的參數值是3,那函數就是y=3x, 在此基礎上計算所得的總偏差如如下表格中顯示,爲14。偏差比以前更大。

 

 

爲了對這種狀況有更好的觀察,咱們能夠在下表中總結先前選擇的參數w賦值和與之相對應的總偏差。能夠看出減小偏差的參數w的值域在1.5-2.5之間。咱們能夠在此範圍內取值2,這個過程會測試持續更多的值,直到最終總結出2是能夠達到最小可能偏差的最優值。當函數爲y=wx,當 w爲2時,總偏差爲0。

 

 

這是針對於函數y=2x的數據,當y=3x時,咱們能夠重複以上過程爲參數值爲3的函數找到最優值。到目前爲止,在人工神經網絡中使用權重的目的已經很清晰了。

 

咱們如今能夠討論偏移值了。爲此咱們須要修飾數據,新的數據已經在下表中給出。

 

 

06誤差爲常數

 

此數據與Y = 2X時使用的數據相同,但咱們爲每一個Y值增長了1。咱們能夠測試前一個函數Y = wX,其中w = 2,並根據下面的表計算總偏差。總偏差爲4。

 

 

根據咱們以前的討論,4的偏差意味着wis的值不是最好的,咱們必須改變它直到達到偏差爲0。可是在某些狀況下,僅使用權重的話將不會達到0偏差。這個例子是一個證據。

 

僅使用權重w,咱們能夠達到0偏差嗎?答案是否認的。在這個例子中只使用權重,咱們能夠接近正確的輸出,但仍然會有錯誤。讓咱們更詳細地討論這個問題。

 

對於第一個樣本,在等式Y = wX中w的最佳值是什麼,它返回一個等於0的偏差?這很簡單。咱們有一個包含3個變量的方程,但咱們知道2個變量的值,即Y和X.這就省去了一個變量w,可使用w = Y / X輕鬆計算。對於第一個樣本,Y等於5,X等於2,所以w = Y / X = 5/2 = 2.5。所以,正確預測第一個樣本輸出的w的最佳值是2.5。咱們能夠對第二個樣本重複相同的操做。

 

對於第二個樣本,Y = 7且X = 3。所以,w = Y / X = 7/3 = 2.33。所以,正確預測第二個樣本輸出的w的最佳值是2.33。該值不一樣於與第一個樣本一塊兒使用的w的最佳值。根據第一個和第二個樣本的w的2個值,咱們找不到w的單個值來正確預測它們的輸出。使用w = 2.5將在第二個樣本中產生錯誤,使用w = 2.33將在第一個樣本產生錯誤。

 

做爲結論,僅使用權重,咱們不能達到0的偏差。爲了解決這種狀況,咱們必須使用誤差。

 

經過在w和X之間的乘法結果中加1值能夠獲得0的偏差。所以,新函數是Y = wX + 1,其中w = 2。根據下表,總偏差如今爲0. 很好。

 

 

07誤差做爲變量

 

 

咱們仍然使用常量值1添加到wX。根據咱們以前的討論,在函數中使用常量值會使此值依賴於特定問題而非通用。

 

所以,咱們可使用變量,而不是使用常數1。所以,新函數是Y = wX + b。變量(參數)b表示ANN中的誤差。在解決問題時,咱們如今有2個參數w 和 b來決定它們的最優值。這使問題變得更加困難。咱們要求優化2個參數w(權重)和b(誤差),而不是僅僅找到權重w的最佳值。這須要花費比之前更多的時間。

 

爲了找到2個參數的最優值,一個好方法是首先優化單個參數,直到達到最小可能的偏差。經過更改此參數確保錯誤再也不降低後,咱們再開始優化下一個參數。

 

在優化參數w時將此策略應用於前一個示例,咱們將注意到即便和w = 2有微小的誤差都會增長偏差。這表示值2是參數w的最佳值,咱們能夠開始優化下一個參數b。

 

08從數學形式到神經元的圖形形式

 

 

此時,咱們推導出具備2個參數的函數Y = wX + b。第一個是表示權重的w,第二個是表示誤差的b。該函數是ANN中接受單個輸入的神經元的數學表示。輸入爲X,權重等於w。神經元的誤差爲b。

 

經過將權重(w)乘以輸入(X)並將結果與誤差(b)相加,神經元的輸出爲Y,其被視爲與其鏈接的其餘神經元的輸入。神經元也能夠表示爲總結全部這些信息的圖表,以下圖所示。

 

在圖中,您能夠找到數學函數中的參數與神經元圖之間的映射。只有一個地方須要注意。誤差被視爲輸入值爲1的權重。這使得對於正常輸入操縱誤差變得容易。

 

 

09具備多個輸入的神經元

 

 

到目前爲止,權重和誤差的目的如今已經很明確,咱們也可以以數學和圖形的形式表示神經元。但神經元目前仍只接受單一輸入。咱們如何容許它支持多個輸入?這也很簡單。只需在等式中添加您須要的任何輸入,併爲每一個輸入分配權重。若是有3個輸入,則數學形式以下:

 

關於圖形形式,只需爲每一個輸入建立一個新鏈接,而後將輸入和權重放在鏈接上。這在下圖中給出。經過鏈接這種形式的多個神經元,咱們能夠建立一個完整的人工神經網絡。記住,整個過程的起點僅僅是Y = X而已。

 

 

10乘積之和

 

 

在數學形式中,咱們注意到重複了不一樣的項。這些項對應每一個輸入乘以其相應的權重。咱們能夠在求和運算符中彙總全部這些乘積。該操做符將返回每一個輸入與其相應權重之間的乘積之和。


下面給出了神經元的新數學形式。注意,求和從0開始,而不是1.這意味着將存在權重(w)和具備索引爲0的輸入(X)。索引爲0的權重將指向誤差b。其輸入將始終指定爲+1。

 

 

你也能夠在求和完成後再加上誤差做爲單獨的一項(以下所示)。在這種狀況下,求和從1開始。

 

 

11結論

 

 

本教程提供了一個很是詳細的解釋,說明如何從一個很是簡單的函數Y = X開始建立一個完整的人工神經網絡。在整個教程中,咱們探討了權重和誤差的目的。此外,此教程在數學形式和神經元的圖形形式之間進行了一一對應。

 

本文編輯:王立魚

英語原文:https://heartbeat.fritz.ai/from-y-x-to-building-a-complete-artificial-neural-network-327da18894af

 

 

數智物語徵稿啓事0613.png

 

星標我,天天多一點智慧

 

相關文章
相關標籤/搜索