當前位置:
首頁 > 知識 > 從Y=X到構建完整的人工神經網路

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

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

作者 |Ahmed Gad

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

在某些時候,你也許曾問過自己,人工神經網路的參數的來源是什麼?權重的目的是什麼?如果不用偏差(bias)會怎樣?

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

然後,我們將逐步增加一些參數到模型中,直到我們建立了一個單個神經元,這個神經元被設計成接收一個或多個輸入。接著,神經元從數學公式映射成圖形形式。通過連接多個神經元,就能生成一個完整的ANN。讀完本教程後,我希望權重和偏差的用途就能清楚明白了。

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

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

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

因此,我們需要的是一個函數,接收一個單獨的輸入X並返回一個單獨的輸出。這個輸出跟輸入相同。毫無疑問,函數是F(X)=X。為簡單起見,我們用Y代替F(X)。於是,函數變成Y=X。

誤差計算

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

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

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

常數型權重

講明白不用學習參數的原因後,我們來對使用的數據做一些修改。新數據如下表所示。你發現哪些改動了嗎?其實很簡單。每一個輸出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。

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

將權重作為變數

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

將參數初始化為一個通常情況下隨機選擇的初始值,對於每一個參數值,總誤差都是可以計算的。在一些參數值的基礎上,我們可以決定減少誤差的方向,這有助於參數值的最佳(最優)選擇。

優化參數

假設參數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的函數找到最優值。到目前為止,在人工神經網路中使用權重的目的已經很清晰了。

我們現在可以討論偏移值了。為此我們需要修飾數據,新的數據已經在下表中給出。

偏差為常數

此數據與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. 很好。

偏差作為變數

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

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

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

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

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

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

通過將權重(w)乘以輸入(X)並將結果與偏差(b)相加,神經元的輸出為Y,其被視為與其連接的其他神經元的輸入。神經元也可以表示為總結所有這些信息的圖表,如下圖所示。

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

具有多個輸入的神經元

到目前為止,權重和偏差的目的現在已經很明確,我們也能夠以數學和圖形的形式表示神經元。但神經元目前仍只接受單一輸入。我們如何允許它支持多個輸入?這也很簡單。只需在等式中添加您需要的任何輸入,並為每個輸入分配權重。如果有3個輸入,則數學形式如下:

關於圖形形式,只需為每個輸入創建一個新連接,然後將輸入和權重放在連接上。這在下圖中給出。通過連接這種形式的多個神經元,我們可以創建一個完整的人工神經網路。記住,整個過程的起點僅僅是Y = X而已。

乘積之和

在數學形式中,我們注意到重複了不同的項。這些項對應每個輸入乘以其相應的權重。我們可以在求和運算符中匯總所有這些乘積。該操作符將返回每個輸入與其相應權重之間的乘積之和。

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

你也可以在求和完成後再加上偏差作為單獨的一項(如下所示)。在這種情況下,求和從1開始。

結論

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

本文編輯:王立魚

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

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

ACM對2018圖靈獎獲得者Geoffrey Hinton、Yann LeCun、Yoshua Bengio的專訪
CVPR 2019開幕與頒獎儀式:最佳論文完成不可能的任務,上萬參會者共建全球化盛會

TAG:AI研習社 |