Introducción a las redes neuronales (1)

No hace falta decir que la importancia de las redes neuronales irá directamente al tema.

Artículo principal para explicar algunos de los algoritmos y programación básicos de la red neuronal (como la percepción, una entropía cruzada, descenso de gradiente , etc.) , profundizado gradualmente, y finalmente enseñarle a construir una red neuronal simple (puntos 4-5 veces listos para terminar, por favor continúe atención). Si el lector es Xiaobai y no comprende las redes neuronales, por favor, Baidu solo.

En pocas palabras, las redes neuronales son en realidad problemas de clasificación. Por ejemplo, busque la mejor línea recta para distinguir los datos rojos y los datos azules en la figura siguiente. Por supuesto, esto es solo un simple problema de clasificación lineal. A medida que aumenta el número de capas de red, las redes neuronales pueden manejar muchos problemas no lineales complejos.

Este artículo presenta principalmente los conceptos básicos de la implementación del código de perceptrón y python de redes neuronales

Primero, veamos un problema de clasificación simple. Supongamos que somos un funcionario de admisiones de una universidad, el trabajo principal es aceptar o rechazar estudiantes, y hay dos datos de evaluación: puntajes de exámenes y calificaciones habituales durante el período escolar (¡nuevamente! ¡Los puntajes son el alma de los estudiantes!). La siguiente imagen muestra los dos resultados de los estudiantes admitidos por la escuela a lo largo de los años. Los puntos azules indican estudiantes admitidos y los puntos rojos indican estudiantes no aceptados. ¿Se admitirán estudiantes con una calificación de 7 en la prueba y una calificación de 6?


De hecho, los datos de admisión de estudiantes a lo largo de los años se pueden distinguir fácilmente mediante la siguiente línea recta. La mayoría de los estudiantes por debajo de la línea son rechazados y la mayoría de los estudiantes por encima de la línea son admitidos. Llame a esta línea recta nuestro modelo, y el error de este modelo no se considerará por el momento. Volviendo a la pregunta anterior, se puede observar que el punto (7, 6) se encuentra por encima de la línea recta, y es relativamente seguro que el alumno será admitido.

El problema anterior se transformará en un problema matemático a continuación.

Registre la variable de abscisas como x_ {1}y la variable de ordenadas como x_ {2}. Suponga que ya sabemos que la ecuación de esta línea es 2x_ {1} + x_ {2} -18 = 0. Es decir, el puntaje del estudiante es puntaje = 2 * examen + grados-18, y luego ingrese los dos puntajes del estudiante, si el puntaje es positivo (mayor o igual a 0), luego acepte, de lo contrario rechace (este paso se llama predicción ).

Luego se extendió al problema general de las ecuaciones lineales puede expresarse como: w_ {1} x_ {1} + w_ {2} x_ {2} + b = 0. Utilice el método vectorial para escribir simplemente como WX + b = 0. Entre ellos se Wdenominan ponderaciones y Bsesgos. yMarque el contenido que queremos predecir con una etiqueta y ytome 0 (punto rojo) o 1 (punto azul). Use etiquetas para \hat{y}indicar los resultados de la predicción y \hat{y}tome 0 (rechazar) o 1 (aceptar). Nuestro objetivo es acercarnos \hat{y}lo más posible y. Cuanto más cerca esté, mejor será nuestra ecuación en línea recta, es decir, mejor será el efecto de clasificación.

Entonces, si agregamos otra base de evaluación: x_ {3}clasificación de clase, ¿qué debemos hacer? ¡bingo! Necesitamos proceder en un espacio tridimensional, es decir, encontrar un plano para w_ {1} x_ {1} + w_ {2} x_ {2} + w_ {3} x_ {3} + b = 0dividir los datos. Si hay n dimensiones, entonces está buscando datos de partición de hiperplano n-1 dimensionales. yY \hat{y}sigue siendo el mismo que el anterior.

A continuación, construya la base del perceptrón de la red neuronal. El perceptrón debe codificar la ecuación lineal anterior para formar una figura pequeña. Como se muestra en la figura siguiente, la desviación se Bconsidera aquí b * 1, por lo que se Bconsiderará como parte de la entrada.

Luego, el perceptrón compuesto por datos n-dimensionales se muestra en la figura siguiente. x_ {1}To x_ {n}es el nodo de entrada, w_ {1}to w_ {n}es el peso del borde y Bes la unidad de polarización. El resultado final de salida es 0 o 1. Aquí se utiliza una función de paso.

Entonces, un perceptrón se puede representar completamente mediante la siguiente figura. Es decir, se considera una combinación de nodos, el primer nodo calcula la entrada de la ecuación y pasa el resultado del cálculo a la función escalón. El segundo nodo genera el resultado de la predicción de acuerdo con el resultado del cálculo.

La figura anterior está representada por símbolos:

Dado que la estructura del perceptrón es más similar a la de las neuronas humanas, la red formada por el perceptrón se llama red neuronal.

Después de hablar sobre el perceptrón, hay un ejercicio de calentamiento: use el perceptrón para implementar la operación "y".

Puedes intentar escribirlo tú mismo primero.

El código es el siguiente (python), se debe instalar la biblioteca de pandas:

import pandas as pd

# TODO: Set weight1, weight2, and bias
weight1 = 1.0
weight2 = 1.0
bias = -1.5


# DON'T CHANGE ANYTHING BELOW
# Inputs and outputs
test_inputs = [(0, 0), (0, 1), (1, 0), (1, 1)]
correct_outputs = [False, False, False, True]
outputs = []

# Generate and check output
for test_input, correct_output in zip(test_inputs, correct_outputs):
    linear_combination = weight1 * test_input[0] + weight2 * test_input[1] + bias
    output = linear_combination > 0
    is_correct_string = 'Yes' if output == correct_output else 'No'
    outputs.append([test_input[0], test_input[1], linear_combination, output, is_correct_string])

# Print output
num_wrong = len([output[4] for output in outputs if output[4] == 'No'])
output_frame = pd.DataFrame(outputs, columns=['Input 1', '  Input 2', '  Linear Combination', '  Activation Output', '  Is Correct'])
if not num_wrong:
    print('Nice!  You got it all correct.\n')
else:
    print('You got {} wrong.  Keep trying!\n'.format(num_wrong))
print(output_frame.to_string(index=False))

Por supuesto, el perceptrón también puede implementar "o" operaciones, "no" operaciones, etc. Puede intentarlo usted mismo.

Habiendo introducido tanto, es posible que tenga preguntas: ¿Cómo puede una computadora encontrar una ecuación lineal adecuada? Responderemos a esta pregunta en la siguiente sección.

Si tiene alguna pregunta, ¡pregunte! ! !

Supongo que te gusta

Origin blog.csdn.net/ting_qifengl/article/details/100555844
Recomendado
Clasificación