在单个感知器的情况下-文献表明它不能用于分离非线性判别情况,如XOR函数。这是可以理解的,因为一条线(在2-D中)的VC维度是3,因此一条2-D线不能区分像XOR这样的输出。
然而,我的问题是,为什么单感知器中的评估函数应该是线性阶跃函数?显然,如果我们有一个像sigmoid这样的非线性评估函数,这个感知器可以区分XOR的1和0。那么,我是不是漏掉了什么?
发布于 2012-03-07 20:01:02
如果我们有一个像sigmoid这样的非线性评估函数,这个感知器可以区分异或运算的1和0
这完全不是真的。判别的标准不是线的形状(或更高维度的超平面),而是函数是否允许。
不存在能够产生能够分离XOR函数的点的超平面的单个函数。图像中的曲线分隔这些点,但它不是函数。

要分隔XOR的点,您必须使用至少两行(或任何其他赋形函数)。这将需要两个单独的感知器。然后,您可以使用第三个感知器根据符号来分离中间结果。

发布于 2012-03-07 20:02:40
我猜你说的sigmoid实际上不是指sigmoid,而是具有局部最大值的东西。而普通的感知器二进制分类器的形式是:
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能够处理更复杂的情况。
发布于 2014-03-11 05:08:15
老问题,但我想留下我的想法(如果我错了,任何人都可以纠正我)。
我认为您混淆了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.
https://stackoverflow.com/questions/9600888
复制相似问题