Anda di halaman 1dari 12

SEGUNDA PRCTICA CALIFICADA

ENUNCIADO

El conjunto de datos MNIST (http://yann.lecun.com/exdb/mnist/) es ampliamente usado en el campo del

Machine Learning para evaluar el desempeo de diversos modelos, tales como Redes Neuronales, Maquinas de

Vector Soporte, etc. Estos datos constan de 60,000 imgenes de dgitos del 0 al 9, los cuales ya han sido

normalizados. Adems de 10,000 ejemplos para realizar la etapa de prueba (para evaluar la precisin final de la

red).

Implemente un sistema de reconocimiento de dgitos usando una red neuronal multicapa usando como ejemplo

los cdigos realizados en clase. Para esto deber realizar un estudio exhaustivo de los parmetros ptimos con

el fin de lograr la mejor precisin. Esto ltimo deber ser demostrado usando grficas donde se analice el

desempeo de la red para diferentes valores de los parmetros.

NOTA:

En el informe deber indicar cul fue la mxima precisin obtenida, y que parmetros dan lugar a la

misma.
SOLUCIN
PARTE I: EXPLICACIN DEL CDIGO UTILIZADO
El cdigo que nos permitir analizar el dataset de las diferentes imgenes de los dgitos del 0 al 9 es el
siguiente:

Como observamos en la imagen en primer lugar debemos importar las libreras necesarias, entre las cuales las
que encontramos por defecto en el programa y las que fueron creadas en clase (como neuralnet y
tools_mnist)

Adems, como podemos observar en la lnea 18, debemos poner la direccin de la carpeta en donde tengamos
descargado el dataset.

El dataset lo tenemos que descargar de la pgina indicada en el enunciado. Como podemos observar en la
imagen son 4 archivos:
En las lneas 19-26 observamos el cdigo necesario para obtener el conjunto de entrenamiento y el de
validacin. Esto gracias a la funcin load_mnist que se encuentra en el archivo tools_mnist.

Tambin observamos que no estamos tomando el dataset completo, sino que lo estamos restringiendo a 50000
datos.

Las siguientes lneas de cdigo nos permiten mostrar algunos nmeros del 0 9, as como mostrar distintas
variantes posibles para un mismo nmero. Cada imagen del dataset consiste en 28x28 pxeles, donde cada pixel
representa una determinada intensidad en la escala de grises.

A continuacin pasamos a crear la red neuronal, donde creamos un objeto de la clase NeuralNetMLP. El cdigo
de esta clase se encuentra en el archivo neuralnet.
Como podemos observar, esta clase tiene ciertos parmetros que debemos ajustar para lograr una buena
performance.

Los parmetros a ajustar son los siguientes:

n_hidden: nmero de neuronas en la capa oculta


l2: parmetro para la regularizacin L2, que permite evitar el sobreentrenamiento
l1: parmetro para la regularizacin L1, tambin permite evitar overfitting.
epochs: nmero de pasadas sobre todo el conjunto de entrenamiento.
eta: ratio de aprendizaje.
alpha: parmetro que se aade a la regla de aprendizaje para aadir un factor de la anterior
actualizacin de pesos, de esta manera se obtiene un aprendizaje ms rpido.
decrease_const: constante que permite tener una razn de aprendizaje adaptativa segn n/1+t*d,
donde t es la poca actual o el paso actual.
Shuffle: permite que los datos de entrenamiento se presenten a la red de forma aleatoria, para as evitar
quedarse atascado en un ciclo en los que la data est altamente correlacionada.
Minibatches: divisin de los datos de entrenamiento en k mini-lotes en cada poca. El gradiente se
calcula para cada mini-lote por separado en lugar de todos los datos de entrenamiento para un
aprendizaje ms rpido.

En las siguientes lneas de cdigo se plotea la funcin de costo (la que nos ayudar a analizar el
comportamiento de la red al variar los parmetros anteriormente mencionados). Asimismo, verificamos la
precisin de la red tanto en el conjunto de entrenamiento como en el de validacin. Para ello utilizamos la
funcin accuracy_score (), la cual es parte de la librera scikit-learn (que importamos en las primeras lneas de
cdigo).
Finalmente, mostramos una imagen cualquiera del dataset y la comparamos con la prediccin de nuestra red
multicapa.

PARTE II: ANLISIS DE LOS RESULTADOS OBTENIDOS


En esta seccin analizaremos como vara la funcin de costo, as como la precisin al variar cada uno de los
parmetros de la red neuronal (los cuales fueron descritos brevemente en la parte I).

AL VARIAR LA CANTIDAD DE NEURONAS OCULTAS (n_hidden):

n_hidden=10 n_hidden=50

n_hidden=100
n_hidden=30
n_hidden=200 n_hidden=400

Como se puede observar en la tabla de iteraciones de la cantidad de neuronas ocultas con la que se entrena la
red neuronal, se puede observar que a mayor nmero de neuronas en la capa oculta aumenta la precisin al
utilizar la red tanto con los datos de entrenamiento como con los de validacin. Sin embargo, hay que tener
cuidado ya que si se utiliza un nmero de neuronas muy alto, se puede correr el riesgo de que la red no
generalice y haya sobreentrenamiento. Si ocurre esto, la red se mostrar muy precisa si se analizan los datos de
entrenamiento, pero al utilizar nueva data probablemente no haga predicciones correctas.

Al revisar bibliografa [1], se encontr que el nmero de neuronas recomendadas es el siguiente:

Donde: m y n son los nmeros de neuronas en las capas de entrada y salida respectivamente, y N es el nmero
de neuronas en la capa oculta. Aplicando la frmula (m=784, como se analiz en la parte I y n=10 ya que como
salida tenemos los nmeros del 0 al 9):

Para obtener el resultado ms preciso optamos por elegir 400 como nmero de neuronas ocultas.

AL VARIAR EL LEARNING RATE (eta):

eta=0.0001 eta=0.0008
eta=0.001 eta=0.005

eta=0.002

Como podemos observar, para valores de eta muy bajos (como eta=0.0001), el algoritmo va a requerir un gran
nmero de pocas para converger (en la grfica para este valor de n observamos que pese a que se va
acercando al valor mnimo del costo an no converge). Este comportamiento se puede observar en la parte
izquierda de la figura de abajo. Por otro lado, vemos que si el valor del learning rate es muy alto (eta=0.005), la
funcin de costo no va a converger a un mnimo, debido a que su comportamiento es como el de la siguiente
figura (parte derecha). A partir de esto, optamos por utilizar un learning rate de 0.0008 que con este valor se
logra un buen compromiso entre la precisin y la convergencia de la red.
AL VARIAR EL NMERO DE MINIBATCHES (eta):

Minibatches = 10
Minibatches = 50

Minibatches = 20
Minibatches=60

Minibatches = 30
Minibatches=80

Minibatches = 40
Minibatches=100
Minibatches=500 Minibatches=2000

Minibatches=1000
Minibatches= 3000

Al aumentar el nmero de minibatches observamos que la red es capaz de escapar de mnimos locales y
alcanzar su valor mnimo absoluto (esto debido a que a mayor nmero de minibatches los datos se presentan
en un mayor nmero de subgrupos y dado que se presentan estos subgrupos de forma aleatoria se puede
escapar de los mnimos locales con mayor facilidad). Sin embargo, tambin observamos que al aumentar
demasiado el valor de este parmetro se pierde precisin, por lo que un valor para este parmetro con el que se
logre buena precisin y se logre convergencia al mnimo absoluto sera 500.

AL VARIAR EL PARMETRO PARA EL MOMENTUM (alpha):

alpha=0.0001 alpha=0.001
Alpha=0.01 alpha=1.0

alpha=0.1 alpha=10.0

El momentum usado en nuestra red neuronal nos proporciona una mayor velocidad de aprendizaje para los
pesos, esto debido a que se tiene en cuenta la variacin de pesos anterior. Sin embargo vemos que al aumentar
mucho el valor de alpha, se logra una psima precisin. Esto debido a que la variacin de pesos anterior no
puede tener mayor importancia que ir en la direccin del gradiente en la regla de aprendizaje. El excesivo peso
que se le da al momentum hace que la regla de aprendizaje no entrene de manera ptima a la red. De aqu que
un buen valor para este parmetro sera 0.0001

PARTE III: RESULTADOS UTILIZANDO PARMETROS PTIMOS


Como se analiz en la parte II, los parmetros que nos ofrecen una mejor precisin con los datos de
entrenamiento y validacin, son:

epochs=50
n_hidden=400
eta=0.0008
alpha=0.0001
minibatches =500
NOTA: se utiliz un total de 50 pocas para que la funcin de costo pueda converger
BIBLIOGRAFA
[1] Vineet Singh, and Sunil Pranit Lal, Digit Recognition Using Single Layer Neural

Network with Principal Component Analysis, 2014.

[2] https://stats.stackexchange.com/questions/153531/what-is-batch-size-in-neural-network

[3] http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf

[4] Python Machine Learning - Sebastian Raschka

Anda mungkin juga menyukai