Por qué el descenso del gradiente se volvió estocástico

, vamos a discutir no solo cómo sino también por qué se utilizan el descenso de gradiente y el descenso de gradiente estocástico.

Ya sabemos acerca de la regresión lineal y recientemente escribí sobre ella en el contexto de vectores y proyecciones.

Ahora intentaremos comprender el descenso de gradiente con la ayuda de un problema de regresión lineal.

Pero antes de eso, sólo quiero recordar brevemente lo que ya sabemos sobre la regresión lineal y las matemáticas detrás de ella, para que a cualquiera que esté empezando le resulte fácil seguirla.

Si ya conoce las matemáticas básicas detrás de la regresión lineal, puede comenzar directamente desde la sección titulada ¿Por qué necesitamos el descenso de gradiente?

Digamos que comenzamos nuestro viaje de aprendizaje automático y lo primero que hicimos fue implementar un modelo de regresión lineal usando Python.

Lo implementamos con éxito y obtuvimos los mejores valores para la pendiente y la intersección.

Ahora tenemos una pregunta: ¿Qué está pasando realmente detrás de este algoritmo?

Queremos entender las matemáticas detrás de esto.

Resumen de regresión lineal

Para eso, consideremos estos datos.

Imagen por autor

Ahora queremos entender las matemáticas detrás del algoritmo.

Imagen por autor

Nos encontramos con estas fórmulas para la pendiente y la intersección.

[
beta_1 = frac{sum_{i=1}^{n} (x_i – bar{x})(y_i – bar{y})}{sum_{i=1}^{n} (x_i – bar{x})^2}
]

[
beta_0 = bar{y} – beta_1bar{x}
]

Ahora, usando estas fórmulas calculamos la pendiente y la intersección.

La ecuación de regresión lineal simple es:

[
sombrero{y}
=
beta_0+beta_1x
]

La fórmula de la pendiente es:

[
beta_1
=
frac{
sum_{i=1}^{n}(x_i-bar{x})(y_i-bar{y})
{}
sum_{i=1}^{n}(x_i-bar{x})^2
}
]

La fórmula de intersección es:

[
beta_0
=
bar{y}
–
beta_1bar{x}
]

El conjunto de datos es:

[
x=
[1.2,1.4,1.6,2.1,2.3,3.0,3.1,3.3,3.3,3.8]
] [
y=
[39344,46206,37732,43526,39892,56643,60151,54446,64446,57190]
]

Calcule la media de x:

[
bar{x}
=
frac{1,2+1,4+1,6+2,1+2,3+3,0+3,1+3,3+3,3+3,8}{10}
] [
bar{x}
=
frac{25.1}{10}
=
2.51
]

Calcule la media de y:

[
bar{y}
=
frac{
39344+46206+37732+43526+39892+56643+60151+54446+64446+57190
{10}
] [
bar{y}
=
frac{499576}{10}
=
49957.6
]

Ahora calcula:

[
sum(x_i-bar{x})(y_i-bar{y})
]

Después de la sustitución y el cálculo:

[
sum(x_i-bar{x})(y_i-bar{y})
=
41663.44
]

Ahora calcula:

[
sum(x_i-bar{x})^2
]

Después del cálculo:

[
sum(x_i-bar{x})^2
=
4.619
]

Ahora calcula la pendiente:

[
beta_1
=
frac{41663.44}{4.619}
] [
beta_1
=
9020.66
]

Ahora calcula la intersección:

[
beta_0
=
49957,6-(9020,66)(2,51)
] [
beta_0
=
27315.74
]

Por lo tanto:

[
beta_0=27315,74
] [
beta_1=9020.66
]

Ecuación de regresión final:

[
sombrero{y}
=
27315,74+9020,66x
]

Obtuvimos los valores usando las fórmulas, pero no estamos satisfechos y queremos profundizar más.

Ahora nuestro objetivo es aprender cómo obtuvimos estas fórmulas.

Para entender esto, ahora veremos una curva de cuenco en 3D. Obtenemos esa curva de cuenco cuando trazamos todas las combinaciones posibles de β0beta_0​, β1beta_1 y el error cuadrático medio (MSE).

Imagen por autor

Ahora, al observar la curva, entendemos que necesitamos que el error cuadrático medio sea lo más bajo posible y que alcance su mínimo cuando el gradiente se vuelve cero.

Ya sabemos que para encontrar la pendiente de cualquier curva necesitamos diferenciación.

A continuación, realizamos la diferenciación de la función de pérdida, ya que la curva del cuenco es su representación 3D, y te das cuenta de que aquí tenemos dos variables.

Entonces, realizamos una derivación parcial y luego resolvemos más para obtener las fórmulas para la pendiente y la intersección.

Deducir las fórmulas para la pendiente y la intersección

Comience con la función de pérdida del error cuadrático medio (MSE):

[
MSE(beta_0,beta_1)
=
frac{1}{n}
sum_{i=1}^{n}
(y_i-(beta_0+beta_1x_i))^2
]

Reorganiza la expresión interior:

[
=
frac{1}{n}
sum_{i=1}^{n}
(y_i-beta_0-beta_1x_i)^2
]

Ahora tomamos la derivada parcial con respecto a ( beta_0 ):

[
frac{MSE parcial}{partial beta_0}
=
frac{partial}{partial beta_0}
izquierda(
frac{1}{n}
sum_{i=1}^{n}
(y_i-beta_0-beta_1x_i)^2
bien)
]

Tome constante afuera:

[
=
frac{1}{n}
frac{partial}{partial beta_0}
sum_{i=1}^{n}
(y_i-beta_0-beta_1x_i)^2
]

Mover la derivada dentro de la suma:

[
=
frac{1}{n}
sum_{i=1}^{n}
frac{partial}{partial beta_0}
(y_i-beta_0-beta_1x_i)^2
]

Aplicar regla de la cadena:

[
=
frac{1}{n}
sum_{i=1}^{n}
2(y_i-beta_0-beta_1x_i)
cdot
frac{partial}{partial beta_0}
(y_i-beta_0-beta_1x_i)
]

Aplicar reglas derivadas:

[
frac{d}{dbeta_0}(y_i)=0
] [
frac{d}{dbeta_0}(-beta_0)=-1
] [
frac{d}{dbeta_0}(-beta_1x_i)=0
]

Entonces la derivada interna queda:

[
frac{partial}{partial beta_0}
(y_i-beta_0-beta_1x_i)
=
-1
]

Sustituir de nuevo:

[
frac{MSE parcial}{partial beta_0}
=
frac{1}{n}
sum_{i=1}^{n}
2(y_i-beta_0-beta_1x_i)(-1)
]

Simplificar:

[
=
-frac{2}{n}
sum_{i=1}^{n}
(y_i-beta_0-beta_1x_i)
]

Establecer la derivada igual a cero:

[
-frac{2}{n}
sum_{i=1}^{n}
(y_i-beta_0-beta_1x_i)
=
0
]

Multiplica ambos lados por:

[
-frac{n}{2}
] [
sum_{i=1}^{n}
(y_i-beta_0-beta_1x_i)
=
0
]

Expandir:

[
sum_{i=1}^{n}y_i
–
nbeta_0
–
beta_1sum_{i=1}^{n}x_i
=
0
]

Arreglar de nuevo:

[
nbeta_0
=
sum_{i=1}^{n}y_i
–
beta_1sum_{i=1}^{n}x_i
]

Dividir por ( n ):

[
beta_0
=
frac{1}{n}sum_{i=1}^{n}y_i
–
beta_1
frac{1}{n}sum_{i=1}^{n}x_i
]

Usando medios:

[
bar{x}
=
frac{1}{n}sum_{i=1}^{n}x_i
] [
bar{y}
=
frac{1}{n}sum_{i=1}^{n}y_i
]

Fórmula de intersección final:

[
beta_0
=
bar{y}
–
beta_1bar{x}
]

Ahora tomamos la derivada parcial con respecto a ( beta_1 ):

[
frac{MSE parcial}{partial beta_1}
=
frac{partial}{partial beta_1}
izquierda(
frac{1}{n}
sum_{i=1}^{n}
(y_i-beta_0-beta_1x_i)^2
bien)
]

Tome constante afuera:

[
=
frac{1}{n}
frac{partial}{partial beta_1}
sum_{i=1}^{n}
(y_i-beta_0-beta_1x_i)^2
]

Mover la derivada dentro de la suma:

[
=
frac{1}{n}
sum_{i=1}^{n}
frac{partial}{partial beta_1}
(y_i-beta_0-beta_1x_i)^2
]

Aplicar regla de la cadena:

[
=
frac{1}{n}
sum_{i=1}^{n}
2(y_i-beta_0-beta_1x_i)
cdot
frac{partial}{partial beta_1}
(y_i-beta_0-beta_1x_i)
]

Aplicar reglas derivadas:

[
frac{d}{dbeta_1}(y_i)=0
] [
frac{d}{dbeta_1}(-beta_0)=0
] [
frac{d}{dbeta_1}(-beta_1x_i)=-x_i
]

Entonces la derivada interna queda:

[
frac{partial}{partial beta_1}
(y_i-beta_0-beta_1x_i)
=
-x_i
]

Sustituir de nuevo:

[
frac{MSE parcial}{partial beta_1}
=
frac{1}{n}
sum_{i=1}^{n}
2(y_i-beta_0-beta_1x_i)(-x_i)
]

Simplificar:

[
=
-frac{2}{n}
sum_{i=1}^{n}
x_i(y_i-beta_0-beta_1x_i)
]

Establecer la derivada igual a cero:

[
-frac{2}{n}
sum_{i=1}^{n}
x_i(y_i-beta_0-beta_1x_i)
=
0
]

Multiplica ambos lados por:

[
-frac{n}{2}
] [
sum_{i=1}^{n}
x_i(y_i-beta_0-beta_1x_i)
=
0
]

Expandir:

[
sum_{i=1}^{n}x_iy_i
–
beta_0sum_{i=1}^{n}x_i
–
beta_1sum_{i=1}^{n}x_i^2
=
0
]

Sustituto:

[
beta_0
=
bar{y}
–
beta_1bar{x}
]

en la ecuación:

[
sum_{i=1}^{n}x_iy_i
–
(bar{y}-beta_1bar{x})
sum_{i=1}^{n}x_i
–
beta_1sum_{i=1}^{n}x_i^2
=
0
]

Expandir:

[
sum_{i=1}^{n}x_iy_i
–
bar{y}sum_{i=1}^{n}x_i
+
beta_1bar{x}sum_{i=1}^{n}x_i
–
beta_1sum_{i=1}^{n}x_i^2
=
0
]

Desde:

[
sum_{i=1}^{n}x_i=nbar{x}
]

Sustituto:

[
sum_{i=1}^{n}x_iy_i
–
nbar{x}bar{y}
+
beta_1nbar{x}^2
–
beta_1sum_{i=1}^{n}x_i^2
=
0
]

Términos del grupo ( beta_1 ):

[
beta_1
(nbar{x}^2-sum_{i=1}^{n}x_i^2)
=
nbar{x}bar{y}
–
sum_{i=1}^{n}x_iy_i
]

Multiplica ambos lados por -1:

[
beta_1
(sum_{i=1}^{n}x_i^2-nbar{x}^2)
=
sum_{i=1}^{n}x_iy_i
–
nbar{x}bar{y}
]

Fórmula de pendiente final:

[
beta_1
=
frac{
sum_{i=1}^{n}x_iy_i
–
nbar{x}bar{y}
{}
sum_{i=1}^{n}x_i^2
–
nbar{x}^2
}
]

Forma de covarianza equivalente:

[
beta_1
=
frac{
sum_{i=1}^{n}(x_i-bar{x})(y_i-bar{y})
{}
sum_{i=1}^{n}(x_i-bar{x})^2
}
]

Finalmente, sustituya el valor calculado de ( beta_1 ) en la ecuación de intersección:

[
beta_0
=
bar{y}
–
beta_1bar{x}
]

Por tanto, la ecuación de regresión final queda:

[
sombrero{y}
=
beta_0
+
beta_1x
]

Ahora aprendimos cómo obtuvimos las fórmulas para la pendiente y la intersección.

Pero una cosa que debemos considerar aquí es que derivamos estas fórmulas para un caso en el que solo tenemos una característica, e incluso para una característica, podemos ver cuán complejas eran las matemáticas.

¿Qué pasa si tenemos más de una característica, como la mayoría de los conjuntos de datos del mundo real?

Las matemáticas se vuelven más complejas y aquí es donde usamos la forma matricial para representar las ecuaciones. Usando notación matricial, podemos derivar la ecuación normal, que se generaliza a cualquier número de características.

Derivando la ecuación normal

En Regresión Lineal Simple, derivamos una intersección y una pendiente:

[
sombrero{y}
=
beta_0+beta_1x
]

Sin embargo, los problemas del mundo real suelen contener múltiples características.

Por ejemplo:

años de experiencia
nivel educativo
edad

En tales casos, la regresión lineal se convierte en:

[
sombrero{y}
=
beta_0
+
beta_1x_1
+
beta_2x_2
+
beta_3x_3
+
cdots
+
beta_px_p
]

dónde:

( beta_0 ) es la intersección y
( beta_1,beta_2,beta_3,dots,beta_p ) son pendientes para diferentes características

A medida que aumenta el número de características, se vuelve difícil resolver ecuaciones separadas para cada parámetro.

Para resolver esto fácilmente, la regresión lineal se reescribe usando notación matricial.

Supongamos que tenemos ( n ) observaciones y ( p ) características.

Primero defina el vector objetivo:

[
Y
=
begin{bmatriz}
y_1\
y_2\
y_3\
vpuntos\
y_n
end{bmatriz}
]

Ahora defina la matriz de características.

La primera columna contiene solo unos para representar el término de intersección.

[
incógnita
=
begin{bmatriz}
1 & x_ {11} & x_ {12} & cdots & x_ {1p}\
1 & x_{21} & x_{22} & cdots & x_{2p}\
1 & x_{31} & x_{32} & cdots & x_{3p}\
vdots & vdots & vdots & ddots & vdots\
1 & x_ {n1} & x_ {n2} & cdots & x_ {np}
end{bmatriz}
]

Ahora defina el vector de parámetros:

[
beta
=
begin{bmatriz}
beta_0\
beta_1\
beta_2\
vpuntos\
beta_p
end{bmatriz}
]

Usando la multiplicación de matrices:

[
Xbeta
=
begin{bmatriz}
1 & x_ {11} & x_ {12} & cdots & x_ {1p}\
1 & x_{21} & x_{22} & cdots & x_{2p}\
1 & x_{31} & x_{32} & cdots & x_{3p}\
vdots & vdots & vdots & ddots & vdots\
1 & x_ {n1} & x_ {n2} & cdots & x_ {np}
end{bmatriz}
begin{bmatriz}
beta_0\
beta_1\
beta_2\
vpuntos\
beta_p
end{bmatriz}
]

Realizando la multiplicación:

[
=
begin{bmatriz}
beta_0+beta_1x_{11}+beta_2x_{12}+cdots+beta_px_{1p}\
beta_0+beta_1x_{21}+beta_2x_{22}+cdots+beta_px_{2p}\
beta_0+beta_1x_{31}+beta_2x_{32}+cdots+beta_px_{3p}\
vpuntos\
beta_0+beta_1x_{n1}+beta_2x_{n2}+cdots+beta_px_{np}
end{bmatriz}
]

Esto da el vector de predicción:

[
hat{Y}=Xbeta
]

Ahora defina el vector residual.

Los residuos son las diferencias entre los valores reales y previstos.

[
Y-hat{Y}
]

Sustituyendo:

[
YXbeta
]

El error cuadrático medio (MSE) se convierte en:

[
MSE
=
frac{1}{n}
(YXbeta)^T(YXbeta)
]

La transposición es necesaria porque:

[
(YXbeta)
]

es un vector de columna.

Multiplicar por su transpuesta convierte la expresión en una suma escalar de residuos al cuadrado.

Ahora expande la expresión.

[
MSE
=
frac{1}{n}
(YXbeta)^T(YXbeta)
] [
=
frac{1}{n}
izquierda(
Y^TY
–
Y^TXbeta
–
(Xbeta)^TY
+
(Xbeta)^TXbeta
bien)
]

Usando la propiedad de transposición:

[
(Xbeta)^T
=
beta^TX^T
]

Sustituye en la ecuación:

[
MSE
=
frac{1}{n}
izquierda(
Y^TY
–
Y^TXbeta
–
beta^TX^TY
+
beta^TX^TXbeta
bien)
]

Note que:

[
Y^TXbeta
]

es un escalar.

Los escalares son iguales a su transpuesta.

Por lo tanto:

[
Y^TXbeta
=
beta^TX^TY
]

Entonces los dos términos del medio se combinan:

[
MSE
=
frac{1}{n}
izquierda(
Y^TY
–
2beta^TX^TY
+
beta^TX^TXbeta
bien)
]

Para minimizar MSE, tome la derivada con respecto a ( beta ).

Derivado de:

[
Y^TY
]

es cero porque no contiene ( beta ).

Derivado de:

[
-2beta^TX^TY
]

se convierte en:

[
-2X^TY
]

Derivado de:

[
beta^TX^TXbeta
]

se convierte en:

[
2X^TXbeta
]

Por lo tanto:

[
frac{MSE parcial}{partial beta}
=
frac{1}{n}
izquierda(
-2X^TY
+
2X^TXbeta
bien)
]

Simplificar:

[
=
frac{-2}{n}X^TY
+
frac{2}{n}X^TXbeta
]

Establezca la derivada igual a cero para minimizarla:

[
frac{-2}{n}X^TY
+
frac{2}{n}X^TXbeta
=
0
]

Multiplica ambos lados por:

[
frac{n}{2}
] [
-X^TY
+
X^TXbeta
=
0
]

Arreglar de nuevo:

[
X^TXbeta
=
X^TY
]

Ahora multiplica ambos lados por:

[
(X^TX)^{-1}
] [
(X^TX)^{-1}X^TXbeta
=
(X^TX)^{-1}X^TY
]

Usando la propiedad de la matriz de identidad:

[
(X^TX)^{-1}(X^TX)=Yo
]

obtenemos:

[
yobeta
=
(X^TX)^{-1}X^TY
]

Desde:

[
Yobeta=beta
]

la ecuación normal final se convierte en:

[
beta
=
(X^TX)^{-1}X^TY
]

Esta ecuación calcula simultáneamente:

la intercepción
todas las pistas
los parámetros óptimos

que minimicen el error cuadrático medio.

En general, la ecuación normal se deriva minimizando la RSS (Suma Residual de Cuadrados). Sin embargo, dado que MSE es simplemente RSS dividido por el número de observaciones, minimizar MSE también produce la misma ecuación normal.

Ahora tenemos la ecuación normal. Resolvamos la pendiente y la interceptamos una vez más usando esta ecuación.

Resolviendo la pendiente y la intersección usando la ecuación normal

La forma matricial de la regresión lineal es:

[
beta=(X^TX)^{-1}X^TY
]

Construya la matriz de características.

La primera columna contiene unos para el término de intersección.

[
incógnita
=
begin{bmatriz}
1 y 1.2\
1 y 1.4\
1 y 1,6\
1 y 2.1\
1 y 2.3\
1 y 3.0\
1 y 3.1\
1 y 3.3\
1 y 3.3\
1 y 3.8
end{bmatriz}
]

Construya el vector objetivo:

[
Y
=
begin{bmatriz}
39344\
46206\
37732\
43526\
39892\
56643\
60151\
54446\
64446\
57190
end{bmatriz}
]

Vector de parámetros:

[
beta
=
begin{bmatriz}
beta_0\
beta_1
end{bmatriz}
]

Ahora calcula la transpuesta:

[
X^T
=
begin{bmatriz}
1 y 1 y 1 y 1 y 1 y 1 y 1 y 1 y 1 y 1\
1,2 y 1,4 y 1,6 y 2,1 y 2,3 y 3,0 y 3,1 y 3,3 y 3,3 y 3,8
end{bmatriz}
]

Calcular:

[
X^TX
=
begin{bmatriz}
10 y 25.1\
25,1 y 67,89
end{bmatriz}
]

Ahora calcula la inversa:

[
(X^TX)^{-1}
=
begin{bmatriz}
1,4547 y -0,5378\
-0,5378 y 0,2142
end{bmatriz}
]

Ahora calcula:

[
X^TY
=
begin{bmatriz}
493576\
1326200.7
end{bmatriz}
]

Sustituir en la ecuación normal:

[
beta
=
begin{bmatriz}
1,4547 y -0,5378\
-0,5378 y 0,2142
end{bmatriz}
begin{bmatriz}
493576\
1326200.7
end{bmatriz}
]

Después de la multiplicación:

[
beta
=
begin{bmatriz}
27315.02\
9020.93
end{bmatriz}
]

Por lo tanto:

[
beta_0=27315.02
] [
beta_1=9020.93
]

Ecuación de regresión final:

[
sombrero{y}
=
27315.02+9020.93x
]

¿Por qué necesitamos el descenso de gradiente?

Ahora, después de obtener la ecuación normal para la regresión lineal, podríamos pensar que podemos resolver los parámetros óptimos incluso cuando tenemos muchas características.

Pero una cosa que debemos observar aquí es que este método funciona bien sólo para conjuntos de datos pequeños o medianos. Cuando tenemos conjuntos de datos muy grandes, resolver la ecuación normal se vuelve computacionalmente costoso.

Veamos la ecuación normal:

[
beta = (X^TX)^{-1}X^Ty
]

A partir de la ecuación, podemos observar el cálculo inverso, y aquí es donde resolver la pendiente y la intercepción usando la ecuación normal se vuelve computacionalmente costoso.

Esto funciona bien para conjuntos de datos pequeños, pero en el mundo real, a menudo tenemos miles de funciones y millones de puntos de datos.

En tales casos, resolver la ecuación normal se vuelve lento y requiere mucha potencia computacional.

Aquí es donde se utiliza el descenso de gradiente, porque en lugar de buscar directamente la solución, avanzamos gradualmente hacia la solución óptima paso a paso.

Ahora, para entender cómo funciona el descenso de gradiente, veamos las matemáticas detrás de esto.

Las matemáticas detrás del descenso de gradientes

Cuando estábamos derivando la ecuación normal, llegamos a esta ecuación.

[
frac{MSE parcial}{partial beta}
=
frac{2}{n}X^T(Xbeta-Y)
]

Esta ecuación representa el gradiente (pendiente) de la curva de pérdida en forma de cuenco.

Lo igualamos a cero y luego resolvimos más para obtener la ecuación normal, que se usa para encontrar la solución óptima.

Pero en el descenso de gradiente, nos detenemos en esta ecuación e inicializamos algunos valores aleatorios para βbeta. Usando estos valores, calculamos el gradiente (pendiente) y avanzamos gradualmente hacia la pérdida mínima paso a paso.

Supongamos que inicializamos:

β0=2beta_0 = 2 y β1=5beta_1 = 5

[
beta^{(0)}=
begin{bmatriz}
beta_0 \
beta_1
end{bmatriz}
=
begin{bmatriz}
2 \
5
end{bmatriz}
]

A continuación, calculamos la pendiente de la curva del cuenco sustituyendo estos valores en la ecuación del gradiente.

Ya sabemos que la ecuación del gradiente es:

[
frac{MSE parcial}{partial beta}
=
frac{-2}{n}X^Ty
+
frac{2}{n}X^TXbeta
]

Los valores de los parámetros inicializados son:

[
beta^{(0)}=
begin{bmatriz}
2 \
5
end{bmatriz}
]

Estos son sólo los valores iniciales desde los que Gradient Descent comienza a buscar la pérdida mínima.

Ahora construyamos la matriz de características.

Como tenemos una característica, la matriz (X) se convierte en:

[
x=
begin{bmatriz}
1 y 1.2 \
1 y 1.4 \
1 y 1,6 \
1 y 2.1 \
1 y 2.3 \
1 y 3.0 \
1 y 3.1 \
1 y 3.3 \
1 y 3.3 \
1 y 3.8
end{bmatriz}
]

La primera columna contiene unos para el término de intersección.

Ahora calcula:

[
X^T
] [
X^T=
begin{bmatriz}
1 y 1 y 1 y 1 y 1 y 1 y 1 y 1 y 1 y 1 \
1,2 y 1,4 y 1,6 y 2,1 y 2,3 y 3,0 y 3,1 y 3,3 y 3,3 y 3,8
end{bmatriz}
]

Ahora calcula:

[
X^TX
] [
X^TX=
begin{bmatriz}
10 y 25.1 \
25,1 y 67,89
end{bmatriz}
]

A continuación, sea el vector objetivo:

[
y=
begin{bmatriz}
39344 \
46206 \
37732 \
43526 \
39892 \
56643 \
60151 \
54446 \
64446 \
57190
end{bmatriz}
]

Ahora calcula:

[
X^Ty
] [
X^Ty=
begin{bmatriz}
493576 \
1326200.7
end{bmatriz}
]

Dado que nuestro conjunto de datos contiene:

[
norte=10
]

Ahora sustituya todos los valores en la ecuación de gradiente:

[
frac{MSE parcial}{partial beta}
=
frac{-2}{10}
begin{bmatriz}
493576 \
1326200.7
end{bmatriz}
+
frac{2}{10}
begin{bmatriz}
10 y 25.1 \
25,1 y 67,89
end{bmatriz}
begin{bmatriz}
2 \
5
end{bmatriz}
]

Primero, calcule la multiplicación de matrices:

[
begin{bmatriz}
10 y 25.1 \
25,1 y 67,89
end{bmatriz}
begin{bmatriz}
2 \
5
end{bmatriz}
=
begin{bmatriz}
(10)(2)+(25,1)(5) \
(25,1)(2)+(67,89)(5)
end{bmatriz}
] [
=
begin{bmatriz}
20+125,5 \
50,2+339,45
end{bmatriz}
] [
=
begin{bmatriz}
145,5 \
389,65
end{bmatriz}
]

Ahora multiplica por:

[
frac{2}{10}
] [
frac{2}{10}
begin{bmatriz}
145,5 \
389,65
end{bmatriz}
=
begin{bmatriz}
29.1 \
77,93
end{bmatriz}
]

A continuación, calcula:

[
frac{-2}{10}
begin{bmatriz}
493576 \
1326200.7
end{bmatriz}
=
begin{bmatriz}
-98715.2 \
-265240.14
end{bmatriz}
]

Ahora sustituye todo de nuevo:

[
frac{MSE parcial}{partial beta}
=
begin{bmatriz}
-98715.2 \
-265240.14
end{bmatriz}
+
begin{bmatriz}
29.1 \
77,93
end{bmatriz}
]

Finalmente:

[
frac{MSE parcial}{partial beta}
=
begin{bmatriz}
-98686.1 \
-265162.21
end{bmatriz}
]

Este gradiente representa la pendiente de la curva de pérdida MSE en forma de cuenco en los valores de parámetros actuales.

Aquí:

[
-98686.1
]

representa la pendiente con respecto a (beta_0)

y

[
-265162.21
]

representa la pendiente con respecto a (beta_1)

Dado que ambos valores son negativos, la pérdida disminuye hacia la derecha, por lo que Gradient Descent se mueve hacia la derecha para reducir la pérdida.

Ahora, en lugar de resolver matemáticamente los parámetros óptimos directamente, Gradient Descent actualiza gradualmente los valores de los parámetros paso a paso hasta alcanzar el punto mínimo de la curva de pérdida en forma de cuenco.

Esta actualización se realiza utilizando la ecuación de actualización de Gradient Descent:

[
beta:=beta-alphafrac{partial MSE}{partial beta}
]

dónde:

[
alfa
]

se llama tasa de aprendizaje y controla el tamaño de cada paso de actualización.

La ecuación de actualización se puede entender paso a paso.

[
beta
]

representa los valores de los parámetros actuales.

[
frac{MSE parcial}{partial beta}
]

representa la pendiente (gradiente) de la curva de pérdida en forma de cuenco en el punto actual.

El gradiente nos indica la dirección en la que la pérdida aumenta más rápidamente.

Por lo tanto, para reducir la pérdida, nos movemos en la dirección opuesta al gradiente.

Por eso la ecuación de actualización resta el gradiente:

[
beta:=beta-alphafrac{partial MSE}{partial beta}
]

Aquí:

[
alfa
]

controla el tamaño que debe tener cada paso mientras se avanza hacia el punto mínimo.

Si el gradiente es positivo, el descenso del gradiente se mueve hacia la izquierda.

Si el gradiente es negativo, el descenso del gradiente se mueve hacia la derecha.

Al calcular repetidamente los gradientes y actualizar los parámetros, Gradient Descent se mueve gradualmente hacia el punto mínimo de la curva de pérdida en forma de cuenco.

Después de actualizar los parámetros, todo el proceso se repite nuevamente hasta que la pérdida sea mínima y el modelo alcance los parámetros óptimos.

Lo que podemos observar aquí es que no hay ningún cálculo inverso involucrado.

Tasa de aprendizaje

Una cosa importante que debemos entender aquí es la tasa de aprendizaje.

Supongamos:

[
alfa = 0,01
]

y el gradiente calculado es:

[
frac{MSE parcial}{partial beta}
=
begin{bmatriz}
-98686.1 \
-265162.21
end{bmatriz}
]

Ahora sustituya estos valores en la ecuación de actualización:

[
beta=
begin{bmatriz}
2 \
5
end{bmatriz}
–
0,01
begin{bmatriz}
-98686.1 \
-265162.21
end{bmatriz}
]

Primero, multiplique la tasa de aprendizaje por el gradiente:

[
0,01
begin{bmatriz}
-98686.1 \
-265162.21
end{bmatriz}
=
begin{bmatriz}
-986.861 \
-2651.6221
end{bmatriz}
]

Ahora sustituya de nuevo:

[
beta=
begin{bmatriz}
2 \
5
end{bmatriz}
–
begin{bmatriz}
-986.861 \
-2651.6221
end{bmatriz}
]

entonces

[
beta=
begin{bmatriz}
2+986.861 \
5+2651.6221
end{bmatriz}
]

Finalmente:

[
beta=
begin{bmatriz}
988.861 \
2656.6221
end{bmatriz}
]

Después de una iteración de Gradient Descent:

[
beta_0
]

cambiado de:

[
2 flecha derecha 988.861
]

y

[
beta_1
]

cambiado de:

[
5flecha derecha 2656.6221
]

Estos valores de parámetros actualizados nos acercan al punto mínimo de la curva de pérdida de MSE en forma de cuenco.

Ahora, usando estos valores actualizados, se repite todo el proceso nuevamente:

[
text{Predicciones}
flecha derecha
text{Residuales}
flecha derecha
text{Pérdida}
flecha derecha
text{Gradiente}
flecha derecha
text{Actualización de parámetros}
]

Este proceso iterativo continúa hasta que la pérdida se vuelve mínima y el modelo alcanza los parámetros óptimos.

Ahora comprendamos por qué es tan importante elegir la tasa de aprendizaje.

Si la tasa de aprendizaje es muy pequeña:

[
alfa = 0,000001
]

entonces las actualizaciones se vuelven extremadamente pequeñas.

Como resultado:

[
text{Aprendizaje muy lento}
]

y Gradient Descent puede requerir miles de iteraciones para alcanzar el punto mínimo.

Por otro lado, si la tasa de aprendizaje es muy grande:

[
alfa = 10
]

entonces las actualizaciones se vuelven extremadamente grandes.

Como resultado, Gradient Descent puede sobrepasar el punto mínimo repetidamente y no alcanzar la solución.

Por lo tanto, elegir una tasa de aprendizaje adecuada es muy importante para una optimización eficiente.

GIF por autor

Descenso del gradiente estocástico

Ahora tenemos una idea de qué es realmente el descenso de gradiente.

En este método, podemos observar que utilizamos todo el conjunto de datos para calcular los gradientes antes de actualizar los parámetros.

Este proceso puede volverse lento para conjuntos de datos muy grandes y este enfoque se denomina descenso de gradiente por lotes porque utiliza todo el conjunto de datos para cada paso de actualización.

Ahora imagine un conjunto de datos que contiene millones de puntos de datos.

Para cada paso de actualización, Gradient Descent necesitaría:

[
text{Procesar todo el conjunto de datos}
] [
text{Calcular Pérdida}
] [
text{Calcular gradientes}
]

y luego finalmente actualizar los parámetros.

Este cálculo repetido se vuelve un proceso computacionalmente costoso y que requiere mucho tiempo.

Aquí es donde el Descenso de gradiente estocástico (SGD) entra en escena.

En lugar de calcular gradientes utilizando todo el conjunto de datos, SGD selecciona aleatoriamente solo una observación a la vez y actualiza inmediatamente los parámetros.

La ecuación de actualización sigue siendo la misma:

[
beta:=beta-alphafrac{partial MSE}{partial beta}
]

La única diferencia es que el gradiente ahora se calcula utilizando una sola observación en lugar de todo el conjunto de datos.

Podemos entender esto utilizando un punto de datos de nuestro conjunto de datos.

Los valores de los parámetros son:

[
beta^{(0)}=
begin{bmatriz}
2 \
5
end{bmatriz}
]

y la tasa de aprendizaje es:

[
alfa = 0,01
]

Ahora digamos que SGD seleccionó aleatoriamente el siguiente ejemplo de entrenamiento de nuestro conjunto de datos:

[
(x,y)=(3,0,56643)
]

Para esta única observación:

[
x=
begin{bmatriz}
1 y 3.0
end{bmatriz}
]

y

[
y=
begin{bmatriz}
56643
end{bmatriz}
]

Ahora calcula:

[
X^T=
begin{bmatriz}
1 \
3.0
end{bmatriz}
]

A continuación calcula:

[
X^TX
] [
=
begin{bmatriz}
1 \
3.0
end{bmatriz}
begin{bmatriz}
1 y 3.0
end{bmatriz}
] [
=
begin{bmatriz}
1 y 3.0 \
3.0 y 9.0
end{bmatriz}
]

Ahora calcula:

[
X^Ty
] [
=
begin{bmatriz}
1 \
3.0
end{bmatriz}
begin{bmatriz}
56643
end{bmatriz}
] [
=
begin{bmatriz}
56643 \
169929
end{bmatriz}
]

Dado que SGD utiliza solo una observación:

[
norte=1
]

Ahora sustituye todo en la ecuación de gradiente:

[
frac{MSE parcial}{partial beta}
=
frac{-2}{n}X^Ty
+
frac{2}{n}X^TXbeta
]

Sustituyendo:

[
=
frac{-2}{1}
begin{bmatriz}
56643 \
169929
end{bmatriz}
+
frac{2}{1}
begin{bmatriz}
1 y 3.0 \
3.0 y 9.0
end{bmatriz}
begin{bmatriz}
2 \
5
end{bmatriz}
]

Primero calcule la multiplicación de matrices:

[
begin{bmatriz}
1 y 3.0 \
3.0 y 9.0
end{bmatriz}
begin{bmatriz}
2 \
5
end{bmatriz}
] [
=
begin{bmatriz}
(1)(2)+(3.0)(5) \
(3,0)(2)+(9,0)(5)
end{bmatriz}
] [
=
begin{bmatriz}
2+15 \
6+45
end{bmatriz}
] [
=
begin{bmatriz}
17 \
51
end{bmatriz}
]

Ahora multiplica por:

[
frac{2}{1}
] [
=
begin{bmatriz}
34 \
102
end{bmatriz}
]

Ahora calcula:

[
frac{-2}{1}
begin{bmatriz}
56643 \
169929
end{bmatriz}
=
begin{bmatriz}
-113286 \
-339858
end{bmatriz}
]

Ahora sustituye todo de nuevo:

[
frac{MSE parcial}{partial beta}
=
begin{bmatriz}
-113286 \
-339858
end{bmatriz}
+
begin{bmatriz}
34 \
102
end{bmatriz}
]

Finalmente:

[
frac{MSE parcial}{partial beta}
=
begin{bmatriz}
-113252 \
-339756
end{bmatriz}
]

Este gradiente representa la pendiente de la curva de pérdida en forma de cuenco para este único ejemplo de entrenamiento.

Ahora actualice los parámetros usando:

[
beta:=beta-alphafrac{partial MSE}{partial beta}
]

Sustituyendo los valores:

[
beta=
begin{bmatriz}
2 \
5
end{bmatriz}
–
0,01
begin{bmatriz}
-113252 \
-339756
end{bmatriz}
]

Primero multiplique la tasa de aprendizaje:

[
=
begin{bmatriz}
2 \
5
end{bmatriz}
–
begin{bmatriz}
-1132,52 \
-3397,56
end{bmatriz}
]

Ahora resta:

[
=
begin{bmatriz}
2+1132.52 \
5+3397.56
end{bmatriz}
]

Finalmente:

[
beta=
begin{bmatriz}
1134.52 \
3402.56
end{bmatriz}
]

Después de resolver una sola observación, los parámetros se actualizan inmediatamente.

Ahora SGD selecciona aleatoriamente otra observación del conjunto de datos y repite el mismo proceso nuevamente.

A diferencia del descenso de gradiente por lotes, que espera procesar todo el conjunto de datos antes de actualizar los parámetros, SGD actualiza los parámetros después de cada ejemplo de entrenamiento.

Gracias a estas actualizaciones frecuentes, SGD llega a la solución más rápido.

Podemos observar lo simple que se vuelve el cálculo cuando utilizamos una sola observación.

SGD continúa actualizando los parámetros repetidamente utilizando diferentes ejemplos de entrenamiento hasta que la pérdida se vuelve mínima o deja de cambiar significativamente.

Pero el camino hacia el punto mínimo se vuelve ruidoso y zigzagueante.

Esto hace que SGD sea muy útil para problemas de aprendizaje automático moderno y aprendizaje profundo que involucran conjuntos de datos muy grandes.

Conclusión

Ahora tenemos una idea tanto del descenso de gradiente como del descenso de gradiente estocástico.

Primero, derivamos la ecuación normal y luego aprendimos que el cálculo de la matriz inversa se vuelve computacionalmente costoso y el uso de memoria aumenta para grandes conjuntos de datos.

Para resolver este problema, utilizamos el descenso de gradiente, que no se limita a la regresión lineal, sino que también se utiliza en muchos algoritmos de aprendizaje automático y aprendizaje profundo.

A continuación, aprendimos que incluso el primer método de descenso de gradiente que utilizamos, llamado descenso de gradiente por lotes, puede volverse lento para conjuntos de datos muy grandes porque utiliza todo el conjunto de datos antes de actualizar los parámetros.

Esto nos llevó al descenso de gradiente estocástico (SGD), que actualiza los parámetros utilizando un ejemplo de entrenamiento a la vez y funciona más rápido que el descenso de gradiente por lotes para conjuntos de datos grandes.

También tenemos otra variación del descenso de gradiente llamado descenso de gradiente de mini lotes, en el que utilizamos un pequeño lote de ejemplos de entrenamiento del conjunto de datos, como 32 o 64 filas, antes de actualizar los parámetros.

De esta manera, se vuelve más rápido que el descenso de gradiente por lotes y más estable que el descenso de gradiente estocástico.

Aunque la regresión lineal tiene una solución de forma cerrada, a menudo preferimos utilizar el descenso de gradiente cuando trabajamos con grandes conjuntos de datos que contienen millones de observaciones porque la ecuación normal se vuelve computacionalmente costosa y poco práctica.

Sin embargo, en el aprendizaje profundo, normalmente no existen soluciones de forma cerrada, lo que hace que los algoritmos de optimización como el descenso de gradiente sean aún más importantes.

Licencia de conjunto de datos

El conjunto de datos utilizado en este blog es el conjunto de datos Salario.

Está disponible públicamente en Kaggle y tiene la licencia Creative Commons Zero (dominio público CC0). Esto significa que se puede utilizar, modificar y compartir libremente para fines comerciales y no comerciales sin restricciones.

Espero que ahora comprenda mejor qué son realmente el descenso de gradiente y el descenso de gradiente estocástico.

Si desea leer más de mis escritos, también puede encontrarlo en Medium y LinkedIn.

Recientemente escribí un desglose detallado de Lasso Regression desde una perspectiva geométrica e intuitiva.

Puedes leerlo aquí.

¡Gracias por leer!