2012-03-07 46 views
6

在單感知器的情況下 - 文獻指出它不能用於分離非線性判別式例如XOR函數。這是可以理解的,因爲一條線(2-D)的VC維爲3,所以單個2-D線不能區分XOR等輸出。單感知器 - 非線性評估函數

但是,我的問題是爲什麼單個感知器中的評估函數應該是線性階躍函數?顯然,如果我們有一個非線性評估函數,如S形,這個感知器可以區分XOR的1和0。那麼,我在這裏錯過了什麼嗎?

回答

11

如果我們有一個非線性函數估計像一個S形,這可感知XOR

的1和0這是不是真的區分。歧視的標準不是線條的形狀(或更高維度的超平面),而是功能是否允許linear separability

沒有單個函數產生能夠分離XOR函數點的超平面。圖像中的曲線將點分開,但它不是一個函數。

You can't separate the blue and red points into separate hyperplanes using a single function

爲了分離XOR的點,你將不得不使用至少兩行(或任何其它形狀的函數)。這將需要兩個單獨的感知器。然後,您可以使用第三個感知器以符號爲基礎分隔中間結果。

If you use two lines, you can create two discriminants, and then merge the result

+0

*「如果我們有一個非線性函數估計像一個S形......」「那不是真的。」 *的確如此,因爲雙曲線函數沒有多大意義,但我相信我想出了一個非線性評估函數,其中一個更復雜的二元分類會工作的一個例子。如果有興趣,請看我的答案 – ninjagecko 2012-03-07 12:11:50

+1

您建議的功能可以正常工作,但不能由單個感知器處理。請參閱其他答案的評論。 – 2012-03-07 12:26:06

2

我通過乙狀結腸假設你實際上並不意味着乙狀結腸的事,但有局部最大值。而正常的感知二元分類的形式爲:

f(x) = (1 if w.x+b>0 else 0) 

你可以有一個函數:

f(x) = (1 if |w.x+b|<0.5 else 0) 

這肯定會的工作,但將是相當人爲的,在您有效的剪裁模型到你的數據集,這是不好的。

普通感知器算法是否會收斂幾乎肯定沒有問題,但我可能會誤解。 http://en.wikipedia.org/wiki/Perceptron#Separability_and_convergence你可能需要想出一個全新的方法來適應這個功能,這種方式會破壞目的。

或者您也可以使用support vector machine,它與感知器相似,但可以使用kernel trick來處理更復雜的案例。

+1

但是通過引入模運算符,您實際上創建了_two_函數,一個比較(w.x + b)和0.5,另一個比較相同(w.x + b)和-0.5,然後使用第三種分類的中間結果的跡象。這等同於使用多層感知。 – 2012-03-07 12:25:10

+0

與使用多層感知器不太相同,因爲您無法單獨訓練權重。你會在多層感知器中加入權重之間的約束,我不知道這是否是好的。 – 2013-12-05 19:54:18

0

老問題,但我想離開我的想法(任何人糾正我,如果我錯了)。

我認爲你混合了linear modellosserror函數的概念。 感知器根據定義是一個線性模型,因此它定義了一個線/平面/超平面,您可以使用它來分隔您的類。

標準的感知算法提取的輸出信號,從而-1或1:

yhat = signal(w * X + w0) 

這是很好,如果你的數據是linearly separable最終會收斂。

爲了改善這一點,你可以用一個sigmoid平滑損失函數在區間[-1,1]:

yhat = -1 + 2*sigmoid(w * X + w0) 
mean_squared_error = (Y - yhat)^2 

然後用數值優化像梯度下降到錯誤在你的整個數據集減小。這裏W0,W1,W2,...,WN是你的變量。現在

,如果您的原始數據不linearly separable,可以在某種程度上這使得線性可分的,然後應用任何線性模型改造它。因爲模型是linear on the weights這是真實的。

這基本上是什麼樣的SVM模型做下罩做你的非線性的數據進行分類。

PS: I'm learning this stuff too, so experts don't be mad at me if i said some crap.