Réseaux de Hopfield

Une réseau de Hopfield est un réseau récurrent de neurones artificiels. Chaque neurones est décrit par une seule variable $x$, régie par l'équation

$$\frac{dx(t)}{dt} = -\frac{x(t)}{\tau} + I(t),$$

La stimulation $I(t)$ provient des neurones voisins. Une matrice $W$ définit la force de couplage entre deux neurones. Pour $N$ neurones, la matrice $W$ sera de taille $N \times N$. On suppose que la stimulation des neurones est saturée. Le réseau est décrit par le système de $N$ équations différentielles

$$\frac{d\mathbf{x}(t)}{dt} = -\frac{\mathbf{x}(t)}{\tau} + W \arctan(a \mathbf{x}),$$

avec $\mathbf{x} \in \mathbb{R}^N$, et où le terme $W \arctan(a \mathbf{x})$ s'entend comme le produit de la matrice $W$ et du vecteur $\arctan(a \mathbf{x})$.

Note: une formulation en temps discret et états discrets est aussi possible.

On stocke de l'information (mémoire) en stabilisant les états à mémoriser. Selon les conditions initiales, le système convergera vers l'un ou l'autre des états stables. L'apprentissage hebbien est une façon d'entraîner un réseau de neurones à mémoriser des états donnés.

function sol = hopfield(W,ics)
% HOPFIELD Recurrent artificial network
%  sol = hopfield(W,ic) solution du reseaux de Hopfield avec la matrice de
%  connexion W et les conditions initiales ICS. La matrice de connexion W
%  est carree de taille (NxM)^2. Les conditions initiales ICS doivent etre
%  de taille NxM.
function W = hebbianLearning(p)
% HEBBIANLEARNING Regle d'apprentissage de Hebb
%  W = hebbianLearning(p) renvoie une matrice de connexion W basee sur la
%  regle d'apprentissage de Hebb pour un jeu de pattern d'apprentissage P
%  pour un reseau de Hopfield. P est un tableau NxM, ou N est le nombre de
%  neurones du reseau et M le nombre de patterns a memoriser. La matrice W
%  est de taille NxN.
%
%  La regle de Hebb est inspiree du concept "Neurons that fire together,
%  wire together". Les connexions W(i,j) sont renforcees si les patterns
%  aux position i et j sont semblables.
function p = jpg2vect(filename)
% JPG2VECT transforme une image JPG RGB en vecteur normalise pour le reseau
% de Hopfield. FILENAME est le nom d'un fichier JPG et P est un vecteur
% colonne de taille (NxM), si l'image est de taille NxM.

Images

Responsive image
Responsive image
Responsive image

Exercice 1

A l'aide des codes jpg2vect, hebbianLearning et hopfield, entraînez un réseau de Hopfield à mémoriser les trois images pontcanal_small, campagne_small et ville_small. Utilisez jpg2vect pour générer trois vecteurs colonnes stockés dans une matrice p = [p1, p2, p3];. Générez la matrice W = hebbianLearning(p); et lancez une simulation sol = hopfield(W,ics);, où ics est une matrice n x m représentant une image (prenez par exemple ics = reshape(p1-0.4+0.8*rand(1600,1),40,40);). Ici, n x m = 40 x 40. Le réseau de Hopfield devrait converger vers l'image la plus "proche".

Exercice 2

Ajoutez une image de votre choix aux images déjà apprises. L'image doit être du même format que les trois images de départ, c.-à-d. une image JPG de taille 40 x 40 pixels. La fonction jpg2vect convertit une image couleur en niveaux de gris en extrayant le canal R (rouge) de l'image.

Exercice 3

Implémentez une fonction energie qui calcule la fonction énergie le long des trajectoires du réseau.

function E = energie(x,W,tau,a)
% ENERGIE fonction energie du reseau de Hopfield
%   E = energie(x,W,tau,a) prend en parametre une trajectoire X du reseau de Hopfield,
%   la matrice W de connectivite et les parametre du systeme TAU et A. X est une matrice
%   NxT et W une matrice NxN, avec N le nombre de neurones dans le reseau et T le nombre
%   de points temporels ou la trajectoire a ete calculee.

La fonction énergie est $$E = - \frac{1}{2} \mathbf{v}^* W \mathbf{v} + \sum_{j=1}^N \frac{1}{\tau} \int_0^{v_j} \frac{\tan(v)}{a} dv$$ où $\mathbf{v} = \arctan(a \mathbf{x})$. Vous pouvez calculer l'intégrale numériquement à l'aide de la fonction integral, ou bien utiliser la primitive suivante

$$\int \tan(x)dx = - \ln[|\cos(x)|].$$

Calculez diverses trajectoires du réseau de Hopfield et affichez l'évolution énergie. Confirmez que E est décroissante.