2012-03-07 18 views
6

En el caso de un perceptron único, la literatura indica que no se puede usar para separar casos discriminantes no lineales como la función XOR. Esto es comprensible ya que la dimensión VC de una línea (en 2-D) es 3 y, por lo tanto, una sola línea 2-D no puede discriminar salidas como XOR.Perceptron único - Función de evaluación no lineal

Sin embargo, mi pregunta es ¿por qué la función de evaluación en el perceptrón simple debe ser una función de paso lineal? Claramente, si tenemos una función de evaluación no lineal como un sigmoide, este perceptrón puede discriminar entre el 1s y el 0s de XOR. Entonces, ¿me estoy perdiendo algo aquí?

Respuesta

11

si tenemos una función no lineal evaluar como una sigmoide, este perceptrón puede discriminar entre los 1 y 0 de XOR

eso no es cierto en absoluto. El criterio de discriminación no es la forma de la línea (o hiperplano en dimensiones más altas), sino más bien si la función permite linear separability.

No existe la función única que produce un hiperplano capaz de separar los puntos de la función XOR. La curva en la imagen separa los puntos, pero no es una función.

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

para separar los puntos de XOR, que tendrá que utilizar al menos dos líneas (o cualquier otra función en forma). Esto requerirá dos perceptrones por separado. Entonces, podrías usar un tercer perceptrón para separar los resultados intermedios en base al signo.

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

+0

* "si tenemos una función no lineal evaluar como un sigmoide ..." "Eso no es cierto en absoluto." * Tan ya que la función sigmoide no tiene mucho sentido, pero creo Se me ocurrió un ejemplo de una función de evaluación no lineal donde funcionaría un clasificador binario más complicado; ver mi respuesta si está interesado. – ninjagecko

+1

La función que ha sugerido funcionará, pero no puede ser manejada por un único perceptrón. ver comentario en la otra respuesta. –

2

que asumen por sigmoide que en realidad no decir una sigmoide, sino algo con un máximo local. Mientras que el clasificador binario perceptrón normal es de la forma:

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

usted podría tener una función:

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

Esto sin duda iba a funcionar, pero sería bastante artificial, en el que efectivamente están adaptando su modelo a su conjunto de datos, que es malo.

Si el algoritmo del perceptron normal convergería es casi seguro fuera de la cuestión, aunque puedo estar equivocado. http://en.wikipedia.org/wiki/Perceptron#Separability_and_convergence Es posible que tenga que idear una forma completamente nueva de ajustarse a la función, lo que de alguna forma frustra el propósito.

O podría simplemente usar un support vector machine, que es como el perceptrón, pero es capaz de manejar casos más complicados usando el kernel trick.

+1

Pero al introducir el operador de módulo, está creando _two_ funciones, una que compara (w.x + b) con 0.5, la otra que compara la misma (w.x + b) con -0.5, y luego usa la signos de los resultados intermedios en una tercera clasificación. Esto es equivalente a usar un perceptrón multicapa. –

+0

No es exactamente equivalente a usar un perceptrón multicapa, ya que no se pueden entrenar los pesos por separado. Agregarías una restricción entre los pesos en un perceptrón multicapa, y no sé si esto es bueno. –

0

Pregunta anterior, pero quiero dejar mis pensamientos (cualquiera me corrige si me equivoco).

Creo que está mezclado los conceptos de linear model y loss o error función. El Perceptron es, por definición, un modelo lineal, por lo que define una línea/plano/hiperplano que puede usar para separar sus clases.

El algoritmo estándar Perceptron extraer la señal de la salida, dando -1 o 1:

yhat = signal(w * X + w0) 

Esto está bien y, finalmente, convergerá si sus datos es linearly separable.

Para mejorar esto, puedes usar un sigmoid para suavizar la función de pérdida en el rango [-1, 1]:

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

continuación, utilizar un optimizador numérica como pendiente de descenso para minimizar el error lo largo de todo el conjunto de datos . Aquí w0, w1, w2, ..., wn son sus variables.

Ahora, si sus datos originales no son linearly separable, puede transformarlos de forma que sean separables linealmente y luego aplicar cualquier modelo lineal. Esto es cierto porque el modelo es linear on the weights.

Esto es básicamente lo que hacen los modelos como SVM para clasificar sus datos no lineales.

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

Cuestiones relacionadas