Omisión de contraseña de administrador de Windows XP. ¿Cómo descifrar una contraseña olvidada de Windows XP? Restablecer su contraseña, cambiar o crear un nuevo usuario e iniciar sesión

Todo el mundo ha fabricado su propia bicicleta en su vida. Para justificar el deseo de hacerlo, sólo se puede decir que si la gente no lo hiciera periódicamente, el mundo simplemente no vería muchas cosas.

Hace mucho tiempo que quiero crear mi propio juego, o mejor dicho, inteligencia artificial (IA) basada en juegos. No mentiré: al principio simplemente hubo falta de conocimiento y luego, curiosamente, hubo tiempo. Tuve algunas semanas de tiempo relativamente libre para realizar mi sueño de infancia.

Te contaré lo que pasó, y también describiré el camino que seguí y las observaciones que hice en el camino. Haré una reserva de inmediato y no describiré el código, sino las consideraciones, pensamientos y problemas que encontré en el proceso de hacer realidad mi sueño.

Etapa de planificación de la estructura.

Al planificar la estructura de su hábitat, la IA inmediatamente intentó incorporar capacidad de expansión y al menos algún tipo de universalidad. Se decidió hacer todo en matrices dinámicas, con el uso generalizado de enfoques de programación orientada a objetos siempre que sea posible.

La jerarquía de clases de hábitat de la IA se basó en varios pares de clases:

  • Punto clave– una clase que refleja las intersecciones de conexiones en el gráfico de ruta.
  • Camino– una clase que proporciona conexiones entre puntos clave.
  • Objeto– una clase que se deriva de la clase Keypoint, cuyas instancias se colocan en la Ruta.
  • Sujeto– Objeto de la misma clase, cuyas instancias tienen funciones de toma de decisiones.

La clase cierra la lista de clases. Mundo, que enmarca todas las clases enumeradas, organizando su interacción entre sí.

Para funcionar, necesitábamos algún concepto de juego específico y sencillo. Y el concepto del juego Pack-Man fue elegido como tal, debido a su sencillo conjunto de reglas.

Inmediatamente se identificaron subclases adicionales de Objetos y Sujetos del Juego:

  • sujeto Pacman– el mismo hombre de carga;
  • objetos Fruta– aquellos para que los coma Pac-Man;
  • sujetos Fantasma- aquellos para quienes se creó Pac-Man en el juego.

Etapa de planificación del trabajo.

Como mostró un análisis superficial: la cantidad de código necesaria para que el juego funcione plenamente, a pesar de la pequeña cantidad de funcionalidad del sistema, resultó ser bastante grande. Se llegó a la conclusión natural de que era necesario dividir las tareas en muchas subtareas aisladas para que al menos se pudieran ver algunos resultados de su alboroto; de lo contrario, los deseos de los niños podrían convertirse en una pesadilla prolongada y nada infantil.

Inmediatamente se identificaron las siguientes etapas de implementación:

  1. Creación de clases que aseguren el funcionamiento del mundo en el que vivirá la inteligencia artificial (clases Mundo, Punto Clave y Ruta);
  2. Representar el mundo y al mismo tiempo crear la base de funcionalidad para la visualización de datos.
  3. Creación de la clase Objeto y sus interacciones con el entorno.
  4. Crear la primera instancia de un Objeto, es decir, Fruta, y renderizarlo.
  5. Crear una adición de funcionalidad para un Objeto para convertirlo en un Sujeto.
  6. Creando una instancia de Pacman. Representación. Agregar reglas al juego.
  7. Desarrollo de código de interacción con el usuario, organización del funcionamiento del sistema en “tiempo real”.
  8. Implementación del algoritmo de búsqueda del camino más corto. Conectándolo con el control de Pac-Man y el cambio automático de su estado por el Mundo en el tiempo.
  9. Creando una instancia de Ghost. Representación. Agregar reglas al juego.
  10. Mejora del sistema en pequeñas formas.
  11. Divirtiéndose.
Con este plan me puse manos a la obra.

Implementación

Las dos primeras etapas resultaron sencillas. Se organizaron tres clases: Mundo, Punto Clave y Ruta: sus constructores, destructores, varias funciones que aseguran la creación de conexiones entre instancias de clases por referencia, y eso es todo.
Se creó una instancia de clase mundial con cinco puntos, donde los caminos formaban una envoltura con un punto central desplazado para que las distancias entre los puntos fueran claramente de diferentes longitudes. El dibujo fue hecho de manera muy, muy modesta: con líneas y círculos, lo suficiente para entender lo que estaba sucediendo en el mundo.

Etapas No. 3 Y №4 Tampoco causaron muchas dificultades: Frukta no corrió, no hizo ninguna travesura, simplemente se quedó allí tumbada y se dibujó.

A partir de etapa número 5 El trabajo principal ha comenzado. La funcionalidad Asunto se escribió utilizando la clase Objeto en forma de una lista de cosas que al Asunto le gustaría hacer. Se agregó la funcionalidad de la clase Mundial, que monitoreaba la lista de tareas pendientes de los Sujetos y las llevaba a cabo dentro del tiempo disponible para el Sujeto y las restricciones y reglas del juego impuestas a las acciones del Sujeto.

Etapa 6 Curiosamente, los problemas no comenzaron con la aparición de una copia de Pac-Man. Simplemente apareció una instancia del tipo Asunto, así como un círculo dibujado en la pantalla en la coordenada deseada. Y se han agregado reglas para comer frutas.

Incluso en etapa número 7, cuando se generó una tarea con el mouse en forma del comando "ejecutar" hasta la coordenada especificada, no hubo problemas. Se buscó el punto más cercano que caería en el Camino en el que ya estaba parado Pac-Man y Pac-Man obedientemente caminó hasta allí.

Las aventuras comenzaron el etapa no 8, donde se realizó la implementación del algoritmo de búsqueda del camino más corto. La función de ruta más corta fue un algoritmo de Lee modificado, adaptado a matrices dinámicas y estructuras gráficas. Las principales dificultades surgieron al escribir código donde se implementó el movimiento inverso. Para reducir el número de reconstrucciones de la estructura del gráfico al mover instancias de Objetos, los Objetos no se crearon como Puntos Clave nodales conectados por Rutas, sino como Puntos Clave que pertenecen a una Ruta. Al tener un código funcional en el momento de escribir este artículo, todavía no estoy seguro de la exactitud de la solución elegida. Lo que es más simple: reconstruir localmente el gráfico Mundial y al mismo tiempo las rutas de los Sujetos que se mueven a través de los fragmentos modificados del gráfico, o simplemente colocar las clases de Sujetos y Objetos en un gráfico de Ruta inmutable.

Por supuesto, en todas las etapas del trabajo, los errores de acceso a la memoria aparecían constantemente. El caso más grave fue cuando el mensaje falló en algún momento en medio del juego. Olvidé eliminar el vínculo entre Caminos y instancias destruidas de Frutas cuando se comieron. El error apareció algún tiempo después de ser comido cuando se sobrescribió la memoria. Mientras los datos del objeto destruido estuvieran almacenados allí y no fueran sobrescritos por el nuevo objeto dinámico, todo estaba bien, es decir. El colapso del programa no fue inmediato.

Finalmente en etapa número 9 Se agregó el primer Fantasma. El punto de destino siempre fueron las coordenadas de Pacman. Usamos una función ya escrita para encontrar el camino más corto, que se llamaba constantemente 24 veces por segundo. Después de generar la lista de acciones, el sistema (el Mundo) realizaba automáticamente el movimiento del Fantasma.

cuando llegué a etapa número 10, entonces, como dicen, ¡se fue el trineo!
Se ha creado un generador de mapas aleatorio. Al crear un mapa para generar Caminos, se establecieron varios criterios para su creación aceptable: no más de 4 Caminos deben cruzarse en los puntos nodales, y los puntos nodos no deben estar más cerca de Caminos ya trazados de cierta distancia, así como los caminos no deben estar más largo que una determinada constante.

Luego se agregaron varios Fantasmas que perseguían persistentemente a Pac-Man.

Era simplemente poco realista jugar con esos Fantasmas. Y luego me di cuenta de que necesitaba una "niebla de guerra" para que los Fantasmas se comportaran de manera más natural y no cambiaran radicalmente su ruta cuando cambias ligeramente la ruta de Pac-Man en algún lugar al otro lado del mapa.
El primer pensamiento fue que para cada Sujeto era necesario crear una serie de elementos visibles del mundo, y también completar la memoria del Sujeto para almacenar dónde, a quién y cuándo vio. Después de pensarlo, me di cuenta de que para una araña que quiere comerse una mosca, todo esto es muy complicado y engorroso de implementar.

La solución fue lo más sencilla posible. Había un punto aleatorio en el mapa hacia donde se dirigía el Fantasma (por lo tanto, se organizó un simple deambular por el mapa y buscar a Pac-Man). Si Pac-Man entraba en un cierto rango de visibilidad (especificado por una constante) del Fantasma, el Fantasma reconstruía su ruta hacia él. Cuando la víctima estaba en el campo de visión, el Fantasma reconstruía constantemente su ruta hacia ella, y cuando Pac-Man se perdía de vista, el Fantasma continuaba siguiéndolo hasta el punto donde la víctima lo vio por última vez. Al llegar a este punto, comenzó de nuevo el deambular a ciegas por el mapa.

De hecho, me detuve allí y respiré con calma.
Al final se completaron elementos decorativos: “Fin del juego” (comerse Pac-Man), contar puntos (el número de frutas consumidas), “Completar el nivel” (comerse todas las frutas).

Los resultados del tormento.

A pesar de la gran cantidad de sudor y sangre derramada, se lograron resultados relativamente pequeños: para futuras investigaciones se descubrió la base del mundo en el que vive la inteligencia del depredador más simple, como una araña. Aparentemente, a continuación es necesario crear una modificación del algoritmo de IA existente para implementar el comportamiento de la "Víctima" (dentro del juego, estas son Frutas que huyen de Pac-Man), así como la IA combinada ("Depredador-presa ), lo que permitirá que el robot Pac-Man lo haga, y luego no desperdicie energía para “jugar”, sino solo con placer ver cómo este “Kolobok” se arroja en un tubo de ensayo.

Puedes ver con tus propios ojos lo que pasó "" (archivo ejecutable para Win32)*. Preste atención al interruptor de palanca "Modo Matrix". Cuando lo enciendes, puedes ver cómo el sistema toma decisiones y sentirte un poco como Neo. Desafortunadamente, pensé en hacerlo en la décima etapa, para comprender mejor el trabajo de la IA. Si hubiera hecho esto antes, habría dedicado menos tiempo a depurar el algoritmo de búsqueda de la ruta más corta.

PD No todo se hace por razones de viabilidad y optimización económica; algunas cosas se hacen por placer. A pesar de la sencillez de los gráficos, cuando “Ella” empezó a respirar, sentí una alegría indescriptible.

* Después de completar todo el trabajo planificado y escribir el artículo, descubrí otro error poco común. La ubicación del error indica que el problema está relacionado con el hecho de que la simulación del mundo del juego se realiza en un controlador de temporizador normal y el control de Pac-Man se realiza en un controlador de ratón normal. En general, no existen semáforos ordinarios u otras cosas "abstrusas" similares que garanticen la integridad de los datos a los que se accede en ambas funciones. Creo que el error se solucionará antes de la boda y la versión comercial se solucionará.

Etiquetas: Agregar etiquetas

Esta parte, ni más ni menos, habla del algoritmo que subyace a la actividad intelectual. Al mismo tiempo, intentaremos responder a la pregunta de cómo podrían surgir fenómenos similares en la inteligencia natural. Por supuesto, no revelaremos todos los secretos de la inteligencia, no crearemos un supercerebro, pero aprenderemos los principios, la dirección principal de dónde excavar a continuación. Aprenderemos más sobre la inteligencia humana. También se realizarán bocetos prácticos de algoritmos que ahora mismo se pueden programar en un ordenador.

Pero primero, brevemente, lo que llegamos a las partes anteriores (). Yo mismo ya he olvidado lo que había allí, así que tendré que recordarlo, de lo contrario ni siquiera podré decir más. :) Para aquellos que lo recuerden, omita esta sección.

¿Qué pasó en las partes anteriores?

Penrose, en sus maravillosos libros, cree que el cerebro es capaz de emitir juicios absolutamente verdaderos y sostiene que la base de los procesos mentales son procesos físicos que pueden realizar cálculos eternos en un tiempo finito. Además, estos procesos no calculan cualquier cosa, sino la verdad absoluta e irrefutable en el sentido más literal de la palabra. Y el cerebro puede "cambiar" estos procesos para pensar. Y es por eso que estos procesos son necesarios para que el cerebro funcione. Y, aunque tales procesos son desconocidos para la física actual, Penrose cree que un nivel más profundo del universo constituye una realidad diferente basada en tales procesos.

En muchos sentidos, Penrose tiene razón sobre esta otra realidad y, además, algún día contaremos ideas no menos interesantes y similares sobre lo que se esconde en los cimientos del universo. Pero aún así, Penrose se apresuró y se saltó, por así decirlo, algunos pasos. La gran mayoría (si no toda) la actividad intelectual puede explicarse mediante cosas más prosaicas y mundanas.

El mérito indudable de Penrose es que explicó de manera convincente por qué la actividad intelectual no puede basarse de ninguna manera en la lógica formal (o en otras palabras, en algoritmos estrictos). Más precisamente, Penrose demostró que la lógica absolutamente verdadera (que también es, en opinión de Penrose, actividad intelectual) es imposible con procesos físicos conocidos. Pero esto lo entendimos a nuestra manera, es decir, que la actividad intelectual no requiere una lógica absolutamente verdadera. O, en otras palabras, la inteligencia humana es plausible, produce buenas aproximaciones a la verdad, pero aún existe la posibilidad de error. Y esto cambia radicalmente las cosas, es decir, cambia por completo los enfoques sobre cómo explicar la inteligencia natural y cómo construir la inteligencia artificial. Y dicha inteligencia se puede simular en una máquina de Turing, programar en una computadora normal, pero es mejor tener una arquitectura con mayor potencia y paralelismo inherente, por ejemplo, cuántica u óptica.

Ahora permítanos recordarle qué tipo de alboroto existe en torno a la lógica de la verdad y la no verdad. Los cálculos matemáticos e informáticos, el razonamiento humano, las construcciones lógicas y las inferencias están asociados con el concepto de algoritmo o sistema formal (de hecho, son lo mismo). La ejecución de un algoritmo (también conocido como la aplicación de las reglas de un sistema formal) es un modelo de todo tipo de cálculos, pensamientos y otros procesos físicos (o, al menos, una aproximación bastante buena). Un algoritmo es un conjunto de instrucciones que alguna computadora abstracta (máquina de Turing) puede ejecutar secuencialmente paso a paso.

Existe el concepto de algoritmo estricto (también es un sistema formal completo y consistente). En el mismo conjunto de datos de entrada, un algoritmo estricto para final el número de pasos dará la misma respuesta. Cuando se aplica a sistemas formales y razonamiento lógico, esto significa que en un tiempo finito para las condiciones iniciales se puede encontrar una respuesta verdadera (consistente e inequívoca). Estos cálculos también se denominan deterministas.

Pero también existen algoritmos no deterministas (no estrictos) en los que estas condiciones no se cumplen (también son sistemas formales incompletos/contradictorios). Para un algoritmo, no satisfacer la condición de finitud significa que se desconoce si el algoritmo completará su cálculo y no está claro cómo saberlo de antemano. Un algoritmo no determinista puede terminar su cálculo o puede deambular para siempre, pero qué hará exactamente es un misterio que puede llevar una eternidad adivinar. Para los sistemas formales, la prueba de la verdad o falsedad de la afirmación original terminará incomprensiblemente algún día o continuará para siempre. La inconsistencia significa que dentro de un sistema formal se pueden seleccionar diferentes cadenas de reglas que darán una respuesta tanto verdadera como falsa para la afirmación original. Para el algoritmo, esto significa que se pueden obtener resultados diferentes a partir de los mismos datos.

Muchos, incluido Penrose, dicen que la actividad intelectual se basa en una lógica formal estricta. Pero aquí hay una emboscada global. El teorema de Gödel, demostrado desde hace mucho tiempo, dice que un sistema formal no puede ser al mismo tiempo completo y consistente. La integridad significa que un sistema formal sabe todo sobre su dominio de conocimiento. Entre otras cosas, un sistema así puede juzgar la verdad por sí mismo. Si un sistema formal es creado por alguien externo, entonces podrá funcionar, produciendo los resultados correctos y sin importarle en absoluto si alguien lo creó correctamente. Si el sistema formal intenta asegurarse de que se hace correctamente, fracasará. Porque nuestro sistema es consistente, pero no completo. Si el sistema puede juzgar su corrección (completa), entonces dicho sistema tendrá contradicciones internas y los resultados de sus actividades no serán necesariamente correctos. ¿Por qué? Incluso porque la cuestión del autoexamen (autoconocimiento, autorreflexión) pertenece a la categoría de los cálculos eternos.

¿Qué se sigue de esto? Resulta (según Penrose) que la inteligencia humana es un sistema completo y coherente, porque puede generar afirmaciones verdaderas y al mismo tiempo controlar su exactitud. Pero según el teorema de Gödel esto es imposible. Por lo tanto, tenemos que involucrar procesos físicos desconocidos para el trabajo del intelecto, que en un breve momento puede mirar alrededor de la eternidad, encontrar una respuesta y devolver esta respuesta al cerebro. Pero como ya hemos señalado, el intelecto no tiene por qué ser completo y consistente, aunque puede muy plausiblemente pretender ser verdadero e infalible.

La segunda emboscada es que la física no conoce las entidades sobre las que opera la lógica formal. Es decir, el razonamiento formal a menudo se basa en los conceptos de números naturales, los conceptos de verdad y falsedad. Los números naturales son aquellos en los que 1+1 = 2, 2+1 = 3, etc. Verdadero = 1, falso = 0, negación de la verdad = falso. Todas las unidades son absolutamente iguales entre sí, reorganizar los términos no cambia la suma, etc. Pero el problema es que en nuestro mundo no existen partículas, cosas o procesos que puedan compararse sin ambigüedades con los números naturales y, al mismo tiempo, las reglas de la aritmética se cumplirían para estas entidades en cualquier rango. En algunos rangos la aritmética es aproximadamente correcta, pero más allá de eso comienzan las perturbaciones globales. Por tanto, la lógica formal, a grandes rasgos, opera sin entender qué, con entidades cuya esencia es bastante vaga. Además, la aritmética en sí misma no pertenece a sistemas completos y consistentes, lo cual es un hecho curioso. Y, en general, parece que conceptos como verdad absoluta y números naturales no pueden existir en principio. Cómo exactamente y por qué se explicará en las siguientes partes.

¿Qué se sigue de esto? Todos los procesos, todos los cálculos que ocurren en el cerebro o en las computadoras son inherentemente incompletos o contradictorios, aunque proporcionan una buena aproximación plausible a cálculos completos y consistentes.

¿Por qué a Penrose no le gustan los sistemas formales contradictorios, por qué Penrose les niega el derecho a ser la base de la actividad intelectual? Como recordamos, en un sistema formal contradictorio, para los mismos datos, es posible derivar tanto un enunciado verdadero como uno falso, hasta el punto de que 1 = 2 y así sucesivamente. Sobre esta base, Penrose implica que los sistemas contradictorios Siempre(!) producir resultados contradictorios. Por lo tanto, Penrose tiene una interpretación muy estrecha de los procesos caóticos; cree que se trata simplemente de procesos aleatorios que, en promedio, pueden modelarse mediante un sistema formal estricto.

De hecho, los sistemas contradictorios pueden, en la mayoría de los casos, converger hacia el verdadero resultado; no es en absoluto necesario que las contradicciones internas dominen y destruyan inmediatamente el sistema. Puede haber sistemas en los que se minimicen las contradicciones. E incluso cuando se ejecuten en una computadora abstracta, seguirán siendo no deterministas, serán incompletas e inconsistentes, pero en la mayoría de los casos producirán un resultado plausible. ¿Por qué Penrose decidió que los sistemas contradictorios siempre serían destruidos por sus contradicciones? Penrose guarda silencio sobre esto...

Además. Como vimos en partes anteriores, los procesos de nuestro mundo, ya sea en las computadoras o en los cerebros, son todos inherentemente vagos y contradictorios. Pero en la mayoría de los casos producen el resultado correcto. Esto se debe a que estos procesos consisten ya sea en múltiples repeticiones de cálculos similares, o en una gran cantidad de elementos similares, de tal manera que la combinación de estas repeticiones o elementos produce en la mayoría de los casos un resultado estable y correcto. Al mismo tiempo, por supuesto, sigue habiendo una posibilidad muy pequeña de que una pequeña contradicción interna crezca y destruya todo el sistema. Pero en la mayoría de los casos, el sistema parece estar armonizado; los elementos, al influirse entre sí, minimizan las contradicciones internas. No todos los procesos en nuestro mundo están altamente armonizados, pero tales procesos existen, y lo que sucede en las computadoras y en el cerebro es uno de ellos. De dónde viene esa armonización en nuestro mundo es el tema de las siguientes partes. Queda una pequeña posibilidad de que en nuestra visión del mundo, en nuestra actividad intelectual, estemos de alguna manera globalmente equivocados, que haya un pequeño agujero de gusano en nuestros juicios que pueda alterar por completo nuestra comprensión del universo. Pero hablaremos más de eso en las siguientes partes.

Inicialmente, el pensamiento humano se basa precisamente en esos procesos. No hay largas cadenas lógicas ni reglas claras. En cambio, existen cadenas cortas de situación-respuesta, sin largos ciclos de procesamiento. Los elementos de estas cadenas tienen una gran cantidad de entradas, y dentro del elemento los datos de entrada se dividen en muchos caminos difusos paralelos, que se duplican entre sí, que dan una solución clara en la salida. A estos elementos los llamamos reglas breves y amplias, plausibles. Estas reglas no implican inferencias lógicas; ya “recuerdan” una solución preparada para situaciones que conocen. El mecanismo para aprender tales reglas también está lejos de ser una conclusión lógica clara y se describe en las partes anteriores.

Estos procesos son buenos para interactuar con el mundo real, pero la lógica formal les resulta difícil. Sin embargo, la inteligencia humana puede operar en modo lógico formal y emular cálculos informáticos. Quizás, pero a costa de procesos mucho más “pesados”. Para ejecutar cálculos en el cerebro de un circuito lógico simple, un programa simple, se utilizan innumerables reglas breves y difusas que, en su combinación, dan un resultado similar al trabajo de la lógica estricta. Y dado que estas reglas no están destinadas en absoluto a la lógica formal, el número de ellas involucradas en la emulación de la lógica formal será mucho mayor que en la interacción con el mundo real. Y por lo tanto, varios animales no son capaces de pensar de manera lógica; esto requiere un cerebro humano sofisticado. Aunque las tareas cotidianas que diferentes animales resuelven de paso están más allá del poder de una computadora.

Pero estos procesos “pesados” también tienen una ventaja. Consiste en el hecho de que el cerebro puede producir nuevas construcciones lógicas y programas informáticos con un alto grado de plausibilidad, mientras que un algoritmo simple pero eficaz sólo puede hacer su trabajo sin sentido. La complejidad de las construcciones derivadas es muchos órdenes de magnitud menor que el grado de los procesos inicialmente involucrados en el cerebro. Es esta diferencia en complejidad la que resuelve la contradicción de que los procesos intelectuales contradictorios crean verdaderas construcciones lógicas. Si no se tiene en cuenta esta diferencia de complejidad, entonces no hay forma de entender de dónde provienen estas verdaderas construcciones.

Las personas resuelven problemas que requieren construcciones lógicas complejas utilizando literalmente el método del "empuje científico". Es decir, para encontrar la opción más simple, ejecutar su cálculo en el cerebro, ver los puntos incorrectos, encontrar la siguiente opción (no necesariamente la correcta), emular el cálculo nuevamente, y así sucesivamente. Con un buen entrenamiento, tales construcciones se convierten en acciones automáticas rápidas que no requieren la participación de la conciencia (y, sin embargo, su complejidad sigue siendo enorme), se recuerdan situaciones típicas y se parecer que el cerebro funciona como una computadora ordinaria (de acuerdo con la lógica formal), aunque no es así en absoluto.

También sucede cuando el cerebro “se prepara” durante mucho tiempo, “acelera” para alguna tarea, se depositan los datos iniciales, los intentos fallidos, las vagas premoniciones y el anhelo de que la verdad esté en algún lugar cercano. Y entonces, bang, y en un destello de percepción, todo encaja y nace una nueva verdad. Puede parecer que esta verdad nació instantáneamente y vino de los reinos superiores. Pero, de hecho, el efecto es el mismo, el destello de intuición fue precedido por un trabajo largo y duro, que involucró, cambió y creó innumerables reglas breves y plausibles, intentó de alguna manera combinarlas y armonizarlas, en su mayoría sin éxito. Y ahora llega el momento en que todas estas reglas se combinan armoniosamente entre sí, se fusionan en un solo proceso armonioso y juntas revelan una nueva verdad.

La inteligencia artificial, siguiendo estos principios, bien puede programarse en computadoras comunes. Naturalmente, este programa estará dirigido inicialmente al indeterminismo y a la presencia de contradicciones internas. Mientras que los programas informáticos existentes, aunque no deterministas y contradictorios, los programas modernos se escriben con miras a hacerlos menos no deterministas y contradictorios. Por supuesto, es mejor que la inteligencia artificial utilice una arquitectura más eficiente que permita una gran cantidad de procesos paralelos e interactivos. Por ejemplo, cuántico u óptico. Las computadoras electrónicas con un solo procesador también pueden programarse para que sean inteligentes, pero probablemente carecerán de energía.

Los procesos “pesados” y la armonización se discutirán en detalle más adelante, pero ahora comencemos a construir inteligencia artificial.

Ladrillos de inteligencia

Empecemos recordando brevemente lo que ya hemos encontrado en este ámbito y lo que falta. Todo esto se describe en detalle en las partes anteriores. Te lo recordamos para que entiendas por qué es así y no de otra manera. Después de todo, el algoritmo de inteligencia en sí no es tan complicado, lo principal son los principios, es necesario comprender en qué dirección moverse y qué resultados esperar.

Lenguajes de programación. Los hay procesales y predicados. En lenguajes procedimentales, un programa se escribe como una secuencia estricta de instrucciones, entre las cuales puede haber transiciones condicionales.

Los lenguajes predicados tienen un conjunto de reglas independientes, cada una de las cuales tiene su propio alcance. El intérprete en los lenguajes de predicados verifica que todas las reglas cumplan con la situación actual y aplica las reglas necesarias que cambian la situación (estado interno) y, por lo tanto, puede construir largas cadenas lógicas a partir de las reglas. Naturalmente, esto es más difícil para el ejecutante que ejecutar un programa procesal.

Los lenguajes procedimentales son buenos cuando el algoritmo se conoce claramente y requiere una ejecución rápida y eficiente. Los lenguajes de predicados son buenos cuando es necesario almacenar conocimiento humano, reglas lógicas y luego sacar conclusiones sobre el conocimiento (por ejemplo, evaluar varias situaciones de entrada). Es conveniente añadirles nuevos conocimientos, sin tener que reescribir todo el programa. Incluso hay modificaciones en las que, después de introducir nuevos conocimientos, toda la base de conocimientos se lleva a un estado coherente. Durante algún tiempo, los lenguajes de predicados (como Prolog) fueron considerados el futuro de la inteligencia artificial.

Pero el hecho es que los lenguajes de procedimiento y de predicados se expresan mutuamente y tienen los mismos problemas inherentes a los algoritmos (sistemas formales, ver arriba y abajo).

Primero, nos enfrentamos al problema de detenernos. El algoritmo puede vagar eternamente en busca de una solución, aunque puede que se encuentre cerca, en la siguiente rama. Pero el algoritmo corresponderá a un sistema formal completo y consistente. Pero a nosotros no nos sirve de nada (por ahora creemos que no podemos hacer un cálculo eterno en un tiempo finito). Si hacemos algún tipo de poda de ramas "largas", entonces el algoritmo se volverá más práctico, pero perderá integridad y coherencia, y no será verdadero, sino plausible. Y aquí no estamos hablando del hecho de que la probabilidad de una decisión incorrecta aumentará ligeramente, sino de que el algoritmo podrá tomar decisiones completamente incorrectas.

En segundo lugar, las reglas de predicados que forman las unidades lógicas son demasiado "estrechas". En la inteligencia natural, las unidades lógicas tienen pedidos más condiciones de entrada y estas entradas se procesan de acuerdo con criterios difusos. Además, con tal representación el conocimiento se “mancha” y pierde su claridad y formalismo.

La lógica difusa existente (existe una sección de este tipo en ciencia) no es adecuada para su uso en lenguajes de predicados, razón por la cual. Cualquier confusión, cuando se encuentra con otra confusión durante la inferencia lógica, puede generar muchas opciones alternativas, diferentes cadenas lógicas. Además, estas opciones pueden crecer fácilmente como una avalancha. La lógica difusa existente, hasta donde yo sé, no se ocupa ni de la paralelización de cadenas ni de su combinación inversa. Lo único que hace la lógica difusa es operar con las mismas expresiones lógicas, solo que en lugar del cero y el uno lógicos, utiliza el rango real de cero a uno y operaciones aritméticas para combinar números de este rango.

Hay variantes de lógica “compleja” en las que, cuando se invierte la implicación, surge la incertidumbre, que se expresa mediante algo así como una unidad imaginaria, y que participa en cálculos posteriores, con posibilidad de paralelizar y fusionar cadenas. Pero por ahora este tema requiere mayor divulgación.

En tercer lugar, no tenemos un algoritmo que pueda entrenar (crear) otros algoritmos, en ausencia de un humano, sino cuando hay un conjunto de situaciones de entrenamiento (un conjunto representativo de pares de valores de entrada y salida correctos).

Sistemas de reconocimiento de patrones. Muy adecuado para el papel de unidad lógica de nuestra inteligencia artificial. Son capaces de clasificar bien la situación de entrada y proporcionar una solución de salida. Es cierto, solo si no se necesita un procesamiento a largo plazo, ya que tales sistemas no tienen memoria interna (estado) ni transformación de este estado, lo que representa más bien un reflejo de "estímulo-respuesta". Pero los motores de reconocimiento hacen un excelente trabajo de clasificación. Incluso pueden procesar imágenes complejas (por ejemplo, reconocer a una persona a partir de la imagen de un rostro). Los métodos para entrenar sistemas de reconocimiento de patrones son eficaces y bien conocidos. Entrenado con un conjunto de ejemplos conocidos, el motor de reconocimiento puede capturar patrones ocultos y generalizar cualitativamente la experiencia a ejemplos desconocidos.

Principios de entrenamiento. Cuando se conocen el resultado deseado (de referencia) y el resultado real del sistema inteligente, es posible calcular el error de este sistema y ajustarlo para que funcione en la dirección correcta.

Los métodos de corrección (entrenamiento) pueden ser precisos (también llamados locales) o globales. Los métodos locales son capaces de calcular el error en todo el sistema y, por tanto, son rápidos y eficientes. Los métodos globales no pueden hacer esto; cambian aleatoriamente los parámetros de todo el sistema, observan con qué éxito el cambio afectó el funcionamiento del sistema y, sobre esta base, deciden si guardar este cambio.

El método local incluye el método de descenso de gradiente, cuando para un error se puede calcular su dirección y propagarlo desde la entrada en la dirección opuesta por todo el sistema. Este método, aunque "sólo" plausible, da buenos resultados en la práctica, por ejemplo, para entrenar perceptrones multicapa (a menudo llamados redes neuronales). Pero (al igual que otros métodos locales) no siempre es aplicable, ya que es posible que no se conozca la estructura del error y el método para corregirlo.

Pero tenemos métodos de aprendizaje global, algoritmos genéticos y recocido simulado, son omnívoros, pero muy voraces en recursos informáticos. Pueden funcionar cuando prácticamente no se sabe nada sobre cómo corregir el error. Un algoritmo genético es más eficiente, especialmente si se sabe algo sobre la estructura del problema que se está resolviendo.

Principio de escala. Significa que repitiendo procesos similares muchas veces o combinando una gran cantidad de elementos similares, se puede lograr un resultado altamente estable (o altamente plausible). Un elemento/proceso similar no significa similar en promedio, significa que los elementos pueden contradecirse y competir entre sí, pueden ser inestables, pero al final aún así se combinan (armonizan) en una solución con un alto grado de plausibilidad. Por ejemplo, en los circuitos lógicos de las computadoras, todas las partículas elementales son inestables, pero su vida media es muy larga o el número de partículas en un elemento lógico es muy grande, por lo que la desintegración de una partícula individual prácticamente no ocurre. provocar un fallo de los circuitos lógicos. Otro ejemplo es que en las redes neuronales artificiales, una conexión neuronal individual tiene poco efecto en las decisiones; las conexiones en sí pueden ser contradictorias, pero al final la red neuronal produce en su mayoría decisiones correctas.

Resumamos. Disponemos de lenguajes de predicados que son adecuados para razonamientos complejos y procesamiento de estados internos. Existen sistemas de reconocimiento de patrones que se pueden utilizar como unidades lógicas para lenguajes de predicados. Existen métodos de aprendizaje omnívoros que esperamos crear (entrenar) automáticamente nuevos algoritmos. Existe un principio de escala que, con pérdida de integridad y coherencia, nos permitirá mantener una alta plausibilidad de las decisiones de nuestra inteligencia artificial.

Algoritmo de inteligencia

Permítanme recordarles brevemente la esencia del algoritmo genético. Existe tal método: la búsqueda aleatoria. Se genera, evalúa y luego cambia aleatoriamente una solución aleatoria. Si el resultado es mejor, se recuerda la decisión. Después de lo cual el ciclo se repite. Este método se utiliza cuando no está claro cómo calcular la solución "científicamente". Resulta que es mucho tiempo. ¿Qué pasa si crea una gran cantidad de soluciones diferentes en paralelo? Para aquellos que progresan con éxito (la calidad de las soluciones es buena o mejora con el tiempo o en comparación con los "vecinos"), creamos instancias de copia y cambiamos (al azar) estas instancias poco a poco. Aquellas soluciones que se ven mal en comparación con el resto, o no mejoran la calidad de la solución con el tiempo, sometemos esas instancias a más y más cambios aleatorios o las eliminamos por completo, y en su lugar colocamos soluciones aleatorias recién generadas. Naturalmente, es menos probable que se repitan las malas decisiones. Hay otra operación (también utilizada al azar), cuando se muerde un trozo de dos soluciones diferentes y estos dos trozos se pegan formando una nueva solución. Se llama cruzar. Cuanto mejor sea la solución, más probabilidades habrá de que se produzca un mestizaje. Como resultado, puede pasar a una solución que tenga un mejor resultado que sus dos padres. Pero también puede ocurrir lo contrario. Si la solución resulta ser mejor, se multiplica aún más; si es peor, lo más probable es que se elimine dicha solución. Esta búsqueda es más eficaz cuando conocemos la estructura de la solución y aplicamos las operaciones de cambio aleatorio (mutación) y cruce sin cortar la solución poco a poco, pero teniendo en cuenta esta estructura.

Debido al hecho de que las soluciones no sólo se llevan a cabo en paralelo, sino que se comparan e intercambian constantemente entre sí, esta búsqueda ofrece un fantástico salto en rendimiento en comparación con una búsqueda aleatoria y resulta capaz de superar los problemas más difíciles. problemas. Parecería que una solución aleatoria típica, en promedio, no es nada interesante y su eficiencia es extremadamente baja. Pero tan pronto como muchas soluciones comienzan a interactuar entre sí, rápidamente aparece y progresa un resultado atípico (una buena solución). Por cierto, Penrose aconseja estudiar los procesos caóticos en promedio, estudiando los casos típicos, enfatizando que, aparte de los casos típicos, no pueden generar nada, lo que, por supuesto, es injusto. Esta búsqueda es una ilustración del principio de escala, uno de los procesos típicos de armonización.

Esto es lo que se llama un algoritmo genético, que puede encontrar soluciones efectivas en una variedad de áreas, cuando ni siquiera se sabe cómo buscar la solución correcta "según la ciencia". O no existe ningún método "científico", como ocurre con la escritura automática de programas. La eficacia del algoritmo genético se evidencia, en primer lugar, en el hecho de que la vida en la Tierra (y luego la inteligencia) apareció precisamente de acuerdo con estos principios. Por qué es posible tal proceso de armonización es el tema de las siguientes partes.

Existe esa dirección en la inteligencia artificial: la programación genética. Cada solución no es un conjunto de parámetros, sino un programa completo escrito en un lenguaje de programación procedimental. Con todos sus bucles, saltos condicionales y estado interno en variables. En consecuencia, el resultado de la decisión es el resultado de la ejecución de este programa. Para crear un programa, se utilizó un algoritmo genético que, a partir de una gran cantidad de programas generados aleatoriamente, creó el programa que mejor resolvió un problema determinado. En el artículo que vi, la tarea era controlar el volante de un coche. Aquellos. el resultado de una decisión no es una respuesta única al input, sino un proceso prolongado en el tiempo. El algoritmo genético tuvo éxito y creó un programa que controlaba correctamente el volante. La tarea no es tan difícil, hacen algo similar con las redes neuronales (aunque todavía hay algún tipo de estado interno y las reglas para la interacción del estado con la red las escribe una persona). Pero es indicativo que automáticamente se creó un programa que tenía un estado interno, varios bucles y ramas.

Desafortunadamente, no seguí más a fondo la situación sobre este tema y no puedo decirles nada más. Los interesados ​​pueden buscar la frase “programación genética”. Por lo tanto, vamos más allá de lo estudiado y entramos en el ámbito de los supuestos. Es muy posible que algunas de estas suposiciones ya se conozcan y estoy reinventando la rueda. Pero sigue siendo interesante. :)

Veamos qué propiedades tienen los programas obtenidos mediante un algoritmo genético. Estos programas pueden tener bucles infinitos (o muy largos), por lo que la evaluación de idoneidad debería descartar los programas que se ejecutan durante mucho tiempo sin producir ningún resultado visible. El movimiento, en general, es correcto, pero, desafortunadamente, arroja largas cadenas lógicas potencialmente interesantes (aún está por verse cómo tenerlas en cuenta). Además, al cruzarse, las ramas del programa se destruirán sin pensar, generando a menudo código sin sentido. Y si para un problema simple esto no es un problema, entonces para problemas más complejos terminará con una gran cantidad de soluciones inadecuadas, porque el cambio más pequeño puede arruinar por completo el rendimiento del programa, y ​​probablemente al final habrá será de poca utilidad. O el programa tendrá una gran cantidad de ramas redundantes, "basura", que se combinarán entre sí de una manera inimaginable para formar la solución correcta. En el proceso de evolución, esta "basura" aprende a sobrevivir a los cambios realizados, de modo que el cambio no rompa fatalmente el programa. Pero en cualquier caso, tendremos que decir adiós a la idea de cadenas lógicas "delgadas", que representarían los mismos programas claros que escribe una persona. Los resultados de la escritura automática de programas estarán lejos de tales cadenas. Por supuesto, aparecerán algoritmos de minería de datos que podrán minimizar este montón contradictorio en un algoritmo claro, pero este algoritmo claro, para mejorarlo aún más en modo automático, deberá devolverse a su forma "manchada" (o la las manchas se producirán por sí solas, en el proceso de formación adicional). Y existe la sospecha de que el algoritmo extraído con la ayuda de la minería de datos tendrá una “perspectiva” más estrecha que su versión original, “borrosa”. En partes anteriores se describió un fenómeno similar sobre el reconocimiento de patrones.

Como recordamos, los lenguajes de predicados son más flexibles para cambiar y adaptarse para registrar el conocimiento humano, porque no consisten en un marco de programa rígido, sino en reglas independientes que se activan automáticamente cuando ocurre una situación (condiciones) adecuada. Un algoritmo genético funciona más eficientemente si sus operaciones tienen en cuenta la estructura de la solución. Escribir en forma procedimental obliga al algoritmo genético a dividir el programa sin pensar, generando muchas opciones inviables. Por lo tanto, escribiremos el programa en forma de predicado y configuraremos el algoritmo genético para que tenga en cuenta dicha estructura. Es decir, diferentes soluciones de software podrán intercambiar no fragmentos de bits, sino reglas totalmente independientes. Los cambios aleatorios funcionarán a nivel de regla. Además, dentro de un programa puedes tener un número diferente de reglas, sin importar el orden. Y estas reglas pueden ser muy similares entre sí o completamente diferentes. Puede reproducir y cruzar no sólo los programas en sí, sino también las reglas dentro de un programa. Y todo porque al ejecutar el programa, ellos mismos se alinearán en la cadena correcta, porque el ejecutor no sigue estúpidamente las ramas del programa (como en un lenguaje procedimental), sino que selecciona reglas de acuerdo con la situación actual (cada regla cambia la situación).

Pero lo más interesante sería hacer que el banco de reglas sea común a todos los programas. En este caso, el programa representaría datos sobre qué reglas prefiere del banco general y, posiblemente, información sobre la secuencia preferida de su aplicación. En este caso, los criterios de desempeño se pueden aplicar no sólo a los programas, sino también a las reglas. Después de todo, cada regla contribuye a varios programas diferentes y es posible calcular cuántos de estos programas tienen éxito y cuántos no. Y sobre esta base, sacar conclusiones sobre la efectividad de las reglas y, en consecuencia, evolucionar no solo los programas, sino también las reglas (es decir, reproducir, cruzar, cambiar aleatoriamente las reglas mismas). La mayor eficiencia proviene del hecho de que ya no se duplican reglas similares en diferentes programas; cada programa tiene acceso a un banco más amplio de reglas. Pero lo más importante es que las reglas se evalúan juntas y se utilizan de forma cruzada en diferentes programas, lo que (presumiblemente) mejora dramáticamente la calidad de la evaluación y evolución de las reglas.

Entonces tenemos la versión más simple de inteligencia artificial, bastante aplicable en varios juegos, incl. informática, en sistemas expertos y sistemas de control de procesos. Esto también es adecuado para modelar procesos de caja negra con memoria interna, en lugar de modelos de Markov (estos son procesos para los cuales está claro qué hay en la entrada y en la salida, pero el estado interno y los procesos no están claros, en nuestra opinión, una caja negra ).

Aquí puede surgir una propuesta lógica de que un algoritmo genético podría separar partes de un programa en subrutinas independientes y tener en cuenta su estructura al cambiar el programa. Para la notación procedimental, esto puede aumentar la eficiencia, pero aun así no eliminará sus desventajas inherentes, porque seguirá necesitando una secuencia rígida de instrucciones, declaraciones condicionales y bucles, que pueden romperse con un cambio accidental. En la notación de predicados, los procedimientos como tales no existen en absoluto. Pero existe la posibilidad de dividir la situación global en un conjunto de situaciones jerárquicas y en una secuencia de situaciones, de modo que cada subsituación se ocupe únicamente de su propio conjunto de reglas. En un futuro próximo, dicha partición debería mejorar la eficiencia del algoritmo genético. Pero el hecho es que en la inteligencia real la interacción de reglas es más compleja, por lo que tal división es característica y no característica. Por lo tanto, al imponer tal división de la situación, a corto plazo podemos obtener beneficios, pero en el futuro esto interferirá. Más detalles sobre esto seguirán.

Inteligencia Artificial, versión 2.0

En los lenguajes de predicados (como Prolog), no existe una secuencia de pasos en el programa. Sólo hay un conjunto de reglas y la secuencia de ejecución de estas reglas no está especificada inicialmente.

Se parece a esto:
regla n: resultado si condición;
regla m: resultado si condición;
etcétera.

La condición puede ser bastante compleja e incluir tanto las expresiones más simples como otras reglas, incluida la aplicación recursiva mutua. El resultado de ejecutar una regla es también una condición compleja, que puede denotar tanto la situación final como parte de la condición para verificar la aplicabilidad de otras reglas (y de ella misma). Estos resultados son claros e inequívocos.

No existe una situación global al ejecutar un programa predicado. Hay una condición inicial bajo la cual el intérprete busca la primera regla que encuentra una condición adecuada, el resultado de esta regla se agrega a la condición inicial. Se repite la búsqueda de una regla adecuada para la nueva condición. El resultado es una cadena de inferencias que puede conducir a una regla que indica el logro del resultado final. Si el intérprete agota todas las cadenas disponibles, comenzará a retroceder, para cada bucle buscará la siguiente regla adecuada, construyendo nuevas cadenas.

Tenga en cuenta nuevamente que el estado (situación) representa la condición inicial más una cadena de reglas aplicadas. Al retroceder, la cadena de reglas aplicadas cambia en consecuencia.

Al encadenar reglas, el intérprete puede terminar en una búsqueda interminable, aunque la solución pueda estar cerca. Por lo tanto, si el intérprete es "inteligente", entonces puede reconocer lugares de posibles bucles o llevar a cabo varias cadenas de decisiones en paralelo, eligiendo finalmente entre ellas la que conducirá rápidamente a la situación final. Por otro lado, quien escriba el conjunto de reglas debe tener cuidado de minimizar la probabilidad de que se produzca un bucle.

Por ejemplo, el problema de los misioneros y caníbales, cuando en un barco es necesario transportar una multitud de misioneros y caníbales al otro lado. El barco sólo tiene capacidad para dos personas. Si hay más caníbales en la costa que misioneros, los misioneros serán devorados. Al resolver un problema en un lenguaje predicado, se describen situaciones aceptables para que los misioneros no se coman (incluso de forma recursiva) y movimientos aceptables del barco (siempre debe haber una o dos personas en el barco). Luego, el propio intérprete construye un árbol de soluciones factibles hasta llegar a una situación en la que toda la multitud acaba del otro lado. La cadena de reglas en este caso lleva la secuencia del transporte de misioneros y caníbales a través del río.

Dado que las reglas están claramente vinculadas entre sí en el proceso de búsqueda de una solución, en los lenguajes de predicados la jerarquía y secuencia de su aplicación ya está especificada a nivel de reglas, algo similar a la agrupación en procedimientos en los lenguajes procedimentales. Pero tan pronto como dejamos menos clara la cohesión entre las reglas, esa agrupación se pierde. Y cómo exactamente volverá a surgir (o cómo ayudarlo a formarse) es una pregunta nueva.

En los lenguajes de predicados no hay bucles, ni saltos condicionales ni una secuencia de acciones estrictamente definida. El intérprete siempre "sabe" qué hacer, porque selecciona el siguiente paso en función de la situación actual. El ejecutante elige solo un paso, porque en el siguiente evaluará la situación cambiada y elegirá un nuevo paso, sin importar cuán inesperadamente cambie la situación. Esto también ayudará al intérprete a salir si parte de su programa falla o toma una decisión equivocada. En lugar de caer catastróficamente en la dirección equivocada, el ejecutante reevaluará la situación y, muy posiblemente, el siguiente paso mejorará esta situación.

Por supuesto, los procesos involucrados consumen mucho más poder en comparación con la redacción procesal de un programa. Y en su forma original en los lenguajes de predicados, no todo es tan sencillo como se describe en el párrafo anterior.

La desventaja de los lenguajes de predicados es que el alcance de las reglas es muy limitado y están construidas en cadenas demasiado largas. En inteligencia, por el contrario, predominan las cadenas cortas de producción, en las que la unidad lógica evalúa una gama muy amplia de condiciones de entrada, y según criterios difusos y no lineales.

Por lo tanto, el siguiente paso en la construcción de inteligencia artificial es reemplazar reglas estrechas y claras por otras vagas y amplias, y acortar la cadena de inferencia.

Primero, creemos el estado global del programa (una matriz regular de números). Parte de esta matriz son los datos de entrada. Se actualizan periódicamente de forma externa. Si permitir que el programa los cambie no es una cuestión fundamental, lo principal es que se actualicen periódicamente. Parte de esta matriz es el estado interno del programa. La parte restante son los datos de salida. Las celdas internas y de salida se diferencian únicamente en que la solución se lee desde las celdas de salida. Tanto las entradas como las salidas se utilizan siempre para escribir/leer el mismo parámetro. Por ejemplo, entrada No. 1 - velocidad, entrada No. 2 - sensor de combustible, salida No. 3 - cambio de posición del volante, salida No. 4 - cambio de velocidad. Asignamos números arbitrariamente; durante el proceso de capacitación, el programa mismo debe aprender a comprender dónde están la entrada y la salida.

Como base para la regla, tomemos, por ejemplo, un perceptrón multicapa (que a menudo se denomina simplemente red neuronal). Tenga en cuenta que aún desconocemos el algoritmo para entrenar dicha red neuronal dentro del programa. Tendremos muchas redes neuronales de este tipo. Todos juntos formarán un conjunto de reglas para el programa. Cada red neuronal recibe como entrada todo el estado global del programa (el número de entradas es igual al número de celdas de estado). La red neuronal tiene pocas salidas. Cada salida también corresponde a una de las celdas de estado. En cada iteración, lo que se obtiene en la salida de cada red neuronal se suma al estado global (los valores de salida pueden ser negativos). Todas las redes se sondean simultáneamente en función del estado actual y su impacto total crea un nuevo estado.

El número de salidas y su vinculación para cada red se selecciona inicialmente de forma aleatoria. Construimos cambios evolutivos de tal manera que en la mayoría de los casos dejan sin cambios la conmutación entre las células del estado global y las entradas/salidas de la red neuronal. Y sólo con una pequeña probabilidad de cambios se puede reorganizar la entrada o salida de la red a otra celda. Esto es necesario porque por ahora creemos que cada celda es un determinado parámetro (incluso interno), por lo tanto, si cambiamos la entrada/salida de la red a otro parámetro al que no está acostumbrada, lo más probable es que el resultado no sea exitoso. Desafortunadamente, con esta maniobra volvemos a perder algunas propiedades interesantes de la inteligencia real, pero ahora ganamos en eficiencia. Volveremos sobre estas propiedades más adelante.

En el proceso de evolución, el número de células del estado global también puede cambiar. Luego, todas las redes neuronales se ajustan en consecuencia. Si se clonan células, se clonan las correspondientes entradas y salidas de las redes neuronales. Si se eliminan celdas, las entradas/salidas correspondientes se eliminan de todas las redes.

También hay cambios evolutivos que pueden aumentar o disminuir el número de salidas de una red neuronal en particular.

¿Cómo producirá exactamente una solución un programa que consta de un conjunto de redes neuronales de este tipo? Más precisamente, ¿cómo se puede entender después de la siguiente iteración que el programa ha tomado su decisión y leer esta decisión en las celdas de entrada? Ésta también es una pregunta interesante que requiere experimentación. Las primeras consideraciones son las siguientes. Los valores de salida se estabilizan. O hay salidas especiales que indican que la respuesta está lista. Estas salidas se autoajustan en el proceso de evolución.

Después de eliminar las decisiones, el programa debería seguir funcionando, probablemente en función de su estado interno. ¿Cómo impulsarlo a seguir trabajando, ya que el programa se ha estabilizado en una solución específica? En primer lugar, una vez eliminada la decisión, las celdas de entrada se reescribirán con los datos actuales (asumimos que mientras la red toma una decisión, los datos de entrada se han mantenido prácticamente sin cambios). En segundo lugar, puede crear una celda de entrada especial en la que colocar un número grande al inicio de la iteración. A continuación, puede aprender a cambiar este número usted mismo o reducirlo desde el exterior, haciéndole saber a la red que el tiempo está pasando. En general, hay suficientes ideas para experimentar.

Ahora una explicación de por qué esto es así.

En primer lugar, abandonamos la construcción de cadenas de reglas y obligamos a cada regla a escribir el resultado de su trabajo en el estado global. Al hacer esto, hicimos imposible construir largas cadenas de producción y retrocesos, pero obtuvimos una respuesta más rápida y una evaluación amplia y confusa de la situación. Tenga en cuenta que el procesamiento paralelo de varias opciones, donde cada opción tiene su propio estado global, no ha desaparecido. Pero no tenemos una ramificación tan amplia como en el intérprete de predicados original. Si intentáramos ramificar cadenas de inferencia basándonos en reglas amplias y difusas, entonces el número de opciones se saldría catastróficamente de escala incluso en las primeras etapas de construcción de una solución.

Como resultado, obtuvimos algo completamente diferente, aunque parecía similar a la conclusión original sobre los predicados. Este algo ya no es capaz de construir conclusiones complejas y claras, pero es capaz de actuar en un entorno complejo y que cambia rápidamente, e incluso tiene algunos rudimentos de una conclusión lógica plausible, que la versión original no puede hacer. La derivación de conclusiones complejas y claras volverá a nosotros, aunque de forma inesperada, pero por ahora la inteligencia resultante carecerá de ellas.

Sin embargo, el algo resultante puede resolver problemas lógicos (como jugar al ajedrez) a su manera, de forma similar a como lo hace una persona. Este tipo de pensamiento se puede llamar situacional. No se parte de construir largas cadenas lógicas, sino de evaluar cuál es la situación actual y cómo cambiarla. La situación incluye tanto los datos externos como el estado interno, lo que el sistema ha "pensado" en este momento. La evaluación y la toma de decisiones sobre hacia dónde avanzar se realizan en todos paso, en contraste con los algoritmos procedimentales y la inferencia lógica, que pueden hundirse en largos razonamientos, saliendo de la realidad. Por lo tanto, los cambios accidentales en dicho programa no serán fatales para su rendimiento, a diferencia de la grabación de procedimiento. Incluso si se encuentra en una situación incomprensible o comete un error, dicho programa no caerá en el estupor, sino que intentará hacer algo, porque no es una pequeña rama del algoritmo la que participa en la evaluación de la situación. sino todo el conjunto de reglas. E incluso si el programa hace cambios caóticos al principio, tarde o temprano se encontrará en una situación familiar y podrá orientarla en la dirección correcta.

El pensamiento situacional se basa en tres cosas. La primera es la generalización de la situación a un caso familiar (como en los sistemas de reconocimiento de patrones). Por ejemplo, a partir de la variada disposición de las piezas en un tablero de ajedrez, el sistema de pensamiento encuentra algo en común, evalúa la situación, si existe una amenaza para sus piezas, si existe la posibilidad de realizar un ataque sin pérdidas, luego Puede haber situaciones de combinación más específicas. En segundo lugar, es la experiencia (una biblioteca de reglas breves y plausibles que se aplican para mejorar una situación sin largas deducciones lógicas). A partir de la valoración de la situación se proponen alternativas para cambiar la situación, por ejemplo, datos aproximados de cómo mover las piezas. El analizador traduce estos datos aproximados en los movimientos correctos de las piezas en el tablero de ajedrez (si no se pueden encontrar los movimientos correctos, se toma la siguiente alternativa). Pueden ocurrir situaciones similares (y, en consecuencia, soluciones para ellas) en cualquier etapa del juego, e inmediatamente obtenemos una solución para ellas, sin una larga búsqueda de opciones para varios movimientos. Sí, estas opciones son “sólo” plausibles, pero incluyen una gran cantidad de experiencia de partidos reales y son bastante aplicables a partidos nuevos. Es más, estas situaciones incluyen cierto conocimiento de cómo se desarrollará el juego con muchos movimientos por delante, pero no al nivel de mover piezas, sino al nivel de cambiar la situación táctica (que puede incluir ciclos interminables, como mantener el equilibrio para lograr un empate). ). Y si aun así provocan pérdidas, la biblioteca se complementará con nuevas reglas que funcionarán en su situación. En tercer lugar, se trata de una verificación interna de una solución probable varios pasos adelante (es decir, proponer algo y luego estimar qué tan bien ese algo cambiará la situación, manteniendo varias soluciones alternativas, nuestro sistema aún no sabe cómo hacerlo, solo ofrece una opción, pero hablaremos de eso más adelante).

Por cierto, ¿al estudiar redes neuronales quizás haya pensado en hacerlas funcionar no solo en función de los datos de entrada, sino también en enseñarles a digerir el estado interno y ejecutar programas complejos? Me preguntaba. Es cierto que hace mucho tiempo que nunca se me ocurrió nada que valiera la pena sobre cómo entrenar una red de este tipo. Pero ahora hay una respuesta desde una dirección ligeramente diferente.

¿Por qué creamos muchas redes neuronales, en lugar de una grande que pudiera actualizar todo el estado? El hecho es que para que un algoritmo genético funcione eficazmente, es deseable tener un conjunto de reglas independientes, cada una de las cuales sería responsable de alguna acción específica (aunque oculta a nuestro entendimiento). Además, dichas reglas se pueden intercambiar entre programas, se pueden crear diferentes conjuntos de programas a partir de ellas, se pueden cambiar y clonar reglas individuales e incluso se puede formar una biblioteca de las reglas más exitosas (o incluso en el futuro). Será difícil hacer esto con una gran red neuronal. Además, para las redes neuronales normales, un conjunto de redes tiende a funcionar mejor que una red neuronal normal.

Por razones similares, cada red neuronal tiene solo una pequeña cantidad de salidas. Aquellos. Cada regla es competente para tomar su propia pequeña decisión. Pero al mismo tiempo, cada red cuenta con aportes de todo el estado, con la expectativa de tener una visión global de la situación, pero al mismo tiempo no reaccionar ante la mayoría de los casos que no se relacionan con el alcance de una norma específica. Cada red debe aprender esto a través de la evolución. Por lo tanto, incluso cuando se influya en el estado global, se elaborarán aquellas reglas que sean aplicables en la situación actual. Es muy posible que el número de entradas deba ser limitado, no tengo ninguna idea al respecto, aquí solo el experimento ayudará.

Como resultado, después del entrenamiento deberías obtener un programa que consta de un conjunto de redes neuronales. El programa comienza con un estado inicial en el que se especifican las celdas de entrada; las celdas restantes se pueden restablecer a cero (o tener pequeños valores aleatorios). En cada iteración, el estado global se envía a la entrada de todas las redes, se calcula el resultado de la operación de todas las redes y la salida de todas las redes se agrega inmediatamente al estado global. La próxima iteración está por llegar. Puede comprender que la solución está lista, por ejemplo, por el hecho de que los valores de salida se han estabilizado o se ha enviado una señal a una salida especial que indica que la solución está lista. Después de eso, se leen los valores de salida, se cargan nuevos valores de entrada y el programa continúa trabajando con los datos actualizados.

Este programa se crea automáticamente mediante un algoritmo genético. Lo principal es que tenemos al menos algún criterio para evaluar la efectividad de los programas resultantes (es decir, si un programa es mejor que otro), y esto es suficiente para que el algoritmo genético funcione. Para los problemas del mundo real, ese criterio suele existir. Estos también pueden ser conjuntos de ejemplos de trabajo que se consideran buenos y malos para diferentes situaciones (los sistemas de reconocimiento de patrones también aprenden de los ejemplos). Habiendo aprendido de ejemplos conocidos, el programa, al igual que los sistemas de reconocimiento de patrones, podrá generalizar su experiencia a ejemplos desconocidos, incluida una generalización que puede ser de naturaleza cualitativa, capturar patrones ocultos en un conjunto de ejemplos y dibujar patrones inesperados (pero correctos). ) conclusiones. Para problemas que requieren una inferencia lógica precisa y una solución clara, esto es más difícil (pero hablaremos de eso más adelante). También puede haber opciones para obligar a los programas a competir entre sí, por ejemplo, a jugar al ajedrez, y reconocer el que juega mejor como efectivo, entonces no se necesita una evaluación externa.

Un algoritmo genético genera aleatoriamente un conjunto de reglas (redes neuronales) y un conjunto de programas. Todas las reglas se encuentran en un almacenamiento común. Cada uno de estos programas consta de su propio conjunto específico de reglas tomadas de un repositorio común. Las reglas en sí están en el repositorio; el programa sólo hace referencia a ellas. Para evaluar la eficacia, todos los programas se lanzan en paralelo (cada uno tiene su propio estado y conjunto de entradas y salidas). Los programas que funcionan más rápido y más eficientemente reciben las mejores calificaciones. Aquellos programas que tardan mucho en pensar o no toman ninguna decisión son multados.

Es más probable que los programas malos se cambien o eliminen por completo. Se reemplazan por programas recién generados o se clonan a partir de programas existentes. La evaluación del programa puede ser acumulativa, es decir acumular, dando al programa algo de tiempo para evolucionar. Es más probable que los buenos programas sean clonados. Hay una evolución de los programas de malos a buenos.

Una vez alcanzada una solución suficientemente buena, se selecciona el mejor programa como resultado del algoritmo genético y este programa se utiliza posteriormente para problemas reales.

¿A qué cambios evolutivos pueden estar sujetos los programas? Agregue o elimine una regla de la tienda. Cruzando con otro programa, es decir, se toman dos programas, en base a ellos se crea un tercero, que consta de parte de las reglas de un programa y parte de las reglas del segundo programa. Las reglas que deben agregarse, eliminarse o escribirse en el programa al cruzar se seleccionan al azar. Aunque, si lo piensas bien, tal vez haya formas de hacerlo de manera más decidida, tal vez haya una evaluación de la efectividad de la participación de la regla en un programa en particular.

¿A qué cambios evolutivos pueden estar sometidas las reglas (redes neuronales)? Como ya se mencionó, uno de estos cambios es un cambio en el número de celdas del estado interno, lo que afecta a todas las reglas. La necesidad de aumentar o disminuir el número de celdas de estado puede evaluarse más o menos por la dinámica del programa, con qué frecuencia cambian los estados, cuánto se correlacionan entre sí, cuánto afectan los valores de salida y qué tan eficiente es el proceso. La población del programa es general. Los próximos cambios evolutivos son la clonación de reglas, cambios aleatorios en las reglas (es decir, "sacudir la balanza" de la red neuronal, como en el recocido, cuanto menor es la eficiencia, más fuerte es la sacudida). La clonación, junto con un cambio posterior en las reglas, también puede conducir a la clonación de programas. Por ejemplo, en el programa original permanece un vínculo a la regla original, en el programa clonado hay un vínculo a la regla clonada. O en el programa fuente aparece un enlace adicional a un clon de la regla. Se pueden infringir reglas cuando se toma una pieza de dos redes neuronales y se pega en una tercera red. En las reglas (redes neuronales), la cantidad de salidas puede cambiar aleatoriamente, como se describió anteriormente, y la cantidad y estructura de las conexiones internas pueden cambiar.

Para cada regla, puede calcular su efectividad en función del éxito de los programas en los que se incluye la regla. Además, también podemos tener en cuenta el hecho de que una regla puede incluirse en el programa, pero estar inactiva y, por tanto, no afectar el funcionamiento del programa. Con base en esta evaluación, podemos hacer evolucionar el banco de reglas de manera direccional, es decir, propagar reglas exitosas con mayor frecuencia y eliminar o cambiar reglas ineficaces con mayor frecuencia. También podemos crear programas basados ​​en las reglas más efectivas. O es más probable que el proceso de cambio incluya mejores reglas en los programas. Tenga en cuenta que el banco almacena reglas con diferentes alcances, pero que, sin embargo, resuelven un problema común.

Pero lo más interesante es que parece que para cada regla puedes calcular no solo la eficiencia, ¡sino también el error! Es decir, comprender cómo debería actuar correctamente esta regla en determinadas condiciones de entrada. Después de todo, tenemos ejemplos de reglas (redes neuronales) que funcionan en buenos programas (creemos que fueron decisiones correctas de las reglas que formaron el programa) y ejemplos de trabajo en malos programas (creemos que fueron decisiones incorrectas del reglas que componían el programa). En consecuencia, se puede intentar fortalecer las buenas decisiones que produjo cada red neuronal y minimizar las malas decisiones. Los valores de las entradas y salidas se pueden reproducir sin problemas y, a partir de ellos, se puede construir un conjunto de entrenamiento que se puede introducir en el algoritmo de retropropagación. El principal problema aquí es desplegar la secuencia temporal de lo que había en las entradas y salidas del conjunto de entrenamiento, y aquí es donde pueden surgir ambigüedades. Después de todo, no podemos asumir que todas las decisiones (pares de entrada y salida) en la red correcta fueron idealmente correctas y en la incorrecta, idealmente incorrectas. ¿Quizás esto sea culpa de una regla completamente diferente, que “eclipsó” la decisión correcta al final? Involucrarse en el desarrollo de toda la secuencia de decisiones es una idea perdida. Por lo tanto, tendrás que pensar en formar una muestra basada en estas secuencias de tiempo. E incluso si, al formar una muestra de entrenamiento, descartamos muchos ejemplos, dejando solo los más inequívocos, seguirá siendo un progreso.

Ahora veamos qué tenemos. Y ahora tenemos un medio para escribir automáticamente programas que puedan navegar por problemas del mundo real, actuar con flexibilidad en una amplia gama de situaciones, recuperarse de errores, tener algún tipo de lógica interna y pronosticar/modelar la situación. Lo que no pueden hacer es desarrollar cadenas lógicas sutiles y sacar conclusiones largas. Aunque para muchas tareas dicha inteligencia podrá simular que en ella se desarrollan procesos lógicos profundos, aunque en realidad sólo se haya aplicado la preparación recibida durante el entrenamiento. Falta tal inteligencia e independencia; una persona todavía necesita hacer mucho al respecto. Y en términos de hardware, lo que obtuvimos no se parece mucho a lo que se le ocurrió a la naturaleza.

Inteligencia Artificial, versión 3.0

Ahora agreguemos algo llamado emulador de entorno externo. Necesitaremos dos variedades, una para emular el entorno externo y la segunda para realizar predicciones. También habrá una tercera variedad, pero hablaremos de ella un poco más adelante.

Un emulador en modo de predicción debe ser capaz de generar el comportamiento esperado del entorno externo con una pequeña cantidad de pasos hacia adelante, conociendo el historial de estados anteriores y el impacto actual en el medio ambiente desde el programa de control. Ahora el programa no afectará inmediatamente al entorno externo, sino primero al emulador. Y en el emulador puedes ver el pronóstico para ver si el entorno ha cambiado en la dirección correcta debido a la influencia del programa. Por tanto, puedes tener varias copias de programas entrenados de forma similar, pero diferentes entre sí. Para cada uno de ellos, crea tu propio emulador de entorno en tiempo real. Y en cada paso, libera al entorno externo el impacto del programa que recibe la mejor calificación en el emulador. Otra opción es tomar la decisión (no necesariamente la mejor) que sea aceptada por el “voto mayoritario” del equipo del programa, entonces esta decisión será confiable.

Un emulador en modo emulación es similar a la predicción, pero se utiliza en el proceso de entrenamiento de programas cuando no existe un entorno externo real. En la versión anterior, tomamos ejemplos de corte ya preparados tomados del entorno externo. Entonces, en lugar de estos ejemplos, puedes crear un emulador entrenado para recrear situaciones típicas en el entorno externo. Después de todo, puede haber muchos ejemplos y es más eficaz utilizar un emulador compacto en lugar de este avance.

El emulador en modo de entrenamiento se puede colocar sobre sensores reales y dejarlo durante mucho tiempo. Una pregunta lógica es: ¿por qué no instalar inmediatamente el programa necesario para el entrenamiento en los sensores? Hay varias respuestas aquí. Primero, es posible que queramos entrenar la próxima versión del programa y luego volveremos a necesitar controlar dispositivos reales. En segundo lugar, es imposible experimentar con sensores reales para ver si el programa se entrenó correctamente, o dichos experimentos pueden ser costosos y el emulador puede funcionar en modo de predicción.

Además, el emulador se puede configurar de modo que, por un lado, pueda producir desviaciones aleatorias del comportamiento del entorno y, por otro lado, combinar diferentes secuencias de tiempo del comportamiento del entorno. Dado que el emulador está entrenado en el entorno externo, estas combinaciones se “inventarán” de manera plausible. Lo que amplía el conjunto de ejemplos de programas de formación.

Naturalmente, todo lo que sucede en tiempo real se puede volver a registrar y utilizar para la formación adicional automática de programas.

Los programas para el emulador se pueden crear utilizando la misma tecnología descrita anteriormente.

Si el entorno externo es muy complejo (como cuando se juega al ajedrez), entonces el emulador se construirá utilizando una tecnología muy similar al programa de control en sí. Hasta el punto de que durante el entrenamiento los programas jugarán entre sí y el programa más fuerte sobrevivirá. El emulador de predicciones se puede personalizar no sólo para buscar el mejor movimiento, sino también para adaptarse al estilo de juego del oponente. Así, al jugar con una persona, se desarrollará toda una batalla en el “cerebro” de la máquina entre muchos programas y sus oponentes en el emulador antes de tomar una decisión final.

Así, al utilizar un emulador de entorno externo, mejoramos tanto la calidad de la formación del programa como la calidad de la toma de decisiones en tiempo real.

¿Existe tal paralelismo entre la inteligencia natural, la toma de decisiones competitiva y un emulador de entorno? Creo que sí, pero no de forma tan directa. Lo que se formó durante la evolución natural es probablemente más complejo y eficiente. Pero aquí, por simplicidad y para lograr rápidamente el efecto, introdujimos la competencia y el emulador de forma artificial.

Después de introducir el emulador ambiental y la solución colectiva competitiva, podemos introducir nuevas propiedades de nuestra inteligencia artificial.

Soluciones de itinerancia en segundo plano. Después de tomar una decisión, no es necesario forzar la reestructuración de todos los programas para comprender el siguiente paso. Puedes dejar algunos programas (buenos según algunos criterios) para seguir pensando durante mucho tiempo en situaciones pasadas. Es muy posible que se les ocurra algo, y ese algo será útil en la situación actual (incluso modificada) o será útil para aprender más. Por ejemplo, un programa rezagado puede desbaratar el plan del enemigo o encontrar una solución táctica interesante. Entonces será posible intentar cambiar la situación actual hacia esta solución (la inteligencia artificial “cambia de opinión”), y si en ese momento el juego ya ha terminado (o ha ido en otra dirección), entonces la solución encontrada se puede utilizar en el entrenamiento. Cómo se implementan exactamente ambas opciones es tema de estudios separados. La inteligencia artificial estará “en línea” todo el tiempo y pensará, mejorará y dialogará consigo misma, casi como una persona.

Explosión de opciones. Puede intentar detectar situaciones en las que un programa separado (o un grupo de programas) está en una bifurcación, cuando se detecta una situación ambigua y forzar esta situación a ramificarse en nuevas ramas de decisión (programa + emulador). Una vez más, cómo detectar tales situaciones y cómo ramificarlas es un tema de investigación aparte, un campo sin explorar. Hasta ahora esto es sólo a nivel de una idea, la idea de que en caso de ambigüedad el intelecto debería poder diversificar opciones. Pero ramificar no es en absoluto lo mismo que forzar un árbol de decisión por fuerza bruta. Es más bien como desdibujar la función de onda, como la aritmética compleja, cuando operaciones con ambigüedad (unidad imaginaria) producen varias opciones, que posteriormente interactúan entre sí según las reglas de la misma aritmética. Además, las soluciones ramificadas en inteligencia artificial deben continuar coexistiendo, comunicándose entre sí (cómo exactamente también es una cuestión), y en el momento adecuado las ramas pueden converger en una única solución. Además, la ramificación no se producirá de forma estúpida, como cuando se prueban opciones, sino precisamente en aquellos momentos en los que resulte más interesante.

¿Cómo se descubriría exactamente un posible punto de bifurcación? Para las redes neuronales ordinarias, existen algoritmos que aumentan la capacidad de la red neuronal si no es suficiente para el procesamiento de datos y reducen la capacidad de la red si es redundante para la toma de decisiones. Cambiar la capacidad en una red neuronal es agregar y eliminar pesos-conexiones entre las neuronas y las neuronas mismas (lea agregar/eliminar filas en una matriz no lineal y restablecer a cero elementos que no afectan la solución). Hay toda un área sobre árboles neuronales que crecen según sea necesario. Asimismo, en un grupo de programas se puede comprobar en qué están “pensando” los diferentes programas, minimizar situaciones similares e intentar generar nuevas direcciones de “pensamiento”. Para evaluar esto, en primer lugar, los emuladores nos ayudarán; debemos observar en qué medida ofrecen una visión del entorno externo.

También puede consultar programas individuales para ver cuán inequívocamente brindan una solución. Si un programa vaga entre varias soluciones o no converge a una solución, entonces se pueden lanzar programas adicionales en esta situación, inicializados por la misma situación, pero con desviaciones aleatorias, para estimular el "curso de pensamientos alternativos". La ramificación también puede ser útil durante la capacitación, cuando será posible determinar qué tan ambiguo es un programa en su solución y dividir los casos ambiguos en varios programas más inequívocos para que funcionen mejor juntos en un equipo. Pero, una vez más, todas estas no son más que hermosas ideas, ideas para experimentos.

ellos soñaran

Es bueno cuando tenemos ejemplos de comportamiento correcto o podemos emular la reacción del entorno. Para la inteligencia natural (y la futura inteligencia artificial), ese lujo no siempre está disponible. El intelecto está tratando de hacer algo con el medio ambiente, algunas cosas salen correctamente, otras no y otras quedan con consecuencias incomprensibles. ¿Cómo podemos aprender de esto?

Para ello, introduciremos un tercer tipo de emulador de entorno externo. Recordará las manifestaciones del entorno externo, qué hizo la inteligencia artificial en respuesta a estas manifestaciones y a qué condujo. Esto no excluye la posibilidad de que, a medida que se gane experiencia, dicho emulador pueda combinar las dos variedades anteriores: emulación y predicción del entorno, y se base en principios similares a nuestra inteligencia artificial.

¿Cómo aprender cuando no hay información clara sobre qué acciones son correctas y cuáles no? Una pequeña digresión. Las redes Hopfield se entrenan a partir de ejemplos "resumiendo" todos los ejemplos, sin evaluación crítica, sin corrección de errores. Una red Hopfield entrenada que utiliza una imagen parcial o ruidosa en el proceso de iteración (convergencia al mínimo de energía de una imagen determinada) puede recrear la imagen original. Entonces, después de entrenar en la red, a veces obtienes imágenes falsas. Para eliminar imágenes falsas, se ejecutan ejemplos de entrenamiento en la entrada y, si la red converge a una imagen falsa, dicha imagen se sobrescribe. En cierto modo, la red "sueña" basándose en información recibida previamente, y en el sueño, la información falsa es reemplazada por información correcta. Las redes Hopfield se utilizan para imágenes simples, pero lo que nos interesa es el principio.

Podemos seguir un camino similar aquí. Después de acumular información del entorno externo, la inteligencia se desconecta del entorno externo y funciona sólo con el emulador. El emulador reproduce situaciones, y si el intelecto produce una buena solución, entonces esta solución se fortalece; si es mala, entonces esta solución se reemplaza por otra cosa; Por algo aleatorio, por ejemplo. Lo principal es que la nueva decisión no parece mala. Al mismo tiempo, construimos cambios de tal manera que las buenas soluciones acumuladas no se pierdan y no aparezcan nuevas malas soluciones.

Como mínimo, dicha reestructuración puede llevarse a cabo mediante un algoritmo genético. Es posible que sea posible una evaluación cruzada de cada regla que conforma el programa, de manera que será posible calcular con precisión el error y la corrección de cada regla. Después de todo, tenemos cierta información sobre si el programa funcionó bien o mal. Aquí es más difícil en el sentido de que si la decisión fue tomada por un equipo de programas, entonces la información sobre la exactitud de la decisión solo la conoce el programa ganador. Pero tenemos información sobre el comportamiento de los programas que dura mucho tiempo y ya podemos extraer detalles de ella.

Entonces resulta que si la inteligencia artificial se coloca en condiciones naturales, aparecerán largas fases de vigilia, durante las cuales se acumula información mediante prueba y error, y luego fases de sueño, durante las cuales esta información se digiere cualitativamente. Este proceso en sí será largo y laborioso. En la inteligencia natural, tal mecanismo, que apareció una vez en el proceso de evolución, rápidamente mostró su utilidad y se multiplicó a lo largo de las generaciones posteriores. La cosa no parece muy complicada para que aparezca durante la evolución.

Sentirán el dolor

Otra opción de formación cuando no se dispone de información sobre las acciones correctas. Permítanme recordarles que cuando se aprende mediante recocido, se utilizan cambios aleatorios en los parámetros en toda la solución para reconstruir la solución. La fuerza de tales cambios (temperatura) comienza siendo alta y disminuye gradualmente a medida que la solución converge hacia la mejor opción. Si los cambios no nos convienen, se aumenta la fuerza de los cambios (temperatura de recocido) en busca de una opción más adecuada.

Por tanto, en el proceso de evolución, se desarrolló un mecanismo de dolor. La acción equivocada y al instante sentimos cómo nuestras conexiones neuronales son consumidas por una llama cruel. Una reorganización así no pasa desapercibida. Las consecuencias de una acción incorrecta quedan literalmente grabadas en nuestras conexiones neuronales. Tanto es así que evitamos a toda costa la repetición de estas acciones equivocadas. El mecanismo es simple pero efectivo.

En la inteligencia artificial, el aprendizaje puede complementarse con una tasa más rápida de cambios aleatorios, una tasa más rápida de cambios intencionados si la inteligencia toma malas decisiones. Estas adiciones se pueden aplicar tanto a nivel de un grupo de programas como a nivel de programas o reglas individuales. Las reglas o programas “malos” pueden literalmente quemarse como resultado de acciones incorrectas; al mismo tiempo, las buenas reglas y programas se conservarán y multiplicarán, pero las acciones incorrectas serán “temidas” como el fuego.

En un nivel superior de inteligencia, el "dolor" también se manifestará en términos de "tu cabeza se está partiendo de ideas", "es imposible ordenar tus pensamientos", etc. El estado de buena decisión irá acompañado de claridad de pensamiento, armonía y “tranquilidad”.

Conjuntos de reglas

Imaginemos que en el proceso de aprendizaje evolutivo, se clona una parte de las reglas para que permanezcan interconectadas con la instancia principal. Por ejemplo, permanecen conectados a las mismas entradas y salidas y se activan casi simultáneamente. Al mismo tiempo, las reglas todavía difieren entre sí y su evolución posterior puede tomar caminos diferentes. Ahora asegurémonos de que cuando se produzcan cambios, esta parte de las reglas permanezca en gran medida interconectada, es decir. de modo que las salidas, salidas, activaciones y soluciones emitidas sean en gran medida las mismas. Al mismo tiempo, las reglas del conjunto se pueden utilizar en otros lugares, incluso en otros conjuntos.

Resulta que el conjunto toma decisiones junto con todas sus reglas. Gracias al trabajo colectivo, la solución será de mejor calidad (al menos, esto es lo que ocurre con las redes neuronales ordinarias). Pero al mismo tiempo, el conjunto también tendrá una representación nueva y cualitativamente diferente de la situación, y podrá actuar mucho más allá de los límites de la situación original, debido a que las reglas del conjunto participan en otros lugares. (y conjuntos) del programa (y esto es una suposición, que se refiere específicamente a los conjuntos que participan en el programa). Podemos decir que la visión de la situación será de mayor nivel, más generalizada, más ampliada y enriquecida con la experiencia de otras situaciones. Así, en situaciones límite o nuevas, el conjunto podrá generar (incluso se podría decir, fantasear) una nueva realidad que continúa en significado la antigua, la que vio durante el entrenamiento.

Aquí empiezan a aparecer lentamente cosas como las categorías de abstracción y el pensamiento asociativo. Comienzan a aparecer cadenas lógicas "pesadas" que, debido a una visión de la situación de un orden de magnitud mayor, pueden producir cadenas lógicas "finas" cercanas a la lógica formal y los algoritmos estrictos.

Al enfrentarse a nuevas situaciones, el programa, al tener estos conjuntos en stock, será mucho más fácil de transferir y generalizar su experiencia a nuevas situaciones.

Todas estas son sólo hermosas suposiciones por ahora, pero aparentemente las cosas van exactamente en esta dirección. Aún no está claro exactamente cómo se formaron y mantuvieron estos conjuntos en el cerebro (pero hay que admitir que, desde el punto de vista evolutivo, parece bastante simple). También es una cuestión cómo apoyar y liderar los conjuntos en el programa. Aparentemente no hay una fijación clara de reglas para los conjuntos; todo se decide dinámicamente, combinando reglas que son compatibles para una situación específica, todas de acuerdo con los mismos principios de competencia e interacción. En este caso, las reglas y conjuntos también podrán alinearse dinámicamente en una jerarquía y, sin embargo, no habrá una jerarquía permanente, no habrá metaniveles ni transiciones entre ellos, no habrá un sistema claro de resaltado de formalización. -Conexiones del subsistema. Próximamente se darán más detalles sobre cómo se puede formar esto. Y hay que admitirlo, desde el punto de vista del curso natural de las cosas, todo parece bastante sencillo.

Y nuevamente ondas, frecuencias y holografía.

En nuestro programa de inteligencia artificial se establece artificialmente la división en programas competitivos y una visión alternativa de la situación. De la misma forma, se introduce artificialmente un estado global, al que tienen acceso todas las reglas y un generador de reloj, que en cada nuevo momento activa todas las reglas y actualiza la situación. Pero no hay nada parecido en el cerebro y, sin embargo, allí se formó naturalmente algo muy parecido.

Lo que tenemos es la propiedad de una neurona natural de acumular potencial, y cuando se excede un umbral crítico, se descarga mediante una serie de señales en sus salidas (¿recuerdas las redes neuronales de frecuencia en las partes anteriores?). Estas series, a su vez, aumentan (o disminuyen) cada vez los potenciales de las neuronas que están conectadas a las entradas de la neurona original. Los potenciales umbral, la frecuencia y la duración de la descarga son parámetros que aparentemente se ajustan durante el proceso de aprendizaje.

Entonces resulta que no se necesitan ni un generador de reloj, ni bucles y transiciones condicionales, ni un estado global y una paralelización forzada de la situación.

Los colectivos de tales neuronas ya llevan un estado interno, una lógica iterativa compleja y un procesamiento condicional.

Además, los paquetes de neuronas se pueden combinar en cadenas alternativas (paralelas), cada una con su propia visión de la situación, y en la salida todas estas cadenas compiten entre sí por cuya solución se presentará la salida. Y dicho procesamiento es bastante susceptible de modelarse en computadoras comunes. Otra cosa es que al principio probablemente consumirá más recursos que un modelo de inteligencia con paralelización forzada, pero en el futuro, un modelo menos regulado, al parecer, será más eficaz.

Ahora recordemos los conjuntos y metaconjuntos. Resulta que frentes de ondas enteros deambulan a través de conjuntos individuales, que en diferentes conjuntos en combinación dan patrones de ondas complejos, tal vez incluso más complejos que las imágenes holográficas. Son estos patrones de ondas los que vinculan dinámicamente neuronas individuales (o redes de reglas en nuestra inteligencia artificial) en conjuntos y metaconjuntos.

Mire cómo todo resultó natural y, al mismo tiempo, pragmático. No es necesario inventar redes holográficas y de frecuencia separadas, no es necesario atormentarlos y obligarlos a reconocer imágenes. Basta aplicar el curso efectivo y natural de las cosas, y todas estas propiedades holográficas de frecuencia se manifiestan como un efecto secundario.

La situación inicial, una vez en el cerebro, se divide en muchas cadenas alternativas, provocando tormentas enteras de ondas de cambios en los potenciales neuronales, y como resultado recibe una representación mucho más compleja y de mayor calidad. A la salida, todo este procesamiento vuelve a colapsarse en límites estrechos que deben liberarse al mundo exterior.

Asociaciones, categorías, generalizaciones y otras filosofías.

En la sección sobre conjuntos, mencionamos que sería bueno que las reglas participaran en diferentes lugares del programa, como resultado de lo cual las reglas aprenderán a generalizar cualitativamente la experiencia de situaciones completamente diferentes. Es decir, estarán en el camino hacia abstracciones de alto nivel, como el pensamiento asociativo y la categorización. Por ejemplo, podrán derivar algo común de los conceptos “blanco” y “mullido” y aplicarlo en la situación de “volar”. Este procesamiento hará que el pensamiento sea mucho más poderoso y permitirá construir dinámicamente conjuntos de reglas para situaciones completamente heterogéneas.

Para obtener tales propiedades, introdujimos conjuntos artificialmente y su mantenimiento. ¿De qué otras formas se pueden obtener propiedades que permitan que una regla, después de haber sido entrenada para algunas situaciones (conceptos), participe y se entrene aún más en situaciones completamente diferentes (para otros conceptos, como en el ejemplo sobre blanco/esponjoso/moscas)?

Por ahora, surgen dos opciones.

Opción uno, combinación dinámica de entradas y salidas.. ¿Recuerda que al principio establecimos una correspondencia estricta entre las entradas y salidas de las reglas (redes neuronales) y las células del estado global? Los cambios evolutivos se ajustaron de tal manera que estas correspondencias se redujeran al mínimo. En la siguiente versión, sin un estado global, las entradas y salidas de diferentes redes de reglas también estaban rígidamente conectadas entre sí.

Ahora permitamos que las entradas y salidas cambien su posición entre sí durante la operación y durante el proceso de aprendizaje. Surgen dos preguntas. En primer lugar, ¿cómo determinar qué tan compatibles son los elementos de la combinación resultante y con qué eficacia esta combinación resuelve el problema? En segundo lugar, ¿cómo seleccionar rápidamente combinaciones compatibles/eficaces de entradas y salidas, dado que hay tantas combinaciones?

La opción más sencilla es asociar cada entrada y salida de la regla con una característica de compatibilidad que cambia evolutivamente, y tal vez haya una manera de ajustar esta compatibilidad con mayor precisión, durante el proceso de aprendizaje, en función de los resultados de las reglas. (¿Se puede calcular la compatibilidad de las salidas mientras se ejecuta la regla? ¿Sería efectivo?) Para las entradas y salidas al entorno externo, también necesitará un conjunto de compatibilidad, que formará parte del conjunto general. Cuando el programa se esté ejecutando, las reglas se conectarán solo teniendo en cuenta la compatibilidad de entradas y salidas. La tarea de seleccionar dicha compatibilidad no es fácil en términos computacionales, pero tampoco del todo difícil. Quizás los algoritmos de red de Hopfield, que pueden hacer cosas similares, ayuden en esta selección.

La siguiente opción es combinar las entradas y salidas de diferentes reglas de diferentes maneras durante el proceso de aprendizaje y acumular información sobre la efectividad (compatibilidad) de diferentes combinaciones. En el trabajo real, proceda como se indica arriba: combine las entradas de acuerdo con la compatibilidad.

Las opciones anteriores son adecuadas para implementar inteligencia artificial, pero tal combinación de entradas y salidas no parece existir en la inteligencia natural. Pero hay mapas de características; consulte las redes convolucionales y el neocognitrón en las partes anteriores. Y esos mapas parecen existir en la inteligencia natural.

El significado de los mapas de características es este. Hay un conjunto de reglas, hay un conjunto de celdas de entrada. Cada regla escanea las celdas de entrada usando una ventana móvil y todas las celdas de la ventana caen en la entrada de la regla. El resultado de la regla se escribe en la celda del mapa de características correspondiente a la posición de la ventana en las celdas de entrada. Como resultado, para cada regla obtendrá un mapa de características en el que los lugares donde la regla funciona mejor tendrán los valores más altos. En la siguiente capa, todos los mapas de características constituyen la entrada para un nuevo conjunto de reglas, que nuevamente conforman sus propios mapas de características. Las reglas se pueden aprender propagando errores hacia atrás. Cómo se pueden enseñar esas reglas como parte de un programa es una cuestión abierta.

Los mapas de características funcionaron bien en el reconocimiento de imágenes, con distorsiones asociadas con cambios de escala, ángulo, rotación y con deformaciones específicas del objeto representado.

Por lo tanto, los mapas de características son un buen candidato para experimentos sobre la combinación dinámica de entradas y salidas para las reglas que componen un programa.

Opción dos, combinación de frecuencia de entradas y salidas.. En esta opción no es necesario reorganizar las entradas y salidas. En las redes neuronales de frecuencia (o en programas creados sobre dichas redes), cada neurona es a la vez un filtro de frecuencia simple y un generador de frecuencia simple. Además, este filtro se puede configurar para diferentes armónicos al mismo tiempo (debido a que la capacidad y capacidades de las redes de frecuencia son mayores que las de las redes convencionales). Asimismo, cualquier combinación de neuronas es a la vez un filtro de frecuencia complejo y un generador de frecuencia complejo. (En nuestra inteligencia artificial, una neurona de este tipo equivale a una regla única representada por una pequeña red neuronal).

Por lo tanto, señales relacionadas con entidades completamente diferentes pueden viajar a través de las mismas neuronas en diferentes frecuencias. Pero como diferentes frecuencias influyen en las mismas neuronas (combinaciones de neuronas), diferentes frecuencias (y las entidades procesadas por ellas) se influyen entre sí. Por lo tanto, si nuestra inteligencia se basa en los principios del procesamiento de señales de frecuencia (como se mencionó anteriormente en la sección sobre frecuencias), entonces esta inteligencia parece tener ya la capacidad de generalizar entidades heterogéneas y hasta algún tipo de abstracción filosófica. Sin embargo, pueden existir soluciones técnicas adicionales que acelerarán la formación de tales generalizaciones en las redes de frecuencia.

Y un poco para concluir. Estos métodos de recombinación de entradas y salidas proporcionan no sólo propiedades de alto nivel, como el pensamiento asociativo y las generalizaciones cualitativas, sino también otras más prosaicas. ¿Qué sucede si los cables de un circuito eléctrico se mezclan? Lo más probable es que esto sea fatal para el plan. Pero para el cerebro no es necesario. Se llevaron a cabo experimentos (en animales) en los que el cerebro se cortó literalmente en pedazos y se mezclaron, después de lo cual se volvieron a colocar y se liberó al animal. Después de un tiempo, el animal volvió a la normalidad y siguió con su vida. Una propiedad útil, ¿verdad?

No hay metaniveles

Una vez me pregunté cómo se construye una jerarquía lógica en los sistemas inteligentes, cómo se producen las construcciones lógicas cuando, por encima de un nivel cristalino, se construye otro, generalizando en sí mismo varios niveles inferiores. Los trabajos sobre inteligencia artificial (y no solo) describen maravillosamente cómo los sistemas evolucionan, acumulan complejidad y pasan de un nivel a otro.

En los sistemas reales siempre ha resultado que, por muy bien pensados ​​que estén los niveles inferiores, siempre se acumulan algunas inconsistencias, cambios que no se pueden coordinar con los niveles superiores, estos cambios tarde o temprano rompen todo el sistema, requiriendo una revisión importante; reestructuración de toda la jerarquía. La solución fue esta: no quedar demasiado atrapado en tales jerarquías, dejar libertad de acción para que, si fuera necesario, se pudiera sortear la jerarquía formal. Y esto no es señal de un sistema mal diseñado, es la realidad de la vida.

Por supuesto, el sistema correcto minimiza el desorden, por eso es un sistema. Pero esto no significa que dicho sistema esté completamente desprovisto de conexiones informales. Un buen sistema, a pesar de su corrección, debe conllevar un elemento de su propia destrucción. Un elemento que entra en vigor cuando el sistema ya no puede hacer frente a sus tareas, un elemento que reconstruye completamente el sistema a nuevas realidades.

Asimismo, en la inteligencia artificial parece no haber lugar para niveles lógicos y metatransiciones (especialmente en vista de la sección anterior sobre asociaciones y generalizaciones). Todas las reglas (también son neuronas en nuestro entendimiento) participan simultáneamente en la toma de decisiones en cualquier nivel. Las reglas neuronales se pueden organizar dinámicamente en varios conjuntos, en varias jerarquías. Pero incluso con tal alineación dinámica, no tendrán rigor jerárquico; un elemento del nivel inferior puede fácilmente afectar al nivel superior, hasta el punto de reconstruirlo por completo.

En cada caso específico de aplicación de reglas, puedes construir tu propia jerarquía. Pero esta jerarquía no es estática, como ocurre con diversas formalizaciones. En inteligencia todo depende de qué lado se tira, desde qué ángulo se mira. Cada ángulo tiene su propia jerarquía y puede haber muchos "ángulos de visión" de este tipo. Dentro del intelecto, no parece haber una jerarquía clara (esto no significa el nivel de “hardware” que determina qué parte del cerebro es responsable de qué órganos).

Genética cuántica

Se han dicho muchas cosas interesantes sobre la computación cuántica y las propiedades cuánticas de la inteligencia. Algunos incluso creen que el cerebro puede "activar" directamente los procesos cuánticos para pensar.

En resumen, la esencia de la computación cuántica se reduce a lo siguiente. Los datos iniciales se aplican a un pequeño número de partículas elementales. En el proceso de resolución, los datos comienzan a procesarse simultáneamente de una gran cantidad de formas diferentes, y estos métodos se comunican entre sí, descubren quién tiene la mejor solución y quién peor, las malas soluciones se debilitan y las buenas. fortificado.

Esto se debe al hecho de que cuando se inician los cálculos cuánticos, cada partícula "siente" completamente el estado de todas las demás partículas que participan en el cálculo, y lo siente instantáneamente y sin un gasto de energía significativo. Cuando se lanza la solución, las partículas quedan sumergidas en un estado "manchado" ("enredado") que no puede ser examinado desde el mundo exterior. En un estado manchado, cada partícula no tiene un estado físico claro; cada partícula se encuentra simultáneamente en varios estados y puede participar en varios procesos paralelos (y estos procesos se "sienten" entre sí). Además, cuantas más partículas estén involucradas en la solución, más estados puede tener la misma partícula simultáneamente.

Si intentamos entrar en el estado manchado y ver lo que hay dentro, entonces en cada momento específico obtendremos estados físicos específicos de las partículas, sin un indicio de muchos estados simultáneos. Además, después de tal intervención, el curso de la solución quedará completamente destruido y no se podrá restaurar el estado múltiple. Por lo tanto, lo que sucede en el intervalo entre la especificación de los datos de entrada y la lectura del resultado de la solución es un misterio. Resulta que una pequeña cantidad de datos de entrada en el proceso de solución genera un estado interno de muchos órdenes de magnitud más complejo, que no está claro cómo evoluciona, no se puede estudiar y, sin embargo, produce la solución correcta. El estado tomado al intentar estudiar el estado embadurnado es de naturaleza probabilística. Con el diseño correcto de un algoritmo cuántico, es posible asegurarse de que la probabilidad de eliminar una solución correcta sea mucho mayor que la probabilidad de eliminar una solución incorrecta (es decir, la solución debe eliminarse al menos varias veces).

Parecería que de esta forma se puede obtener una enorme potencia informática casi de forma gratuita. Pero hay un problema: las partículas de la solución deben estar completamente aisladas del mundo exterior, de lo contrario el mundo exterior confundirá la exactitud de la solución (violará la coherencia). Existe la opinión de que el aislamiento completo es imposible, ya que (como dice la física cuántica) cada partícula, cada cuanto, inicialmente se extiende por todo el universo y está estrechamente entrelazado con todas las demás partículas que componen nuestro universo. Y, como consecuencia de esta opinión, resulta que la computación cuántica no sumerge partículas en un estado repartido en universos alternativos, sino que atrae otras partículas muy específicas de nuestro propio universo para paralelizar los cálculos. Es cierto que esto todavía no elimina las dificultades para estudiar el estado interno.

De esto se desprenden varias conclusiones interesantes. La computación cuántica de alta potencia no podrá proporcionarnos cálculos absolutamente verdaderos, pero es bastante adecuada para soluciones plausibles, por ejemplo en inteligencia artificial, como se describe anteriormente. Y una conclusión más, que se cruza estrechamente con la anterior: la computación cuántica no puede proporcionar autoconocimiento, autorreflexión, ya que son una parte integral del universo y, por lo tanto, no pueden conocerse a sí mismos ni al universo en su conjunto, ya que son su parte integrante. Esta es la razón por la que en realidad surgen incertidumbres cuánticas cuando se intenta medir los estados de las partículas cuánticas, como señalamos en las partes anteriores. Después de todo, es imposible conocerse completamente a sí mismo sólo con la ayuda de uno mismo. La incertidumbre cuántica es en realidad una consecuencia directa del teorema de Gödel, que establece que un sistema formal no puede conocerse a sí mismo con absoluta precisión.

Ahora volvamos a la inteligencia. Muchos investigadores han notado correctamente las similitudes entre las propiedades de la computación cuántica y los procesos intelectuales en humanos. Las propiedades más interesantes para nosotros son las siguientes. La entrada y salida de soluciones es un conjunto de estados bastante simple. Estos estados simples sumergen al cerebro en un estado mucho más complejo que no puede examinarse desde fuera. Un intento de explorar este estado, o de eliminar una solución, produce nuevamente un conjunto de estados simples, y estos estados también son probabilísticos y es más probable que produzcan una solución correcta que una incorrecta. Es difícil para una persona realizar este estado interno, a diferencia de la entrada/salida, pero este estado interno es lo que se llama "sentir". Al igual que en la computación cuántica, establecer el estado inicial y eliminar la solución son procedimientos que requieren bastante mano de obra. Del mismo modo, es fácil para una persona pensar “dentro de sí misma”, pero para transmitir sus pensamientos a otra persona, hay que esforzarse mucho.

Ahora solo queda señalar que las propiedades mencionadas de la computación cuántica y la inteligencia humana son casi idénticamente aplicables al algoritmo de inteligencia artificial descrito anteriormente, que se basaba en un algoritmo genético.

De hecho, al parecer, ¿en qué parte del cerebro, con sus ondas, frecuencias y neuronas, podría surgir algo parecido a un algoritmo genético, con sus cromosomas y soluciones alternativas? Resulta que, si lo miramos desde el otro lado, un algoritmo genético es sólo una manifestación de una clase más general de procesos.

Resulta que para que el cerebro exhiba propiedades cuánticas interesantes, no es necesario en absoluto desencadenar procesos cuánticos directamente; existen explicaciones más pragmáticas; Y la computación cuántica en sí misma no necesariamente tiene que implicar misticismo sobre universos paralelos y verdades absolutas, porque bien pueden estar organizados a nivel micro en algún tipo de algoritmo genético, que sólo pretende sumergir partículas en un estado embarrado, pero en realidad es contentarse con los recursos informáticos de su propio universo.

Bien puede ser que en la intersección de la computación cuántica, los algoritmos genéticos y otras áreas de la inteligencia artificial surja una nueva teoría de la computación que permitirá crear computadoras cuánticas más potentes y permitirá, basándose en el estricto aparato de la física cuántica, para explicar con mayor precisión los procesos que ocurren en el intelecto. Después de todo, lo que hemos llegado hasta ahora en la comprensión de la inteligencia recuerda el chiste "Siento en mi interior que 0,5 + 0,5 será un litro, pero no puedo demostrarlo matemáticamente", cuando podemos hacerlo, pero Todavía no podemos explicar por qué esto es así.

Representación interna de las cosas.

¿Cómo representa el cerebro las cosas externas? Puede parecer que el cerebro está recreando un modelo físico de objetos y fenómenos, lo que lleva a muchas conclusiones incorrectas. De hecho, no es en absoluto lo mismo una representación interna que un modelo físico. El modelo interno es plausible. El modelo interno forma una analogía que captura sólo las propiedades más importantes de un objeto para nosotros, aquellas propiedades que se utilizan en la experiencia cotidiana. Este modelo interno a veces se denomina "física ingenua". Dentro de los límites de la experiencia cotidiana, un modelo de este tipo da resultados, aunque incorrectos, que son bastante adecuados en la práctica. Pero tan pronto como vamos más allá de la experiencia cotidiana, este modelo se desmorona.

El conjunto de reglas que forman dicho modelo puede estar muy alejado de la representación física real. Debido a que la representación interna conlleva además muchas propiedades "fantásticas" de los objetos reales, la representación interna comienza a "vivir su propia vida". Por ejemplo, dibujos animados. Una persona puede reconocer fácilmente una cara dibujada en una caricatura; las personas entrenadas pueden dibujar caricaturas. Pero los sistemas de reconocimiento facial están desconcertados por las caricaturas. Y con razón, aunque los motores de reconocimiento tienen un modelo plausible, éste se acerca mucho más al físico que al humano.

La representación interna también se caracteriza por la diferencia de complejidad descrita anteriormente. Radica en que un objeto o fenómeno más simple da lugar a una representación interna mucho más compleja, que se encarga de modelar la esencia de las cosas. Después de todo, la inteligencia no puede modelar directamente la física. Una idea simple da lugar a un "sentimiento" de la esencia de las cosas, cuando sientes por qué es así, pero no puedes explicarlo. Una representación más compleja puede extender la representación de las cosas al nivel de la comprensión, la fantasía y el nivel del pensamiento consciente (por ejemplo, con los dibujos animados).

Hola lógica

¿Qué es la lógica y de dónde viene la actividad intelectual superior?

Nuestra inteligencia ha evolucionado desde simples reacciones de entrada y salida a una combinación de una gran cantidad de procesos competitivos que descomponen la situación de entrada en una representación interna mucho más compleja.

Como resultado, para algunas cosas se pueden formar complejos de reglas de enorme complejidad (mucho más complejas que la física de la cosa original), que son la representación interna de esta cosa. Más arriba se describe exactamente de qué tipo pueden ser estas reglas y con qué aproximación se pueden formar. Pero lo principal es que debido a tal diferencia en la complejidad entre el fenómeno original y su descripción, se hace posible una representación cualitativamente diferente de este fenómeno, lo que permite derivar nuevos conocimientos sobre este fenómeno con un alto grado de plausibilidad.

Permítanme recordarles que la paradoja de la inteligencia frente al algoritmo es que un algoritmo sólo puede simular estúpidamente la física de una cosa, sin comprender la esencia del fenómeno, no puede derivar nuevos conocimientos sobre el fenómeno y ni siquiera puede garantizar la verdad de su trabajo. . El intelecto, debido a una representación interna mucho más compleja de la esencia de las cosas, es capaz no sólo de modelar estas mismas cosas, sino también deducir nuevos conocimientos sobre ellas, e incluso evaluar la veracidad de los juicios sobre esta cosa, y con un alto grado de verosimilitud.

La transición de la complejidad, que expande la representación de la esencia de los objetos y fenómenos a una representación que es muchos órdenes de magnitud más compleja que la “física” original de los objetos y fenómenos, es una buena candidata para el papel de la comprensión. Hay una descomposición en una representación interna compleja: hay una comprensión y un funcionamiento cualitativo de la esencia de las cosas, es posible una respuesta flexible cuando surgen situaciones inesperadas. No existe tal descomposición: sólo es posible un estúpido "cramming", siguiendo ciegamente el algoritmo, que no produce nuevos conocimientos y no da cuenta de la esencia o la verdad de su trabajo, y se confunde cuando surgen nuevos factores.

La estricta adherencia a un algoritmo no atrae una mayor actividad intelectual, por lo que es rápido y eficaz, cuando sólo se necesita una reacción clara a situaciones típicas. Una actividad intelectual superior, que implica comprensión, es capaz de remachar lentamente varios algoritmos, pero no es capaz de ejecutarlos rápidamente. También son posibles combinaciones de estos métodos.

La siguiente pregunta lógica es: ¿es posible comprender lo que sucede en el proceso de comprensión? Y lo más probable es que la misma respuesta lógica sea sí, pero esto requerirá tal representación de los procesos que ocurren en el intelecto, que serían muchos órdenes de magnitud mayores en complejidad que los procesos intelectuales originales. Es decir, podemos aprender algo sobre la inteligencia, podemos hacer algo, pero no somos capaces de comprender completa y cualitativamente el trabajo de la inteligencia humana; simplemente, no hay suficiente capacidad cerebral. Aunque podemos estudiar y utilizar patrones, como usamos ahora las computadoras, sin tener plena conciencia de los procesos que ocurren en ellas. Es imposible imaginar los procesos que ocurren en todos los millones de transistores, aunque es muy posible comprender cómo funcionan las unidades lógicas de los circuitos informáticos y cómo se combinan en niveles superiores. Lo mismo ocurre con la inteligencia.

De lo anterior, queda claro por qué la comprensión es difícil de explicar y por qué la comprensión es fácil de sentir, por qué es posible exponer las construcciones lógicas que acompañan a la comprensión y por qué es muy difícil reproducir toda la base que condujo a la comprensión. comprendiéndose a sí mismo. Habrá una sección completa sobre esto a continuación. A partir de aquí queda claro qué es un sentimiento, qué es una sensación de estado, por qué los sentimientos y sensaciones son difíciles de expresar, pero fáciles de sentir. En general, hay muchas consecuencias interesantes; si estás interesado, mira en la dirección de las propiedades cuánticas de la conciencia.

Otra pregunta es ¿cómo sucede exactamente que somos conscientes de nosotros mismos, conscientes del mundo que nos rodea? ¿Lograrán las máquinas pensantes esta conciencia? Esta pregunta filosófica fundamental queda fuera del alcance de la inteligencia artificial, pero intentaremos responderla en la siguiente parte.

Continuando con el pensamiento sobre las diferencias en complejidad y comprensión, llegamos a la conclusión de que una representación interna supercompleja será capaz, en última instancia, de generar aristas muy sutiles, podría decirse nítidas y superarmonizadas, a partir de la representación interna de las cosas. En otras palabras, idealización o abstracción de las cosas originales.

Estas abstracciones deben su nacimiento a la combinación múltiple de una gran cantidad de procesos internos, conflictivos y combinados. Pero a diferencia de los resultados de la interacción de la mayoría de los procesos internos, para las abstracciones el resultado no será de naturaleza borrosa (amplia), sino que se recogerá, por así decirlo, en un borde, en uno o varios bordes o picos muy claros.

Naturalmente, las abstracciones se generan, entre otras cosas, por la observación repetida de las manifestaciones de sus prototipos reales, así como por reflexiones repetidas que involucran la representación interna de los objetos. Además, la multiplicidad de estas observaciones y reflexiones es probablemente mayor que la de otros temas que no aportan abstracciones. Y la naturaleza de las reglas que dan una representación interna de las abstracciones ciertamente tiene una forma más ordenada, más adaptada a la máxima armonización.

El siguiente paso es que dichas armonizaciones máximas puedan unirse en largas cadenas que operen según sus propias leyes. Así, obtenemos un nuevo nivel de pensamiento, abstracto o lógico. Naturalmente, este nivel es mucho más complejo que la comprensión ordinaria, y no todas las criaturas dotadas de comprensión son capaces de realizar construcciones lógicas complejas.

Estas cadenas abstractas vivirán según sus propias leyes, en algún lugar se parecerán a los prototipos originales, en algún lugar se alejarán de ellos.

Preste atención al origen de las construcciones lógicas. No están en el nivel algorítmico, ni siquiera en el siguiente nivel, el nivel de comprensión. Constituyen el tercer nivel de inteligencia, una especie de comprensión por encima de la comprensión.

Queda por recordar que en el proceso de construcciones lógicas el cerebro sólo “finge” que funciona como un algoritmo estúpido, como una máquina primitiva de inferencia lógica. De hecho, los procesos involucrados en las construcciones lógicas son enormemente más complejos que las construcciones lógicas originales, y debido a este salto en complejidad, el intelecto logra crear nuevas construcciones lógicas y juzgar su verdad con un alto grado de precisión.

Del mismo modo, el cerebro puede emular el trabajo de los ordenadores (máquinas de Turing), debido a procesos “pesados”, aunque parece que el cerebro sigue algoritmos “finos” (sobre todo si el cerebro está entrenado para dicho trabajo).

Y un poco más sobre construcciones lógicas sutiles y elaboración de algoritmos. A los no iniciados les puede parecer que cuando piensan en verdades matemáticas o escriben programas de computadora, un sabio iluminado se sienta en algún tipo de meditación y, con la ayuda del razonamiento correcto, llega a las conclusiones correctas o elabora el programa correcto. De hecho, lo que está sucediendo se parece más al siguiente diagrama.

  • Se le ocurrió “algo”, una versión inicial (o incluso lo generó por accidente).
  • Comprobé el funcionamiento de este “algo” emulando el razonamiento lógico y recordé las áreas problemáticas.
  • Intenté mejorar las áreas problemáticas al azar (mejoré este “algo”).
  • Revisé la versión mejorada y así sucesivamente.

Después de todo, el cerebro no puede tanto generar cadenas lógicas correctas sobre la marcha, sino comprobar el funcionamiento de estas cadenas emulando el razonamiento lógico. Otra cosa es que el cerebro tiene una enorme "biblioteca" de plantillas para diferentes situaciones, además de un montón de reglas plausibles sobre cómo combinar estas plantillas entre sí. Al aplicar estas reglas y patrones, con un pequeño número de intentos, es posible construir buenos razonamientos y programas lógicos. Entre otras cosas, dichas reglas pueden incluir diagnósticos del funcionamiento de diferentes combinaciones de plantillas, y pueden y se repondrán dinámicamente, en lugar de ejecutar construcciones lógicas en todo el volumen de datos cada vez.

Donde habló sobre uno de los objetivos que lo llevaron a la profesión: el deseo de aprender el principio del trabajo y aprender a crear robots de juego él mismo.

Pero, de hecho, fue el deseo de crear una inteligencia artificial perfecta, ya sea un modelo de juego o un programa móvil, lo que empujó a muchos de nosotros por el camino del programador. El problema es que detrás de toneladas de material educativo y la dura realidad de los clientes, este mismo deseo ha sido reemplazado por un simple deseo de autodesarrollo. Para aquellos que aún no han comenzado a cumplir su sueño de la infancia, aquí hay una breve guía para crear inteligencia artificial real.

Etapa 1. Decepción

Cuando hablamos de crear incluso bots simples, nuestros ojos se llenan de brillo y cientos de ideas pasan por nuestras cabezas sobre lo que deberían ser capaces de hacer. Sin embargo, cuando se trata de implementación, resulta que la clave para desentrañar el modelo de comportamiento real son... las matemáticas. Para ser un poco más específicos, aquí tienes una lista de sus apartados que es necesario estudiar al menos en el formato de una educación universitaria:

    Álgebra lineal;

  • Teoría de grafos;

    Teoría de la probabilidad y estadística matemática.

Este es el trampolín científico sobre el que se construirá su programación futura. Sin el conocimiento y la comprensión de esta teoría, todas las ideas se derrumbarán rápidamente debido a la interacción humana, porque la inteligencia artificial en realidad no es más que un conjunto de fórmulas.

Etapa 2. Aceptación

Cuando la arrogancia es un poco derribada por la literatura estudiantil, puedes empezar a aprender idiomas. No vale la pena apresurarse a utilizar LISP u otros todavía; primero hay que aprender a trabajar con variables y estados de un solo valor. Es perfecto tanto para un aprendizaje rápido como para un mayor desarrollo, pero en general puedes tomar como base cualquier lenguaje que tenga las bibliotecas adecuadas.

Etapa 3. Desarrollo

Ahora pasemos directamente a la teoría de la IA. Se pueden dividir aproximadamente en 3 categorías:

    IA débil: bots que vemos en juegos de computadora o asistentes simples como Siri. O realizan tareas altamente especializadas o son un complejo insignificante de ellas, y cualquier imprevisibilidad de la interacción los desconcierta.

    Las IA fuertes son máquinas cuya inteligencia es comparable a la del cerebro humano. Actualmente no existen representantes reales de esta clase, pero computadoras como Watson están muy cerca de lograr este objetivo.

    La IA perfecta es el futuro, un cerebro máquina que superará nuestras capacidades. Son los peligros de tales acontecimientos los que advierten Stephen Hawking, Elon Musk y la franquicia cinematográfica Terminator.

Naturalmente, deberías empezar con los bots más simples. Para hacer esto, recuerda el viejo juego "Tic Tac Toe" cuando uses un campo de 3x3 e intenta descubrir por ti mismo los algoritmos básicos de acción: la probabilidad de ganar con acciones sin errores, los lugares más exitosos en el campo para colocar una pieza, la necesidad de reducir el juego a un empate, etc.

Como comprenderá incluso por los nombres, estas son API que le permitirán crear algo parecido a una IA seria sin perder tiempo.

Etapa 5. Trabajo

Ahora que tienes una idea clara de cómo crear IA y qué usar, es hora de llevar tus conocimientos al siguiente nivel. En primer lugar, esto requerirá estudiar una disciplina llamada "Aprendizaje automático". En segundo lugar, es necesario aprender a trabajar con las bibliotecas adecuadas del lenguaje de programación elegido. Para Python que estamos analizando, estos son Scikit-learn, NLTK, SciPy, PyBrain y Nump. En tercer lugar, en el desarrollo no hay vuelta atrás.

PLAN.

1. Introducción.

2. El fenómeno del pensamiento.

3. Creación de inteligencia artificial.

3.1 Enfoque mecánico.

3.2 Enfoque electrónico.

3.3 Enfoque cibernético.

3.4 Enfoque neuronal.

3.5 La aparición del perceptrón.

4. Conclusión.

5. Lista de referencias.

1. INTRODUCCIÓN.

Los filósofos e investigadores científicos modernos a menudo ven las ciencias interdisciplinarias como uno de los logros del redescubrimiento del siglo XX.

La inteligencia artificial y la vida artificial son un excelente ejemplo de esta integración de muchos campos científicos.

Desafortunadamente, la vida es demasiado compleja para permitir que se delineen direcciones generales para la investigación. La evidencia se puede encontrar en el hecho de que algunos están interesados ​​en estudiar "sistemas que demuestran los fenómenos de los sistemas vivos", otros estudian la naturaleza de la reproducción química o intentan resolver problemas filosóficos de autoconocimiento.

El concepto de “inteligencia artificial” tiene diferentes significados: desde reconocer la inteligencia de computadoras equipadas con software de reconocimiento de texto y voz hasta clasificar como inteligentes sólo aquellos sistemas que resuelven toda la gama de tareas realizadas por humanos.

La teoría de la inteligencia artificial se enfrenta a ciertos problemas a la hora de resolver muchos problemas. Uno de estos problemas es aclarar la cuestión de si la posibilidad o imposibilidad de la inteligencia artificial es teóricamente (matemáticamente) demostrable.

Hay dos puntos de vista sobre este asunto. Algunos consideran matemáticamente probado que una computadora puede, en principio, realizar cualquier función realizada por la inteligencia natural. Otros creen que está igualmente demostrado matemáticamente que hay problemas que la inteligencia humana puede resolver y que son fundamentalmente inaccesibles a los ordenadores. Estas opiniones son expresadas tanto por cibernéticos como por filósofos. Uno de los muchos problemas (se podría decir el principal) es que los sistemas con psique se diferencian de las computadoras en que tienen necesidades biológicas.

El reflejo del mundo exterior pasa por el prisma de estas necesidades, que expresa la actividad del sistema mental. La computadora no tiene necesidad de ella; la información es insignificante e indiferente. En una persona, las necesidades sociales se construyen por encima de la capa de las necesidades biológicas, y la información para él no sólo es biológicamente sino también socialmente significativa. Sin embargo, los sistemas técnicos todavía pueden tener un análogo de la organización corporal. Un sistema cibernético desarrollado tiene apéndices receptores y efectores. En la práctica, bajo el término vida artificial, existe una enorme variedad de proyectos diferentes, desde modelos de copia de ADN y sistemas de retroalimentación hasta el estudio de la inteligencia colectiva y la dinámica del crecimiento demográfico.

2. FENÓMENO DEL PENSAMIENTO.

Las máquinas ya han aprendido a escribir poesía, componer música y hacer dibujos. Quizás alguien piense que esto es un signo indudable de su inteligencia. Después de todo, si la creatividad está al alcance de una computadora, lo que siempre se ha considerado una propiedad de la alta inteligencia, ¿es justo negarle la inteligencia?

Aún así, la mayoría de nosotros difícilmente estaríamos de acuerdo en considerar que una computadora que dibuja y escribe poesía es pensamiento. ¿A qué entonces debería llamarse pensamiento? (2)

Es difícil para una persona alejada de la ciencia imaginar cuánto pueden hacer los dispositivos cibernéticos modernos. Cabe al menos mencionar los llamados "sistemas expertos", que, basándose en la información disponible en su memoria, analizan el estado del paciente, el modo del proceso tecnológico y dan consejos sobre qué hacer en una situación determinada. Al mismo tiempo, el ordenador no sólo comunica su decisión, sino que también explica por qué debe ser así. En comparación con la memoria electrónica, que genera información de archivo y cálculos matemáticos, que la mayoría de la gente hoy asocia con la imagen de una computadora, este es un nivel cualitativamente nuevo de actividad intelectual, cuando se desarrollan nuevos conocimientos sobre la base de los conocimientos existentes. Hasta ahora, esto se consideraba un privilegio innegable del cerebro humano. No es sorprendente que quienes se encuentran por primera vez con sistemas de este tipo a menudo simplemente no puedan creer que se trata de una “computadora de hierro” y no de un operador humano escondido en alguna parte.

La capacidad de una computadora para realizar cálculos matemáticos, a la que estamos acostumbrados, se consideraba hasta hace poco uno de los niveles más altos de la actividad espiritual humana. G. Leibniz, un destacado matemático, llamó a los números complejos, con los que casi cualquier computadora puede operar fácilmente, "anfibios espirituales", un sorprendente "producto del espíritu de Dios", y el escritor V. Odoevsky en su "Discurso ruso" escribió sobre nuestra capacidad de calcular como si se tratara de una propiedad incomprensible, casi mística: En cada proceso matemático sentimos cómo a nuestro ser se une alguna otra cosa ajena que trabaja, piensa, calcula y, mientras tanto, nuestro verdadero ser, por así decirlo, cesa de actuar, no acepta ninguna participación en este proceso, como en un asunto extraño, espera su propio alimento, es decir, la conexión que debería existir entre él y este proceso, y no encontramos esta conexión”.

¡Podemos imaginar lo asombrado que se habría quedado Odoievski si hubiera conocido las capacidades informáticas de nuestras computadoras! Sin embargo, no consideramos que estén pensando.

Cualquier computadora, por sorprendente que sea su capacidad de aprendizaje, funciona sobre la base de un programa previamente compilado para ella y de datos externos entrantes. Es cierto que los humanos también implementamos ciertos programas de acción, especialmente en los primeros meses de vida, cuando nuestro comportamiento está casi enteramente determinado por el programa genético que llevamos incorporado. Sin embargo, la diferencia fundamental es que una persona es capaz de estar motivada, es decir. Dependiendo de ciertas condiciones, cambia el programa y lo hace de tal manera que no haya un puente lógico continuo entre Sarah y el nuevo programa. Aún no está claro cómo sucede esto, hay mucha controversia y diferentes puntos de vista, pero esta es otra cuestión: es importante que las computadoras modernas no tengan esta propiedad; Ahora bien, si sucediera que algún tipo de computadora que resolviera, digamos, problemas de electromagnetismo y mecánica cuántica, combinara estas dos ramas de la ciencia y derivara las ecuaciones de la electrodinámica cuántica, y luego, con su ayuda, predeciría nuevos fenómenos en esta área previamente desconocida. área, entonces, probablemente, tendríamos derecho a llamarla pensante. Y, en primer lugar, porque ella misma, sin ninguna indicación del programa, decidió asumir una tarea cualitativamente nueva. La palabra "decidido" simplemente significa que ella está pensando.

Toda tarea intelectual es una búsqueda de una manera de alcanzar un objetivo fijado, de lo contrario no será una solución al problema, sino simplemente una acción según instrucciones precisas.

Cuando decimos que un escolar resuelve un problema, esto significa, en primer lugar, que debe averiguar qué fórmula tomar para ello, qué números sustituir en ella. Sin embargo, si él, mirando el cuaderno de su vecino, sustituye los números allí indicados en la fórmula escrita en la pizarra, esto ya no es una solución, sino una repetición mecánica. Así es exactamente como se comportan las computadoras modernas. Estrictamente hablando, no resuelven ningún problema, y ​​la expresión “la computadora resuelve” que usamos a menudo tiene un significado condicional...

La capacidad de plantearse un problema y autoprogramarse para resolverlo es precisamente lo principal que caracteriza el fenómeno del pensamiento.

Se puede objetar esta afirmación señalando que tanto los peces como las amebas primitivas, en busca de presas, también se proponen tareas que cambian según las condiciones específicas, lo que significa que también piensan.

Estas pueden ser formas primitivas de pensamiento, porque explicar el comportamiento de los animales en toda la diversidad de situaciones de la vida sólo con el instinto es una hipótesis.(2)

Los animales y los pájaros tienen una propiedad de pensamiento como la capacidad de generalizar. Por ejemplo, reconocen los alimentos en diversas formas específicas, por así decirlo: los alimentos en general.

Nuestra comprensión cotidiana de lo racional está demasiado humanizada y, así como en el siglo XIX la idea misma de una conexión sucesiva entre el hombre y el simio parecía absurda para muchos, hoy muchos de nosotros nos confundimos ante la idea de la posibilidad de no existir. -inteligencia humana. En particular, sin darnos cuenta, a menudo asociamos la idea de pensar con la capacidad de ser conscientes de nuestro propio "yo", y esto nos impide examinar más ampliamente el fenómeno del pensamiento. Es cierto que parece haber una conexión entre el pensamiento y el sentido de uno mismo. Se podría pensar que en condiciones de un entorno externo que cambia caprichosamente, un sistema complejo será estable sólo si tiene la capacidad de sentir su estado, y esta es la esencia de nuestro "yo". Los análisis muestran que muchos robots automáticos ya necesitan esa sensación. Después de todo, un robot, y de hecho cualquier máquina compleja de autoaprendizaje que se comunique activamente con una persona, debe informarle sobre el estado de su memoria, lo que entiende, lo que no y por qué. Y para ello, el autómata debe sentir y poder expresar su estado. El robot también lo necesita para detectar a tiempo problemas en su "cuerpo". Es poco probable que un robot que no es consciente de sí mismo sobreviva por mucho tiempo en un entorno complejo y que cambia rápidamente y que influye en él.

3. CREACIÓN DE INTELIGENCIA ARTIFICIAL.

Desde finales de la década de 1940, los científicos de un número cada vez mayor de laboratorios de investigación industriales y universitarios han fijado sus miras en un objetivo audaz: construir computadoras que funcionen de maneras que las hagan indistinguibles de la mente humana.

A medida que los investigadores que trabajan en el campo de la inteligencia artificial (IA) avanzan pacientemente en su arduo trabajo, se enfrentan a problemas complejos que van mucho más allá de los límites de la informática tradicional. Resultó que, en primer lugar, es necesario comprender los mecanismos del proceso de aprendizaje, la naturaleza del lenguaje y la percepción sensorial. Resulta que para crear máquinas que imiten el funcionamiento del cerebro humano es necesario comprender cómo funcionan sus miles de millones de neuronas interconectadas. Y luego muchos investigadores llegaron a la conclusión de que quizás el problema más difícil al que se enfrenta la ciencia moderna es el conocimiento de los procesos de funcionamiento de la mente humana, y no sólo la imitación de su trabajo. Lo que afectó directamente a los problemas teóricos fundamentales de la ciencia psicológica. De hecho, a los científicos les resulta difícil siquiera llegar a un punto de vista común sobre el tema mismo de su investigación: la inteligencia. Aquí, como en la parábola de los ciegos que intentaron describir al elefante, intenta atenerse a su preciada definición.




Arriba