Limpia el ruido de una imagen binaria con una sola creencia: un pixel probablemente se parece a sus vecinos.
Escribe eso como una energía, lee la energía como una probabilidad, y resuélvela con la inferencia aproximada más barata que existe — campo medio. Sin conjunto de entrenamiento, sin etiquetas.
Energía de Ising / Boltzmann, y luego una distribución de Boltzmann sobre las configuraciones:
E(x)=−J(i,j)∑xixj−hi∑xiyi p(x)=Z1exp(−E(x))Z suma sobre 2576 configuraciones de una cuadrícula de 24×24 — intratable. Así que no la calculamos.
Aproxima el posterior con monedas independientes por pixel, una media μi para cada una, y actualiza cada una según el campo que la presiona:
μi←tanh(Jj∈N(i)∑μj+hyi)Bárrelo un pixel a la vez hasta la convergencia. Eso minimiza la energía libre:
F(μ)=Eq[E(x)]−H(q)=−logZ+KL(q∥p)Empujar F hacia abajo acerca la aproximación al posterior verdadero.
Arriba: la estimación actual de campo medio μ, barrido por barrido. Abajo: la energía libre, deslizándose cuesta abajo y sin subir nunca.
Los barridos secuenciales (Gauss-Seidel) son descenso por coordenadas sobre F — así que solo puede bajar. Primo de la subida monótona de EM, apuntando al revés.
−1009.6 → −1351.7, convergió en 13 barridos.
18% de ruido de sal y pimienta sobre un "3" de 24×24. No hay gemelo en sklearn — el baseline
honesto es un filtro de mediana de 3×3 (voto de mayoría). BernoulliRBM es un primo, no un
sustituto (él aprende sus acoplamientos).
Iterar sobre toda la cuadrícula le gana a un voto local de un solo tiro por ~4 dB.