Aprende a programar gratis, desde cero, antes de intentar esto.
Crearemos un sistema basado en técnicas de Inteligencia Artificial, con la capacidad de generar números validos de tarjetas prepago. El trabajo es realizado con fines netamente académicos y con el sano propósito de demostrarle a una compañía de teléfonos móviles especifica, la vulnerabilidad que posee en su sistema de codificación de tarjetas prepago y concientizar el gran peligro que esto representa. Cabe aclarar que como académico que soy, piensa que el texto no es el motivo de una acción delictiva ni incentivo para hacerla. El tener un arma de fuego y disparar un tiro al aire, o el saber usarla no implica delito. Los agentes utilizados fueron RNA’s y algoritmos inteligentes de búsqueda programados todos en Matlab v.7.
Introducción a generar códigos de recarga para tarjetas prepago de celular
Con seguridad, todos aquellos que hemos utilizado la telefonía celular prepago por medio de tarjetas o pines; al cargar nuestra cuenta vía telefónica introduciendo el extenso numero o pin, que ingresado de forma exitosa recarga nuestro saldo con un equivalente en minutos al valor de la tarjeta adquirida. En algunas de estas ocasiones, se nos habrá pasado por la mente la idea de digitar un número al azar, esperando tener la fortuna de que éste sea un código valido y por lo tanto recargue nuestra cuenta, ahorrándonos el valor por compra de la tarjeta. Y si algunos de hecho lo han intentado, quizás otros no, pero al final con intento fallido o sin el, alguna lógica no formal, talvez el instinto, nos dice que este evento debe ser muy difícil de ocurrir y que es solo malgastar el tiempo, intentarlo repetidas veces; pues a la final casi con toda certeza no lo lograremos. Lo anterior, es en gran parte valido. Pero si vemos las cosas un poco metódicamente, no es cierto ni correcto descartar del todo la probabilidad de que dicho evento ocurra, aun más: tiene que ocurrir en algún momento. Pero en verdad el camino para llegar a él, no es el de la coincidencia, sino uno mucho mas estructurado (si es que queremos que suceda pronto y con certeza). Ya que así no sepamos formalmente porque, ni como; estamos en lo cierto al pensar que es difícil encontrar un numero valido aleatoriamente.
Revisando un poco el tema de la seguridad en sistemas de cómputo, en especial en redes de comunicación. Vemos que han surgido de allí y con el fin de proteger la información, múltiples técnicas de cifrado, las cuales consisten en un encriptamiento codificado de la información, para que viaje segura a su destino. Algoritmos poderosos como el DES o el 3DES [3], han sido aplicados para mantener la privacidad en las telecomunicaciones durante años, al igual que los algoritmos de autenticación basados en la filosofía de llaves publicas y privadas [3], se han convertido en la piedra en el zapato para los intrusos o llamados hackers.
Es tan monitoreado y controlado el tema de la seguridad en el mundo de las telecomunicaciones, que en los EE.UU. entidades gubernamentales, retan a cientos de personas con maquinas multiprocesadores a competir por “tumbar” sus algoritmos de seguridad y descifrar sus códigos de acceso. Premiando con jugosas cifras de dinero a quien lo logre primero, ya que es mucho mas económico para ellos invertir este dinero en un premio que asumir las gigantescas perdidas que le podrían surgir si alguien rompe el algoritmo de forma furtiva y para uso delictivo.
Partamos del supuesto, que nuestra compañía telefónica posee a su disposición un fuerte algoritmo de seguridad para diseñar sus pines prepago. ¡Intentemos tumbarlo!
2 Análisis del problema
2.1 En General
Para obtener un sistema capaz de generar números validos de tarjetas prepago de una compañía telefónica, debemos pensar en un principio que dicha tarea se compone de dos tareas “menores”. La primera, determinar si el numero es valido o no. Y la segunda, generar ese numero. Obviamente estas tareas se realizan en orden contrario a como se enunciaron, solo que en la practica diseñaremos primero la solución a la clasificación y luego a la generación o búsqueda.
Aquí entonces debemos introducir el concepto de multiagente [4] puesto que el sistema se debe componer de dos subsistemas o agentes (IA), que cooperativamente lograrán el objetivo final. Cooperativamente ya que el trabajo encargado y realizado del uno depende del que el otro haga, por medio de una retroalimentación constante. Así pues que visto desde este punto y en forma general el problema es diseñar dos sistemas y no uno, además de acoplar y lograr su buena comunicación (parte fundamental).
2.2 En Complejidad
Entrando un poco más en el tema, es hora de revisar nuestro objetivo, que básicamente es un número como el que tenemos a continuación, claro esta con la propiedad de que sea valido:
Figura No 1. Numero de tarjeta prepago
Como podemos observar en la figura No 1, nuestro número objetivo será un número de tamaño constante en dígitos (16), y obviamente cada uno de estos podrá variar solo entre 0 y 9. Conocimiento en el que nos basamos para deducir la cantidad de posibles números existentes, cantidad igual a 1016, el 10 por el total de posibilidades que posee cada digito (0 a 9) y el 16 obviamente por el tamaño o total de dígitos de cada número. Esto nos introduce a una cantidad de diez mil millones de millones o diez mil billones (10 000 000 000 000 000) de posibles números a tratar. Cabe hacer algunas aclaraciones que en la practica pasan ha ser irrelevantes, como el hecho de que no todos los números son factibles, puesto que por ejemplo los números donde los 16 dígitos sean iguales, se pueden descartar de entrada ya que nunca serán validos. Se pueden dar otros casos de números no factibles para nuestro análisis, pero al finalizar y sumar todos, no representan un descuento significante a la cantidad original de posibilidades.
Como ya habíamos sugerido en el apartado 2.1 y como aquí asumiremos como metodología en adelante: partiremos nuestro problema en dos problemas:
2.2.1 Clasificación
Básicamente consiste en decidir a que grupo pertenece un número de tarjeta, al de los validos o al de los no validos (clasificación binaria) así que con base a la cantidad de posibilidades deducida anteriormente, analizaremos de manera mas matemática la complejidad que acarrea dicha clasificación.
Podemos ver cada número pin, como un vector en R16 y situar en esta dimensión nuestro conjunto de pines o espacio de búsqueda (compuesto de 1016 elementos) dentro del cual queremos modelar o clasificar un subgrupo: el de los validos. Para efectos visuales plasmamos una idea de lo dicho, pero en 2 dimensiones, en la Figura No 2.
2. Representación de los espacios de búsqueda y solución en R16
Ahora si nos fijamos bien, la complejidad de la clasificación no consiste ni siquiera en que estemos tratando con una dimensionalidad muy alta, sino en el hecho de que los grupos que deseamos clasificar o separar no son linealmente separables (comprobado en el desarrollo por medio de pruebas) pues por simple lógica no pueden serlo, ya que los podríamos modelar o clasificar con un simple modelo lineal y esto básicamente significaría que los distinguiríamos casi a ojo. Por el contrario, este conjunto de números debe contar con una alta no linealidad para no presentar características percibibles, incluso como se ve en la figura No 2, el conjunto debe ser hasta discontinuo, por lo tanto aun más complejo de modelar. O por lo menos con estas características los debe construir un buen algoritmo de seguridad.
Es por ello que nos veremos obligados a trabajar con una herramienta, compleja, grande y poco común ya que los métodos convencionales de aproximación o interpolación no pueden poseer la capacidad para modelar conjuntos con fronteras tan variantes. O para decirlo en términos de minería de datos, no poseen la EXPRESIVIDAD [5] suficiente.
2.2.2 Generación o Búsqueda
Después de diseñar nuestro clasificador (con propiedades de adaptarse a espacios altamente no lineales o muy expresivos), necesitamos de un sistema mas, que genere números factibles, para que nuestro primer agente les clasifique, ya que si nos detenemos a pensarlo un minuto, no tendría sentido que nosotros le diéramos los números pues nuestro esfuerzo de generarlos podría ser clasificado simplemente al ingresar el numero vía telefónica y no necesitaríamos el clasificador diseñado.
La primera idea que trata de surgir, según los anteriores términos, es la de diseñar un programa que genere números aleatoriamente hasta que nuestro clasificador encuentre alguno que encasille en el grupo de los pines validos. Evidentemente eso no es nada optimo como por lo regular lo son los procedimientos azarosos, motivo por el cual le debemos dar inteligencia al algoritmo anterior, de tal modo que este genere solo números, con alta probabilidad de que nuestro clasificador les califique como validos.
Dicho en estos términos podemos perfectamente abordar este problema como un típico problema de optimización, donde debemos minimizar una función objetivo que para nuestro caso es la distancia entre el número generado y los números validos. Esta función obviamente también será una función en R16, cuyos elementos son los vectores o pines de 16 componentes y de ellos los que la minimizan son aquellos tales que sean validos ya que la distancia (para nombrar de alguna manera el factor que mide la validez del numero) entre un pin valido y otro pin valido es 0 (el mínimo).
Hay que aclarar en este preciso momento, que gran parte de este problema es diseñar el algoritmo de minimización u optimización, pero el mayor porcentaje del problema lo proporciona la definición “matemática” de dicha función con todas las restricciones que ella debe tener, de las cuales se nos hará evidente la mas importante de todas un poco mas adelante, pero en el mismo momento trataremos de satisfacerla.
También es preciso anticiparnos y decir que de manera irónica este problema de la definición de la función con todo y su dificultad, se solucionará automáticamente y nosotros solo nos preocuparemos por implementar algunas restricciones conceptuales.
3 Planteamiento de la solución
3.1 Clasificación
Para solucionar este problema hemos optado de manera indiscutible por programar un algoritmo neuronal [2], o Red Neuronal Artificial (RNA), debido a su excelente desempeño en la solución del mismo. Pero si se necesitará de justificar su elección… Veamos:
Existe un problema común para someter a prueba la calidad de adaptación de los sistemas de clasificación tanto estadísticos como heurísticos. Es el problema de las espirales de Arquímedes [6], que consiste en dos espirales concéntricas que dan tres vueltas, luego el sistema debe ser capaz de especificar a cual de las dos espirales pertenece un punto cualquiera. Para lograr dicho cometido el sistema debió haber modelado con exactitud los dos conjuntos que tienen cada uno la forma de una espiral; la forma mas poco lineal que pueda existir como se ve en la figura No 4.
La Red Neuronal (multicapa) [1] ha sido hasta el momento el mejor modelo de cualquier área que ha logrado resolver esta prueba, con una exactitud de un 99%. Como se puede ver tanto en [5] como en [6].
Pero además la figura No 5. También nos deja ver el desempeño en la modelación no lineal de la Red Neuronal, comparada con otros modelos comúnmente implementados para este fin [5].
Figura No 5. Modos de clasificación para distintos clasificadores a)Perceptron b)Función de base radial c)Red Bayesiana d)Red Neuronal e)Árbol de decisión
3.2 Generación o Búsqueda
Para este fin debemos seleccionar un algoritmo típico de búsqueda usado en los procesos de optimización en ingeniería. Contamos en ese caso con buenas herramientas que han tenido gran aceptación entre los ingenieros dedicados a resolver problemas de este tipo, algunos de ellos son los siguientes:
- Algoritmo Genético.
- Simulated Annealing.
- Búsqueda Tabú.
- Algoritmos Golosos o Voraces.
- Algoritmo del gradiente descendiente (RNA’s).
- Colonia de Hormigas.
Cualquiera de los anteriores cumplen nuestros requisitos y aunque los 2 primeros y el 5, se apegan mas, al modelo que ya hemos esquematizado (definir y minimizar una función objetivo). Incluso una especie de hibrido donde cada uno de los algoritmos nos proporcione números durante algún tiempo y luego de paso a otro, podría resultar aun mas poderoso, pero obviamente mas complicado y difícil de controlar.
Hay que resaltar la experiencia de la implementación de los 3 primeros algoritmos en la presente investigación, con resultados prácticamente iguales. Razón que nos inclino a implementar definitivamente un Algoritmo genético, debido a su popularidad y “sencillez”.
El siguiente cuestionamiento a resolver es el de: ¿Cuál será la función objetivo? Primero repasemos de modo tangencial el funcionamiento básico de un Algoritmo genético (AG) [2], que basado en la evolución de Darwin crea poblaciones de individuos (posibles soluciones) y luego de estos individuos se reproducen casi siempre, o por lo menos mas probablemente, los mas aptos, aptitud que se pondera con la función a minimizar o maximizar, ósea la que estamos buscando.
Y como habíamos acordado que en nuestro caso la función es aquella que me define la validez de un pin generado, o sea la distancia entre el pin generado y los pines validos que en últimas se puede traducir a la distancia entre pines generados y pines clasificados por la RNA como validos (cuando haya aprendido a clasificarlos). Podemos ver como los elementos que minimizan la función aquellos que la red clasifica como validos y por ende podemos ver ya definida la función objetivo, como la misma Red Neuronal. Motivo por el cual de forma anticipada, dijimos en el apartado 2.2.2 que el difícil problema de definir la función objetivo, se solucionaba por si solo al establecer el primer sistema o Red Neuronal como dicha función. Hecho que además consolida nuestra cooperación, retroalimentación o dependencia de un sistema con otro.
Se debe tener mucho cuidado en la implementación de este algoritmo genético, puesto que no queremos que genere los números que la red ya sabe clasificar o conoció en el entrenamiento , ni tampoco unos parecidos a estos (es a lo que tenderá). Puesto que no estamos buscando números físicamente parecidos a ellos, mas bien números parecidos, pero por el hecho que conserven los mismos patrones de dichos pines, que no son notables ni física ni obviamente, a tal grado que solo los puede percibir la red y no un humano. Ósea lo que buscamos explorar en la red es su generalización [1] de aprendizaje y no en si, su aprendizaje base. Esto pone en evidencia una importante restricción en la función a optimizar y es la siguiente:
Los elementos a buscar por el AG, si son los que tengan mucha probabilidad de ser clasificados como validos por la red, pero que ADEMAS sean físicamente (en su estructura numérica) diferentes a los que la red ya conoce o con los que se entrenó que es lo mismo. Con lo cual garantizamos estar buscando individuos o elementos con rasgos de generalización y no de aprendizaje.
Por ende replanteamos la función objetivo de manera esquemática como se ve en la formula No 1:
F(x) = RNA(x) - Similitud(x, set_rna)
Formula No 1. Función Objetivo del Algoritmo Genético
En donde x es el individuo o pin a evaluar, RNA() es el valor o la clasificación de la Red Neuronal para dicho individuo y Similitud (x, set_rna) es el parecido que el individuo posee con un numero que se uso para el entrenamiento de la red, o sea uno que ella ya conoce.
4. Desarrollo de la solución
Inicialmente recopilamos durante algún tiempo y con la ayuda de algunas personas involucradas en el proyecto una cantidad de tarjetas ya usadas de la compañía celular en cuestión. En verdad no son muchas ni suficientes como podremos observar en las conclusiones, pero es una cantidad que nos proporciono el arranque del proyecto (100 tarjetas). Además nos tomamos la molestia de comprobar que otros 200 números mas, que seleccionamos aleatoriamente, eran inválidos, con lo que comenzamos con un moderado set de entrenamiento (en la actualidad continua robusteciéndose) de 300 números, 100 positivos (clase 1) y 200 negativos (clase 0).
Programamos con el toolbox de Matlab v.7 una red neuronal, con 16 entradas y tres capas de 15, 8 y 1 neurona respectivamente. La entrenamos con algoritmo Backpropagation, rata de cambio de 0.015 y un factor de momentum de 0.9. Le ingresamos como set de entrenamiento los 300 números anteriores con sus respectivos target’s (de 1 a 100 salida deseada 1 de 101 a 300 salida deseada 0), y le toleramos un error del 0.0001, el cual alcanzamos en 60 000 iteraciones. El error pudo ser menor e igual lo alcanzábamos siempre, pero para prevenir un sobre aprendizaje de la red [2] y teniendo en cuenta que nos interesa mas la buena generalización [2], decidimos prudencialmente dejar este error.
La Red efectivamente cumplió nuestro primer propósito de manera aceptable. Y luego de definir una función de similitud de un numero de 16 dígitos con alguno de los 100 primeros (positivos) del set. La cual consistía en verificar y contar la cantidad de números que tenían iguales y darle peso según la distancia en dígitos que tenían uno con otro (cualquiera puede diseñar alguna otra). Programamos pues un algoritmo genético con individuos o cromosomas de 16 genes constantes igual que el tamaño de las poblaciones (200). Utilizamos una mutación del 0.0001% de probabilidad y una recombinación monopunto con probabilidad igual al 98.5%. Además con implementación de función fittnes descrita por la formula No. 1.
Es importante aclarar que la red respondía a un numero o le clasificaba con un real entre 0 y 1 así que poseía un nivel de incertidumbre, y por lo regular números menores que 0.001 los clasificábamos como no validos, y números con calificación superior a 0.99 eran acogidos como validos. La función de similitud variaba en igual dominio (0 a 1). Y al restarle este factor a el resultado de la red obviamente generábamos otro real entre 0 y 1, solo para aclara el rango de la función fittnes del AG.
Luego se puso a correr el sistema completo (AG generando y RNA clasificando) durante una noche. Al día siguiente habíamos generado 6 números con calificación de la red igual o mayor de 0.9998 y todos con estructura distinta a los del set. Luego nos dispusimos a verificar vía telefónica, si el sistema había acertado en su primer intento o no.
5. Análisis y observaciones
Para una persona que medianamente domine el tema de RNA’s le será aun mas claro el comportamiento del sistema mostrado de forma grafica en la figura No 6.
Y aunque no reviste ningún grado de dificultad, el correcto entendimiento de dicha grafica, si es primordial detallar en la idea general que esta nos provee acerca del proyecto. Para lograr aterrizar con fundamentos la idea de lo no utópico del mismo.
Figura No. 6. Comportamiento del sistema (aciertos Vs set)
Para explicar un poco la grafica, observemos que aun cuando el set de entrenamiento sea 0, existe una mínima posibilidad de un acierto (acierto netamente azaroso). Pero en adelante observamos el comportamiento del sistema en términos de la probabilidad de acierto y el tamaño del set, que desde luego es una relación no lineal, ya que desafortunadamente crece mucho mas rápido la abscisa que la ordenada. Lo que quiere decir que un incremento de miles en el tamaño del set, no representa mucho crecimiento en la probabilidad de acierto. Pero podemos fijarnos también que este como muchos sistemas probabilísticos de igual comportamiento, presentan en un momento de la curva, un punto de inflexión que se alcanza con una cifra del orden de los miles (desconocida) de la abscisa y que en adelante dispara la ordenada, o sea la probabilidad de aciertos en nuestro caso (comportamiento contrario). Es este el punto ideal de nuestro sistema y por lo menos ya tenemos una idea de cómo llegar a el: incrementando fuertemente nuestro set de entrenamiento o ejemplos de aprendizaje de la Red Neuronal. Hablamos de incremento en miles puesto que la cantidad máxima de del set es igual a la cantidad de posibles números a generar (diez mil billones).
Esto además concuerda con la teoría de redes [1] la cual indica que para poder modelar bien un conjunto con ellas. Se deben tener elementos muy representativos del conjunto (en nuestro caso no los conocemos) o una buena muestra (en cantidad) del mismo, que es a lo que nos enfoca la grafica.
Por ultimo haremos observaciones respecto a varias cosas como:
La resumida en este trabajo a sido solo la versión inicial del sistema, aunque la básica y sobre ella se sigue fundamentando cualquier modelo mas potente.
El modelo como tal a sufrido severos ajustes que por razones de seguridad ya no es conveniente describir.
Como mencionamos en el apartado anterior, el set sigue creciendo actualmente. Buscando asiduamente el punto de inflexión de la curva.
Gracias ha este análisis y en comparación con otros sistemas, en especial con uno, hemos llegado a deducir y comentar el siguiente apartado del articulo, lo que podría verse como un complemento a la solución, para llegar a un resultado general del sistema 100% seguro, aunque parezca improbable. Para ello escudriñamos un poco mas en la grafica de la figura No. 6.
6. Complemento concluyente para el éxito del sistema basado en la experiencia de otros sistemas del mismo tipo
Hacemos referencia aquí a MIT BLACK JACK TEAM . Una de las tesis doctorales más laureadas del Instituto Tecnológico de Massachussets (MIT). Donde un gran académico, desarrollo un sistema probabilístico para ganar en el juego del black Jack. El cual aplico de forma practica en las Vegas EE.UU. junto a un grupo de estudiantes del mismo instituto. Su sistema fue tan poderoso que les generó ganancias por más de 2 millones de dólares. Lo importante es que este proyecto tenia exactamente la misma curva de comportamiento que el nuestro (en su caso, probabilidad de acierto Vs cantidad de juegos), pero lo mejor de todo es que ellos diseñaron una estrategia para llegar al punto de inflexión en la curva, la cual les dio resultado, de allí sus grandes ganancias. En resumidas cuentas la manera de conseguir el punto de inflexión fue (y aunque suene romántico): Trabajo en Grupo. Entre mas gente conformará el grupo de trabajo mas fácil alcanzarían dicho punto.
Tratar de acoplar esta filosofía a nuestro proyecto no es difícil, ya que es lógico: Si desarrolláramos nuestro proyecto con un grupo de 30 estudiantes, les podríamos pedir a cada uno por ejemplo 200 tarjetas, al sumar y multiplicar, nuestro set empieza a tornarse evidentemente del orden de los miles, lo que nos indica que cada vez mas estaremos cercanos a l punto de inflexión.
Pero en la realidad que significa el momento en que se alcance el punto de inflexión?. Es el momento en que “tumbaremos” totalmente el algoritmo de seguridad que los ingenieros de la compañía telefónica estén usando. De ese momento en adelante la empresa estará PERDIDA y nuestro sistema contará con la capacidad de generar miles de números validos, durante el día, lo que se traducirá en millones de pesos en perdidas para ellos.
Así que de manera contundente podemos afirmar que gran porcentaje del éxito de un proyecto como este radica en algo tan simple como el trabajo en EQUIPO.
7. Conclusión
No necesitamos de manera estricta llegar al punto de inflexión (punto óptimo del sistema) para hallar números validos. Pues antes de él, la probabilidad sigue existiendo, solo que de forma mas moderada, y al aumentar paulatinamente el tamaño del set, igualmente iremos mejorando dicha probabilidad. Es tan simple como tener claro: que después de cruzar el punto de inflexión simplemente todo número que generé el sistema será valido, pero si aun no lo hemos alcanzado, debemos esforzarnos más, ya que hay gran posibilidad de que un número generado sea un falso positivo [5].
Finalmente: El sistema aplica, es realizable y ha dado buenos resultados, resultados que por cuestiones de seguridad no es debido especificar, pero que han motivado la realización de este articulo.
Bibliografía
[1]. [1] B.M del Brio, “Redes Neuronales y sistemas difusos” 2da ed. Vol 1. Ed. Zaragoza España:
Alfaomega Ra-Ma 2002.
[2]. [2] J.R Hilera “Redes Neuronales Artificiales”
Ira ed. Vol 1. Ed Madrid España:
Alfaomega Ra-Ma 2000.
[3]. [3] Tenembaum “Redes de Computadores”
Ira ed. Vol 1. EE.UU:
Pretice Hall 2001.
[4]. [4] Nilson “Inteligencia artificial”
Ira ed. Vol 1. Ed Madrid España:
Alfaomega Ra-Ma 2000.
[5]. [5] Orallo “introducción a la minería de datos”
Ira ed. Vol 1. Ed Madrid España 2004:
Pearson (Prentice Hall).
[6]. [6] Revista “Cientia et technica”
Art. Entrenamiento De Una Red Neuronal Artificial Usando El Algoritmo Simulated Annealing : Harold Isaza (UTP).
Ing. MSc. Helmer Muñoz Hernández
Ingeniero de Sistemas
[email protected]
Ing. Rodrigo Garcia Hoyos
Estudiantes Ingeniero de Sistemas
[email protected]
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por Yaraher el 13 de Enero de 2011
¡Genial todo!
PD: Salvo la R en R16.. ¿por qué esa tipografía? Mis ojos lloran masculinas lágrimas de sangre.
Por raxielh el 13 de Enero de 2011
Por Roberto León el 13 de Enero de 2011
@FlexJRL
Por cerbero1987 el 13 de Enero de 2011
felicitaciones
Por Camilo el 14 de Enero de 2011
Gracias!
Por Otaku RzO el 14 de Enero de 2011
Por Alejandrogm el 14 de Enero de 2011
Por camiand el 14 de Enero de 2011
Por Blackdragon el 14 de Enero de 2011
Excelente post... Saludos!
Por Ricardo el 14 de Enero de 2011
Por Fer el 14 de Enero de 2011
Por Bahianew el 14 de Enero de 2011
Por Raxiro el 14 de Enero de 2011
Por Darketzer el 15 de Enero de 2011
Por CLAnonimo el 18 de Enero de 2011
Saludos, te felicito por excelente trabajo.
Por Finvara el 18 de Enero de 2011
Por Andres el 19 de Enero de 2011
Por raxielh el 19 de Enero de 2011
Por Raxiro el 19 de Enero de 2011
Esta bien la respuesta seguro sea no, te la cambio por otra, ¿alguna vez tuviste en tus manos mas de 100 tarjetas?
Cuando las tengas fijate los números y volvé a leer tu comentario.
Saludos.
Por Ed el 19 de Enero de 2011
Raxiro-blog :
Esta bien la respuesta seguro sea no, te la cambio por otra, ¿alguna vez tuviste en tus manos mas de 100 tarjetas?
Cuando las tengas fijate los números y volvé a leer tu comentario.
Saludos.
Yo he trabajado con una de las muchas empresas que hacen tarjetas prepago. NO ES ALEATORIO. Es como decir que los seriales del software son aleatorios o que las tarjetas de crédito lo son. Que no veas un patrón no significa que no haya uno, solo que es difícil de encontrar.
Que no hayas podido seguir la matematica del artículo no significa que sea falso. Que fuera aleatorio sería un gigante problema de seguridad. Requiere un patrón para ser decodificado como número valido por un algoritmo, aparte del challenge con la base de datos.
Por Raxiro el 19 de Enero de 2011
Por raxielh el 19 de Enero de 2011
Por Freddie el 19 de Enero de 2011
Raxiro-blog :
De parte de Ed: sorry.
Por YtFreak el 20 de Enero de 2011
Por raxielh el 20 de Enero de 2011
Por CLAnonimo el 23 de Enero de 2011
Por christian el 29 de Enero de 2011
Por juanogo el 16 de Marzo de 2011
Tengo comentarios de forma y de fondo. De forma:
El texto presenta una inaceptable ortografía, una angustiosa redacción y un precario lenguaje técnico, para ser considerado como serio. Constantemente abunda en temas frívolos, hipotéticos y alejados de la rigurosidad y los márgenes de la ciencia. La introducción parece de un artículo de farándula o amarillista, lo cual es absolutamente lamentable en términos académicos. Un artículo de este tipo no es para contar historias o experiencias personales, mucho menos para tertuliar. Se debe ser concreto, minimalista y plantear solo hechos, también como mostrar solo resultados. Este es el único articulo que esconde los resultados, ósea lo mas importante, argumentando razones de seguridad, lo cual es irrisorio. Los autores aprenderán a hacerlo mejor a medida que ganen experiencia, pero los revisores del texto dejan bastante que desear.
Comentarios de fondo:
Mas allá de poder ser una experiencia académicamente ilustrativa para un curso básico de RNA, en la práctica dicho sistema no es viable. Y es por ello que los autores se dedican a vagar en el tema sin concretar nada. Más que una investigación es una idea utópica la que se describe:
Voy a basar mi análisis en la desatinada grafica 2 del texto (pero antes una observación, R16 es infinito y no tiene porque ir acotado).
Una buena práctica para entender las cantidades astronómicas es traducir las cifras a tiempo para poder hacernos una mejor idea en nuestra limitada mente: Si cada elemento del espacio de búsqueda fuera un segundo de tiempo, el espacio de búsqueda ?duraría? 10 ^ 16 segundos esto es aproximadamente ?3 mil millones de años?. Teniendo en cuenta que la edad de la tierra podría ser de unos 4 mil millones de años, este espacio de búsqueda resulta ser temerariamente grande.
Pero siendo muy generosos, excesivamente generosos, digamos que el conjunto de soluciones es solo el 1% del espacio de búsqueda, inclusive los autores en la grafica muestran que es mucho mayor a un 1%. En todo caso, esto nos dejaría con ?30 millones de años?. Yo no tengo ni siquiera 30 años y me ha parecido una eternidad.
Los autores dicen poseer una base de entrenamiento de 100 ejemplos positivos y 200 negativos, 300 en total. Si los contamos como segundos esto seria nada mas y nada menos que la monstruosa cantidad de?.. ¿5 minutos? Oops!?.Pregunta:
¿Que se puede aprender de 30 MILLONES DE AÑOS, en 5 minutos?
Creo que la mera lectura del artículo demora más de 15 y no se aprendió mucho que digamos.
La muy acomodada figura 6. muestra una grafica que forzosamente podría ser cierta. Pero los autores no usan notación exponencial como debería ser. Y por ello vuelven a vagar poniendo simplemente ?miles?, que debería ser más bien BILLONES, como ya hemos visto.
Si usamos una escala exponencial, el eje Y iría de 0 a 1, y el X estaría descrito en miles de millones. El punto de inflexión esta al final del eje X (como debe ser) dejando después de él, solo un espacio insignificante de unos cuantos millones, pero antes de alcanzarlo se debe recorrer el eje X casi entero, esto por simple lógica significa que se deben poseer unos cuantos MILES DE MILLONES de muestras (tarjetas) para alcanzar el punto. Mientras tanto se fluctuará en una pendiente leve no cercana a 0 como dicen los autores, sino MUY cercana a 0, yo diría de unos 15 e ? 064, que es mas o menos la probabilidad del azar para este sistema: NULA.
Si en Colombia tenemos una población de 45 millones y una abstención del 55%, creo que es muy difícil trabajar en ?equipo? (como dicen los autores) para conseguir MILES DE MILLONES de tarjetas. Pero, así se consiguieran con magia miles de millones de tarjetas, el sistema entraría en un proceso de saturación y sobre aprendizaje y eso es otro cuento.
Se utilizo una red de 16 ? 15 ? 8 ? 1 neuronas? Esto hace aproximadamente 368 pesos de entrenamiento. Con 368 variables se pretende modelar un sistema no lineal altamente impredecible y de las magnitudes astronómicas que hemos visto? Solo para controlar una línea de transmisión eléctrica se necesitan redes de hasta 10 mil variables (pesos). No me quiero referir a la función que dicen usar par el algoritmo genético pues me llevaría mucho tiempo, solo puedo decir que no tiene ningún fundamento heurístico y mucho menos matemático, no se puede ser tan olímpico en la vida.
Sin dudar a equivocarme y sin nunca haber visto a los autores: Ellos deben saber por pura experiencia (si es que han tratado de sacar un código) que lo que digo es cierto y que hasta la fecha de hoy no han sacado UN SOLO código bueno (apuesto cualquier cosa), y creo que para sacar uno solo, necesitan esperar por lo menos unos 10 mill millones de años. Ya veremos entonces.
Gracias
Por Freddie el 17 de Marzo de 2011
Por Paul el 23 de Marzo de 2011
buenisimo
a oe raxielh los codigos fuentes q mensionas si es posible a: [email protected]
Por GINOVI el 12 de Mayo de 2011
Por Diego el 22 de Mayo de 2011
Por Ferpen el 05 de Junio de 2011
Voy a tratar de revisarla diariamente para ver si responden los autores del post al comentario del amigo juanogo....sino no dejen falsas esperanzas de igual es un buen articulo
Por clon el 05 de Junio de 2011
Por Fabio el 09 de Junio de 2011
Interesante, pero discutible.....Ja Ja Ja... que Caja!.
Por Mariop el 11 de Junio de 2011
Por Javier el 15 de Junio de 2011
Seguro de que con menos de 15 tarjetas validas se podría sacar ese número, solo es cuestión de ver cómo trabaja ese código.
Ojala este código pudiera llegar a mis manos raxielh esto es muy curioso, lástima que creo que sea demasiado tarde para haberlo leído después de 4 meses, mi correo es este [email protected]
Por Carlos el 20 de Julio de 2011
Por norman el 05 de Agosto de 2011
Por Listo el 07 de Agosto de 2011
Por jhon taca cahuaya el 20 de Septiembre de 2011
interesante ahora mestoy estudiando
computacion en un instituto
nacional para sewr un master como tu
Por jhon taca cahuaya el 20 de Septiembre de 2011
Por fede2012 el 29 de Octubre de 2011
esta genial este debate sigamos hablando gente si no es por un genio hagamoslo nosotros juntemos claves
les parece haber i alguien nos ayuda o lo desiframos nosottros
Por Dr.dedo verde. el 24 de Noviembre de 2011
Por luis el 20 de Diciembre de 2011
adada
Por JEAN el 19 de Enero de 2012
Por muy bueno el post, s el 29 de Enero de 2012
Por el 29 de Enero de 2012
Por Telefonica el 04 de Febrero de 2012
Por beto| el 19 de Febrero de 2012
Por Gabriel el 22 de Junio de 2012
Por juanogo el 03 de Julio de 2012
Por Yoel el 02 de Diciembre de 2012
Por vato el 28 de Diciembre de 2012
Por el 22 de Marzo de 2013
Por El yonny el 04 de Abril de 2013
Por El Lince el 18 de Abril de 2013
Por augusto el 29 de Mayo de 2013
Por tu puta el 06 de Junio de 2013
Por david el 30 de Junio de 2013
Por Felipe el 03 de Julio de 2013
Por Maria el 13 de Agosto de 2013
Por oswaldo ulises river el 11 de Septiembre de 2013
Por el 13 de Septiembre de 2013
Por mak el 07 de Octubre de 2013
Por jose el 16 de Octubre de 2013
Por toto el 13 de Diciembre de 2013
Por rulo... el 01 de Enero de 2014
Por ANHELL el 05 de Enero de 2014
Por Javier el 22 de Enero de 2014
Por alvk4r el 03 de Julio de 2014
Por kenchyn el 09 de Agosto de 2014
Por francisco el 14 de Septiembre de 2014
Por maidy el 09 de Octubre de 2014
Por nick el 15 de Octubre de 2014