Explicación adaptada del curso de Andrew NG sobre Machine Learning en Coursera.
1. Introducción
La regresión logística es una regresión usada para clasificación. En este caso de estudio, la clasificación será en dos categorías.
La salida de la regresión logística es:
\begin{aligned} \widehat{y} = \sigma(w^T x + b) \end{aligned}
donde
\sigma(z) = \frac{1}{1+e^{-z}}
x
es el vector de entrada de características (por ejemplo, si la entrada corresponde a una imagen, entonces x
es un vector compuesto por cada uno de los valores de los tres canales de color de los pixeles);
es la predicción del algoritmo, es decir, la estimación de \widehat{y}
y
; w
es el vector de pesos y b
es el sesgo (bias) de la neurona.
2. ¿Cómo funciona la regresión logística?
Para hacerlo más claro, veamos el siguiente diagrama de ejemplo en donde la entrada es una imagen. En este caso el objetivo de la regresión logística es determinar si la imagen corresponde o no a un gato (clasificación). En primer lugar, la imagen es convertida a un vector (de tamaño [px_high x px_width x 3,1]), luego el valor de cada canal de cada pixel es normalizado (dividido entre 255) y posteriormente asignado a un elemento del vector x
. En el diagrama, la imagen tiene tamaño 64 x 64 px. Cada elemento del vector x
es multiplicado por un peso w
y después se suma el valor de b
. Dependiendo del valor de \widehat{y}
, la regresión logística (neurona) clasifica la imagen como gato o no gato.
IMAGEN
Debe tenerse en cuenta que este proceso se lleva a cabo con cada una de las imágenes de entrenamiento.
Por tanto, los parámetros de la regresión logística son un vector w
de tamaño (num_px x num_px x 3, 1) y b
que es un número real.
\begin{aligned} x & \in \Re^{n_x}, donde \ n_x=num\_px \times num\_px \times 3\\ w & \in \Re^{n_x}\\ b & \in \Re \end{aligned}
Como es costumbre, tenemos un conjunto de entrenamiento (comúnmente llamado training set) compuesto en este caso por m
ejemplos:
\{(x^{(1)},y^{(1)}), \dots (x^{(m)},y^{(m)})\}
en donde cada uno de los x^{(i)}
tiene dimensiones (n_x,1)
, y queremos encontrar los parámetros w
y b
tales que, al menos en el training set, \widehat{y}^{(i)}\approx y^{(i)}
; y^{(i)}
corresponde a la etiqueta de cada imagen de entrenamiento, indicando si es o no un gato.
Como tenemos m
ejemplos en el training set, tendremos m
predicciones de nuestra regresión logística. Es decir, tendremos una predicción para cada uno de los ejemplos:
\begin{aligned} \widehat{y}^{(i)} &= \sigma(w^T x^{(i)} + b)\\ \sigma(z^{(i)}) &= \frac{1}{1+e^{-z^{(i)}}} \end{aligned}
donde z^{(i)} = w^T x^{(i)} + b
Para cada uno de los ejemplos tenemos una Loss o error function para saber qué tan bien predice nuestro algoritmo, la cual viene determinada por:
L(\widehat{y},y) = -(ylog\widehat{y} + (1-y)log(1-\widehat{y}))
De manera similar, la Cost function mide qué tan bien funciona el algoritmo en TODO el conjunto de entrenamiento:
\begin{aligned} J(w,b) & = \frac{1}{m}\sum_{i=1}^m{L(\widehat{y}^{(i)},y^{(i)})}\\ J(w,b) & = -\frac{1}{m}\sum_{i=1}^m{(y^{(i)}log\widehat{y}^{(i)} + (1-y^{(i)})log(1-\widehat{y}^{(i)}))} \end{aligned}
3. Optimización de los parámetros de la regresión logística
Por otro lado, tenemos el algoritmo de gradiente descendente para entrenar la regresión logística, es decir, para aprender los parámetros w
y b
de acuerdo al conjunto de entrenamiento de tal manera que minimicen la función de costo J
.
El algoritmo de gradiente descendente nos permite actualizar los parámetros de la siguiente manera:
\begin{aligned} w & = w - \alpha\frac{\partial J(w,b)}{\partial w}\\ b & = b - \alpha\frac{\partial J(w,b)}{\partial b} \end{aligned}
en donde \alpha
es la tasa de aprendizaje o learning rate y el segundo factor del segundo término es la derivada parcial de la Cost function con respecto a w
y b
.
Entonces, para ir resumiendo, el proceso para encontrar los valores óptimos dew
yb
tiene dos partes:
- La propagación hacia adelante o forward propagation, en la que obtenemos la salida de la regresión logística
\widehat{y}
- La propagación hacia atrás o backward propagation, en la que se aplica el gradiente descendente y actualizamos los parámetros
w
yb
.
Recapitulemos nuevamente. Si nuestro conjunto de entrenamiento tiene mil imágenes, con cada una de ellas obtenemos un valor para \widehat{y}
y un valor para la Loss function L(\widehat{y},y)
. De todo este conjunto de entrenamiento obtendremos un valor para la Cost function J(w,b)
y podremos realizar UNA actualización de los valores de w
yb
por medio del algoritmo de gradiente descendente.
El proceso descrito en el párrafo anterior debemos hacerlo muchas veces con el objetivo de minimizar la Cost function.
¿Cómo sabemos cuándo parar? Bueno, cuando parezca que el valor de la Cost function no disminuye más (es decir, cuando hayamos encontrado su mínimo -o al menos eso parezca-)
4. ¿Cómo funciona el algoritmo de gradiente descendente?
Vamos a usar una gráfica computacional (computation graph) para entenderlo mejor. Usaremos una función de costo más sencilla que la de una regresión logística.
\begin{aligned} J(a,b,c) & =3(a+bc)\\ u & = bc\\ V & = a + u \\ J & = 3V\\ \end{aligned}
IMAGEN
Entonces, el algoritmo de gradiente descendente usa la regla de la cadena de la derivación para poder hallar cómo afectan los parámetros w
yb
a la función de costo J(w,b)
. Una vez halla estas derivadas parciales, actualiza los valores de los parámetros moviéndolos en el sentido opuesto del gradiente (de la máxima variación) para poder minimizar la función de costo.
En el caso de este ejemplo simplificado, los parámetros vendrían siendo las variables
y a,b
. Por tanto, para hallar cómo su variación afecta a c
J
tendríamos que hacer lo siguiente:
\begin{aligned} \frac{\partial J(a,b,c)}{\partial V} & = 3\\ \frac{\partial J(a,b,c)}{\partial a} & = \frac{\partial J(a,b,c)}{\partial V} \times \frac{\partial V(a,u)}{\partial a} = 3 \times 1 = 3\\ \frac{\partial J(a,b,c)}{\partial u} & = \frac{\partial J(a,b,c)}{\partial V} \times \frac{\partial V(a,u)}{\partial u} = 3 \times 1 = 3\\ \frac{\partial J(a,b,c)}{\partial b} & = \frac{\partial J(a,b,c)}{\partial V} \times \frac{\partial V(a,u)}{\partial u} \times \frac{\partial u(b,c)}{\partial b} = 3 \times 1 \times c = 3c\\ \frac{\partial J(a,b,c)}{\partial c} & = \frac{\partial J(a,b,c)}{\partial V} \times \frac{\partial V(a,u)}{\partial u} \times \frac{\partial u(b,c)}{\partial b} = 3 \times 1 \times b = 3b \end{aligned}