|

Cost Function, Loss function y Gradient Descent. La base para entenderlo todo

Conociendo estos tres conceptos se entiende cómo se entrena cualquier algoritmo de Machine Learning.

¿Quieres saber cuánto vale tu piso?

Imaginemos que queremos desarrollar un algoritmo que, conociendo los metros cuadrados de un piso de la zona en la que vivimos, devuelva el precio aproximado de venta. Lo primero que haremos será visitar varias inmobiliarias y registrar los metros cuadrados de cada uno y su precio de venta. El resultado sería este:

Parece que la relación entre los metros cuadrados y el precio de cada sigue una línea recta, así que lo ideal sería utilizar un modelo de regresión lineal que pase lo más cerca posible de todos los puntos:

Al ser el algoritmo una recta, el precio vendrá determinado por la siguiente expresión:

[latexpage]
\begin{equation}
   f_{w,b}(x)=b+w*x
\end{equation}
Siendo:

  • $b$ y $w$ dos parámetros que representan el precio mínimo de venta (que podría asimilarse al del terreno) y el incremento en € por cada metro cuadrado de piso
  • $x$ los metros cuadrados de cada piso

Ahora la pregunta es… ¿cómo se encuentran los valores de $w$ y $b$ de la recta que pasa más cerca de todos los puntos?

Función de pérdida y función de coste (loss function y cost function)

Si tuviéramos que decir qué recta sería la mejor para nuestro modelo de las 3 siguientes, está claro que sería la segunda. Sin embargo, llegamos a esta conclusión de forma visual. ¿Cómo podríamos enseñar a un algoritmo a elegir la recta 2, en vez de la 1 o la 3?

Para responder a esta pregunta, empecemos por responder a esta otra: ¿cuál sería el error que se comete en una sola predicción?

\begin{equation}
   f_{w,b}(x)-y_i
\end{equation}

Donde:

  • $f_{w,b}(x)$ es el valor de la predicción
  • $y_i$ el valor real

Si quisiera penalizar los grandes errores, puedo elevar al cuadro la diferencia anterior:

\begin{equation}
   (f_{w,b}(x)-y_i)^2
\end{equation}

Ahora, puede ser que el error de un modelo sea muy elevado en una predicción en concreto pero muy exacto con el resto, así que para valorar la precisión total se puede calcular el promedio de todos los casos de la siguiente manera:

\begin{equation}
   J_{w,b}=\frac1 {2m}\sum_{i=1}^{m}(f_{w,b}(x)-y_i)^2
\end{equation}

En este caso:

  • A la fórmula que determina el error cometido en una predicción (la 3) se le llama ‘función de pérdida’ (o loss function)
  • A la que permite obtener el error medio cometido en todas las predicciones se le llama ‘función de coste’ (o cost function)

Sustituyendo el valor de la función 1 en la 4

\begin{equation}
   J_{w,b}=\frac1 {2m}\sum_{i=1}^{m}((b+w·x)-y_i)^2
\end{equation}

se consigue una función de dos variables: $b$ y $w$. Como se quiere que el error cometido sea el mínimo posible, el objetivo será obtener dos valores tal que el error promedio cometido (o cost function) sea el menor posible. En la siguiente imagen se puede observar que para cada valor de $b$ y $w$ existe un coste asociado (J(w,b)), dando lugar a un gráfico en 3D parecido al siguiente:

Cost function (fuente: Curso Machine Learning de Andrew Ng)

De hecho, al elevar al cuadrado la diferencia entre el valor predicho y el real (fórmula 3), el gráfico 3D que se consigue la mayoría de las veces es convexo (en el ejemplo anterior no se acaba de apreciar porque la escala de b y w es diferente):

Cost function (fuente: Curso Machine Learning de Andrew Ng)

Ahora… ¿cómo se obtienen los valores óptimos de $w$ y $b$?

Gradient Descent

Para minimizar o maximizar una función, lo que nos han enseñado tradicionalmente es a utilizar derivadas, aunque existe otro método llamado Gradient Descent que es muy útil para conseguir el mismo resultado, ya que no requiere de cálculos matemáticos complejos, además se puede automatizar y es ideal cuando se quiere encontrar un mínimo de una función convexa como la vista anteriormente. El proceso es el siguiente:

  1. Empezar el proceso con dos valores w y b cualesquiera
  2. Modificar los valores w y b para reducir, poco a poco, el valor de $J_{w,b}(x)$. Matemáticamente se expresa de la siguiente manera:

$$
\begin{aligned}
\text{repetir}&\text{ hasta que converja:} \; \lbrace
\\
w &= w – \alpha \frac{\partial J(w,b)}{\partial w} \tag{6}
\\
b &= b – \alpha \frac{\partial J(w,b)}{\partial b}
\\
\; \lbrace
\end{aligned}
$$

donde

  • $\alpha$ es la tasa de aprendizaje (o learning rate), que mide cómo de grandes se quiere que sean los saltos entre los diferentes valores de w y b
  • $\frac{\partial J(w,b)}{\partial w}$ y $\frac{\partial J(w,b)}{\partial b}$ son las derivadas parciales respecto a w y b, y miden la dirección de mayor cambio para cada uno de les ejes w y b
    3) A medida que se van actualizando los valores de w y b, el coste disminuye, por lo que se realiza el proceso de forma iterativa hasta que, a pesar de continuar recalculando los valores el coste no se modifique. En este momento se habrán encontrado los valores de w y b que generan el menor coste posible. A esto se le llama converger.

Conclusiones

El machine learning permite que las máquinas aprendan por si mismas de los datos de entrenamiento, ¿pero cómo se consigue?. Como se ha visto, teniendo en cuenta tres conceptos: loss function, cost function y Gradient Descent. Además, esta forma de aprender no es única del algoritmo de regresión lineal como el del ejemplo, sino que se aplica al resto, por lo que conocer cómo funcionan es la base para entender cualquiera de ellos.

Fuentes

https://www.deeplearning.ai/courses/machine-learning-specialization/


Últimas entradas