単一のパーセプトロンの場合-文献によると、XOR関数のような非線形判別ケースを分離するために使用することはできません。ラインのVC次元(2次元)は3であり、単一の2次元ラインではXORのような出力を区別できないため、これは理解できます。
しかし、私の質問は、なぜ単一パーセプトロンの評価関数が線形ステップ関数である必要があるのかということです。明らかに、シグモイドのような非線形評価関数がある場合、このパーセプトロンはXORの1と0を区別できます。だから、私はここで何かが欠けていますか?
推奨答え
シグモイドのような非線形評価関数がある場合、このパーセプトロンはXORの1と0を区別できます。
それはまったく真実ではありません。識別の基準は、線の形状(または高次元の超平面)ではなく、関数が
linear separabilityを許可するかどうかです。
XOR関数の点を分離できる超平面を生成する単一の関数はありません。画像の曲線は点を分離していますが、それは関数ではありません。
XORのポイントを分離するには、少なくとも2本の線(またはその他の形状の関数)を使用する必要があります。これには、2つの別々のパーセプトロンが必要になります。次に、3番目のパーセプトロンを使用して、符号に基づいて中間結果を分離できます。
その他答え #1
シグモイドとは、実際にはシグモイドを意味するのではなく、極大値を持つものを意味すると思います。通常のパーセプトロン二項分類器の形式は次のとおりです。
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を使用することでより複雑なケースを処理できます。
その他答え #2
古い質問ですが、私は自分の考えを残したいと思います(私が間違っている場合は誰でも私を訂正します)。
linear model
と
loss
または
error
関数の概念が混在していると思います。
パーセプトロンは定義上線形モデルであるため、クラスを分離するために使用できる線/平面/超平面を定義します。
標準のパーセプトロンアルゴリズムは、出力の信号を抽出し、-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.