Implementando una red neuronal (python) de cero a uno: uno

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
inserte la descripción de la imagen aquí

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:

inserte la descripción de la imagen aquí

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
inserte la descripción de la imagen aquí

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

  1. 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
  1. Limitaciones del perceptrón :
    inserte la descripción de la imagen aquí

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

inserte la descripción de la imagen aquí

Código

def XOR(x1,x2):
	return AND(NAND(x1,x2),OR(x1,x2))

  1. 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↩︎

  2. 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↩︎

  3. 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↩︎

Supongo que te gusta

Origin blog.csdn.net/m0_54510474/article/details/124013237
Recomendado
Clasificación