<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>GamePlayArt &#187; umbral</title>
	<atom:link href="http://www.gameplayart.com/blog/?feed=rss2&#038;tag=umbral" rel="self" type="application/rss+xml" />
	<link>http://www.gameplayart.com</link>
	<description>Sitio Oficial de GPA</description>
	<lastBuildDate>Mon, 17 Aug 2009 20:22:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Algoritmos Inteligentes: El Perceptrón Simple</title>
		<link>http://www.gameplayart.com/?p=137</link>
		<comments>http://www.gameplayart.com/?p=137#comments</comments>
		<pubDate>Fri, 17 Oct 2008 19:00:30 +0000</pubDate>
		<dc:creator>Jos_173</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Algoritmo Perceptron]]></category>
		<category><![CDATA[Algoritmos inteligentes]]></category>
		<category><![CDATA[codigo java]]></category>
		<category><![CDATA[inteligencia artificial]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[umbral]]></category>
		<category><![CDATA[vector]]></category>

		<guid isPermaLink="false">http://www.gameplayart.com/?p=137</guid>
		<description><![CDATA[¿Solo los humanos podemos aprender?, descubre como he creado un algoritmo inteligente. Luego de haber estudiado lo que es el campo de la Inteligencia Artificial queremos conocerlo más de esto pero a partir de su código, así que veamos lo que es un Perceptrón. Esto es un tipo de red de aprendizaje supervisado, es decir necesita conocer los valores esperados para cada una de las entradas presentadas.]]></description>
			<content:encoded><![CDATA[<p>Esta vez veremos un poco de lo que vamos aprendiendo. Luego de haber estudiado lo que es el campo de la Inteligencia Artificial queremos conocerlo más de esto pero a partir de su código, así que veamos lo que es un Perceptrón.</p>
<h2>Antecedentes<a href="http://www.gameplayart.com/wp-content/uploads/2008/10/neuronaartificial.jpg"><img class="alignright size-medium wp-image-138" src="http://www.gameplayart.com/wp-content/uploads/2008/10/neuronaartificial-300x173.jpg" alt="" width="240" height="155" /></a></h2>
<p>La primera red neuronal conocida, fue desarrollada en 1943 por Warren McCulloch y Walter Pitts. La red tipo Perceptrón fue inventada por el sicólogo Frank Rosenblatt en el año 1957 y el primer modelo de Perceptrón fue desarrollado en un ambiente biológico imitando el funcionamiento del ojo humano. El fotoperceptrón: era un dispositivo que respondía a señales ópticas.</p>
<h2>Regla de Aprendizaje</h2>
<p>El Perceptrón es un tipo de red de aprendizaje supervisado, es decir necesita conocer los valores esperados para cada una de las entradas presentadas; su comportamiento está definido por pares de esta forma:</p>
<blockquote><p>Cuando pj es aplicado a la red, la salida de la red es comparada con el valor esperado tj</p></blockquote>
<ul>
<li>Se Suma de las señales de entrada, multiplicadas por unos valores de pesos escogidos aleatoriamente.</li>
<li>La entrada es comparada con un patrón preestablecido para determinar la salida de la red.</li>
<li>Si en la comparación, la suma de las entradas multiplicadas por los pesos es mayor o igual que el patrón preestablecido la salida de la red es uno (1), en caso contrario la salida es cero (0).</li>
</ul>
<h2>Procedimiento general:</h2>
<p>El procedimiento de aprendizaje de la red (ajuste de los pesos) se resume en aplicar cada objeto de la muestra a la red y ajustar los pesos en caso de que la salida de la red no sea correcta, de acuerdo a las fórmulas ya explicadas:</p>
<p>WN = WA + e * p                                               UmbralN = UmbralA + e</p>
<p>Donde<br />
e = t-a<br />
t = valor real del objeto<br />
a = valor calculado por la Red<br />
WN = Peso nuevo<br />
WA = Peso anterior</p>
<p>por ejemplo sea estos datos nuestra bateria de Prueba. Utilizaremos cuatro puntos para el aprendizaje de la RNA<br />
P1 = ( 2,  1)         R1 = 1  (clase A)<br />
P2 = ( 0, -1)        R2 = 1  (clase A)<br />
P3 = (-2,  1)       R3 = -1 (clase B)<br />
P4 = ( 0,  2)        R4 = -1 (clase B)</p>
<p>Partimos de cualquier valor (aleatorios) para los pesos y el umbral:<br />
W = ( -0.7, 0.2 )  umbral = 0.5</p>
<h3>Paso 1.</h3>
<p>Objeto P1 = (2,1)   R1 = 1<br />
W = ( -0.7, 0.2 )     Umbral = 0.5</p>
<p>Aplicamos la Red para P1</p>
<p>a=(P1.Peso)+Umbral = -0.7*2 + 0.2*1 + 0.5 = -0.7<br />
(a &lt;0) ?  Si  a=-1 en otro caso a=1</p>
<p>R1 = 1     es igual a&#8230;    a = -1  (NO)</p>
<p>Por tanto es necesario ajustar los pesos:<br />
e = R1 – a = 1 – (-1) = 2</p>
<p>W = W + e*P1 = (-0.7,0.2) + 2*(2,1)= (3.3, 2.2)<br />
Umbral = Umbral + e = 0.5 + 2 = 2.5</p>
<h3>Paso 2.</h3>
<p>Objeto P2 = (0,-1)   R2 = 1<br />
W = ( 3.3, 2.2 )        Umbral = 2.5</p>
<p>Aplicamos la Red para P2</p>
<p>a=(W.P2)+Umbral = 3.3*0 + 2.2*-1 + 2.5 = 0.3<br />
(a &lt;0) ?  Si  a=-1 en otro caso a=1</p>
<p>R2 = 1  es igual a&#8230;  a = 1  (SI)</p>
<p>Por tanto NO es necesario ajustar los pesos</p>
<h3>Paso 3.</h3>
<p>Objeto P3 = (-2,1)     R3 = -1<br />
W = ( 3.3, 2.2 )    Umbral= 2.5</p>
<p>Aplicamos la Red para P3</p>
<p>a=(W.P3)+Umbral  = 3.3*-2 + 2.2*1 + 2.5 = -1.9<br />
(a &lt;0) ?  Si  a=-1 en otro caso a=1</p>
<p>R3 = -1  es igual a&#8230;  a = -1</p>
<p>Por tanto NO es necesario ajustar los pesos</p>
<h3>Paso 4.</h3>
<p>Objeto P4 = (0,2)   R4 = -1<br />
W = ( 3.3, 2.2 )    Umbral = 2.5</p>
<p>Aplicamos la Red para P4</p>
<p>a=(W.P4)+Umbral = 3.3*0 + 2.2*2 + 2.5 = 6.9<br />
(a &lt;0) ?  Si  a=-1 en otro caso a=1</p>
<p>R4 = -1  es igual a&#8230;  a = 1 (NO)</p>
<p>Por tanto es necesario ajustar los pesos:<br />
e = R4 – a = -1 – (1) = -2</p>
<p>W = W + e*P4 = (3.3,2.2) + -2*(0,2) = (3.3, -1.8)<br />
Umbral = Umbral + e = 2.5 + (-2) = 0.5</p>
<p>Entonces nuestro vector de pesos (W) queda del siguiente modo W=(3.3,-1.8)  y el Umbral=0.5</p>
<p>Cualquier punto que le demos al algoritmo, éste sin necesidad de volver a evaluar nos dará la respuesta que es correcta pues lo que conseguimos con esto es que el algoritmo a base de la bateria de pruebas pueda establecer una línea de separación entre los puntos que introdujimos. Ten en cuenta que este tipo de algoritmo solo resuelve dos estados para un punto dado, esto es: o es de la clase A (1) o es de la clase B (-1).</p>
<h2>Ahora al código</h2>
<p>Para mejor entendimiento descarga el programa que con mucho entusiasmo cree para poder ver el funcionamiento de este algoritmo. Dentro de la clase main modifica los vectores de variablesX y variablesY con los datos que tienes (tu bateria de prueba) recuerda que todas las cordenadas x van en el vector de variablesX y las de y pues en su correspondiente y en la de resultados escribe a que clase pertenece cada dato. Por ejemplo si queremos que nuestra bateria de pruebas sea esta:</p>
<p><a href="http://www.gameplayart.com/wp-content/uploads/2008/10/graficopuntosperceptron.jpg"><img class="aligncenter size-medium wp-image-141" src="http://www.gameplayart.com/wp-content/uploads/2008/10/graficopuntosperceptron-300x156.jpg" alt="" width="362" height="226" /></a></p>
<p>P1 = ( 2,  1)          R1 =   1   (clase A)<br />
P2 = ( 0, -1)         R2 =   1   (clase A)<br />
P3 = (-2,  1)         R3 = -1   (clase B)<br />
P4 = ( 0,  2)          R4 = -1   (clase B)</p>
<p>Debemos de cambiar los vectores en:</p>
<p>&#8230;.<br />
float[] variableX ={2,0,-2,0};<br />
float[] variableY={1,-1,1,2};<br />
float[] resultado={1,1,-1,-1};<br />
&#8230;.</p>
<p>Ahora dicho esto ejecutalo (F6) y sigue los pasos que te dirá por consol.</p>
<p>Prueba el conocimiento del percetrón inventandote un punto cualquiera para probar la destreza de su conocimiento, por ejemplo yo me invente el punto de prueba PP=(-1,4)  y se sabe por el mapa cartesiano (ultima figura mostrada) que este estará dentro de la clase B porque está junto a los otros.</p>
<p>Como era de esperar el programa te dará el mismo resultado. Bien, ahora te toca divertirte, puedes hacer que el algoritmo cuando se encuentre confundido nos pida añadir a la bateria de pruebas el dato que acabamos de darle, no está dificil, te invito a que lo hagas si te encuentras perdido buscamos que estaremos para orientarte en lo poco que aún conocemos; recuerda la mejor forma de aprender es practicando.</p>
<h2>Conclusiones</h2>
<p>A todo esto añado lo siguiente He aqui alguna de mis curiosidades en respecto a este algoritmo, aunque tenga  función limitada el mismo no está demás darle importancia. Mis inquietudes  son:</p>
<p>1).- Como puedo medir el nivel de aprendizaje que está teniendo mi  algoritmo. ¿Acaso es la variable error (en el programa) de mi ejemplo?<br />
2).- Cuales son las  recomendaciones para que algoritmos de este tipo tengan correcto  desenvolvimiento en su área (RNA) pues sucede que debems de darle valores iniciales de peso y umbral, pero si lo hacemos aleatoriamente&#8230; ¿tendremos iguales resultados?.<br />
3).- En este ejemplo en sí, ¿qué es lo que  el algoritmo aprende?. Pues yo solo veo que éste es capáz de encontrar un Vector  de Pesos y el Umbral solamente.<br />
4).- Como experiencia de este trabajo me  llevo gran sorpresa al saber que un algoritmo de Perceptrón solamente <span style="underline;">es un  algoritmo mecánico</span> como cualquier otro, pero con distinto nombre, espero estar  equivocado y haya algo más en esto que le haga diferenciar al resto de los  algoritmos que hasta ahora he ido construyendo.</p>
<p>En el último punto puedo  decir que vi como el algoritmo fue capaz de encontrar su propio vector de pesos  y así también el Umbral (sesgo), entonces yo concluí que un algoritmo perceptron  demuestra su capacidad de aprendizaje por que es autónomo en encontrar una  recta que permita divividir a los puntos en cuestión que son evaluados según sus  resultados de &#8217;1&#8242; (clase A) contra los de resultado &#8216;-1&#8242; (clase B) (en el ejemplo que adjunto la recta  encontrada es el vector de pesos y su umbral); pero&#8230; para sorpresa mía todo  esto lo hizo de manera mecánica, como cualquier otro algoritmo, es entonces que  me pregunto: ¿he sido capaz de desarrollar un algoritmo inteligente?, ¿existe la  inteligencia artificial?, o la inteligencia artificial solo lo  trae de nombre ya que pareciera que Inteligencia Artificial es un &#8216;charle&#8217;  solamente (en el lenguaje común). Vaya que estoy recontra confundido.</p>
<p>En fin&#8230; el estudio nos liberará de esto, si tienes algún aporte ayúdanos a aprender cada día más. Ahora a practicar se dijo, ah!, casi me olvido aquí teneís el link de descarga <a href="http://www.gameplayart.com/wp-content/uploads/2008/10/algoritmointeligentes.zip">Algoritmos Inteligentes: Perceptrón</a> para poder ver todo el código fuente creado en Netbeans 6.0 recuerda darme crédito cuando presentes esto o enseñes a alguién más : ) Hasta la próxima.</p>
<p>José Luis Zelaya           <a href="mailto:joseluiszelaya@gameplayart.com">Escríbele por correo</a></p>
<p><a href="http://www.gameplayart.com/wp-content/uploads/2008/09/pensador.jpg"><img class="aligncenter size-medium wp-image-121" src="http://www.gameplayart.com/wp-content/uploads/2008/09/pensador.jpg" alt="" width="124" height="128" /></a></p>
<p>Si deseas estudiar la teoría de la que me guié para construir todo esto descargate desde <a href="http://www.gameplayart.com/wp-content/uploads/2008/10/sb2_rna_perc.zip">Descargar  Teoría</a></p>
<blockquote>
<h2>&#8220;Crear cuesta mucho&#8230; agradecer no cuesta nada.&#8221;</h2>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.gameplayart.com/?feed=rss2&amp;p=137</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
