Red neuronal Hopfield

Prerrequisitos: RNN

Las redes neuronales de Hopfield, inventadas por el Dr. John J. Hopfield, consisten en una capa de neuronas recurrentes ‘n’ totalmente conectadas. Generalmente se utiliza para realizar tareas de optimización y asociación automática. Se calcula utilizando un proceso interactivo convergente y genera una respuesta diferente a la de nuestras redes neuronales normales. 

Red discreta de Hopfield: es una red neuronal completamente interconectada donde cada unidad está conectada a todas las demás unidades. Se comporta de manera discreta, es decir, da una salida distinta finita, generalmente de dos tipos: 

  • Binario (0/1)
  • bipolares (-1/1)

Los pesos asociados con esta red son de naturaleza simétrica y tienen las siguientes propiedades. 

1.\ w_{ij} = w_{ji} \\ 2.\ w_{ii} = 0

Estructura y Arquitectura  

  • Cada neurona tiene una salida inversora y otra no inversora.
  • Al estar completamente conectado, la salida de cada neurona es una entrada para todas las demás neuronas, pero no para uno mismo.

La figura 1 muestra una representación de muestra de una arquitectura de red neuronal Hopfield discreta que tiene los siguientes elementos.
 

Fig. 1: Arquitectura de red Hopfield discreta

[ x1 , x2 , ... , xn ] -> Input to the n given neurons.
[ y1 , y2 , ... , yn ] -> Output obtained from the n given neurons
Wij -> weight associated with the connection between the ith and the jth neuron.

Algoritmo de entrenamiento

Para almacenar un conjunto de patrones de entrada S(p) [p = 1 a P], donde S(p) = S 1 (p) … S i (p) … S n (p) , la array de peso viene dada por:

  • Para patrones binarios

w_{ij} = \sum_{p = 1}^{P} [2s_{i}(p) - 1][2s_{j}(p) - 1]\ (w_{ij}\ for\ all\ i\neq j)

  • Para patrones bipolares 

w_{ij} = \sum_{p = 1}^{P} [s_{i}(p)s_{j}(p)]\ (where\ w_{ij} = 0\ for\ all\ i= j)

(es decir, los pesos aquí no tienen conexión propia)

Pasos involucrados

Step 1 - Initialize weights (wij) to store patterns (using training algorithm).
Step 2 - For each input vector yi, perform steps 3-7.
Step 3 - Make initial activators of the network equal to the external input vector x. 

y_i = x_i : (for\ i = 1\ to\ n)

Step 4 - For each vector yi, perform steps 5-7. 
Step 5 - Calculate the total input of the network yin using the equation given below.

y_{in_{i}} = x_i + \sum_{j} [y_jw_{ji}]

Step 6 - Apply activation over the total input to calculate the output as per the equation given below: 

y_i = \begin{cases} & 1 \text{ if } y_{in}>\theta_i \\ & y_i \text{ if } y_{in}=\theta_i \\ & 0 \text{ if } y_{in}<\theta_i \end{cases}

(donde θ i (umbral) y normalmente se toma como 0)

Step 7 - Now feedback the obtained output yi to all other units. Thus, the activation vectors are updated.
Step 8 - Test the network for convergence.

Problema de ejemplo

Considere el siguiente problema. Estamos obligados a crear una red Hopfield discreta con representación bipolar del vector de entrada como [1 1 1 -1] o [1 1 1 0] (en caso de representación binaria) almacenados en la red. Pruebe la red hopfield con entradas faltantes en el primer y segundo componente del vector almacenado (es decir, [0 0 1 0]).

Solución paso-a-paso

Step 1 - given input vector, x = [1 1 1 -1] (bipolar) and we initialize the weight matrix (wij) as:

w_{ij} = \sum [s^T(p)t(p)] \\ = \begin{bmatrix} 1 \\ 1 \\ 1 \\ -1 \end{bmatrix} \begin{bmatrix} 1 & 1 & 1 & -1 \end{bmatrix} \\ = \begin{bmatrix} 1 & 1 & 1 & -1 \\  1 & 1 & 1 & -1 \\   1 & 1 & 1 & -1 \\    -1 & -1 & -1 & 1 \\\end{bmatrix}

and weight matrix with no self connection is:

w_{ij} = \begin{bmatrix} 0 & 1 & 1 & -1 \\  1 & 0 & 1 & -1 \\   1 & 1 & 0 & -1 \\    -1 & -1 & -1 & 0 \\\end{bmatrix}

Step 3 - As per the question, input vector x with missing entries, x = [0 0 1 0] ([x1 x2 x3 x4]) (binary)
       - Make yi = x = [0 0 1 0] ([y1 y2 y3 y4])
Step 4 - Choosing unit yi (order doesn't matter) for updating its activation. 
       - Take the ith column of the weight matrix for calculation.        
 
(we will do the next steps for all values of yi and check if there is convergence or not) 

y_{in_{1}} = x_1 + \sum_{j = 1}^4 [y_j w_{j1}] \\ = 0\ + \begin{bmatrix} 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} 0 \\ 1 \\ 1 \\ -1 \end{bmatrix} \\ = 0\ + 1 \\ = 1 \\ Applying\ activation,\ y_{in_1} > 0 \implies y_1 = 1 \\ giving\ feedback\ to\ other\ units,\ we\ get \\ y = \begin{bmatrix} 1 & 0 & 1 & 0 \end{bmatrix} \\ which\ is\ not\ equal\ to\ input\ vector\ \\ x = \begin{bmatrix} 1 & 1 & 1 & 0 \end{bmatrix} \\ Hence,\ no\ covergence.

now for next unit, we will take updated value via feedback. (i.e. y = [1 0 1 0]) 

y_{in_{3}} = x_3 + \sum_{j = 1}^4 [y_j w_{j3}] \\ = 1\ + \begin{bmatrix} 1 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} 1 \\ 1 \\ 0 \\ -1 \end{bmatrix} \\ = 1\ + 1 \\ = 2 \\ Applying\ activation,\ y_{in_3} > 0 \implies y_3= 1 \\ giving\ feedback\ to\ other\ units,\ we\ get \\ y = \begin{bmatrix} 1 & 0 & 1 & 0 \end{bmatrix} \\ which\ is\ not\ equal\ to\ input\ vector\ \\ x = \begin{bmatrix} 1 & 1 & 1 & 0 \end{bmatrix} \\ Hence,\ no\ covergence.

now for next unit, we will take updated value via feedback. (i.e. y = [1 0 1 0])

y_{in_{4}} = x_4 + \sum_{j = 1}^4 [y_j w_{j4}] \\ = 0\ + \begin{bmatrix} 1 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} -1 \\ -1 \\ -1 \\ 0 \end{bmatrix} \\ = 0\ + (-1)\ + (-1) \\ = -2 \\ Applying\ activation,\ y_{in_4} < 0 \implies y_4= 0 \\ giving\ feedback\ to\ other\ units,\ we\ get \\ y = \begin{bmatrix} 1 & 0 & 1 & 0 \end{bmatrix} \\ which\ is\ not\ equal\ to\ input\ vector\ \\ x = \begin{bmatrix} 1 & 1 & 1 & 0 \end{bmatrix} \\ Hence,\ no\ covergence.

now for next unit, we will take updated value via feedback. (i.e. y = [1 0 1 0])

y_{in_{2}} = x_2 + \sum_{j = 1}^4 [y_j w_{j2}] \\ = 0\ + \begin{bmatrix} 1 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} 1 \\ 0 \\ 1 \\ -1 \end{bmatrix} \\ = 0\ + 1\ + 1 \\ = 2 \\ Applying\ activation,\ y_{in_2} > 0 \implies y_2= 1 \\ giving\ feedback\ to\ other\ units,\ we\ get \\ y = \begin{bmatrix} 1 & 1 & 1 & 0 \end{bmatrix} \\ which\ is\ equal\ to\ input\ vector\ \\ x = \begin{bmatrix} 1 & 1 & 1 & 0 \end{bmatrix} \\ Hence,\ covergence\ with\ vector\ x.

Red continua Hopfield: A diferencia de las redes discretas Hopfield, aquí el parámetro de tiempo se trata como una variable continua. Entonces, en lugar de obtener salidas binarias/bipolares, podemos obtener valores que se encuentran entre 0 y 1. Se puede usar para resolver problemas de memoria asociativa y optimización restringida. La salida se define como:

v_i = g(u_i)

where,
vi = output from the continuous hopfield network
ui = internal activity of a node in continuous hopfield network.

Función de energía

Las redes de hopfield tienen una función de energía asociada a ellas. Disminuye o permanece sin cambios en la actualización (retroalimentación) después de cada iteración. La función de energía para una red continua de hopfield se define como:

E = 0.5 \sum_{i=1}^n \sum_{j=1}^n w_{ij}v_i v_j + \sum_{i=1}^n \theta_i v_i

Para determinar si la red convergerá a una configuración estable, vemos si la función de energía alcanza su mínimo por:

\frac{d}{dt} E \leq 0

La red está obligada a converger si la actividad de cada neurona en función del tiempo viene dada por la siguiente ecuación diferencial: 

\frac{d}{dt}u_i = \frac{-u_i}{\tau} + \sum_{j=1}^n w_{ij} v_j + \theta_i

Publicación traducida automáticamente

Artículo escrito por prakharr0y y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *