contenido
Algoritmo de perceptrón
En 1957, el académico estadounidense Frank Rsenblatt propuso el algoritmo de origen de la red neuronal.
concepto
Recibe múltiples señales de entrada y emite una señal (0 o 1)
Aquí hay un ejemplo de un perceptrón que acepta tres señales de entrada
Antes de que la neurona reciba la señal de entrada, se multiplicará por su peso respectivo 1 y luego la neurona la procesará (el procesamiento aquí es la suma ponderada de las neuronas de entrada) para obtener el valor de pseudo salida de una neurona, cuando Cuando el valor de cuasi-salida es mayor que un cierto umbral, la neurona emitirá 1, lo que indica que la neurona está activada 2
Exprese el proceso anterior en expresiones matemáticas como:
De la expresión matemática anterior, podemos encontrar que el umbral en realidad representa la facilidad con la que se activa la neurona, y el valor final de salida real tiene una relación lineal con la entrada, por lo que la expresión matemática anterior también se puede escribir como
Implementación de circuitos lógicos simples usando perceptrones
Probablemente conocemos la teoría del perceptrón, ¿cómo podemos usarla para resolver problemas prácticos?
Y puerta
Características:
Si la entrada es todo 1, salida 1, de lo contrario, salida 0
mesa de la verdad
La compuerta AND es un circuito de compuerta con dos entradas y una salida. La relación entre la señal de entrada y la señal de salida se refiere a la siguiente tabla de verdad
x1 | x2 | final |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Implementación de perceptrón
def AND(x1,x2):
w1,w2,theta=0.5,0.5,0.7
tmp=w1*x1+w2*x2
if tmp<=theta:
return 0
else:
return 1
Mejora:
del algoritmo anterior, podemos ver que al calcular el tmp de salida, necesitamos calcular la expresión de multiplicar el peso y el valor de entrada. Cuando hay muchos valores de entrada, esta expresión será muy detallada. Para resolver este problema, introducimos operaciones de matriz numpy .
def AND(x1,x2):
x=np.array([x1,x2]) # 引入numpy数组
w=np.arry([0.5,0.5]) # 引入numpy数组
b=-0.7
tmp=np.sum(w*x)+b
if tmp<=0:
return 0
else:
return 1
puerta NAND
Características
Salida 0 si ambas entradas son 1, de lo contrario salida 1
mesa de la verdad
x1 | x2 | final |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Implementación de perceptrón
def NAND(x1,x2):
x=np.array([x1,x2])
w=np.arry([-0.5,-0.5])
b=0.7
tmp=np.sum(w*x)+b
if tmp<=0:
return 0
else:
return 1
O puerta
Características
Siempre que una señal de salida sea 1, salida 1, de lo contrario, salida 0
mesa de la verdad
x1 | x2 | final |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Implementación de perceptrón
def OR(x1,x2):
x=np.array([x1,x2])
w=np.arry([0.5,0.5])
b=-0.2
tmp=np.sum(w*x)+b
if tmp<=0:
return 0
else:
return 1
Sobre las limitaciones de los perceptrones
- La esencia del entrenamiento de redes neuronales : observe cuidadosamente el proceso de implementación de los tres circuitos lógicos anteriores, podemos ver que solo los parámetros de peso y los umbrales son diferentes, pero se realizan diferentes funciones. De hecho, la esencia del entrenamiento de redes neuronales es continuamente optimice los parámetros de peso y preste más atención a 3
- Limitaciones del perceptrón :
Vemos que las compuertas AND, las compuertas NAND y las compuertas OR se pueden dividir en dos espacios mediante una función lineal, una de las cuales genera 0 y la otra genera 1.
Pero las compuertas XOR no se pueden dividir mediante una línea recta de todos modos. Los espacios solo se pueden dividir en dos espacios usando una curva. El espacio dividido por líneas rectas se llama espacio lineal , y el espacio dividido por curvas se llama espacio no lineal.
puerta XOR
Un solo perceptrón no puede representar una puerta XOR, pero podemos hacerlo apilando varios perceptrones
Implementación de perceptrón
Hay muchas formas de implementar compuertas XOR en perceptrones multicapa. El autor presenta una aquí: las entradas x1, x2 se usan como entrada de la compuerta NAND y la compuerta OR, y la salida de la compuerta NAND y la compuerta OR se usa como entrada de la puerta AND
Código
def XOR(x1,x2):
return AND(NAND(x1,x2),OR(x1,x2))
Cada valor de la señal de entrada tiene su propio peso, y estos pesos representan la importancia de la señal de entrada. Es decir, cuanto mayor sea el valor de peso, mayor será la influencia del valor de la señal correspondiente en el valor de salida↩︎
De hecho, en el mecanismo de trabajo de las neuronas biológicas, las neuronas no generan simplemente valores de salida para todos los valores de entrada, sino que responderán cuando los valores de entrada alcancen un cierto umbral. El entendimiento del autor: la red neuronal es un conocimiento biónico, y la configuración del perceptrón también está inspirada en las neuronas biológicas↩︎
La percepción del autor: el llamado buen modelo de red neuronal es que los parámetros de peso optimizados pueden lograr un excelente efecto de ajuste para un problema determinado↩︎