《機器學習:算法視角(原書第2版)》 —3.3 感知器
3.3 感知器
感知器無非是一個由McCulloch和Pitts的神經元組成的集合,它包含一組輸入和一些把輸入和神經元連接在一起的權重。網絡可以在圖3-2中見到,左邊以淺灰色陰影表示的是輸入節點。這些不是神經元,而是一個示意圖,形象地表示了輸入是如何提供給網絡的,以及輸入值的個數(這等于輸入向量的維度(元素的數量))。這些幾乎總是畫成圓形,就像神經元一樣,很容易引起混淆,所以我加上了不同深度的陰影。在圖中,右邊的為神經元,并且可以看到加法的部分(以圓形表示)和閾值的部分。實際上,沒有人會把閾值部分分開來畫,你只需要記住它是神經元的一部分。
圖3-2 感知器網絡,包括輸入節點集(左),它們與McCulloch和Pitts的神經元通過權重連接
請注意,在感知器中,神經元彼此之間是完全獨立的。對任一個神經元來說,別的神經元在做什么與它無關,它所做的只是把輸入的每一個元素與相應的權重相乘,然后把所有的乘積相加,再把所得的結果與閾值相比較,以判斷是否激活,而無須考慮其他神經元在做什么。甚至連每一個神經元的權重也是彼此獨立的,所以它們之間唯一共享的就是輸入,每一個神經元都會見到提供給網絡的所有的輸入。
在圖3-2中,輸入的個數與神經元的個數相同,但實際情況并不一定是這樣,一般地,有m個輸入和n個神經元。輸入的個數是通過數據決定的,與之類似的還有輸出的數量。由于進行的是監督學習,所以我們想要感知器學會復制一個特定的目標,即對于一個給定的輸入,得到一個包含激活和不激活的神經元的模式。
在之前研究McCulloch和Pitts的神經元時,權重被標記為wi,i的取值范圍是從1到輸入的數量。這里,我們還要弄清楚權重是提供給哪個神經元的,所以我們把權重標記為wij,j的取值范圍是從1到神經元的數量。所以,w32就是連接輸入節點3和神經元2的權重。當我們具體實現神經網絡的時候,可以使用二維數組來保存這些權重。
現在,計算神經元是否激活就簡單了。我們設置輸入節點的值為輸入向量的每一個元素,然后對每一個神經元使用方程(3.1)和方程(3.2)。我們可以對每個神經元都進行這樣的處理,所得的結果就是一個神經元激活與不激活的模式,看上去就像一個由0和1組成的向量。因此如果有5個神經元,就像圖3-2中那樣,那么一個典型的輸出模式可能是(0,1,0,0,1),這表示第2個神經元和第5個神經元激活了,而其他的都沒有。我們把這個模式與目標模式,即已知的由該輸入得出的正確結果進行比較,可以鑒別出哪些神經元得到了正確的結果,哪些沒有。
對于一個得到正確結果的神經元,我們感到滿意,但是任何一個本不應該激活而激活,或是應該激活而沒有激活的神經元,則需要進行權重的調整。但困難在于我們并不清楚權重本來應該是什么樣的,歸根結底,這也是神經網絡的重點所在,所以我們想要調整權重使得神經元在下一次能夠得到正確的結果。在第3章中,關于這一點我們將討論更多的細節,現在我們將做一件很簡單的事情來證明找到一個這樣的解是可能的。
假設我們把一個輸入向量提供給網絡,其中的一個神經元得到了錯誤的結果(它的輸出與目標不相符)。與那個神經元相連的有m個權重,每一個權重對應一個輸入節點。如果我們把結果錯誤的那個神經元標記為k,那么我們感興趣的權重就是wik,i的取值從1到m。這樣我們就知道了哪些權重是需要調整的,但我們仍然需要弄清楚如何調整這些權重。我們首先需要了解的是,每一個權重是偏大還是偏小。這似乎是顯而易見的,如果神經元本不應該激活而激活了,那么某些權重是偏大的,反之如果神經元應該激活而沒有激活,則某些權重是偏小的。所以我們計算yk-tk,tk是這個神經元的目標,表示它應該得到的結果,而yk是神經元的輸出,表示它已經得到的結果,該表達式是一個可行的誤差函數(error function)。如果結果為正,那么該神經元本應該激活但沒有激活,所以我們就把權重調大一些,反之也成立。等一下,這里輸入向量的元素可能為負,這會改變整個值的符號,所以如果我們想讓神經元激活,就需要讓權重也為負。為了順利應付這種情況,我們將通過把這兩個值相乘來看應該如何調整權重:Δwik=-(yk-tk)×xi,并且把所得的值與舊的權重相加來得到新的權重。
注意到我們還沒有提過改變神經元的閾值的事。為了說明它的重要性,假設有一個特殊的輸入0。在這種情況下,如果某一個神經元的結果是錯誤的,那么即使改變了相應的權重也無濟于事(因為任何數與0相乘還是0),因此,需要改變它的閾值。我們將在3.3.2節中講述一種巧妙的方法。然而,在那之前,先要完成學習規則,即我們需要決定每個權重改變多少。這可以通過把上面的值與一個稱為學習速率(learning rate)的參數相乘得到,學習速率通常標記為η。學習速率的值決定了網絡學習的快慢。它非常重要,因此需要用一個獨立的小節來講解(下一節),但首先讓我們給出權重更新的最終規則:wij←wij-η(yj-tj)·xi(3.3)另一件我們現在需要意識到的事情是,每一個訓練樣本都要多次提供給網絡。第一次的時候可能會得到一些正確的結果和一些錯誤的結果,下一次的時候希望能有所進步,直到最終,停止進步。計算出整個網絡訓練的時間可不是一件容易的事情,我們將會在4.3.3節中看到更多的方法,但是現在,我們將預定義最大的循環次數為T。當然,如果網絡能夠計算到所有正確的輸入,那么也會是結束的好時機。
3.3.1 學習速率η
上面的式(3.3)告訴我們如何調整權重,其中的參數η控制著權重調整的幅度。我們可以把它設為1,從而忽略掉它。如果那樣做的話,每當出現一個錯誤的結果,權重將會進行大幅度的調整,這會導致網絡不穩定(unstable),從而使權重的改變永遠都不能停止。如果把學習速率設置得較小,那么在權重發生較大變化之前,需要更多次地提供輸入,從而使網絡要花費更多時間去學習。然而,這樣將會更加穩定,而且對數據中的噪聲(noise,即錯誤)和不精確的成分具有更好的抵抗力。因此,我們選用一個適中的學習速率,一般為0.1<η<0.4,這取決于我們預計輸入中會有多少錯誤。
機器學習服務 機器學習 算法
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。