Una introducción formal al Aprendizaje por Refuerzo Profundo

May 10 2022
Deep Reinforcement Learning desde cero con Deep Q-learning
Para comprender este artículo muy rápidamente, le sugiero que se familiarice con: 1. Introducción 1.

Para comprender este artículo muy rápidamente , le sugiero que esté familiarizado con:

  • Matemáticas básicas
  • Operaciones básicas de matriz
  • Derivadas parciales
  • función de probabilidad

1. Introducción

1.1 Propósito

En esta elaboración me gustaría explicar cómo es posible construir una inteligencia artificial, entender cuándo produce errores o cuándo realiza sus acciones correctamente y se mejora continuamente. Esta es una de las formas más generalizadas de inteligencia artificial actualmente para mí. También hice una aplicación de muestra: un péndulo inverso, que es simplemente un eje colgado de un pivote, que debe moverse hacia la derecha o hacia la izquierda para que no caiga sobre el eje.
Todas las implementaciones de algoritmos que utilicé en el proyecto adjunto (ver la parte inferior) están escritas desde cero en Python.

Un proceso llamado "aprendizaje Q profundo" es el algoritmo que utilicé para esto, pero ahora, antes de ver cómo funciona, debemos comenzar con lo básico.
¿Qué son la inteligencia artificial y el aprendizaje automático?
¿Cuál es el concepto de aprendizaje por refuerzo?

1.2 ¿Qué es la inteligencia artificial?

La inteligencia artificial, es la capacidad que tiene una máquina para reproducir inteligencia biológica. Es decir, la que todos sabemos que tienen los humanos, los animales y las plantas.

Generalizando , podemos decir que la inteligencia (tanto artificial como biológica) de un ente en un entorno es su capacidad de elegir la acción correcta a realizar según su estado y su experiencia. La acción elegida se calcula como:

Donde A es la acción elegida, E es la experiencia y S es el estado.

Por ejemplo, para que un ser humano camine, tiene que elegir qué músculo mover en un espacio (entorno), en función de su posición (estado), y de su experiencia (que regula de manera general cómo moverse).

1.2.1 La relación entre la inteligencia general y la corrección de las acciones

La inteligencia de una entidad es proporcional a la corrección de las acciones realizadas por la entidad ya que su estado y experiencia varían. Así, así como la corrección es subjetiva, también lo es la inteligencia.

1.2.2 Los criterios para la corrección de las acciones

Para crear una inteligencia artificial que ayude a los humanos, los criterios de corrección deberán ser subjetivos para los usuarios.
Por ejemplo: la persona A aplaude y considera muy inteligente a un robot que limpia la casa una vez a la semana, mientras que la persona B asume lo contrario porque le gustaría que el robot limpiara la casa 5 veces al día.
Aunque podemos incorporar en el robot indicar la persona exacta que tiene que limpiar la casa. Haciendo así que la inteligencia sea un poco más objetiva. Sin embargo, esto último nunca puede ser completamente así.

1.3 ¿Cómo se forma la experiencia de un ente?

La experiencia y el estado de la entidad determina las acciones que se llevarán a cabo. Podemos considerarlo como la estrategia de la entidad y se divide en 2 grandes tipos:

  • Experiencia estática: Esta solo se encuentra en entidades artificiales y desde un punto de vista matemático, podemos identificarla como una “función no paramétrica”.
    Por ejemplo, un programa (entidad artificial) al que se le da la ruta de un automóvil, es decir, el espacio recorrido en kilómetros y la duración en horas (ambos forman el estado), y una función no paramétrica (experiencia estática) f (espacio, duración) = espacio/duración calcula la velocidad media (la acción es el valor de la velocidad media).
  • Experiencia dinámica: Esto es tanto en las entidades artificiales como biológicas y desde un punto de vista matemático, podemos identificarlo como una “función paramétrica”.
    Por ejemplo, un programa (entidad artificial) que dada la superficie de una casa (estado) debe predecir su precio (esta acción escogida es el valor mismo). Y no puede usar una función que no esté parametrizada, porque muchas variables afectarían el precio.
    Estas variables pueden ser la ubicación de la construcción o el año de construcción.
    Podríamos incluir estas variables en el estado junto con la superficie, pero sería difícil escribir una función que calcule eficientemente el precio.
    por ello, escribimos una función muy generalizada parametrizada según variables determinantes dinámicamente, tratando de maximizar la precisión (o inteligencia) de la entidad.

2.1 Aprendizaje automático general

En una entidad artificial con experiencia estática, es tarea de los programadores clásicos determinar la experiencia estática adecuada para maximizar su precisión.

En cambio, cuando se trata de una experiencia dinámica, es la propia entidad artificial (al menos en la mayoría de los casos) la que modifica su propia experiencia, y solo en este caso la entidad podrá hacerlo.
Esto significa que debe estar provisto de un criterio de corrección.

El conjunto de procesos que gobiernan la experiencia y cómo puede cambiar se llama aprendizaje automático.

2.1.1 Tipos de aprendizaje automático

Para que una entidad modifique su experiencia de una manera que maximice su precisión, alguien debe proporcionarle un criterio de corrección. Entonces, cómo una entidad modifica su experiencia dado un criterio de corrección determina los diversos tipos de aprendizaje automático.

  • Aprendizaje supervisado (experiencia dinámica):
    en el aprendizaje supervisado, el criterio de corrección proporcionado es un conjunto de registros llamado conjunto de datos, o conjunto de entrenamiento más específico . Aquí es donde cada registro contiene un estado y una acción que se considera correcta.
    Hay muchos modelos/algoritmos en el aprendizaje supervisado, pero la idea general es que la experiencia se modifique constantemente para que, para cada estado, la acción elegida sea similar a la correspondiente en el conjunto de datos.
  • Aprendizaje no supervisado (experiencia estática):
    En el aprendizaje no supervisado se determina desde el principio la experiencia, es decir, cómo debe funcionar cuando se prueba.
    Esto significa que es estático porque el propósito de los modelos/algoritmos de este tipo de aprendizaje automático generalmente es recopilar información o estadísticas sobre los datos.
    Por ejemplo, un solo estado comprende una lista de imágenes, que deben clasificarse buscando las diferencias entre ellas. (La lista de predicciones es la acción elegida).
  • Aprendizaje por refuerzo (RL) (experiencia dinámica):
    un método muy general para proporcionar los criterios de corrección es simplemente decir qué tan correcta es la acción elegida por la entidad, según el estado.
    Este valor se llama la recompensa. La experiencia aquí será modificada tratando de maximizarla. Dar una recompensa (mayormente continua, y no discreta) a la entidad por cada acción que realiza, es un flujo de trabajo muy generalizado.
    Un ejemplo válido somos nosotros. Es decir, con nuestros sentidos entendemos nuestro entorno y tomamos acciones para aumentar o mejorar nuestra felicidad. (es decir, recompensa).
    Para cada estado, acción y factor aleatorio (solo en ciertos entornos), se adjunta una recompensa.

Para resumir esto, proporcionar retroalimentación escalar (recompensa), para cada par estado-acción es un criterio de corrección muy simple y general.
Ahora comprendamos mejor el flujo de trabajo básico de una entidad de aprendizaje por refuerzo artificial.

El agente recibe inicialmente el primer estado s y luego lo usa junto con su experiencia para realizar una acción a.
Luego, un intérprete (que en algunos casos corresponde al propio entorno), recibe s' (siguiente estado), evalúa la elección de a (en base a s , s' y en ocasiones también en base a un factor aleatorio que formalizaremos más adelante) . La recompensa r' elegida por el intérprete se entrega al agente junto con s' .
Veamos un pequeño ejemplo en python de un agente que realiza acciones aleatorias:

2.3 Formalización

Antes de comenzar, debe comprender bien estos conceptos:

  • Los estados a veces se denominan observaciones .
  • Todos los estados posibles pertenecen a un espacio de observación .
  • Al igual que los estados, las acciones también pertenecen a un espacio de acción .
  • Cada espacio puede ser discreto , continuo o una combinación de otros espacios. Por ejemplo, un espacio discreto se define como [0, 1, …, n-1] , donde n es el número de estados discretos y un espacio continuo es un tensor de escalares con un valor mínimo y máximo.

Un MDP no es parte de la experiencia de la entidad, es simplemente una forma de representar las transiciones en el aprendizaje por refuerzo. Actualmente estamos considerando entornos con espacios discretos de observación y acción y las ecuaciones derivadas de un MDP también se utilizarán para espacios continuos de observación y acción, como veremos más adelante.

2.3.1 Tipos de MPD

  • MDP totalmente observable : Además de S y A , se incluye una matriz P (también llamada T ), esta puede ser estocástica. Significa que

También tiene una matriz R , tal que

es la recompensa que se obtiene al pasar del estado s al estado s' habiendo realizado la acción a .

En algunos MDP con los mismos s , a y s' , pueden ocurrir diferentes recompensas, por lo que la matriz R puede representar el promedio de dichos valores.

Por lo general, P se expresa estocásticamente para generalizar y, como máximo, tendrá una distribución de probabilidad de tipo determinista. Este tipo de MDP respeta la propiedad de Markov que dice que las transiciones y recompensas sucesivas a un tiempo t son independientes de las transiciones con tiempos anteriores a t . Entonces, cuando hablamos de MDP en general, nos referimos a este tipo. MDP = (S, A, P, R)

  • MDP parcialmente observable :
    Esto no tiene una matriz de probabilidad P , y una matriz de recompensa R , porque son desconocidas, por lo que solo se puede intentar aproximarlas. Es posible que este tipo de MDP no respete la propiedad de Markov, pero en la siguiente sección entenderemos por qué.

2.4 RL basado en modelo y sin modelo

Hay 2 tipos de aprendizaje por refuerzo (ambos tienen algoritmos diferentes) llamados RL basado en modelo y RL sin modelo. Se diferencian de lo que el agente sabe sobre el entorno, formalmente podemos definir la diferencia utilizando los 2 tipos de MDP descritos anteriormente.

  • RL basado en modelos:
    este tipo de aprendizaje de refuerzo utiliza un MDP totalmente observable que describe tanto la dinámica del agente como el entorno para que el agente pueda predecir todas las transiciones.
    Podemos encontrar este tipo de RL en algunos videojuegos como “snake”, donde cada estado del entorno (matriz) corresponde al estado del agente (artificial), sin embargo, es difícil de aplicar en la realidad porque por ejemplo un humano , no puede saber lo que sucede en cada parte del universo.
  • RL sin modelo:
    En el RL sin modelo, la dinámica del agente se describe mediante un MDP parcialmente observable, mientras que la dinámica de su entorno se describe mediante un MDP totalmente observable.
    El agente, por tanto, no conoce inicialmente las recompensas ( R ) y P. Lo único que puede hacer es tratar de predecirlas según sus posibilidades que vienen determinadas por la relación entre sus diferentes MDPs.
    En estos dos MDP diferentes, los estados pueden no corresponder y el MDP parcialmente observable no siempre sigue la propiedad de Markov.
    Por ejemplo, si un día una persona realiza una acción que produce un efecto mariposa en el otro lado del mundo y luego da una brazada, ya no puede recordar nada. Al día siguiente puede sufrir las consecuencias de lo que hizo. Pero si no hubiera realizado esa acción ese día, habría afectado el futuro de manera diferente, por lo tanto, las transiciones futuras.

Recordando que un agente al recibir un estado, elige qué acción tomar en base a la experiencia, ahora entendemos cómo ocurre este proceso.
La estrategia/experiencia de un agente en el aprendizaje por refuerzo está determinada por una política, que puede ser estocástica ( π : A × S → [0, 1] ) o determinista ( π : S → A ), donde S y A son la observación y el espacio de acción del MDP del pueblo a.

La política estocástica se define generalmente como

donde p es la función de probabilidad

o (notación alternativa) π(a, s) = p(a|s) . La probabilidad dada por la política estocástica, dado un estado y una acción, es la probabilidad de que esa acción sea la óptima según el agente. En cambio, la política determinista elige de manera determinista la mejor acción dado un estado y se define como

A continuación, se llevará a cabo la acción elegida por la política. Para generalizar, por lo general, en las fórmulas se utiliza la política estocástica.

2.6 Evaluación de políticas

Premisa: En una serie de transiciones infinitas, en el tiempo ( t ) podemos definir una variable llamada rendimiento (o más específicamente rendimiento descontado ), con el símbolo G (también usamos R , pero puede crear confusión con la matriz de recompensa), definido como

Si en cambio el estado actual es el último del episodio, G vale 0, porque de nada sirve considerar futuras recompensas que nunca se obtendrán. El rendimiento representa una suma de recompensas futuras, donde se da más peso a las recompensas inmediatas. El factor de descuento (gamma), tal que γ ∈ [0, 1] , cuanto menor sea, mayores serán las recompensas inmediatas que afectan el rendimiento descontado. Dada esta premisa, podemos definir la política óptima

como esa política determinista que en el momento t=0 maximiza el valor esperado del rendimiento G o, como esa política que, si se usa, maximiza el promedio de todas las recompensas totales en un gran número de episodios. Formalmente:

con

El punto se usa solo por convención. Por ejemplo

en la ecuación es la distribución de probabilidad discreta que cada estado se selecciona como primero , otra notación utilizada es

Otro ejemplo:

es la distribución de probabilidad discreta de que cada estado sea seleccionado como siguiente, dado el estado actual y la acción elegida.

La fórmula puede parecer complicada y por supuesto que lo es, pero analicémosla: E(G) no se refiere a una serie de transiciones, sino a posibles transiciones en el MDP del agente, de hecho, el valor esperado de la el retorno se calcula con las variables aleatorias discretas s_0 , a_t y s_t+1 .

El primero es el primer estado del retorno. Tiene una distribución de probabilidad dada por la probabilidad de que s_0 sea el estado de la primera transición, debemos tener cuidado que t=0 signifique el tiempo inicial del cálculo de retorno, no el tiempo del episodio.

Luego está la variable aleatoria a_t , que tiene una distribución obtenida de la política dado el estado siempre en el mismo tiempo t . Además, la última variable aleatoria es s_t+1 , que tiene una distribución de probabilidad dada por la probabilidad de que este estado en el momento t+1 haya sido seleccionado por el entorno, dado el estado en el momento t y la acción realizada en_t .

En el caso de un MDP totalmente observable , los algoritmos/optimizadores intentan resolver esta ecuación, sin embargo, en los MDP parcialmente observables , dado que inicialmente se desconocen las probabilidades de las transiciones y las recompensas, y dado que la política óptima depende de las recompensas, la política óptima política puede cambiar, ya que con el tiempo varía la predicción de las recompensas, es decir, la política óptima en el tiempo t , no será la política óptima en el tiempo t+1 , podemos distinguir la política óptima según el agente y la política óptima según el entorno (la “realmente óptima”). El objetivo es acercar la política óptima del agente a la política óptima del entorno.

2.6.1 Diferencia entre algoritmos dentro y fuera de la política

En los algoritmos on-policy , se usa la misma política de la evaluación en el entrenamiento pero en los algoritmos off-policy , es solo en la evaluación que se usará la política óptima .
En la sección Q-learning, veremos por qué.

La política óptima es siempre determinista . Pero, una política no óptima puede ser tanto estocástica como determinista , este concepto también se aclarará en la sección 3.1.

Si algo no está claro, le recomiendo que continúe leyendo el Q-learning, luego puede volver más tarde para leer esta sección más adelante.

Hay muchos tipos de algoritmos de aprendizaje por refuerzo con diferentes enfoques. Por ejemplo, existen algoritmos de tipo optimización de valores y optimización de políticas . No entraremos en detalles, pero para hacerse una idea basta con mirar la siguiente figura.

2.7 Valor de estado y valor de acción

El valor de estado

es una función que dice qué tan bueno es un estado, básicamente es el rendimiento esperado
siguiendo la política π, a partir del estado s , formalmente:

El valor de la acción

también llamado valor Q, es otra función, y juega un papel similar al valor de estado, pero también se debe especificar la primera acción elegida.
El valor Q, entonces, es el rendimiento esperado siguiendo la política π , partiendo de un estado determinado y eligiendo inicialmente una acción determinada.

2.8 Evaluación del valor Q y ecuación de Bellman

La ecuación de Bellman logra expresar recursivamente el valor Q:

tenga en cuenta que el símbolo ' se utiliza para indicar la siguiente acción o estado

Ahora, considerando la política óptima, (recordemos que si es óptima es determinista), dado un estado, obtenemos la acción que maximiza el valor Q. Entonces, podemos decir:

Ahora podemos definir el valor Q óptimo (el que sigue la política óptima), con la ecuación de Bellman (en este caso llamada ecuación de Bellman para la optimalidad ):

Esta fórmula nos llevará a la siguiente sección para optimizar el agente.

3 Q-Learning

Q-learning es un algoritmo de aprendizaje por refuerzo que no tiene modelo y es un tipo de optimización de valor. la optimización se basa en el valor Q y la ecuación de Bellman. Las limitaciones son que el espacio de observación y acción es discreto y la política es determinista.

El agente tiene una tabla bidimensional llamada Q-table, donde cada fila corresponde a un estado en el espacio de observación y cada columna a una acción en el espacio de acción.
Esta tabla tiene un valor Q correspondiente para cada par estado-acción. De ahora en adelante daremos por sentado que es el valor Q el que sigue la política óptima. Entonces la siguiente convención será válida:

Como ya se mencionó, la política óptima (que recuerdo que siempre es determinista), cuando se le da un estado, elige la acción con el valor Q más alto:

Si podemos recopilar los valores Q correctos, ¡tenemos la política óptima!
Pero, ¿cómo calculamos los valores Q?
Si volvemos a observar la ecuación de Bellman para la optimización (que usa la misma política), notaremos que en el tiempo t , si conocemos el valor Q en el tiempo t-1 , podemos aproximarnos mejor al valor Q en el tiempo t .
Mencioné la palabra "aproximado" por 3 razones:
Las recompensas pueden variar incluso con la misma s , a y s'. Entonces, si en la misma transición obtengo una recompensa ahora, más adelante si repito la misma transición podría obtener otra diferente, también s' puede que no se arregle si Pes estocástico. Finalmente, también se aproxima el valor Q en el tiempo t-1 .

Pero si seguimos en los episodios siempre actualizando los Q-values, durante un tiempo que tiende al infinito, podemos obtener el Q-value medio (o esperado) .
Esto significa aproximar la política óptima según el agente con aquella según el entorno (o la realmente óptima ), que es exactamente lo que buscamos.
La actualización ocurrirá de la siguiente manera:

Entendamos mejor este proceso:

es el valor Q esperado (u objetivo) de s y a , mientras que

is the current one, we will calculate their difference and obtain an error, that we will add to the current Q-value, after multiplying it by an alpha factor, such that a ∈]0, 1], called learning rate, if it is close to 1, the new Q-value is close to the target one. But if it is close to 0, the new Q-value is close to the current one.

The basic workflow of Q-learning is as follows:

3.1 Exploration vs exploitation dilemma

Imagine you are in a room with 2 doors and on one door, you know that behind it there will be 100 coins, but you do not know what may be behind the other door.
Maybe there may be more than 100 coins or less.
The question now is: do you try your luck or accept the first safe 100 coins?
Another example is every time a student goes to school he or she always travels the same road. Now should the student try the road that he or she does not know and perhaps discover that they can shorten or at worst lengthen the route?
Surely it is disadvantageous to try new roads every day. And if you take the risk, it may lengthen the route, and if you don’t take this risk, you will keep taking the best route that you know.
Yes, the solution might be to try new routes now and then. But how often should you try taking a new route that you don’t know of?

This is a big dilemma in reinforcement learning and it is based on the choice between exploration (exploring new ways) and exploitation (going in the best ways I already know). Because of this, it is not always the action chosen by the optimal policy, that will be carried out.

Having said this we can identify the real policy (previously called “not optimal”), which is the one that chooses the actions that will actually be performed. It relies on the optimal policy for the exploitation (although sometimes you can avoid the exploitation in training), and on a random factor (usually) for the exploration. In other words, given the action chosen by the optimal policy, we must understand that it might be the one to be carried out or not. To make this choice there are many algorithms called Bandit Algorithms, the most important are the following:

  • Epsilon-greedy ( ε-greedy): The epsilon is a constant value between 0 and 1 inclusive, it is the probability that a random action is performed, the pseudocode is:
  • Softmax: This is a “Value Adaptive Epsilon algorithm” and it relies on Q-values to determine the probability of choosing actions. This algorithm chooses the action based on a probability distribution calculated from action returns. The higher the return, the higher the probability that his action is chosen. Each probability of the distribution is obtained from:
  • Decay epsilon-greedy (based on ε-greedy): This algorithm, at each step, decreases the epsilon exponentially, as follows:

3.2 Example in python

Now let’s take a look at a small example in python which we’ll go on to explain.
In the attached project there is a Python notebook called “q-learning-example.py”, divided into 2 parts. Let’s analyze the first one:

Let’s import the libraries we will use: numpy for various mathematical operations, gym, used to create environments with a common interface quickly and easily, and plotly, to show graphs.

The class Q-Agent is defined, where the environment is passed in its the constructor, and the Q-table with zeros is started.
The start episode function is defined, where, in a loop that lasts until when the episode is over.
It chooses the action with the real (not optimal) policy, with the epsilon-greedy algorithm. Now, the agent performs that action and gets the reward, the next state, and a boolean variable, which indicates whether the episode is over.
If it is over, the update does not take into account the Q-value of the next state, because it would not make sense to think of getting future rewards, if the episode is over.

After defining the agent, in this second part, we are going to execute a small example program. The discount factor used will be 0.99 and the learning rate 0.1.
Note that the value of epsilon in testing is equal to 0 so, that the real policy corresponds to the optimal one. The first graph shows the total reward trend in the various episodes, following the optimal policy and the real one.
Then the last graph shows the distribution of the total reward following the optimal policy.

The output of the script is as follows:

mean total reward: 7.92, standard deviation total reward: 2.58

3.3 Conclusion

Q-learning is a very easy algorithm and the parameters (discount factor, learning rate, etc.) have a relatively good margin of error. The limitations are also seen especially as the complexity of the agent’s MDP increases.

4 Deep Q-Learning

A great limitation of Q-learning is the discrete observation space since the Q-values are obtained by accessing a matrix.
The solution adopted by the deep Q-learning is to place the Q-table with a function that approximates the Q-values, and this function is a neural network (called in this case Deep Q-Network, or DQN). When it is given a state, it approximates/predicts the Q-values of all possible actions. Deep Q-learning is therefore a deep reinforcement learning algorithm, which is a word derived from both reinforcement learning and deep learning.

The function that calculates the Q-values will follow the following convention:

where W are the parameters of the neural network.

4.1 Neural Networks

A neural network (or neural network, or even deep neural network) is a function approximator that takes inspiration from biological neural networks and it can be structured in many ways. Below we will see a simple example.

Each neural network has an input layer that contains the inputs, hidden layers where the inputs are processed, and an output layer that contains the outputs of the neural network.
The parameters W (or θ ) are called weights, and together with the biases B, are the ones that parameterize the prediction of the neural network. W is simply a three-dimensional matrix, where the first dimension identifies the layer, the second the next neuron, and the third the previous neuron.
Thinking about a linear function, W represents the angular coefficients and B is the known term.
The inputs of the neural network correspond to the Z_1 values while the outputs are the A_L values, where L is the number of total layers.
The Z and A values of each neuron also called input and output values (except those in the input layer), are calculated in the following way that I summarize in a diagram, with input a vector x:

In general:

where σ is a function called activation function which mainly has the task of preparing the input values for the next summation.
For example, it tries to avoid large values, although it also has other purposes that we will not go into. Many types of activation functions can vary for layers or even to individual neurons of a single layer. The most used activation functions are sigmoid, ReLU, leaky ReLU, linear function, etc.
In the cartpole project, I used leaky ReLU for hidden layers and linear function for the input and output layers.

How many neurons in the hidden layer must a neural network have? Or how many hidden layers must it have?

Both things vary from problem to problem, but we can say that to approximate complex functions we need more layers, even if there is a risk of overfitting the neural network. Regarding the number of neurons, there are some rules of thumb like the one that says that the right number is half the number of neurons in the input layer and half the number of neurons in the output layer, but in reality, we have to go by trial and error many times.

4.2 Neural Network Optimization

Premise: From now on, we will consider the B bias as part of the W weight, so it is possible to think of an extra neuron for each layer (except the output layer), with the output value equal to 1 and connected only with the neurons of the next layer.

To optimize the neural network so that it correctly predicts all target Q-values based on a state, we compute the Q-values for each action, then via policy, we find the action to take.
After executing the action, through the Bellman equation we find the Q-value target and replace it with the Q-values already calculated in place of the chosen action. Finally, we optimize the neural network. The pseudocode is:

For the real optimization of the neural network, we must identify a function to minimize. This is called cost function (or even loss function), is usually referred to with the letter J or C, which as parameters has an input vector s, and a vector of output target q∗ . its purpose is to say how far apart are the prediction of the input from the target.
There are many types and the most common which I used is the MSE (mean square error) and which is defined as

Our goal is to minimize this function by varying W, thus:

Note that to get the mean square error we should not divide everything by 2, but by the length of A_l , but since our goal is to minimize this function, the result will be the same and when we divide everything by 2, it will be easier to calculate the partial derivative that we will see below.
Now, to solve this optimization problem, we will use an algorithm called gradient descent.

The weights are initialized with random values (several distributions can be followed), and according to the partial derivatives

of the cost function with respect to each weight (which corresponds to the error of that weight).

The algorithm varies the weights to minimize the cost function.
As an example: if the derivative is negative, it means that a value of the weight that’s greater will diminish the cost function.
The optimization happens therefore in the following way:

where α is the learning rate.
If a is too low the optimization is slow and if too high the weights will diverge.
So to find the right learning rate, it is better to start from a low one and gradually increase.

¿Cómo calculamos la derivada parcial para cada peso?
Una forma eficiente es utilizar el algoritmo de retropropagación , que propaga el error en la red neuronal, desde la capa de salida a la capa de entrada, aprovechando la regla de la cadena que nos permite calcular la derivada de funciones compuestas. No entraremos en detalles sobre este algoritmo.

En las siguientes secciones, veremos 3 optimizaciones que implementé y usé en el proyecto adjunto, y luego habrá un ejemplo en pseudocódigo.

4.3 Descenso de gradiente con impulso

Uno de los riesgos del descenso de gradiente es que bloquea la optimización en un mínimo local.
Aunque hay muchos otros algoritmos alternativos más eficientes a este, por simplicidad utilicé el “descenso de gradiente con impulso”, que logra evitar algunos mínimos locales y acelerar el proceso de optimización.

Se basa en actualizar cada peso no según su derivada sino según la media ponderada de sus derivadas calculadas en el tiempo, dando más peso a las más recientes (el “cuánto” más peso lo ajusta un parámetro llamado impulso ).

4.4 Memoria de repetición

En cada paso, la actualización de los pesos de la red neuronal puede variar las predicciones de la red demasiado rápido y, por lo tanto, empeorarlas porque cada actualización, dado un estado, también influirá en la predicción de los valores Q de todos los demás estados. Una solución es memorizar las instrucciones para optimizar la red (estado, acción, recompensa, hecho y siguiente estado) en una memoria llamada memoria de repetición (o también repetición de experiencia), y también para algunos pasos, actualizar la red siguiendo algunas instrucciones al azar. extraído de la memoria de reproducción (este número se denomina tamaño de lote).
En general, la actualización de la red neuronal con el "descenso de gradiente con impulso" con mini lotes (un mini lote es una serie de instrucciones tomadas de la memoria de reproducción), se denomina "Descenso de gradiente de mini lotes con impulso ”.

Una limitación de la repetición de la experiencia es dar igual importancia a las predicciones que quizás sean secundarias, con predicciones que quizás sean esenciales para que el agente aprenda; una posible optimización se llama “repetición de experiencia priorizada”, en la que no profundizaremos.

4.5 Red objetivo

Para que la optimización sea más estable, es necesario utilizar una red objetivo , que es una red neuronal estructuralmente idéntica a la principal, su diferencia es que en la actualización de un mini lote, la predicción de los valores Q posteriores ( del que se derivan los valores Q de destino) es computado por la red de destino, y los pesos se optimizan solo en la red neuronal principal, y cada pocos pasos los pesos de la red de destino se sincronizan con los de la red neuronal principal.

4.6 Ejemplo de un agente en pseudocódigo

Ahora veamos un ejemplo de una función de pseudocódigo de un agente DQN, es decir, una red Q profunda y la realización de un episodio.
El algoritmo bandit utilizado es epsilon decay, para la optimización se utiliza el algoritmo de descenso de gradiente de mini lotes con impulso (la retropropagación real se realiza en la función "tren" de la red neuronal).
Todo el código completo de la red neuronal se encuentra en el proyecto adjunto.

4.7 aplicación con carpole

En la aplicación adjunta realicé un pequeño proyecto de Q-learning profundo con el cartpole.
Usé los siguientes parámetros:

  • Tamaño máximo de la memoria de reproducción = 10000
  • Tamaño del lote = 30
  • factor de descuento = 0,99
  • Tasa de aprendizaje = 0.0001
  • Número de pasos para sincronizar la red de destino = 10
  • Desintegración épsilon = 0,99
  • épsilon mínimo = 0,01
  • Momento = 0.4
  • Para la red neuronal, utilicé 4 capas en total, con 4, 50, 100 y 2 neuronas respectivamente.
  • La función de activación en la primera neurona y la última es lineal, mientras que para las capas ocultas utilicé el ReLU con fugas.
  • Para la inicialización de los pesos utilicé una distribución uniforme con un mínimo de -0.5 y un máximo de 0.5

Puede notar que después del episodio 320, la recompensa total comienza a disminuir; este fenómeno se denomina “ interferencia catastrófica ”, y es un fenómeno típico de las redes neuronales utilizadas en el aprendizaje por refuerzo, provocado por el hecho de que nuevas optimizaciones pueden empeorar las realizadas anteriormente.
Entonces, después de haber insertado optimizaciones avanzadas temporalmente en los diversos episodios, es posible que la red neuronal ya no pueda predecir correctamente durante los primeros pasos de los episodios.
Este problema se puede eludir en el aprendizaje fuera de línea (donde la capacitación está separada de la evaluación, muy similar al aprendizaje fuera de la política) que es lo que hice, pero es grave en el aprendizaje en línea (no hay diferencia entre capacitación y evaluación) que es la base de una inteligencia artificial general.

Para la evaluación (es decir, la evaluación de los resultados), obviamente utilicé la política óptima y, a continuación, calculé la distribución de las recompensas totales en una gran cantidad de episodios, donde se puede ver no solo una especie de Gaussiana aproximada sino también una tendencia a terminar el episodio entre 475 y 500 recompensas totales. Esto también depende en gran medida del medio ambiente.
sin embargo, tenga en cuenta que la recompensa total nunca supera los 500 porque es el máximo que se puede lograr en este entorno, después de lo cual finaliza el episodio, la línea verde discontinua es el promedio (388,6).

5 Q-learning distribuido profundo

El curso "CME 323: Optimización y algoritmos distribuidos" de Stanford en 2015 propuso aquí un algoritmo de Deep Q-learning distribuido basado en el algoritmo Downpour SGD, que es una variante asíncrona del descenso de gradiente. Este algoritmo define un servidor y trabajadores, representados en la siguiente figura:

fuente aquí

donde p son los pesos.

5.1 Trabajadores

Cada trabajador trabaja de forma asincrónica e independiente de los demás y tiene la tarea de solicitar al servidor los pesos más actualizados, manteniendo una red de destino local que generará datos para insertar en la memoria de reproducción, que también se mantiene localmente para calcular los gradientes con mini -lotes y enviarlos al final del mini-lote al servidor.

5.2 Servidor

El servidor que mantiene los pesos de la red neuronal localmente es responsable de proporcionarlos a los trabajadores cuando los requieren y también de actualizar los pesos con los gradientes que reciben.

5.3 Escalabilidad

Inicialmente la escalabilidad es horizontal, agregando así trabajadores que no solo potencian el aprendizaje sino que también aumentan la estabilidad.

Uno de los riesgos es que el servidor puede ser demasiado lento para responder a los trabajadores.
Una solución puede ser aumentar el tamaño del lote y hacer que la comunicación de gradientes sea menos frecuente, o escalar el servidor verticalmente, actualizar el hardware o aumentar el ancho de banda.

Otro riesgo es que, dada la alta frecuencia de actualizaciones de peso en el servidor, los trabajadores pueden utilizar un modelo obsoleto que ralentiza el aprendizaje.
Una solución puede ser usar optimizadores llamados "métodos de tasa de aprendizaje adaptativo", como RMSprop o AdaGrad.

Adjunto archivo

Conclusión

Hice este artículo inicialmente en italiano para un proyecto escolar, luego lo traduje al inglés con algunas ligeras correcciones.

No soy un experto y tomo todo esto con pinzas. Es solo mi consideración con mi muy poca experiencia. Por esta razón, las consideraciones, mejoras o críticas son bienvenidas en los comentarios.

Fuentes

  1. http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture14.pdf
  2. https://spinningup.openai.com/en/latest/spinningup/rl_intro.html
  3. https://en.wikipedia.org/wiki/Reinforcement_learning
  4. https:///@qempsil0914/zero-to-one-deep-q-learning-part1-basic-introduction-and-implementation-bb7602b55a2c
  5. https://towardsdatascience.com/reinforcement-learning-concept-on-cart-pole-with-dqn-799105ca670
  6. https://towardsdatascience.com/deep-q-network-dqn-ii-b6bf911b6b2c
  7. https://towardsdatascience.com/a-beginners-guide-to-q-learning-c3e2a30a653c
  8. https://www.allaboutcircuits.com/technical-articles/how-many-hidden-layers-and-hidden-nodes-does-a-neural-network-need
  9. https:///@shrutijadon/survey-on-activation-functions-for-deep-learning-9689331ba092
  10. https://stanford.edu/~rezab/classes/cme323/S15/projects/deep_Qlearning_report.pdf
  11. https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/
  12. https://intellabs.github.io/coach/components/agents/index.html
  13. Mohit Sewak. Aprendizaje por refuerzo profundo: fronteras de la inteligencia artificial. 2019.

© Copyright 2021 - 2023 | unogogo.com | All Rights Reserved