2.5 Predicci´ on
6.1.4 Neurona
Neurona biol´ogica
Las neuronas, junto con las c´elulas gliales, hacen parte de los sistemas nerviosos central y perif´erico. Mediante estos sistemas los animales se comunican con el medio que les rodea, tanto captando est´ımulos como emitiendo se˜nales a los m´usculos para mover partes de su organismo o desplazarse. Las neuronas son las principales encargadas de realizar estas fun- ciones puesto que est´an especializadas en la recepci´on, procesamiento y emisi´on de informaci´onmediante mecanismos qu´ımicos y el´ectricos que est´an asociados a su membra- na plasm´atica.
Estas funciones no las puede realizar una c´elula individualmente sino que lo hacen grupos m´as o menos numerosos de neuronas conectadas entre s´ıformando circuitos. Dentro de cada circuito, las neuronas se comunican entre ellas principalmente mediante unas especiali- zaciones en sus membranas celulares denominadas, gracias a las cuales se establecen dichos circuitos neuronales (sinapsis)[13].
Figura 6-7: Imagen de una neurona de la corteza cerebral de una rata impregnada con la t´ecnica de Golgi [8].
Las neuronas poseen la morfolog´ıa m´as diversa y compleja en comparaci´on con las dem´as c´elulas del cuerpo. Las neuronas est´an dividas en tres partes: soma, dendritas y ax´on como se puede apreciar en la imagen anterior. El tama˜no y forma del soma, la densidad y organizaci´on de las dendritas, as´ı como la disposici´on, longitud y patr´on de ramificaci´on de los axones son diferentes para cada tipo de neurona[13].
Neurona Artificial La neurona artificial, c´elula o aut´omata, es un elemento que posee un estado interno, llamado nivel de activaci´on, y recibe sefiales que le permiten, en su caso, cambiar de estado [39].
Figura 6-8: Neurona artificial [48].
Las neuronas artificiales se modelan medianteunidades de proceso, caracterizadas por una funci´on de activaci´onque convierte la entrada total recibida de otras unidades en un valor de salida, el cual hace la funci´on de la tasa de disparo de la neurona. Cada unidad de proceso se compone de una red de conexiones de entrada, una funci´on de red (de propagaci´on), encargada de computar la entrada total combinada de todas las conexiones, un n´ucleo central de proceso, encargado de aplicar la funci´on de activaci´on, y la salida, por d´onde se transmite el valor de activaci´on a otras unidades[21].
6.1 Inteligencia Artificial 111
Las conexiones sin´apticas se simulan mediante conexiones ponderadas; la fuerza o peso de la conexi´on cumple el papel de la efectividad de la sinapsis. Las conexiones determinan si es posible que una unidad influya sobre otra, los pesos definen la intensidad de la influencia. Una unidad de proceso recibe varias entradas procedentes de las salidas de otras unidades de proceso. La entrada total de una unidad de proceso se suele calcular como la suma de todas las entradas ponderadas, es decir, multiplicadas por el peso de la conexi´on. El efecto inhibitorio o excitatorio de las sinapsis se logra usando pesos negativos o positivos respectivamente[21]. La siguiente ecuaci´on muestra el comportamiento, tiene un grupo de entradas x1, x2,..., xn
son introducidas en el perceptr´on. ´Estas entradas corresponden a las se˜nales de la sinapsis de una neurona biol´ogica. Cada se˜nal se multiplica por un peso asociado w1, w2, ..., wn antes de ser aplicado el sumatorio etiquetado por P
. Cada peso corresponde a la fuerza de una conexi´on sin´aptica, es decir, el nivel de concentraci´on i´onica de la sinapsis. El sumatorio, que corresponde al cuerpo de la neurona, suma todas las entradas ponderadas produciendo una salida:
y =x1w1+x2w2+...+xnwn y=P
(pesos∗entradas) +bias
Las se˜nales E son procesadas adem´as por una funci´on llamadafunci´on de activaci´on, esta produce la se˜nal de salida de la neurona.
Las neuronas artificiales y las biol´ogicas tienen en com´un el hecho de que establecen conexi´on con otras neuronas vecinas para el envi´o y la obtenci´on de informaci´on, ambas reciben informaci´on de varias entradas para generar una sola salida. La neurona artificial captura se˜nales mediante sensores simulando al ax´on en la neurona biol´ogica.
A continuaci´on tenemos una tabla comparativa entre neuronas artificiales y biol´ogicas:
Figura 6-10: Comparaci´on Neurona Biol´ogica y Neurona Artificial[21]
La funci´on de red es t´ıpicamente el sumatorio ponderado, mientras que la funci´on de activa- ci´on suele ser alguna funci´on de umbral o una funci´on sigmoidal. A continuaci´on podemos ver una tabla comparativa entre una red neuronal artificial y una red neuronal biol´ogica:
Figura 6-11: Comparaci´on Redes Neuronales Biol´ogicas y RNA [21]
Tanto las redes neuronales biol´ogicas como las redes neuronales artificiales tienen el mismo funcionamiento de comunicaci´on, con una estructura muy similar solo que cada una con sus respectivos nombres. Ambas utilizan una potencia m´axima y m´ınima para lograr la comu- nicaci´on.
Estructura b´asica de la red
En la siguiente figura se muestra un ejemplo de una unidad t´ıpica de proceso de una Red Neuronal Artificial. Al lado izquierdo de la red est´a una serie de entradas al perceptr´on, cada una llega de la salida de otro perceptr´on de la red. una vez calculada la salida de un perceptr´on, ´esta se propaga por medio de conexiones de salida a los perceptrones destino. Todas las conexiones de salida reciben el mismo valor de salida[33].
6.2 Librer´ıas Keras 113
A la forma en que los perceptrones se conectan entre s´ı se le llamapatr´on de conectividad o arquitectura de la red. La estructura b´asica de interconexi´on entre neuronas artificiales es la de multicapa. Esta es una estructura de implementaci´on del paradigma conocido como Retro-Propagaci´on [33].
El esquema de funcionamiento de una red neuronal por capas puede describirse mediante la ecuaci´on:
e
S =F(F(Xe ·W1)·w2)
Donde w1 y w2 son los pesos de la primera y segunda capa, F es la funci´on de activaci´on , e
X es el vector de entrada a la red y Sees el vector de salida que la red produce[33].
6.2.
Librer´ıas Keras
6.2.1.
Models
Sequential
Se considera como una de las estructuras m´as importantes en Keras. Es un modelo vac´ıo el cual permite establecer e indicar la creaci´on de una serie de capas sucesivas, cada una de ellas hace un filtro para que la salida de datos sea o se aproxime a la esperada,mediante al m´etodo add() se pueden adicionar m´as capas al modelo. En Keras se declara de la siguiente forma:
from keras.models import Sequential
El modelo necesita saber qu´e forma de entrada debe esperar. Por esta raz´on, la pri- mera capa en un Sequential (y solo la primera, porque las siguientes capas pueden hacer inferencia autom´atica de formas) necesita recibir informaci´on sobre su forma de entrada. Esto se puede hacer con los par´ametros input shape que indica la entrada es una tupla de enteros o none indica que se puede esperar cualquier entero positi- vo, la dimensi´on no esta incluida. ALgunas capas 2D y 3D como Dense, admiten la especificaci´on de su forma de entrada a trav´es del argumentoinput dim, se declaran as´ı:
model = Sequential ()
model.add(Dense(32, input shape = (784,)))
Compile
Antes de entrenar un modelo, debe configurar el proceso de aprendizaje, que se realiza a trav´es del m´etodo compilaci´on. Recibe tres argumentos:
• Un optimizador: Este podr´ıa ser el identificador de cadena de un optimizador existente (comoAdam, Adamax,Nadam, etc), o una instancia de la claseOptimi- zer.
• Una funci´on de p´erdida: Este es el objetivo que el modelo intentar´a minimizar. Puede ser el identificador de cadena de una funci´on de p´erdida existente (como
categorical crossentropy, hinge, etc), o puede ser una funci´on objetivo.
• Una lista de m´etricas: Para cualquier problema de clasificaci´on se debe esta- blecer metrics = [‘accuracy0]. Una m´etrica podr´ıa ser el identificador de cadena de una m´etrica existente o una funci´on de m´etrica personalizada.
Un ejemplo de la declaraci´on del modelo es:
Figura 6-13: M´etodo compile Sequencial [25]
Predict
Genera predicciones de salida para las muestras de entrada. Predice la clasificaci´on de nuevas im´agenes. Para ello, se utiliza algunas im´agenes del conjunto de prueba, que son cargadas como matrices ennumpy para ser utilizadas. El c´alculo se realiza en lotes. Estas predicciones se realizan luego de entrenar un modelo final, y se declaraci´on se hace as´ı:
predict(x, batchsize=N one, verbose= 0, steps=N one, callbacks=N one)
Donde x es un vector o matriz de entrada, seguido por el tama˜no del lote, modo de verbosidad, (0 o 1), el n´umero total de pasos (lotes de muestras) y finalmente si adiciona o no una lista instanciaskeras.Callback.
Fit generator
Entrena el modelo en los datos generados lote por lote por un generador de Python (o una instancia de Sequence). A diferencia de la funci´on fit, fit generator esta dise˜nado para grandes cantidades de datos y funciona multiproceso. El generador se ejecuta en paralelo al modelo, por eficiencia. Por ejemplo, esto le permite hacer un aumento de
6.2 Librer´ıas Keras 115
datos en tiempo real en im´agenes en la CPU en paralelo para entrenar a su modelo en GPU.
Para su implementaci´on se recibe el arreglo a compilar con los pasos por ´epoca y las ´
epocas para entrenar. Se declara as´ı:
model.f it generator(generate arrays f rom f ile(0/my f ile.txt0), steps per epoch= 10000, epochs = 10)
6.2.2.
Layers
Convolution 2D
Crea un n´ucleo de convoluci´on para producir un tensor de salida, la convoluci´on 2D es solo una extensi´on de la convoluci´on 1D mediante la convoluci´on de las direcciones horizontal y vertical en el dominio espacial bidimensional. La convoluci´on se utiliza con frecuencia para el procesamiento de im´agenes, como el suavizado, el enfoque y la detecci´on de bordes de las im´agenes.
Esto se realiza multiplicando y acumulando los valores instant´aneos de las muestras superpuestas correspondientes a dos se˜nales de entrada, una de las cuales se invierte dos veces. Esta definici´on es aplicable para convoluci´on 1D, excepto una de las entradas se invierte solo una vez. La convoluci´on puede entenderse como una se˜nal se puede descomponer en una suma de funciones de impulso (delta) escaladas y desplazadas.
Figura 6-14: Funci´on de impulso 2D [52]
La formulaci´on matem´atica de estas funciones de impulso escaladas y desplazadas o convoluci´on 2-D est´a dada por:
Dondex representa la matriz de la imagen de entrada que se convuelve con la matriz del kernel h para generar una nueva matriz y, que representa la imagen de salida. Mientras, los ´ındicesi, j est´an relacionados con las matrices de imagen, los ´ındices m, n tratan con la matriz del kernel.
Max pooling 2D
Max pooling es un proceso de discretizaci´on basado en muestras que tiene como objeti- vo muestrear una representaci´on de entrada (imagen, matriz de salida de capa oculta, etc.), reduciendo su dimensionalidad y permitiendo hacer suposiciones sobre las ca- racter´ısticas contenidas en las sub-regiones agrupadas. Esto se hace, en parte, para ayudar al ajuste excesivo al proporcionar una forma abstracta de la representaci´on. Adem´as, reduce el costo computacional al reducir el n´umero de par´ametros a aprender y proporciona una invarianza de traducci´on b´asica a la representaci´on interna.
La agrupaci´on m´axima se realiza aplicando un filtro m´aximo, ventana m´ovil o recuadro mudable a (generalmente) sub-regiones no superpuestas de la representaci´on inicial. Este hace dos cosas principales:
• Reduce la cantidad de par´ametros dentro del modelo y cuando la salida es m´as peque˜na que la entrada se denomina muestreo descendente o sub-muestreo. • Generaliza los resultados de un filtro convolucional, lo que hace que la detecci´on
de caracter´ısticas sea invariante a los cambios de escala u orientaci´on.
Es decir que en una matriz 4x4 que representa la entrada inicial, y al ejecutar un filtro 2x2 sobre la entrada se obtiene un paso en 2Ddx, dy y no se superpondr´an las regiones. Para cada una de las regiones representadas por el filtro, se toma el el m´aximo de esa regi´on y es generada una nueva matriz de salida donde cada elemento es el m´aximo de una regi´on en la entrada original.
6.2 Librer´ıas Keras 117
Flatten
Esta capa convierte la imagen de tres dimensiones a una sola, convierte los elementos de la matriz de im´agenes de entrada en un array plano sin afectar el lote, hereda de la clase layer. El prop´osito de este argumento es preservar el orden de peso al cambiar un modelo de un formato de datos a otro.
Esta propiedad se invoca luego de que los datos fueron procesados por una capa de superior de convoluci´on. Se invoca con la funci´onadd, as´ı:
model.add(F latten()) Dropout
Es un m´etodo de regularizaci´on que minimiza el riesgo del sobre-entrenamiento de una red neuronal mediante la eliminaci´on de unidades de cada una de las capas que componen la red. Para esto utiliza una perturbaci´on a cada minibatch (peque˜nos lotes equivalentes, que dividen la informaci´on ingresada). Se declara as´ı:
keras.layers.Dropout(rate, noise shape =N one, seed=N one)
Donde
• rate: D´ıgito flotante entre 0 y 1. Fracci´on de las unidades de entrada.
• noise shape: Tensor entero 1D que representa la forma de la m´ascara de omisi´on binaria que se multiplicar´a con la entrada. Por ejemplo, si sus entradas tienen forma (batch size, timesteps, features) y desea que la m´ascara de desactivaci´on sea la misma para todos los pasos de tiempo, puede usar la (noise shape=(batch size, 1, features).
• seed: Un entero de Python para usar como semilla aleatoria.
Este m´etodo se puede utilizar en cualquier tipo de capa, sin embargo se puede utilizar ´
unicamente sobre capa de entrada o capa visible, no sobre la de salida.
El proceso consiste en que en cada etapa de entrenamiento, los nodos individuales se eliminan de la red dependiendo su probabilidad, quedando una red reducida.Al eliminarse al azar la mayor cantidad de unidades, mejora la generalizaci´on de la red y facilita que la informaci´on sea clasificada de forma m´as inmediata y este m´as cerca al resultado esperado.
Dense
Esta funci´on a˜nade una capa oculta (hidden layer) de la red neuronal, una capa total- mente conectada. Implementa la operaci´on:
output=activation(dot(input, kernel) +bias)
Donde activation es la funci´on de activaci´on de elementos que se pasa como el argu- mento activation, kernel es una matriz de ponderaciones creada por la capa, y bias es un vector de polarizaci´on creado por la capa (solo aplicable siuse biases es verdadero). Si la entrada a la capa tiene un rango mayor que 2, entonces se aplana antes del punto inicial del producto con kernel. Para evidenciar el funcionamiento veamos un ejemplo de la configuraci´on de la capa Dense.
Iniciamos declarando el modelo secuencial,
model =Sequential()
Configuramos el modelo para que tome matrices de entrada de forma (*, 16) y matrices de salida de forma (*, 32), as´ı:
model.add(Dense(32, inputshape = (16,)))
Esta configuraci´on queda activa en el modelo y despu´es de la primera capa no es necesario especificar el tama˜no de la entrada.
model.add(Dense(32))
6.2.3.
Preprocessing.image
ImageDataGenerator
Es un API que define la configuraci´on para la preparaci´on y el aumento de datos de im´agenes. En lugar de realizar las operaciones en su conjunto de datos de imagen en la memoria, la API est´a dise˜nada para ser iterada por el proceso de ajuste del modelo de aprendizaje profundo, creando datos de imagen aumentados para usted justo a tiempo. Esto reduce la sobrecarga de memoria, pero agrega un costo de tiempo adicional durante el entrenamiento del modelo.
Keras proporciona esta clase que define la configuraci´on para la preparaci´on y el au- mento de datos de im´agenes e incluye capacidades como:
• Estandarizaci´on de caracter´ısticas, estandarizar los valores de p´ıxeles en todo el conjunto de datos. Se puede realizar utilizando los argumentos featurewise center
y featurewise std normalization.
• Blanqueamiento ZCA, una transformaci´on de blanqueamiento de una imagen es una operaci´on de ´algebra lineal que reduce la redundancia en la matriz de im´agenes de p´ıxeles. Es utilizada mediante el argumento zca whitening.
6.2 Librer´ıas Keras 119
• Rotaciones aleatorias, permite pueden tener diferentes rotaciones artificiales y aleatorias de las im´agenes en el conjunto de datos de la imagen. Se establece con el argumento rotation range.
• Turnos aleatorios, permite el desplazamiento de los objetos creando versiones modificadas de sus datos.Se establece con los argumentos width shift range y
height shift range.
• Flips aleatorios, permite crear giros aleatorios de im´agenes en los datos de entre- namiento. Se establece con los argumentos vertical flip y height flip.
Inicialmente es construido la clase ImageDataGenerator, se debe hacer un ajuste en los datos. Esto calcular´a las estad´ısticas necesarias para realizar las transformaciones a los datos de la imagen. Se realiza llamando funciones fit() en el generador de datos y pas´andole su conjunto de datos de entrenamiento. Este es un iterador en si mismo, que devuelve lotes de muestras de im´agenes cuando se solicitan. Podemos configurar el tama˜no del lote y preparar el generador de datos para obtener lotes de im´agenes lla- mando a la funci´onflow(), con estos pasos se puede hacer uso de esta funci´on. En lugar de llamar a la funci´on fit() en el modelo, se debe llamar la funci´on fit generator() entregando el generador de datos y la longitud deseada de una ´epoca (n´umero de repe- ticiones de los pasos fijados), as´ı como el n´umero total de ´epocas en las que entrenar.
6.2.4.
Aplications
Aplication de Keras son modelos de Deep Learning que est´an disponibles junto con sus pesos pre-entrenadas. Estos modelos se pueden usar para predicci´on, extracci´on de caracter´ısticas y ajuste fino. Los pesos se descargan autom´aticamente al crear una instancia de un modelo. Se almacenan en /.keras/models/.
Modelos disponibles Xception VGG16 VGG19
ResNet, ResNetV2, ResNeXt InceptionV3
InceptionResNetV2 MobileNet
DenseNet NASNet
Todas estas arquitecturas son compatibles con todos los backends (TensorFlow, Theano y CNTK), y al crear una instancia, los modelos se construir´an de acuerdo con el formato de datos de imagen establecido en su archivo de configuraci´on de Keras en /.keras/keras.json.2
6.3.
GPU
Consultando varios art´ıculos de investigaci´on sobre los temas de Deep Learning y redes neu- ronales convolucionales, descubrimos la existencia de la competici´on de Imagenet y de los resultados del equipo de la universidad de Toronto en la competici´on el a˜no 2012 [57] . La competici´on ImageNet (Large Scale Visual Recognition Challenge [29] ) se realizaba desde el 2010, y por aquel entonces se hab´ıa convertido en un referente en la comunidad de visi´on por computador para el reconocimiento de objetos a gran escala. En 2012 Alex Krizhevsky, Ilya Sutskever y Geoffrey E. Hilton emplearon por primera vez aceleradores hardware GPU (graphical processing units) [66] , usados ya en ese momento en los centros de supercompu- taci´on para aumentar la velocidad de ejecuci´on de aplicaciones que requieren realizar muchos c´alculos. Por ejemplo, en aquella ´epoca el BSC dispon´ıa ya de un supercomputador llamado MinoTauro, de 128 nodos Bull505, equipados con 2 procesadores Intel y 2 GPUs Tesla M2090