Bienvenido a la serie All About Circuits en redes neuronales, creada por el Director de Ingeniería Robert Keim. Antes de continuar con esta lección sobre los nodos de sesgo, considere ponerse al día con el resto de la serie a continuación:
Los nodos de sesgo, que se pueden agregar a la capa de entrada de Perceptron o a la capa oculta, producen un valor constante elegido por el diseñador.
Discutimos los valores de sesgo en la Parte 11, y lo aliento a leer (o releer) la parte relevante de ese artículo si no tiene claro qué son los nodos de sesgo o cómo modifican y potencialmente mejoran la funcionalidad de una red neuronal.
En este artículo, primero explicaré dos métodos para incorporar valores de sesgo en la arquitectura de su red, y luego realizaremos un experimento para ver si los valores de sesgo pueden mejorar el rendimiento de precisión que obtuvimos en el artículo anterior (Parte 16).
El siguiente diagrama muestra una red que tiene un nodo de polarización en la capa de entrada pero no en la capa oculta.
Si esta es la configuración que está buscando, puede agregar un valor de sesgo utilizando la hoja de cálculo que contiene sus datos de capacitación o validación.
La ventaja de este método es simplemente que no se requieren modificaciones sustanciales del código. El primer paso es insertar una columna en su hoja de cálculo y llenarla con su valor de sesgo:
Ahora, todo lo que necesita hacer es aumentar su dimensionalidad de la capa de entrada en uno:
Si desea un nodo de sesgo en la capa oculta, o si no le gusta trabajar con hojas de cálculo, necesitará una solución diferente.
Supongamos que queremos agregar un nodo de sesgo tanto a la capa de entrada como a la capa oculta. Primero, necesitaremos aumentar I_dim y H_dim, ya que nuestro objetivo es integrar los nodos de sesgo de modo que funcionen como nodos normales pero con un valor preponderado que el diseñador elige y que nunca cambia.
Lo lograré de la siguiente manera:
Como recordará, usamos el siguiente código para ensamblar el conjunto de datos de entrenamiento, separar los valores de salida objetivo y extraer el número de muestras de entrenamiento.
Después de estas declaraciones, el número de columnas en la matriz bidimensional datos de entrenamiento será igual al número de columnas de entrada en la hoja de cálculo. Necesitamos aumentar el número de columnas en una para tener en cuenta el nodo de sesgo en la capa de entrada, y mientras lo hacemos, podemos llenar esta columna adicional con el valor de sesgo deseado.
El siguiente código muestra cómo se puede hacer esto.
los np.ones () La función crea una matriz de una columna cuyo número de filas es igual a cuenta_entrenamiento, y asigna un valor de +1 a cada elemento de esta matriz. Luego usamos el np.hstack () función para agregar la matriz de una columna al lado derecho del original datos de entrenamiento formación.
Tenga en cuenta que he realizado este procedimiento tanto para los datos de entrenamiento como para los de validación. Es importante recordar que el objetivo no es en realidad modificar los datos de capacitación o validación; más bien, estamos modificando los datos como un medio de implementar la configuración de red deseada.
Cuando miramos un diagrama de bloques del Perceptron, los nodos de sesgo aparecen como elementos de la red misma; por lo tanto, cualquier muestra procesada por la red debe someterse a esta modificación.
Podemos agregar un sesgo en el procesamiento de alimentación directa modificando el bucle for que calcula los valores de postactivación de capa oculta y luego insertando manualmente el valor de sesgo para el último nodo oculto (que en realidad es un nodo de sesgo).
La primera modificación se muestra a continuación:
Si la red está configurada para no tener un nodo de sesgo de capa oculta, hidden_bias es igual a 0 y la ejecución del bucle for no cambia.
Si, por otro lado, hemos decidido incluir un nodo de sesgo de capa oculta, el bucle for no calculará un valor de postactivación para el nodo final de la capa (es decir, el nodo de sesgo).
El siguiente paso es incrementar la variable del nodo para que acceda al nodo de sesgo en el postActivation_H matriz, y luego asigne el valor de sesgo.
Tenga en cuenta que estas modificaciones también deben aplicarse a la parte de validación del código.
En mi experiencia, +1 es el valor de sesgo estándar, y no sé si existe alguna justificación sólida para usar otros números. El sesgo se modifica por los pesos, por lo que elegir +1 no impone restricciones firmes sobre cómo interactúa el sesgo con la funcionalidad general de la red.
Sin embargo, si desea experimentar con otros valores de sesgo, puede hacerlo fácilmente. Para el sesgo oculto, simplemente cambia el número asignado a postActivation_H (nodo). Para el sesgo de entrada, puede multiplicar el nueva_columna matriz (que inicialmente tiene +1 para cada elemento) por el valor de sesgo deseado.
Si ha leído la Parte 16, sabe que mi Perceptron tuvo algunas dificultades para clasificar las muestras en el Experimento 3, que era el problema de "alta complejidad".
Veamos si la adición de uno o más nodos de sesgo ofrece una mejora consistente y significativa.
Supuse que las diferencias en la precisión de la clasificación serían bastante sutiles, por lo que para este experimento, promedié diez carreras en lugar de cinco. Los conjuntos de datos de capacitación y validación se generaron utilizando la misma relación de alta complejidad entre entrada y salida, y la dimensionalidad de la capa oculta fue 7.
Aquí están los resultados:
Como puede ver, los nodos de sesgo no condujeron a ningún cambio significativo en el rendimiento de la clasificación.
En realidad, esto no me sorprende: creo que los nodos de sesgo a veces están un poco exagerados, y dada la naturaleza de los datos de entrada que utilicé en este experimento, no veo ninguna razón por la que los nodos de sesgo puedan ayudar.
No obstante, el sesgo es una técnica importante en algunas aplicaciones; es una buena idea escribir código que admita la funcionalidad de nodo de sesgo para que esté allí cuando lo necesite.
Los días felices de la PDA y Blackberry han quedado definitivamente atrás, pero el factor…
Tutorial sobre cómo pronosticar usando un modelo autorregresivo en PythonFoto de Aron Visuals en UnsplashForecasting…
Si tienes un iPhone, los AirPods Pro son la opción obvia para escuchar música, ¡aunque…
Ilustración de Alex Castro / The Verge Plus nuevos rumores sobre el quinto Galaxy Fold.…
Se rumorea que los auriculares premium de próxima generación de Apple, los AirPods Max 2,…
El desarrollador Motive Studio y el editor EA han lanzado un nuevo tráiler de la…