40 votos

¿Cómo se diferencia la función de coste de la Regresión Logística

Estoy haciendo el curso de Machine Learning Stanford en Coursera.

En el capítulo sobre Regresión Logística, la función de coste es ésta: enter image description here

Entonces, se diferencia aquí: enter image description here

Intenté obtener la derivada de la función de coste, pero obtuve algo completamente diferente.

¿Cómo se obtiene la derivada?

¿Cuáles son los pasos intermedios?

55voto

Antoni Parellada Puntos 2762

Adaptado de los apuntes del curso, que no veo disponibles (incluyendo esta derivación) fuera de los apuntes aportados por los alumnos dentro de la página de Curso de aprendizaje automático de Coursera de Andrew Ng .


En lo que sigue, el superíndice $(i)$ denota medidas individuales o "ejemplos" de formación.

$\small \frac{\partial J(\theta)}{\partial \theta_j} = \frac{\partial}{\partial \theta_j} \,\frac{-1}{m}\sum_{i=1}^m \left[ y^{(i)}\log\left(h_\theta \left(x^{(i)}\right)\right) + (1 -y^{(i)})\log\left(1-h_\theta \left(x^{(i)}\right)\right)\right] \\[2ex]\small\underset{\text{linearity}}= \,\frac{-1}{m}\,\sum_{i=1}^m \left[ y^{(i)}\frac{\partial}{\partial \theta_j}\log\left(h_\theta \left(x^{(i)}\right)\right) + (1 -y^{(i)})\frac{\partial}{\partial \theta_j}\log\left(1-h_\theta \left(x^{(i)}\right)\right) \right] \\[2ex]\Tiny\underset{\text{chain rule}}= \,\frac{-1}{m}\,\sum_{i=1}^m \left[ y^{(i)}\frac{\frac{\partial}{\partial \theta_j}h_\theta \left(x^{(i)}\right)}{h_\theta\left(x^{(i)}\right)} + (1 -y^{(i)})\frac{\frac{\partial}{\partial \theta_j}\left(1-h_\theta \left(x^{(i)}\right)\right)}{1-h_\theta\left(x^{(i)}\right)} \right] \\[2ex]\small\underset{h_\theta(x)=\sigma\left(\theta^\top x\right)}=\,\frac{-1}{m}\,\sum_{i=1}^m \left[ y^{(i)}\frac{\frac{\partial}{\partial \theta_j}\sigma\left(\theta^\top x^{(i)}\right)}{h_\theta\left(x^{(i)}\right)} + (1 -y^{(i)})\frac{\frac{\partial}{\partial \theta_j}\left(1-\sigma\left(\theta^\top x^{(i)}\right)\right)}{1-h_\theta\left(x^{(i)}\right)} \right] \\[2ex]\Tiny\underset{\sigma'}=\frac{-1}{m}\,\sum_{i=1}^m \left[ y^{(i)}\, \frac{\sigma\left(\theta^\top x^{(i)}\right)\left(1-\sigma\left(\theta^\top x^{(i)}\right)\right)\frac{\partial}{\partial \theta_j}\left(\theta^\top x^{(i)}\right)}{h_\theta\left(x^{(i)}\right)} - (1 -y^{(i)})\,\frac{\sigma\left(\theta^\top x^{(i)}\right)\left(1-\sigma\left(\theta^\top x^{(i)}\right)\right)\frac{\partial}{\partial \theta_j}\left(\theta^\top x^{(i)}\right)}{1-h_\theta\left(x^{(i)}\right)} \right] \\[2ex]\small\underset{\sigma\left(\theta^\top x\right)=h_\theta(x)}= \,\frac{-1}{m}\,\sum_{i=1}^m \left[ y^{(i)}\frac{h_\theta\left( x^{(i)}\right)\left(1-h_\theta\left( x^{(i)}\right)\right)\frac{\partial}{\partial \theta_j}\left(\theta^\top x^{(i)}\right)}{h_\theta\left(x^{(i)}\right)} - (1 -y^{(i)})\frac{h_\theta\left( x^{(i)}\right)\left(1-h_\theta\left(x^{(i)}\right)\right)\frac{\partial}{\partial \theta_j}\left( \theta^\top x^{(i)}\right)}{1-h_\theta\left(x^{(i)}\right)} \right] \\[2ex]\small\underset{\frac{\partial}{\partial \theta_j}\left(\theta^\top x^{(i)}\right)=x_j^{(i)}}=\,\frac{-1}{m}\,\sum_{i=1}^m \left[y^{(i)}\left(1-h_\theta\left(x^{(i)}\right)\right)x_j^{(i)}- \left(1-y^{i}\right)\,h_\theta\left(x^{(i)}\right)x_j^{(i)} \right] \\[2ex]\small\underset{\text{distribute}}=\,\frac{-1}{m}\,\sum_{i=1}^m \left[y^{i}-y^{i}h_\theta\left(x^{(i)}\right)- h_\theta\left(x^{(i)}\right)+y^{(i)}h_\theta\left(x^{(i)}\right) \right]\,x_j^{(i)} \\[2ex]\small\underset{\text{cancel}}=\,\frac{-1}{m}\,\sum_{i=1}^m \left[y^{(i)}-h_\theta\left(x^{(i)}\right)\right]\,x_j^{(i)} \\[2ex]\small=\frac{1}{m}\sum_{i=1}^m\left[h_\theta\left(x^{(i)}\right)-y^{(i)}\right]\,x_j^{(i)} $


La derivada de la función sigmoidea es

$\Tiny\begin{align}\frac{d}{dx}\sigma(x)&=\frac{d}{dx}\left(\frac{1}{1+e^{-x}}\right)\\[2ex] &=\frac{-(1+e^{-x})'}{(1+e^{-x})^2}\\[2ex] &=\frac{e^{-x}}{(1+e^{-x})^2}\\[2ex] &=\left(\frac{1}{1+e^{-x}}\right)\left(\frac{e^{-x}}{1+e^{-x}}\right)\\[2ex] &=\left(\frac{1}{1+e^{-x}}\right)\,\left(\frac{1+e^{-x}}{1+e^{-x}}-\frac{1}{1+e^{-x}}\right)\\[2ex] &=\sigma(x)\,\left(\frac{1+e^{-x}}{1+e^{-x}}-\sigma(x)\right)\\[2ex] &=\sigma(x)\,(1-\sigma(x)) \end{align}$

14voto

Para evitar la impresión de excesiva complejidad del asunto, veamos simplemente la estructura de la solución.

Simplificando y abusando de la notación, dejemos que $G(\theta)$ sea un término en la suma de $J(\theta)$ y $h = 1/(1+e^{-z})$ es una función de $z(\theta)= x \theta $ : $$ G = y \cdot \log(h)+(1-y)\cdot \log(1-h) $$

Podemos utilizar la regla de la cadena: $\frac{d G}{d \theta}=\frac{d G}{d h}\frac{d h}{d z}\frac{d z}{d \theta}$ y resolverlo uno a uno ( $x$ y $y$ son constantes).

$$\frac{d G}{\partial h} = \frac{y} {h} - \frac{1-y}{1-h} = \frac{y - h}{h(1-h)} $$ Para la sigmoidea $\frac{d h}{d z} = h (1-h) $ se mantiene, que no es más que un denominador de la afirmación anterior.

Finalmente, $\frac{d z}{d \theta} = x $ .

Combinando todos los resultados se obtiene la expresión buscada: $$\frac{d G}{d \theta} = (y-h)x $$ Espero que eso ayude.

2voto

Yaoshiang Puntos 31

Para aquellos de nosotros que no son tan fuertes en el cálculo, pero le gustaría jugar con el ajuste de la función de costo y la necesidad de encontrar una manera de calcular las derivadas ... un atajo para volver a aprender el cálculo es esta herramienta en línea para proporcionar automáticamente la derivación, con explicaciones paso a paso de la regla.

https://www.derivative-calculator.net

Example of deriving cost function of sigmoid activation in logistic regression

1voto

user3059024 Puntos 133

El mérito de esta respuesta es de Antoni Parellada de los comentarios, que creo que merece un lugar más destacado en esta página (ya que me ayudó cuando muchas otras respuestas no lo hicieron). Además, no se trata de una derivación completa, sino más bien de una exposición clara de $\frac{\partial J(\theta)}{\partial \theta}$ . (Para la derivación completa, ver las otras respuestas).

$$\frac{\partial J(\theta)}{\partial \theta} = \frac{1}{m} \cdot X^T\big(\sigma(X\theta)-y\big)$$

donde

\begin{equation} \begin{aligned} X \in \mathbb{R}^{m\times n} &= \text{Training example matrix} \\ \sigma(z) &= \frac{1}{1+e^{-z}} = \text{sigmoid function} = \text{logistic function} \\ \theta \in \mathbb{R}^{n} &= \text{weight row vector} \\ y &= \text{class/category/label corresponding to rows in X} \end{aligned} \end{equation}

También, una implementación en Python para aquellos que quieran calcular el gradiente de $J$ con respecto a $\theta$ .

import numpy
def sig(z):
return 1/(1+np.e**-(z))

def compute_grad(X, y, w):
    """
    Compute gradient of cross entropy function with sigmoidal probabilities

    Args: 
        X (numpy.ndarray): examples. Individuals in rows, features in columns
        y (numpy.ndarray): labels. Vector corresponding to rows in X
        w (numpy.ndarray): weight vector

    Returns: 
        numpy.ndarray 

    """
    m = X.shape[0]
    Z = w.dot(X.T)
    A = sig(Z)
    return  (-1/ m) * (X.T * (A - y)).sum(axis=1)

0voto

Pim Jager Puntos 20018

Otra presentación, con notación matricial.

Preparación: $\sigma(t)=\frac{1}{1+e^{-t}}$ tiene $\frac{d \ln \sigma(t)}{dt}=\sigma(-t)=1-\sigma(t)$ por lo que $\frac{d \sigma}{dt}=\sigma(1-\sigma)$ y por lo tanto $\frac{d \ln (1- \sigma)}{dt}=\sigma$ .

Utilizamos la convención en la que todos los vectores son vectores columna. Sea $X$ sea la matriz de datos cuyas filas son los puntos de datos $x_i^T$ . Utilizando la convención de que una función escalar que se aplica a un vector se aplica a la entrada, tenemos

$$mJ(\theta)=\sum_i -y_i \ln \sigma(x_i^T\theta)-(1-y_i) \ln (1-\sigma(x_i^T\theta))=-y^T \ln \sigma (X\theta)-(1^T-y^T)\ln(1-\sigma)(X\theta).$$

Ahora la derivada (jacobiano, vector fila) de $J$ con respecto a $ \theta$ se obtiene utilizando la regla de la cadena y observando que para la matriz $M$ , vector columna $v$ y $f$ actuando de entrada tenemos $D_v f(Mv)=\text{diag}(f'(Mv))M$ . El cálculo es el siguiente:

$$m D_\theta J= -y^T [\text{diag}((1-\sigma)(X\theta))] X-(1^T-y^T) [\text{diag}(-\sigma(X\theta))]X=$$ $$=-y^TX+1^T[\text{diag}(\sigma(X\theta))]X=-y^TX+(\sigma(X\theta))^TX.$$

Finalmente, el gradiente es

$$\nabla_\theta J=(D_\theta J)^T=\frac{1}{m}X^T(\sigma(X\theta)-y)$$

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X