Este documento contiene información sobre algoritmos. Explica que un algoritmo es un conjunto de instrucciones bien definidas para resolver un problema mediante pasos sucesivos. Los algoritmos pueden expresarse de varias maneras como diagramas de flujo, pseudocódigo o lenguajes de programación. También describe conceptos como variables, estructuras secuenciales, análisis de algoritmos y más.
1. PDF generado usando el kit de herramientas de fuente abierta mwlib. Ver http://code.pediapress.com/ para mayor información.
PDF generated at: Thu, 13 Mar 2014 06:07:07 UTC
Los Cpu
los tipos de asistemas
2. Contenidos
Artículos
Algoritmo 1
Aprendizaje automático 8
Red neuronal artificial 11
Referencias
Fuentes y contribuyentes del artículo 17
Fuentes de imagen, Licencias y contribuyentes 18
Licencias de artículos
Licencia 19
3. Algoritmo 1
Algoritmo
Los diagramas de flujo sirven para representar
algoritmos de manera gráfica.
En matemáticas, lógica, ciencias de la computación y disciplinas
relacionadas, un algoritmo (del griego y latín, dixit algorithmus y este
a su vez del matemático persa Al-Juarismi) es un conjunto prescrito de
instrucciones o reglas bien definidas, ordenadas y finitas que permite
realizar una actividad mediante pasos sucesivos que no generen dudas
a quien deba realizar dicha actividad.
[1]
Dados un estado inicial y una
entrada, siguiendo los pasos sucesivos se llega a un estado final y se
obtiene una solución. Los algoritmos son el objeto de estudio de la
algoritmia.
En la vida cotidiana, se emplean algoritmos frecuentemente para
resolver problemas. Algunos ejemplos son los manuales de usuario,
que muestran algoritmos para usar un aparato, o las instrucciones que
recibe un trabajador por parte de su patrón. Algunos ejemplos en
matemática son el algoritmo de multiplicación, para calcular el
producto, el algoritmo de la división para calcular el cociente de dos
números, el algoritmo de Euclides para obtener el máximo común
divisor de dos enteros positivos, o el método de Gauss para resolver un
sistema lineal de ecuaciones.
Definición formal
En general, no existe ningún consenso definitivo en cuanto a la definición formal de algoritmo. Muchos autores los
señalan como listas de instrucciones para resolver un cálculo o un problema abstracto, es decir, que un número finito
de pasos convierten los datos de un problema (entrada) en una solución (salida). Sin embargo cabe notar que algunos
algoritmos no necesariamente tienen que terminar o resolver un problema en particular. Por ejemplo, una versión
modificada de la criba de Eratóstenes que nunca termine de calcular números primos no deja de ser un algoritmo.
A lo largo de la historia varios autores han tratado de definir formalmente a los algoritmos utilizando modelos
matemáticos. Esto fue realizado por Alonzo Church en 1936 con el concepto de "calculabilidad efectiva" basada en
su cálculo lambda y por Alan Turing basándose en la máquina de Turing. Los dos enfoques son equivalentes, en el
sentido en que se pueden resolver exactamente los mismos problemas con ambos enfoques. Sin embargo, estos
modelos están sujetos a un tipo particular de datos como son números, símbolos o gráficas mientras que, en general,
los algoritmos funcionan sobre una vasta cantidad de estructuras de datos. En general, la parte común en todas las
definiciones se puede resumir en las siguientes tres propiedades siempre y cuando no consideremos algoritmos
paralelos:
Tiempo secuencial. Un algoritmo funciona en tiempo discretizado –paso a paso–, definiendo así una
secuencia de estados "computacionales" por cada entrada válida (la entrada son los datos que se le suministran
al algoritmo antes de comenzar).
Estado abstracto. Cada estado computacional puede ser descrito formalmente utilizando una estructura de
primer orden y cada algoritmo es independiente de su implementación (los algoritmos son objetos abstractos)
de manera que en un algoritmo las estructuras de primer orden son invariantes bajo isomorfismo.
Exploración acotada. La transición de un estado al siguiente queda completamente determinada por una
descripción fija y finita; es decir, entre cada estado y el siguiente solamente se puede tomar en cuenta una
cantidad fija y limitada de términos del estado actual.
4. Algoritmo 2
En resumen, un algoritmo es cualquier cosa que funcione paso a paso, donde cada paso se pueda describir sin
ambigüedad y sin hacer referencia a una computadora en particular, y además tiene un límite fijo en cuanto a la
cantidad de datos que se pueden leer/escribir en un solo paso. Esta amplia definición abarca tanto a algoritmos
prácticos como aquellos que solo funcionan en teoría, por ejemplo el método de Newton y la eliminación de
Gauss-Jordan funcionan, al menos en principio, con números de precisión infinita; sin embargo no es posible
programar la precisión infinita en una computadora, y no por ello dejan de ser algoritmos. En particular es posible
considerar una cuarta propiedad que puede ser usada para validar la tesis de Church-Turing de que toda función
calculable se puede programar en una máquina de Turing (o equivalentemente, en un lenguaje de programación
suficientemente general):
Aritmetizabilidad. Solamente operaciones innegablemente calculables están disponibles en el paso inicial.
Medios de expresión de un algoritmo
Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocódigo, diagramas
de flujo y lenguajes de programación entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y
extensas. El usar pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje natural. Dichas
expresiones son formas más estructuradas para representar algoritmos; no obstante, se mantienen independientes de
un lenguaje de programación específico.
La descripción de un algoritmo usualmente se hace en tres niveles:
1. Descripción de alto nivel. Se establece el problema, se selecciona un modelo matemático y se explica el
algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo detalles.
2. Descripción formal. Se usa pseudocódigo para describir la secuencia de pasos que encuentran la solución.
3. Implementación. Se muestra el algoritmo expresado en un lenguaje de programación específico o algún objeto
capaz de llevar a cabo instrucciones.
También es posible incluir un teorema que demuestre que el algoritmo es correcto, un análisis de complejidad o
ambos.
Diagrama de flujo
5. Algoritmo 3
Diagrama de flujo que expresa un algoritmo para
calcular la raíz cuadrada de un número
Los diagramas de flujo son descripciones gráficas de algoritmos; usan
símbolos conectados con flechas para indicar la secuencia de
instrucciones y están regidos por ISO.
Los diagramas de flujo son usados para representar algoritmos
pequeños, ya que abarcan mucho espacio y su construcción es
laboriosa. Por su facilidad de lectura son usados como introducción a
los algoritmos, descripción de un lenguaje y descripción de procesos a
personas ajenas a la computación.
Los algoritmos pueden ser expresados de muchas maneras, incluyendo
al lenguaje natural, pseudocódigo, diagramas de flujo y lenguajes de
programación entre otros. Las descripciones en lenguaje natural
tienden a ser ambiguas y extensas. El usar pseudocódigo y diagramas
de flujo evita muchas ambigüedades del lenguaje natural. Dichas
expresiones son formas más estructuradas para representar algoritmos;
no obstante, se mantienen independientes de un lenguaje de
programación específico.
Pseudocódigo
El pseudocódigo (falso lenguaje, el prefijo pseudo significa falso) es una descripción de alto nivel de un algoritmo
que emplea una mezcla de lenguaje natural con algunas convenciones sintácticas propias de lenguajes de
programación, como asignaciones, ciclos y condicionales, aunque no está regido por ningún estándar. Es utilizado
para describir algoritmos en libros y publicaciones científicas, y como producto intermedio durante el desarrollo de
un algoritmo, como los diagramas de flujo, aunque presentan una ventaja importante sobre estos, y es que los
algoritmos descritos en pseudocódigo requieren menos espacio para representar instrucciones complejas.
El pseudocódigo está pensado para facilitar a las personas el entendimiento de un algoritmo, y por lo tanto puede
omitir detalles irrelevantes que son necesarios en una implementación. Programadores diferentes suelen utilizar
convenciones distintas, que pueden estar basadas en la sintaxis de lenguajes de programación concretos. Sin
embargo, el pseudocódigo, en general, es comprensible sin necesidad de conocer o utilizar un entorno de
programación específico, y es a la vez suficientemente estructurado para que su implementación se pueda hacer
directamente a partir de él.
Así el pseudodocódigo cumple con las funciones antes mencionadas para representar algo abstracto los protocolos
son los lenguajes para la programación. Busque fuentes más precisas para tener mayor comprensión del tema.
Sistemas formales
La teoría de autómatas y la teoría de funciones recursivas proveen modelos matemáticos que formalizan el concepto
de algoritmo. Los modelos más comunes son la máquina de Turing, máquina de registro y funciones μ-recursivas.
Estos modelos son tan precisos como un lenguaje máquina, careciendo de expresiones coloquiales o ambigüedad, sin
embargo se mantienen independientes de cualquier computadora y de cualquier implementación.
Implementación
Muchos algoritmos son ideados para implementarse en un programa. Sin embargo, los algoritmos pueden ser
implementados en otros medios, como una red neuronal, un circuito eléctrico o un aparato mecánico y eléctrico.
Algunos algoritmos inclusive se diseñan especialmente para implementarse usando lápiz y papel. El algoritmo de
multiplicación tradicional, el algoritmo de Euclides, la criba de Eratóstenes y muchas formas de resolver la raíz
cuadrada son sólo algunos ejemplos.
6. Algoritmo 4
Variables
Son elementos que toman valores específicos de un tipo de datos concreto. La declaración de una variable puede
realizarse comenzando con var. Principalmente, existen dos maneras de otorgar valores iniciales a variables:
1.1. Mediante una sentencia de asignación.
2.2. Mediante un procedimiento de entrada de datos (por ejemplo: 'read').
Ejemplo:
...
i:=1;
read(n);
while i < n do begin
(* cuerpo del bucle *)
i := i + 1
end;
...
Estructuras secuenciales
La estructura secuencial es aquella en la que una acción sigue a otra en secuencia. Las operaciones se suceden de tal
modo que la salida de una es la entrada de la siguiente y así sucesivamente hasta el fin del proceso. La asignación de
esto consiste, en el paso de valores o resultados a una zona de la memoria. Dicha zona será reconocida con el nombre
de la variable que recibe el valor. La asignación se puede clasificar de la siguiente forma:
1. Simples: Consiste en pasar un valor constante a una variable (a ← 15)
2. Contador: Consiste en usarla como un verificador del número de veces que se realiza un proceso (a ← a + 1)
3. Acumulador: Consiste en usarla como un sumador en un proceso (a ← a + b)
4. De trabajo: Donde puede recibir el resultado de una operación matemática que involucre muchas variables (a ←
c + b*2/4).
Un ejemplo de estructura secuencial, como obtener la área de un triángulo:
Inicio
...
float b, h, a;
printf("Diga la base");
scanf("%f", &b);
printf("Diga la altura");
scanf("%f", &h);
a = (b*h)/2;
printf("El área del triángulo es %f", a)
...
Fin
Algoritmos como funciones
7. Algoritmo 5
Esquemática de un algoritmo solucionando un problema de ciclo hamiltoniano.
Un algoritmo se puede concebir como
una función que transforma los datos
de un problema (entrada) en los datos
de una solución (salida). Más aun, los
datos se pueden representar a su vez
como secuencias de bits, y en general,
de símbolos cualesquiera. Como cada secuencia de bits representa a un número natural (véase Sistema binario),
entonces los algoritmos son en esencia funciones de los números naturales en los números naturales que sí se pueden
calcular. Es decir que todo algoritmo calcula una función donde cada número natural es la
codificación de un problema o de una solución.
En ocasiones los algoritmos son susceptibles de nunca terminar, por ejemplo, cuando entran a un bucle infinito.
Cuando esto ocurre, el algoritmo nunca devuelve ningún valor de salida, y podemos decir que la función queda
indefinida para ese valor de entrada. Por esta razón se considera que los algoritmos son funciones parciales, es decir,
no necesariamente definidas en todo su dominio de definición.
Cuando una función puede ser calculada por medios algorítmicos, sin importar la cantidad de memoria que ocupe o
el tiempo que se tarde, se dice que dicha función es computable. No todas las funciones entre secuencias datos son
computables. El problema de la parada es un ejemplo.
Análisis de algoritmos
Como medida de la eficiencia de un algoritmo, se suelen estudiar los recursos (memoria y tiempo) que consume el
algoritmo. El análisis de algoritmos se ha desarrollado para obtener valores que de alguna forma indiquen (o
especifiquen) la evolución del gasto de tiempo y memoria en función del tamaño de los valores de entrada.
El análisis y estudio de los algoritmos es una disciplina de las ciencias de la computación y, en la mayoría de los
casos, su estudio es completamente abstracto sin usar ningún tipo de lenguaje de programación ni cualquier otra
implementación; por eso, en ese sentido, comparte las características de las disciplinas matemáticas. Así, el análisis
de los algoritmos se centra en los principios básicos del algoritmo, no en los de la implementación particular. Una
forma de plasmar (o algunas veces "codificar") un algoritmo es escribirlo en pseudocódigo o utilizar un lenguaje
muy simple tal como Lexico, cuyos códigos pueden estar en el idioma del programador.
Algunos escritores restringen la definición de algoritmo a procedimientos que deben acabar en algún momento,
mientras que otros consideran procedimientos que podrían ejecutarse eternamente sin pararse, suponiendo el caso en
el que existiera algún dispositivo físico que fuera capaz de funcionar eternamente. En este último caso, la
finalización con éxito del algoritmo no se podría definir como la terminación de este con una salida satisfactoria,
sino que el éxito estaría definido en función de las secuencias de salidas dadas durante un periodo de vida de la
ejecución del algoritmo. Por ejemplo, un algoritmo que verifica que hay más ceros que unos en una secuencia binaria
infinita debe ejecutarse siempre para que pueda devolver un valor útil. Si se implementa correctamente, el valor
devuelto por el algoritmo será válido, hasta que evalúe el siguiente dígito binario. De esta forma, mientras evalúa la
siguiente secuencia podrán leerse dos tipos de señales: una señal positiva (en el caso de que el número de ceros sea
mayor que el de unos) y una negativa en caso contrario. Finalmente, la salida de este algoritmo se define como la
devolución de valores exclusivamente positivos si hay más ceros que unos en la secuencia y, en cualquier otro caso,
devolverá una mezcla de señales positivas y negativas.
8. Algoritmo 6
Ejemplo de algoritmo
El problema consiste en encontrar el máximo de un conjunto de números. Para un ejemplo más complejo véase
Algoritmo de Euclides.
Descripción de alto nivel
Dado un conjunto finito de números, se tiene el problema de encontrar el número más grande. Sin pérdida de
generalidad se puede asumir que dicho conjunto no es vacío y que sus elementos están numerados como
.
Es decir, dado un conjunto se pide encontrar tal que para todo elemento
que pertenece al conjunto .
Para encontrar el elemento máximo, se asume que el primer elemento ( ) es el máximo; luego, se recorre el
conjunto y se compara cada valor con el valor del máximo número encontrado hasta ese momento. En el caso que un
elemento sea mayor que el máximo, se asigna su valor al máximo. Cuando se termina de recorrer la lista, el máximo
número que se ha encontrado es el máximo de todo el conjunto.
Descripción formal
El algoritmo puede ser escrito de una manera más formal en el siguiente pseudocódigo:
Algoritmo Encontrar el máximo de un conjunto
función max( )
// es un conjunto no vacío de números//
← // es el número de elementos de //
←
para ← hasta hacer
si entonces
←
devolver
Sobre la notación:
• "←" representa una asignación: ← significa que la variable toma el valor de ;
• "devolver" termina el algoritmo y devuelve el valor a su derecha (en este caso, el máximo de ).
Implementación
En lenguaje C++:
int max(int c[], int n)
{
int i, m = c[0];
for (i = 1; i < n; i++)
if (c[i] > m) m = c[i];
return m;
}
9. Algoritmo 7
Referencias
[1] Real Academia Española. Diccionario de la lengua española (http://buscon.rae.es/draeI/SrvltGUIBusUsual?TIPO_HTML=2&
TIPO_BUS=3&LEMA=algoritmo) "Conjunto ordenado y finito de operaciones que permite hallar la solución de un problema."
Bibliografía
• Fundamentos de Algoritmia, G. Brassard y P. Bratley. (ISBN 848966000X)
• The Art of Computer Programming, Knuth, D. E. [quien fue también, el creador del TeX]
• Introduction to Algorithms (2nd ed), Cormen, T. H., Leiserson, C. E., Rivest, R. L. y Stein, C.
• Introduction to Algorithms. A Creative Approach, Mamber, U.
• Algorithms in C (3r ed), Sedgewick, R. (también existen versiones en C++ y Java)
•• The Design and Analysis of Computer Algorithms, Aho, A.
Enlaces externos
Wikilibros
• Wikilibros alberga un libro o manual sobre Algoritmia.
• Wikcionario tiene definiciones y otra información sobre algoritmo.Wikcionario
• Portal de algoritmia (http://www.algoritmia.net)
• Técnicas de Diseño de Algoritmos (http://www.lcc.uma.es/~av/Libro/) manual que explica y ejemplifica los
distintos paradigmas de diseño de algoritmos. Rosa Guerequeta y Antonio Vallecillo (profesores de la
Universidad de Málaga).
• Transparencias de la asignatura "Esquemas Algorítmicos", Campos, J. (http://webdiis.unizar.es/asignaturas/
EDA/)
• Apuntes y problemas de Algorítmica por Domingo Giménez Cánovas (http://dis.um.es/~domingo/alg.html)
• Curso de Diseño de Algoritmos de Carlos Pes (http://www.carlospes.com/curso_de_algoritmos/)
• Algoritmos y Diagramas de Flujo (http://snippets-tricks.org/algoritmos-y-diagramas-de-flujo/)
10. Aprendizaje automático 8
Aprendizaje automático
El aprendizaje automático o aprendizaje de máquinas es una rama de la inteligencia artificial cuyo objetivo es
desarrollar técnicas que permitan a las computadoras aprender. De forma más concreta, se trata de crear programas
capaces de generalizar comportamientos a partir de una información no estructurada suministrada en forma de
ejemplos. Es, por lo tanto, un proceso de inducción del conocimiento. En muchas ocasiones el campo de actuación
del aprendizaje automático se solapa con el de la estadística, ya que las dos disciplinas se basan en el análisis de
datos. Sin embargo, el aprendizaje automático se centra más en el estudio de la complejidad computacional de los
problemas. Muchos problemas son de clase NP-hard, por lo que gran parte de la investigación realizada en
aprendizaje automático está enfocada al diseño de soluciones factibles a esos problemas. El aprendizaje automático
puede ser visto como un intento de automatizar algunas partes del método científico mediante métodos matemáticos.
El aprendizaje automático tiene una amplia gama de aplicaciones, incluyendo motores de búsqueda, diagnósticos
médicos, detección de fraude en el uso de tarjetas de crédito, análisis del mercado de valores, clasificación de
secuencias de ADN, reconocimiento del habla y del lenguaje escrito, juegos y robótica.
Aprendizaje automático
Interacción Hombre-Máquina
Algunos sistemas de Aprendizaje Automático intentan eliminar toda
necesidad de intuición o conocimiento experto de los procesos de
análisis de datos, mientras otros tratan de establecer un marco de
colaboración entre el experto y la computadora. De todas formas, la
intuición humana no puede ser reemplazada en su totalidad, ya que el
diseñador del sistema ha de especificar la forma de representación de
los datos y los métodos de manipulación y caracterización de los
mismos.
Tipos de algoritmos
Los diferentes algoritmos de Aprendizaje Automático se agrupan en una taxonomía en función de la salida de los
mismos. Algunos tipos de algoritmos son:
Aprendizaje supervisado
El algoritmo produce una función que establece una correspondencia entre las entradas y las salidas deseadas
del sistema. Un ejemplo de este tipo de algoritmo es el problema de clasificación, donde el sistema de
aprendizaje trata de etiquetar (clasificar) una serie de vectores utilizando una entre varias categorías (clases).
La base de conocimiento del sistema está formada por ejemplos de etiquetados anteriores. Este tipo de
aprendizaje puede llegar a ser muy útil en problemas de investigación biológica, biología computacional y
bioinformática.
Aprendizaje no supervisado
Todo el proceso de modelado se lleva a cabo sobre un conjunto de ejemplos formado tan sólo por entradas al
sistema. No se tiene información sobre las categorías de esos ejemplos. Por lo tanto, en este caso, el sistema
tiene que ser capaz de reconocer patrones para poder etiquetar las nuevas entradas.
Aprendizaje semisupervisado
Este tipo de algoritmos combinan los dos algoritmos anteriores para poder clasificar de manera adecuada. Se
tiene en cuenta los datos marcados y los no marcados.
11. Aprendizaje automático 9
Aprendizaje por refuerzo
El algoritmo aprende observando el mundo que le rodea. Su información de entrada es el feedback o
retroalimentación que obtiene del mundo exterior como respuesta a sus acciones. Por lo tanto, el sistema
aprende a base de ensayo-error.
Transducción
Similar al aprendizaje supervisado, pero no construye de forma explícita una función. Trata de predecir las
categorías de los futuros ejemplos basándose en los ejemplos de entrada, sus respectivas categorías y los
ejemplos nuevos al sistema.
Aprendizaje multi-tarea
Métodos de aprendizaje que usan conocimiento previamente aprendido por el sistema de cara a enfrentarse a
problemas parecidos a los ya vistos.
El análisis computacional y de rendimiento de los algoritmos de aprendizaje automático es una rama de la estadística
conocida como teoría computacional del aprendizaje.
El aprendizaje automático las personas lo llevamos a cabo de manera automática ya que es un proceso tan sencillo
para nosotros que ni nos damos cuenta de cómo se realiza y todo lo que implica. Desde que nacemos hasta que
morimos los seres humanos llevamos a cabo diferentes procesos, entre ellos encontramos el de aprendizaje por
medio del cual adquirimos conocimientos, desarrollamos habilidades para analizar y evaluar a través de métodos y
técnicas así como también por medio de la experiencia propia. Sin embargo, a las máquinas hay que indicarles cómo
aprender, ya que si no se logra que una máquina sea capaz de desarrollar sus habilidades, el proceso de aprendizaje
no se estará llevando a cabo, sino que solo será una secuencia repetitiva. También debemos tener en cuenta que el
tener conocimiento o el hecho de realizar bien el proceso de aprendizaje automático no implica que se sepa utilizar,
es preciso saber aplicarlo en las actividades cotidianas, y un buen aprendizaje también implica saber cómo y cuándo
utilizar nuestros conocimientos.
Para llevar a cabo un buen aprendizaje es necesario considerar todos los factores que a este le rodean, como la
sociedad, la economía, la ciudad, el ambiente, el lugar, etc. Por lo tanto, es necesario empezar a tomar diversas
medidas para lograr un aprendizaje adecuado, y obtener una automatización adecuada del aprendizaje. Así, lo
primero que se debe tener en cuenta es el concepto de conocimiento, que es el entendimiento de un determinado
tema o materia en el cual tu puedas dar tu opinión o punto de vista, así como responder a ciertas interrogantes que
puedan surgir de dicho tema o materia.
En el aprendizaje automático podemos obtener 3 tipos de conocimiento, que son:
1. Crecimiento
Es el que se adquiere de lo que nos rodea, el cual guarda la información en la memoria como si dejara huellas.
2. Reestructuración
Al interpretar los conocimientos el individuo razona y genera nuevo conocimiento al cual se le llama de
reestructuración.
3. Ajuste
Es el que se obtiene al generalizar varios conceptos o generando los propios.
Los tres tipos se efectúan durante un proceso de aprendizaje automático pero la importancia de cada tipo de
conocimiento depende de las características de lo que se está tratando de aprender.
El aprendizaje es más que una necesidad, es un factor primordial para satisfacer las necesidades de la inteligencia
artificial.
12. Aprendizaje automático 10
Aplicaciones
•• Motores de búsqueda
•• Diagnóstico médico
•• Detección de fraudes con el uso de tarjetas de crédito
•• Análisis del mercado de valores
• Clasificación de secuencias de ADN
•• Reconocimiento del habla
•• Robótica
Temas del aprendizaje automático
A continuación se muestran una serie de temas que podrían formar parte del temario de un curso sobre aprendizaje
automático.
• Modelado de funciones de densidad de probabilidad condicionadas: clasificación y regresión
•• Redes neuronales artificiales
•• Árboles de decisión
•• Modelos de regresión múltiple no postulados
•• Regresión en procesos Gaussianos
•• Análisis de discriminantes lineales
•• k-vecinos más próximos
•• Perceptrón
•• Funciones de base radial
•• Máquinas de soporte vectorial
• Modelado de funciones de densidad de probabilidad mediante modelos generativos
•• Algoritmo EM
• Modelos gráficos, como las redes bayesianas y los campos aleatorios de Markov
•• Mapeado topográfico generativo
•• Técnicas de inferencia aproximada
• Cadenas de Markov y Método de Montecarlo
•• Métodos variacionales
• Optimización: La mayoría de los métodos descritos arriba usan algoritmos de optimización o son por sí mismos
instancias de problemas de optimización.
Enlaces externos
• Machine Learning Development with Perl
[1]
(en inglés)
• Weka
[2]
Software open-source
• Grupo de investigación - Sistemas Inteligentes
[3]
Bibliografía
• Mitchell, T. (1997). Machine Learning, McGraw Hill. ISBN 0-07-042807-7
Referencias
[1] http://www.perlmonks.org/index.pl?node_id=638391
[2] http://www.cs.waikato.ac.nz/ml/weka
[3] http://web.archive.org/web/http://www.esp.uem.es/gsi/
13. Red neuronal artificial 11
Red neuronal artificial
Red neuronal artificial perceptrón multicapa con n neuronas de entrada, m neuronas en su
capa oculta y una neurona de escape.
Las redes de neuronas artificiales
(denominadas habitualmente como
RNA o en inglés como: "ANN"
[1]
) son
un paradigma de aprendizaje y
procesamiento automático inspirado en
la forma en que funciona el sistema
nervioso de los animales. Se trata de
un sistema de interconexión de
neuronas que colaboran entre sí para
producir un estímulo de salida. En
inteligencia artificial es frecuente
referirse a ellas como redes de
neuronas o redes neuronales.
Historia
Los primeros modelos de redes neuronales datan de 1943 por los neurólogos McCulloch y Pitts. Años más tarde, en
1949, Donald Hebb desarrolló sus ideas sobre el aprendizaje neuronal, quedando reflejado en la "regla de Hebb". En
1958, Rosemblatt desarrolló el perceptrón simple, y en 1960, Widrow y Hoff desarrollaron el ADALINE, que fue la
primera aplicación industrial real.
En los años siguientes, se redujo la investigación, debido a la falta de modelos de aprendizaje y el estudio de Minsky
y Papert sobre las limitaciones del perceptrón. Sin embargo, en los años 80, volvieron a resurgir las RNA gracias al
desarrollo de la red de Hopfield, y en especial, al algoritmo de aprendizaje de retropropagación ideado por
Rumelhart y McLellan en 1986 que fue aplicado en el desarrollo de los perceptrones multicapa.
[2]
Propiedades
Perceptrón con 2 entradas.
Una red neuronal se compone de unidades llamadas
neuronas. Cada neurona recibe una serie de entradas a
través de interconexiones y emite una salida. Esta
salida viene dada por tres funciones:
1. Una función de propagación (también conocida
como función de excitación), que por lo general
consiste en el sumatorio de cada entrada
multiplicada por el peso de su interconexión (valor
neto). Si el peso es positivo, la conexión se
denomina excitatoria; si es negativo, se denomina inhibitoria.
2. Una función de activación, que modifica a la anterior. Puede no existir, siendo en este caso la salida la misma
función de propagación.
3. Una función de transferencia, que se aplica al valor devuelto por la función de activación. Se utiliza para acotar la
salida de la neurona y generalmente viene dada por la interpretación que queramos darle a dichas salidas. Algunas
de las más utilizadas son la función sigmoidea (para obtener valores en el intervalo [0,1]) y la tangente
hiperbólica (para obtener valores en el intervalo [-1,1]).
14. Red neuronal artificial 12
Diseño y programación de una RNA (red neuronal artificial)
Con un paradigma convencional de programación en ingeniería del software, el objetivo del programador es modelar
matemáticamente (con distintos grados de formalismo) el problema en cuestión y posteriormente formular una
solución (programa) mediante un algoritmo codificado que tenga una serie de propiedades que permitan resolver
dicho problema. En contraposición, la aproximación basada en las RNA parte de un conjunto de datos de entrada
suficientemente significativo y el objetivo es conseguir que la red aprenda automáticamente las propiedades
deseadas. En este sentido, el diseño de la red tiene menos que ver con cuestiones como los flujos de datos y la
detección de condiciones, y más que ver con cuestiones tales como la selección del modelo de red, la de las variables
a incorporar y el preprocesamiento de la información que formará el conjunto de entrenamiento. Asimismo, el
proceso por el que los parámetros de la red se adecuan a la resolución de cada problema no se denomina
genéricamente programación sino que se suele denominar entrenamiento neuronal.
Por ejemplo en una red que se va a aplicar al diagnóstico de imágenes médicas; durante la fase de entrenamiento el
sistema recibe imágenes de tejidos que se sabe son cancerígenos y tejidos que se sabe son sanos, así como las
respectivas clasificaciones de dichas imágenes. Si el entrenamiento es el adecuado, una vez concluido, el sistema
podrá recibir imágenes de tejidos no clasificados y obtener su clasificación sano/no sano con un buen grado de
seguridad. Las variables de entrada pueden ser desde los puntos individuales de cada imagen hasta un vector de
características de las mismas que se puedan incorporar al sistema (por ejemplo, procedencia anatómica del tejido de
la imagen o la edad del paciente al que se le extrajo la muestra).
Estructura
La mayoría de los científicos coinciden en que una RNA es muy diferente en términos de estructura de un cerebro
animal. Al igual que el cerebro, una RNA se compone de un conjunto masivamente paralelo de unidades de proceso
muy simples y es en las conexiones entre estas unidades donde reside la inteligencia de la red. Sin embargo, en
términos de escala, un cerebro es muchísimo mayor que cualquier RNA creada hasta la actualidad, y las neuronas
artificiales también son más simples que su contrapartida animal.
Biológicamente, un cerebro aprende mediante la reorganización de las conexiones sinápticas entre las neuronas que
lo componen. De la misma manera, las RNA tienen un gran número de procesadores virtuales interconectados que
de forma simplificada simulan la funcionalidad de las neuronas biológicas. En esta simulación, la reorganización de
las conexiones sinápticas biológicas se modela mediante un mecanismo de pesos, que son ajustados durante la fase
de aprendizaje. En una RNA entrenada, el conjunto de los pesos determina el conocimiento de esa RNA y tiene la
propiedad de resolver el problema para el que la RNA ha sido entrenada.
Por otra parte, en una RNA, además de los pesos y las conexiones, cada neurona tiene asociada una función
matemática denominada función de transferencia. Dicha función genera la señal de salida de la neurona a partir de
las señales de entrada. La entrada de la función es la suma de todas las señales de entrada por el peso asociado a la
conexión de entrada de la señal. Algunos ejemplos de entradas son la función escalón de Heaviside, la lineal o mixta,
la sigmoide y la función gaussiana, recordando que la función de transferencia es la relación entre la señal de salida y
la entrada.
15. Red neuronal artificial 13
Ventajas
Las redes neuronales artificiales (RNA) tienen muchas ventajas debido a que están basadas en la estructura del
sistema nervioso, principalmente el cerebro.
• Aprendizaje: Las RNA tienen la habilidad de aprender mediante una etapa que se llama etapa de aprendizaje.
Esta consiste en proporcionar a la RNA datos como entrada a su vez que se le indica cuál es la salida (respuesta)
esperada.
• Auto organización: Una RNA crea su propia representación de la información en su interior, descargando al
usuario de esto.
• Tolerancia a fallos: Debido a que una RNA almacena la información de forma redundante, ésta puede seguir
respondiendo de manera aceptable aun si se daña parcialmente.
• Flexibilidad: Una RNA puede manejar cambios no importantes en la información de entrada, como señales con
ruido u otros cambios en la entrada (por ejemplo si la información de entrada es la imagen de un objeto, la
respuesta correspondiente no sufre cambios si la imagen cambia un poco su brillo o el objeto cambia
ligeramente).
• Tiempo real: La estructura de una RNA es paralela, por lo cual si esto es implementado con computadoras o en
dispositivos electrónicos especiales, se pueden obtener respuestas en tiempo real.
Tipología de las RNA
Modelos
Existe una serie de modelos que aparecen en la mayoría de estudios académicos y la bibliografía especializada.
•• Perceptrón
•• Adaline
•• Perceptrón multicapa
•• Memorias asociativas
•• Máquina de Boltzmann
•• Máquina de Cauchy
•• Propagación hacia atrás (backpropagation)
•• Redes de Elman
•• Redes de Hopfield
•• Red de contrapropagación
•• Redes de neuronas de base radial
•• Redes de neuronas de aprendizaje competitivo
• Mapas Autoorganizados (RNA) (Redes de Kohonen)
•• Crecimiento dinámico de células
•• Gas Neuronal Creciente
• Redes ART (Adaptative Resonance Theory)
Topología
Una primera clasificación de las redes de neuronas artificiales que se suele hacer es en función del patrón de
conexiones que presenta. Así se definen tres tipos básicos de redes:
• Dos tipos de redes de propagación hacia delante o acíclicas en las que todas las señales van desde la capa de
entrada hacia la salida sin existir ciclos, ni conexiones entre neuronas de la misma capa de red neuronal y su
clasificación.
• Monocapa. Ejemplos: perceptrón, Adaline.
16. Red neuronal artificial 14
• Multicapa. Ejemplos: perceptrón multicapa.
• Las redes recurrentes que presentan al menos un ciclo cerrado de activación neuronal. Ejemplos: Elman,
Hopfield, máquina de Boltzmann.
Aprendizaje
Una segunda clasificación que se suele hacer es en función del tipo de aprendizaje de que es capaz (si necesita o no
un conjunto de entrenamiento supervisado). Para cada tipo de aprendizaje encontramos varios modelos propuestos
por diferentes autores:
• Aprendizaje supervisado: necesitan un conjunto de datos de entrada previamente clasificado o cuya respuesta
objetivo se conoce. Ejemplos de este tipo de redes son: el perceptrón simple, la red Adaline, el perceptrón
multicapa, red backpropagation, y la memoria asociativa bidireccional.
• Aprendizaje no supervisado o autoorganizado: no necesitan de tal conjunto previo. Ejemplos de este tipo de
redes son: las memorias asociativas, las redes de Hopfield, la máquina de Boltzmann y la máquina de Cauchy, las
redes de aprendizaje competitivo, las redes de Kohonen o mapas autoorganizados y las redes de resonancia
adaptativa (ART).
• Redes híbridas: son un enfoque mixto en el que se utiliza una función de mejora para facilitar la convergencia.
Un ejemplo de este último tipo son las redes de base radial.
• Aprendizaje reforzado: se sitúa a medio camino entre el supervisado y el autoorganizado.
Tipo de entrada
Finalmente también se pueden clasificar las RNAs según sean capaces de procesar información de distinto tipo en:
• Redes analógicas: procesan datos de entrada con valores continuos y, habitualmente, acotados. Ejemplos de este
tipo de redes son: Hopfield, Kohonen y las redes de aprendizaje competitivo.
• Redes discretas: procesan datos de entrada de naturaleza discreta; habitualmente valores lógicos booleanos.
Ejemplos de este segundo tipo de redes son: las máquinas de Boltzmann y Cauchy, y la red discreta de Hopfield.
Aplicaciones
Las características de las RNA las hacen bastante apropiadas para aplicaciones en las que no se dispone a priori de
un modelo identificable que pueda ser programado, pero se dispone de un conjunto básico de ejemplos de entrada
(previamente clasificados o no). Asimismo, son altamente robustas tanto al ruido como a la disfunción de elementos
concretos y son fácilmente paralelizables.
Esto incluye problemas de clasificación y reconocimiento de patrones de voz, imágenes, señales, etc. Asimismo se
han utilizado para encontrar patrones de fraude económico, hacer predicciones en el mercado financiero, hacer
predicciones de tiempo atmosférico, etc.
También se pueden utilizar cuando no existen modelos matemáticos precisos o algoritmos con complejidad
razonable, por ejemplo la red de Kohonen ha sido aplicada con un éxito más que razonable al clásico problema del
viajante (un problema para el que no se conoce solución algorítmica de complejidad polinómica).
Otro tipo especial de redes neuronales artificiales se ha aplicado en conjunción con los algoritmos genéticos (AG)
para crear controladores para robots. La disciplina que trata la evolución de redes neuronales mediante algoritmos
genéticos se denomina Robótica Evolutiva. En este tipo de aplicación el genoma del AG lo constituyen los
parámetros de la red (topología, algoritmo de aprendizaje, funciones de activación, etc.) y la adecuación de la red
viene dada por la adecuación del comportamiento exhibido por el robot controlado (normalmente una simulación de
dicho comportamiento).
17. Red neuronal artificial 15
Ejemplos
Quake II Neuralbot
Un bot es un programa que simula a un jugador humano. El Neuralbot es un bot para el juego Quake II que utiliza
una red neuronal artificial para decidir su comportamiento y un algoritmo genético para el aprendizaje. Es muy fácil
probarlo para ver su evolución. Más información aquí [3]
Clasificador No Sesgado de Proteínas
Es un programa que combina diversas técnicas computacionales con el objetivo de clasificar familias de proteínas.
Un posible método consiste en utilizar métricas adaptativas como por ejemplo: mapas autoorganizados y algoritmos
genéticos.
El problema de clasificación no sesgada basada en la expresión de las proteínas en Aminoácidos puede reducirse,
conceptualmente, a lo siguiente:
•• La identificación de grupos de proteínas que compartan características comunes.
•• La determinación de las razones estructurales por las cuales las proteínas en cuestión se agrupan de la manera
indicada.
• Evitar la idea de establecer criterios de clasificación (“sesgados”) fundamentados en ideas preconcebidas para
lograr su clasificación. En este sentido, hay dos asuntos que considerar:
•• Cómo lograr la caracterización de las proteínas de manera no sesgada
• Cómo lograr lo anterior sin apelar a medidas de agrupamiento que, a su vez, impliquen algún tipo de sesgo
sobre dicho agrupamiento.
Las RNA han sido aplicadas a un número en aumento de problemas en la vida real y de considerable complejidad,
donde su mayor ventaja es en la solución de problemas que son bastante complejos para la tecnología actual,
tratándose de problemas que no tienen una solución algorítmica o cuya solución algorítmica es demasiado compleja
para ser encontrada.
En general, debido a que son parecidas a las del cerebro humano, las RNA son bien nombradas ya que son buenas
para resolver problemas que el humano puede resolver pero las computadoras no. Estos problemas incluyen el
reconocimiento de patrones y la predicción del tiempo. De cualquier forma, el humano tiene capacidad para el
reconocimiento de patrones, pero la capacidad de las redes neuronales no se ve afectada por la fatiga, condiciones de
trabajo, estado emocional, y compensaciones.
Se conocen cinco aplicaciones tecnológicas extendidas:
1.1. Reconocimiento de textos manuscritos
2.2. Reconocimiento del habla
3.3. Simulación de centrales de producción de energía
4.4. Detección de explosivos
5.5. Identificación de blancos de radares
18. Red neuronal artificial 16
Referencias
[1] Aunque en francés se utiliza el acrónimo ANN (de Artificial Neural Networks) para referirse a este campo de la computación en este artículo
se utilizará su equivalente castellano RNA.
[2] Redes de Neuronas Artificiales (http://www.lab.inf.uc3m.es/~a0080630/redes-de-neuronas/index.html), Redes de Neuronas
Artificiales, UC3M, RAI 2012.
[3] http://homepages.paradise.net.nz/nickamy/neuralbot/index.html
Enlaces externos
• Wikimedia Commons alberga contenido multimedia sobre Red neuronal artificialCommons.
• Redes Neuronales Artificiales - Implementación con C# (catellano) (http://www.pedrov.info/redesneuronales.
html)
• Tutorial de la Universidad Politécnica de Madrid (http://www.gc.ssr.upm.es/inves/neural/ann2/anntutorial.
html) (castellano)
• Introducción a las redes de neuronas artificiales (http://sabia.tic.udc.es/mgestal/cv/RNAtutorial/index.html)
(castellano)
• Artículos sobre redes neuronales artificiales (http://www.neurosecurity.com/articles.php) (inglés)
• Sitio Web sobre redes neuronales artificiales, ejemplos y aplicaciones (http://electronica.com.mx/neural)
(castellano)
• Introducción a las Redes Neuronales y sus Modelos (http://www.redes-neuronales.com.es/
tutorial-redes-neuronales/tutorial-redes.htm) (castellano)
• Sistema nervioso artificial (http://www.dat.etsit.upm.es/?q=node/5955)
• ¿Qué son las redes neuronales? (http://info.fisica.uson.mx/arnulfo.castellanos/archivos_html/quesonredneu.
htm)(castellano)