Esta es una gran pregunta en realidad. Porque profundiza en cuestiones relacionadas con la inteligencia artificial y las computadoras serán creativas o tendrán emociones.
Comencemos mirando lo que hace una computadora de manera simplificada.
- ¿Cómo se fundó Computer Sciences Corporation?
- En la programación de ensamblaje (todos los tipos), ¿es útil / necesaria la instrucción de salto a desplazamiento (PC + x) si ya hay una instrucción de salto que apunta a un registro o valor absoluto? Estoy pidiendo una PC que estoy diseñando actualmente.
- ¿Por qué las imágenes se consideran datos no estructurados cuando se pueden almacenar en bases de datos?
- ¿Qué RAM debo instalar en mi PC 2005? Ahora corre lento; ¿Es este el resultado de instalar Windows 7? ¿Cómo puedo acelerarlo?
- ¿Cuáles son las mejores formas de mejorar el rendimiento de una computadora?
- Todo en una computadora es un número, ¡todo! Desde imágenes hasta video, sonido y letras. Esto se debe a que todo está “codificado”. Toma las cartas que estás leyendo. Existe un estándar llamado Código Estándar Americano para el Intercambio de Información (ASCII). Es una tabla que determina cómo codificar las letras. Dice que una ‘A’ mayúscula es 65 y que ‘B’ mayúscula es 66. Una pequeña ‘a’ es 97 y una pequeña ‘b’ es 98. De esta manera, un archivo que debe contener texto puede ser transferido por uno computadora a otra y aún ser utilizable. Es una forma acordada de representar letras como números.
- En el corazón de una computadora hay una CPU (unidad central de procesamiento) que realiza operaciones simples, como copiar un valor de un lugar en la memoria a otro, o sumar dos números y almacenarlos en algún lugar de la memoria. También contiene instrucciones para la comparación, como comparar el número en la ubicación de memoria 1.456 con el número en la ubicación 5.432 y luego cambiar qué código ejecutar (ramificación) en función de los resultados.
- Los programas mismos consisten en estas instrucciones de CPU y, como todo lo demás, están codificadas como números. La operación 65 podría ser “agregar el valor de dos registros juntos para almacenar en el primer registro” y el siguiente byte es el primer registro con el siguiente byte como el siguiente registro. Entonces, la serie de números en la memoria 65 12 5 significa sumar el valor del registro 12 al registro 5 poniendo los resultados en el registro 12.
Es posible que haya notado que 65 es una ‘A’ mayúscula en ASCII, pero en nuestra pseudo CPU significa agregar dos registros juntos. Esto está bien, son dos codificaciones diferentes para dos tipos diferentes de datos (texto y programas). Pero espera, ¿estoy diciendo que un programa son datos? Sí, para la CPU, un programa es simplemente una serie de números que indican paso a paso qué hacer. Y dada la misma entrada, SIEMPRE realizará esos pasos exactamente de la misma manera. EXACTAMENTE sin desviación, siempre que la entrada sea la misma.
Aquí hay un ejemplo de un programa simple:
1) Cargue el valor de la ubicación de memoria 10 en el registro 1
2) Reste el valor en la ubicación de memoria 11 del registro 1 y almacene en el registro 1
3) si el valor en el registro 1 es menor que 10, salte al paso 6
4) imprimir “10 o más”
5) bifurca al paso 7
6) imprimir “Menos de 10”
7) detener programa
Entonces, los programas toman el valor de la memoria (datos iniciales) y lo cargan en una ubicación especial llamada registro que está en la CPU. Luego resta el valor de la ubicación 11 (también los datos iniciales) y los almacena en el registro 1. Si el valor en el registro 1 es menor que 10, imprime “Menos de 10” y termina, de lo contrario, imprime “10 o mayor” y finaliza. Si los valores iniciales en las direcciones 10 y 11 nunca cambian, el programa nunca puede tomar otra ruta. Si los datos iniciales cambian, puede obtener una salida diferente.
Cómo se aplica esto a los números aleatorios
Ahora tiene un programa que desea generar números aleatorios, el problema es que siempre toma los mismos pasos y los datos iniciales SIEMPRE generarán la misma salida. Esa es la dificultad aquí. ¿Cómo se hace un número aleatorio a partir de un algoritmo que siempre sigue los mismos pasos cuando se le da la misma entrada? Sin hardware especializado, no puedes. Lo que obtienes es que, dado un estado inicial (entrada inicial), puede generar una serie de números, comenzando con ese estado inicial, que se producen de una manera que la salida parece aleatoria en un rango determinado. El número inicial se llama semilla. Dada la misma semilla (estado inicial), se producirá la misma cadena de números aleatorios al cambiar los bits. No son realmente al azar, simplemente están tan mezclados en su progresión que parecen aleatorios. Se llaman “pseudoaleatorios” porque si conoce ese estado inicial y cuántas veces ha pasado por el algoritmo, puede conocer el siguiente número.
En la imagen de arriba, se dibujaron 100,000 píxeles usando un generador de números pseudoaleatorios (PRNG) para generar las coordenadas de los puntos (dado que en números verdaderamente aleatorios se pueden elegir los mismos números más de una vez, es probable que no haya 100,000 puntos ) Si ejecuta el programa nuevamente sin cambiar nada, obtendrá exactamente la misma imagen. Si cambia la semilla de 1 a otra cosa, incluso 2, la imagen se vería muy diferente. Al elegir una nueva semilla, saltas a la serie de números en una nueva ubicación que parece darte números aleatorios, pero en realidad es la misma lista de números, pero comienza en otro lugar de la lista.
Entropía
La mayoría de los PRNG buenos usan un método cíclico para generar números, lo que significa que toma el valor del último, ejecuta el algoritmo y el estado ahora es diferente para generar el siguiente. Digamos que nuestro PRNG comienza en 10, luego genera 15, luego genera 7 y luego 8,000.
Ahora supongamos que entre el 10 y el 15 cambiamos el estado interno del PRNG. Ahora generaría algo diferente, podría ser 10, 105, 423, 87. Esto se llama entropía. Si cambiamos el estado, cambiamos los valores, pero el problema es que si el cambio del estado forma parte del algoritmo, generamos los mismos números. Si podemos encontrar una fuente que esté fuera del algoritmo que no sea un algoritmo en sí mismo, podemos producir mejores números aleatorios.
Las fuentes de entropía a menudo provienen de eventos físicos. Tal vez los milisegundos entre interrupciones del teclado, el tiempo de tus dedos mientras escribes. Esa es una fuente cambiante porque incluso si escribe lo mismo una y otra vez, es tan impreciso a una escala de milisegundos que serán aleatorios, al menos caóticos. Tal vez son los tiempos de la interfaz de disco para discos de metal giratorio de la vieja usanza. Dependiendo de dónde estén los sectores en el disco debajo de las cabezas, incluso leer el mismo sector una y otra vez produce diferentes tiempos. Esa es una fuente física de entropía. El movimiento del mouse es otro.
Realmente se reduce a un concepto básico:
entrada de datos = salida de datos.
Misma entrada de datos = misma salida de datos.
Muchas personas creen que una IA necesitaría un componente aleatorio para ser creativo, pero en realidad ese no es el caso. Las partículas del universo, aunque son inimaginablemente complejas en interacción, operan por leyes del universo que no cambian. Su cerebro opera con estas partículas, que dado el mismo estado (complicado o no) de interacción produciría los mismos resultados. Entonces, tal vez realmente no exista nada aleatorio si supieras 1) todas las reglas de la interacción partícula / onda del universo, 2) el estado inicial y 2) dónde están todas esas partículas en este momento.
(Es binario: o lo entiendes o no).