{"id":68,"date":"2018-02-08T10:12:13","date_gmt":"2018-02-08T16:12:13","guid":{"rendered":"https:\/\/www.candaana.com\/news\/?p=68"},"modified":"2020-12-10T11:05:32","modified_gmt":"2020-12-10T17:05:32","slug":"introduccion-las-redes-neuronales-artificiales","status":"publish","type":"post","link":"https:\/\/www.candaana.com\/blog\/introduccion-las-redes-neuronales-artificiales\/","title":{"rendered":"Introducci\u00f3n a las Redes Neuronales Artificiales"},"content":{"rendered":"<p>En la actualidad, las <strong>redes<\/strong> son inherentes en la vida cotidiana, ya que de alguna u otra manera las usamos sin siquiera notarlo. Por ejemplo: los tel\u00e9fonos m\u00f3viles, la computadoras, ciudades conectadas a trav\u00e9s de carreteras. En general las redes, en su estructura general est\u00e1n formados por <em>nodos<\/em> conectados entre s\u00ed, donde la informaci\u00f3n fluye en uno o dos sentidos.<br \/>\nUn ejemplo de redes muy importante es el que forma el conjunto de neuronas en nuestro cerebro, en este caso, los nodos son las neuronas y las conexiones est\u00e1n dadas por el ax\u00f3n (parte de la neurona que env\u00eda la se\u00f1al) y las dentritas (parte que recibe la se\u00f1al). Durante la sinapsis de las neuronas reales ocurre <strong>entrada<\/strong> y <strong>salida<\/strong> de se\u00f1ales, y durante este proceso la se\u00f1al se ve afectada, puesto que podr\u00eda aumentar, disminuir o inhibirse la se\u00f1al durante la comunicaci\u00f3n. Luego, de alguna manera, se determina la activaci\u00f3n de la neurona y finalmente esta \u00e9sta genera una salida.<\/p>\n<h2>Introducci\u00f3n<\/h2>\n<p>Las neuronas artificiales, basadas en las neuronas reales, se modelan a trav\u00e9s de procesos matem\u00e1ticos. Existen diversos modelos sobre neuronas artificiales con diferentes algoritmos que le dan soluci\u00f3n a este problema. Los m\u00e1s usados consiste en tres capas, una de entrada conectada a una capa oculta que est\u00e1 conectada a una capa de salidas (ver Figura).<br \/>\n<figure id=\"attachment_71\" aria-describedby=\"caption-attachment-71\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-71 size-medium\" src=\"https:\/\/www.candaana.com\/news\/wp-content\/uploads\/2018\/02\/multicapa-300x252.png\" alt=\"Red Neuronal Multicapa.\" width=\"300\" height=\"252\" srcset=\"https:\/\/www.candaana.com\/blog\/wp-content\/uploads\/2018\/02\/multicapa-300x252.png 300w, https:\/\/www.candaana.com\/blog\/wp-content\/uploads\/2018\/02\/multicapa.png 477w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><figcaption id=\"caption-attachment-71\" class=\"wp-caption-text\">Red Neuronal Multicapa.<\/figcaption><\/figure><\/p>\n<ul>\n<li>Cada elemento en las entrada representa la informaci\u00f3n pura que se provee a la red.<\/li>\n<li>Los elementos de la capa oculta est\u00e1n determinados por cada entrada y los pesos sobre las conexiones entre la capa de entradas y la capa oculta.<\/li>\n<li>El comportamiento de cada salida depende de la actividad de las unidades ocultas y los pesos entre lo elementos de la capa oculta y cada una de las salidas.<\/li>\n<\/ul>\n<p>Para dar soluci\u00f3n a la red neuronal es preciso entrenar el modelo. Dicha soluci\u00f3n est\u00e1 dada por un algoritmo de <strong>aprendizaje supervisado<\/strong> desarrollado en 1986 explica que podemos optimizar el error medio que se propaga durante la transmisi\u00f3n de la se\u00f1al en la red.<\/p>\n<h2>Algoritmo de Propagaci\u00f3n Hacia Atr\u00e1s<\/h2>\n<p>El <em>Algoritmo de Propagaci\u00f3n Hacia Atr\u00e1s<\/em> se usa sobre un <em>conjunto de entrenamiento<\/em><br \/>\n$$<br \/>\n\\left\\{<br \/>\n(\\boldsymbol{x}_i,\\; \\bff{y}_i)\\; |\\; \\bff{x}_i \\in\\mathbb{R}^p;\\; \\bff{y}_i\\in \\mathbb{R}^\\ell;\\; i=1,\\; 2, \\; \\ldots, \\; N<br \/>\n\\right\\}<br \/>\n$$<br \/>\nde $N$ se\u00f1ales de entrada con su respectiva salida. La funci\u00f3n de activaci\u00f3n $f$ se sugiere que sea la suma de las se\u00f1ales conocidas multiplicada por su respectivo <strong><em>peso<\/em><\/strong>, el cual indicar\u00e1 la perturbaci\u00f3n que sufre la se\u00f1al. Pongamos entonces<br \/>\n$$<br \/>\nf(\\bff{x},\\; \\bff{w}) = \\sum_{i=1}^p x_{i} w_{i} .<br \/>\n$$<br \/>\nAhora se necesita elegir una funci\u00f3n que genere una salida para cada neurona y una de las funciones m\u00e1s conocidas y \u00fatiles, en cuestiones de aprendizaje estad\u00edstico, es las funci\u00f3n <em>sigmoide<\/em> (que es un caso particular de la <em>funci\u00f3n log\u00edstica<\/em>):<br \/>\n$$<br \/>\ng(x) = \\frac{1}{1+e^{-x}}.<br \/>\n$$<br \/>\nEs una funci\u00f3n continua sobre todos los n\u00fameros reales, con rango en el intervalo abierto $(0,\\; 1)$. Se puede apreciar que crece asint\u00f3ticamente uno. Por lo tanto, una excelente funci\u00f3n que describa la salida de una se\u00f1al es:<br \/>\n$$<br \/>\ng_k(\\bff{x},\\; \\bff{w}) = g(f(\\bff{x},\\; \\bff{w}_k)) =<br \/>\n\\frac{1}{1+e^{-f(\\bff{x},\\; \\bff{w}_k)}}.<br \/>\n$$<\/p>\n<h2>Entrenamiento de red neuronal con tres capas<\/h2>\n<p>A continuaci\u00f3n se desarrollar\u00e1 el an\u00e1lisis para entrenar una red neuronal con tres capas, una capa de entrada, una capa oculta y una capa de salida (como se ilustra en la Figura \\ref{fig:capas}). Nuestra tarea es hallar los valores de los vectores de par\u00e1metros $\\bff{w}$ y $\\bff{v}$ tal que el error cuadr\u00e1tico sea m\u00ednimo. En otras palabras, quisi\u00e9ramos entrenar nuestro modelo de tal forma que obtengamos la salida deseada con el m\u00ednimo error. La expresi\u00f3n para el error para cada neurona en la capa de salida es:<br \/>\n$$<br \/>\nE_k = E(\\bff{x},\\; \\bff{w},\\; y_k) = \\frac{1}{2} (\\gamma_k &#8211; y_k)^2,<br \/>\n$$<br \/>\ndonde $\\gamma_k = g(f(\\bff{a},\\; \\bff{w}_k))$ y $\\bff{a}$ un vector con entradas $a_j = g(f(\\bff{x},\\; \\bff{v}_j ))$. Es preciso notar que los \u00edndices toman valores $1 \\leq i \\leq p,\\;\\; 1 \\leq j \\leq m,\\;\\; 1 \\leq k \\leq \\ell$. Finalmente, el error para red completa es la suma de los errores en cada neurona en la capa de salidas:<br \/>\n$$<br \/>\nE(\\bff{x},\\; \\bff{v},\\; \\bff{w},\\; \\bff{y}) = \\frac{1}{2} \\sum_{k=1}^\\ell(\\gamma_k &#8211; y_k)^2.<br \/>\n$$<br \/>\nEl error depende de las entradas, las salidas y los pesos. El algoritmo de la propagaci\u00f3n hacia atr\u00e1s, ajusta los pesos a trav\u00e9s del m\u00e9todo del gradiente descendiente.<br \/>\nCada peso se actualiza usando el incremento<br \/>\n$$<br \/>\n\\Delta w_{kj} = -\\eta \\parcial{E}{w_{kj}},<br \/>\n$$<br \/>\ndonde el ajuste de cada peso $\\Delta w_{kj}$ es el negativo de una constante $\\eta$ multiplicado por la dependencia del peso anterior sobre el error de la red, i.e. la derivada de $E$ respecto a $w_{kj}$. Como el gradiente apunta hacia donde la funci\u00f3n crece, se considera su negativo para minimizar el error y la constante $\\eta$ indica la longitud del paso en cada iteraci\u00f3n.<\/p>\n<h3>Regla de la Cadena<\/h3>\n<p>Utilizando la regla de la cadena, tenemos que:<br \/>\n$$<br \/>\n\\parcial{E}{w_{kj}} = \\parcial{E}{\\gamma_k}\\; \\parcial{\\gamma_k}{w_{kj}},<br \/>\n%<br \/>\n\\hspace{1cm}<br \/>\n%<br \/>\n\\parcial{\\gamma_k}{w_{kj}} =<br \/>\n%\\parcial{\\gamma_k}{g}\\;<br \/>\n\\parcial{\\gamma_k}{f}\\;<br \/>\n%\\parcial{a_j}{g_k}\\;<br \/>\n%\\parcial{g_k}{f}\\;<br \/>\n\\parcial{f}{w_{kj}},<br \/>\n$$<br \/>\ndonde<br \/>\n\\begin{eqnarray*}<br \/>\n\\parcial{\\gamma_k}{f}<br \/>\n&amp;=&amp; \\frac{e^{-f}}{(1+e^{-f})^2}<br \/>\n= \\frac{e^{-f}+1-1}{(1+e^{-f})^2} \\nonumber \\\\<br \/>\n&amp;=&amp; \\frac{1}{1+e^{-f}} &#8211; \\frac{1}{(1+e^{-f})^2}<br \/>\n= \\gamma_k &#8211; \\gamma_k^2 \\nonumber \\\\<br \/>\n&amp;=&amp; \\gamma_k(1-\\gamma_k)<br \/>\n\\label{eqn:pp2}<br \/>\n\\end{eqnarray*}<br \/>\n$$<br \/>\n\\parcial{f}{w_{kj}} = a_{j},<br \/>\n\\hspace{1cm}<br \/>\n\\parcial{E}{\\gamma_k} = \\gamma_k &#8211; y_k.<br \/>\n$$<br \/>\nPor lo tanto<br \/>\n\\begin{equation*}<br \/>\n\\parcial{E}{w_{kj}} = a_{j} \\gamma_k(\\gamma_k &#8211; y_k)(1-g_k).<br \/>\n\\label{eqn:errorw}<br \/>\n\\end{equation*}<br \/>\nFinalmente el ajuste de los pesos es:<br \/>\n\\begin{equation*}<br \/>\n\\Delta w_{kj} = -\\eta a_{j} \\gamma_k(\\gamma_k &#8211; y_k)(1-\\gamma_k).<br \/>\n\\label{eqn:delta}<br \/>\n\\end{equation*}<\/p>\n<h2>Capa Oculta<\/h2>\n<p>An\u00e1logamente se procede para los pesos $\\bff{v}_j$, en este caso se tiene:<br \/>\n$$<br \/>\n\\Delta v_{ji} = -\\eta \\parcial{E}{v_{ji}},<br \/>\n$$<br \/>\ndonde<br \/>\n$$<br \/>\n\\parcial{E}{v_{ji}} = \\sum_{k=1}^\\ell \\parcial{E}{\\gamma_k}\\; \\parcial{\\gamma_k}{v_{ji}},<br \/>\n$$<br \/>\nesto es porque cada $\\gamma_k$ depende $v_{ji}$. Luego<br \/>\n$$<br \/>\n\\parcial{\\gamma_k}{v_{ji}} =<br \/>\n%\\parcial{\\gamma_k}{g}\\;<br \/>\n\\parcial{\\gamma_k}{f_j}\\;<br \/>\n\\parcial{f_j}{a_j}\\;<br \/>\n%\\parcial{a_j}{g_j}\\;<br \/>\n\\parcial{a_j}{f_i}\\;<br \/>\n\\parcial{f_i}{v_{ji}}<br \/>\n=<br \/>\n\\gamma_k(1-\\gamma_k)w_{kj}a_j(1 &#8211; a_j)x_i.<br \/>\n$$<br \/>\nPor lo tanto<br \/>\n$$<br \/>\n\\Delta v_{ji} = -\\eta a_j(1 &#8211; a_j)x_i \\sum_{k=1}^\\ell (\\gamma_k &#8211; y_k) \\gamma_k(1-\\gamma_k)w_{kj}.<br \/>\n$$<br \/>\nAn\u00e1logamente podemos hacer este an\u00e1lisis para otra capa, calculando el error en funci\u00f3n de las entradas y los pesos de la capa de salida. Es preciso notar que cada capa podr\u00eda tener una cantidad diferente de neuronas. En la pr\u00e1ctica, no es conveniente considerar muchas capas, puesto que el tiempo durante el proceso de entrenamiento crece exponencialmente. Una ajustado los pesos de la red se espera hallar el error m\u00ednimo cuando el gradiente $\\nabla E(\\bff{v}, \\bff{w})$ sea suficientemente cercano a cero.<\/p>\n<h2>Conclusiones<\/h2>\n<p>En conclusi\u00f3n, el entrenamiento de una red neuronal multicapa es relativamente sencillo y la implementaci\u00f3n computacional no es tan complicada, ya que no es necesario hacer uso de librer\u00edas adicionales para del codificado del algoritmo. Adem\u00e1s tiene muchas aplicaciones, se puede emplear una t\u00e9cnica para reconocimiento facial, an\u00e1lisis de patrones y como clasificador, entre otros. Por otro lado, como este m\u00e9todo se basa en calcular derivadas, tiene una desventaja, la soluci\u00f3n podr\u00eda caer en m\u00ednimos locales por lo que ser\u00e1 necesario aplicar el algoritmo varias veces con diferentes valores iniciales de los pesos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En la actualidad, las redes son inherentes en la vida cotidiana, ya que de alguna u otra manera las usamos sin siquiera notarlo. Por ejemplo:<\/p>\n","protected":false},"author":2,"featured_media":71,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[12],"class_list":["post-68","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ia","tag-matematicas"],"_links":{"self":[{"href":"https:\/\/www.candaana.com\/blog\/wp-json\/wp\/v2\/posts\/68","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.candaana.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.candaana.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.candaana.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.candaana.com\/blog\/wp-json\/wp\/v2\/comments?post=68"}],"version-history":[{"count":1,"href":"https:\/\/www.candaana.com\/blog\/wp-json\/wp\/v2\/posts\/68\/revisions"}],"predecessor-version":[{"id":201,"href":"https:\/\/www.candaana.com\/blog\/wp-json\/wp\/v2\/posts\/68\/revisions\/201"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.candaana.com\/blog\/wp-json\/wp\/v2\/media\/71"}],"wp:attachment":[{"href":"https:\/\/www.candaana.com\/blog\/wp-json\/wp\/v2\/media?parent=68"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.candaana.com\/blog\/wp-json\/wp\/v2\/categories?post=68"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.candaana.com\/blog\/wp-json\/wp\/v2\/tags?post=68"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}