martes, 9 de octubre de 2012

[RNA] 2. Reporte de Avances

En esta entrada explico los avances con los que he contribuido al proyecto de la clase de redes neuronales.

Descripción del proyecto


Recordando un poco, el proyecto consiste en desarrollar una libreria basada en redes neuronales que permita realizar predicciones de datos.


Mas concretamente, detectar patrones de delincuencia basandonos en los historiales de eventos pasados para así poder predecir el posible aumento o disminución de actividad delictiva en ciertas zonas.


El objetivo adicional es realizar un análisis más profundo que nos permita predecir en cuáles zonas es mas probable que aumente la actividad delictiva y en cuales sea probable que disminuya.


Contribuciones


Primeramente dedique algo de tiempo a desarrollar una neurona, el primer paso fue desarrollar una neurona que fuera capaz de separar datos linealmente. Con ésta neurona se pueden realizar clasificaciones simples de información.

La neurona esta en el repositorio, la siguiente imagén muestra una gráfica con la clasificación de la información:




El siguiente paso consistió en desarrollar un sistema de aprendizaje, en éste caso es un aprendizaje simple basado en la regla delta, para probar si el sistema de aprendizaje era exitoso realizé algunas pruebas con compuertas lógicas, la siguiente imágen muestra las compuertas lógicas AND y OR, la salida de la neurona es 1 o 0 dependiendo de las entradas, en éste caso el aprendizaje fue exitoso:


Compuerta AND

Compuerta OR

Vale la pena mencionar que el siguiente paso consistió en realizar multicapas, el sistema multicapas funciona. Mediante un archivo de configuración es posible generar multiples capas, sin embargo, existe un problema entre la interconexión de las mismas; ésto lo pude constatar al intentar entrenar la neurona utilizando la compuerta XOR.
En éste caso la configuración fue de 3 capas, con la siguiente configuración:

  • Capa 1, 2 neuronas, Aprendizaje 0.1
  • Capa 2, 2 neuronas, Aprendizaje 0.1
  • Capa 3, 1 neurona, Aprendizaje 0.1
Los resultados no fueron los óptimos ya que para todos los casos obtuve siempre una salida 0:


Compuerta XOR


Para el siguiente paso se planea implementar backpropagation, sin embargo, planeamos implementarlo solo para efectos de práctica y conocimiento general, ésto lo explicaré un poco más adelante.


Investigación

La siguiente actividad realizada consistió en la recolección de información. Con base a la información logramos establecer la estructura básica de nuestra red neuronal.

Para empezar, las entradas de nuestra red pueden ser de muy variados tipos, por ejemplo:
  • Escalas (nominal, intervalo, o relación)
  • Observaciones
    • Series de tiempo
  • Variables relacionadas
La salida producida consistiría en algun aumento o disminución en los valores de escala, el siguiente o siguientes valores adicional en dada serie de tiempo o algúna conclusión obtenida de la conclusión delas varibles relacionadas.



Nosotros elegimos como entradas las observaciónes en una serie de tiempo, por ejemplo:
  • Robos cada día.
  • Homicidios por mes
Y la salida sería la observación u observaciones posteriores, por ejemplo, si nuestra entrada fueran las observaciones en cada mes de un año, entonces necesitaremos una red con una capa incial de tamaño 12, una neurona por cada mes.
El tamaño de la capa de salida depende del número de observaciones que deseemos tener al final.

Por ahora nuestra salida consistiría en datos binarios, es decir, un vector de 1 y -1 que indican si la serie de tiempo tiende a subir o a bajar, en pocas palabras, una tendencia. Posteriormente la salida sería un dato análogo entre 1 y -1 que indicaría la magnitud del cambio y finalmente traducir ese valor análogo según la escala de valores en la serie de tiempo.


También se establecio un modelo de entrenamiento simple. Dado que estamos trabajando con series de datos existentes, podemos utilizar datos anteriores para entrenar, y calcular valores ya existentes, asi pues, los pasos serían:
  1. La entrada es una observación vieja, por ejemplo, datos del año 2010 para calcular los del año 2011
  2. Como conocemos los valores del 2011, comparar dichos valores con la salida de la red y calcular el error.
  3. Utilizar backpropagation para modificar los pesos y reducir el error en observaciones posteriores.
  4. Mover la serie de datos hacia adelante una vez para mostrar el siguiente patrón.

Como tipo de aprendizaje elegimos el tipo no supervisado, ésta es la razón por la que ponemos en tela de duda el método de entrenamiento antes descrito, ya que, un aprendizaje no supervisado no tiene una salida esperada, sino que la salida se basa en identificar patrones (ideal), entonces realizar backpropagation resultaría complicado.


Pendientes

Las conclusiones anteriores son el diseño básico de la red, asi pues, faltarían especificar algunas cosas un poco más detalladamente, por ejemplo:
  • Función de activación a utilizar
  • Número de capas ocultas
  • Elegir un mejor método de entrenamiento
  • Parámetros de entrenamiento
  • Combinar los anteriores y elegir el que mejores resultados proporcione.
Referencias

1 comentario:

  1. El reporte tiene algunos detalles menores de ortografía. A la próxima te quito un punto si faltan tantos acentos. La liga al repositorio no es una liga pero igual lo pude acceder. Llevan muy poco tiempo usando el repositorio. Por eso les castigo por un punto. 10 por el reporte, 9 por el código.

    ResponderEliminar