LECCIÓN 12 (β). APRENDIZAJE EN MÁQUINAS (II).

Anuncio
LECCIÓN 12 (β
β).
APRENDIZAJE EN MÁQUINAS (II).
En esta lección abordaremos algunas de las limitaciones de los agentes aprendices de “conecta-4”
desarrollados en la lección anterior. Esbozaremos la forma de construir redes neuronales capaces de evaluar
tableros de “conecta-4” entrenándolas mediante aprendizaje con refuerzo. Concretamente, emplearemos una
versión simplificada del método de diferencias temporales.
Inteligencia Artificial e I.C.. 2004/2005
12.1
Dpto. Leng. C. Comp.(Universidad de Málaga)
Inteligencia Artificial e I.C.. 2004/2005
12.2
Dpto. Leng. C. Comp.(Universidad de Málaga)
R.12.1. Implementar un tipo de datos que represente una red neuronal multicapa, así como las funciones
necesarias para calcular la salidad de la red y el algoritmo de aprendizaje mediante retropropagación.
**************************
SOLUCION:
El lector interesado puede encontrar una implementación LISP de libre disposición en la página Web del texto
“Artificial Intelligence: a modern approach” de Stuart Russell y Peter Norvig (http://aima.cs.berkeley.edu). Las
instrucciones de uso se encuentran en (http://aima.cs.berkeley.edu/lisp/doc/user.html#organization).
Serán de especial interés para nosotros las siguientes funciones (aunque la implementación referida proporciona
algunas otras):
•
•
•
•
(make-connected-nn lista), que devuelve una red neuronal multicapa totalmente conectada con
el número de unidades por capa indicadas en la lista. El primer elemento de la lista se refiere al
número de entradas, y el último al número de salidas.
(network-output lista-entrada nn), que devuelve la salida proporcionada por la red nn cuando
recibe las entradas indicadas en la lista-entrada.
(backprop-update nn lista-entrada lista-salida-actual lista-salida-deseada)
que actualiza destructivamente los pesos de la red nn mediante el algoritmo de retropropagación ante la
entrada lista-entrada, suponiendo que en ese momento la red produce la lista-salidaactual, cuando en realidad debería producir lista-salida-deseada.
(print-nn nn) que muestra por pantalla de forma legible la estructura y pesos de la red neuronal nn.
Por ejemplo, creemos una red con dos entradas, dos unidades en la capa oculta, y una salida, para aprender la
función XOR de sus dos entradas.
> (defvar *mi-nn*)
*MI-NN*
>(setf *mi-nn* (make-connected-nn '(2 2 1)))
<red-neuronal-multicapa-27>
> (dotimes (i 10000)
( backprop-update
( backprop-update
( backprop-update
( backprop-update
NIL
*mi-nn*
*mi-nn*
*mi-nn*
*mi-nn*
'(0
'(1
'(0
'(1
0)
0)
1)
1)
(network-output
(network-output
(network-output
(network-output
'(0
'(1
'(0
'(1
0)
0)
1)
1)
*mi-nn*)
*mi-nn*)
*mi-nn*)
*mi-nn*)
'(0))
'(1))
'(1))
'(0)))
> (network-output '(0 0) *mi-nn*)
(0.01755890776674844)
> (network-output '(1 0) *mi-nn*)
(0.9800031228551442)
> (network-output '(0 1) *mi-nn*)
(0.9835795152680812)
> (network-output '(1 1) *mi-nn*)
(0.015557196826686817)
Inteligencia Artificial e I.C.. 2004/2005
12.3
Dpto. Leng. C. Comp.(Universidad de Málaga)
R.12.2. Diferencias temporales: redes neuronales
a) Diseñar una red neuronal para evaluar estados del juego del conecta-k en un tablero n x m, y una función
adecuada para codificar la entrada.
b) Definir las funciones necesarias para entrenar una red neuronal como las definidas en R.11.1, empleando
una variante sencilla del método de diferencias temprorales:
a.
b.
c.
d.
(nn-estado-ganador estado nn).
(nn-estado-perdedor estado nn).
(nn-estado-empate estado nn).
(nn-actualiza-dt estado sucesor nn)
**************************
SOLUCION:
a) Una posibilidad es la siguiente, codificaremos cada posición del tablero mediante dos entradas a la red
neuronal. La primera será 1 si hay una ficha de MAX en la posición, y 0 en caso contrario. La segunda será 1 si
hay una ficha de MIN en la posición, y 0 en caso contrario. De este modo, para un tablero de n x m
necesitaremos 2 x n x m entradas en la red neuronal.
En cuanto a la evaluación una posibilidad es disponer de dos salidas en la red. La primera (pa) se interpretará
como la probabilidad de que la posición sea ganadora para MAX, y la segunda (pi) como la probabilidad de que
la posición sea ganadora para MIN. El resultado de la evaluación será pa – pi.
La función de codificación puede ser la siguiente:
(defun estado-codifica-nn (e fmax fmin)
"Estado del conecta-k en tablero fxc → entrada codificada para la red neuronal"
(let ((tab (estado-tablero e))
(entrada-nn nil))
(dotimes (f (tablero-nfilas tab) entrada-nn)
(dotimes (c (tablero-ncolumnas tab))
(push (if (equalp (tablero-contenido tab f c) fmax) 1 0) entrada-nn)
(push (if (equalp (tablero-contenido tab f c) fmin) 1 0) entrada-nn)))))
b) El método para entrenar una red neuronal multicapa mediante aprendizaje por refuerzo es un algoritmo
conocido como TD(λ) (véase el libo de Sutton y Barto, 1998). De momento nos conformaremos con emplear el
algoritmo de retropropagación, entrenando la red del siguiente modo: cuando una posición del juego sea final, la
entrenaremos con la salida correcta (posición ganadora, perdedora, o de empate para MAX); cuando la posición
no sea final, entrenaremos la red para que su evaluación sea parecida a la de la siguiente posición en la
secuencia de entrenamiento.
(defun nn-estado-perdedor (e nn fmax fmin)
"modifica destructivamente nn entrenándola con e es como estado perdedor"
(let ((entrada (estado-codifica-nn e fmax fmin)))
(backprop-update nn entrada
(network-output entrada nn) ;salida actual
'(0 1))))
;salida deseada
(defun nn-estado-empate (e nn fmax fmin)
"modifica destructivamente nn entrenándola con e como estado perdedor"
(let ((entrada (estado-codifica-nn e fmax fmin)))
(backprop-update nn entrada
(network-output entrada nn) ;salida actual
'(0 0))))
;salida deseada
Inteligencia Artificial e I.C.. 2004/2005
12.4
Dpto. Leng. C. Comp.(Universidad de Málaga)
(defun nn-estado-ganador (e nn fmax fmin)
"modifica destructivamente nn entrenándola con e como estado perdedor"
(let ((entrada (estado-codifica-nn e fmax fmin)))
(backprop-update nn entrada
(network-output entrada nn) ;salida actual
'(1 0))))
;salida deseada
(defun nn-actualiza-dt (e e2 nn fmax fmin)
"nn entrena destructivamente nn suponiendo
predicción para e2"
que
e
debería
converger
a
(let ((entrada (estado-codifica-nn e fmax fmin))
(entrada2 (estado-codifica-nn e2 fmax fmin)))
(backprop-update nn entrada
(network-output entrada nn)
;salida actual
(network-output entrada2 nn)))) ;salida deseada ¡dif. temp.!
Inteligencia Artificial e I.C.. 2004/2005
12.5
Dpto. Leng. C. Comp.(Universidad de Málaga)
la
R.12.3.Redes neuronales para el juego del conecta-4.
a) Definir una función crea-funcion-evaluacion-nn que reciba un objeto nn como los definidos en
R12.2 y devuelva una función de evaluación de juegos considerando los valores de la red neuronal.
b) Definir una función (aprende-nn-2 jug1 jug2 estr-rand &optional (pex 0.1)...), que
reciba dos jugadores jug1, jug2, y aprenda una red neuronal que realice evaluaciones heurísticas
para el jugador jug2. El jugador jug2 realizará movimientos de exploración aleatorios con probabilidad
pex empleando una estrategia estr-rand.
c) Definir una función (entrena-nn-2 ) análoga a la definida en R11.2 para tablas de utilidad.
d) Apender una red neuronal empleando la función anteriror en 1000 partidas del juego del conecta-3 en un
tablero 3x3. Crear un jugador-evaluar adecuado y comprobar su eficacia frente a jugadores
aleatorios como los definidos en la lección 10.
e) Considera el desarrollo de redes neuronales para problemas más complejos.
**************************
SOLUCION:
a) La definición es bastante sencilla, y muy similar a la empleada en R.11.2. Recordemos que la red
neuronal que hemos diseñado en R12.2 tiene dos salidas, y debemos devolver la diferencia entre ellas:
(defun crea-funcion-evaluacion-nn (nn &key fmax fmin) ;ficha de max
#'(lambda (e)
(let ((ganador (finalp e)))
(cond ((eql ganador fmax) 1)
((eql ganador fmin) -1)
(t (apply #'- (network-output (estado-codifica-nn e fmax fmin)
nn)))))))
b) La función aprende es igualmente similar a la definda en R11.2:
(defun aprende-nn-2 (jug1 jug2 estr-rand nn &optional
(fmax *jugador-2*)
(fmin *jugador-1*)
(pex 0.1)
(e (hacer-estado-inicial)))
"Aprende una red-neuronal para el jugador jug2"
(cond ((or (agotado e) (finalp e)) nn)
(t
;movimiento de jug1
(let ((e2 (elegir-suc-nth (jugador-elige-movimiento jug1 e) e))) ;jug1
(when (finalp e2)
(nn-estado-perdedor e2 nn fmax fmin)
(nn-actualiza-dt e e2 nn fmax fmin)
(return-from aprende-nn-2 nn)) ;termina perdiendo
(when (agotado e2)
(nn-estado-empate e2 nn fmax fmin)
(nn-actualiza-dt e e2 nn fmax fmin)
(return-from aprende-nn-2 nn)) ;termina empatando el adversario
;movimiento de jug2
(let* ((explora? (< (random 1.0) pex)) ;cierto con prob. pex
(e3 (elegir-suc-nth (if explora?
(funcall estr-rand e2)
(jugador-elige-movimiento jug2 e2))
e2)))
(cond ((finalp e3) (nn-estado-ganador e3 nn fmax fmin))
((agotado e3) (nn-estado-empate e3 nn fmax fmin)))
(unless explora?
(nn-actualiza-dt e e3 nn fmax fmin))
(aprende-nn-2 jug1 jug2 estr-rand nn fmax fmin pex e3))))))
Inteligencia Artificial e I.C.. 2004/2005
12.6
Dpto. Leng. C. Comp.(Universidad de Málaga)
c) Nuevamente la solución es muy similar a la empleada en la lección 11:
(defun entrena-nn-2 (npartidas &optional
(nocultas 1) ;núm. unidades capa oculta
(nfil *nfilas*)
(ncol *ncolumnas*)
(nn (make-connected-nn (list (* 2 nfil ncol) nocultas 2))))
(let* ((feval (crea-funcion-evaluacion-nn nn
:fmax *jugador-2*
:fmin *jugador-1*))
(j1 (make-jugador-aleatorio))
(j2 (make-jugador-evaluar :fmax
*jugador-2*
:fmin
*jugador-1*
:feval
feval)))
(dotimes (i npartidas nn)
(aprende-nn-2 j1 j2 #'estrategia-random nn *jugador-2* *jugador-1*))))
d) Llegó el momento de la verdad...
(setf *nfilas* 3)
(setf *ncolumnas* 3)
(setf *long-ganadora* 3)
(setf *mi-nn* (entrena-nn-2 10000
1))
(conecta4 (make-jugador-humano)
(make-jugador-evaluar :feval (crea-funcion-evaluacion-nn *mi-nn*
:fmax *jugador-2*
:fmin *jugador-1*)) t)
….
Si disponemos de una función que muestre los efectos del entrenamiento, tal como la pedida en P11.3
(véase también el ejercicio propuesto P12.2), podremos observar cómo evoluciona el rendimiento de la red
neuronal. A continuación se reproducen 3 secuencias de entrenamiento de tres redes diferentes (los pesos
iniciales son aleatorios). Cada secuencia de entrenamiento consta de 2000 partidas, mostrándose cada 100
los resultados de 1000 partidas sin aprendizaje. En todos los casos hay una única capa oculta con una única
unidad y se juega contra una estrategia aleatoria.
Inteligencia Artificial e I.C.. 2004/2005
12.7
Dpto. Leng. C. Comp.(Universidad de Málaga)
SECUENCIA 1:
----------------------------------------Num.
%
%
%
partidas
gana J2 empate pierde J2
0
32.00
16.70
51.30
100
53.10
13.80
33.10
200
49.30
15.10
35.60
300
47.30
17.40
35.30
400
69.30
14.60
16.10
500
81.40
18.60
0.00
600
79.70
20.30
0.00
700
83.40
16.60
0.00
800
78.10
21.90
0.00
900
82.40
17.60
0.00
1000
83.00
17.00
0.00
1100
80.80
19.20
0.00
1200
86.00
11.60
2.40
1300
82.00
18.00
0.00
1400
82.20
17.80
0.00
1500
78.10
16.30
5.60
1600
82.80
13.90
3.30
1700
84.20
12.30
3.50
1800
82.60
14.60
2.80
1900
84.20
13.30
2.50
2000
81.00
19.00
0.00
SECUENCIA 3:
----------------------------------------Num.
%
%
%
partidas
gana J2 empate pierde J2
0
20.40
29.80
49.80
100
18.90
31.10
50.00
200
33.80
28.90
37.30
300
77.20
18.80
4.00
400
75.50
20.70
3.80
500
75.90
20.70
3.40
600
78.90
21.10
0.00
700
83.20
16.80
0.00
800
81.50
18.50
0.00
900
81.50
18.50
0.00
1000
81.20
18.80
0.00
1100
81.20
18.80
0.00
1200
84.60
12.80
2.60
1300
82.60
17.40
0.00
1400
82.70
17.30
0.00
1500
81.60
18.40
0.00
1600
82.80
15.60
1.60
1700
84.50
12.70
2.80
1800
82.30
14.80
2.90
1900
79.30
12.70
8.00
2000
80.90
12.20
6.90
SECUENCIA 2:
----------------------------------------Num.
%
%
%
partidas
gana J2 empate pierde J2
0
26.60
22.70
50.70
100
33.50
21.20
45.30
200
33.40
10.40
56.20
300
36.10
8.40
55.50
400
42.00
12.60
45.40
500
43.60
0.00
56.40
600
44.40
0.00
55.60
700
42.40
12.30
45.30
800
41.80
11.60
46.60
900
39.10
13.70
47.20
1000
43.10
10.40
46.50
1100
53.50
7.30
39.20
1200
79.00
21.00
0.00
1300
81.50
18.50
0.00
1400
85.80
11.40
2.80
1500
80.70
19.30
0.00
1600
81.10
18.90
0.00
1700
83.50
16.50
0.00
1800
84.30
12.60
3.10
1900
79.60
20.40
0.00
2000
82.50
17.50
0.00
Nótese que puede ser necesario un cierto grado de experimentación antes de dar con una red
correctamente entrenada.
Inteligencia Artificial e I.C.. 2004/2005
12.8
Dpto. Leng. C. Comp.(Universidad de Málaga)
e) Dado este éxito inicial, podemos considerar la posibilidad de construir una red neuronal que aprenda a
jugar al conecta-4 en un tablero 4x4 o, por qué no, en un tablero 6x7.
Para abordar la tarea con conocimiento de causa es conveniente leer antes el siguiente consejo que Richard
Sutton nos ofrece en sus FAQ sobre aprendizaje con refuerzo (el texto original completo puede encontrarse
en http://www.cs.ualberta.ca/~sutton/RL-FAQ.html):
“P:Estoy aplicando aprendizaje con refuerzo con una red neuronal con retropropagación y no funciona, ¿qué
debo hacer?
R: Es un error frecuente emplear una red neuronal con retropropagación como aproximador de funciones en
nuestros primeros experimentos de arpendizaje con refuerzo, lo que casi siempre nos lleva al fracaso y la
insatisfacción. El principal motivo de este fracaso es que el uso eficaz de la retropropagación es bastante
espinoso, más aún en una aplicación en línea como el aprendizaje con refuerzo. Es cierto que Tesauro [un
conocido investigador, creador de Tdgammon, el mejor programa jugador de Backgammon] empleó este
enfoque en su aplicación extraordinariamente exitosa del backgammon, pero tengamos en cuenta que
cuando realizó su trabajo con Tdgammon, Tesauro ya era un experto en la aplicación de redes con
retropropagación al juego del backgammon. Ya había construido el mejor programa jugador de
backgammon empleando redes con retropropagación. Ya había aprendido todos los trucos y ajustes de
parámetros que deben afinarse para que hacer que una red con retropropagación aprenda bien. A menos
que tengas una experiencia igualmente amplia a tus espaldas, es bastante probable que acabes muy
frustrado utilizando una red con retropropagación como aproximador de funciones en aprendizaje con
refuerzo.
La solución es dar un paso atrás y aceptar que sólo se puede innovar en un área cada vez. En primer lugar
asegúrate de que comprendes la ideas del AR [aprendizaje con refuerzo] en el caso de tablas, y los
principios generales de la aproximación de funciones en AR. Entonces avanza a un aproximador de
funciones que se comprenda mejor, como uno lineal [..] Decididamente, alguien nuevo en los campos del
aprendizaje y los algoritmos de aprendizaje con refuerzo no debería comenzar con redes de
retropropagación.”
¡Buena suerte!
Inteligencia Artificial e I.C.. 2004/2005
12.9
Dpto. Leng. C. Comp.(Universidad de Málaga)
EJERCICIOS PROPUESTOS.
P.12.1 Implementar el algoritmo de entrenamiento TD(λ) descrito en (Sutton y Barto, 1998).
P.12.2. Definir una función (ver-aprendizaje-nn npartidas cadam kpruebas) que realice un total de npartidas de
entrenamiento para las variantes del juego del conecta4, y devuelva la red neuronal aprendida. Cada cadam
partidas se hará una pausa en el entrenamiento, se jugarán kpruebas partidas contra una estrategia aleatoria, y
se mostrará por pantalla una estadística de los resultados. Esto nos permitirá observar la velocidad con que el
programa aprende su estrategia de juego, y la eficacia de la misma. Por ejemplo, para el juego del conecta-3 en
un tablero 3x3 se debería obtener un resultado parecido al mostrado en R12.3.d.
12.3. a) Escribir una nueva version de la función ver-aprendizaje-nn (P.12.2) que devuelva una lista con los
pesos de la mejor red encontrada en el proceso de aprendizaje.
b) Escribir una función (entrena-redes n) que realice n llamada a ver-aprendizaje-nn, y devuelva una lista con
los pesos de la mejor red encontrada.
P.12.4. Empleando la función del ejercicio anterior, entrenar un jugador para el juego del conecta-3 en un
tablero 4x4 y analizar los resultados. Experimentar con distintos números de unidades en la capa oculta de la
red neuronal. Repetir el proceso para el juego del conecta-4 en un tablero 5x5.
P.12.5 Escribe una función de codificación que tenga en cuenta características adicionales del tablero del
conecta-4, como los de la función de evaluación heurística descrita en la lección 10. Entrena nuevas redes
neuronales que tengan en cuenta, además de las posiciones del tablero, los valores de estas características.
P12.6 Hasta ahora hemos entrenado redes neuronales para conecta-4 jugando contra un jugador aleatorio.
Considera la posibilidad de entrenar una red neuronal jugando contra otra que aprende al mismo tiempo.
P12.7 Emplear las redes neuronales aprendidas en los ejercicios anteriores para crear un jugador-minimax.
¿Mejora el rendimiento del jugador a medida que ampliamos la profundidad de la búsqueda? ¿Por qué?
Compara los resultados con el jugador minimax desarrollado empleando una tabla de utilidades.
__________________________________________________________________________________
Las erratas y comentarios sobre estos apuntes son bienvenidos en: [email protected]
Inteligencia Artificial e I.C.. 2004/2005
12.10
Dpto. Leng. C. Comp.(Universidad de Málaga)
Descargar