La computación estocástica es un conjunto de técnicas que representan valores continuos mediante secuencias de bits aleatorios. A continuación, se pueden realizar cálculos complejos mediante operaciones simples bit a bit sobre las secuencias. La computación estocástica se diferencia del estudio de algoritmos aleatorios .
Supongamos que se da y queremos calcular . El cálculo estocástico realiza esta operación utilizando probabilidad en lugar de aritmética.
En concreto, supongamos que hay dos flujos de bits aleatorios e independientes llamados números estocásticos (es decir, procesos de Bernoulli ), donde la probabilidad de un 1 en el primer flujo es , y la probabilidad en el segundo flujo es . Podemos tomar el AND lógico de los dos flujos.
La probabilidad de que aparezca un 1 en el flujo de salida es . Al observar suficientes bits de salida y medir la frecuencia de los 1, es posible realizar una estimación con una precisión arbitraria.
La operación anterior convierte un cálculo bastante complicado (multiplicación de y ) en una serie de operaciones muy simples (evaluación de ) en bits aleatorios. Para ponerlo en otra perspectiva, suponiendo la tabla de verdad de una compuerta AND. La interpretación convencional es que la salida es verdadera si y solo si las entradas A y B son verdaderas. Sin embargo, si la tabla se interpreta verticalmente, (0011) AND (0101) es (0001), es decir, 1/2 x 1/2 = 1/4, que es exactamente una multiplicación aritmética. Como la información se presenta en una distribución de probabilidad, la multiplicación de probabilidad es literalmente una operación AND.
En términos más generales, la computación estocástica representa números como flujos de bits aleatorios y reconstruye números calculando frecuencias. Los cálculos se realizan en los flujos y traducen operaciones complicadas en operaciones simples en sus representaciones de flujo. (Debido al método de reconstrucción, los dispositivos que realizan estas operaciones a veces se denominan procesadores de promedio estocástico). En términos modernos, la computación estocástica puede verse como una interpretación de cálculos en términos probabilísticos, que luego se evalúan con un muestreador de Gibbs . También puede interpretarse como una computadora híbrida analógica / digital .
La computación estocástica fue introducida por primera vez en un artículo pionero de John von Neumann en 1953. [1] Sin embargo, la teoría no pudo desarrollarse completamente hasta los avances en computación de la década de 1960, [2] [3] principalmente a través de una serie de esfuerzos simultáneos y paralelos en los EE. UU. [4] y el Reino Unido. [5] A fines de la década de 1960, la atención se centró en el diseño de hardware de propósito especial para realizar computación estocástica. Una gran cantidad [6] de estas máquinas se construyeron entre 1969 y 1974; RASCEL [7] se muestra en este artículo.
A pesar del intenso interés suscitado en los años 1960 y 1970, la computación estocástica no logró competir con la lógica digital más tradicional, por las razones que se describen a continuación. El primer (y último) Simposio Internacional sobre Computación Estocástica [8] tuvo lugar en 1978; la investigación activa en el área disminuyó en los años siguientes.
Aunque la computación estocástica declinó como un método general de computación, ha demostrado ser prometedora en varias aplicaciones. La investigación se ha centrado tradicionalmente en ciertas tareas en el aprendizaje automático y el control. [9] [10] Recientemente, el interés se ha volcado hacia la decodificación estocástica, que aplica la computación estocástica a la decodificación de códigos de corrección de errores. [11] Más recientemente, los circuitos estocásticos se han utilizado con éxito en tareas de procesamiento de imágenes como la detección de bordes [12] y el umbral de imágenes . [13] El avance reciente en circuitos estocásticos también muestra ventajas prometedoras de velocidad y eficiencia energética en la aceleración de hardware de inteligencia artificial (IA) en la computación de borde.
Aunque la computación estocástica fue un fracaso histórico, puede que siga siendo relevante para resolver ciertos problemas. Para entender cuándo sigue siendo relevante, es útil comparar la computación estocástica con métodos más tradicionales de computación digital.
Supongamos que queremos multiplicar dos números, cada uno con bits de precisión. Si utilizamos el típico método de multiplicación larga , debemos realizar operaciones. Con la computación estocástica, podemos combinar cualquier cantidad de bits y el valor esperado siempre será correcto. (Sin embargo, con una pequeña cantidad de muestras, la varianza hará que el resultado real sea muy inexacto).
Además, las operaciones subyacentes en un multiplicador digital son sumadores completos , mientras que una computadora estocástica solo requiere una compuerta AND . Además, un multiplicador digital requeriría ingenuamente cables de entrada, mientras que un multiplicador estocástico solo requeriría dos cables de entrada [ cita requerida ] . (Sin embargo, si el multiplicador digital serializara su salida, también requeriría solo dos cables de entrada).
Además, la computación estocástica es robusta al ruido: si se invierten algunos bits en un flujo, esos errores no tendrán un impacto significativo en la solución.
Además, los elementos de computación estocástica pueden tolerar desviaciones en el tiempo de llegada de las entradas. Los circuitos funcionan correctamente incluso cuando las entradas están desalineadas temporalmente. Como resultado, los sistemas estocásticos pueden diseñarse para que funcionen con relojes económicos generados localmente en lugar de utilizar un reloj global y una red de distribución de relojes costosa. [14]
Por último, la computación estocástica proporciona una estimación de la solución que se vuelve más precisa a medida que ampliamos el flujo de bits. En particular, proporciona una estimación aproximada muy rápidamente. Esta propiedad suele denominarse precisión progresiva , lo que sugiere que la precisión de los números estocásticos (flujos de bits) aumenta a medida que avanza el cálculo. [15] Es como si los bits más significativos del número llegaran antes que sus bits menos significativos ; a diferencia de los circuitos aritméticos convencionales donde los bits más significativos suelen llegar al final. En algunos sistemas iterativos, las soluciones parciales obtenidas mediante precisión progresiva pueden proporcionar una retroalimentación más rápida que mediante los métodos de computación tradicionales, lo que conduce a una convergencia más rápida.
La computación estocástica es, por su propia naturaleza, aleatoria. Cuando examinamos un flujo de bits aleatorio e intentamos reconstruir el valor subyacente, la precisión efectiva se puede medir por la varianza de nuestra muestra. En el ejemplo anterior, el multiplicador digital calcula un número con una precisión de bits, por lo que la precisión es . Si estamos utilizando un flujo de bits aleatorio para estimar un número y queremos que la desviación estándar de nuestra estimación de la solución sea al menos , necesitaríamos muestras. Esto representa un aumento exponencial del trabajo. Sin embargo, en ciertas aplicaciones, la propiedad de precisión progresiva de la computación estocástica se puede aprovechar para compensar esta pérdida exponencial.
En segundo lugar, la computación estocástica requiere un método para generar secuencias de bits aleatorias y sesgadas. En la práctica, estas secuencias se generan con generadores de números pseudoaleatorios . Desafortunadamente, generar bits (pseudo)aleatorios es bastante costoso (en comparación con el costo de, por ejemplo, un sumador completo). Por lo tanto, la ventaja a nivel de compuerta de la computación estocástica generalmente se pierde.
En tercer lugar, el análisis de la computación estocástica supone que los flujos de bits son independientes (no están correlacionados). Si esta suposición no se cumple, la computación estocástica puede fallar drásticamente. Por ejemplo, si tratamos de calcular multiplicando un flujo de bits por sí mismo, el proceso falla: dado que , el cálculo estocástico produciría , lo que generalmente no es cierto (a menos que sea 0 o 1). En sistemas con retroalimentación, el problema de la decorrelación puede manifestarse de formas más complicadas. Los sistemas de procesadores estocásticos son propensos al enclavamiento , donde la retroalimentación entre diferentes componentes puede lograr un estado de bloqueo. [16] Se debe dedicar una gran cantidad de esfuerzo a decorrelacionar el sistema para intentar remediar el enclavamiento.
En cuarto lugar, aunque algunas funciones digitales tienen contrapartes estocásticas muy simples (como la traducción entre la multiplicación y la compuerta AND), muchas no las tienen. Intentar expresar estas funciones de forma estocástica puede causar diversas patologías. Por ejemplo, la decodificación estocástica requiere el cálculo de la función . No existe una operación de un solo bit que pueda calcular esta función; la solución habitual implica producir bits de salida correlacionados, lo que, como hemos visto anteriormente, puede causar una serie de problemas.
Otras funciones (como el operador de promedio) requieren inflación o decimación del flujo. Las compensaciones entre precisión y memoria pueden ser un desafío.
Aunque el cálculo estocástico presenta una serie de defectos cuando se lo considera como método de cálculo general, existen ciertas aplicaciones que resaltan sus puntos fuertes. Un caso notable ocurre en la decodificación de ciertos códigos de corrección de errores.
En desarrollos no relacionados con la computación estocástica, se desarrollaron métodos altamente efectivos para decodificar códigos LDPC utilizando el algoritmo de propagación de creencias . La propagación de creencias en este contexto implica reestimar iterativamente ciertos parámetros utilizando dos operaciones básicas (esencialmente, una operación XOR probabilística y una operación de promediado).
En 2003, los investigadores se dieron cuenta de que estas dos operaciones se podían modelar de manera muy sencilla con computación estocástica. [17] Además, dado que el algoritmo de propagación de creencias es iterativo, la computación estocástica proporciona soluciones parciales que pueden conducir a una convergencia más rápida. Se han construido implementaciones de hardware de decodificadores estocásticos en FPGAs . [18] Los defensores de estos métodos argumentan que el rendimiento de la decodificación estocástica es competitivo con las alternativas digitales.
Se han desarrollado métodos deterministas de SC para realizar cálculos completamente precisos con circuitos SC. [19] El principio esencial de estos métodos es que cada bit de un flujo de bits interactúa con cada bit de los otros flujos de bits exactamente una vez. Para producir un resultado completamente preciso con estos métodos, la operación debe ejecutarse para el producto de la longitud de los flujos de bits de entrada. Los métodos deterministas se desarrollan en base a flujos de bits unarios, [20] [21] flujos de bits pseudoaleatorios, [22] y flujos de bits de baja discrepancia. [23]
Existen diversas variantes del paradigma básico de computación estocástica. Se puede encontrar más información en el libro de referencia de Mars y Poppelbaum.
El procesamiento de paquetes implica enviar una cantidad fija de bits en lugar de un flujo. Una de las ventajas de este enfoque es que se mejora la precisión. Para ver por qué, supongamos que transmitimos bits. En la computación estocástica regular, podemos representar una precisión de valores aproximadamente diferentes, debido a la varianza de la estimación. En el procesamiento de paquetes, podemos representar una precisión de . Sin embargo, el procesamiento de paquetes conserva la misma robustez al error del procesamiento estocástico regular.
El procesamiento ergódico implica el envío de un flujo de paquetes, que captura los beneficios del procesamiento estocástico y de paquetes regular.
El procesamiento en ráfagas codifica un número mediante un flujo de incremento de base superior. Por ejemplo, codificaríamos 4,3 con diez dígitos decimales como
ya que el valor medio del flujo anterior es 4,3. Esta representación ofrece varias ventajas: no hay aleatorización ya que los números aparecen en orden creciente, por lo que se evitan los problemas de PRNG, pero se conservan muchas de las ventajas del cálculo estocástico (como las estimaciones parciales de la solución). Además, conserva la precisión lineal del procesamiento ergódico y de los paquetes.
{{citation}}
: Mantenimiento de CS1: falta la ubicación del editor ( enlace ){{cite book}}
: Mantenimiento de CS1: falta la ubicación del editor ( enlace )