天天看點

神經網絡筆記之感覺機

由于最近需要開始研究神經網絡方面的項目,于是乎在重新再看Geoffrey Hinton大神的Neural Network for machine learning的公開課,跟着Hinton大神再把神經網絡的東西過一遍。

神經網絡的分類

Feed-forward neural networks

神經網絡筆記之感覺機

Recurrent neural networks(RNN)

神經網絡筆記之感覺機
  • Recurrent neural networks are a very natural way to model sequential data.
  • They have the ability to remember information in their hidden state for a long time.

Symmetrically connected networks

和RNN結構類似,但是單元之間的連接配接是對稱的(每個方向具有相同的權重)。

第一代神經網絡–感覺機(Perceptrons)

神經網絡筆記之感覺機

基本結構和現在的Neural Network很像,如下圖所示:(有bias)

神經網絡筆記之感覺機

那麼,感覺機是怎麼訓練其參數的呢?

大緻算法如下:

  • If the output unit is correct,leave its weights alone.
  • If the output unit is incorrectly outputs a zero, add the input vector to the weight vector.
  • If the output unit is incorrectly outputs a one, substract the input vector to the weight vector.

簡而言之,隻對分類錯誤的樣本作反應,真值為1的樣本在權重上加上輸入向量,真值為0的樣本在權重上減去輸入向量。無限循環,直至收斂。

感覺機的幾何解釋

這裡不是使用權重作為超平面,輸入資料作為空間内點的解釋方式;相反,這裡使用權重作為空間内點,每一維對應于一維權重,輸入資料被看做constrain,限制合法權重的空間。

具體的,輸入資料和權重維數相同(使用bias,而不是threshold),則每個輸入資料可以對應于權重空間中的一個向量(起始點為原點),則對該資料的分類取決于權重向量(起始點為原點)和輸入資料向量的夾角是銳角還是鈍角;換種表示為,與輸入資料垂直的超平面對權重空間做了劃分,位于輸入資料向量一側的權重空間會把輸入資料判為正樣本,相反則會判為負樣本。基于輸入資料的真值,即可确定能夠對輸入資料正确分類的權重空間。

如下圖所示,真值為1的輸入資料,輸入資料向量為圖中藍色箭頭所示,與其垂直的超平面為黑色直線所示,因為真值為1,是以綠色箭頭因與輸入資料向量夾角為銳角,是以為合法權重空間,相反紅色箭頭所示權重為非法權重。

神經網絡筆記之感覺機

而當輸入資料真值為0的時候,則确定的合法權重空間則剛好相反:

神經網絡筆記之感覺機

多個輸入資料,每個輸入資料-真值對,都會對合法權重空間加以限制,最終滿足所有輸入資料限制的權重空間,其内對應的所有權重都可以将所有輸入資料正确分類。因為所有的輸入資料限制都是通過一個過原點的超平面劃分,是以最終确定的合法權重空間必然是一個圓錐形。若輸入資料線性可分,則必然存在一個合法權重空間,且合法權重無限;相反則不會出現此合法權重空間,即不存在某個權重可以正确分類所有輸入資料。注意到合法空間是連續的,即任意兩個合法權重的均值仍然是合法的,進而推出該問題是凸問題(convex)。

神經網絡筆記之感覺機

以兩個輸入資料為例子,其可以确定的合法權重空間如下圖所示:

神經網絡筆記之感覺機

Octave實作的感覺機訓練

在Chapter3的程式設計訓練中,就要求使用Octave實作感覺機的訓練,其中關鍵的代碼如下:

function [w] = update_weights(neg_examples, pos_examples, w_current)
%% 
% Updates the weights of the perceptron for incorrectly classified points
% using the perceptron update algorithm. This function makes one sweep
% over the dataset.
% Inputs:
%   neg_examples - The num_neg_examples x 3 matrix for the examples with target 0.
%       num_neg_examples is the number of examples for the negative class.
%   pos_examples- The num_pos_examples x 3 matrix for the examples with target 1.
%       num_pos_examples is the number of examples for the positive class.
%   w_current - A 3-dimensional weight vector, the last element is the bias.
% Returns:
%   w - The weight vector after one pass through the dataset using the perceptron
%       learning rule.
%%
w = w_current;
num_neg_examples = size(neg_examples,1);
num_pos_examples = size(pos_examples,1);
for i=1:num_neg_examples
    this_case = neg_examples(i,:);
    x = this_case'; %Hint
    activation = this_case*w;
    if (activation >= 0)
        %YOUR CODE HERE
        w = w-x;
    end
end
for i=1:num_pos_examples
    this_case = pos_examples(i,:);
    x = this_case';
    activation = this_case*w;
    if (activation < 0)
        %YOUR CODE HERE
        w = w+x;
    end
end
           

關鍵之處在兩個for語句當中,第一個for是對資料集中的所有negative(=0)的樣本進行計算,倘若計算得到的activation>=0(分類=1),則說明分類出錯,則要将weight減去輸入向量x,注意:這裡的x是this_case的轉置矩陣。類似的,第二個for是對資料集中的所有positive(=1)的樣本進行計算,倘若計算得到的activation<0(分類=0),則說明分類出錯,則要将weight加上輸入向量x。

繼續閱讀