# Reinforcement Learning: Algoritmos avanzados Q-Learning,  Rainbow DQN #artificialintelligence

## Метаданные

- **Канал:** The Machine Learning Engineer
- **YouTube:** https://www.youtube.com/watch?v=T_0fYKN07Qc
- **Дата:** 30.04.2026
- **Длительность:** 2:34:28
- **Просмотры:** 38
- **Источник:** https://ekstraktznaniy.ru/video/50900

## Описание

En este video exploramos RL distribucional (C51, QR-DQN), Rainbow DQN y Reproducción de la experiencia retrospectiva (PER)

¿Qué sucede si predecir un único valor Q no es suficiente? En la Parte 3 de esta serie sobre aprendizaje por refuerzo profundo, vamos más allá de los retornos escalares y abordamos cuatro de los métodos basados ​​en valores más potentes del aprendizaje por refuerzo profundo.

Comenzamos preguntándonos por qué el retorno esperado puede ocultar información crucial sobre la varianza y el riesgo de cola, y cómo C51 y QR-DQN resuelven esto aprendiendo la distribución completa de los resultados posibles en lugar de solo la media. C51 fija 51 posiciones de átomos y aprende las probabilidades; QR-DQN invierte el proceso, fijando probabilidades iguales y aprendiendo dónde deberían ubicarse los puntos cuantiles. Misma selección de acciones, señal de entrenamiento radicalmente más rica.

Luego analizamos Rainbow DQN, que no es un algoritmo nuevo, sino la respuesta a "¿qué su

## Транскрипт

### Segment 1 (00:00 - 05:00) []

Hola, bienvenidos a mi canal de Machillen Engineer. Hoy vamos a ver otro nuevo vídeo, la serie Reinforcement Le running y hoy vamos a ver el último eh vídeo de la serie Coolarning, en el cual hablaremos de los temas más avanzados de esta parte de algoritmos de Reinforce Merin. En ella vamos a ver el por qué aprender una distribución de entornos en vez de un único valor de nuestra función valor de la función del eh que representa el la ganancia dentro de un estado al tomar una acción. y veremos dos alternativas, una bastante conocida que fue toda la que la que inició todo el tema de la eh o sea, la las alternativas eh que utilizan probabilidades o distribuciones en vez de valores eh discretos, que es la C51. Veremos una alternativa que también es muy popular que está eh la QRDQN que está basada en quantil regression, en regresión de cuantiles. Veremos también la popular alternativa Rainbow que concentra seis de las ventajas o de las mejoras que se que vimos en el vídeo de la parte dos donde veía en el segundo vídeo donde veíamos todas las los problemas eh que tenía el algoritmo de QN, el dice cool learning, la disco network, que era resolver el cool learning con una red neuronal y esto pues traía una serie de problemas. se crearon una serie de mejoras o de de resoluciones que fuimos analizando una a una desde lo que era la doble de QN, la dueling de QN para digamos entender la doble DQN era para separar en principio el la evaluación de del acción, o sea, quién qué red elegía la acción y quién era el que calculaba el valor de esa de esa toma de esa acción, ¿no? Vimos también dueling de QN para comprender si que qué bueno era estar en ese estado o qué bueno era tomar esa acción en ese estado, ¿no? Para separar los dos componentes de la QFION, ¿no? Vimos también el buffer prioritario, vimos los pasos, las el multielm targets, que era en vez de tomar mirar la recompensa un único paso por delante, mirarlo una serie de pasos por delante para así poder materializar las ganancias. Antes vimos las redes noyets para evitar el grady que es eh era monótono, que no tenía eh no aprendía de introducir las nois nets era para que la propia red aprendiera cuándo hacer exploración o explotación y hoy veremos también lo que es la distribución al RL. pues Rinborg compila eh o toma las seis mejoras eh introducidas a DQN y hace pues eh hoy día es la alternativa dentro del de DQN de perdón del Coolarning que hace que sea un algoritmo muy potente, muy popular y que resuelve cualquier tipo de problema, especialmente en entornos eh discretos eh de acción, ¿no? Y finalmente veremos el algoritmo HR que funciona en entornos donde la ganancia solo existe al final, ¿no? Esto, por ejemplo, funciona mucho cuando estás entrenando a un robot que solo tiene ceros y unos, o sea, es un cero o un uno, ¿no? El uno es cuando, por ejemplo, mueves un el brazo de un robot desde tienes que mover una taza o algo un objeto o tienes que tomar un objeto. Entonces, eso es o positivo o negativo, o lo hace o no lo hace. Entonces, no hay pasos intermedios en esos entornos donde solo llegará al final eh es un reguar positivo y durante todo el transcurso no se generan eh recompensas. Es muy difícil entrenar vía eh Belman Equation a la al algoritmo porque siempre da cero, siempre que se equivoca pues no hay un refuerzo positivo para que el brazo del robot o para que el algoritmo sepa en qué dirección ir. En todo caso, en eh en Arshim se eh unos investigadores eh crearon este algoritmo

### Segment 2 (05:00 - 10:00) [5:00]

que trata de resolver este, bueno, que trata no que resuelve este problema en estos entornos donde el la recompensa es muy escasa en todos los eh alternativas que hay para resolver el problema y que solo se es una recompensa binaria o 01. Y como os digo, es imaginaros un robot que trata de mover un objeto desde el punto A al punto B. Entonces, todo lo que hay en el medio, pues es eh la recompensa solo es en el eh al final del camino donde llega al al objetivo, ¿no? Entonces, en este caso todo si no eh utilizando un algoritmo convencional, pues vas a entrenar cada vez que te mueves en una dirección, siempre te da cero, siempre te da una recompensa cero. En estos casos el algoritmo, pues al final después de, imagínate, como siempre hemos dicho, tienes que limitar los números de pasos y los números de episodios en los que estás entrenando al algoritmo, pues como siempre le da cero en todos los pasos intermedios, está explorando o explotando, pues el algoritmo pues no sabe, ¿no? O el robot no va a saber cómo dirigirse del punto al punto, e para ello inventaron este algoritmo, se llama Hinsight Exploration Reward. eh que eh resuelve eh este problema. ¿Vale? Bueno, eh bueno, sigamos. Antes de empezar, pues mi nombre es Juan, como bien sabéis, soy un ingeniero de sistemas con más de 30 años de experiencia en el sector de la tecnología y los últimos 10 años dedicados al mundo de la inteligencia artificial. haciendo un poco de recap en los tres vídeos anteriores vimos un vídeo introductorio en el cual pues veíamos toda la taxonomía de algoritmos de reinfor reinforcement learning los modelos los algoritmos basados en modelo o aprendido o proporcionado a la gente los modelos free que free model eh o sea los algoritmos free model en los cuales el algoritmo no trata de aprender un la dinámica del entorno, sino que trata de aprender o una policy que le lleve, por ejemplo, del punto A al punto B o que trata de eh aprender cuál es la mejorción a tomar en un estado en un estado en concreto, cuál es la mejoración a tomar de las disponibles en ese estado. Entonces teníamos las los algoritmos puros de policy optimization, que son los que tenemos en esta columna, y los algoritmos puros de Coolarning, que son los que hemos estado viendo hasta ahora. Huberemos, como os digo, los más avanzados. Vimos el cooler y el DQN en un primer vídeo, luego vimos todas las debilidades de DQN y cómo se corregían y hoy veremos las opciones más avanzadas. Luego tenemos aquí estos algoritmos que son algoritmos mixtos que tratan toman o tratan de tomar lo mejor de la policy gradient eh de los perdón de los eh algoritmos de policy optimization de los algoritmos de Coolmic. Vimos también lo que era el NDP, eh los el marco decision process, que era cómo se basaban todos los esto es lo digamos la parte fundacional de reinforcement learning. Esto es un prerrequisito para ver este vídeo. Si no sabéis de qué iba esto, iros al vídeo inicial donde explicábamos lo que era un NDP y cómo funcionaba. lo mismo que este todo el tema este que no lo vamos a cubrir ahora obviamente por temas de tiempo, eh cómo se fundamentaba todo el tema del cool learning, eh cómo se sustituía la creación de la tabla de la Qable del Coolarning en el DQN eh por una red neuronal y como pasábamos de al final la Q table era crear una tabla que representaba una función, o sea, todos los valores posibles de una función. esa función que se que está representada por la Q table. Eh, cuando utilizas discolarning, pues eh creas una eh lo haces a través de una red neuronal que aproxima eh esa función o que crea esa función con los pesos y los vallas que tiene que se obtienen por el entrenamiento. Y esto es a lo que ha dado a toda la serie de bueno, pues una serie de problemas, como bien sabemos los que trabajamos en esto, las redes neuronales, pues no son perfectas, tienen sus problemas de entrenamiento eh y tienen sus eh debilidades, son un instrumento muy potente, pero que en un entorno como en Rinformering donde no tenemos etiquetas, donde hay muchísima variabilidad y la gente está aprendiendo

### Segment 3 (10:00 - 15:00) [10:00]

eh, como os digo, eh de learning en un entorno donde tienes etiquetas eh como puede ser un problema de clasificación o de computer vision, pues digamos que está bastante más definido eh sobre todo si tienes etiquetas, ¿no? un problema de supervisar, que tú tienes un una muestra y tienes una etiqueta, pues esto pues bueno, al final ahí la red neuronal performa eh muy bien. Si hay una un espacio no lineal eh de que representar con una función, la red lunar va a funcionar perfectamente. En estos en los entornos de reinformers learning donde no tenemos etiquetas, hay que aprenderlas, podemos crear, utilizar una red neuronal como estamos sabiendo, se hemos visto en el vídeo anterior, pero han llevado una serie de problemas. Esta serie de problemas, lo que vimos en el vídeo anterior, bien, eh, anterior y eh bueno, vimos también toda la parte de DQN, eh todas las debilidades y las eh y cómo eh se iban eh solventando con cada una de las opciones. Un segundo. Bien, perdonar por la interrupción. Vamos a ver. Eh, vimos eh, como os decía en el vídeo, esto fue en el vídeo anterior, eh, las cinco debilidades principales que tenía eh el las DQN, las Q Network, que tratan de solventar el problema de Culler con una red neuronal y vimos cómo se solventaba cada una de estas debilidades con una solución, con un con una Sí, con una solución desde la sobreestimación del covalio con la doble DQN a los al a la separación del de del concepto. Cuando tú cuando estamos obteniendo un valor para nuestro Q value en tanto en cool learning como como con la estimación que se hace con la red neuronal, pues obtenemos un valor. El balón nos dice qué bueno es en conjunto eh el haber tomado estación en este estado en concreto, pero no nos dice no nos da, digamos, como una separación entre qué bueno era este estado y que y qué buena era la acción, ¿no? Esto os ponía el ejemplo de que claro eh no es lo mismo eh estar en el estado inicial y tomar una de las acciones que estar en el estado casi llegando al final y tomar una de las acciones. Entonces, lo que hacíamos era con todo el IND de QN separar el valor el cvalio, que al final va a ser el mismo, pero tener una idea de que bueno, este valor positivo negativo que saco es eh un tanto por cento eh o qué tanto por cento qué tanto bueno es el estado donde estoy tanta buena es la acción que he tomado. Luego estábamos también tomamos miramos la parte de la exploración Grady que, o sea, el algoritmo que teníamos eh Exilon Grady eh de explotación exploración que bueno pues ignoraba el contexto de eh del digamos de las acciones, ¿no? Entonces, esto hacía que, bueno, que el algoritmo, especialmente al principio de del entrenamiento, explorara mucho y explotara poco y eh al final del entrenamiento explotará mucho y explorará poco. Esto está bien. Bueno, pues en algunos entornos va a funcionar, en otro tipo de entornos pues no. Entonces, lo que hacíamos con la con las eh con las nois de QN era que la red aprendía, la red neuronal aprendía cuándo explotar y explorar y dejábamos de que hubiera quitábamos esta eurística, esta regla que era pues hacer un decai de un éxilon que era el que mediante un número aleatorio decidía cuándo se explotaba o se exploraba. Eh, luego también se introducía el buffer eh un buffer reply eh inteligente. el buffer lo que se hacía era eh en un esto se había introducido en el vídeo inicial que era que para evitar la los las correlaciones entre los eh entre los eh las recompensas que hay en el entrenamiento del en los pasos que están muy correlacion, o sea, están secuenciales, o sea, cada paso

### Segment 4 (15:00 - 20:00) [15:00]

secuencial pues está eh la recompensa del paso siguiente está correlacionada con la del anterior y exterior. Esto nos pasa también el entrenamiento de las redes convencionales. Eh, normalmente pues hacemos un una randomización del de los baches para que la data pues cuando se haga un input al a la red neuronal pues obtenga data que no sea siempre la misma y en la misma posición. De esta manera pues introduce una cierta una variabilidad. Lo mismo pasa en la en el entrenamiento con una red neuronal de un agente en Reformement Le running para evitar que esa correlación que existe dice, si tú estás en un paso cualquiera, en el inicial o en el final, pues el la recompensa que tú obtienes en el siguiente paso y en el siguiente todas están correlacionadas, ¿no? Si por ejemplo, si empiezas mal pues vas a acabar mal, ¿no? Si empiezas bien, pues o sea, vas tomando, vas acumulando esto, esta para romper esta correlación que hay entre los la recompensas obtenidas entre pasos consecutivos, se introducía un buffer que de una que en el cual ibas introduciendo eh transacciones, transacciones que son estado, acción, recompensa, estado, estado siguiente y eh terminado, no terminado. se iba metiendo en un buffer y cuando llegabas a un número determinado de transacciones, pues eh eh le hacías eh tomabas los baches de forma aleatoria de ese de ese buffer, ¿no? ¿Qué pasaba con ese approach? Pues que hay pues transacciones de las que aprendías mucho, ¿eh? se tenían el mismo peso que de transacciones que aprendías poco. ¿Qué es una transacción que aprendía mucho y poco, una transacción que aprendía mucho eh es la que produce mucho los mucho error. Entonces, si hay se produce mucho error, va a haber una un backward de gradients, ¿no? una propagación de gradientes superior a que si hay una transacción que está ya bien ya se ha elegido correctamente la acción, de la cual pues bueno, ya sé que cuando estoy en el paso 50 pues tengo que torcer a la derecha. esa transacción, el volverla a utilizar en la exploración, pues no te da ningún resultado, ¿no? Al final de cuentas, recordar que aquí estamos intentando crear una función que dado un una entrada que es un estado me devuelva las los valores de cada una de las acciones que se pueden hacer en ese estado. Entonces, recordar que cuando se entrena con una red neuronal, lo que obtenemos es un vector que con dimensión del número de acciones que tiene ese posibles en ese estado y cada una de ellas te devuelve un cubalio, ¿no? Entonces, con el la propia vermanecuenci toma el máximo la eh o sea, la acción con el máximo cubalio y esa es la que se toma, ¿no? y se calcula el error valor de y se digamos que se hace la propagación de los gradientes en la red neuronal. Pues esto cuando tú ya has visto que una acción en un paso anterior, pues ya has visto que esa es la mejor acción, en un siguiente paso en el entrenamiento, pues vas a ver que esta acción no te no produce un error muy pequeño porque ya la red neuronal ha aprendido que esa era la buena acción. Entonces, eh esa acción eh va a tener muy poco in eh muy poco eh va a aprender la regla neural va a aprender muy poco en en casos eh en pasos posteriores dentro del entrenamiento. Recordar que cuando entrenamos una red neuronalpment learning, pues tienes una serie de pasos que son los mismos que en el entrenamiento de una red neuronal, los pasos en un bat eh con un batch y luego teníamos en la red tenemos los epods y en la y en el reformering tenemos los episodios. El concepto es exactamente el mismo. Entonces, un eh cuando la red neuronal ha aprendido algo al inicio, pues luego si lo ve si vuelve a ver lo mismo en el futuro, pues le va a dar muy poco valor, o sea, el eh la corrección del error que va a producirse con tu función de los va a ser muy pequeño. Pues aquí el concepto es el mismo. que se trata con el

### Segment 5 (20:00 - 25:00) [20:00]

per el el prioritary el buffer con prioridad es de introducir esa información que nos devuelve el los eh en en un atributo nuevo dentro del buffer para decirme, mira, esta de esta transacción ya he aprendido mucho. No la descartes, pero priorita, dale una prioridad menor que hasta otra que me produce un error más grande y todavía tengo que aprender más. Esto era eh básicamente el concepto. Entonces, eh hay que hacer una serie de modificaciones y esto era otro de los problemas que se eh que se tenía que resolver dentro de las eh del entrenamiento de de la red neuronal en un problema de reinforcement. Adicionalmente teníamos la eh la baja propaga la lenta propagación en la red neuronal de los eh de las recompensas aprendidas. ¿Qué es lo que pasaba cuando estás entrenando? tal y como está diseñado la Belman Equation, pues bueno, si tú tenías una recompensa en el paso número 100, hasta que no eh hubiera otros 100 pasos, no ibas a materializar esa recompensa. Entonces, ¿qué es lo que se hacía con el N step? Pues en vez de mirar un step eh adelante, que es como está diseñado eh la red neuronar y la Belman Equation, solo mirar el paso, el estado siguiente. En vez de mirar el estado siguiente, lo que hacíamos era mirar o hacer, digamos que hacer 4 3 4 5 10 transacciones y mirar cuál era el sted. un poco hacer como se hace en policy gradient, que estás mirando que miras el episodio completo y luego vuelves hacia atrás para recalcular los eh las recompensas de cada uno de los estados anteriores. Pues aquí si el N step de QN en el caso más simple es la vanila de QL que solo tienes un step hacia delante y en el caso más extremo que es todos los steps hacia delante hasta que llegues al final es el policy gradient. Entonces, un caso en el intermedio, que suele ser entre c 3 y 5, un nste de tres y c pues ya aprovechas el el digamos que le pones al algoritmo las gafas de verde lejos, no se las pones, no le pones un telescopio, pero le pones unas gafas y ya el algoritmo puede mirar un poco más adelante. Es un poco miope. Entonces, si si, o sea, el algoritmo de tipo Manila es un poco miope, solo ve un paso más adelante, tienes que ver ve ver lo que va a pasar muy cerca de él, pero si le pones unas gafas que le corrigen esa miopía, va a ver un poco eh más adelante. No quieres que vea como con unos prismáticos, pero sí quieres que vea un poquito más adelante. ¿Para qué? pues para poder eh digamos acelerar la materialización de los estos y que la red aprenda más rápido. ¿De acuerdo? Pues bueno, todo esto lo fuimos viendo con la doble DQN, dueling DQN, Noisy DQN. Todo esto se vio en el vídeo anterior, que bueno, lo dicho, para ver el este vídeo de hoy, eh, necesitáis haber visto los vídeos anteriores o si ya tenéis conocimiento de lo que es el cool learning, pues ya podemos entrar con estos motivos avanzados. Muy bien. Eh, ahora vamos a empezar con la parte de lo nuevo de hoy, que son los temas avanzados y por qué introducir una distribución y no un único valor, ¿no? Un escalar. O sea, como bien sabéis, en el DQN clásico se aprende una estimación eh de la ganancia obtenida eh versus estar en un estado y tomar la acción A. No, esta estimación es un valor, un valor único, 50, 30, dependiendo de cuánto en cuánto oscila eh el digamos el máximo el reguar, ¿no? El reguar puede eh ser desde 0 a 500. Si tú tienes un imagínate eh 500 pasos máximos entre el punto A y el punto B y cada paso le das un reguar eh de uno, pues tu reguar puede oscilar entre el 0 y el 500, ¿no? Pero bueno, en cada uno de esos pasos intermedios tú vas a obtener un escalar, un 300, 250, dice. Y esto es lo que trata de estimar cada uno de los steps que haces en el entrenamiento de la red neuronal. Eh, cada uno de ellos tratas de estimar cuál es el valor e el valor más alto de o la ganancia más alta o la

### Segment 6 (25:00 - 30:00) [25:00]

recompensa más alta de ese estado tomando esa acción. Lo que se hace aquí en este caso es hacer una media, el retorno esperado al final en esta pros con una red neuronal o con una o con el cool learning estás estelando eh lo que estás eh obteniendo es el retorno esperado. Esta expectativa de retorno es una media de todas las que has ido viendo durante el entrenamiento. ¿Y cuál es el problema de las medias? Yo creo que esto lo sabemos todos. las medias pues enmascaran. Es una medida estadística, pero que tiene un problema. Eh, enmascara eh problemas, ¿no? Por decirlo de alguna manera. Eh, ¿cómo es? ¿Cómo te diría? Eh, en una media tú tienes, por ejemplo, eh, vamos a poner un ejemplo, eh, de dos tragamonedas, ¿no? Tú imagínate que tienes una dos máquinas, ¿no? Eh, que dices y una es y sabes que las dos de media te pagan 50. Una es porque cada vez que la tomas, tomas eh o vas o después de jugar 500 eh partidas eh digamos el valor eh esperado van a ser 50 de media. Y luego la otra, sabes que también te paga 50 de media, pero que paga 095% de cada 100 veces y paga 100 de cada 100 veces. El valor esperado es el mismo, 50 de media, pero es cierto que sabes mucho más de cómo funciona la máquina B que la máquina A. Las dos tienen el mismo valor, pero con un único escalar tú no sabes distinguirlas y sabes que la única sí, bueno, eh, te doy de media 50, pero eh que esa es la sería la máquina B A, ¿no? La máquina B te dice, "Sí, mira, el 95% de las veces te pago cero y hay un 5% de las veces que te voy a pagar 1000. " Entonces, bueno, eh si sabes un poco de teoría de preabilidades, pues sabrás, mira, la máquina es más segura y predecible, la máquina B es de alto riesgo y tiene una alta recompensa con una cola bastante alargada, bastante pesada. dice, "Si tu agente puede ver la distribución de los retornos, no solo la media, tendría una información más muchísimo más rica de lo que puede aprender. " Y esto es de lo que se trata eh de hacer con una con la introducción de distribuciones en los en el eh aprender las una distribución de los retornos y no aprender una media de los retornos porque las medias eh suelen eh, ¿cómo se dice? Eh, enmascarar cosas. Eh, suelen enmascarar lo primero los outliers, ¿no? Como bien sabemos, tú tienes un como os he estado comentando en la máquina B, la máquina B paga muchísimo, solo un 5% de las veces. Eso es un outlier. Tú imagínate que en vez eh es un ejemplo todavía muchísimo más eh extremo, ¿no? Tú le eh una máquina que paga siempre y luego eh y la y juega y juegas un millón de veces y luego tienes una máquina que paga cero durante 999,999 veces y 1 millón una única vez. Las máquinas pagan lo mismo, pero eh tú puedes jugar muchísimo más seguro a la máquina A porque puedes jugar todas las veces que te va a pagar uno. En cambio, la máquina B eh puedes jugar 999,999 veces que no vas a ganar nada. Entonces juega la máquina A que es muchísimo más segura. es casi como un bono y un y un producto estructurado, yo que sé, por decirlo una chorrada, ¿no? Entonces, bueno, esto es muchísimo más importante saber cómo está distribuida el retorno que saber la media del retorno. Las medias son muy peligrosas, especialmente en data science, en la ingeniería y en la ingeniería de datos y en la estadística en general son muy peligrosas. Es muchísimo mejor saber cómo está distribuida. ¿Veis aquí este propio ejemplo? Eh, para nada tiene que ver. Si tú imagínate que en un estado pues tú tienes estas acciones disponibles, pues como estáis viendo el eh la distribución del valor Q es muy diferente. O sea, eh si veis aquí eh la acción A varía del 0 a -10

### Segment 7 (30:00 - 35:00) [30:00]

y es una distribución prácticamente uniforme, pero muy achatada. Aquí es una distribución también uniforme, pero un poquito menos achatada. Aquí es una distribución uniforme también, pero muy concentrada en el cero y muy eh estrechita, ¿no? Entonces, saber esto es muy importante. Entonces, bueno, adaptar los eh adaptar el algoritmo para que en vez de producir eh o una señal produzca una distribución de cada una de las eh de las acciones posibles en ese estado es muchísimo más rico. Puedes llegar a pensar si ambas tienen, en el caso de las máquinas, una una recompensa de 50, ¿qué importa? Dice, "La gente elige la misma acción de el agente va a elegir todos los modos, sí, pero el beneficio de la de calculada distribución no es primeramente sobre la mejor selección de la acción, es sobre la mejor señal del entrenamiento. O sea, vamos a entrenar mejor nuestra red neuronal. La señal que, o sea, los pesos que tienen nuestras redes neuronal son de muchísima mejor calidad de los que se tienen con unas única señal que es la media de todo lo que ha aprendido. Entonces, cuando el deQN entrena, cada update dice el que el Q value target es 50, tu predicción fue 45. Aquí tienes un los de 50 - 45 elevado cuadrado = 25. Cuando se entrena con una distribución, en este caso con una 51, dice cada update dice la distribución target tiene un 40% de más alrededor del 300, un 30% alrededor del 350 y tu distribución predicha se ve así, o sea, lo que te dice el algoritmo pues te da una distribución, o sea, de en qué puntos, eh, o sea, todos los puntos, o sea, qué porcentaje tiene de que eh de que el Q value que estás prediciendo ahí pues valga un valor u otro, ¿no? O sea, definitiva, calculas una serie de eh porcentajes o de probabilidades de que tu valor valga x, ¿no? Al final, lo dicho, el eh al final el qalio que vas a tener es el mismo. ¿Por qué? porque es la suma de las probabilidades por el valor, al final te da el qalio que tú entregas en Q, en la Q eh en el DQN convencional, tú entregas un valor media y ese mismo valor tú lo vas a a obtener calculando la el sumatorio de la multiplicación de cada uno de los binabilidad, por el valor, ¿no? Por el valor de X. Muy bien, que dos diferencias aquí. Eh, vamos a ver dos opciones. Una es la C51, que es una es la pura eh DQN eh distribual distribucional, o sea, en el que se calcula una distribución por la por dice una distribución del de la recompensa por cada una de las acciones en esa en ese estado y luego tienes la QRDQN. Entonces, la C51 lo que hace es crea 51 eh posiciones, o sea, bin acciones y estos estas 51 posiciones son fijas. O sea, tú pre predecides que va a haber 51 eh bins en los cuales a los cuales le vas a calcular la probabilidad de que del eh Q value, el probabilidad del Q value, vas a definir 51 probabilidades y esas 51 probabilidades te van a dar el Qvaliue final, ¿de acuerdo? Y esto es lo que hace C51. El otro algoritmo que vamos a ver, que es DRQN, está basado en otra técnica que se llama cuantil regresión. El cuantil regresión en vez de eh calcular la aquí en C51 tenemos 51 posiciones fijas y lo que calculamos es la altura. ¿De acuerdo? Esto nos obliga a fijar el punto eh mínimo y el punto final de, o sea, cuál es el valor mínimo de nuestro la altura mínima, que va a ser normalmente cero y la altura máxima. Pero esto también varía del entorno. Puede cuando estás en un entorno que

### Segment 8 (35:00 - 40:00) [35:00]

puedas tener valores negativos que se pueden hacer también con q con dqn eh puede ser -5 a + 5, ¿no? Pues esto es lo que vas a tener que fijar en el C51. entre qué valores se va a poder mover la altura. ¿Por qué? Porque las posiciones ya las tienes fijas. En cambio, en la en el quantil regression de QN lo que haces es fijas la altura, o sea, tú vas a fijar una probabilidad de 1/ido de n, eh, número de bins, y lo que vas a buscar es la posición dentro del eh axis X, ¿de acuerdo? O sea, lo que vas a buscar es cada vez que entrenas la la red neuronal, vas a calcular una probabil una distribución y lo que vas a posicionar son estos alfileres que tienen la misma altura en el axis X de tu eh de tu de los valores de retorno de o sea, recompensa de ese eh de tomar esa acción en ese estado. O sea, dos conceptos al final obtienes lo mismo, exactamente lo mismo y exactamente lo mismo que en la vanila, porque al final vas a tener mediante la suma de las probabilidades el mismo valor de cubalio. En la C51 vamos a fijar las posiciones de nuestros cuantiles, por decirlo de alguna manera. Vamos a tener 51 posiciones y vamos a calcular la altura, ¿de acuerdo? O sea, la altura que es la probabilidad. La probabilidad del valor 0 es x. 1 es eh 0. 12 y así hasta que llegas al valor 51. en en QR de QN lo que haces es la probabilidad del cuantil cero, o sea, no, perdón, el cuantil cero, eh, que es uno de los valores eh del eh vamos a hacerlo de otra manera, con probabilidad cero. Digamos que tenemos un, vamos a dividir el espacio axis en 100, o sea, el espacio de retornos en 100 valores, ¿de acuerdo? De, o sea, nuestros eh nuestros nuestras recompensas tienen valores de 0 al 100. Entonces, con eh con una probabilidad, o sea, vamos a calcular 100 retornos, o sea, 100 alfileres, 100 posiciones en mi en mi axis X. Entonces, cada eh vamos a calcular 100 cuantiles en este en este problemas. Entonces, con probabilidad 1%, porque cada uno de estos alfileres va a tener una altura de un 1%, que es lo que calculamos en el C51, la altura aquí no, aquí ya la altura la tengo. Entonces, con probabilidad 1%, ¿qué valor obtengo? Pues puedes obtener un 1,5. Con probabilidad 2%, ¿qué valor tengo? un 5 comprabilidad 3%, 5,1 comprabilidad 4%, que tengo un valor eh eh, o sea, 5,1, pues 6,5. Y de lo que se trata en la red eh QRDQN es calcular eh los retornos siempre por encima del cuantil del 90%. ¿Qué es lo que estás haciendo ahí? Pues calcular siempre el valor, eh, intentar obtener el valor máximo o entrenar a la red neural para que te dé el valor máximo en esa acción. No sé si veis un poco la diferencia. En la C51 voy a calcular una distribución de probabilidades, pero lo que voy a calcular son las probabilidades de cada uno de los de las de los eh de los rangos que obtengo de, o sea, que los de los rangos que establezco de mi valor de recompensa. ¿De acuerdo? Y esto en el caso de la C51, pues divido el espacio, o sea, sí, el espacio de recompensas en 51 valores y eh y calculo qué probabilidad tiene cada uno de esos espacios de recompensa.

### Segment 9 (40:00 - 45:00) [40:00]

En la en las cuantiles lo hago al revés, fijo la altura de la probabilidad, o sea, siempre voy a tener una probabilidad, en este caso vamos a utilizar en las dos 51 bins. Entonces con probabilidad 151, 1 di 51, ¿cuál es el valor de retorno que me que me obtiene? No con probabilidad 2 di 51, ¿qué valor de retorno se obtiene? Lo dicho, al final obtienes dos eh distribuciones de probabilidad, pero una es con probabilidad fija y te devuelve un valor y la otra es con probabilidad variable y con valores fijos. El resultado, exactamente lo mismo. ¿Cómo calculamos el error? Es lo que cambia de una a otra. En la C51 vamos a tener que fijar el valor mínimo del retorno y el valor máximo. Y aquí te puedes equivocar, esta es una de las desventajas. Y en la QRDQN no tienes que hacer eso porque los calculas durante el entrenamiento, pero tiene la desventaja de que es un poco más lenta. Y luego, eh, pues venga, vamos a empezar con la C51. Y como he dicho que el la C51 fija las posiciones y aprende las alturas, es como un histograma con bordes de cubetas fijos, eh, un histograma y aquí pues como C51 es el nombre de los 51 de las 51 cubetas ovins que vamos a configurar. Dejarme un segundito. Vale. El entrenamiento ajusta qué tan alta es la barra para esa para ese para esa cubeta, para ese B. En DQN. Eh, como os decía, producíamos un número por acción, o sea, un valor por acción. Recordar eh la salida de nuestra red eh neuronal es un vector con un valor eh Q eh estado acción, o sea, un Q value. Eh, y el vector que nos da la red neuronar, pues si tienes cuatro acciones, pues tienes cuatro valores. Cada uno, cada uno corresponde a una de las acciones que tienes disponibles en ese estado y ese número es la recompensa esperada. En la C51 se produce una distribución de probabilidad completa sobre los las recompensas de cada acción disponible en ese estado. O sea, vas a vamos a calcular una distribución de si tienes cuatro acciones, probabilidad con 51 posiciones fijas por cada una de las acciones disponibles en ese estado. Si tienes cuatro, pues cuatro distribuciones de probabilidad con 51 posiciones, con 51 pins o cubetas o como los queramos llamar. Dice en los rangos van a estar entre la V min, que es el valor mínimo de tu retorno, y el valor máximo, y vas a tener 51 átomos o binespaciados, o sea, con la misma separación entre cada uno de ellos. En el problema que vamos a resolver, que es el del carpol, el valor mínimo es cer y el valor máximo es 500. Y los átomos están entre suelen ser 0 10 20 eh hasta el 500. La red, la red neuronal va a producir logits por cada acción y átomo, no probabilidades discretamentes. Y tras el paso de forward, que veremos luego en el código ahora en un momento, se va a calcular una softmat para obtener la probabilidad de que el retorno caiga en cada átomo. O sea, como veis aquí el donde la teníamos aquí exactamente en en la función que veremos luego, se va a aplicar una softmatch a los logits que hemos obtenido en el en el forward de nuestra propia red neuronal, que esto el propio output de la red neuronal va a en el for nos va a retornar los logic, no las probabilidades. Y luego de este softmat aplicaremos un arc eh una función de máximo y con eso vamos a obtener la misma el mismo valor que hemos obtenido con el eh con una DQN convencional.

### Segment 10 (45:00 - 50:00) [45:00]

convencional. Esper un segundo. Dice, "Para seleccionar la acción 51 se calcula el valor esperado de esta distribución. Exactamente lo que haría DQN eh una de QN. ¿Y cómo se hace? " Pues como veis aquí, el valor esperado eh va a ser la suma eh el sumatorio de las probabilidades por el valor obtenido. O sea, la probabilidad que es la altura. En este caso, por ejemplo, si la altura es un 0,01 de que sea -10, 0,015. Claro, el sumatorio de la multiplicación de la probabilidad por la eh que es la altura por el valor del de del cubario, que es el que está representado aquí en la en el axis x, ese sumatorio me devuelve el qvalue, que es lo que exactamente lo mismo que tú obtendrías con una DQN convencional. Y esto es como preguntar, ¿cuál sería mi puntuación? Por ejemplo, el ADQN te va a responder 285 y el C51 te responderá el 5% de oportunidad o de probabilidad de que sea 200, el 15% de que sea 300, el 30% de que sea 350 y un 10% de que sea 400. En ese estograma el valor esperado va a resultar que ser lo mismo, 285. ¿Por qué? Porque vamos a sumar una probabilidad 5% que es un 0,005 * 200 00 o sea 015 * 250 + 40 * 300 + 30 * 350 + 010 * 400. Al final el mismo valor. Y esto es cómo funciona una distribución. como eh la parte más compleja del propio del propio C51 como del el como del la cuantil regression, el quantil regression de QN es el cálculo eh del los y cómo se proyecta la eh cómo se hace una eh cómo se calcula la Belman Equation con un con una proyección categórica. es un poco más complejo que en el caso de la DQN normal, pero vais a ver que al final dice en el DQN el target Berman es un solo número, ¿no? Eh, ya lo sabéis, ¿no? el el en la el en el entrenamiento, como recordaréis, eh calculábamos el target, nuestra y para eh calcular el error, el la red online nos daba eh la predicción y el target eh o sea, y la y que es el la etiqueta, por decirlo de alguna manera, lo estábamos calculando con la red target. La red target nos calculaba en DQN el esta y nos las calculaba con un reguar más el Gazma, que es el valor de descuento y multiplicado por el máximo, o sea, el valor máximo de la los Qvaliues que habían que habíamos obtenidos en el output de la red neuronal, que era cada Q value de cada acción disponible en ese estado. O sea, de esas sosteníamos el valor máximo, lo multiplicábamos por el descuento y le sumábamos el reward. Y eso nos daba en la con la red target nuestro valor y en nuestro caso, ¿qué es lo que vamos a hacer? Pues en C51 necesitamos calcular una distribución target por cada átomo, o sea, por cada átomo Zi de la distribución target. Recordad que tenemos teta, eh, o sea, tenemos 51. Vamos a calcular lo mismo por cada eh por cada átomo vamos a calcular el reguar más el descuento por el Zi. Zi es el, o sea, vamos a eh lo que hacemos primero es eh calcular multiplicar el gasma por el por el valor Zi de Sevin y sumarle el reguar. Luego eh lo vamos a recortar el valor que hemos obtenido de hacer ese cálculo inicial, eh lo vamos a recortar entre qué, entre el valor mínimo y el valor máximo. ¿De acuerdo? ¿Por qué? Porque esto esta es una de las desventajas que tenemos en el C51. tienes que predefinir o tienes que saber entre qué valor mínimo, qué valor

### Segment 11 (50:00 - 55:00) [50:00]

máximo vas a tener. O sea, lo que vas a hacer es dices, tomas este valor de la x, dice, x lo multiplicas por el valor de descuento y le sumas el retorno para hacer el mismo cálculo que hemos hecho antes. Pero aquí, en vez de hacerlo por un único valor, como hacemos en decen, aquí lo tenemos que hacer por los 51 valores que tenemos en el C51. Luego la flipas clip entre el valor mínimo y el valor máximo. ¿Por qué? porque es el son los valores que tienes que predefinir en el estado. Dice, "Y luego si cada tz te cae entre una vez que has hecho ese cálculo te normalmente te cae entre dos átomos, ¿no? Entre en dos átomos son dos bins, ¿no? Pues lo que se hace es dividir esa masa de probabilidad entre los dos átomos vecinos, ¿no? para y esto se hace mediante una interpolación lineal. Entonces, esto se luego lo vemos en el código cómo se hace. Y esto al final lo que vamos a hacer es eh la red online nos va a calcular una distribución directamente, pero la red target vamos a tenerla que calcular con una función que digamos me eh me hace esta extrapolación porque esta red, como recordaréis, la red target está congelada y tienes todos y tienes los pesos de el episodio anterior. Entonces, para poder calcular el target de nuestro para nuestra función de los y poder obtener el mismo valor que estábamos obteniendo en una red no distribucional, pues tenemos que hacer este esta serie de pasos adicionales, ¿no? Y en el caso de una C51, lo que vamos a hacer es una cross entrop la pérdida es la entropía cruzada entre la distribución target proyectada y la distribución predicha para la acción elegida. O sea, como recordaréis en el cálculo de los en el en una DQN se hace la red online te calcula una un Q value por ese para esa acción en ese estado, o sea, que es el lo calculas con el valor máximo que te da las acciones disponibles en este en ese estado. En la Q, en la C51, vamos a calcular lo mismo. Vamos a calcular distribución de probabilidades con 51 átomos con la red online. Eso va a ser nuestra predicción y luego con la target, con la red que tienes congelada, que tiene los pesos del episodio anterior, pues ahí en la red de QN calculas con S calculas la Y, que es la digamos la etiqueta. Y en nuestro caso la vamos a eh la vamos a calcular eh en nuestro caso con la red target vamos a calcular lo mismo. Vamos a calcular una distribución pero utilizando los pesos del que tiene la red target y luego vamos a tener que hacer el clip. Vamos a calcular un Q value por cada uno de los 51. Eso haremos un de los 51 valores codins que tenemos la distribución. Tendremos que hacer un clip entre el valor mínimo y el máximo y luego una interpolación para volver a reposicionar los valores obtenidos en los 51 bits que tenemos. Entonces, el los vas a calcular por la sumatorio de el lo mismo como hacíamos en la esto sumatorio, es un cálculo de los de entre de cross entropic normal y corriente. Lo único que aquí en vez de solo hacer un cálculo vas a tener que hacer un sumatorio de los 51 cálculos individuales, que es lo que veremos ahora en e en el código. ¿De acuerdo? dice, "Esto es bastante más rico que calcular el MSE sobre un único escalar, ya que estamos igualando de una forma dos distribuciones, no solo minimizando la distancia entre dos números. Aquí esto es un poco como la divergencia KL, ¿no? El KL divergence, este que es estás aproximando dos distribuciones. El error que calculamos realmente es esto. Estamos aproximando dos distribuciones a hacerlas similares, ¿no? Una es la que tienes la distribución de ganancia en la target y otra es la que la otra distribución que has obtenido es la que te ha predicho la red que estás entrenando. Perdonar. Vámonos ahora al código y ahora aquí en el código vamos a ir a

### Segment 12 (55:00 - 60:00) [55:00]

la D51. Nos vamos al inicio y como veis aquí eh la red, la última capa, eh como veis aquí nos va a producir es la misma red neuronal que teníamos en una DQN. Vamos para que me creáis. Vamos a abrirla porque ya sé que muchos no me creéis. Vamos a eh open eh ¿cómo se dice esto? Open to the side. Como veis aquí la red neuronal, la salida tiene 128 acciones. Aquí, como vais a ver, vamos a producir eh una distribución, o sea, la misma número de eso, pero en vez de eh en vez de darte una un vector de cuatro, te va a dar un vector de 4 * 51, que son los átomos que tenemos. Y luego el la última capa, que es la que vemos aquí, produce número de acciones por 51, que en este caso son los valores en crudo, los logics. El view que hacemos aquí en el forward reorganiza, lo reorganiza en una distribución por acción. Perdona, aquí los logis se producen aquí. Una aclaración, los logics no son probabilidades. Eh, esto lo calcularemos luego con la SOMAX. ¿Cómo se obtiene de la de los valores al al Q value, al Q value final, no? Que es lo que nos interesa. Pues como veis, aquí tenemos esta otra función de soporte que se llama QU from Logic. Y aquí es donde estamos calculando el SOPM. Aquí es donde vamos a transformar los logics en probabilidades. Y luego, como veis, aquí estamos sumando las probabilidades por los soportes. Y esto es aquí es como es donde vamos a eh dice aquí en esta función, en este retorno es donde vamos a calcular el mismo Q value que estamos calculando en una de QN. O sea, la selección de eh en el este es el puente entre la salida distribu distribucional del C51 y la selección de acción. Es el vector de átomos fijos eh con 51 posiciones y el resultado es un de es un Q value por acción, exactamente igual lo que el R el R max necesita. Luego aquí teníamos el lo que es la proyección categórica. Dice, este es realmente el corazón de del C51 por cada átomo en la distribución target donde eh la de la se calcula dónde debería ir su masa de probabilidad después del desplazamiento de Belman. Recordar que cuando estamos eh en la eh calculando eh la Belman equation, vamos a calcular una mini Belman equation cada por cada uno de los 51 de los bines que tenemos. Entonces, ese nuevo cálculo me produce un nuevo valor y ese nuevo valor lo voy a tener que volver a resituar dentro de uno de los 51 pins. Como ese valor normalmente me va a caer dentro de otro entre dos bins, pues lo que se hace es se hace una interpolación y se asigna proporcionalmente un trocito de la masa de probabilidades a un bin y otro al consecutivo. Luego en el entrenam, y esto es lo que tenemos hecho en esta función de proyección de distribución. Luego tenemos aquí las las funciones de soporte. Estas son idénticas a las funciones de DQN, luego las podéis comprobar. Y luego aquí tenéis el la función de entrenamiento. Ahora veremos el los sieráis la función de entrenamiento, pues es exactamente igual a la que tenemos en DQN. Lo único que aquí en vez de utilizar una DQN, pues estamos utilizando las C51 Network, nuestra red con eh en la cabecera o en la cabeza con una que produce una distribución de probabilidades. Se copia eh el estado de la policy en la target, el optimizador, la memoria, exactamente lo mismo que hacemos aquí. Eh, lo aquí se definen los soportes, que son los eh donde van a estar eh fijados los 51 átomos de los 51 bins de nuestro de nuestra distribución. Como veis, le pasamos es un espacio lineal el

### Segment 13 (60:00 - 65:00) [1:00:00]

punto mínimo de retorno y el punto máximo de retorno. Elon Star para nuestro exploración Exilon Grady. Aquí exactamente lo mismo. Podéis observar derecha y izquierda como la eh como la la las redes se comportan de la misma manera. Fijaros aquí que en el Exilon Grady aquí por un lado, si estás haciendo exploración eh haces un tomas una muestra del espacio de acciones de la del entorno y aquí en vez de hacer eso, tomamos una acción. Aquí estamos explotando. Para explotar, pues lo que hacemos es eh primero con la red policy tomamos un estado, que es el estado que hemos eh tomado eh obtenido aquí y le pasamos a la acción Q values from logics. Aquí nos va a tener, o sea, la red policy nets nos va a generar los logits y luego con la acción Q valvues for logic que la hemos visto aquí arriba, recordar, eh, vamos a convertir los logics entre en Ques vía softmat con nuestra eh con el peso adecuado a cada uno de los átomos. y donde estábamos aquí. Y luego la acción, pues hacemos lo mismo. Eh, obtenemos el ARMAX de las eh aquí estamos dando los todos los valores, los cubalios de cada uno de los eh de las que hemos obtenido por cada una de las acciones disponibles en ese estado. Y aquí obtenemos la acción en concreto. Veis que al final está haciendo exactamente lo mismo, pero ahora aquí lo único que estamos haciendo es utilizar una distribución que es más rica, pero los pasos exactamente son los mismos. Pasamos al estado, o sea, implementamos, o sea, ejecutamos la acción en el entorno, obtenimos el siguiente estado, la recompensa, los eh las señales determinado truncado, exactamente igual que en DQN. Esto es igual, todo igual. Aquí estamos trabajando con la memoria y aquí hacemos el cálculo del no. Aquí, como veis, vamos a eh esta es estamos utilizando la policinet. Vamos a calcular los logics. Aquí calculamos las probabilidades. Aquí con eh aquí con la target hacemos lo mismo. Aquí le pasamos el softmax y aquí estamos haciendo, ojo, dos cosas. Aquí lo que estamos haciendo es recordar que en el vídeo anterior veíamos eh la DQN separaba lo que era la selección de la acción de la evaluación de la acción para evitar que la misma red tomara decidiera eh, o sea, evaluara la acción tomada, ¿no? Para separar la toma de decisión de la evaluación de la misma, ¿no? Entonces aquí estamos utilizando una un estilo doble DQN para el eh la eh digamos para seleccionar la acción utilizamos la target y para evaluarla la policy que es la online, pero al final lo mismo, obtenemos una distribución de probabilidades de eh utilizando Por un lado, eh estamos, recordad que estamos utilizando para obtener eh la acción los pesos de la target network. Y aquí vamos a utilizar al final eh vamos a obtener otros 51 eh pins, que son las Net probabilities y con la project distribution vamos a reubicarlos, como hemos dicho, en los 51 bins, que es lo que tenemos aquí, los prons. Y el los se va a calcular pues como os decía antes, por un lado tienes las choos probability, que son las que has calculado con la policy net que es la que estás entrenando, y proch que son la probabilidad que obtienes de tu target network, de la red que tienes congelada. Y como sabéis, cada una de estas dos tiene 51 eh 51 bins. 51. Y lo

### Segment 14 (65:00 - 70:00) [1:05:00]

que vamos a hacer aquí, nos aquí nos ha ya nos ha dado ya 51 valores y lo que vamos a hacer aquí es hacer un cálculo de los mismos y tomar la media. Al final, lo dicho, obtenemos el mismo valor que obtenemos en la DQN y lo vamos a lo único que aquí en vez de estar utilizando medias estamos utilizando distribuciones de probabilidades. ¿De acuerdo? Y como veis, una vez que has obtenido el dos el error, pues eh haces la B propagation para actualizar los eh gradientes en tu red neuronal, el exilongred y todo esto funciona exactamente lo mismo. Luego al final veremos cómo funciona bien, cómo funciona, cómo han funcionado estos estos valores. Vamos a pasar ahora a la QRDQN. En la QRDQN se fijan las alturas, que es lo que os decía antes. Aquí fijas la altura, la altura va a ser 1 dividido, o sea, fijas la probabilidad es 1 dividido del número de bins que vas a utilizar. En este caso vamos a utilizar 51 también. O sea, que la cada una de estas probabilidades tiene 1/ 51. Y aquí lo que vas a producir son el valor del eh retorno, o sea, el valor en el axis X. Aquí X lo teníamos fijo y calculabas la altura. Aquí fijas la altura y calculas el valor x. Dice, "Y esto es como tener 51 alfileres en del mismo peso, o sea, de la misma altura, pero que se deslizan por una regla que es nuestro axis X. " En C51 preguntas qué probabilidad debería tener cada átomo fijo. En QR de QN preguntas dónde debería estar cada punto cuantílico de igual probabilidad en el eje de valores X. La red predice n valores cuantílicos por acción. O sea, aquí lo que vamos a predecir es estos valores, no las probabilidades. Y fijaros este en este caso, porque recordar en el C51 teníamos que calcular eh vía softmatch eh las probabilidades y luego multiplicar probabilidad por valor para obtener el cubalio. Aquí directamente obtenemos los valores. Simplemente luego al final vamos a tener ya no tenemos que calcular una multiplicación de la probabilidad por el valor, sino que simplemente sumamos los valores. ¿De acuerdo? Dice, entonces, la red, en vez de predecirnos las probabilidades, predice los valores. Y vamos a producir, en este caso n valores. Como vamos a hacer una equiparación a la C51, vamos a producir aquí 51 cuantiles también. Entonces, cada cuantil carga más masa de probabilidad igual a un eh cada cuantil carga masa probabilidad igual a 1 a un, o sea, eh calcular probabilidades 1 + n, o sea, en el primer cuantil tenemos 1 + n, en el segundo cuantil 2 di n, perdón, en el tercer cuartil 3 di n y así hasta que llegues al final de tu n. Las fracciones cuantíricas se fijan en puntos medios, que es lo que llamamos tau. Tau, eh, que es eh cada Ih, ese i en el caso del eh del cer. 5 dividido de el número de cuantiles que vamos a probar. En este caso 51. En todo en caso el la posición 0 es 0,5/ 51 que es 0,01 representa el perceptil 1. Si no hacemos ese mismo cálculo para el t número 25, pues es 25,5, que es 25, o sea, la posición 25 + 0,5 dividido de de 51. Esto significa 0,5 ese punto en este caso es la mediana. y con eh TAU 50, que es 50,5/ 51 que es 0,50 0,99 es el percentil 99 de nuestra distribución. Aquí ya no se necesita VM ni VMAT porque, o sea, ni cuál es en qué entre qué punto se distribuye tu ganancia. ¿Por qué? porque

### Segment 15 (70:00 - 75:00) [1:10:00]

los va a calcular el propio entrenamiento. Como los valores cuantílicos son simplemente las salidas de la red, esto pueden caer en cualquier punto de la de la recta, o sea, pueden caer en cualquiera si los retornos reales van de 0 a 500, la red va a prender valores eh teta en ese rasgo automáticamente. Y elor valor esperado por la acción va a ser este 1/ n por la suma de cada uno del teta que va aprendiendo aquí. O sea, vamos aprendiendo dónde situamos cada uno de estos alfileres y la suma de ese valor final va a ser de ese qali para esa acción. Aquí vamos a calcular también cuatro cuatro, o sea, si tenés cuatro acciones, vas a calcular también cuatro distribuciones de este tipo. O sea, y el valor Q final va a ser la suma de todos estos tetas, o sea, de todas estas posiciones. 1 eh 2, o sea, perdón, 1,1 1,5 eh o 3 4,1 5,3, etcétera, etcétera. Los sumas todos y los divides eh por eh el número de eh posiciones que has calculado, en este caso 51. En este caso vamos a utilizar otro tipo de error que se llama eh o hooberlos que es un poco más eh complejo porque hace penalizaciones asimétricas. Esto es un poco luego en el código lo vemos también. Aquí dice, "Se obtienen los cuantiles el eh aquí es donde QRDQN se pone un poco ingenioso. " dice, "Para cada transacción donde haces un una eh pasas de un estado, tomas una acción y te da una recompensa y pasas a un estado prima, se obtienen los cuantieles predichos eh teta i eh todos estos de aquí por cada de la policy network, o sea, de la que estás entrenando para la acción a sostiene los cuantiles target de la target network. Eh, para la mejoración siguiente al estilo de la doble DQN, lo mismo que hemos hecho anterior, lo se calculan los errores, el T de error pareados, o sea, se calcula, a ver si eh perdonar, aquí se calcula una delta y J entre que es el target eh el target error menos el predicho por cada cuartil predicho. O sea, vamos a hacer lo mismo. Vamos a calcular 51 deltas para cada para cada, o sea, vas a calcular el delta va a ser el target menos la predicción para cada uno de esos 50 valores que has obtenido. Unos los obtienes con la red online y otros target, pero al estilo de QN, acuérdate, eh, la acción la decides con la red target y la y el valor los tienes con la red online. Esto es una herencia de para no para no eh tomar la acción y evaluarlo con la misma regla. Entonces, esos 51 deltas que calculas, luego la aplicas la pérdida cuantílica, que es el tienes lo que llaman un fitau, un delta. ese eh a ver si tengo exactamente aquí tienes el fit. Vas a calcular primero calcula los 51 valores y luego vas a calcular utilizando el el A ver si un darme un segundito. Me tienen unos ataques de estos totalmente eh, ¿cómo se dice? Bueno, utilizamos la fórmula para calcular eh la pérdida Hoover y esta pérdida Huber tiene una interpretación que va que es digamos asimétrica. Cuanto eh cuando estamos calculando la pérdida para el cuantil eh TAU eh igual a 0,9 que es el percept. Si la predicción que está por debajo del eh del target, esto significa que el delta es el delta este que tenemos eh que hemos calculado aquí está es mayor que cer. El peso de penalización es alto. Pero si la predicción está por encima del target, o sea, que el delta es menor que cero, la el peso es débil. Esto, ¿por qué se hace? Porque es esto

### Segment 16 (75:00 - 80:00) [1:15:00]

es como funciona. si es como funciona el el, o sea, en estos cálculos del delta, eh, si el delta eh que estamos calculando eh entre el target y la predicción está por encima de cero, es como os digo, ese el peso como lo que queremos calcular es eh en la quantil regression es el percertiril del 90% por si tu delta lo que eh o sea, si la predicción está por debajo del target, esto significa que en el cálculo este que estás haciendo aquí te va a dar un delta por encima del cero. Esto significa que vas a esto lo que hace el error Hoover es calcular un peso de penalización, o sea, le da un peso de penalización fuerte, que tiene sentido porque estás la eh, ¿cómo se dice? el la predicción está por encima de del target que se va a producir un error grande, entonces aquí la vas a paralizar más, ¿no? Si el delta que estás calculando está por encima del target, esto sería que te va que tu predicción está por encima de el target eh del target que has sostenido de la red congelada. Este significa que el que le que lo que has obtenido de la predicción su peso es muy débil, o sea, que la información que te va a dar es muy pequeña para poder eh meter todo, digamos, dentro del cuantil del 90%. Esta esto, bueno, esto es así como funciona este error que es muy este esta función de error que es bastante particular porque es aquí estamos haciendo como os digo, estamos aplicando cuantil regresión, no estamos aplicando el error convencional que es la el MSE, ¿no? Esta simetría que de aplicar cuando hay un delta por encima de cero o por debajo de cero empuja que el percil empuja el percentir del 90 por encima estar por encima del 90% de los valores target que es exactamente lo que un cuantil tiene que hacer. ¿De acuerdo? Entonces, bueno, lo que me quiero los detalles del cuantil luego en el código y si tenéis un poco de tiempo en los links que os pasaré también en la documentación del vídeo, pues podéis echarle un vistazo porque ya s un tema un poco complejo de cómo se hace la cuantil regresión, pero al final lo que tiene eh al final el objetivo es el mismo, ¿no? Queremos calcular eh el error para empujar el que el percentil del 90% de los valores que de que se han calculado con la predicción estén por encima de los del 90% o del cuantil 90% de la de los valores que tenemos almacenados en el target. ¿Para qué? para producir un error y que ese valor de ese error pueda aprender la red y pueda hacer una B propagation o una propagación de los gradientes de forma positiva. Otra cosa que quiero que os quede clara es lo mismo. Aquí ya no calculamos probabilidades porque las probabilidades las estamos fijando y el lo que vamos a calcular es el valor de cada una de esas 51 de esas 51as posiciones que tenemos fijas en nuestro eh en nuestra distribución de probabilidades. En este caso, lo dicho, 51 posiciones fijas para hacerlas iguales al C51. Disculpar con la tos porque vaya me tiene perdido. Bueno, vamos a ir al DQR QRN. Vámonos a ir primero a la red. Como veis aquí igualmente como vamos a utilizar 51, la salida es exactamente igual que la C51, pero el forward. Vamos a poner aquí la C51 ahora para que la observemos. El forward, el forward hace lo mismo. Lo que ya no aplicamos porque aquí ya no hay probabilidades, lo que las probabilidades son fijas, lo único que hacemos es el sumatorio. ¿De acuerdo? En este caso, en el caso de la C51, multiplicábamos las probabilidades por los soportes, que son las X, y aquí

### Segment 17 (80:00 - 85:00) [1:20:00]

simplemente sumamos las X. Esta es una pequeña diferencia, pero bueno, en principio eh que para que os quede claro cuál es el la gran diferencia o la diferencia que hay entre una aproximación y la otra. ¿Cuál es mejor? ¿Cuál es peor? Bueno, lo dicho, en cualquiera de las dos da un resultado más rico que un único escalar calculado por media. Lo único que es el una tiene una desventaja y la otra tiene otra desventaja. Las dos tienen la misma ventaja. La desventaja de la C51, como os decía, es que tienes que conocer el valor mínimo y el máximo de la del reguar. Esto en algunos entornos es muy complejo. El la en la quantil regression de QN el problema es que es bastante más lenta que la C51. Pero bueno, eh cada uno tiene sus eh cómo se dice, sus precursores o la gente tiene sus predicciones la una sola otra. el error cuantil que se calcula eh los eh, ¿cómo se dice? Se calcula con los deltas, los lo que llaman aquí el perse de el delta de cada uno de estos. Recordar, dice, aquí vas a calcular 55 valores eh de cada de del valor del Q value de Q value de esos 51 posiciones, porque estamos utilizando 51 bins. Aquí también vas a calcular 51 valores con la red online y otros eh target. estos 51 valores de cada uno de estos 51 valores vas a obtener un delta positivo o negativo, que es lo que va a hacer calcular aquí. Y como veis dice las este esta sentencia de aquí nos va a crear una matriz pareada con los deltas que hay de cada uno de los percentiles calculados. Entonces, el percertil er 0 o el perceptil 1, perdonar, eh va a tener un valor proveniente de la red target y eh online, de la red que estás entrenando. Y veis que se toma el target eh el target menos el predicho para que te dé un valor positivo o negativo con respecto al target. dice, eh, en un valor, por ejemplo, con un batch de 8, pues vas a obtener una un una matriz de 8 por 51 posiciones por cada una de eh de las acciones, o sea, perdón, si vas a tener por cada una de las acciones vas a obtener un tensor de número eh de muestras por 51 posiciones del de tu target con otras 51 posiciones del eh del esto. Esto te da un total de, si tienes ocho muestras de 2601 pares de error por muestra, con lo cual todos los cálculos se multiplican bastante. O sea, en este caso la proyección de distribución era bastante más simple de calcular que el error, por esto os decía que es bastante más lento. dice, "Esto es para cada para un bas de ocho posiciones con muestras con N51 cuantiles cada una, el tensor TD es de 2601 pares. Pares de error por muestra. Es muchísimo más costoso calcular costoso que la entropía de C51, pero da una pérdida pero da la pérdida una imagen completa de cómo cada cual predicho se relaciona con la distribución. Entonces, lo dicho, aquí simplemente vamos a aplicar la función que hemos visto ahí. Eh, entonces aquí como donde estamos aturando el error huber y aquí estamos simplemente calculando el

### Segment 18 (85:00 - 90:00) [1:25:00]

eh el error huber, que como veis aquí estamos utilizando weare. ¿Para qué? para que donde el la posición absoluta sea menor que el la a ver si os lo digo, que la constante capa multiplicada, bueno, aquí se hacen los cálculos, ¿no? con el wer es si mi delta es positivo, negativo para aproximar la eh la predicción para que esté por encima del 90% del del valor que está en el cuantil 90 de la ah de la eh red target, ¿no? Y luego pues esos cálculos, esos cálculos que se han esos pesos que se han calculado con estas dos sentencias se le hace una media multiplicando por esta otra eh, o sea, los pesos por el por el por los eh ah por el vector que hemos calculado por el vector de los pesos y de cada uno de esas 51 posiciones en nuestro casos calculamos la media y esto es lo que retornamos como qvalue para el error. Bien, eh vamos a hacer un resumen del ah, vámonos a ir aquí a la QDRQN, que al final, como veréis, es exactamente lo mismo. Hacemos los mismos pasos y lo mismo que hacíamos aquí en el en la con la policía que hacíamos la predicción con la con la target, eh, o sea, con la doble de, o sea, con el con la target y la kunet sacábamos la acción y luego eh con la online calculábamos el Q value. Y aquí, como veis, las diferencias, en vez de calcular el los cono sumas, pues aquí con la project distribution calculábamos el valor Q de cada una de las acciones y aquí estamos calculando el los directamente con la función del quantilos. Pero al final, si os fijáis, le estamos pasando los cuantiles predichos de la nuestra predicción con los cuantiles de nuestra target. Y en este caso le pasamos el Tur y la capa, que es la las dos constantes a aplicar dentro de nuestra de para el cálculo de perdonar, me estoy se me va a veces la pero bueno, calculamos el los en este caso con cuber los y en este caso el en los convencional, lo único que estamos haciendo es eh calcularlo en base a proyecciones, en este caso con 51 bins. Y en este caso utilizamos 51 posiciones individuales de nuestro Qvue y mediante el cálculo de Huberloss para aproximar la predicción al a que sea superior al cuantil 90% de lo que tenemos eh del cuantil que tenemos almacenado en la red target, se calcularlos y luego finalmente pues en las dos se hace un una backw propagation. de del de los obtenidos en la red que tenemos el optimizador que es en la red online. El exilon para hacer la exploración explotación funciona lo mismo. Eh, la actualización de la pol de la target network se hace cada episodio. Esto no cambia en ninguna de las dos. En resumen, eh, entre C1 y QRDQN, ambas son eh reinforcement learning distribucional. En vez de aprender un solo número QSA, que una un solo valor para esa acción en ese estado, un solo valor eh Qvue, aprende la forma completa de la distribución de retorno. Pero la C51 y la QRDQN lo hacen de formas diferentes. La C51 fija las posiciones y aprende las alturas. T imagínate un histograma con 51 barras colocadas a

### Segment 19 (90:00 - 95:00) [1:30:00]

distancias iguales entre V, v mínimo y V máximo y las barras no se mueven. Lo que hace el entrenamiento es ajusta qué tan alta es cada barra. La probabilidad es como tener 51 cubetas fijas y aprender cuánta arena pones en cada una de ellas. y en QR de QN fijas las alturas y aprendes las posiciones. Ahora, las barras tienen todas la misma altura, 1 dividido de n cada una, pero pueden deslizarse libremente por el eje de valores, ¿no? valores donde representas eh los retornos. El entrenamiento mueve cada barra hacia la posición correcta. Es como tener 51 alfileres del mismo peso que se deslizan por la regla para encontrar dónde deben de estar. Eh, o sea, se van desplazando estos alfileres por esta. La consecuencia práctica más importante es que 51 C51 necesitas elegir entre V min y V max y antes de entrenar y si eh los entornos eh si los y si los retornos reales caen fuera de ese rango, la masa de probabilidad se acumula en los bordes y por eso hay que hacer un clipping y el aprendizaje sufre. Esta es una de las desventajas de, o sea, que tienes un problema con el aprendizaje, ya que el clipping va a hacer que no captures todo el la recompensa que se ha hecho en ese en este Por eso os digo, eh uno de los puntos críticos de la C51 es entender entre qué valores se mueve el retorno, ¿no? El QR de QN no tiene ese problema porque los puntos de soporte se mueven solos a donde necesitan esta. El los es también distinto. Eh, C51 usa entropía cross entropia entre la distribución proyectada del target y la predicción. Y es como comparar dos entropías, dos histogramas. Y el QRDQN usa los Huber eh cuantílico, el quanta eh huber loss, ¿no?, que llaman, que penaliza simétricamente. Y el cuantir TAU, que en este caso lo estimamos al 0,9, se subestima esto que es el delta que obtienes de restar el valor que has sostenido con la Q target menos el valor que has obtenido con la red online, la penalización es mayor que si sobreestima, porque se supone que el 90% de la masa debería estar por debajo de ese punto. O sea, la forma de calcular los es diferente y ya está. ¿Cuál es mejor uno que el otro? Lo dicho, el C51 tiene el problema de la estimación del V de donde se mueve tu retorno. La QRDQN no tiene el problema, pero es bastante más lenta de entrenar. Y luego una pregunta que siempre me hacen, ¿no? Dice, ¿qué es lo que se produce? Eh, ¿cuál es qué es lo que produce una red distribucionar? Dice, si tengo cuatro acciones en un estado, ¿qué sale de la red? De la red neuronal, ¿no? Que es lo que os decía antes, ¿qué es lo que produce mi red neuronal en el esto, en la red de QN? Como os decía antes, está muy claro. En una red de QN, yo tengo de mi salida es un vector que va a tener cuatro valores. Si tienes cuatro acciones, Cada valor es ex cvalido por cada una de las acciones. Pero, ¿qué obtengo dentro de una red distribuida? pues obtienes una distribución con un número de hm, o sea, es obtienes cuatro vectores. En este caso son eh la salida en vez de ser un vector de una única dimensión con cuatro bares, es un vector con dos dimensiones, que es una es el número de acciones y el otro bins. Por cada acción te va a dar número de bins, en este caso C51, o en el caso de una DR DQN el número de cuantiles que quieres usar para la para el entrenamiento. Y la segunda dimensión va a ser eso. En el caso C51, 51 valores que son el número de, o sea, la probabilidad de cada uno de esos cuantiles en el en la DRDQN el valor del pecentil X, o sea, 1 diido para n por ya 1 dividido para n de

### Segment 20 (95:00 - 100:00) [1:35:00]

eh de qn, ¿no? O sea, obtienes eh eh en una C51 vas a producir 204 valores, por ejemplo, porque tienes si tienes cuatro en una DQN con cuatro acciones obtienes cuatro valores escalares. En la C51 tienes una capa que produce 4 por 51, o sea, 204 valores. Y eh cómo obtienes el valor eh Qmax, ¿no? pues utilices una, por ejemplo, la C51, vas a obtener esto, ¿no? Vas a obtener para la acción eh cero tienes eso, tienes una suma de probabilidades para PI, eh, o sea, una distribución de probabilidades, recordar las alturas por cada uno de los valores fijos, el soporte que tienes en la red X. haces la suma probabilidad por punto de soporte por cada una de las acciones y luego con el R max con el máximo tomas la acción que te da la mayor de las sumas exactamente igual que haces en DQN. Y esto mismo haces con el con la QR de QN. La selección de acción no cambia, se sigue tomando siempre ARMAX. utilices DQN convencional eh, Quantil o C51, lo que cambia eh, o sea, se sigue tomando armas sobre los valores esperados, eh, exactamente igual que DQN, lo que cambia es el entrenamiento. En vez de un target escalar, cada actualización se usa una target distribucional completa de 51 valores o en DRDQN, dependiendo del número de cuantiles que eh que utilices. Esto le da a la red una seña de supervisión muchísimo más rica y esto es como de decirle a cualquiera. dice, "La respuesta es 258 o 285. Sin más, oye, la respuesta eh a tu pregunta son 285. En el otro caso le muestras una distribución de probabilidades. Sí, mira, la respuesta es 285 en este caso por la distribución de probabilidades que le has enseñado. ¿Vale? Bueno, espero que haya quedado claro. Vamos a pasar a Rainbow. Rainbow de Qene, eh, que es la red estrella o la el algoritmo estrella de Coolern. El rainbow de QN nos combina las eh seis eh mejoras que se han eh establecido para eh como debilidades del algoritmo de eh de disco Learning o de la Disco Network, que era eh por un lado la sobreestimación de del Vallas. Entonces implementábamos el doble DQN. Recordar esto era que tomabas la acción con la target y la eh estimabas con el con la policy online, ¿no? Para descomponer, para evitar que la misma red eh tomara la acción y la estimara y la evaluará al mismo tiempo. Luego utilizábamos la duelin arquitectura eh para obtener una estimación, no solo un cubalio estimado, sino ese cubalio saber o tener la información de que qué bueno era el estado y qué buena era tomar esa acción en ese estado. ¿Por qué? Pues porque no era lo mismo el tomar la acción, eh, por ejemplo, torcer a la derecha en el estado un que en el estado 51. Eh, de esa forma sabes qué bueno es estar en ese estado y qué bueno es tomar esa acción en ese estado. Para eso utilizábamos el duelin eh arquitecturábamos lasy layers para aprender cuándo explorar o explotar. Utilizábamos el prioriz, el per utilizar las transacciones con eh que tenemos en el buofer, en el buffer, las que hemos ido explorando anteriormente, y darle más prioridad a aquellas que nos

### Segment 21 (100:00 - 105:00) [1:40:00]

da eh facilitaban el aprendizaje, o sea, eh transacciones que producen más error se les da mayor prioridad que transacciones que tienen que producen menos error. Luego utilizábamos el N step retons, eh, ya que eh esto hacía que la el la propagación de los retornos fuera muchísimo más rápida. Esto era como ponerle unas gafas de para ver de lejos a la propia red neuronal. Y luego teníamos la introducción de la red distribucional. Esto aquí vamos a utilizar una C51, pero podrías utilizar también una cuantil. Esto es a tu gusto. Lo único que es eh para qué, para utilizar una distribución que si utilizas una quant regression tendrías que adaptar los el cálculo del en vez de utilizar la proyección de la distribución, tendrías que utilizar el OKL divergence, que es lo que está utilizando la C51, tendrías que utilizar el Haverlos, ¿no? Vámonos al código directamente porque esto todos estos conceptos ya los hemos ido viendo. En la implementación vamos a este algoritmo es cierto que es el que mejor rendimiento da, el que mejor aprende, pero también es hiperlento. Entonces, hay una serie, como esto está utilizando Python por abajo para acelerar el aprendizaje, pues en el ejemplo que os voy a pasar, vamos a introducir el uso también de GPUs. Ya sabéis, estamos utilizando Python en el en las explicaciones. Pues aquí veremos el el a ver si os lo digo que me trabo a veces. Bueno, eh una el poder utilizar GPU si lo tienes eh si quieres, ¿no? Si tienes configurado el entorno para que el entrenamiento sea más rápido. Bueno, la eh la introducción de las clases de las capas eh lineales con ruido. Recordar las capas lineales con ruido. Estamos aprendiendo cuándo explorar o explorar. Y esto lo estábamos haciendo vía parámetros, introduciendo una serie de parámetros aprendidos en las eh en una red lineal. Y esto eh estas redes lineales es la que eh es las que estamos eh digamos utilizando para eh nuestros pesos. Esto evitaba que utilizáramos el exilon grady lineal eh eurístico que estábamos utilizando en la DQN vanila. Entonces, eh en este caso, perdonar, eh estamos aprendiendo eh un sigma eh tanto para el para el peso como para el vías. Esto se hace durante el entrenamiento y de esta manera eh de esta manera aprendemos a que a cuándo explorar o de esta manera la propia red aprende a cuándo utilizar el conocimiento que tiene que ha aprendido o cuando utilizar el eh eh o cuándo explorar o cuándo explotar, cuándo utilizar el conocimiento. aprendido cuando hacer algo novedoso, ¿no? Cuando explorar algo que no había hecho hasta ahora. Note que como se hace en el grady que esto viene prefijado, ¿no? Con respecto conforme va eh descendiendo o decreciendo el épsilon, se explota más que se explora. Y esto es una eh es como el rate, ¿no? Al final del entrenamiento eh se aprende menos que al inicio del entrenamiento con las consecuencias que eso tiene, ¿no? Luego aquí tenemos nuestra red de QN, que como veréis vamos a aplicar tanto la parte de delleling como la parte distribucional como la parte de ruido en una sola red. Como veis, aquí vamos a poner eh nuestras eh las en la dueling, recordar que tenía dos salidas, la eh la función de ventaja y la función de valor. La función de valor nos dice qué bueno es el estado. La función de ventaja nos

### Segment 22 (105:00 - 110:00) [1:45:00]

decía que bueno era eh tomar esa acción en ese estado. Las entradas quedaban como siempre. Tenemos una única entrada, pero tenemos dos salidas. las salidas. En vez de utilizar redes eh o sea, eh capas lineales convencionales, utilizamos capas lineales con ruido. Y el forward, en vez de utilizar eh una única salida, que sería número de acciones, eh utilizamos número de acciones por números de átomos, que son eh los bins que tenemos en nuestra distribución. Y como hacíamos en la redelling, la salida era una eh la el valor, o sea, el la parte el componente de valor de nuestro Q value más la diferencia entre el min de eh e o sea de a ver si lo digo la mayor ventaja la ventaja de esa acción, lo que sea la recompensa de esa acción con respecto a la media de todas las acciones que se pueden tomar en ese estado. O sea, recordar la acción, eh la el cvalue se descomponía en lo que era la función valor, que es el valor del estado en sí, o el la ventaja que se obtiene de tomar la acción A con respecto a la al a la recompensa que obtenemos por todas las acciones posibles en ese actador. Tienes una media, una acción te puede dar cuatro, otra te puede dar -1, ocho y otra te puede dar dos. la media e es lo que le restas a la ventaja que obtienes de esa acción en concreto. La opción, como estamos aquí utilizando la C51, vamos a tener que tomar, estamos calculando probabilidades para cada uno de los 51 valores, pues tenemos que utilizar soft match para eh para pasar de los logics, que es lo que estamos obteniendo en el forward, a probabilidades y con los soportes calcular el los diferentes eh qvalios de cada una de las acción de cada uno de las acciones. Aquí ocurre, como os digo, en este en esta propia clase estamos definiendo la duelling más la las redes ruidosas más la distribución, el el buffer con prioridades, el per eh e reutilizar las eh transacciones con más eh probabilidad, las transacciones que aprendemos más o que producen más error con más prioridad que las que producen menos error. Nuestra función para proyectar las distribuciones. Esto no cambia. Bueno, cambian que ahora eh vamos a tenerlo que hacer por n pasos. Eh esto es una de las cosas eh aquí se complica un poquito más adicionalmente que la que el cálculo de la diferencia de las dos distribuciones eh con 51 átomos, porque aquí lo vas a tener que hacer por cada uno de los pasos que vamos a mirar, porque también se introduce el número de eh de pasos eh en steps eh como eh que es una de las ventajas que se introducen en la Rebo. Recordar, aquí ya no calculas la un único KL divergence o una única diferencia entre dos probabilidades. Aquí vas a tener que calcular n cálculos, eh, o sea, n proyecciones. Vas a tener que ejecutar n proyecciones y luego calcular n diferencias, ¿no? Y aquí tenemos nuestro, bueno, esto es lo mismo para evaluación, para esto no ha cambiado nada porque al final eh como eh esto es exactamente estos procedimientos se están utilizando en todas las en todos los algoritmos y aquí es donde todo se conecta. Eh, en vez aquí, como veis eh en el enlace, pues utilizamos nuestras rainbow de QN. Recordar que ya tenemos aquí, aquí lo vamos a pasar al dispositivo. Esta es una de las ventajas. Si tenéis acceso a una GPU, es recomendable aterizarla en la GPU. Aquí cargamos el estado de la policy en la target, el optimizador, el plor

### Segment 23 (110:00 - 115:00) [1:50:00]

buffer y aquí es donde empieza el a ser un poco más diferente que en el Aquí estamos calculando los soportes para el cálculo de del de la distribución para luego poder realinear dónde cae cada una de las probabilidades, o sea, de las masas de probabilidad. Tomamos la acción. El beta, esto era para el para las probabilidades de nuestro PER. Aquí el estábamos eh como sabéis en el en la duelling no utilizábamos ya el Exilon Grady, sino que directamente como la red estaba aprendiendo cuándo explorar explotar, pues directamente eh obtenemos la acción utilizando la policyet, ¿no? Aquí ya no hay eh exploration grady como tenemos aquí. Esta parte de aquí eh en la rainbow se elimina por eh porque eh estamos utilizando las redes ruidosas. Esta parte no cambia, que es la el implementar la acción en el en el entorno y obtener los valores de estado, el próximo estado, la recompensa si está terminado, truncado. Y aquí el empieza un poco la magia. Aquí el esta es la parte, como os digo, de se selecciona de selección de acción. Eh, aquí es gredy, eh, siempre, ya que es una red ruidiosa. Aquí en esta parte vamos a eh acumular las tasas, las N steps. El buoofer acumula n steps eh transacciones e porque estamos utilizando eh N steps en la rainbow. Y aquí estamos el Exactamente aquí estamos construyendo el reguar de esos eh n steps. Aquí reseteamos el ruido y aquí empezamos a entrenar la red. Aquí estamos eh haciendo un sampling del de nuestro buffer priorizado. recordar que le pasábamos la beta para eh y esto nos va el buffer priorizado nos va a retornar eh los índices y los pesos porque estos se utilizan eh se van a a eh recordar que el buffer priorizado le va a dar prioridad a aquellas transacciones que tienen más eh probabilidad porque producen un error más grande y eso hace que la red aprenda más. Y el beta hacía que eh es un factor de corrección que hacía que las eh que primero no se pudieran ir utilizando todas las transacciones al menos una vez y que ninguna de las transacciones acabara con una probabilidad cero. O sea, si bien estamos ajustando las prioridades durante el entrenamiento para que una se repita más que otro, no queremos que no se vean a eh que no sea posible el poder obtener alguna de las traxaciones del esto. Y luego durante el entrenamiento en el una vez que se calcula el error, pues vamos a actualizar los pesos y vamos a volver a mandar ese nuevo cálculo en los índices que hemos utilizado. Estos índices vienen del buffer, son los índices de las transacciones que vamos a utilizar en este batch, eh, y esos índices luego se les va a actualizar la probabilidad con respecto a la eh a los que produzcan en este cambio.

### Segment 24 (115:00 - 120:00) [1:55:00]

Bueno, ahora en este caso el aquí vamos a utilizar aquí DQN para doble DQN. Recordar que en la propia Rainbow incorpora la Delling, que era el cálculo del valor y de la ventaja. Y aquí utilizábamos el doble DQN para que el que selecciona la acción no calcule el valor. ¿De acuerdo? Aquí hacemos la proyección de las distribuciones eh con de nuestra red target. Por un lado, con la policy calculamos las eh probabilidades con la target eh o eh con la target calculamos eh las probabilidades, la segunda eh distribución de probabilidad que está eh que es la digamos el target de la ecuación Berman, o sea, o el target también, perdón, el target de nuestra eh de nuestra para nuestra función de los aquí estamos calculando el la predicción. Aquí estamos. Nuestra distribución de probabilidades eh predecida, la que la predicción que hemos tomado aquí, la que obtenemos con la eh red congelada, pero utilizando doble DQN. Con la proyección de distribución vamos a calcular eh las probabilidades y aquí el en este caso, un segundito, como siempre en medio del vídeo llaman por teléfono y aquí como estamos Utilizando Nstope, una entropía mixta, ya que tenemos que calcular no solo el la diferencia entre las probabilidades de un paso, sino que tenemos que calcular la diferencia esa esas diferencias por nepas, o sea, que estamos utilizando n steps. Recordar cuando hemos hecho el cálculo de los en con la C51, pues solo calculábamos el eh una unica diferencia entre eh las 51 posiciones que tenía el la C51 en la predicción y las 51 posiciones que habíamos obtenido de la Target. En este caso, como tenemos n pasos, tienes que calcular esos mismos con eh esa es cálculo lo tienes que hacer por los n pasos que has definido para la eh nste o en este caso para la rinfor. En definitiva, una vez que has hecho todos esos pasos, ya tienes el error y una vez que tienes el error, pues lo eh lo haces una propagación de los gradientes. Y en este caso, otra de las ventajas que vamos a introducir es una un clipping del gradiente con una normalización para que sea más estable. Esto es otro de las mejoras que se han ido introduciendo también dentro de este algoritmo, porque se producían también con este con todo este tipo de ventajes se producían gradientes muy altos y para poder estabilizar el training eh se ha tenido, bueno, se puede establecer o no se puede establecer un clip O sea, cortar los gradientes a un máximo para que la eh la red no haga byenes en el o sea en el entrenamiento. Unas veces se gane mucho y otras veces gane poco para que se estabilice el entrenamiento. Y aquí pues hacemos el cálculo del la actualización del de las probabilidades de nuestro woofer prioritario.

### Segment 25 (120:00 - 125:00) [2:00:00]

Como veis, aquí ya no estamos haciendo la disminución del delilon porque como tenemos unas capas ruidosas, pues este esto ya no aplica. Lo que sí que aplica es que una vez que ha terminado de pasar el episodio o el epodch, como lo queráis, se actualiza la red target y se actualizan los rewards y el resto pues es exactamente lo mismo. Luego cuando os pongáis con la documentación y el esto, pues ya veréis que bueno, pues al final hemos concentrado en una única función pues el entrenamiento aplicando las seis de las ventajas. Como podréis entender aquí, eh si una sola red tenía eh tenía problemas de ajustar parámetros, los parámetros que tienes en las redes ruidosas, el PER, los estás entrenando una red neuronal, etcétera, eh es una red neuronal que no tiene objetivos, que tienes unos objetivos que son estimaciones, o sea, no tienes etiquetas. Pues aquí cuando tienes que hacer una hiperparameter tuning de esto, que aparte es bastante lento de entrenar, si no utilizas una GPU, pues bueno, para poder hacer un hiperparameter tuning de esta red, pues vas a tener que empezar por partes, porque hacerlo todo una vez, pues va a ser esto. puedes empezar con los defaults, luego puedes ajustar todo lo referente al buffer prioritario cuando ya veas que la curva de aprendizaje está en un buen estado y luego puedes ajustar los el horizonte de los pasos que vas a mirar a futuro con coeficientes de pérdida. Luego pues el puedes eh finalmente una vez que ya tengas todo eh las partes críticas que sper y el número de pasos estabilizados, puedes eh aplicar el rango distribucional, el V min y el V máximo, porque a lo mejor estás haciendo mucho clipping en el en los rewards y luego también puedes aplicar el sigma que vas a prender en el en las capas. más ruidosas para la exploración y explotación. O sea, depurar esto a una red de estas características es bastante complejo, te va a requerir bastante tiempo, pero bueno, una vez que entiendes los conceptos y cuáles son las prioridades de qué es cómo lo tienes que hacer, pues como os digo, empiezas por de por defecto con los valores que a lo mejor os paso aquí y luego una de las partes que más colabora en el esto es el buffer prioritario, o sea, que ahí puedes a ajustar el alfa y el beta. Y luego, una vez que ya veáis que el que la curva se ve de que tiene una buena forma, ajustas los números de pasos y luego finalmente el mínimo y el máximo del de la distribución para que no estés eh digamos eh recortando ni por encima ni por debajo. Y por otro lado, que si pasáis a una QR de QN, a una quantil regression de QN, no vais a tener ese problema, pero también vais a incrementar todavía más el tiempo de de entrenamiento y luego también podéis jugar en el último paso con el con los parámetros del ruido para la exploración, explotación. Al final eh, os pasaré la ups, perdonar. Y ahora vamos a ver la última red que es la HR Hinsight Experience Reply que esta es están esta estas redes están orientadas a problemas donde la recompensa es escasa, ¿no? En tareas orientadas a objetivos donde la recompensa puede ser cero casi siempre, pues aquí hay un problema. ¿Por qué? Por cómo está diseñado el elmanquation. Si siempre te da cero, pues tú no estás mandando una señal de retroalimentación diciéndole a la gente cuándo se cuándo no se está equivocando. Entonces, imagínate que estás entrenando un robot para que ponga una taza en un punto específico de una mesa. La recompensa es binaria. Uno, si la taza llega al punto objetivo, cero en cualquier otro caso. Por exploración aleatoria, el robot casi nunca va a aceptar acertar. Así que el reply Bower se llena de miles de episodios fallidos con reward cero y esto en todas las transacciones. El agente no aprende nada porque no tiene señal de retroalimentación. Consecuencia, el reply, eh, lo que obtienes del buffer siempre es cero, o sea, incluso si estás utilizando el per, el PR, siempre vas a tener un cero, o sea, no hay prioritización, siempre hay cero. Con lo cual elijas la que elijas, el eh nunca

### Segment 26 (125:00 - 130:00) [2:05:00]

aprendes. Los targets de error tienen muy poca información, con lo cual nunca vas a utilizar, nunca vas a actualizar las prioridades del de per ni de ningún buffer que pongas y el aprendizaje es hiperlento. ¿Cuál es la idea de H? pues eh pues se le ocurrió una idea muy genial eh que es dices, bueno, ya sé que no has llegado al objetivo, pero eh lo que me interesa es saber a dónde llegaste. Entonces, si has llegado a algún lado, pues vamos, lo que hace es dice, bueno, pues vamos a decir que llegar a ese lado es un objetivo positivo. Ya tienes una señal de feedback positivo. Y esto, ¿qué es lo que hace? que bueno que al final pues puedas poner en tu buffer prioritario señales con reguar un de las cuales va a poder eh ¿cómo se dice? tomarlas para poderles asignarles prioridades más altas y saber, mira, oye, aquí he llegado a este punto que, mira, no sé si está cerca o lejos, pero al menos hay una serie de pasos que me han llevado a un punto, eh, pues vamos a dice, vamos a decir que eso ya es llegar a una meta, aunque sea una meta intermedia, o sea, le engañamos un poco y de esa manera, tal y como funciona el cálculo del Belman, de la Belman Equation, vamos a hacer que se empiecen a priorizar determinadas eh transacciones en el buffer y el algoritmo o el agente empieza a aprender. Entonces, ¿qué es lo que hace aquí? Eh, se selecciona el objetivo deseado, que en este caso es la meta G eh 7. El en este caso ha fallado y se ha quedado en el punto cuatro. Entonces, lo que sece lo que se antes de meter la transacción en el buffer, renombramos al objetivo como en vez de ser el siete que sea el cuatro, como siendo el objetivo recordar que las transacciones tenían un S0, un estado, una acción, un reguar, un estado siguiente. y un eh y el goal, ¿no?, eh que genera eh el el a ver si lo digo, el ay el goal que me ha generado el stop. Entonces, lo que hacemos aquí es en esta en este per en la transacción, lo que hacemos en el per es lo siguiente. Como veis aquí las vamos en este caso vamos a introducir cuatro transacciones en nuestro buffer. Eh, la primera para la derecha, segundo todas con reward cero. El objetivo en estas es el punto número siete. Lo que hacemos en el GER es decirle, bueno, en vez le cambiamos el objetivo a las transacciones, a este conjunto de transacciones, y en vez de meter eh este conjunto de transacciones eh que acaban en el punto cuatro, todas con reward cer al pero con objetivo siete, pues metemos en el buffer cuatro las mismas cuatro transacciones porque este episodio ha acabado aquí, Pero le cambiamos el objetivo y en vez de ser el objetivo decimos que es el objetivo cu y decimos que en el S3 que era la última transacción en el estado 3 gira a la derecha y obtiene un reguar un ya que ese reguar 1 me hace llegar al estado 4. De esta manera, lo primero que hacemos es que se empiezan a actualizar las prioridades en nuestro per y, de hecho, empiezas a poder calcular recompensas, no todas las recompensas, si os recordáis los que visteis en el cómo se calculaban las recompensas, pues claro, si tú tienes todo cero, est un ejemplo esto, dice, ¿cuándo cuando empezaban a cambiar las recompensas, aunque fuera negativo, pues cuando la gente se estrellaba contra el muro. Pues aquí hacemos un poco lo mismo. En vez de hacer, lo que hacemos es poner muros ficticios en nuestra en nuestro esto para decir, mira, aquí eh para llegar aquí a este punto me ha obtenido un poso porque si no veis aquí en la ejecución de este de coole

### Segment 27 (130:00 - 135:00) [2:10:00]

learning, pues estábamos actualizando siempre los cubalios de nuestra Qable a cero. Esto en espacios gigantes y todo lo que tienes son ceros. El la el, ¿cómo se dice? El cálculo de la Belman Equation siempre te va a actualizar los valores Q de ese para ese estado y para esa acción a cero y entonces no hay aprendizaje, ¿no? Y esto es un poco lo que trata de eh de hacer el HR. le engaña al algor, no engaña, hace un truco para empezar a meter transacciones con reguar positivo dentro del el de del buffer y que el algoritmo empiece a contar con eh recompensas positivas. En este caso lo que hacemos dice es la trayectoria física es la misma. El Robot hizo los mismos o el agente hizo los mismos movimientos. Lo único que cambia es etiqueta. Al decir en retrospectiva hinside, que es lo que significa hinside, supongamos que quería llegar a la posición cuatro y esa trayectoria que antes era un fracaso total con reguar cero, o sea, aquí es un fracaso, la convertimos en una trayectoria con reguar positivo. Sabemos que no es el estado final, pero sí que hacemos lo que sí que hacemos es que la gente empieza a aprender. Dice HR cambia la distribución de los datos, no la matemática Belma. La Qunción se vuelve condicionaria por un objetivo que está en un paso intermedio. La regla de actualización es siempre es la de siempre, solo que ahora incluye el objetivo como un input adicional. ¿Por qué funciona también el HR en este tipo de entornos? Por cada transacción real, HR genera un número, una constante que una variable que puedes definir típicamente cuatro transacciones reveladas usando objetivos futuros alcanzados del mismo episodio. Así que en un episodio 10 pasos que antes producías 10 transacciones con reguar cero, ahora produces eh 10 + 40, o sea, que es el la constante HRK más las 10 negativas, o sea, produces 50, 40 de ellas con regal positivo. El efecto neto es que la gente empieza a navegar a muchos puntos del espacio, no solo al objetivo original. Y esa habilidad de navegación general es exactamente lo que después le permite llegar al objetivo real cuando lo intenta de nuevo, porque ya sabe llegar a lugares cercanos. HR es un complementario a las extensiones de DQN, eh, o sea, esto seor eh utiliza en entornos donde el la recompensa es muy escasa y normalmente solo es eh recompensas binarias. O sea, se puede eh si tú detectas que esto está pasando en el entorno en el que estás trabajando es donde lo tenías que utilizar. Y ahora vamos a ver un poco el código. Aquí vamos a crearnos un entorno caston en el cual eh vamos a tener que utilizar el le damos el vamos a hacer un entorno muy concreto en el cual pues vas a ver que el objetivo es la parte de la eh de la observación. ¿no? Entonces aquí eh como veis le pasas la posición y es el A ver si os lo eh ¿Dónde estoy? que me estoy perdiendo un momento. En nuestro entorno vamos a tener el estado cada vez que tomas un paso, la posición a la que se va a mover el eh, o sea, si tomas es un es, como veis aquí, es un estado muy es un agente bastante sencillo. Un segundo, otra vez. Ay, perdonar. Eh, bueno, eh, lo dicho, vamos a tener un este pequeño entorno en el cual eh tenemos un agente eh el Estado es un ag estado es la posición de la agente y el objetivo y el el

### Segment 28 (135:00 - 140:00) [2:15:00]

objetivo deseado, que pueden ser cer o menos un en este caso las acciones pueden ser cerver la izquierda o uno, mover a la derecha y el reguar puede ser cero si se eh consigue el objetivo o -1. En este caso, nota que el estado es parte de la observación. Esto es lo que hace al cooler. cooler incondicionado por objetivo. La misma posición tiene distintos Q values según el objetivo esté activo. Por eso aquí cuando dices la tomas la acción, si la posición eh y luego calculas la posición, la posición va a ser un cero dependiendo de en qué eh en qué estado quedas, ¿no? y quedas en la eh has conseguido el objetivo, te devuelve un menos un cero te devuelve un menos1. La actualización que es la que vemos aquí es la actualización de del error estándar. Es lo mismo que hacemos en la Belman Equation, pero ahora la tabla que estamos calculando tiene una dimensión adicional, que es la dimensión eh objetivo. La matemática no cambia, solo cambia el indexado. Si ahora nos vamos al bucle HR, nos vemos aquí en aquí definimos nuestra nuestro entorno. Aquí eh creamos nuestra tabla coolarning, aquí creamos nuestro exilon inicial y aquí creamos nuestra trayectoria. Aquí elegimos eh que es una lista eh o sea, es una eh lista donde vas a poner eh todas las acciones que has tomado para luego poderlas renombrar. con el objetivo final. Recordar que aquí eh estamos introduciendo en nuestro eh en nuestro par acción estado obtenemos también el objetivo. Entonces elegimos una acción de nuestra cru table y la implementamos en nuestro eh en nuestro entorno. Vamos a obtener el una serie de valores en el el próximo estado, la el retorno, si está terminado, si está truncado y la información. Aquí al TD date, que es la función que tenemos aquí, le vamos a pasar la Cable, el estado, la acción, el retorno, si está terminado el alfa cama y se va a actualizar la eh nuestra tabla de cooler. Y aquí eh si eh hemos ha llegado al objetivo, pues eh esto lo obtenemos del punto de información, que esto es una la variable nueva que hemos eh introducido nuestro estado. Si el objetivo está conseguido, pues le pasas un integer y esto lo le, ¿cómo se dice? Esto es una variable buleana, lo pasas a integer y lo pasas al a esta variable. Y entonces a la trayectoria lo que haces es eh pasas a, a ver si lo digo, al o sea, añades ese estado a la trayectoria con el objetivo, ¿de acuerdo? O sea, aquí estás utilizando el algoritmo Coolarning eh convencional, lo único que haces es poner una eh en tu en el estás almacenando la trayectoria que lleva ese en ese episodio con un eh con el objetivo, ¿de acuerdo? con el objetivo que tenías inicialmente. Una vez que has terminado esa trayectoria, te ha podido dar positivo, o negativo, eh, o que has llegado al máximo número de pasos o que has

### Segment 29 (140:00 - 145:00) [2:20:00]

llegado o que has, resuelto correctamente el entorno, normalmente no, pues terminas este bucle y ahora es cuando viene la magia del eh relabelin, ¿no? Entonces, por cada transacción en la trayectoria que has acumulado aquí por cada transición en la trayectoria real se muestrea hasta eh HRQ Q4, que es el valor que definimos aquí. el número de acciones que quieres eh almacenar en tu buffer y empiezas a eh mirar la trayectoria eh o sea, muestreas hasta la constante, que en este caso es cuatro, para posiciones futuras que la gente realmente eh alcanzó, ¿no? Luego pretendes que, o sea, renombras que ese objetivo que sea ese para esas transacciones, renombras que el objetivo en vez de ser el objetivo inicial sea ese que tú le que ha alcanza que, o sea, que has eh que ha alcanzado eh ya sea por positivo o porque se ha acabado el número de pasos que tienes y a ese paso le das como que fuera el objetivo final, o sea, renombras el objetivo inicial, lo renombas a ese donde se ha parado la trayectoria y a ese estado donde se ha parado la trayectoria, lo renombras como estado final. recalculas el la recompensa eh contando como que ese fuera el estado final y aplicas el TDutate a la tabla eh de cool learning. Como veis, una vez eh que ha fracasado una transacción, lo que hacemos es mirar hasta qué punto ha hecho y por cada por el, o sea, por cada trayectoria, por cada paso en la trayectoria, lo que haces es recalcular los valores Q de cada una de las de esas pasos de la trayectoria, mirando eh renombrando el o cambiando el reguar a positivo, digamos que obties un regar y recalculando cada una de las posiciones en tu tabla clarning, en tu tabla tu table, considerando que en vez de haber tenido un eh regar eh negativo, tienes un reguar positivo. Y de ese manera, en vez de esto que nos había sido aquí un fracaso, que habíamos obtenido un resguard cero, pues lo convertimos en actualizaciones válidas eh en la tabla coolearning y le estamos diciendo, "Bueno, pues hasta este punto pues tú has obtenido un reward, ¿no? Y de esa manera nuestra tabla cool learning en este caso, porque este caso está hecho con una tabla cool learning, pues va a empezar a cambiar estos valores de aquí, que son los finales, ¿no? Pero, ¿qué es lo que hace eso de que conforme va progresando el algoritmo, pues tú vas a tener regulars positivos en rewards positivos o negativos en posiciones de tu Q table? Esto lo puedes aplicar exactamente igual a una red neuronal. Eh, bueno, pues esto, a ver, volvamos al código. Esto es un poco lo que hace el Q, el H. Y ahora pues vamos a ver eh un poco la demostración que al final la vamos a reducir también a ver el la demostración al final como hicimos en el paso dos en el vídeo anterior podemos ejecutar eh a ver si lo tengo por aquí si no me equivoco. Bueno, para poder ejecutar las tenemos un una

### Segment 30 (145:00 - 150:00) [2:25:00]

os he creado un algoritmo eh bueno, esto ya lo vimos en el vídeo anterior que se llama He creado una run comparison que al principio pues lo que hace es pues es tenemos todos nuestros algoritmos de DQN, todos los que hemos visto hasta ahora y eh le pasamos un entorno y con el problema del carpol eh del palo este que tienes que ir eh manteniendo en la posición vertical y tienes cuatro tipos de acciones. E la velocidad angular a la derecha, a la izquierda, gradiente positivo o negativo y la velocidad del soporte donde está el palo, ¿no? Entonces, pues cada uno de ellos le aplicamos el método con valores por defecto y luego podemos comparar tanto los rewards como lo que grabar los vídeos y grabar los plots y toda la capturar toda la información para poder capturar los los poder capturar eh lo relevante de cada una de las ejecuciones. Esto para poder calcular todo el esto se pegó 6 horas para que hagáis una idea de para ejecutar todos los estos. Bueno, no lo vamos a hacer ahora, solo deciros en la documentación luego eh os produzco, os pasaré cómo ejecutarlo, cómo ejecutar estos algoritmos y así. Pero bueno, en definitiva, vamos a producir una serie de jons que tenemos aquí y en nuestro, a ver si los encuentro, que también tengo un lío aquí en los outputs. calculo unos resultados eh con sus errores, unas tablas donde voy cargando todo todos los valores y luego unos unas agregaciones para poder comparar los algoritmos. Y de ese sumario agregado, pues luego eh hay tres scripts aquí que luego los podéis por un lado tenéis el la comparación. Puedes hacer comparaciones de todo o puedes comparar de algoritmos en particular. Luego tienes un script para agregar los resultados y producir un report. Para hacer el tema más simple, pues os voy a enseñar el report, que es el último que generé, ya que ya como os decía, ahora veréis un poco el reporte, pues se pegó, o sea, tenemos el tiempo para que tiempo en segundos para que os hagáis para que veáis que no os estoy eh engañando. Simplemente el GER, bueno, lo he metido aquí. Eh, este entorno no está diseñado para GER, o sea, podéis descontarlo cuando hagáis las pruebas en vuestro entorno, pero aquí sí que tenemos una un ejemplo eh de quién es el que performa mejor y peor dentro de cadacia. Recordar también de que C51 eh está probado individualmente sin per y sin lo único que tiene como añadido eh este algoritmo con distribución es el la el doble DQN. Lo mismo pasa con el quant regression, donde la tenemos aquí. ¿De acuerdo? Entonces, estamos mirando el máximo reguar eh de cada uno de los algoritmos y como veis, obviamente no podía ser de otra manera. El que gana es el la rainbow de QN porque implementa cada una de las desventajas. observar si veis cuáles son la luego las mejoras que de forma individualmente están eh generando el máximo reward, ¿no? O sea, simplemente con DQN con un número de pasos aquí con una distribución, esto simplemente la distribución con una doble y aquí simplemente con el per, con la priorización de las transacciones. Esto es algo que os dice mucho de cómo cuáles son las mejoras que eh que tiene un impacto positivo, un impacto más positivo que otras, ¿no? Aquí tenéis el final averes rewards, lo mismo, eh, la

### Segment 31 (150:00 - 154:00) [2:30:00]

que mejora es el la que obtiene el máximo es la DQR. Y bueno, pues eh como no podía ser de otra manera, pues también el la que más tarda pues es el el la rainbow de QN. El por cierto, esto no está hecho, que antes me he confundido, esta no está mirando con el carpol, este es con el entorno custom que hemos probado. O sea, que este lo podemos eliminar cuando hagamos el si hacéis una un rand de una comparación, eliminarlo de la lista porque no este esta prueba este algoritmo no está preparado para funcionar con el carpole porque el carpole no tiene la problemática que tiene para la que está diseñada el HR. Y bueno, lo dicho, de el simple learning, pues conforme ya metes las distribuciones, eh, pues eh se empieza a tardar más. Y bueno, el Rainbow que utiliza las seis mejoras, pues tarda pues casi 25,000 segundos, que si los calculamos 25,000 segundos, pues vamos a echar una cuenta. 25,000 segundos son aproximadamente 426 minutos y si lo divides para eso son 7 horas. Si no recuerdo mal, esto me la dejé por la noche. Y bueno, aquí veis el performance versus time. Y bueno, pues lo dicho, eh, con esto vamos a finalizar. Tenemos aquí eh todas los algoritmos posibles. Quiero espero que os hayáis llevado una suficiente información. Hemos cubierto en detalle todos los vídeos, tenéis el código también. Eh, si alguna cosa no ha quedado correctamente explicada, pues como siempre os digo, hacer algún comentario en el vídeo. También he podido equivocar en alguna cosa. Ya sabéis que salto de una cosa para otra. Muchas veces el tema es complejo. Eh, tenéis mucha información en el repositorio. Eh, he creado documentos en los dos idiomas, que ya sabéis que hago los vídeos siempre en español y en inglés. cada uno de los algoritmos está detallado por completo. también te eh he procurado también el código detallarlo lo máximo posible en cuanto a lo que es el comentarios y todo eso y luego enlazarlo también en los propios en los propios documentos explicativos para que así se pueda seguir, ya que el tema a los que tenéis ya habéis trabajado con Reinforcement Reny, pues ya sabéis que el tema es complejo, ¿no? Y bueno, aquí pues nos estamos metiendo a mucho detalle, son muchas cosas, eh, sobre todo cuando metemos todas las mejoras de Rainbow de tener en cuenta y seguramente alguna cosa pues habéis hecho alguna cosa que no está completamente todavía. Bueno, si es así, disculpar porque ya sabéis que a veces pues es complicado sintetizar todas estas cosas. Ya llevamos 2 horas y media con este vídeo que ya es un montón y no me gusta hacer los vídeos tarde. Bueno, vamos a dejarlo aquí. Lo dicho, si os ha gustado, pues ya sabéis, darle un like, suscribiros al canal si no estáis suscritos, eh, con pensar ese o tener en cuenta de haceros miembros del canal. De esa forma tenéis acceso a los proyectos. Esto va a ser parte, como ya sabéis, de un curso que estoy haciendo de reinforcement learning. Eh, continuaremos en los próximos con el policy optimization y luego con los algoritmos mixtos. Y bueno, pues lo dicho, si os ha gustado el vídeo y os ha servido para algo, pues ya darle un like, suscribiros al canal y hacer comentarios, compartir con amigos y colegas de esa manera. Ya sabéis que el algoritmo de YouTube pues posiciona mejor estos vídeos. Y poco más. Nos vemos en el siguiente vídeo y hasta pronto.
