\documentclass{beamer}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[spanish]{babel}
\usetheme{Madrid}
\title[Neuronas No Supervisadas]{Redes Neuronales Artificiales\\Competitivas No Supervisadas}
\author[Carleos / Corral]{Carleos Artime, C.; Corral Blanco, N.}

\begin{document}

\frame{\titlepage}

\begin{frame}\frametitle{Redes Neuronales Artificiales Competitivas No Supervisadas }
Red Neuronal Competitiva No Supervisada
\begin{columns}
  \begin{column}{.5\textwidth} 
    \begin{itemize}
    \item Las neuronas de salida compiten entre ellas para activarse.
    \item Sólo se activa la que alcanza un mayor {\it potencial sináptico}.
    \item Las neuronas se especializan en detectar la presencia de ciertos patrones de entrada.
    \end{itemize}
  \end{column}
  \begin{column}{.5\textwidth}
    \includegraphics[width=.9\textwidth]{Competitive_neural_network_architecture1.png}
  \end{column}
\end{columns}
\end{frame}

\begin{frame}\frametitle{Redes Neuronales Artificiales Competitivas No Supervisadas }
Los elementos básicos de estas redes son:
\begin{itemize}
 \item La capa de entrada. Vector de entrada: $\vec{x}= (x_1, \ldots, x_p)$
 \item La capa de salida, que tiene naturaleza competitiva:
   \begin{itemize}
   \item Sus neuronas son de naturaleza binaria.
   \item Sólo pueden activarse una con cada patrón de entrada.
   \end{itemize}
 \item Potencial sináptico de la neurona de salida \(k\):
   $$
   h_k = \sum_{r=1}^{p} w_{kr} x_r -\frac{1}{2} \sum_{r=1}^{p} w_{kr}^2
   = -\frac12 \Vert \vec w_k - \vec x \Vert^2 + \text{constante}
   $$ 
 \item La neurona con mayor potencial sináptico es la que tiene la menor distancia euclídea entre su vector de pesos $\vec{w}_k$ y $\vec{x}$.
 \item La salida  $k$ vale:
   $o_k = \left\{ \begin{array}{rl}1 & \text{si }h_k= \max\{h_1, \ldots, h_m\}\\
                    0 &  \text{en otro caso}  \end{array}\right.$
\end{itemize}
\end{frame}

\begin{frame}\frametitle{Redes Neuronales Artificiales Competitivas No Supervisadas }
Entrenamiento de la red:
\begin{itemize}
 \item Objetivo: Conseguir que los pesos sean una buena representación de los datos de entrenamiento.
 \item Procedimiento: Activar la neurona cuyos pesos sean los más parecidos al patrón de entrada.
\end{itemize}

Para ello se define el siguiente error:
$$
E(\vec{x}) = \sum_{k=1}^{m} a_{k}  \Vert \vec{x} -\vec{w}_k \Vert^2 =
\sum_{k=1}^{m} a_{k}  \sum_{r=1}^{p} (x_r -w_{kr})^2
$$ 
donde $
a_{k} =
\left\{ 
\begin{array}{rl} 
  1&\text{si } \Vert \vec{x} -\vec{w}_k \Vert^2 =
     \displaystyle\min_{i=1,\dots,m} \Vert \vec{x} -\vec{w}_i\Vert^2\\
  0 &\text{en el resto} \end{array}\right.$
\end{frame}

\begin{frame}[t]\frametitle{Redes Neuronales Artificiales Competitivas No Supervisadas }
  \begin{center}
    \includegraphics[height=.8\textheight]{gradiente.png}
  \end{center}
\end{frame}

\begin{frame}[t]\frametitle{Redes Neuronales Artificiales Competitivas No Supervisadas }
Los pesos sinápticos se estiman, de manera iterativa, usando el descenso del gradiente para  minimizar el error

$$
w_{kj}(t+1) = w_{kj}(t) - \eta_{t} \frac{\partial E} {\partial w_{kj}} =
w_{kj}(t) + \eta_{t}\, a_{k} \sum_{r=1}^p(x_r -w_{kr})
$$

\vspace{-18mm}
\begin{center}
  %install.packages("diagram");library(diagram);pdf("flechas.pdf",width=5,height=5);plot(c(0,10),c(0,10),type="n",axes=FALSE,xlab="",ylab="");arrows(c(0,0,0,0,0),c(0,0,0,0,0),c(5,0,2,4,8),c(0,5,8,7,5));lines(c(2,8),c(8,5),lty=2);curvedarrow(c(2,8),c(4,7),lcol="blue",curve=-.15,arr.pos=.7);text(c(2,5,8.5),c(8.6,7.3,5.2),c(expression(w[k](t)),expression(w[k](t+1)),expression(x(t))));dev.off()
  \includegraphics[width=8cm]{flechas.pdf}
\end{center}
\end{frame}


\begin{frame}[t]\frametitle{Redes Neuronales Artificiales Competitivas No Supervisadas }
Los pesos sinápticos se estiman, de manera iterativa, usando el descenso del gradiente para  minimizar el error

$$ w_{kj}(t+1) = w_{kj}(t) - \eta_{t} \frac{\partial E} {\partial w_{kj}} =
w_{kj}(t) + \eta_{t}\, a_{k} \sum_{r=1}^p(x_r -w_{kr})$$

En cada iteración sólo cambian los pesos de la neurona ganadora.\\[1ex]

La tasa de aprendizaje debe disminuir con cada iteración del proceso de entrenamiento. Algunos criterios habituales son:
\begin{itemize}
 \item $\eta_t= \eta_0 e^{-t/\lambda} $
 \item $\eta_t= 1- \frac{t}{T}$ con $T= $ número máximo de iteraciones
\end{itemize}
\end{frame}


\begin{frame}\frametitle{Mapas de Kohonen (Self Organizing Map, SOM)}

\begin{itemize}
 \item Son redes de aprendizaje no supervisado.
 \item Tienen naturaleza competitiva.
 \item Se construyen teniendo en cuenta las posiciones que ocupan las neuronas.
 \end{itemize}
 
 % Gráfico de una red de Kohonen
 % pdf("kohonen.pdf");plot (c(0,100),c(0,100),xpd=TRUE,axes=FALSE,type="n",xlab="",ylab="");segments(c(5,10,15,20,25),c(50,60,70,80,90),c(75,80,85,90,95),c(50,60,70,80,90));arrows(c(5,35,65,96),c(5,5,5,5),c(37,39,41,43),c(57,56,56,57));points(c(seq(5,95,30),seq(5,75,10),seq(10,80,10),seq(15,85,10),seq(20,90,10),seq(25,95,10)),c(rep(5,4),rep(50,8),rep(60,8),rep(70,8),rep(80,8),rep(90,8)),cex=5,pch=21,bg="grey");points(40,60,pch=21,bg="black",cex=5);for(i in 1:4)for(j in 0:7)segments(10*j+5*i+2.1,40+10*i+3.4,10*j+5*i+5-0.6,50+10*i-1.7);text(.3+c(5,34.7,65,95),rep(4.7,4),expression(x[1],x[2],"...",x[p]),cex=1.8);text(40,60,"k",cex=1.8,col="white");text(c(9,30,60,83),rep(24,4),expression(w[k*1],w[k*2],"...",w[k*p]),cex=1.8);text(c(7,7,50),c(85,93,-3),c("(mapa)","salida","entrada (capa sensorial)"),cex=1.7,xpd=TRUE);dev.off()
 \vspace{-15mm}
 \begin{center}
   \hspace*{30mm}\includegraphics[width=75mm]{kohonen.pdf}
 \end{center}
\end{frame}

\begin{frame}\frametitle{Mapas de Kohonen}
 Los elementos básicos de una red de Kohonen son:
 \begin{itemize}
 \item La capa de salida está formada por una rejilla rectangular, de
   neuronas binarias, de tamaño $m_1\times m_2$. La rejilla también
   puede ser hexagonal.
 \item Cada neurona $k$ de la capa de salida tiene asociado un vector
   de posición en el plano $\vec{p}_k= (p_{k1},p_{k2})$
 \item La proximidad entre las neuronas de la capa de salida. La
   función más usual es
   $$ T_{g,k} = exp\Bigl(- \frac{d^2( \vec p_g, \vec p_k)} {2
     \sigma^2} \Bigr)$$ donde
   $$d(p_g, p_k)= \Bigl(|p_{g1}-p_{k1}|^\alpha + |p_{g2} - p_{k2}|^\alpha\Bigr)^\frac{1}{\alpha}$$ 
   \begin{itemize}
   \item $\alpha=1$ $\Longrightarrow$ $d$ es la distancia de Manhattan
   \item $\alpha=2$ $\Longrightarrow$ $d$ es la distancia euclídea 
   \end{itemize}      
 \end{itemize}   
\end{frame}

\begin{frame}\frametitle{Mapas de Kohonen}
Etapas del algoritmo de una red de Kohonen:
\begin{enumerate}
\item Calcular el valor de activación de cada neurona de salida
  $$ h_k(\vec{x}) = \exp(- d^2(\vec{x}, \vec{w}_k))$$
Neurona ganadora: vector de pesos más cercano al patrón de entrada.

\item Medir la proximidad de las neuronas respecto a la ganadora $g$:
$$T_{g,k} (t)= \exp\Bigl(- \frac{d^2(\vec p_g, \vec p_k)} {2 \sigma_t^2}\Bigr)$$

Influye el radio de vecindad, $\sigma_t$, que va decreciendo con cada iteración. Un criterio
habitual es $\sigma_t = \sigma_0 \exp( - t / \tau)$.

\item Los pesos se modifican teniendo en cuenta la cercanía a la ganadora
$$w_{kr}(t+1) = w_{kr}(t) + \eta_t T_{g,k} (t) (x_r -w_{kr})$$

%Los pesos de las neuronas alejadas  de la ganadora casi no se modifican mientras que los de las neuronas cercanas tienden a tener pesos parecidos
 \end{enumerate}
\end{frame}

\begin{frame}\frametitle{Mapas de Kohonen} 
  En el entrenamiento de una red de Kohonen hay dos etapas.
  \begin{enumerate}
  \item Auto-organización: Organización topológica de los vectores de pesos.\\
    Inicialmente se consideran una tasa de aprendizaje y radio de vecindad altos. Por ejemplo, $\eta_0=1$ y $\sigma_0$ = diámetro del mapa.  
  \item Convergencia: Está dirigida a obtener valores estables de los pesos sinápticos. Se suele emplear una tasa de aprendizaje pequeña ($0.05$) y un radio igual a $1$
    (distancia mínima entre intersecciones de la rejilla).
  \end{enumerate}
\end{frame}

\begin{frame}\frametitle{Mapas de Kohonen}
  En implementaciones simplificadas como la de \texttt{class} de R, se usa
  $$
  T_{g,k} (t) =
  \begin{cases}
    1 & d(\vec p_g, \vec p_k) \le \sigma_t \\
    0 & d(\vec p_g, \vec p_k) > \sigma_t
  \end{cases}
  $$
  Entonces, para $\sigma_t=\sigma$ fijo,
  $$
  \lim_{t\to\infty} \vec w_k = \bar x_{k,\sigma} = \frac {\sum_g T_{g,k} \sum V_g } {\sum_g T_{g,k}\cdot\#V_g}
  $$
  donde $ V_g = \{\vec x_i\mid g=\arg\min_j \|\vec x_i-\vec w_j\|\} $
  es el conjunto de patrones de entrada asociados a la neurona de salida $g$.

  Par tanto, los pesos de $k$ tienden a la media de los patrones asociados a
  las neuronas de salida próximas a $k$.

  Se repite el cálculo para una secuencia $\sigma_1 > \sigma_2 > \dots > \sigma_n = 0$
\end{frame}
  
\end{document}