CNTK - Conceptos de redes neuronales (NN)

Este capítulo trata sobre conceptos de red neuronal con respecto a CNTK.

Como sabemos, se utilizan varias capas de neuronas para crear una red neuronal. Pero, surge la pregunta de que en CNTK ¿cómo podemos modelar las capas de una NN? Se puede hacer con la ayuda de las funciones de capa definidas en el módulo de capas.

Función de capa

En realidad, en CNTK, trabajar con las capas tiene una sensación de programación funcional distinta. La función de capa parece una función normal y produce una función matemática con un conjunto de parámetros predefinidos. Veamos cómo podemos crear el tipo de capa más básico, Denso, con la ayuda de la función de capa.

Ejemplo

Con la ayuda de seguir los pasos básicos, podemos crear el tipo de capa más básico:

Step 1 - Primero, necesitamos importar la función Dense layer del paquete de capas de CNTK.

from cntk.layers import Dense

Step 2 - Luego del paquete raíz CNTK, necesitamos importar la función input_variable.

from cntk import input_variable

Step 3- Ahora, necesitamos crear una nueva variable de entrada usando la función input_variable. También necesitamos proporcionar su tamaño.

feature = input_variable(100)

Step 4 - Por fin, crearemos una nueva capa usando la función Densa además de proporcionar la cantidad de neuronas que queramos.

layer = Dense(40)(feature)

Ahora, podemos invocar la función de capa densa configurada para conectar la capa densa a la entrada.

Ejemplo de implementación completo

from cntk.layers import Dense
from cntk import input_variable
feature= input_variable(100)
layer = Dense(40)(feature)

Personalizar capas

Como hemos visto, CNTK nos proporciona un conjunto bastante bueno de valores predeterminados para construir NN. Residencia enactivationfunción y otras configuraciones que elijamos, el comportamiento y el rendimiento de la NN es diferente. Es otro algoritmo de derivación muy útil. Esa es la razón, es bueno entender qué podemos configurar.

Pasos para configurar una capa densa

Cada capa en NN tiene sus opciones de configuración únicas y cuando hablamos de capa Densa, tenemos las siguientes configuraciones importantes para definir:

  • shape - Como su nombre lo indica, define la forma de salida de la capa que determina además el número de neuronas en esa capa.

  • activation - Define la función de activación de esa capa, por lo que puede transformar los datos de entrada.

  • init- Define la función de inicialización de esa capa. Inicializará los parámetros de la capa cuando comencemos a entrenar el NN.

Veamos los pasos con la ayuda de los cuales podemos configurar un Dense capa -

Step1 - Primero, necesitamos importar el Dense función de capa del paquete de capas de CNTK.

from cntk.layers import Dense

Step2 - A continuación del paquete de operaciones de CNTK, necesitamos importar el sigmoid operator. Se utilizará para configurar como función de activación.

from cntk.ops import sigmoid

Step3 - Ahora, desde el paquete inicializador, necesitamos importar el glorot_uniform inicializador.

from cntk.initializer import glorot_uniform

Step4 - Por fin, crearemos una nueva capa usando la función Densa además de proporcionar el número de neuronas como primer argumento. Además, proporcione elsigmoid operador como activation función y la glorot_uniform como el init función para la capa.

layer = Dense(50, activation = sigmoid, init = glorot_uniform)

Ejemplo de implementación completo -

from cntk.layers import Dense
from cntk.ops import sigmoid
from cntk.initializer import glorot_uniform
layer = Dense(50, activation = sigmoid, init = glorot_uniform)

Optimizando los parámetros

Hasta ahora, hemos visto cómo crear la estructura de una NN y cómo configurar varios ajustes. Aquí, veremos, cómo podemos optimizar los parámetros de una NN. Con la ayuda de la combinación de dos componentes a saberlearners y trainers, podemos optimizar los parámetros de una NN.

componente de entrenador

El primer componente que se utiliza para optimizar los parámetros de un NN es trainercomponente. Básicamente implementa el proceso de retropropagación. Si hablamos de su funcionamiento, pasa los datos por la NN para obtener una predicción.

Después de eso, usa otro componente llamado aprendiz para obtener los nuevos valores para los parámetros en un NN. Una vez que obtiene los nuevos valores, aplica estos nuevos valores y repite el proceso hasta que se cumpla un criterio de salida.

componente de aprendizaje

El segundo componente que se utiliza para optimizar los parámetros de un NN es learner componente, que es básicamente responsable de realizar el algoritmo de descenso de gradiente.

Estudiantes incluidos en la biblioteca CNTK

A continuación se muestra la lista de algunos de los estudiantes interesantes incluidos en la biblioteca CNTK:

  • Stochastic Gradient Descent (SGD) - Este alumno representa el descenso de gradiente estocástico básico, sin extras.

  • Momentum Stochastic Gradient Descent (MomentumSGD) - Con SGD, este alumno aplica el impulso para superar el problema de los máximos locales.

  • RMSProp - Este alumno, para controlar la tasa de descenso, utiliza tasas de aprendizaje decrecientes.

  • Adam - Este alumno, con el fin de disminuir la tasa de descenso con el tiempo, utiliza el impulso decreciente.

  • Adagrad - Este alumno, tanto para las funciones que ocurren con frecuencia como para las que ocurren con poca frecuencia, utiliza diferentes tasas de aprendizaje.