Beruflich Dokumente
Kultur Dokumente
redes neuronales
con Ecog3 en C#
Jeff Heaton
SOFTWARE APOYO
E-Mail: support@heatonresearch.com
RENUNCIA
Heaton Research, Inc. no ofrece ninguna garantía ni representación,
expresa ni implícita, con respecto al Software o su contenido, calidad,
rendimiento, comerciabilidad o idoneidad para un propósito en particular. En
ningún caso
ix
DISTRIBUCIÓN DE SHAREWARE
Críquet y Wynton.
xiii
Contenido
Introducción xxi
0.1 La historia de Encog . . . . . . . . . . . . . . . . . . . . . . . xxi
0.2 Introducción a las redes neuronales. . . . . . . . . . . . . . . . xxii
0.2.1 Estructura de Red Neural . . . . . . . . . . . . . . . . xxiv
0.2.2 Un ejemplo simple . . . . . . . . . . . . . . . . . . . . xxvi
0.3 Cuándo utilizar redes neuronales . . . . . . . . . . . . . . . . . . xxvi
0.3.1 Problemas no adaptados a una solución de red neuronal . .
xxvii
0.3.2 Problemas adecuados para una red neuronal . . . . . . . xxvii
0.4 Estructura del libro . . . . . . . . . . . . . . . . . . . . . . . xxviii
3 El Encog Workbench 35
3.1 Estructura del Workbench Encog . . . . . . . . . . . . . . . 36
3.1.1 Workbench archivos CSV . . . . . . . . . . . . . . . . . . 37
3.1.2 Archivos EG de Workbench . . . . . . . . . . . . . . . . . . . 37
3.1.3 Archivos EGA de Workbench . . . . . . . . . . . . . . . . . . 38
3.1.4 Archivos Workbench EGB . . . . . . . . . . . . . . . . . . 38
3.1.5 Archivos de imagen de Workbench 39
..................
3.1.6 Archivos de texto de Workbench . . . . . . . . . . . . . . . . . . 39
3.2 Un ejemplo simple XOR . . . . . . . . . . . . . . . . . . . . . 39
Contenido xv
5 Formación de Propagación 67
xvi Contenido
Glossary 195
CONTENTS xix
xxi
Introducción.
Encog es un framework de aprendizaje de máquina para Java y .NET.
Inicialmente, Encog fue creado para soportar solamente redes
neuronales. Versiones posteriores de Encog se expandieron más hacia el
aprendizaje general de máquinas. Sin embargo, este libro se centrará
principalmente en redes neuronales. Muchas de las técnicas aprendidas
en este libro pueden aplicarse a otras técnicas de aprendizaje automático.
Los libros subsecuentes se centrarán en algunas de estas áreas de
programación Encog.
Este libro se publica conjuntamente con la versión 3.0 de Encog y
debe permanecer muy compatible con versiones posteriores de Encog 3.
Versiones futuras en la serie 3.x intentarán agregar funcionalidad con la
interrupción mínima al código existente.
0.1 La historia de Encog
La primera versión de Encog, versión 0.5, fue lanzada el 10 de julio de
2008. Las fundaciones originales de Encog incluyen algún código usado
en la primera edición de "Introducción a las Redes Neuronales con Java",
publicado en 2005. Su segunda edición incluía una red neuronal
completamente rediseñada Motor de red, que se convirtió en Encog
versión 0.5. Las versiones Encog 1.0 a 2.0 mejoraron enormemente el
código de red neural mucho más allá de lo que puede ser cubierto en un
libro de introducción. Encog versión 3.0 agregó más apoyo formal para
métodos de aprendizaje de máquina más allá de redes neurales.
Este libro proporcionará una instrucción completa sobre cómo usar las
redes neu-ral con Encog. Para las complejidades de la implementación
real de las redes neuronales, consulte "Introducción a las redes
neuronales con Java" y "Introducción a redes neuronales con C #". Estos
libros exploran cómo implementar
xxii Introduction
redes neuronales básicas y ahora para crear los internos de una red
neuronal.
Las redes neuronales son una pequeña parte de la IA. Las redes
neuronales, por lo menos en la actualidad, llevan a cabo tareas muy
pequeñas y específicas. Las redes neuronales basadas en computadoras
no son dispositivos de computación de propósito general como el cerebro
humano. Es posible que la percepción de las redes neuronales esté
sesgada, ya que el propio cerebro es una red de neuronas, o una red
neuronal. Esto trae consigo una distinción importante.
El cerebro humano se describe más exactamente como una red neural
biológica (BNN). Este libro no trata de redes neuronales biológicas. Este
libro trata de redes neuronales artificiales (ANN). La mayoría de los textos
no hacen la distinción entre los dos. A lo largo de este texto, las
referencias a redes neuronales implican redes neuronales artificiales.
Existen algunas similitudes básicas entre las redes neuronales
biológicas y las redes neuronales artificiales. Las redes neuronales
artificiales son, en gran medida, construcciones matemáticas inspiradas
en redes neuronales biológicas. Un término importante que se utiliza a
menudo para describir varios algoritmos de red neuronal artificial es
"plausibilidad biológica". Este término define la proximidad de un
algoritmo de red neuronal artificial a una red neuronal biológica.
Como se dijo anteriormente, las redes neuronales están diseñadas
para realizar una pequeña tarea. Una aplicación completa probablemente
utiliza redes neuronales para lograr ciertas partes de sus objetivos. La
aplicación completa no se implementará como una red neuronal. La
aplicación puede hacerse de varias redes neuronales, cada una diseñada
para una tarea específica.
Las redes neuronales realizan tareas de reconocimiento de patrones
muy bien. Cuando se comunica un patrón, una red neural comunica ese
patrón de nuevo. En el nivel más alto, esto es todo lo que hace una red
neuronal típica. Algunas arquitecturas de red variarán esto, pero la gran
mayoría de redes neuronales funcionan de esta manera. La figura 1
ilustra una red neuronal a este nivel.
Figure 1: Una Red Neural Típica
¿Qué pasaría con la tabla hash anterior si se pasó una palabra que no
era una clave de mapa? Por ejemplo, pase en la clave "escribió". Una
tabla hash devolverá null o indicará de alguna manera que no pudo
encontrar la clave especificada. Las redes neuronales no devuelven null,
sino que encuentran la coincidencia más cercana. No sólo encuentran la
coincidencia más cercana, las redes neuronales modifican la salida para
estimar el valor faltante. Así que si "escribió" se pasa a la red neural
arriba, la salida probablemente sería "escribir". No hay suficientes datos
para que la red neuronal haya modificado la respuesta, ya que sólo hay
tres muestras. Así que probablemente obtendrá la salida de una de las
otras claves.
Capitulo 1
• Clasificación de datos
• Datos de agrupación
5.8,2.7,5.1,1.9,”virginica”
7.1,3.0,5.9,2.1,”virginica”
Los datos anteriores se muestran como un archivo CSV. CSV es un
formato de entrada muy común para una red neuronal. La primera fila
suele ser una definición para cada una de las columnas del archivo.
Como se puede ver, para cada una de las flores hay cinco piezas de
información que se proporcionan.
• Longitud Sepal
• Ancho de sepal
•Especies
1.2 Análisis de regresión 3
1.3 Clustering
Otro tipo común de análisis es la agrupación. A diferencia de los dos
tipos de anal-ysis anteriores, el agrupamiento es normalmente sin
supervisión. Cualquiera de los conjuntos de datos de las dos secciones
anteriores podría utilizarse para la agrupación. La diferencia es que el
análisis de agrupamiento no requeriría que el usuario proporcionara la
especie en el caso del conjunto de datos Iris, o el número MPG para el
conjunto de datos MPG. Se espera que el algoritmo de agrupamiento
coloque los elementos de datos en grupos que correspondan a la especie
o MPG.
Para el agrupamiento, el método de aprendizaje de la máquina
simplemente mira los datos e intenta colocar esos datos en una serie de
clusters. El número de clusters esperados debe ser definido de antemano.
Si el número de clusters cambia, el método de aprendizaje de la máquina
de agrupación tendrá que volver a entrenarse.
Clustering es muy similar a la clasificación, con su salida es un clúster,
que es similar a una clase. Sin embargo, el agrupamiento diferencia a la
regresión ya que no proporciona un número. Por lo tanto, si el clustering
se utilizaba con el conjunto de datos MPG, la salida tendría que ser un
cluster en el que caiga el automóvil. Tal vez cada grupo especifique el
nivel variable de eficiencia de combustible para el vehículo. Quizás los
grupos agruparían los coches en racimos que demostraran una cierta
relación que todavía no se había notado.
La entrada a una red neuronal es siempre una matriz del tipo double. El tamaño
de esta matriz corresponde directamente al número de neuronas en la capa de
entrada. Encog utiliza la interfaz IMLData para definir clases que contienen
estas matrices. La matriz anterior puede convertirse fácilmente en un objeto
IMLData con la siguiente línea de código.
Http://www.heatonresearch.com/wiki/Hidden_Layers
8 Regresióm, Clasificación & Clustering
Como puede ver, el operador XOR sólo devuelve true cuando ambas
entradas difieren. La siguiente sección explica cómo estructurar las capas
de entrada, salida y oculta para el operador XOR.
1.5.2 Estructuración de una red neuronal para XOR
Hay dos entradas para el operador XOR y una salida. Las capas de
entrada y salida se estructurarán en consecuencia. Las neuronas de
entrada se alimentan con los siguientes valores dobles:
0.0,0.0
1.0,0.0
0.0,1.0
1.0,1.0
0 0
0 1
1.0
0.0
Esta es una forma en que la red neuronal puede ser estructurada. Este
método permite a una simple red neuronal feedforward aprender el
operador XOR. La red neuronal feedforward, también llamada perceptron,
es una de las primeras arquitecturas de redes neuronales que
aprenderemos.
Hay otras maneras en que los datos XOR podrían ser presentados a la
red neuronal. Más adelante en este libro, se explorarán dos ejemplos de
redes neuronales recurrentes, incluyendo los estilos Elman y Jordan de
redes neuronales. Estos meth-ods tratarían los datos XOR como una
secuencia larga, concatenando básicamente la tabla de verdad para XOR
juntos, resultando en una secuencia larga de XOR, como:
0.0,0.0,0.0,0
.0,1.0,1.0,1.
0,0.0,1.0,1.0
,1.0,0.0
Los saltos de línea son sólo para la legibilidad; La red neural trata
XOR como una secuencia larga. Usando los datos anteriores, la red tiene
una única neurona de entrada y una única neurona de salida. La neurona
de entrada recibe un valor de la lista anterior y se espera que la neurona
de salida devuelva el siguiente valor.
Esto demuestra que a menudo hay múltiples formas de modelar los
datos de una red neuronal. La forma en que se modelan los datos influirá
grandemente en el éxito de una red neuronal. Si un modelo en particular
no funciona, se debe considerar otro. El siguiente paso es dar formato a
los datos XOR para una red neuronal feedforward.
Debido a que el operador XOR tiene dos entradas y una salida, la red
neural sigue el ejemplo. Además, la red neuronal tiene una única capa
oculta con dos neuronas para ayudar a procesar los datos. La elección de
dos neuronas en la capa oculta es arbitraria ya menudo resulta en prueba
y error. El problema XOR es simple y dos neuronas ocultas son su fi
cientes para resolverlo. En la figura 1.1 se muestra un diagrama para esta
red.
1.5 Uso de una red neuronal 11
Ahora mira el código usado para producir una red neuronal que
resuelve el operador XOR. El código completo se incluye con los
ejemplos Encog y se puede encontrar en la siguiente ubicación.
Encog . Examples .XOR. XORHelloWorld
12 Regression, Classification & Clustering
ConsoleExamples xor
Cada capa también especifica un valor bool. Este valor de bool especifica
si las neuronas de polarización están presentes en una capa o no. La capa
de salida, como se muestra en la Figura 1.1, no tiene una neurona de
polarización como entrada y las capas ocultas lo hacen. Esto se debe a que
una neurona de polarización sólo está conectada a la siguiente capa. La
capa de salida es la capa final, por lo que no hay necesidad de una neurona
de sesgo. Si se especificó una neurona de polarización en la capa de salida,
no tendría efecto.
Estos pesos constituyen la memoria a largo plazo de la red neuronal.
Algunas redes neuronales también contienen capas de contexto que dan a la
red neuronal una memoria a corto plazo también. La red neural aprende
modificando estos valores de peso. Esto también es cierto en las redes
neuronales de Elman y Jordan.
Ahora que la red neuronal ha sido creada, debe ser entrenada. La
formación es el proceso en el que los pesos aleatorios se refinan para
producir la producción más cerca de la salida deseada. La capacitación se
discute en la siguiente sección.
1.5.3 Formación de una red neuronal
Para formar la red neuronal, se construye un objeto IMLDataSet. Este
objeto contiene las entradas y los resultados esperados. Para construir
este objeto, se crean dos matrices. La primera matriz conservará los
valores de entrada para el operador XOR. La segunda matriz tendrá las
salidas ideales para cada uno de los cuatro valores de entrada
correspondientes. Éstos corresponderán a los valores posibles para XOR.
Para revisar, los cuatro valores posibles son los siguientes:
0 XOR 0 = 0
1 XOR 0 = 1
0 XOR 1 = 1
1 XOR 1 = 0
train.Iteration();
Console . WriteLine (@” Epoch #” + epoch + @” Error:”
+train.Error);
epoch++;
} while ( t r a i n . E r r o r > 0 . 0 1 ) ;
Como puede ver, la red no ha sido entrenada para dar los resultados
exactos. Esto es normal. Debido a que la red fue entrenada al error del
1%, cada uno de los resultados también estará dentro de generalmente
1% del valor esperado.
Debido a que la red neural se inicializa a valores aleatorios, la salida
final será diferente en la segunda ejecución del programa.
Neural Network R e s u l t s :
0 . 0 , 0 . 0 , a c t u a l =0.005489822214926685 , i d e a l =0.0
1 . 0 , 0 . 0 , a c t u a l =0.985425090860287 , i d e a l =1.0
0 . 0 , 1 . 0 , a c t u a l =0.9888064742994463 , i d e a l =1.0
1 . 0 , 1 . 0 , a c t u a l =0.005923146369557053 , i d e a l =0.0
La regresión es cuando una red neural acepta entrada y produce una salida
numérica. La clasificación es donde una red neural acepta entrada y predice en
qué clase estaba la entrada. El agrupamiento no requiere salidas ideales. Más
bien, el agrupamiento mira los datos de entrada y agrupa los casos de entrada
de la mejor manera posible.
Hay varios tipos de capas diferentes soportados por Encog. Sin embargo,
estas capas se dividen en tres grupos dependiendo de su ubicación en la red
neuronal. La capa de entrada acepta entradas desde el exterior. Las capas
ocultas aceptan datos de la capa de entrada para su posterior procesamiento. La
capa de salida toma datos, ya sea de la capa de entrada o final oculta, y la
presenta al mundo exterior.
Finalmente, este capítulo detalló cómo enviar datos a una red neuronal. Los
datos para el ejemplo XOR se proporcionan fácilmente a una red neuronal. No
es necesario normalizar o codificar. Sin embargo, la mayoría de los datos del
mundo real necesitarán ser normalizados. La normalización se demuestra en el
próximo capítulo.
19
Capitulo 2
para los datos es el formato de valores separados por comas (CSV). Otras
veces puede ser necesario crear una araña o bot para obtener estos datos.
Una fuente muy útil para la red neuronal es el Repertorio de Aprendizaje de
la Máquina, que es dirigido por la Universidad de California en Irvine.
Http://kdd.ics.uci.edu/
El sitio del repositorio de Aprendizaje de la Máquina es un repositorio de
varios conjuntos de datos que han sido donados a la Universidad de California.
Varios de estos conjuntos de datos se utilizarán en este libro.
...
2.2 Normalizing Data 21
7.0,3.2,4.7,1.4,”versicolor
”6.4,3.2,4.5,1.5,”versicolo
r”6.9,3.1,4.9,1.5,”versicol
or”
...
6.3,3.3,6.0,2.5,”virginica”
5.8,2.7,5.1,1.9,”virginica”
7.1,3.0,5.9,2.1,”virginica”
hace que todos los atributos estén en el mismo rango sin atributo
alguno más potente que los demás.
Para normalizar, los rangos numéricos actuales deben ser conocidos
para todos los atributos. Aquí se muestran los rangos numéricos actuales
para cada uno de los atributos del iris.
• Longitud Sepal - Max: 7.9, Min: 4.3
• Ancho de sepal - Max: 4.4, Min: 2.0
• Longitud de los pétalos - Max: 6,9, Min: 1,0
• Anchura de los pétalos - Max: 2.5, Min: 0.1
Considere la "longitud del pétalo". La longitud del pétalo está en el rango de 1,0 a
6,9. Esto debe convertir esta longitud a -1 a +1. Para ello utilizamos la ecuación
2.1.
• Setosa
• Versicolor
• Virginica
1,−1,−1
Asimismo, el Versicolor sería codificado de la siguiente manera:
−1,1,−1
Finalmente, Virginica sería codificada como sigue.
−1,−1,1
Encog proporciona clases integradas para proporcionar esta
normalización. Estas clases se presentarán más adelante en este capítulo.
2.2.4 Comprensión de la normalización equilateral
Las neuronas de salida se comprueban constantemente frente a los valores de
salida ideales proporcionados en el conjunto de entrenamiento. El error entre la
salida real y la salida ideal está representado por un porcentaje. Esto puede causar
un problema para el método de normalización one-of-n. Considere si la red
neuronal había predicho un iris Versicolor cuando debería haber predicho un iris
Verginica. La salida y el ideal sería como sigue:
I d e a l Output : −1, −1, 1
Actual Output : −1, 1, −1
2.2 Normalización de datos 25
El problema es que sólo dos de las tres neuronas de salida son incorrectas.
Nos gustaría difundir la "culpa" de este error en un porcentaje mayor de las
neuronas. Para ello, debe determinarse un conjunto único de valores para cada
clase. Cada conjunto de valores debe tener una distancia euclídea igual a los
otros. La distancia igual asegura que la elección incorrecta del iris Setosa para
Versicolor tiene el mismo peso de error que la elección del iris Setosa para el iris
Virginica.
Esto se puede hacer usando la clase Equilateral. El siguiente segmento de
código muestra cómo utilizar la clase Equilateral para generar estos valores:
var eq = new E q u i l a t e r a l (3 , −1 ,1) ;
for ( var i = 0 ; i < 3 ; i ++)
{
var l i n e = new S t r i n g B u i l d e r ( ) ;
l i n e . Append ( i ) ;
l i n e . Append ( ’ : ’ ) ;
var d = eq . Encode ( i ) ;
for ( var j = 0 ; j < d . Length ; j ++)
{
i f ( j > 0)
l i n e . Append ( ’ , ’ ) ;
l i n e . Append ( Format . FormatDouble ( d [ j ] , 4) ) ;
}
Console . WriteLine ( l i n e . ToString ( ) ) ;
}
Observe que hay dos salidas para cada una de las tres clases. Esto disminuye el
número de neuronas necesarias por uno de la cantidad necesaria para la
codificación uno-de-n. La codificación equilateral requiere siempre una neurona
de salida menos que la codificación uno-de-n. La codificación equilateral nunca
se utiliza para menos de tres clases.
26 Obtención de datos para Encog
v n 2
d(p, q) = (pi qi) (2.5)
u
i=1 −
uX
t
En la ecuación anterior la variable "q" representa el valor de salida
ideal; La variable "p" representa el valor de salida real. Hay "n"
conjuntos de ideales y reales. La normalización euclidiana se
implementa utilizando la clase Equilateral en Encog. Por lo general, es
innecesario tratar directamente con la clase Equilateral en Encog. Por
el contrario, se utiliza uno de los métodos de normalización de nivel
superior descritos más adelante en este capítulo.
Si está interesado en los medios exactos por los cuales se calculan los
números equiláteros, visite la siguiente URL:
Http://www.heatonresearch.com/wiki/Equilateral
2.3 Normalización Programática 27
ConsoleExamples l a n d e r
Para realizar la normalización, se crean varios objetos NormalizedField.
Aquí ves el objeto NormalizedField que fue creado para el combustible del
lander lunar.
var f u e l S t a t s =
new N o r m a l i z e d F i e l d (
NormalizationAction.
Normalize , ” f u e l ” ,
200 ,
0,
− 0.9 ,
0. 9 ) ;
28 Obtaining Data for Encog
double f = f u e l S t a t s . Denormalize ( n ) ;
ConsoleExamples s u n s p o t
Para empezar, cree una instancia del objeto NormalizeArray. Establezca el rango
alto y bajo para la normalización.
var h i =1 ;
var l o =−1;
var norm = new NormalizeArray {NormalizedHigh = hi , NormalizedLow
= l o };
Ahora matriz de datos sin formato se puede normalizar en una
matriz normalizada.
2.4 Normalización de archivos CSV 29
n o r m a l i z e d S u n s p o t s = norm . P r o c e s s ( Sunspots ) ;
c l o s e d L o o p S u n s p o t s = EngineArray . ArrayCopy ( normalizedSunspots);
s −s e t o s a 5 . 0 , 3 . 4 , 1 . 5 , 0 . 2 , I r i s −s
etosa
La salida será una versión normalizada del archivo de entrada, como se
muestra a continuación:
30 Obtaining Data for Encog
” s e p a l l ” , ” s e p a l w ” , ” p e t a l l ” , ” p e t a l w ” , ” s p e c i e s ( p0 ) ” , ” s p e c i e s ( p1 )
”
− 0.55 ,0.24 , −0.86 , −0.91 , −0.86 , −0.5
− 0.66 , −0.16 , −0.86 , −0.91 , −0.86 , −0.5
− 0.77 ,0 , −0.89 , −0.91 , −0.86 , −0.5
− 0.83 , −0.08 , −0.83 , −0.91 , −0.86 , −0.5
− 0.61 ,0.33 , −0.86 , −0.91 , −0.86 , −0.5
− 0.38 ,0.58 , −0.76 , −0.75 , −0.86 , −0.5
− 0.83 ,0.16 , −0.86 , −0.83 , −0.86 , −0.5
−0.61 ,0.16 , −0.83 , −0.91 , −0.86 , −0.5
Los datos anteriores muestran que los valores numéricos han sido
normalizados entre -1 y 1. Además, el campo de especies se divide en dos
partes. Esto se debe a que se usó la normalización equilátera en la columna
de especies.
2.4.1 Implementación de la normalización básica de
archivos
En la última sección, usted vio cómo Encog Analyst normaliza un archivo.
En esta sección, aprenderá el código de programación necesario para
lograr esto. Empiece accediendo a los archivos de origen y de destino:
var s o u r c e F i l e = new F i l e I n f o ( app . Args [ 0 ] ) ;
var t a r g e t F i l e = new F i l e I n f o ( app . Args [ 1 ] ) ;
norm . Normalize ( t a r g e t F i l e ) ;
f i e l d . Action = N o r m a l i z a t i o n A c t i o n . OneOf ;
Encog Analyst puede hacer mucho más que simplemente normalizar datos.
También realiza la normalización completa, el entrenamiento y la evaluación de
una red neuronal. Esto se tratará con mayor detalle en los capítulos 3 y 4. El
capítulo 3 mostrará cómo hacerlo desde el banco de trabajo, mientras que el
capítulo 4 mostrará cómo hacerlo a partir del código.
2.5 Resumen
En este capítulo se explica cómo obtener y normalizar los datos de Encog. Hay
muchas fuentes diferentes de datos. Uno de los mejores es el UCI Machine
Learning Repository, que proporciona muchos ejemplos de conjuntos de datos
en este libro.
2.5 Resumen 33
Los datos no numéricos suelen ser un atributo que define una clase. Para el
caso del conjunto de datos del iris, la especie del iris es una clase no numérica.
Para normalizar estas clases, deben convertirse a una matriz de valores de
punto flotante, al igual que con los datos numéricos.
Este capítulo presentó el Analista Encog y explicó su uso para normalizar los
datos. El Encog Analyst también se puede usar en Encog Workbench. El Encog
Workbench es una aplicación GUI que permite acceder a muchas de las
características de las redes neuronales sin necesidad de escribir código.
35
Capitulo 3
El Encog Workbench
• Estructura del Workbench Encog
• .eg
• .ega
• .egb
• .gif
• .html
• .jpg
• .png
• .txt
1,1,0
visibles. Las neuronas de sesgo, así como la capa oculta, ayudan a la red
neuronal a aprender.
Con esto completo, es hora de entrenar realmente la red neuronal. Comience
cerrando la visualización del histograma y la red neuronal. No debe haber
documentos abiertos dentro de la mesa de trabajo.
Haga clic con el botón derecho en los datos de formación "xor.csv". Elija
"Export to Training (EGB)". Rellene dos neuronas de entrada y una neurona de
salida en el cuadro de diálogo que aparece. En el siguiente diálogo, asegúrese
de especificar que hay encabezados. Una vez completado, se agregará un
archivo EGB al árbol del proyecto. Esto resultará en tres archivos: un archivo
EG, un archivo EGB y un archivo CSV.
Para entrenar la red neuronal, seleccione "Herramientas-> Tren". Esto abrirá
un diálogo para elegir el conjunto de entrenamiento y el método de aprendizaje
automático. Debido a que sólo hay un archivo EG y un archivo EGB, este cuadro
de diálogo debe predeterminar los valores correctos. Deje la casilla de
verificación "Cargar en memoria". Como este es un pequeño conjunto de
entrenamiento, no hay razón para no cargar en la memoria.
Hay muchos métodos de entrenamiento diferentes para elegir. Para este
ejemplo, seleccione "Propagación - Resiliente". Acepte todos los parámetros
predeterminados para este tipo de entrenamiento. Una vez que se haya
completado, aparecerá la pestaña de progreso de la formación. Haga clic en
"Inicio" para comenzar el entrenamiento.
El entrenamiento terminará generalmente en menos de un segundo. Sin
embargo, si el entrenamiento continúa durante varios segundos, es posible que
necesite restablecer el entrenamiento haciendo clic en la lista desplegable
titulada "Seleccionar opción". Elija restablecer la red. Debido a que una red
neuronal comienza con pesos aleatorios, los tiempos de entrenamiento variarán.
En una pequeña red neuronal como XOR, los pesos pueden potencialmente ser
lo suficientemente malo que la red nunca entrena. Si este es el caso,
simplemente reinicie la red mientras se entrena.
3.2.5 Evaluate the Neural Network
Hay dos maneras de evaluar la red neuronal. La primera es simplemente
calcular el error de red neural eligiendo "Herramientas-> Evaluar Red". Se
le pedirá que use el método de aprendizaje automático y los datos de
entrenamiento. Esto le mostrará el error de red neural cuando se evalúa
con respecto al conjunto de entrenamiento especificado.
44 The Encog Workbench
Para este ejemplo, el error será un porcentaje. Cuando se evalúa este
porcentaje, cuanto menor sea el porcentaje, mejor. Otros métodos de
aprendizaje de la máquina pueden generar un error como un número u
otro valor.
Para una evaluación más avanzada, seleccione "Herramientas->
Gráfico de validación". Esto resultará en una salida similar a la Figura 3.5.
Figura 3.5:Gráfico de validación para XOR
Para ver cómo se realiza la red, abra el archivo iris output.csv. Verá el
Listado 3.2.
3.4 Encog Analyst Reports 47
Esto ilustra cómo la red neural intenta predecir a qué especie de iris
pertenece cada fila. Como puede ver, es correcto para todas las filas que
se muestran aquí. Estos son los elementos de datos que la red neural no
fue originalmente entrenado con.
3.5 Resumen
Este capítulo presentó el Encog Workbench. El Encog Workbench es
una aplicación GUI que trabaja visualmente con redes neuronales y otros
métodos de aprendizaje automático. El workbench es una aplicación Java
que produce datos que funciona en todas las plataformas Encog.
Capitulo 4
Esta red tendrá una capa de entrada de dos neuronas, una capa oculta
con tres neuronas y una capa de salida con una sola neurona. Para
utilizar una función de activación que no sea la función tangente
hiperbólica, utilice código similar al siguiente:
BasicNetwork network = new BasicNetwork ( ) ; network .
AddLayer (new B a s i c L a y e r ( null , true , 2 ) ) ;
network . AddLayer (new B a s i c L a y e r (new A c t i v a t i o n S i g m o i d ( ) , true ,
3 ) ) ; network . AddLayer ( new B a s i c L a y e r ( new A c t i v a t i o n S i g m o i d ( ) ,
false , 1 ) ) ; network . S t r u c t u r e . F i n a l i z e S t r u c t u r e ( ) ;
network . Reset ( ) ;
No hay función derivada para bipolar, por lo que esta función de activación no
se puede utilizar con el entrenamiento de propagación.
4.3.2 Activación Competitiva
La función ActivationCompetitive se utiliza para forzar a un grupo
selecto de neuronas a ganar. El ganador es el grupo de neuronas con
mayor rendimiento. Las salidas de cada una de estas neuronas se
mantienen en la matriz pasada a esta función. El tamaño del grupo
neuronal ganador es definible. La función determinará primero a los
ganadores. Todas las neuronas no ganadoras se pondrán a cero. Los
ganadores tendrán el mismo valor, que es una división par de la suma de
los resultados ganadores.
Esta función comienza creando una matriz que rastreará si cada
neurona ya ha sido seleccionada como uno de los ganadores. El número
de ganadores también se cuenta.
var w i n n e r s = new b o o l [ x . Length ] ;
double sumWinners = 0 ;
Ahora, un ganador debe ser determinado. Bucle sobre todas las salidas
de la neurona y encontrar el que tiene la salida más alta.
for ( int j = s t a r t ; j < s t a r t + s i z e ; j ++)
{
f(x) = x (4.1)
La gráfica de la función lineal es una línea simple, como se ve en la figura
4.1.
4.3 Encog Activación de funciones 57
f(x) = log (1 + x)
log (1 x)
, x >= 0
, otherwise
(4.2)
−
Esto produce una curva similar a la función de activación tangente
hiperbólica, la cual será discutida más adelante en este capítulo. El
gráfico de la función de activación logarítmica se muestra en la figura 4.2.
58 Constructing Neural Networks in C#
1
−x
f(x) = 1+e (4.3)
La activación de la función sigmoide moverá los números negativos al
rango positivo. Esto se puede ver en la figura 4.3, que muestra la gráfica
de la función sigmoide.
4.3 Encog Activación de funciones 59
Esta sección comienza mirando un ejemplo XOR que hace uso de los
archivos EG de Encog. Posteriormente, este mismo ejemplo se utilizará para la
serialización .Net. Comenzaremos con el ejemplo de persistencia Encog EG.
4.5.1 Uso de Encog EG Persistence
La persistencia de Encog EG es muy fácil de usar. La clase
EncogDirectoryPersistence se utiliza para cargar y guardar objetos de un archivo
EG de Encog. El siguiente es un buen ejemplo de la persistencia de Encog EG:
Encog . Examples . P e r s i s t . P e r s i s t E n c o g
Para ejecutar este ejemplo, utilice el comando siguiente.
ConsoleExamples p e r s i s t −encog
El método Execute realiza este ejemplo completo. Se crea un conjunto de
entrenamiento que contiene las salidas y entradas esperadas para el
operador XOR.
this . app = app ;
IMLDataSet t r a i n i n g S e t = new BasicMLDataSet (XOR INPUT, XOR IDEAL) ;
Este método comienza creando una red neural básica para ser entrenada
con el operador XOR. Es una red neuronal simple de tres capas. Hay dos
neuronas de entrada, seis ocultas y una salida. El valor de false
especifica una función de activación sigmoide. Un valor de true habría
especificado una función de activación tangente hiperbólica.
BasicNetwork network = E n c o g U t i l i t y . SimpleFeedForward ( 2 , 6 , 0 , 1 ,
false);
double e r r o r = network . C a l c u l a t e E r r o r ( t r a i n i n g S e t ) ;
La red neuronal se guarda, utilizando una llamada a SaveObject. La red se
vuelve a cargar con una llamada a LoadObject. Ambos métodos están
contenidos en
La clase EncogDirectoryPersistence.
4.6 Uso de la serialización .Net 63
Este error se muestra y debe ser el mismo que antes de la red se guardó.
4.6 Uso de la serialización .Net
También es posible usar serialización .Net estándar con redes neuronales
Encog y conjuntos de entrenamiento. La persistencia de Encog EG es
mucho más flexible que la serialización .Net. Sin embargo, hay casos en
que una red neuronal puede simplemente ser guardada en un archivo
binario dependiente de la plataforma. El siguiente es un buen ejemplo de
persistencia .Net:
Encog . Examples . P e r s i s t . P e r s i s t S e r i a l
ConsoleExamples p e r s i s t −s e r i a l
Este ejemplo muestra cómo utilizar la serialización .Net con Encog. El
ejemplo es casi idéntico al ejemplo de serialización Encog que acabamos
de ver. La principal diferencia es que la carga / ahorro se realiza con la
serialización .Net. Esto se puede ver aquí.
S e r i a l i z e O b j e c t . Save ( ” encog . s e r ” , network ) ;
network = ( BasicNetwork ) S e r i a l i z e O b j e c t . Load ( ” encog . s e r ” ) ;
64 Construir redes neuronales en C #
4.7 Resumen
Feedforward y redes neuronales recurrentes simples se crean utilizando las
clases BasicNetwork y BasicLayer. Usando estos objetos, se pueden crear
redes neuronales. Las capas también pueden conectarse mediante enlaces
de contexto, así como redes neuronales recurrentes simples, como la red
neuronal de Elman, se crean.
Capitulo 5
Formación de programación
• Entrenamiento Backpropagation
• Entrenamiento de Propagación Rápida (QPROP)
• Regla de actualización de Manhattan
• Entrenamiento de Propagación Resiliente (RPROP)
• Gradiente de conjugado escalado (SCG)
• Levenberg Marquardt (LMA)
var t r a i n
= new S c a l e d C o n j u g a t e G r a d i e n t ( network , t r a i n i n g S e t ) ;
El código anterior crea una red neuronal con dos neuronas de entrada
y una neurona de salida. Hay cuatro neuronas ocultas. Las neuronas de
polarización se colocan en las capas de entrada y ocultas. Como es típico
para las redes neuronales, no hay neuronas de sesgo en la capa de
salida. La función de activación sigmoide se utiliza entre la entrada y la
neurona oculta, así como entre la capa oculta y la capa de salida.
Puede observar los dos signos de interrogación en la cadena de
arquitectura de red neural. Estos serán rellenados por los tamaños de
capa de entrada y salida especificados en el método create y son
opcionales. Puede codificar los tamaños de entrada y salida. En este
caso, los números especificados en la llamada de creación serán
ignorados.
76 Propagation Training
I t e r a t i o n #15 E r r o r : 0 . 7 6 3 4 5 3 3 2 8 3 6 1 0 7 9 3
I t e r a t i o n #16 E r r o r : 0 . 7 5 0 0 4 0 1 6 6 6 5 0 9 9 3 7
I t e r a t i o n #17 E r r o r : 0 . 7 3 7 6 1 5 8 1 1 6 0 4 5 2 4 2
I t e r a t i o n #18 E r r o r : 0 . 7 2 6 8 9 5 4 1 1 3 0 6 8 2 4 6
I t e r a t i o n #19 E r r o r : 0 . 7 1 5 5 7 8 4 6 6 7 6 2 8 0 9 3
I t e r a t i o n #20 E r r o r : 0 . 7 0 5 5 3 7 1 6 6 1 1 8 0 3 8
RPROP R e s u l t : 3 5 . 1 3 4 s e c o n d s .
F i n a l RPROP e r r o r : 0 . 6 9 5 2 1 4 1 6 8 4 7 1 6 6 3 2
T r a i n i n g 20 I t e r a t i o n s with M u l t i t h r e a d i n g
I t e r a t i o n #1 E r r o r : 0 . 6 9 5 2 1 2 6 3 1 5 7 0 7 9 9 2
I t e r a t i o n #2 E r r o r : 0 . 6 9 5 2 1 2 6 3 1 5 7 0 7 9 9 2
I t e r a t i o n #3 E r r o r : 0 . 9 0 9 1 5 2 4 9 2 4 8 7 8 8
I t e r a t i o n #4 E r r o r : 0 . 8 7 9 7 0 6 1 6 7 5 2 5 8 8 3 5
I t e r a t i o n #5 E r r o r : 0 . 8 5 6 1 1 6 9 6 7 3 0 3 3 4 3 1
I t e r a t i o n #6 E r r o r : 0 . 7 9 0 9 5 0 9 6 9 4 0 5 6 1 7 7
I t e r a t i o n #7 E r r o r : 0 . 7 7 0 9 5 3 9 4 1 5 0 6 5 7 3 7
I t e r a t i o n #8 E r r o r : 0 . 7 5 4 1 9 7 1 1 7 2 6 1 8 3 5 8
I t e r a t i o n #9 E r r o r : 0 . 7 2 8 7 0 9 4 4 1 2 8 8 6 5 0 7
I t e r a t i o n #10 E r r o r : 0 . 7 1 5 8 1 4 9 1 4 4 3 8 9 3 5
I t e r a t i o n #11 E r r o r : 0 . 7 0 3 7 7 3 0 8 0 8 7 0 5 0 1 6
I t e r a t i o n #12 E r r o r : 0 . 6 9 2 5 9 0 2 5 8 5 0 5 5 8 8 6
I t e r a t i o n #13 E r r o r : 0 . 6 7 8 4 0 3 8 1 8 1 0 0 7 8 2 3
I t e r a t i o n #14 E r r o r : 0 . 6 6 7 3 3 1 0 3 2 3 0 7 8 6 6 7
I t e r a t i o n #15 E r r o r : 0 . 6 5 8 5 2 0 9 1 5 0 7 4 9 2 9 4
I t e r a t i o n #16 E r r o r : 0 . 6 5 0 3 7 1 0 8 6 7 1 4 8 9 8 6
I t e r a t i o n #17 E r r o r : 0 . 6 4 2 9 4 7 3 7 8 4 8 9 7 7 9 7
I t e r a t i o n #18 E r r o r : 0 . 6 3 7 0 9 6 2 0 7 5 6 1 4 4 7 8
I t e r a t i o n #19 E r r o r : 0 . 6 3 1 4 4 7 8 7 9 2 7 0 5 9 6 1
I t e r a t i o n #20 E r r o r : 0 . 6 2 6 5 7 2 4 2 9 6 5 8 7 2 3 7
Multi−Threaded R e s u l t : 8 . 7 9 3 s e c o n d s .
F i n a l Multi−t h r e a d e r r o r : 0 . 6 2 1 9 7 0 4 3 0 0 8 5 1 0 7 4
Factor improvement : 4 . 0 1 0 6 7 8 3 8 0 5 2 9 9 6 7 4
5.5 Resumen
Este capítulo exploró cómo usar varios algoritmos de entrenamiento de
propagación con Encog. El entrenamiento de propagación es una clase muy
común de algoritmos de entrenamiento supervisados. El entrenamiento de
propagación resistente es generalmente la mejor opción; Sin embargo, la Regla
de actualización de Manhattan y la retropropagación pueden ser útiles para
ciertas situaciones. SCG y QPROP son también sólidos algoritmos de
entrenamiento.
Backpropagation fue uno de los algoritmos de entrenamiento original para las
redes neuronales feedforward. Aunque Encog lo soporta principalmente con
fines históricos, a veces puede usarse para refinar aún más una red neuronal
después de que se haya utilizado la propagación elástica. Backpropagation
utiliza una tasa de aprendizaje y el impulso. La velocidad de aprendizaje define
la rapidez con que la red neuronal aprenderá; El impulso ayuda a la red a salir
de los mínimos locales.
La regla de actualización de Manhattan utiliza un valor delta para actualizar
los valores de peso. Puede ser difícil elegir este valor delta correctamente; Un
valor demasiado alto hará que la red no aprenda nada.
Propagación Resiliente (RPROP) es uno de los mejores algoritmos de
entrenamiento ofrecidos por Encog. No requiere que proporcione parámetros de
entrenamiento, como los otros dos algoritmos de entrenamiento de propagación.
Esto hace que sea mucho más fácil de usar. Además, la propagación elástica es
considerablemente más eficiente que la Regla de actualización de Manhattan o
la retropropagación.
SCG y QPROP son también métodos de entrenamiento muy eficaces. SCG
no funciona bien para todos los métodos de entrenamiento, pero es muy efectivo
cuando funciona. QPROP funciona de forma similar a RPROP. Puede ser un
método de entrenamiento efectivo. Sin embargo, QPROP requiere que el
usuario elija una tasa de aprendizaje.
El entrenamiento multiproceso es una técnica de entrenamiento que adapta
el entrenamiento de propagación para que funcione más rápido con
computadoras multinúcleo. Dada una computadora con varios núcleos y un
conjunto de entrenamiento lo suficientemente grande, el entrenamiento
multiproceso es considerablemente más rápido que el entrenamiento de un solo
hilo. Encog puede establecer automáticamente un número óptimo de
subprocesos. Si estas condiciones no están presentes, Encog volverá a la
formación de un solo hilo.
5.5 Resumen 81
Capitulo 6
Más entrenamiento supervisado
• Introducción al ejemplo de Lander Lunar
• Entrenamiento supervisado sin conjuntos de entrenamiento
• Uso de Algoritmos Genéticos
• Uso de recocido simulado
• Algoritmos Genéticos y Recocido Simulado con Conjuntos de
Entrenamiento
Hasta ahora, este libro sólo ha explorado el entrenamiento de una red
neuronal utilizando los métodos supervisados de entrenamiento de
propagación. Este capítulo examinará algunas técnicas de entrenamiento
que no son de propagación. La red neural de este capítulo será entrenada
sin un conjunto de entrenamiento. Todavía se supervisa en que la
regeneración de la salida de la red neural se utiliza constantemente para
ayudar a entrenar la red neuronal. Simplemente no suministraremos los
datos de formación antes de tiempo.
Dos técnicas comunes para este tipo de entrenamiento son el recocido
simulado y los algoritmos genéticos. Encog proporciona soporte integrado
para ambos. El ejemplo de este capítulo puede ser entrenado con
cualquiera de los dos algoritmos, los cuales serán discutidos más
adelante en este capítulo.
El ejemplo de este capítulo presenta el clásico juego "Lunar Lander".
Este juego se ha implementado muchas veces y es casi tan viejo como
las computadoras mismas. Puedes leer más sobre el juego Lunar Lander
en Wikipedia.
84 Más entrenamiento supervisado
Http://en.wikipedia.org/wiki/Lunar_Lander_%28computer_game%29
La idea detrás de la mayoría de las variantes del juego Lunar Lander es muy
similar y el programa de ejemplo funciona de la siguiente manera: La nave
espacial lander lunar comenzará a caer. Cuando cae, se acelera. Hay una
velocidad máxima que el aterrizador puede alcanzar, que se llama la "velocidad
terminal." Los propulsores pueden ser aplicados al lander para retardar su
descenso. Sin embargo, hay una cantidad limitada de combustible. Una vez que
el combustible está agotado, el aterrizador caerá simplemente, y nada se puede
hacer.
Este capítulo enseñará una red neuronal para pilotar el módulo de aterrizaje.
Esta es una simulación de texto muy simple. La red neural tendrá sólo una
opción a su disposición. Puede decidir o no disparar los propulsores o no
disparar los propulsores. No se crearán datos de entrenamiento antes de tiempo
y no se harán suposiciones acerca de cómo la red neuronal debe pilotar la nave.
Si se usan conjuntos de entrenamiento, se proporcionará entrada de antemano
con respecto a lo que la red neuronal debe hacer en ciertas situaciones. Para
este ejemplo, la red neuronal aprenderá todo por sí misma.
A pesar de que la red neuronal aprenderá todo por su cuenta, esto sigue siendo
la formación supervisada. La red neural no será totalmente dejada a sus propios
dispositivos. Recibirá una manera de anotar la red neuronal. Para anotar la red
neuronal, debemos darle algunas metas y luego calcular un valor numérico que
determine qué tan bien la red neural alcanzó sus metas.
Estos objetivos son arbitrarios y simplemente reflejan lo que se escogió para
anotar la red. Los objetivos se resumen aquí:
• Terrenos lo más suaves posible
• Cubra la mayor distancia posible
• Conserve el combustible
ConsoleExamples l a n d e r [genetic/anneal]
La puntuación se mantendrá en 6,196 por un tiempo, pero mejorará en una época posterior.
Epoch #45 S c o r e : 6 2 7 5 . 0
Epoch #46 S c o r e : 6 2 7 5 . 0
Epoch #47 S c o r e : 7 3 4 7 . 0
Epoch #48 S c o r e : 7 3 4 7 . 0
Epoch #49 S c o r e : 7 4 6 0 . 0
Epoch #50 S c o r e : 7 4 6 0 . 0
public LanderSimulator ( )
{
Fuel = 2 0 0 ;
Seconds = 0 ;
Altitude=10000;
Velocity=0;
}
public c l a s s P i l o t S c o r e : I C a l c u l a t e S c o r e
return p i l o t . S c o r e P i l o t ( ) ;
}
public b o o l ShouldMinimize
{
g e t { return f a l s e ; }
}
private r e a d o n l y N o r m a l i z e d F i e l d a l t i t u d e S t a t s ;
private r e a d o n l y N o r m a l i z e d F i e l d v e l o c i t y S t a t s ;
Comience creando una matriz para contener los datos brutos que se
obtienen directamente desde el simulador.
IMLData i n p u t = new BasicMLData ( 3 ) ;
i n p u t [ 0 ] = f u e l S t a t s . Normalize ( sim . Fuel ) ;
i n p u t [ 1 ] = a l t i t u d e S t a t s . Normalize ( sim . A l t i t u d e ) ;
i n p u t [ 2 ] = v e l o c i t y S t a t s . Normalize ( sim . V e l o c i t y ) ;
El método Normalize del objeto NormalizedField se utiliza para
normalizar realmente los archivos de combustible, altitud y velocidad.
98 Más entrenamiento supervisado
train.Iteration();
Console . WriteLine (@” Epoch #” + epoch +
@” S c o r e : ” + t r a i n . E r r o r ) ;
epoch++;
}
Esta red neuronal también podría haber sido entrenada usando la clase
EncogUtility, como en el capítulo anterior. Simplemente para el
entrenamiento simple, el EncogUtility es generalmente el método preferido.
Sin embargo, si su programa necesita hacer algo después de cada iteración,
el enfoque más manual mostrado arriba puede ser preferible.
6.3.3 What is Simulated Annealing
El recocido simulado también se puede utilizar para entrenar al piloto neural.
El recocido simulado es similar a un algoritmo genético en el sentido de que
necesita un objeto de puntuación. Sin embargo, funciona muy dife- rentemente
internamente. El recocido simulado simula el proceso metalúrgico de recocido.
El recocido es el proceso mediante el cual se enfría lentamente un metal
fundido muy caliente. Este lento proceso de enfriamiento hace que el metal
produzca una estructura molecular fuerte y consistente. El recocido es un
proceso que produce metales menos propensos a fracturarse o romperse.
Un proceso similar se puede realizar en redes neuronales. Para implementar
el recocido simulado, la red neural se convierte en una matriz de valores dobles.
Este es exactamente el mismo proceso que se hizo para el algoritmo genético.
La aleatoriedad se utiliza para simular el calor y el enfriamiento. Mientras
que la red neural es todavía realmente "caliente", los pesos existentes de la red
neural aumentan en velocidad. A medida que la red se enfría, esta aleatoriedad
se ralentiza. Sólo se mantienen los cambios que producen un efecto positivo en
la puntuación de la red.
6.3.4 Uso del recocido simulado
Para utilizar el recocido simulado para entrenar el piloto neural, pase el
argumento recocido en la línea de comandos cuando se ejecuta este ejemplo.
Es muy sencillo para el ejemplo usar recocido en lugar de un algoritmo genético.
Ambos utilizan la
102 Más entrenamiento supervisado
ICalculateScore s c o r e = new T r a i n i n g S e t S c o r e ( t r a i n i n g S e t ) ;
IMLTrain t r a i n = new N e u r a l G e n e t i c A l g o r i t h m (
network , new NguyenWidrowRandomizer ( ) , s c o r e , 5000 , 0 . 1 , 0.25);
Para utilizar el objeto TrainingSetScore con recocido simulado,
simplemente pase al constructor de recocido simulado, como se hizo
anteriormente.
6.5 Resumen
Este capítulo explicó cómo usar algoritmos genéticos y recocido
simulado para entrenar una red neuronal. Ambas técnicas pueden utilizar
un objeto de puntuación,
En lugar de conjuntos de entrenamiento. Sin embargo, ambos
algoritmos también pueden usar un conjunto de entrenamiento si se
desea.
Hasta ahora, este libro sólo ha discutido cómo usar una red neuronal
feedforward. Esta red fue entrenada usando el entrenamiento de la
propagación, el anilingüe simulado o un algoritmo genético. Las redes
neuronales de feedforward son los tipos de redes neuronales más
comunes. Simplemente porque son los más comunes, esto no significa
que siempre son la mejor solución. En el próximo capítulo, veremos
algunas otras arquitecturas de redes neuronales.
104 More Supervised Training
6.5 Summary 105
107
Capitulo 7
1 . 0 XOR 0 . 0 = 1 . 0
0 . 0 XOR 0 . 0 = 0 . 0
0 . 0 XOR 1 . 0 = 1 . 0
1 . 0 XOR 1 . 0 = 0 . 0
Ahora, colapsar esto a una cadena de números. Para ello, simplemente lea los
números de izquierda a derecha, línea por línea. Esto produce lo siguiente:
1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0
Vamos a crear una red neuronal que acepte un número de la lista anterior y
debe predecir el próximo número. Estos mismos datos se utilizarán con una red
neural de Jordan más adelante en este capítulo. La entrada de la muestra a esta
red neuronal sería la siguiente:
Input Neurons : 1 . 0 ==> Output Neurons : 0.0
Input Neurons : 0 . 0 ==> Output Neurons : 1.0
Input Neurons : 1 . 0 ==> Output Neurons : 0.0
Input Neurons : 0 . 0 ==> Output Neurons : 0.0
Input Neurons : 0 . 0 ==> Output Neurons : 0.0
Input Neurons : 0 . 0 ==> Output Neurons : 0.0
Sería imposible entrenar una red neural típica feedforward para esto. La información
del entrenamiento sería contradictoria. A veces una entrada de 0 resulta en un 1;
Otras veces resulta en 0. Una entrada de 1 tiene problemas similares.
110 Otros tipos de redes neuronales
La red neuronal necesita contexto; Debe mirar lo que viene antes. Vamos
a revisar un ejemplo que utiliza un Elman y una red feedforward para
intentar predecir la salida. Un ejemplo de la red neuronal de Elman se
puede encontrar en la siguiente ubicación.
Encog . Examples . ElmanNetwork . ElmanExample
ConsoleExamples xor−elman
Cuando se ejecuta, este programa produce la salida siguiente:
T r a i n i n g Elman , Epoch #0 E r r o r : 0 . 3 2 5 9 9 4 1 1 6 1 1 9 7 2 6 7 3
T r a i n i n g Elman , Epoch #1 E r r o r : 0 . 3 2 5 9 9 1 7 3 8 5 9 9 7 0 9 7
T r a i n i n g Elman , Epoch #2 E r r o r : 0 . 3 2 5 9 8 9 3 6 1 1 0 2 3 8 1 4 7
T r a i n i n g Elman , Epoch #3 E r r o r : 0 . 3 2 5 9 8 6 9 8 3 6 2 7 7 4 5 6 4
T r a i n i n g Elman , Epoch #4 E r r o r : 0 . 3 2 5 9 8 4 6 0 6 1 7 5 8 0 3 0 5
T r a i n i n g Elman , Epoch #6287 E r r o r : 0 . 0 8 1 9 4 9 2 4 2 2 5 1 6 6 2 9 7
T r a i n i n g Elman , Epoch #6288 E r r o r : 0 . 0 8 1 9 4 8 7 4 1 1 0 3 3 3 2 5 3
T r a i n i n g Elman , Epoch #6289 E r r o r : 0 . 0 8 1 9 4 8 2 4 0 0 8 0 1 6 8 0 7
T r a i n i n g Elman , Epoch #6290 E r r o r : 0 . 0 8 1 9 4 7 7 3 9 1 8 2 1 2 3 4 2
...
T r a i n i n g Elman , Epoch #7953 E r r o r : 0 . 0 7 1 4 1 4 5 2 8 3 3 1 2 3 2 2
T r a i n i n g Elman , Epoch #7954 E r r o r : 0 . 0 7 1 4 1 4 5 2 8 3 3 1 2 3 2 2
T r a i n i n g Elman , Epoch #7955 E r r o r : 0 . 0 7 1 4 1 4 5 2 8 3 3 1 2 3 2 2
T r a i n i n g Elman , Epoch #7956 E r r o r : 0 . 0 7 1 4 1 4 5 2 8 3 3 1 2 3 2 2
T r a i n i n g Elman , Epoch #7957 E r r o r : 0 . 0 7 1 4 1 4 5 2 8 3 3 1 2 3 2 2
T r a i n i n g Elman , Epoch #7958 E r r o r : 0 . 0 7 1 4 1 4 5 2 8 3 3 1 2 3 2 2
T r a i n i n g Elman , Epoch #7959 E r r o r : 0 . 0 7 1 4 1 4 5 2 8 3 3 1 2 3 2 2
T r a i n i n g Elman , Epoch #7960 E r r o r : 0 . 0 7 1 4 1 4 5 2 8 3 3 1 2 3 2 2
T r a i n i n g Feedforward , Epoch #0 E r r o r : 0 . 3 2 5 9 9 4 1 1 6 1 1 9 7 2 6 7 3
T r a i n i n g Feedforward , Epoch #1 E r r o r : 0 . 3 2 5 9 9 1 7 3 8 5 9 9 7 0 9 7
T r a i n i n g Feedforward , Epoch #2 E r r o r : 0 . 3 2 5 9 8 9 3 6 1 1 0 2 3 8 1 4 7
T r a i n i n g Feedforward , Epoch #3 E r r o r : 0 . 3 2 5 9 8 6 9 8 3 6 2 7 7 4 5 6 4
T r a i n i n g Feedforward , Epoch #4 E r r o r : 0 . 3 2 5 9 8 4 6 0 6 1 7 5 8 0 3 0 5
...
T r a i n i n g Feedforward , Epoch #109 E r r o r : 0 . 2 5 0 0 0 0 1 2 1 9 1 0 6 4 6 8 6
T r a i n i n g Feedforward , Epoch #110 E r r o r : 0 . 2 5 0 0 0 0 1 2 1 9 0 8 0 2 1 7 3
T r a i n i n g Feedforward , Epoch #111 E r r o r : 0 . 2 5 0 0 0 0 1 2 1 9 0 5 3 9 7 6
T r a i n i n g Feedforward , Epoch #112 E r r o r : 0 . 2 5 0 0 0 0 1 2 1 9 0 2 7 7 3 1 5
T r a i n i n g Feedforward , Epoch #113 E r r o r : 0 . 2 5 0 0 0 0 1 2 1 9 0 0 1 4 8 7
Best e r r o r r a t e with Elman Network : 0 . 0 7 1 4 1 4 5 2 8 3 3 1 2 3 2 2
Best e r r o r r a t e with Feedforward Network : 0 . 2 5 0 0 0 0 1 2 1 9 0 0 1 4 8 7
7.1 The Elman Neural Network 111
As you can see, we use a training set-based scoring object. For more in-
formation about simulated annealing, refer to Chapter 6, “More Supervised
Training.” The primary training technique is back propagation.
IMLTrain trainMain =
new Backpropagation ( network , t r a i n i n g S e t , 0 . 0 0 0 0 1 , 0 . 0 ) ;
ConsoleExamples xor−j o r d a n
Cuando se ejecuta, el ejemplo anterior comparará un feedforward con un
Jordan, de manera similar al ejemplo anterior.
7.3 La red neuronal ART1
Una red ART1 aparece como una simple red neuronal de dos capas. Sin
embargo, a diferencia de una red neuronal feedforward, hay pesos en
ambas direcciones entre las capas de entrada y salida. Las neuronas de
entrada se utilizan para presentar patrones a la red ART1. ART1 utiliza
números bipolares, por lo que cada entrada neu-ron está en o o ff. Un
valor de uno representa on, y un valor de uno negativo representa o ff.
Las neuronas de salida definen los grupos que la red neuronal ART1
reconocerá. Cada neurona de salida representa un grupo.
7.3 La Red Neural ART1 115
7.3.1 Uso de la red neuronal ART1
Ahora vamos a ver cómo hacer uso de una red ART1. El ejemplo presentado
aquí creará una red a la que se le dará una serie de patrones para aprender
a reconocer. Este ejemplo se puede encontrar en la siguiente ubicación.
Encog . Examples . ARTExample . ClassifyART1
ConsoleExamples art1−c l a s s i f y
Este ejemplo construye una red ART1. Esta red se presentará nuevos
patrones para reconocer y aprender. Si un nuevo patrón es similar a un
patrón anterior, entonces el nuevo patrón se identifica como perteneciente
al mismo grupo que el patrón original. Si el patrón no es similar a un
patrón anterior, entonces se crea un nuevo grupo. Si ya existe un grupo
por neurona de salida, entonces la red neural informa que no puede
aprender más patrones.
La salida de este ejemplo se puede ver aquí.
O −0
OO−1
O−1
OO−2
116 Other Neural Network Types
O−1
OO−2
O−1
OO O − 3
OO −3
OO O − 4
OO −3
OOO − 5
OO − 5
O −5
OO −6
OOO −7
OOOO − 8
OOOOO − 9
O −5
O −3
O −2
O −0
O−1
O O − 4
OO O − 9
OO − 7
OOO − 8
OO − 6
OOOO − new Input and a l l C l a s s e s exhausted
El ART1 es una red que se puede utilizar para agrupar datos sobre la
marcha. No hay una fase de aprendizaje distinta; Agrupará los datos a
medida que se reciban.
7.4 La Red Neural NEAT
NeuroEvolution de Topologías Aumentadoras (NEAT) es un Algoritmo
Genético para la evolución de la estructura y pesos de una red neuronal.
NEAT fue desarrollado por Ken Stanley en la Universidad de Texas en
Austin. NEAT libera al programador de redes neuronales de la tediosa
tarea de determinar la estructura óptima de la capa oculta de una red
neuronal.
Una red neural NEAT tiene una capa de entrada y salida, al igual que las
redes neuronales feedforward más comunes. Una red NEAT comienza con
sólo una capa de entrada y una capa de salida. El resto se desarrolla a
medida que progresa el entrenamiento. Las conexiones dentro de una red
neural NEAT pueden ser feedforward, recurrentes o auto-conectadas. Todos
estos tipos de conexión serán probados por NEAT, ya que intenta desarrollar
una red neuronal capaz de la tarea dada.
7.4 La Red Neural NEAT 119
Como se puede ver, la red anterior sólo tiene una entrada y capas
ocultas. Esto no es suficiente para aprender XOR. Estas redes
evolucionan agregando neuronas y conexiones. La figura 7.4 muestra una
red neural que ha evolucionado para procesar el operador XOR.
Figura 7.4: Una red NEAT después de evolucionar
ConsoleExamples xor−neat
Este ejemplo comienza creando un conjunto de entrenamiento XOR para
proporcionar las entradas XOR y las salidas esperadas a la red neuronal.
Para revisar las entradas y salidas esperadas para el operador XOR,
consulte el Capítulo 3.
IMLDataSet t r a i n i n g S e t = new BasicMLDataSet ( XORInput , XORIdeal ) ;
E n c o g U t i l i t y . TrainToError ( t r a i n , 0.01);
La red neural sólo tomó dos iteraciones para producir una red neuronal que
sabía funcionar como un operador XOR. La red ha aprendido el operador
XOR de los resultados anteriores. XOR producirá una salida de 1,0 sólo
cuando las dos entradas no son del mismo valor.
7.5 Resumen
Mientras que los capítulos anteriores se centraron principalmente en
las redes neuronales feedforward, este capítulo explora algunos de los
otros tipos de red Encog-apoyado, incluyendo el Elman, Jordania, ART1 y
NEAT redes neuronales.
En este capítulo aprendiste sobre redes neuronales recurrentes, que
contienen conexiones hacia atrás a capas anteriores. Las redes
neuronales de Elman y Jordan hacen uso de una capa de contexto. Esta
capa de contexto les permite aprender patrones que abarcan varios
elementos de datos de entrenamiento. Esto los hace muy útiles para las
redes neurales temporales.
7.5 Summary 123
Capitulo 8
Las redes mostradas hasta ahora podrían estructurarse como una red
neural temporal asignando ciertas neuronas de entrada y salida.
8.1 Cómo funciona una Red Neural Predictiva
Una red neuronal predictiva utiliza sus entradas para aceptar información
sobre los datos actuales y utiliza sus salidas para predecir datos futuros.
Utiliza dos "ventanas", una ventana futura y una ventana pasada. Ambas
ventanas deben tener un tamaño de ventana, que es la cantidad de datos
que se predice o es necesario para predecir. Para ver las dos ventanas en
acción, considere los siguientes datos.
Day 1 : 100
Day 2 : 102
Day 3 : 104
Day 4 : 110
Day 5 : 99
Day 6 : 100
Day 7 : 105
Day 8 : 106
Day 9 : 110
Day 1 0 : 120
Epoch #1 E r r o r : 0 . 3 9 1 6 5 4 1 1 3 9 0 4 8 0 6 6 4
Epoch #2 E r r o r : 1 . 2 9 0 7 8 9 8 5 1 8 1 1 6 0 0 8
Epoch #3 E r r o r : 1 . 2 7 5 6 7 9 8 5 3 9 8 2 2 1 4
Epoch #4 E r r o r : 0 . 8 0 2 6 9 5 4 6 1 5 0 9 5 1 6 3
Epoch #5 E r r o r : 0 . 4 9 9 9 3 0 5 5 1 4 1 4 5 0 9 5
Epoch #6 E r r o r : 0 . 4 6 8 2 2 3 4 5 0 1 6 4 2 0 9
Epoch #7 E r r o r : 0 . 2 2 0 3 4 2 8 9 9 3 8 5 4 0 6 7 7
130 Uso de datos temporales
Epoch #8 E r r o r : 0 . 2 4 0 6 7 7 6 6 3 0 6 9 9 8 7 9
...
Epoch #128 E r r o r : 0 . 0 6 0 2 5 6 1 3 8 0 3 0 1
1 3 2 6 Epoch #129 E r r o r : 0 . 0 6 0 0 2 0 6 9 5
7 9 3 5 1 9 0 1 Epoch #130 E r r o r : 0 . 0 5 9 8 3
0 227 113 598 734Ye arAc t ualPred i
c t C l o s e d Loop P r e d i c t 1 9 6 0 0 . 5 7 2 3 0
.55470.554719610.32670.4075
0.391819620.25770.18370.2672
19630.21730.11900.073919640.
14290.17380.113519650.16350.
26310.365019660.29770.23270.
420319670.49460.28700.134219
680.54550.61670.353319690.54
380.51110.641519700.53950.38
300.401119710.38010.40720.24
6919720.38980.21480.23421973
0.25980.25330.178819740.2451
0.16860.216319750.16520.1968
0.206419760.15300.14700.2032
19770.21480.15330.1751 1978
0.48910.35790.1014
Encog . Examples . P r e d i c t . P r e d i c t S u n s p o t
closedLoopSunspots=
EngineArray . ArrayCopy ( n o r m a l i z e d S u n s p o t s ) ;
Tendremos una única descripción de los datos. Como los datos ya están
normalizados, usaremos datos RAW. Esta descripción de datos se
utilizará tanto para la entrada como para la predicción, como especifican
los dos últimos parámetros. Finalmente, agregamos esta descripción al
conjunto de datos.
var d e s c = new TemporalDataDescription
( TemporalDataDescription . Type . Raw, true , true ) ;
r e s u l t . AddDescription ( d e s c ) ;
Ahora es necesario crear todos los puntos de datos. Vamos a anudar entre el
año de inicio y final, que son los años utilizados para entrenar la red neuronal.
Otros años serán usados para probar la capacidad predictiva de la red neuronal.
for ( int y e a r = T r a i n S t a r t ; y e a r < TrainEnd ; y e a r++)
{
Cada punto de datos tendrá sólo un valor para predecir las manchas
solares. La secuencia es el año, porque sólo hay una muestra de
manchas solares por año.
var p o i n t = new TemporalPoint ( 1 ) {Sequence = y e a r };
8.3 Aplicación a Sunspots 133
Esto mostrará una lista de todas las predicciones de las manchas solares
hechas por Encog. En la siguiente sección veremos cómo Encog puede
extraer automáticamente la información actual del mercado y tratar de
predecir las direcciones del mercado de valores.
8.4 Utilización del conjunto de datos Encog Market
Encog también incluye un conjunto de datos específicamente diseñado
para los datos del mercado de valores. Este conjunto de datos es capaz
de descargar datos de fuentes externas. Actualmente, la única fuente
externa incluida en Encog es Yahoo Finance. El dataset de mercado
Encog está construido sobre el dataset temporal y la mayoría de las
clases en el dataset de mercado Encog descienden directamente de las
clases correspondientes en el conjunto de datos temporales.
• MarketDataDescription
• MarketDataType
• MarketError
• MarketMLDataSet
• MarketPoint
• Símbolo ticker
market . AddDescription ( d e s c ) ;
Los datos de mercado están cargados desde hace dos años y terminan
dos meses antes de hoy. Los dos últimos meses se utilizarán para evaluar
el rendimiento de la red neural.
var end = DateTime . Now ; // end t o d a y
var b e g i n = new DateTime ( end . T i c k s ) ; // b e g i n 30 days ago b e g
i n = b e g i n . AddDays( −60) ;
end = end . AddDays( −60) ;
b e g i n = b e g i n . AddYears ( −2)
; market . Load ( begin , end ) ;
market . Generate ( ) ;
8.5 Aplicación a la Bolsa 139
Crearemos una red para guardar en un archivo EG. Esta red es una
simple red neuronal feedforward que puede tener una o dos capas
ocultas. Los tamaños de las capas ocultas se especifican en la clase
Config.
BasicNetwork network = E n c o g U t i l i t y . SimpleFeedForward
( market . I n p u t S i z e ,
C o n f i g . HIDDEN1
COUNT, C o n f i g .
HIDDEN2 COUNT, market . I
d e a l S i z e , true ) ;
A continuación, cargue la red desde el archivo EG. Esta red se utilizará para
la formación.
if (!trainingFile.Exists)
{
Console . WriteLine (@”Can ’ t read f i l e : ” + t r a i n i n g F i l e ) ;
return ;
}
IMLDataSet t r a i n i n g S e t =
E n c o g U t i l i t y . LoadEGB2Memory( t r a i n i n g F i l e ) ;
{
Console . WriteLine (@”Can ’ t read file: ”+ file);
return ;
}
IMLDataSet t r a i n i n g = E n c o g U t i l i t y . LoadEGB2Memory( f i l e ) ;
The above code specifies the creation of feedforward neural networks using
the hyperbolic tangent activation function. Next, the pruning object is created.
El código anterior especifica la creación de redes neuronales feedforward
utilizando la función de activación tangente hiperbólica. A continuación, se
crea el objeto de poda.
var prune = new Pr une In cre me nta l ( t r a i n i n g , p a t t e r n , 100 , 1 , 1 0 ,
new C o n s o l e S t a t u s R e p o r t a b l e ( ) ) ;
prune . P r o c e s s ( ) ;
Luego, cargamos la red neuronal del archivo EG. Utilice la red neuronal
que fue entrenada en la sección anterior.
var network = ( BasicNetwork )
E n c o g D i r e c t o r y P e r s i s t e n c e . LoadObject ( f i l e ) ;
Recuperar un par de formación y obtener los datos reales, así como lo que se
predijo. Los datos predichos se determinan ejecutando la red usando el
Método de cálculo.
IMLData i n p u t = p a i r . Input ;
IMLData actualData=p air. Id eal;
IMLData p r e d i c t D a t a = network . Compute ( i n p u t ) ;
Ahora recupere los datos reales y predichos y calcule la diferencia. Esto establece la precisión de
la red neuronal que predice el cambio de precio real.
double a c t u a l = a c t u a l D a t a [ 0 ] ;
double p r e d i c t = p r e d i c t D a t a [ 0 ] ;
double d i f f = Math . Abs ( p r e d i c t − a c t u a l ) ;
146 Uso de datos temporales
También calcular la dirección que la red predijo seguridad toma frente a la
dirección que la seguridad realmente tomó.
Direction actualDirection=DetermineDirection(actual);
Direction predictDirection=DetermineDirection(predict);
Capitulo 9
Como se puede ver en la figura anterior, la letra "X" fue dibujada sobre
casi toda la imagen física. Esta imagen requeriría una detección de límites
mínima, si es que existe alguna.
Las imágenes no siempre serán tan perfectamente creadas. Considere
la imagen representada en la figura 9.2.
9.1 Encontrando los límites 153
Como puede ver, los límites se han detectado para la letra "X". El
cuadro delimitador significa que solo se reconocerán los datos dentro de
ese recuadro. Ahora la "X" está aproximadamente en la misma
orientación que la Figura 9.1.
154 Using Image Data
La sintaxis utilizada por este archivo de script es muy simple. Hay un comando
seguido de dos puntos. Este comando es seguido por una lista de parámetros
separados por comas.
158 Uso de datos de imagen
Cada parámetro es un par nombre-valor que también está separado por
dos puntos. Hay cinco comandos en todos: CreateTraining, Input, Network,
Train y Que es.
El comando CreateTraining crea un nuevo conjunto de formación. Para
ello, especifique la altura, el ancho y el tipo de downsample - RGB o Brillo.
El comando Input ingresa una nueva imagen para el entrenamiento. Cada
comando de entrada especifica la imagen, así como la identidad de la
imagen. Varias imágenes pueden tener la misma identidad. Por ejemplo, el
script anterior podría haber proporcionado una segunda imagen de una
moneda de diez centavos haciendo que el segundo comando de entrada
también tenga la identidad de "centavo".
El comando Red crea una nueva red neuronal para el entrenamiento y el
reconocimiento. Dos parámetros especifican el tamaño de las capas ocultas
primera y segunda. Si no desea tener una segunda capa oculta, especifique
cero para el parámetro hidden2.
El tren capacita la red neuronal y el modo especifica la consola o el
entrenamiento de la GUI. El parámetro minutes especifica cuántos minutos
se requieren para entrenar la red. Este parámetro sólo se utiliza con el
entrenamiento de la consola; Para el entrenamiento de GUI, este parámetro
debe ser puesto a cero. La estrategia indica al algoritmo de entrenamiento
cuántos ciclos debe esperar para restablecer la red neuronal si el nivel de
error no ha caído por debajo de la cantidad especificada.
El comando WhatIs acepta una imagen e intenta reconocerla. El ejemplo
imprimirá la identidad de la imagen que consideró más similar.
Vamos a echar un vistazo al ejemplo de reconocimiento de imagen. Este
ejemplo se puede encontrar en la siguiente ubicación.
Encog . Examples . Image . ImageNeuralNetwork
Parte del código del ejemplo anterior trata de analizar el archivo de script
y los argumentos. Dado que el análisis de cadenas no es realmente el
foco de este libro, nos centraremos en cómo se lleva a cabo cada
comando y cómo se construye la red neuronal. En las secciones
siguientes se explica cómo se implementa cada uno de estos comandos.
9.4 Ejemplo de reconocimiento de imagen 159
private void P r o c e s s C r e a t e T r a i n i n g ( ) {
El comando CreateTraining toma tres parámetros. Las siguientes líneas leen estos parámetros.
S t r i n g strWidth = GetArg ( ” width ” ) ;
S t r i n g s t r H e i g h t = GetArg ( ” h e i g h t ” ) ;
S t r i n g strType = GetArg ( ” type ” ) ;
El comando Input toma dos parámetros. Las siguientes líneas leen estos parámetros.
S t r i n g image = GetArg ( ” image ” ) ;
S t r i n g i d e n t i t y = GetArg ( ” i d e n t i t y ” ) ;
Por último, la nueva red neuronal se crea de acuerdo con los parámetros
especificados. El parámetro final verdadero especifica que nos gustaría
utilizar una función de activación tangente hiperbólica.
network = E n c o g U t i l i t y . SimpleFeedForward ( t r a i n i n g
. I n p u t S i z e , hidden1 , hidden2 ,
t r a i n i n g . I d e a l S i z e , true ) ;
El comando de tren toma cuatro parámetros. Las siguientes líneas leen estos parámetros.
i f ( network == null )
return ;
S t r i n g strMode = GetArg ( ”mode” ) ;
S t r i n g s t r M i n u t e s = GetArg ( ” minutes ” ) ;
S t r i n g s t r S t r a t e g y E r r o r = GetArg ( ” s t r a t e g y e r r o r ” ) ;
S t r i n g s t r S t r a t e g y C y c l e s = GetArg ( ” s t r a t e g y c y c l e s ” ) ;
Una vez que se leen los parámetros, muestre un mensaje indicando que
el entrenamiento ha comenzado.
app . WriteLine ( ” T r a i n i n g Beginning . . . Output p a t t e r n s=” +
outputCount ) ;
• HybridStrategy
• ResetStrategy
• SmartLearningRate
• SmartMomentum
• StopTrainingStrategy
t r a i n . AddStrategy (new R e s e t S t r a t e g y ( s t r a t e g y E r r o r ,
strategyCycles));
Si estamos usando el GUI, entonces debemos usar TrainDialog, de lo
contrario deberíamos usar TrainConsole.
9.4 Ejemplo de reconocimiento de
imagen 165
Una vez entrenada la red neuronal, está lista para reconocer las imágenes.
Esto se discute en la siguiente sección.
9.4.5 Reconocimiento de imágenes
El comando WhatIs se implementa mediante el método ProcessWhatIs.
Este método se muestra aquí.
public void ProcessWhatIs ( )
{
Capitulo 10
Uso de un mapa de
autoorganización
• ¿Qué es un mapa de auto-organización (SOM)?
• Formación de un SOM
• Copia de clúster
v n 2
d(p, w) = (pi − wi) (10.1)
u
i=1
X
u
t
Esto es muy similar a la Ecuación 2.3, mostrada en el Capítulo 2. En la
ecuación anterior la variable p representa el patrón de entrada. La
variable w representa el vector de pesos. Al cuadrar las diferencias entre
cada componente vectorial y tomar la raíz cuadrada de la suma
resultante, realizamos la distancia euclidiana. Esto mide cómo dife- rente
cada vector de peso es del patrón de entrenamiento de entrada.
Esta distancia se calcula para cada neurona de salida. La neurona de
salida con la distancia más corta se denomina la mejor unidad de
coincidencia (BMU). La BMU es la neurona que aprenderá más del patrón
de entrenamiento. Los vecinos del BMU aprenderán menos. Ahora que se
determina una BMU, haga un bucle sobre todos los pesos de la matriz.
Actualizar cada peso de acuerdo con la ecuación 10.2.
Wv (t + 1) = Wv (t) + θ (v, t) α (t) (D (t) - Wv (t)) (10.2)
En la ecuación anterior, la variable t representa el tiempo, o el número
de iteración. El propósito de la ecuación es calcular el vector de peso
resultante Wv (t + 1). El siguiente peso se calculará sumando al peso
actual, que es Wv (t). El objetivo final es calcular cuán diferente es el peso
actual del vector de entrada. La cláusula D (T) -Wv (t) logra esto. Si
simplemente añadimos este valor al peso, el peso coincidiría exactamente
con el vector de entrada. No queremos hacer esto. Como resultado, lo
escalamos multiplicándolo por dos razones. La primera razón,
representada por theta, es la función de vecindad. La segunda razón es
una tasa de aprendizaje que disminuye monotónicamente.
10.2.
Obtenemos los tres valores de peso de la matriz y utilizamos el método ConvertColor para
convertirlos a componentes RGB.
int red = ConvertColor ( this . network . Weights [ 0 , index]);
int g r e e n = ConvertColor ( this . network . Weights [ 1, i n d e x ] ) ;
int b l u e =ConvertColor ( this . network . Weights [ 2 , index]);
Este proceso continúa durante 1.000 iteraciones. Por la iteración final, los
colores se agruparán.
10.3 Resumen
Hasta este punto en el libro, todas las redes neuronales han sido
entrenados utilizando un algoritmo de entrenamiento supervisado. Este
capítulo introdujo entrenamiento no supervisado. El entrenamiento no
supervisado no proporciona retroalimentación a la red neuronal como las
tasas de error previamente examinadas.
Apendice A.
• Descargar Encog
• Ejemplos de Ejecución
Http://www.microsoft.com/visualstudio/en-us/products/2010-editions/ express
Los ejemplos de este libro se probaron con Microsoft Visual Studio 2010.
Estos ejemplos deberían ser compatibles con versiones anteriores. También
puede encontrar información útil sobre la configuración de Encog desde la
siguiente dirección web.
Http://www.heatonresearch.com/wiki/Encog_Examples
186 Instalación y uso de Encog
• encog-dotnet-dll
• encog-dotnet-core
• encog-workbench
• encog-core-cs
• encog-core-test
• EncogCmd
• OCR
• SOMColors
El proyecto principal se llama encog-core-cs. Aquí es donde reside el
actual framework Encog DLL. ConsoleExamples es una aplicación que
contiene todos los ejemplos de consola. Además, OCR y SOMColors son
ejemplos de GUI. El proyecto EncogCmd se utiliza para crear EncogCmd,
que es una interfaz de línea de comandos para Encog.
También debe notar en la Figura A.1 que uno de los proyectos está en
negrita. Este es el "Proyecto de Inicio".
188 Instalación y uso de Encog
Puede hacer clic con el botón secundario del mouse en cualquiera de los
proyectos y hacer que el proyecto "Inicio". Simplemente haga clic con el
botón derecho en un proyecto y seleccione "Establecer como proyecto de
inicio". Esto sólo puede hacerse en proyectos que sean ejecutables. No
puede establecer Encog Core como el proyecto de inicio, esto es porque
Encog Core es una DLL, y no se puede ejecutar por sí mismo.
Ahora vamos a dar un ejemplo. Asegúrese de que ConsoleExamples es
el "Proyecto de inicio". Para ejecutar uno de los ejemplos, debe ejecutar el
proyecto Con-soleExamples. Para ello, haga clic con el botón secundario en
ConsoleExamples y seleccione las propiedades del proyecto. Elija la ficha de
depuración de las propiedades del proyecto y verá la Figura A.2.
Figura A.2: Configuración de las propiedades del proyecto
namespace C o n s o l e A p p l i c a t i o n 1
{
public c l a s s Program
{
/// <summary>
/// I n p u t f o r t h e XOR f u n c t i o n .
/// </summary>
public s t a t i c double [ ] [ ] XORInput = {
new [ ] {0 . 0 , 0 . 0 } ,
new [ ] {1 . 0 , 0 . 0 } ,
new [ ] {0 . 0 , 1 . 0 } ,
new [ ] {1 . 0 , 1 . 0 }
};
/// <summary>
/// I d e a l o u t p u t f o r t h e XOR f u n c t i o n .
/// </summary>
public s t a t i c double [ ] [ ] XORIdeal = {
new [ ] {0 . 0 } ,
new [ ] {1 . 0 } ,
new [ ] {1 . 0 } ,
new [ ] {0 . 0 }
};
s t a t i c void Main ( string [ ] args)
{
// c r e a t e a n e u r a l network , w i t h o u t u s i n g a f a c t o r y
var network = new BasicNetwork ( ) ;
network . AddLayer (new B a s i c L a y e r ( null , true , 2) ) ;
network . AddLayer (new B a s i c L a y e r (new A c t i v a t i o n S i g m o i d ( ) ,
A.3 Utilizar el DLL Encog en su propia aplicación 193
true , 3) ) ;
network . AddLayer (new B a s i c L a y e r (new A c t i v a t i o n S i g m o i d ( ) ,
false , 1) ) ;
network . S t r u c t u r e . F i n a l i z e S t r u c t u
r e ( ) ; network . Reset ( ) ;
// c r e a t e t r a i n i n g d a t a
IMLDataSet t r a i n i n g S e t = new BasicMLDataSet ( XORInput ,
XORIdeal ) ;
// t r a i n t h e n e u r a l network
IMLTrain t r a i n = new R e s i l i e n t P r o p a g a t i o n ( network ,
trainingSet);
int epoch = 1 ;
do
{
train.Iteration();
Console . WriteLine (@” Epoch #” + epoch + @” E r r o r : ” + t r a i n .
Error);
epoch++;
} while ( t r a i n . E r r o r > 0 . 0 1 ) ;
// t e s t t h e n e u r a l network
Console . WriteLine (@” Neural Network R e s u l t s : ” ) ;
foreach ( IMLDataPair p a i r in t r a i n i n g S e t )
{
IMLData output = network . Compute ( p a i r . Input ) ;
Console . WriteLine ( p a i r . Input [ 0 ] + @” , ” + p a i r . Input [ 1 ]
+ @” , a c t u a l=” + output [ 0 ] + @” , i d e a l=” + p a i r . I d e a l [ 0 ] ) ;
}
}
}
}
Porque agregó Encog como una referencia, que el código anterior no
debería producir ningún error. Puede ejecutar este programa de ejemplo
haciendo clic en el botón Ejecutar en Visual Studio.
195
Glosario
Un medio por el cual los datos nominales son normalizados para una
red neuronal. A menudo proporciona mejores resultados que la
normalización competidora de uno-de-n.
Equilibrio: El punto en el cual las iteraciones adicionales a una red
neural térmica no producen ningún cambio significativo adicional.
Error Rate: El grado en que la salida de la red neural difiere de la
salida esperada.
Distancia euclidiana: La raíz cuadrada de los cuadrados de las
diferencias individuales en conjunto de datos. La distancia euclidiana se
utiliza a menudo para determinar qué vector es más similar a un vector de
comparación.
Evaluación: Es el proceso en el que se evalúa una red neuronal
entrenada en comparación con datos que no estaban en el grupo de
entrenamiento original.
Red neuronal Feedforward: Una red neuronal multicapa donde las
conexiones sólo fluyen hacia adelante.
Grupo de campos: Grupo de campos de salida de normalización que
dependen entre sí para calcular el valor de salida.
Forward Pass: Una de las dos pasadas en el entrenamiento de
propagación donde la salida de la red neuronal se calcula para un
elemento de entrenamiento.
Ventana del futuro: Los datos que una red neural temporal está
intentando predecir.
Gaussian Activation Function: Una activación basada en la función
gaussiana.
Función de vecindad gaussiana: función de vecindad, utilizada para un
mapa de autoorganización, basada en la función gaussiana.
Algoritmos Genéticos: Algoritmo de Inteligencia Artificial que intenta
derivar una solución simulando el proceso biológico de la selección
natural.
Error de gradiente: un valor que se calcula para conexiones
individuales en la red neuronal que puede proporcionar información sobre
cómo debe cambiarse el peso para reducir el error de la red neuronal.
Greedy Training: Una estrategia de entrenamiento donde se descartan
iteraciones que no disminuyen la tasa de error de una red neuronal.
Capa Oculta: Capas en una red neuronal que existe entre las capas de
entrada y salida.
199
Lesser GNU Public License (LGPL): Licencia bajo la cual Encog tiene
licencia.
Pasado Ventana: Los valores en los que una red neural temporal basa
las predicciones futuras.
Poda Selectiva: Método de poda donde las neuronas más débiles son
seleccionadas y eliminadas.
Red Neural Recurrente Simple (SRN): Una red neural que tiene una
conexión recurrente a través de una capa de contexto. Los tipos SRN
más típicos son las redes neuronales Elman y Jordan.
Simulated Annealing: Una técnica de entrenamiento que simula el
proceso de recocido metalúrgico.
Red Neural Temporal: Una red neuronal diseñada para aceptar datos
temporales, y generalmente, para obtener una predicción.
204 Glossary
Red Neural Térmica: Una red neuronal que contiene una temperatura;
Ejemplos incluyen la red neuronal de Hopfield y la máquina de Boltzmann.
Training Set: Datos que se usan para entrenar una red neuronal.
Synapse sin peso: Una matriz de peso que no tiene pesos, sólo
conexiones.
Index
activation function, xxviii, 12, 20, 41, array, xxiv–xxvi, 5, 6, 13, 14, 17, 21,
51–60, 62, 64, 69, 75, 77, 121, 28, 29, 33, 55, 97, 99, 101, 117,
142, 162, 171, 195–197, 199, 131, 132, 134, 148, 151, 174–
200, 202, 203 176, 178
activation functions, xxix, 12, 20, 41, attribute, vi, 3, 5, 21–23, 28, 31–33,
51, 53, 54, 58, 64, 69 37, 47–49
actual, xxii, xxv, 4, 20, 24, 26, 30, 36,
43, 68, 69, 90, 93, 95, 97, 111, backpropagation, xxix, 69–72, 74, 76,
115, 126–128, 133, 134, 143– 80, 103, 112,131, 164,174,
200, 202
146, 148, 152, 155, 160, 166, bias, 11, 13, 43, 52, 75, 171
174, 187, 195, 196, 201
actual data, 127, 133, 145 bias neuron, 11, 13, 43, 52, 75
actual output, 24, 26, 68, 69 binary, vii, 38, 63, 65, 122, 139
algorithm, xxiii, xxvii, xxix, 4, 14, 57, biological, xxiii, 197, 198, 201
67–74, 77–81, 83, 90, 94, 99– bipolar, 54, 55, 64, 115, 117, 196
104, 123, 141, 158, 170, 182, bipolar activation, 54
195, 198, 199, 202 black box, xxiv, 7
analyst, 37–39, 51 bot, ix, xxii, xxiv, xxvi, 8, 9, 17, 20,
annealing, xxix, 81, 83, 85, 90, 94, 99, 23, 29, 33, 37, 39, 41, 51, 58,
101–104, 112, 195, 197, 203 60, 61, 67, 74–76, 83, 94,97,
ant, vi–ix, xxiii, xxv–xxvii, 4, 17, 23, 99, 102, 104, 111, 112, 115,
24, 26, 27, 31, 32, 35, 41, 49, 119, 122, 127, 128, 132,133,
51, 54, 57, 58, 61, 63, 68, 70– 136, 139, 154, 155, 159,167,
77, 83, 84, 90–93, 97, 109, 112, 187, 196, 197, 199
128, 137–139, 141, 143, 151, bounding box, 153, 154
152, 155–157, 166, 167, 170, bounds, 153, 166, 167
brain, xxii–xxiv, 107, 122
173, 175–177, 180–182, 186, 189,
191, 196 calculate, 3, 26, 43, 57, 64, 68–70, 77,
206 INDEX
195, 200, 200, 44, 45, 49,
201, 203 202– 204 127–129,
84, 90,
classification, context 132, 133,
93, 97,
xxviii, 1– neuron, 135, 136,
134,
5, 16, 20, 108, 113, 148, 151,
145,
60, 115 114 155–157
146, close copyright decimal
156, d- , vii, ix point,
171, loop, c 31, 37
173, 130, s denorm
178, 132, v, alize,
195, 134 4 22, 23,
197, 198, close 0 27, 28
201, 203 st , derivative, 54–58,
class, xxviii, xxix, 60, 64, 69, 77, 195,
match 4
1–6, 12,
, xxv, 1
14–17,
182 ,
20, 21,
cluste 4
23–26,
r 3
28, 29,
data, ,
33, 51,
xxix, 4
53, 60,
118 4
62, 64,
clustering, 1, ,
73, 80,
4, 5, 16, 17, 4
83, 85,
117, 170 color 6
91, 93–
matching, 177 c
95, 99–
competitive, 56, s
101, 115,
64, 170, 176, 181, v
116, 118,
182 competitive fil
121, 125,
training, 170, 176 e
127, 128,
configuration, 7, ,
131,
38, 141, 199 4
135–
connection, vii, 8, 6
141, 143,
12, 43, 69, 107, current error, 15,
148, 151, 177
108,
155–157,
118, 119,
160, 166, dataset, 2–5, 20,
122, 198,
169, 170, 21, 23, 32,
177, 179, 33, 38, 39,
27, 28, 30, encoding, 5,
37, 39, 41, 17, 23, 25,
197 43, 45, 47, 26, 33, 155
double, 5, 6, 9,
48, 55, epoch, 15,
13, 35,
58–62, 16, 85, 86
39, 41,
68–71, 73, equilateral, 26,
42, 94,
74, 77, 78, 30, 32, 33, 166,
99, 101,
84, 85, 88, 201 equilateral
141,
90–92, 95, encoding, 26, 33
151,
97, 99, equilateral
177,
100, 107, normalization,
186
112, 113, 26, 30, 166,
download, vi, 115, 117, 201
16, 40, 120, 121, error, 7, 10, 14–
135, 128–130, 16, 24,
136, 132– 134, 25, 33,
138, 136–142, 43, 44,
148, 152, 156, 62–64,
177, 158, 159, 68, 69,
185, 161, 163, 71, 77,
186 164, 170, 112–114,
downsampling, 173– 175, 121, 128,
151, 178, 180– 129, 136,
155, 182, 196– 141, 158,
161, 200, 203 164, 177,
ega, vii–ix, 20, 181, 182,
166,
37, 58– 187, 193,
167, 195, 197,
60, 70,
202 71, 77, 198, 200,
edge detection, 84, 85, 202, 204
156 90–92, error level, 64,
eg, vii–ix, xxii, 100, 158
xxvi– 115, error rate, 14–16,
xxviii, 1, 175, 68, 112–114,
3–6, 12, 199, 203 121,
14, 16, encode, 5, 6,
17, 20– 23, 24, 33,
22, 25, 204
INDEX 207
204 136
129, expor generation gradient, 69, 70,
141, , 104, 120, 72, 74,
t, vii
164, 121, 144 77, 195,
181, factory, 75, 76 genetic, xxix, 81, 197,
feedforward, 10, 83, 85,
182, 200, 202
51, 57, 90, 94,
198, gradient
59, 60, 99– 104,
202, 204 descent,
62, 67, 123
evaluate, 1, 2, 69, 70,
23, 43, 69, 72, genetic
49, 64, 75, 80, algorithm, 74, 77
77, 137, 104, 107, xxix, 81, greedy,
138, 108, 110– 83, 90, 113
143, 112, 114, 94, 99–
144, 198 115, 118, 104, 123 hidden layer, 5,
120, 122, genetic 7–10, 12,
evaluation, 32,
123, 126, 13, 17,
44, 133, 139, algorithm
139, 142, 41, 43,
143–145 s, xxix,
151, 167, 52, 53,
example, xxiv– 81, 83,
171, 172, 59, 64,
xxvi, xxviii, 2, 5,
196 94, 99, 75, 78,
8, 10– 12, 14,
file, vii–ix, xxviii, 103, 104 108, 113,
16, 17, 20–24,
xxix, 2, 4, 118, 119,
26–29, 32, 43,
28–31, 123, 139,
44, 62, 63, 70–
35–47, 51, 141–
75, 78, 79, 83–
61–65, 97, 143, 158,
86, 90, 91, 95,
131, 138– 162, 197,
97, 99, 102,
140, 144, 199
103, 110–112,
145, 156– hidden neuron,
114, 115, 120,
158, 186, 10, 11,
126, 131, 137,
191, 197, 75, 108,
138, 141, 148,
200, 202, 119, 123,
155, 157, 158,
204 141,
160, 166, 170,
floating point, 199, 202
172, 177, 179–
xxiv–xxvi, hyperbolic
181, 185–
1 17, 21, tangent,
91, 33, 148 20, 52,
193, 53, 57–
generate
201, training,
60, 62,
64, 162, 166, input layer, xxiv,
142, 167, 169– xxv, 5–
162, 171, 173, 8, 12,
174, 177,
199 179–182, 17, 52,
ide, vi, viii, ix, 187, 191, 69, 78,
xxii, 196, 198– 118,
xxvi– 203 171
xxix, 1– ideal, xxvi,
6, 10, xxvii,
12–14, 13, 17,
17, 19– 24, 26,
27, 31– 37, 38,
33, 35– 44, 68,
39, 43, 69, 155,
44, 51– 157,
54, 56, 161,
58, 61, 170
63, 67– ideal output,
69, 71, 13, 17,
72, 77, 24, 26,
78, 80, 68, 69,
83, 84, 155,
88–90, 157,
93, 97, 161
99, 100, image, xxviii, xxix,
109, 111, 39, 49,
115, 118, 78, 148,
120, 151–162,
125, 165–167,
126, 196, 197,
128– 202
130, image file, 39
136, images, 148,
138, 151, 154–
141, 162, 165–
148, 167
151– initialized,
158, 16, 72, 163
160–
208 INDEX
181, 182, 171
195–200 linear
input neuron, 5, lun
functio
9, 10, 21, layer, xxiv, xxv, ar
n, 56,
41, 43, xxix, 5– 57, lan
62, 75, 13, 17, 200 der
96, 109, 41, 43, lma, xxix, 10, 13,
115, 117, 52, 53, ,
53, 64,
119, 120, 55, 57, 27,
107–114,
126, 141, 59, 60, 122, 196, 84,
154–156, 62, 64, 197, 201, 95
167, 171, 69, 75, 203
173, 178 78, 99, lun
local
input neurons, 5, 108, 111, ar
minima,
9, 41, 43, 113, 115, sur
69, 80,
62, 75, 118, 119, 112, 200 fac
96, 109, 122, 123, logarithmi
115, 117, 139, 141– e,
c, 57, 58
119, 120, 143, 158, 85,
lower resolution,
126, 141, 160, 162, 88
151, 167
154–156, 171, 182,
167, 171, 195–199, machine
173, 178 201–204 learning,
input pattern, learning method, xxi, xxviii,
xxiv, 117, 173, xxi, xxviii, 1, 2, 4,
182, 203 iris, 20– 2, 4, 43, 16, 35,
26, 29, 33, 38, 44, 49, 43, 44,
44–47, 49 120 49, 120
iris data, 20, 23, learning rate, magnitude, 70–
29, 33, 38, 44, 69–72, 72, 200
45, 49 iris 76, 77, market, xxix,
dataset, 20, 23, 80, 112, 125,
33, 38, 44, 45, 164, 173, 134–138,
49 iteration, 14– 174, 176, 141,
16, 53, 68–74, 180, 181, 143–
77, 78, 85, 100– 195 145, 148
102, 108, 112, market data, 135,
license, vii, 200
113, 121, 122, linear 136, 138, 143–
140, 142, 164, activati 145 matrix, 8,
172, 173, on, 57, 68–72, 112, 172,
173, 178,
195, 200, 170, 173–175, 67– 75,
204 179, 180, 77, 80,
mean, 1, 6, 20, 18 83–88,
23, 26, 2, 198 90, 91,
27, 37, neighborh 93– 96,
39, 58, ood 99–104,
61, 64, competitiv
107–123,
67, 68, e, 170
125–133,
70, 71, neighborhood
99, 104, function,
137, 173–
155, 175,
156, 179,
169, 180,
170, 182, 198
174, network output,
195– 6, 14
199, network type,
201, xxix, 5,
202, 204 6, 51,
midpoint, 177 104,
momentum, 69– 107,
72, 76, 80, 164 120,
multi- 122,
dimensional, 166,
175, 176, 179 167,
multicore, 80, 182,
197, 200 196, 201
neural network,
multithreaded,
xxi–xxix,
76–80, 197, 200,
1–8, 10–
203
17, 19,
multithreaded
20, 22–
training, 76, 78,
24, 26,
80, 197
32, 33,
ne-dimensional
37, 39,
neighborhood,
41–44,
174, 179
47, 49,
neighborhood,
51–65,
INDEX 209
137–148, 151, 152, 154, 155, 126, 127, 155, 160, 161, 170,
157, 158, 160, 162, 163, 165– 171, 173–176, 178, 182
167, 169–172, 174, 176–182, 190,output neurons, 6, 24–26, 33, 43, 114–
195–204 117, 126, 127, 155, 160, 161,
neural pilot, 86, 89, 90, 96, 98–102 170, 173, 174, 178
neuron, xxiii, xxiv, 5–7, 9–14, 21, 24– output pattern, xxiv
26, 33, 41, 43, 52, 55, 56, 59,
62, 69, 75, 78, 96, 98, 99, 108, parameter, 43, 69–74, 80, 92, 96, 128,
109, 113–120, 123, 126, 127, 131, 132, 156–160, 162–165, 179–
141–143, 154–156, 160–162, 166, 181, 201
167, 170, 171, 173–176, 178, pattern, xxiii–xxv, xxviii, 6, 11, 17,
182, 195–197, 199–203 107, 109, 113, 115–117, 122,
neuron output, 55, 59, 108 125, 129, 142, 154, 166, 170,
non-numeric data, 3, 33 171, 173, 174, 181, 182, 195,
non-winners, 56 199, 203
normalization, 5, 17, 20–24, 26–33, 39, pattern recognition, xxiii, xxviii, 6, 195,
199
44, 47, 49, 95, 166, 177, 198– persist, 51, 61–64, 139, 200, 202
201, 203
normalize, xxviii, 4, 17, 19–23, 25, 27– persistence, 51, 61–63, 200, 202
33, 39, 44, 49, 51, 95–97, 127, physical, viii, 90, 91, 152
130–133, 156, 198, 199, 201 physical simulation, 90, 91
normalized, 17, 19, 20, 22, 23, 25, 28– pilot, 84, 86, 88–90, 95, 96, 98–102
31, 33, 39, 49, 95, 96, 127, 130– pixel, 154–156
133, 156, 198, 199, 201 pixels, 154, 155
plot, 48
null, xxv
population, 99, 100, 120, 121
offspring, 99, 100, 197,
200 predict, xxviii, xxix, 6, 17, 24, 26, 28,
one-dimensional, 174, 175, 178, 179 40, 47, 109, 110, 113, 123, 125,
one-of-n, 23–26, 32, 33, 198 126, 128–130, 132–134, 136–
operating system, 35, 40, 61 138, 145, 146, 148, 198, 202,
output layer, xxiv, xxv, 5–9, 12, 13, 203
17, 52, 53, 57, 60, 69, 75, 78, prediction, xxviii, 28, 40, 109, 113, 123,
113, 115, 118, 123, 160, 171, 125, 128–130, 132–134, 137, 138,
182, 199 148, 202, 203
output neuron, 6, 7, 9, 10, 14, 24–26, problem, xxii, xxiv, xxvi–xxviii, 1, 4,
33, 41, 43, 75, 96, 98, 114–120, 6–8, 10, 11, 14, 20, 24, 25, 69,
210 INDEX