ENTRADAS

viernes, 19 de noviembre de 2010

HISTORIAS

Historia La máquina de Boltzmann


La máquina de Boltzmann es una versión del método de Montecarlo de las redes de Hopfield.
Se cree que la idea de utilizar modelos de Ising para la inferencia fue descrita por primera vez por Geoffrey E. Hinton y Terrence J. Sejnowski
La misma idea de aplicar el modelo de Ising con el muestreo de Gibbs templado también está presente en el proyecto de Douglas Hofstadter Copycat.
Ideas similares (cambiando el signo de la función de energía) también se pueden encontrar en la "Teoría de la Armonía" de Paul Smolensky.
La analogía explícita extraída de la mecánica estadística en la formulación de la máquina de Boltzmann ha llevado a la utilización de una terminología tomada de la física (por ejemplo, "energía" en lugar de "armonía"), que se ha convertido en estándar en el campo. La adopción generalizada de esta terminología puede haber sido alentada por el hecho de que su uso ha llevado a importar una variedad de conceptos y métodos tomados de la mecánica estadística. Sin embargo, no hay ninguna razón para pensar que las diversas propuestas para el uso de templado simulado para la inferencia descritas anteriormente no sean independientes. (Helmholtz, hizo una analogía similar en los albores de la psicofísica.)
Los modelos de Ising se consideran en la actualidad como un caso especial de los campos aleatorios de Markov, que encuentran una amplia aplicación en diversos campos, como los de la lingüística, robótica, visión artificial e inteligencia artificial.


Historia Perceptrón Multicapa.
El perceptrón simple tiene una serie de limitaciones muy importantes. La más importante es su incapacidad para clasificar conjuntos que no son linealmente independientes.
Esto quedo patente el la obra Perceptrons que en 1969 demostró que un perceptrón es incapaz de aprender una función tan fácil como la XOR.
Este modelo es una ampliación del perceptrón a la cual añade una serie de capas que, básicamente, hacen una transformación sobre las variables de entrada, que permiten eludir el problema anterior.
Esto acaba con el problema del perceptrón, convirtiendo las funciones linealmente no independientes en linealmente independientes gracias a la transformación de la capa oculta.
Además el perceptron multicapa admite valores reales. Podemos decir que el perceptrón multicapa es un modelador de funciones universal

Arquitectura del Perceptron Multicapa
El perceptrón multicapa consta de una capa de entrada y una capa de salida y una o más capas ocultas. Dichas capas se unen de forma total hacia delante, esto es, la capa entrada se une con la primera capa oculta y esta con la siguiente y la última capa oculta se une con la capa de salida. Los valores que el perceptrón multicapa acepta son reales.


Red Perceptrón multicapa con tres neuronas de entrada, dos ocultas y dos de salida

jueves, 18 de noviembre de 2010

MAQUINA DE BOLTZMANN

Una máquina de Boltzmann es un tipo de red neuronal recurrente estocástica. El nombre le fue dado por los investigadores Geoffrey Hinton y Terry Sejnowski. Las máquinas de Boltzmann pueden considerarse como la contrapartida estocástica y generativa de las redes de Hopfield. Fueron de los primeros tipos de redes neuronales capaces de aprender mediante representaciones internas, son capaces de representar y (con tiempo suficiente) resolver complicados problemas combinatorios. Sin embargo, debido a una serie de cuestiones que se abordan más adelante, las máquinas de Boltzmann sin restricciones de conectividad no han demostrado ser útiles para resolver los problemas que se dan en la práctica en el aprendizaje o inferencia de las máquinas. Aún así resultan interesantes en la teoría debido a la localización y a la naturaleza hebbiana de su algoritmo de entrenamiento, así como por su paralelismo y por la semejanza de su dinámica a fenómenos físicos sencillos. Si se limita la conectividad, el aprendizaje puede ser lo bastante eficaz como para ser útil en la resolución de problemas prácticos.

En mecánica estadística se denominan distribuciones de Boltzmann y son utilizadas en funciones de muestreo.

Estructura

Las máquinas de Boltzmann, al igual que las redes de Hopfield, Poseen unidades con una "energía" definida para la red. También dispone de unidades binarias, pero a diferencia de las redes de Hopfield, las unidades de una máquina de Boltzmann son estocásticas. La energía global, E, en una máquina de Boltzmann es idéntica en forma a la de una red de Hopfield:
Donde:
  • wij es la fuerza de conexión entre la unidad j y la unidad i.
  • si es el estado,    , de la unidad i.
  • θi es el umbral de la unidad i.
Las conexiones de una máquina de Boltzmann tienen dos limitaciones:
  • Ninguna unidad se conecta a sí misma.
  •   (Todas las conexiones son simétricas.)

Probabilidad de estado de una unidad
El incremento de energía global que resulta de una sola unidad i siendo 0 (off) frente a 1 (on), expresada como ΔEi, viene dada por la expresión:
Esto se puede expresar como la diferencia de energía entre dos estados:
ΔEi = Ei=offEi=on
A continuación sustituimos la energía para cada Estado con su probabilidad relativa de acuerdo con el factor de Boltzmann (la propiedad de la distribución de Boltzmann en la cual la energía de un estado es proporcional al menos logaritmo de probabilidad de dicho estado):
Donde kB es la constante de Boltzmann y se engloba dentro de la noción artificial de temperatura T. A continuación se reordenan los términos considerando que la probabilidad de que una unidad esté en on y en off es uno:
Finalmente podemos resolver para pi=on, la probabilidad de que la unidad i esté en on.
Donde el escalar T se refiere a cómo está la temperatura en el sistema. Esta relación es la fuente de la función logística que se encuentra en las expresiones de probabilidad de las distintas variantes de la máquina de Boltzmann.

Estado de equilibrio

La red se ejecuta repetidamente escogiendo una unidad y estableciendo su estado de acuerdo con la fórmula anterior. Después de ejecutarse durante suficiente tiempo a una cierta temperatura, la probabilidad del estado global de la red va a depender sólo del estado global de energía, de acuerdo a una distribución de Boltzmann. Esto significa que los logaritmos de las probabilidades de los estados globales se volverán lineales en sus energías. Esta relación se cumple cuando la máquina está "en equilibrio termodinámico", lo que significa que la distribución de probabilidad de los estados globales ha convergido. Si empezamos a hacer funcionar la red a alta temperatura, y desciende gradualmente hasta llegar a un equilibrio termodinámico a una baje temperatura, estaremos garantizando la convergencia a una distribución donde el nivel de energía fluctúe alrededor del mínimo global. Este proceso se llama Simulated annealing (SA) o templado simulado.
Para entrenar a la red de modo que la posibilidad de que converja en un estado global se ajuste a una distribución externa, habrá que establecer los pesos para que los estados globales con mayor probabilidad tengan la energía más baja. Para esto se usa el siguiente método de entrenamiento.

Entrenamiento

Las unidades de la máquina de Boltzmann se dividen en unidades "visibles", V, y unidades "ocultas", H. Las primeras son las que recibirán información del "entorno", por ejemplo la serie de entrenamiento podría ser un conjunto de vectores binarios aplicado sobre las unidades V. La distribución en el conjunto de entrenamiento se denota P + (V).
En las máquinas de Boltzmann, como ya se ha dicho, la distribución de los estados globales convergen hasta un equilibrio termodinámico. Después de que marginalizar por encima de las unidades visibles V, la convergencia de la distribución se puede denotar como P (V).
Nuestro objetivo es aproximar la distribución "real" P + (V) a la expresión P (V), la cual es producida eventualmente por la máquina. Para medir la similitud entre las dos distribuciones se usa la divergencia de Kullback-Leibler, G:
Donde el sumatorio es superior a todos los posibles estados de V. G varía en función de los pesos, ya que estos determinan la energía de un estado, y la energía a su vez determina P (v), según la distribución de Boltzmann. Por lo tanto, podemos utilizar un algoritmo de descenso de gradiente sobre G para un peso determinado, wij, que se cambiará restando la derivada parcial de G con respecto al peso.
El entrenamiento de una máquina de Boltzmann consta de dos fases, que se van cambiando iterativamente entre ellas. Una es la fase "positiva" en que los estados de las unidades visibles se sujetan a un vector de estado binario particular, muestra del conjunto de entrenamiento (de acuerdo a P + ). La otra es la fase "negativa", en la que a la red se le permite ejecutarse libremente, es decir, los estados de las unidades no están determinados por datos externos. Sorprendentemente, el gradiente con respecto a un peso determinado, wij, está dado por una ecuación muy sencilla (demostrada por Ackley et al.):
Donde:
  •  es la probabilidad de que tanto las unidades i como j estén activadas cuando la máquina esté en equilibrio durante la fase positiva.
  •  es la probabilidad de que tanto las unidades i como j estén activadas cuando la máquina esté en equilibrio durante la fase negativa.
  • R denota la tasa de aprendizaje.
Este resultado se deduce del hecho de que en el equilibrio termodinámico la probabilidad P (s) de cualquier estado global s cuando la red está funcionando libremente viene dada por la distribución d Boltzmann (de ahí el nombre de "máquina de Boltzmann").
Sorprendentemente, esta regla de aprendizaje es bastante plausible desde el punto de vista biológico por el hecho de que la única información necesaria para cambiar los pesos es proporcionada de forma "local". Es decir, la conexión (o sinapsis usando terminología biológica) no necesita más información que la que suministran las dos neuronas que conecta. Esto es mucho más realista biológicamente hablando que lo que sucede con la información que necesitan muchos otros algoritmos de entrenamiento de redes neuronales, como por ejemplo el de retropropagación.

En el entrenamiendo de una máquina de Boltzmann no se utiliza el algoritmo EM, muy utilizado en Aprendizaje automático. Minimizar la divergencia KL, es equivalente a maximizar el logaritmo de la verosimilitud de los datos. Por lo tanto, el procedimiento de entrenamiento lleva a cabo un gradiente de ascenso sobre el logaritmo de verosimilitud de los datos observados. Esto contrasta con el algoritmo EM, donde la distribución posterior de los nodos ocultos debe ser calculada antes de la maximización de la verosimilitud llevada a cabo en el paso M.
En entrenamiento de sesgos es similar, pero usa sólo la actividad de un solo nodo:

Problemas en la aplicación práctica

Las máquinas de Boltzmann presentan un grave problema práctico, y es que el aprendizaje parece dejar de producirse correctamente cuando la máquina se amplía a algo más grande que una máquina trivial. Esto se debe a una serie de efectos, los más importantes de los cuales son:
  • El tiempo que la máquina necesita para recopilar las estadísticas de equilibrio crece exponencialmente con el tamaño de la máquina, y con la magnitud de la fuerza de las conexiones.
  • La fuerzas de las conexiones son más flexibles cuando las unidades conectadas tienen probabilidades de activación intermedias entre cero y uno, llevando a la llamada trampa de varianza. El efecto neto es que el ruido hace que las fuerzas de las conexiones se vuelvan aleatorias hasta que las actividades se saturan.

 

Máquina de Boltzmann restringida

Aunque el aprendizaje es por lo general poco práctico en las máquinas de Boltzmann, puede llegar a ser muy eficiente en una arquitectura llamada Máquina de Boltzmann restringida o MBR (RBM en inglés: Restricted Boltzmann Machine). Esta arquitectura no permite las conexiones entre las unidades de las capas ocultas. Después de entrenar a una MBR las actividades de sus unidades ocultas pueden ser tratadas como datos para el entrenamiento de una MBR de nivel superior. Este método de apilamiento MBR hace que sea posible entrenar muchas capas de unidades ocultas de manera eficiente y que cada nueva capa sea añadida para mejorar el modelo generativo principal.

 

PERCEPTRON MULTICAPA

El perceptrón multicapa es una red neuronal artificial (RNA) formada por múltiples capas, esto le permite resolver problemas que no son linealmente separables, lo cual es la principal limitación del perceptron (también llamado perceptrón simple). El perceptrón multicapa puede ser totalmente o localmente conectado. En el primer caso cada salida de una neurona de la capa "i" es entrada de todas las neuronas de la capa "i+1", mientras que en el segundo cada neurona de la capa "i" es entrada de una serie de neuronas (región) de la capa "i+1".

Las capas pueden clasificarse en tres tipos:

Capa de entrada: Constituida por aquellas neuronas que introducen los patrones de entrada en la red. En estas neuronas no se produce procesamiento.

Capas ocultas: Formada por aquellas neuronas cuyas entradas provienen de capas anteriores y cuyas salidas pasan a neuronas de capas posteriores.

Capa de salida: Neuronas cuyos valores de salida se corresponden con las salidas de toda la red.

La propagación hacia atrás (también conocido como retropropagación del error o regla delta generalizada), es un algoritmo utilizado en el entrenamiento de estas redes, por ello, el perceptrón multicapa también es conocido como red de retropropagación (no confundir con la red de contrapropagación).

Estructura
La estructura del perceptrón multicapa Figura (3), posee muchas neuronas de entrada y salida:

Características
·         Las funciones de transferencia de los elementos de procesado (neuronas) han de ser derivables.

Limitaciones
·         El Perceptrón Multicapa no extrapola bien, es decir, si la red se entrena mal o de manera insuficiente, las salidas pueden ser imprecisas.
·         La existencia de mínimos locales en la función de error dificulta considerablemente el entrenamiento, pues una vez alcanzado un mínimo el entrenamiento se detiene aunque no se haya alcanzado la tasa de convergencia fijada.

Cuando caemos en un mínimo local sin satisfacer el porcentaje de error permitido se puede considerar: cambiar la topología de la red (número de capas y número de neuronas), comenzar el entrenamiento con unos pesos iníciales diferentes, modificar los parámetros de aprendizaje, modificar el conjunto de entrenamiento o presentar los patrones en otro orden.

Aplicaciones
El perceptrón multicapa (de aquí en adelante MLP, MultiLayer Perceptron) se utiliza para resolver problemas de asociación de patrones, segmentación de imágenes, compresión de datos, etc.

Compresión de datos
Considérese un MLP de 3 capas, una de entrada, una oculta y la de salida. La capa de entrada está formada por N neuronas, la capa oculta por M (M < N) neuronas y la capa de salida posee N neuronas al igual que la capa de entrada. Se entrena dicho MLP para que cuando se le dé como entrada un vector de datos (x1, x2,..., xN) devuelva ese mismo vector con M datos como salida, con ello estamos enseñando al MLP a transformar un vector de N componentes en uno de M componentes (recordemos que M < N) y a recuperar el vector original a partir del vector "comprimido".
Una vez que el MLP esté entrenado se procede de la siguiente forma:
·         Compresión: Para comprimir los datos utilizamos un MLP de dos capas, la de entrada con N neuronas y la de salida con M, los pesos de estas dos capas son los de la capa de entrada y oculta respectivamente, del MLP que entrenamos anteriormente.
·         Descompresión: Para descomprimir los datos utilizamos un MLP de dos capas, la de entrada con M neuronas y la de salida con N, los pesos de estas dos capas son los de la capa oculta y la de salida respectivamente, del MLP que entrenamos anteriormente.
El MLP no conseguirá (al menos normalmente) un error nulo durante el entrenamiento, por lo que se trata de un sistema de compresión con pérdidas. Obviamente cuanto mayor queramos que sea el factor de compresión, más error se cometerá.


EL PERCEPTRON MULTICAPA (MLP)

Primero cabe mencionar, como es obvio, que para tener varias entradas y salidas, se pueden conectar Perceptrones simples como vemos en la figura 1.


Pero con esto no se amplía el tipo de funciones que puede aprender la red. Así es como nace la idea (proveniente también de copiar los sistemas biológicos), de hacer redes que tengan más de una capa de neuronas, ver figura 2.

A partir de ahora, a cada neurona de la red, algunas veces la llamaremos nodo.
Así, por ejemplo, a una red multicapa con dos neuronas de entrada, dos ocultas y dos de salida, la podemos graficar como sigue (figura 3).

El entrenamiento de esta red neuronal consistirá, al igual que en el perceptrón simple, en presentar las entradas, junto con las salidas deseadas para cada una de ellas, y modificar los pesos de acuerdo al error (diferencia entre la salida deseada y la obtenida).
La principal dificultad en el entrenamiento de redes de varias capas es encontrar los errores asociados con las capas ocultas; es decir, en las capas que no son la de salida (sólo se tiene salida deseada en las capas de salida).
Esto es debido a que los errores son necesarios para el aprendizaje, para saber cómo modificar los pesos de las neuronas en las capas ocultas. Así se da origen a algoritmos muy ingeniosos, el precursor y más conocido por su simplicidad, es el que recibió el nombre de retropropagación del error (backpropagation).
Así el funcionamiento de un PMC es básicamente: se aplica una entrada cuya salida se conoce, luego se calcula primero la salida de las neuronas de entrada, estas salidas son las entradas de las neuronas de la capa oculta, con estas entradas se calcula la salida de las neuronas ocultas, y con éstas como entrada para las neuronas de salida, se calculan las salidas finales.
Esta es la fase hacia delante, por así decirlo, en la red.
Luego se obtiene el error con respecto a la señal deseada y finalmente este error se retro propaga (de atrás hacia delante) modificando los pesos.
No trataremos la parte matemática de cómo se hace esto, pero mencionaremos que las neuronas de la capa oculta usan como regla de propagación, la suma ponderada de las entradas con los pesos sinápticos wij y sobre esa suma ponderada se aplica una función de transferencia de tipo sigmoide (figura 4).

(recordemos que en el PS, era simplemente un umbral), que es acotada en respuesta. Similarmente en la retropropagación, el error en los nodos de las capas ocultas es proporcional a la sumatoria de los gradientes de los nodos de la capa siguiente pesados por los pesos de conexión.
La aparición de una función de activación del tipo sigmoide es debido a restricciones analíticas en los algoritmos de entrenamiento. Una función de activación de este tipo es:
Donde x es la sumatoria de las entradas al nodo pesadas por los pesos de conexión y y(p) la salida del nodo correspondiente (o sea si recordamos del artículo anterior):
Observe la figura 4.
De todo esto, luego de algún trabajo matemático, surge el algoritmo que se usa en el entrenamiento de la red.