Foros del Web » Programación para mayores de 30 ;) » Programación General »

Redes Neuronales de Retropropagación

Estas en el tema de Redes Neuronales de Retropropagación en el foro de Programación General en Foros del Web. Saludos. (No se si el tema este en el lugar correcto, si no es así una disculpa.) Estoy desarrollando una red neuronal artificial de retropropagación ...
  #1 (permalink)  
Antiguo 19/10/2015, 21:22
 
Fecha de Ingreso: octubre-2015
Mensajes: 1
Antigüedad: 3 años, 1 mes
Puntos: 1
Pregunta Redes Neuronales de Retropropagación

Saludos. (No se si el tema este en el lugar correcto, si no es así una disculpa.)

Estoy desarrollando una red neuronal artificial de retropropagación para poder clasificar figuras. El lenguaje que utilizo es C# y el dispositivo de Kinect de Microsoft.

Actualmente ya tengo todo implementado pero tengo muchas dudas sobre el comportamiento de la red así como el manejo de la información. Si alguien sabe o ya tiene echo algo similar y me pueda ayudar se lo agradecería mucho. (Podríamos ponernos en contacto por Skype y compartir pantalla.)

De momento solo tengo dos figuras a clasificar: X o T. Las personas hacen X o T y mi programa a traves del kinect debe ser capaz de reconocerlos.


Salidas:

X = 1
T = 0

X = 0
T = 1


Gracias.
  #2 (permalink)  
Antiguo 21/10/2015, 15:54
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 6 años, 8 meses
Puntos: 31
Respuesta: Redes Neuronales de Retropropagación

Hay algunos programas que usando big data ayudan a tomar decisiones, o incluso a calcular futuros basándose en estadística. (Si 999 veces al lanzar una moneda cayó tumbada y 1 vez cayó en pie...)

Uno de ellos, y de los más usados es el weka. Weka está hecho en java, y mediante muchos tipos de algoritmos pueden llegar a ver qué datos son más determinantes que otros a la hora de conseguir resultados (Por ejemplo un medicamento frente a otro mediante la conjunción de muchos datos distintos de los pacientes: sexo, edad, otros medicamentos, historial medico, etc)

En este programa hay que ir probando distintos algoritmos para ver cual es el que más porcentaje de acierto se tiene, qué datos son más importantes y qué datos son desechables, etc.

El caso es que uno de estos algoritmos es el neuronal, y dado que este programa es de código abierto, también el algoritmo neuronal que utiliza este programa es de código abierto y se puede acceder a su código. Eso si... es código Java.

Como ejemplo de algoritmos neuronales ya funcionando no he visto demasiados. En realidad ninguno. Siempre lo que he visto cuando he buscado esto (y no busco sobre esto desde hace ya años) siempre he visto teoría. Ningún código funcionando... hasta que el año pasado descubrí (me lo dieron en un curso, sin yo buscarlo) este programa.
  #3 (permalink)  
Antiguo 21/10/2015, 16:31
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.325
Antigüedad: 10 años, 10 meses
Puntos: 606
Respuesta: Redes Neuronales de Retropropagación

El problema son los casos reales o prácticos. Los ejemplos de tirar una moneda o similar son sencillos porque el algoritmo de evaluación no es "complicado", pero aplicarlo en temas más cotidianos ya es donde la cosa tiene miga.

Yo trabajo programando una serie de robots que tienen que trabajar entre sí. Estuvimos evaluando el tema de usar redes neuronales y aprendizaje automático para que los robots fuesen aprendiendo la manera óptima para trabajar en equipo entre ellos. Al final, como la carga de trabajo es variable y depende de factores externos, este tipo de sistemas generaban soluciones poco óptimas. Al final terminé desarrollando un sistema que toma la decisión en base a unas reglas heurísticas y han dado muy buen resultado.

De todas maneras, a nivel personal estoy desarrollando un sistema de inteligencia para un juego de cartas y mi intención es probar, ahí sí, con sistemas de aprendizaje automático ya que por la documentación que he leído en sistemas similares ha funcionado bien.

Lo dicho, depende un poco del problema y del tipo de solución que necesites (yo por ejemplo en el trabajo si no es una solución óptima no sirve, pero para el desarrollo personal no importa tanto...)
__________________
Aviso: No se resuelven dudas por MP!
  #4 (permalink)  
Antiguo 25/10/2015, 04:41
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 6 años, 8 meses
Puntos: 31
Respuesta: Redes Neuronales de Retropropagación

Malenko:

https://youtu.be/9PprNdIKRaw

Distintos tipos de robots colaboran el uno con el otro, y el otro con el uno.

Por otro lado, el matemático nobel John Nash (inspirador de la película protagonizada por Russell Crowe "Una mente maravillosa") demostró matemáticamente lo siguiente (no textualmente):

- Para un mayor rendimiento de un grupo, cada individuo debe de hacer lo mejor para sí mismo y lo mejor para el grupo.

Lo que significa que a la hora de tener un grupo de robots, cada robot ha de hacer lo mejor para cumplir él solo su función, (una función única e individual solo para él) en primer lugar. Pero también ha de hacer lo mejor para el grupo. Y eso ha de estar en segundo lugar.

Ej:

Un brazo mecánico es encargado de sujetar una tapadera de un frasco de cristal, de esas que tienen un poco de rosca para cerrarse. Cuando un frasco se detiene justo debajo, lo baja y lo enrosca.

Su función principal es tapar los frascos.

A continuación sube, gira, baja y recoge una tapadera nueva. Después sube, gira y se queda quieto esperando que un nuevo frasco de cristal quede parado justo debajo.

Y ahí termina todo lo que ese brazo mecánico hace.

Sin embargo, cada vez que un frasco es tapado, este se aparta y llega, gracias a una cinta transportadora a una bandeja en la que es ordenado, junto con otros 24 frascos, para hacer un lote de 5x5 frascos. Y estos son encerrados en una caja por medio de otros brazos mecánicos.

Ahora la caja queda parada a tan solo unos centímetros del brazo mecánico que pone tapaderas. Y esa caja ha de ser elevada hasta otra cinta transportadora que está más arriba que esa primera. Y para ello ha de subirse la bandeja sobre la que está. Y resulta que el brazo encargado de subir esa bandeja fue pensado para subir paquetes de 4x4 (15 botes). Así pues, los 9 botes extra hacen que ese brazo mecánico encargado de subir la bandeja sufra.

El brazo encargado de poner las tapaderas entonces "piensa": "Mi función principal es esta. Pero para hacer mi función principal yo he de subir 2 veces el brazo para cada tapadera que pongo. Y si aprovecho ese movimiento ascendente para, por medio de un suplemento en mi brazo, ayudar a subir la bandeja?"

Y de esa manera, la función principal del 1º brazo sigue siendo la función principal. Una función única que única y exclusivamente hace ese brazo mecánico y no hace ningún otro. Pero ahora, por medio de la colaboración... colabora con la función principal de otro brazo mecánico. Ese otro brazo mecánico tiene como función principal subir bandejas. Y esa función principal única y exclusivamente la hace ese 2º brazo mecánico y no la hace ningún otro. Pero el 1º brazo mecánico colabora por medio de una función secundaria.

¿Y si en algún momento, por las circunstancias programadas como eventuales, el 1º brazo no puede ayudar al 2º? No importa. La función principal del 1º será solventada y hecha con eficiencia.

¿Significa eso que el 2º brazo va a fallar sin la ayuda del 1º? No. El 2º brazo mecánico solo le costará un mayor esfuerzo. Sufrirá un desgaste mayor, consumirá más energía, pero logrará igualmente su objetivo.

¿Qué beneficio consigue el conjunto de la colaboración del 1º brazo para con el 2º? Pues la durabilidad de B, y la energía total consumida. La durabilidad de un elemento es importante. Porque cuando 2º brazo tenga que cambiarse, el 1º tiene que quedarse a la espera, no podrá realizar su función mientras se cambia el 2º. Así pues, al 1º también le interesa que el 2º tenga una mayor durabilidad. Porque ayudar al equipo (la 2ª parte de la ley de John Nash) repercute en beneficio de cada una de las partes.

El hecho de que el elemento A ayude al elemento B no significa que el elemento B necesite del elemento A. Solo que en equipo, la eficiencia es mucho mayor que como individuos sueltos.

El resultado es que el conjunto es mayor que la suma de sus partes. Y por lo tanto para que un grupo sea más eficiente que la suma de sus partes, se ha de encontrar la forma en la que suceda eso: El conjunto sea mayor que la suma de las partes.

Esta ley se da en la naturaleza en muchísimos casos. Y es otra forma de decir lo que demostró matemáticamente el ilustre y fallecido nobel John Nash. Y a la hora de formar equipos (por ejemplo de robots) debería de ser tomada... si se quiere llegar a optimizar cualquier proceso complejo.

===============

Yo últimamente ando con el dilema de como averiguar qué fórmula aplicar para hayar la equivalencia entre el conjunto y la suma de sus partes. Si el conjunto es mayor, significa que hay un factor por el que la suma de sus partes es multiplicado para llegar al valor del conjunto. Cuando me ponga en serio con ello, seguramente tenga que acudir a los estudios matemáticos de este hombre. Jeje.

Última edición por Kritik; 25/10/2015 a las 04:53

Etiquetas: inteligencia, redes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 08:13.