Professional Documents
Culture Documents
Clasificación binaria
Hola, y bienvenido de nuevo. En esta semana vamos a repasar los principios básicos de la programación de redes
neuronales. Resulta que cuando implementa una red neuronal allí son algunas técnicas que van a ser realmente
importantes. Por ejemplo, si tiene un conjunto de entrenamiento de m ejemplos de capacitación, es posible que esté
acostumbrado a procesar el conjunto de entrenamiento al tener un ciclo de cuatro paso a través de tus m ejemplos de
entrenamiento. Pero resulta que cuando estás implementando una red neuronal, generalmente quiere procesar todo su
conjunto de entrenamiento sin usar un lazo explícito de cuatro para recorrer todo tu conjunto de entrenamiento.
Entonces, verás cómo hacer eso en los materiales de esta semana. Otra idea, cuando organizas el cálculo de, en tu red,
por lo general, tiene lo que se denomina un paso de avance de propagación o avance, seguido por una pausa hacia
atrás o lo que se llama un paso de propagación hacia atrás. Y así en los materiales de esta semana, también recibes
una introducción sobre por qué los cálculos, en el aprendizaje de una red neuronal se pueden organizar en esto para
propagación y una propagación hacia atrás por separado.
1:09
Para los materiales de esta semana quiero transmitir estas ideas usando Regresión logística para facilitar la
comprensión de las ideas. Pero incluso si has visto regresión logística antes, creo que habrá hay algunas ideas nuevas
e interesantes para que recoja en los materiales de esta semana. Entonces con eso, empecemos. La regresión logística
es un algoritmo para la clasificación binaria. Comencemos configurando el problema. Aquí hay un ejemplo de un
problema de clasificación binario. Es posible que tenga una entrada de una imagen, así, y quiere imprimir una
etiqueta para reconocer esta imagen como un gato, en cuyo caso usted saca 1, o no-gato en cuyo caso saca 0, y vamos
a usar y para denotar la etiqueta de salida. Veamos cómo se representa una imagen en una computadora. Para
almacenar una imagen, su computadora almacena tres matrices separadas correspondiente a los canales de color rojo,
verde y azul de esta imagen.
2:10
Entonces, si su imagen de entrada es de 64 por 64 píxeles, entonces tendrías 3 matrices de 64 por 64 correspondiente
a los valores de intensidad de píxel rojo, verde y azul para sus imágenes. Aunque para hacer esta pequeña diapositiva
dibujé estas matrices mucho más pequeñas, entonces en realidad son matrices de 5 por 4 en lugar de 64 por 64.
Entonces, para convertir estos valores de intensidad de píxeles: en un vector de características, lo que somos va a
hacer es desenrollar todos estos valores de píxeles en un vector de características de entrada x. Entonces, para
desenrollar todos estos valores de intensidad de píxeles en el vector de características, lo que estamos va a hacer es
definir un vector de características x correspondiente a esta imagen de la siguiente manera. Vamos a tomar todos los
valores de píxel 255, 231, y así sucesivamente. 255, 231, y así sucesivamente hasta que hayamos enumerado todos
los píxeles rojos. Y luego finalmente 255 134 255, 134 y así hasta que obtengamos un vector de características largas
listando todo el rojo, valores de intensidad de píxel verde y azul de esta imagen. Si esta imagen es una imagen de 64
por 64, la dimensión total de este vector x será 64 por 64 por 3 porque eso es los números totales que tenemos en
todas estas matrices. Que en este caso, resulta ser 12,288, eso es lo que obtienes si multiplicas todos esos números. Y
entonces vamos a usar nx = 12288 para representar la dimensión de las características de entrada x. Y a veces por
brevedad, también usaré n minúscula para representar la dimensión de este vector de características de entrada.
Entonces, en la clasificación binaria, nuestro objetivo es aprender un clasificador que pueda ingresar una imagen
representada por este vector de características x. Y pronosticar si la etiqueta correspondiente y es 1 o 0, es decir, si
esta es una imagen de gato o una imagen que no es de gato. Veamos ahora algunas de las anotaciones que haremos
usar durante el resto de este curso Un solo ejemplo de entrenamiento está representado por un par, (x, y) donde x es
una característica x-dimensional vector e y, la etiqueta, es 0 o 1. Sus conjuntos de entrenamiento comprenderán
ejemplos de entrenamiento en minúscula. Y así se escribirán sus conjuntos de entrenamiento (x1, y1) que es la
entrada y salida para su primer ejemplo de entrenamiento (x (2), y (2)) para el segundo ejemplo de entrenamiento
hasta <xm, ym) que es tu último ejemplo de entrenamiento. Y luego, eso es todo tu conjunto de entrenamiento
completo. Así que voy a usar minúsculas m para indicar el número de muestras de entrenamiento. Y a veces para
enfatizar que este es el número de ejemplos de trenes, Podría escribir esto como M = M train. Y cuando hablamos de
un conjunto de prueba, a veces podemos usar la prueba m subscript para denotar el número de ejemplos de prueba.
Entonces esa es la cantidad de ejemplos de prueba. Finalmente, para dar salida a todos los ejemplos de entrenamiento
en una notación más compacta, vamos a definir una matriz, capital X. Según lo definido al llevarlo a su
entrenamiento, configure las entradas x1, x2 y y luego apilarlos en columnas. Entonces tomamos X1 y lo ponemos
como una primera columna de esta matriz, X2, pon eso como una segunda columna y así sucesivamente hasta Xm,
entonces esta es la matriz de capital X. Entonces esta matriz X tendrá M columnas, donde M es el número de tren
ejemplos y el número de ferrocarriles, o la altura de esta matriz es NX. Tenga en cuenta que en otras causas, puede
ver el capital de la matriz X definido al apilar los ejemplos del tren en filas como tal, X1 transpone a Xm transpuesta.
Resulta que cuando estás implementando redes neuronales usando esta convención que tengo a la izquierda hará que
la implementación sea mucho más fácil. Entonces, para recapitular, x es una matriz de nx por m dimensiones, y
cuando implemente esto en Python, ves que x.shape, ese es el comando python para encontrando la forma de la
matriz, que esta una nx, m. Eso solo significa que es una matriz de nx por m dimensiones. Entonces, así es como se
agrupan los ejemplos de entrenamiento, ingrese x en la matriz. ¿Qué hay de las etiquetas de salida Y? Resulta que
para facilitar la implementación de una red neuronal, sería conveniente también apilar columnas Y In. Así que vamos
a definir la capital Y para que sea igual a Y 1, Y 2, hasta Y m como tal. Entonces, Y aquí será una matriz de 1 por m
dimensión. Y nuevamente, usar la notación sin la forma de Y será 1, m. Lo que simplemente significa que esta es una
matriz de 1 por m. Y a medida que influyes en tu nueva red, el discurso de mtrain, encuentras que un útil convención
sería tomar los datos asociados con diferentes entrenamientos ejemplos, y por datos me refiero a x o y u otras
cantidades que veas más adelante. Pero tomar las cosas o los datos asociados con diferentes ejemplos de
entrenamiento y apilarlos en diferentes columnas, como hemos hecho aquí para xey.
7:58
Entonces, esa es una notación que usaremos e para una regresión y para redes de redes neuronales más adelante en
este curso. Si alguna vez olvida lo que significa una pieza de notación, como lo que es M o que es N o qué es otra
cosa, también hemos publicado en el sitio web del curso una guía de notación que puede usar para buscar
rápidamente lo que significa una determinada pieza de notación. Entonces con eso, vamos al siguiente video donde
comenzaremos a buscar regresión logística usando esta notación.
Regresión logística
En este video, repasaremos la regresión logística. Este es un algoritmo de aprendizaje que usa cuando las etiquetas de
salida en un problema de aprendizaje supervisado son cero o uno, entonces para problemas de clasificación binarios
Dado un vector de características de entrada X tal vez corresponde a una imagen que desea reconocer como una
imagen de gato o no como un gato, quieres un algoritmo que pueda generar una predicción, que llamaremos Y hat,
cuál es su estimación de Y. Más formalmente, quieres que sea la probabilidad de que, Y es igual a uno dado las
características de entrada X. En otras palabras, si X es una imagen, como vimos en el último video, quieres que te
diga, ¿Cuál es la posibilidad de que esta sea una imagen de gato? Entonces X, como dijimos en el video anterior, es
un vector X dimensional, dado que los parámetros de la regresión logística Be W, que también es un vector X
dimensional, junto con b, que es solo un número real. Entonces, dado una entrada X y los parámetros W y b, ¿cómo
generamos la salida Y hat? Bueno, una cosa que podrías probar, eso no funciona, sería tener Y hat be w transponer X
plus B, tipo de una función lineal de la entrada X. Y de hecho, esto es lo que usas si estuvieras haciendo una
regresión lineal. Pero este no es un algoritmo muy bueno para la clasificación binaria porque quieres que Y sea la
oportunidad de que Y sea igual a uno. Entonces, ¿realmente debería estar entre cero y uno? y es difícil hacer cumplir
eso porque W transpone X más B puede ser mucho más grande que uno o incluso puede ser negativo, lo cual no tiene
sentido para la probabilidad, que quieres que sea entre cero y uno. Entonces, en la regresión logística, nuestra
producción va a ser en cambio es igual a la función sigmoidea aplicada a esta cantidad. Así es como se ve la función
sigmoidea. Si en el eje horizontal represento Z, entonces la función sigmoide de Z se ve así. Por lo tanto, va sin
problemas desde cero hasta uno. Déjame etiquetar mis ejes aquí, esto es cero y cruza el eje vertical como 0.5. Así que
esto es lo que sigmoides de Z parece y vamos a usar Z para denotar esta cantidad, W transpone X más B. Aquí está la
fórmula para la función sigmoidea. Sigmoid de Z, donde Z es un número real, es uno sobre uno más E hacia la Z
negativa. Entonces note un par de cosas. Si Z es muy grande, entonces E a la Z negativa estará cerca de cero.
Entonces sigmoid de Z será aproximadamente uno por uno más algo muy cercano a cero, porque E al negativo de un
número muy grande será cercano a cero. Entonces esto es cerca de 1. Y de hecho, si miras en la trama de la izquierda,
si Z es muy grande, el sigmoide de Z está muy cerca de uno. Por el contrario, si Z es muy pequeño, o es un número
negativo muy grande, luego sigmoide de Z se convierte en uno más uno más E a la Z negativa, y esto se convierte en
un gran número. Así que esto se convierte en, piense en ello como uno más uno más un número que es muy, muy
grande, y entonces, eso está cerca de cero. Y de hecho, ves que a medida que Z se convierte en un número negativo
muy grande, sigmoide de Z va muy cerca de cero. Entonces, cuando implemente la regresión logística, su trabajo es
tratar de aprender los parámetros W y B para que Y se convierte en una buena estimación de la posibilidad de que Y
sea igual a uno. Antes de continuar, solo otra nota sobre la notación. Cuando programamos redes neuronales,
generalmente mantendremos separados el parámetro W y el parámetro B, donde aquí, B corresponde a un inter-
espectro. En algunos otros cursos, es posible que haya visto una notación que maneja esto de manera diferente. En
algunas convenciones, usted define una característica adicional llamada X0 y que equivale a una. Entonces, ahora X
está en R de NX más uno. Y luego defines Y hat para que sea igual a sigma de theta transpose X. En esta convención
de notación alternativa, tienes parámetros de vectores theta, theta zero, theta uno, theta dos, hasta theta NX Y
entonces, theta zero, coloca una fila en B, eso es solo un número real, y theta one to theta NX interpreta el papel de
W. Resulta que cuando implementa implementa su red neuronal, será más fácil simplemente mantener B y W como
parámetros separados. Y entonces, en esta clase, no usaremos ninguna de estas convenciones de notación que acabo
de escribir en rojo. Si no ha visto esta notación anteriormente en otros cursos, no se preocupe. Es solo que para
aquellos de ustedes que han visto esta notación que yo quería mencionar explícitamente que no estamos usando esa
notación en este curso. Pero si no has visto esto antes, no es importante y no necesita preocuparse por eso. Entonces,
ahora ha visto cómo es el modelo de regresión logística. Luego de cambiar los parámetros W y B, debe definir una
función de costo. Hagámoslo en el
En un video anterior, Viste el modelo de regresión logística. Para entrenar los parámetros W y B del modelo de
regresión logística, necesita definir una función de costo. Echemos un vistazo a la función de costos que puede usar
para entrenar la regresión logística. Para recapitular, esto es lo que tuvimos que encontrar en la diapositiva anterior.
Entonces tu salida y-hat es sigmoide de w transponer x más b donde un sigmoide de Z es como se define aquí.
Entonces, para aprender los parámetros de su modelo, un conjunto de entrenamiento de m ejemplos de entrenamiento
y parece natural que quiera encontrar parámetros W y B para que al menos en el conjunto de entrenamiento, las
salidas que tiene. Las predicciones que tienes en el conjunto de entrenamiento, que solo escribimos como y-hat (i)
que eso estará cerca de las etiquetas de verdad del suelo y_i que obtuviste en el conjunto de entrenamiento. Para
agregar un poco más de detalle para la ecuación en la parte superior, habíamos dicho que y-hat es como se define en
la parte superior para un ejemplo de entrenamiento x y, por supuesto, para cada ejemplo de entrenamiento, estamos
usando estos superíndices con corchetes redondos con paréntesis para indexar y diferenciar ejemplos. Su predicción
sobre la muestra de capacitación (i) que es y-hat (i) va a se obtiene tomando la función sigmoidea y aplicándola a W
transpuesta X, (i) la entrada que el ejemplo de entrenamiento más V y usted también puede definir Z (i) de la
siguiente manera. Z (i) es igual a W transpuesta x (i) más b. Entonces a lo largo de este curso, vamos a usar esta
convención de notación, que el paréntesis superíndice i se refiere a los datos. X, Y, Z u otra cosa asociada con el
ejemplo de entrenamiento i-ésimo, asociado con el i-ésimo ejemplo. Eso es lo que significa el superíndice i entre
paréntesis. Ahora, veamos qué función de pérdida o error función que podemos usar para medir qué tan bien está
funcionando nuestro algoritmo. Una cosa que podrías hacer es definir la pérdida cuando tus resultados de algoritmo
y-hat y la etiqueta verdadera como Y para ser quizás el error cuadrado o un error de medio cuadrado. Resulta que
podrías hacer esto, pero en la regresión logística la gente no suele esto porque cuando vienes a aprender los
parámetros, encuentra que el problema de optimización del que hablamos más adelante se vuelve no convexo.
Entonces terminas con un problema de optimización con múltiples óptimos locales. Entonces, el descenso gradual
puede no encontrar el óptimo global. Si no entendiste los últimos dos comentarios. No te preocupes, lo abordaremos
en un video posterior. Pero la intuición de llevar es que esta función L llamada la función de pérdida es una función
que podrás Necesitamos definir para medir cuán bueno es nuestro rendimiento y-hat cuando la etiqueta verdadera es
y. Como el error cuadrado parece que podría ser una opción razonable excepto que hace que el descenso de gradiente
no funcione bien. Entonces en la regresión logística, realmente definiremos una función de pérdida diferente que
desempeña un papel similar al error cuadrado, eso nos dará un problema de optimización que es convexo y entonces
veremos que el video posterior se vuelve mucho más fácil de optimizar. Entonces, lo que usamos en la regresión
logística es en realidad la siguiente función de pérdida que estoy justo aquí, es negativo y log y-hat más una línea
tiene y log, una línea es y-hat. Aquí hay una intuición de por qué esta función de pérdida tiene sentido. Tenga en
cuenta que si estamos usando al cuadrado de error, entonces usted quiere que el error al cuadrado sea lo más pequeño
posible. Y con esta función de pérdida de regresión logística, también queremos que sea lo más pequeño posible. Para
entender por qué esto tiene sentido, veamos los dos casos. En el primer caso, digamos que Y es igual a uno, entonces
la pérdida función y-hat coma es justicia para nosotros escribir este signo negativo. Entonces este log negativo y-hat.
Si y es igual a uno. Porque si y es igual uno entonces el segundo término uno menos Y es igual a cero. Así que esto
dice que si y es igual a uno, quiere que log-y-hat negativo sea lo más grande posible. Eso significa que quieres que
log y-hat sea grande, ser lo más grande posible y eso significa que quieres que y-hat sea grande. Pero porque y-hat es
tu sabes, la función sigmoidea, nunca puede ser más grande que uno. Entonces, esto significa que si y es igual a uno,
quiero que y-hat sea lo más grande posible. Pero nunca puede ser más grande que uno diciendo que quieres que y-hat
esté cerca de uno también. El otro caso es si y es igual a cero. Si y es igual a cero, entonces este primer término en la
función de pérdida es igual a cero porque y cero y luego el segundo término define la función de pérdida. Entonces la
pérdida se convierte en log negativo menos y-hat. Y entonces, si en su proceso de aprendizaje intenta hacer que la
función de pérdida sea pequeña, lo que esto significa es que quieres registrar uno menos y-hat para que sea grande. Y
porque es un signo negativo allí y luego, a través de una razón similar, puedes concluir que esta función de pérdida
está tratando de hacer que y-hat sea lo más pequeño posible. Y otra vez porque y-hat tiene que estar entre cero y uno.
Esto está diciendo que si y es igual a cero, entonces su función de pérdida empujará los parámetros para hacer que y-
hat sea lo más cercano posible a cero. Ahora, hay muchas funciones con el efecto de Rafidah que si y es igual a uno
tratamos de hacer que y-hat sea grande y si Y es igual a cero tratamos de hacer que y-hat sea pequeño. Acabamos de
dar aquí en verde una justificación algo informal para esta función de pérdida proporcionará un video opcional más
tarde para dar una justificación más formal para ¿Por qué en la regresión logística nos gusta usar la función de
pérdida con esta forma particular? Finalmente, la función de pérdida se definió con respecto a un único ejemplo de
entrenamiento. Mide qué tan bien estás en un solo ejemplo de entrenamiento. Ahora voy a definir algo llamado
función de costo, que mide qué tan bien estás haciendo un conjunto de entrenamiento completo. Entonces la función
de costo J que se aplica a sus parámetros W y B van a ser el promedio con uno de la m de la suma de la función de
pérdida aplicada a cada uno de los ejemplos de entrenamiento y turno. Mientras que aquí y-hat es, por supuesto, la
salida de predicción por su algoritmo de regresión logística usando usted sabe, un conjunto particular de parámetros
W y B. Y así solo para expandir esto, esto es igual a uno negativo m suma de i es igual a uno a m de la definición de
la función de pérdida. Entonces este es y (i) Log y-hat (i) más una línea es y (i) log una línea es y-hat (i). Creo que
podría poner corchetes aquí. Entonces, el signo menos está fuera de todo lo demás. Entonces la terminología que voy
a usar es que la función de pérdida se aplica a un solo ejemplo de entrenamiento como ese. Y la función de costo es el
costo de sus parámetros. Entonces, al entrenar su modelo de regresión logística, vamos a tratar de encontrar los
parámetros W y B que minimizar los costos generales de la máquina J escrita en la parte inferior. Entonces, usted
acaba de ver la configuración para el algoritmo de regresión logística, la función de pérdida para el ejemplo de
entrenamiento y la función de costo general para los parámetros de su algoritmo. Resulta que la regresión logística se
puede ver como una red neuronal muy pequeña. En el próximo video vamos a repasar eso para que puedas comenzar
adquiriendo intuición sobre lo que hacen las redes neuronales. Para que veamos el próximo video sobre cómo ver la
regresión logística como una red neuronal muy pequeña.
Descenso de gradiente
Has visto el modelo de regresión logística. Has visto la función de pérdida que mide qué tan bien te está yendo en el
único ejemplo de entrenamiento. También ha visto la función de costos que mide qué tan bien sus parámetros w y b
lo están haciendo en su conjunto de entrenamiento completo. Ahora hablemos sobre cómo puede usar el algoritmo de
descenso de gradiente para entrenar, o para aprender, los parámetros w y b en su conjunto de entrenamiento. Para
recapitular, aquí está el familiar algoritmo de regresión logística.
0:31
Y tenemos en la segunda línea la función de costo, J, que es una función de tus parámetros w y b. Y eso se define
como el promedio. Entonces es 1 sobre m veces la suma de esta función de pérdida. Y entonces la función de pérdida
mide qué tan bien tus algoritmos salidas y-hat (i) en cada uno de los ejemplos de entrenamiento se acumulan o se
compara con la etiqueta verdadera de la tierra y (i) en cada uno de los ejemplos de entrenamiento. Y la fórmula
completa se expande a la derecha. Entonces, la función de costo mide qué tan bien sus parámetros w y b lo están
haciendo en el conjunto de entrenamiento. Entonces, para aprender el conjunto de parámetros w y b parece natural
que queremos encuentre w y b que hagan que la función de costo J (w, b) sea lo más pequeña posible. Así que aquí
hay una ilustración del descenso en gradiente. En este diagrama, los ejes horizontales representan sus parámetros
espaciales, w y b. En la práctica, w puede ser mucho más dimensional, pero a los efectos de trazado, ilustremos w
como un número real único yb como un número real único. La función de costo J (w, b,) es, luego, alguna superficie
arriba de estos ejes horizontales w y b. Entonces la altura de la superficie representa el valor de J (w, b) en un cierto
punto. Y lo que queremos hacer es realmente encontrar el valor de w y b que corresponde al mínimo de la función de
costo J.
2:00
Resulta que esta función de costo J es una función convexa. Entonces, es solo un tazón grande, así que esta es una
función convexa y esto se opone a las funciones que se ven así, que no son convexos y tienen muchos locales
diferentes. Entonces, el hecho de que nuestra función de costos J (w, b) como se definió aquí es convexo es una de las
grandes razones por las que usamos esta función de costo particular, J, para la regresión logística. Entonces, para
encontrar un buen valor para los parámetros, lo que haremos es inicializar w y b con un valor inicial, tal vez denotado
por ese pequeño punto rojo. Y para la regresión logística casi cualquier método de inicialización funciona,
generalmente inicializas el valor a cero. La inicialización aleatoria también funciona, pero la gente no suele hacer eso
para la regresión logística. Pero debido a que esta función es convexa, no importa dónde se inicialice, deberías llegar
al mismo punto o más o menos al mismo punto. Y lo que hace el descenso de gradiente es que comienza en ese punto
inicial y luego da un paso en la dirección más inclinada hacia abajo. Entonces, después de un paso de descenso en
gradiente podrías terminar allí, porque está tratando de dar un paso cuesta abajo en la dirección del descenso más
empinado o tan rápido cuesta abajo como sea posible. Entonces esa es una iteración de descenso de gradiente. Y
después de dos iteraciones de descenso de gradiente, podrías subir, tres iteraciones, etc. Supongo que esto ahora está
oculto por la parte posterior de la trama hasta que, finalmente, con suerte converger a este óptimo global o llegar a
algo cercano al óptimo global. Entonces esta imagen ilustra el algoritmo de descenso de gradiente. Vamos a escribir
un poco más de los detalles. Con el fin de ilustrar, digamos que hay alguna función, J (w), que quieres minimizar, y
tal vez esa función se vea así. Para hacer esto más fácil de dibujar, voy a ignorar b por ahora, solo para hacer de esto
una trama unidimensional en lugar de una trama de alta dimensión. Así que el descenso gradual hace esto, vamos a
llevar a cabo repetidamente la siguiente actualización. Tomaríamos el valor de w y lo actualizaríamos, va a usar dos
puntos iguales para representar la actualización w. Así que configure w a w menos alfa, veces y esto es un derivado
dJ (w) / dw. Lo haré repetidamente hasta que el algoritmo converja. Así que un par de puntos en la notación, alfa
aquí, es la tasa de aprendizaje, y controla qué tan grande es el paso que damos en cada iteración o descenso de
gradiente. Más adelante hablaremos sobre algunas formas al elegir la tasa de aprendizaje alfa. Y segundo, esta
cantidad aquí, esta es una derivada. Esta es básicamente la actualización o el cambio que desea realizar a los
parámetros w. Cuando comenzamos a escribir código para implementar el descenso de gradiente, vamos a utilizar la
convención de que el nombre de la variable en nuestro código
4:58
dw se usará para representar este término derivado. Entonces, cuando escribes código, escribes algo así como w colon
es igual a w menos alfa multiplicado por dw. Y entonces usamos dw para ser el nombre de la variable para
representar este término derivado. Ahora asegurémonos de que esta actualización de gradiente tenga sentido.
Digamos que w estaba aquí. Entonces estás en este punto en la función de costo J (w). Recuerde que la definición de
derivada es la pendiente de una función en el punto. Entonces, la pendiente de la función es realmente la altura
dividida por el ancho, a la derecha, de un triángulo bajo aquí en esta tangente a J (w) en ese punto. Y entonces, aquí
la derivada es positiva. W se actualiza como w menos una tasa de aprendizaje multiplicada por la derivada. La
derivada es positiva y entonces terminas restando de w, entonces terminas dando un paso hacia la izquierda. Y así el
descenso gradual hará que su algoritmo sea lento disminuya el parámetro si ha comenzado con este gran valor de w.
Como otro ejemplo, si w hubiera terminado aquí, entonces en este punto la pendiente aquí de dJ / dw será negativa y
entonces la actualización del descenso del gradiente restaría alfa multiplicado por un número negativo. Y así terminas
aumentando lentamente w, por lo que terminas haciéndolo más grande y más grande con iteraciones sucesivas y
descenso de gradiente. Entonces, con suerte, si se inicializa a la izquierda o en el descenso del gradiente derecho te
moverá hacia este mínimo global aquí. Si no está familiarizado con derivados o con cálculo y lo que significa este
término dJ (w) / dw, no te preocupes demasiado por eso. Hablaremos un poco más sobre derivados en el siguiente
video. Si tienes un conocimiento profundo del cálculo, es posible que pueda tener una intuición más profunda sobre
cómo funcionan las redes neuronales. Pero incluso si no estás familiarizado con el cálculo, en los próximos videos le
daremos suficientes intuiciones sobre derivados y sobre el cálculo que podrá utilizar de manera efectiva las redes
neuronales. Pero la intuición general para ahora es que este término representa la pendiente de la función, y queremos
saber la pendiente de la función en la configuración actual de los parámetros para que podamos tomar estos pasos de
descenso más empinado, para que sepamos qué dirección para intervenir con el fin de ir cuesta abajo en la función de
costos J.
7:36
Entonces escribimos nuestro descenso de gradiente para J (s) si solo w fuera su parámetro. En la regresión logística,
su función de costo es una función de w y b. Entonces, en ese caso, el bucle interno de descenso de gradiente, eso es
aquí, esto que debes repetir se convierte en lo siguiente. Terminas actualizando w w menos los tiempos de velocidad
de aprendizaje la derivada de J (w, b) con respecto a w. Y actualiza b como b menos los tiempos de velocidad de
aprendizaje la derivada de la función de costo con respecto a b. Estas dos ecuaciones en la parte inferior son la
actualización real que implementa. Como un aparte solo quiero mencionar una convención de notación en cálculo que
es un poco confuso para algunas personas No creo que sea muy importante que entiendas el cálculo, pero en caso de
que veas esto, quiero asegurarme de que no pienses demasiado en esto. Que es eso en cálculo, este término aquí, en
realidad escribimos como barbechos, de ese divertido símbolo de garabato. Entonces este símbolo, esto es en realidad
una minúscula d en una fuente elegante, en una fuente estilizada para cuando vea esta expresión todo esto significa
que esto no es [INAUDIBLE] J (w, b) o realmente la pendiente de la función J (w, b), cuánto se inclina esa función
en la dirección w. Y la regla de la notación en cálculo, que creo que no es totalmente lógica, pero la regla en la
notación para el cálculo, que creo que hace las cosas mucho más complicado de lo que necesita ser es que si J es una
función de dos o más variables, entonces en lugar de usar minúsculas d, usa este símbolo divertido. Esto se llama un
símbolo derivado parcial. Pero no te preocupes por esto, y si J es una función de solo una variable, entonces usa
minúscula d. Entonces, la única diferencia entre usar este gracioso el símbolo de derivada parcial o minúscula d como
lo hicimos en la parte superior, es si J es una función de dos o más variables. En ese caso, usa este símbolo, el
símbolo de derivada parcial, o si J es solo una función de una variable, entonces se usa minúscula d. Esta es una de
esas divertidas reglas de notación en cálculo que Creo que las cosas son más complicadas de lo que deberían ser. Pero
si ves este símbolo derivativo parcial todo lo que significa es que estás midiendo la pendiente de la función, con
respecto a una de las variables. Y de manera similar adherirse a la matemática anteriormente correcta notación en
cálculo, porque aquí J tiene dos entradas, no solo una. Esta cosa en la parte inferior debe escribirse con esta derivada
parcial simple. Pero realmente significa lo mismo que, casi lo mismo que minúscula d. Finalmente, cuando
implemente esto en el código, vamos a usar la convención de que esta cantidad, realmente la cantidad por la cual
usted actualiza w, denotará como la variable dw en su código. Y esta cantidad, ¿verdad? La cantidad por la cual desea
actualizar b se denotará por la variable db en tu código. Está bien, entonces, así es como puedes implementar el
descenso en gradiente. Ahora bien, si no ha visto cálculos durante algunos años, sé que eso podría parecer muchos
más derivados en cálculo de los que podría estar cómodo hasta ahora. Pero si te sientes así, no te preocupes por eso.
En el siguiente video, le daremos una mejor intuición sobre los derivados. E incluso sin la profunda comprensión
matemática del cálculo, con solo una comprensión intuitiva del cálculo podrá hacer que las redes neuronales
funcionen de manera efectiva. Entonces, vamos al siguiente video donde hablaremos un poco más sobre derivados.
Derivados
en este video quiero ayudarte a ganar comprensión intuitiva de cálculo y los derivados ahora tal vez eres pensando
que no has visto el cálculo desde tus días universitarios y dependiendo de cuando te gradúas tal vez eso fue bastante
Hace algún tiempo atrás si eso es lo que eres pensando, no te preocupes, no necesitas una comprensión profunda del
cálculo con el fin para aplicar nuevas redes y aprendizaje profundo muy efectivamente, así que si estás mirando este
video o algunos de los videos posteriores se preguntan wow estas cosas realmente para este cálculo se ve realmente
complicado mi consejo para usted es el lo siguiente es que miren los videos y luego, si pudieras hacer la tarea y
completa la tarea de programación con éxito, entonces puede aplicar profundamente aprendiendo de hecho lo que ves
más tarde es que en la semana 4 definirá un par de tipos de funciones que te permitirán para encapsular todo lo que
necesita hacerse con respecto al cálculo que estas funciones invocan funciones de reenvío y funciones hacia atrás que
aprendes sobre el menos pones todo lo que necesita saber acerca de los consejeros en estos funciones para que no
necesite preocuparse por ellos más allá de eso, pero Pensé que en esta incursión en lo profundo aprendiendo que esta
semana deberíamos abrir subir la caja y mirar un poco más allá en los detalles del cálculo, pero realmente todo lo que
necesitas es un intuitivo comprensión de esto para construir y aplica con éxito estos algoritmos oh y finalmente si
estás entre eso tal vez un grupo más pequeño de personas que son experto en cálculo si eres muy familiarizado con el
cálculo observar esto es Probablemente está bien que te saltes este video pero para todos los demás, vamos a bucear y
tratar de obtener una comprensión intuitiva de derivados que he trazado aquí el la función f de a es igual a 3/8 por lo
que es solo una línea recta para ganar intuición acerca de derivados echemos un vistazo a algunos puntos en esta
función, digamos que a es igual a 2 en ese caso f de una que es igual a 3 por 8 es igual a 6, por lo que si es igual a 2,
entonces usted sabe F de una voluntad ser igual a 6 digamos que damos el valor de una sabes solo un poco de un
empujón Voy a simplemente subirme una poco así que ahora hay 2.00 1 derecha así que voy a tener un poco como un
pequeño empuje hacia la derecha, así que ahora digamos 2 oh uno este enchufe esto es a escala 2.01 la diferencia de
0.001 es demasiado pequeña para mostrar en esta trama esto les da una pequeño empujón hacia la derecha ahora f de
a es igual a tres veces a las seis punto cero cero tres Simplot esto aquí esta no es la escala esto es seis puntos cero cero
tres, así que si nos fijamos en esto triángulo bajo aquí algunos destacando en verde lo que vemos es que si coincido
con un 0.001 a la derecha luego F de a sube por 0.03 la cantidad que F de una subió es tres veces más grande que la
cantidad Juzgué a la derecha, así que vamos decir que la pendiente de la derivada de la función f de a en a es igual a
dos o cuando a es igual a 2 la pendiente este leyendo y sabes el término derivado básicamente significa pendiente es
solo eso sonido derivado como un miedo a más palabra intimidante, mientras que la pendiente es una forma más
amigable de describir el concepto de derivado por lo que uno de estos año derivada solo piensa pendiente de la
función y más formalmente la pendiente es definido como la altura dividida por ancho de este pequeño triángulo que
tener en verde, así que esto es usted sabe 0.03 más de 0.01 y el hecho de que la pendiente es igual a 3 o la derivada es
igual a 3 solo representa el hecho de que cuando mira a la derecha por 0.01 por diminuto cantidad la cantidad que F
de a sube es tres veces más grande que la cantidad que Unido el inercial a en el horizontal dirección, así que eso es
todo lo que la pendiente de una línea ahora vamos a ver esto función en un punto diferente, digamos que a es ahora
igual a cinco en ese caso f de tres veces a es igual a 15 así que digamos que de nuevo le doy y muesca a la derecha un
pequeño cuello largo ahora se topa con cinco puntos sobre uno F de a es tres veces que entonces f de a es igual a
quince punto cero tres y así una vez más cuando me encuentro con el derecho no a la derecha por 0.001 F de un sube
tres veces más por lo que la pendiente de nuevo en un igual a cinco es También tres por lo que la forma en que
escribimos es que la pendiente de la función f es igual a tres decimos DF de un da y esto solo significa la pendiente
de la función f de cuando empuja la variable aa minúscula poca cantidad um esto es igual a tres y una forma
alternativa de escribir esto fórmula derivada es la siguiente que puede también escriba esto como d da de f de modo si
pones la f de a en la parte superior de ya sea que lo escribas, sabes aquí No importa pero toda esa ecuación significa
que si Empujo un poco hacia la derecha un poco Espero que F de a suba tres veces tanto como yo no solo el valor de
poco un ahora para este video que expliqué derivados hablando de lo que sucede empujamos la variable a por 0.001
um si quieres la matemática formal definición de los derivados derivados se definen con un par menor valor de la
cantidad de energía a el derecho por lo que no está abierto más de 1 no es 0.001 no es 0.0 y así sucesivamente 1 es
una especie de incluso más pequeño que eso y el formal definición de derivado dice lo que tienen das un empujón a la
derecha con una información cantidad comprobable básicamente un infinito pequeña cantidad infinitamente pequeña
si lo hace que hace f de una subida tres veces como tanto como lo que sea que era un pequeño y diminuto cantidad
que ahora se queda a la derecha, por lo esa es en realidad la definición formal de un derivado, pero para los fines de
nuestra comprensión intuitiva que vamos a hablar sobre empujar a la derecha por esta pequeña cantidad 0.001 incluso
si es 0.001 no es exactamente usted sabe muy pequeña insa testable ahora una propiedad de la derivado es que no
importa donde tomar la pendiente de esta función es igual a 3 si a es igual a 2 o a es igual a 5 la pendiente de esta
función es igual a 3 lo que significa que sea lo que sea el valor de a si lo aumenta por 0.001 que el valor de f de a
aumenta en tres veces tanto así que esta función tiene el mismo pendiente en todas partes y una forma de ver eso es
que donde sea que dibujes esto tu pequeño triángulo justo la altura dividida por el ancho siempre tiene una relación
de tres a uno, así que espero que esto te da un sentido de lo que la pendiente es la derivada de la función significa
para una línea recta donde en este ejemplo la pendiente del la función era tres en todas partes en el próximo video
echemos un vistazo a un un poco más complejo ejemplo donde el las pendientes de la función pueden ser diferentes
en diferentes puntos de la función
Transcripción interactiva
En el último video, trabajamos a través de un ejemplo de usar un gráfico de computación para calcular una función J.
Ahora, tomemos una desviación limpia de ese gráfico de computación. Y muestre cómo puede usarlo para descubrir
cálculos derivados para esa función J. Así que aquí hay un gráfico de computación. Digamos que quieres calcular la
derivada de J con respecto a v.
0:23
Entonces, ¿qué es eso? Bueno, esto dice, si tuviéramos que tomar este valor de v cámbielo un poco, ¿cómo cambiaría
el valor de J? Bueno, J se define como 3 veces v. Y ahora mismo, v = 11. Entonces, si vamos a subir un poco v a
11.001, luego J, que es 3v, entonces actualmente 33, se aumentará hasta 33.003. Así que aquí, hemos aumentado v
por 0.001. Y el resultado neto de eso es que J sale 3 veces más. So the derivative of J with respect to v is equal to 3.
Because the increase in J is 3 times the increase in v. And in fact, this is very analogous to the example we had in the
previous video, where we had f(a) = 3a. And so we then derived that df/da, which with slightly simplified, a slightly
sloppy notation, you can write as df/da = 3. So instead, here we have J = 3v, and so dJ/dv = 3. With here, J playing
the role of f, and v playing the role of a in this previous example that we had from an earlier video. So indeed,
terminology of backpropagation, what we're seeing is that if you want to compute the derivative of this final output
variable, which usually is a variable you care most about, with respect to v, then we've done one step of
backpropagation. So we call it one step backwards in this graph. Now let's look at another example. What is dJ/da? In
other words, if we bump up the value of a, how does that affect the value of J?
2:35
Well, let's go through the example, where now a = 5. So let's bump it up to 5.001. The net impact of that is that v,
which was a + u, so that was previously 11. This would get increased to 11.001. And then we've already seen as
above that J now gets bumped up to 33.003. So what we're seeing is that if you increase a by 0.001, J increases by
0.003. And by increase a, I mean, you have to take this value of 5 and just plug in a new value. Then the change to a
will propagate to the right of the computation graph so that J ends up being 33.003. And so the increase to J is 3 times
the increase to a. So that means this derivative is equal to 3. And one way to break this down is to say that if you
change a, then that will change v.
3:40
And through changing v, that would change J. And so the net change to the value of J when you bump up the value,
when you nudge the value of a up a little bit, is that,
3:57
First, by changing a, you end up increasing v. Well, how much does v increase? It is increased by an amount that's
determined by dv/da. And then the change in v will cause the value of J to also increase. So in calculus, this is
actually called the chain rule that if a affects v, affects J, then the amounts that J changes when you nudge a is the
product of how much v changes when you nudge a times how much J changes when you nudge v. So in calculus,
again, this is called the chain rule. And what we saw from this calculation is that if you increase a by 0.001, v changes
by the same amount. So dv/da = 1. So in fact, if you plug in what we have wrapped up previously, dv/dJ = 3 and
dv/da = 1. So the product of these 3 times 1, that actually gives you the correct value that dJ/da = 3. So this little
illustration shows hows by having computed dJ/dv, that is, derivative with respect to this variable, it can then help
you to compute dJ/da. And so that's another step of this backward calculation.
5:39
I just want to introduce one more new notational convention. Which is that when you're witting codes to implement
backpropagation, there will usually be some final output variable that you really care about. So a final output variable
that you really care about or that you want to optimize. And in this case, this final output variable is J. It's really the
last node in your computation graph. And so a lot of computations will be trying to compute the derivative of that
final output variable. So d of this final output variable with respect to some other variable. Then we just call that dvar.
So a lot of the computations you have will be to compute the derivative of the final output variable, J in this case,
with various intermediate variables, such as a, b, c, u or v. And when you implement this in software, what do you
call this variable name? One thing you could do is in Python, you could give us a very long variable name like
dFinalOurputVar/dvar. But that's a very long variable name. You could call this, I guess, dJdvar. But because you're
always taking derivatives with respect to dJ, with respect to this final output variable, I'm going to introduce a new
notation. Where, in code, when you're computing this thing in the code you write, we're just going to use the variable
name dvar in order to represent that quantity. So dvar in a code you write will represent the derivative of the final
output variable you care about such as J. Well, sometimes, the last l with respect to the various intermediate
quantities you're computing in your code. So this thing here in your code, you use dv to denote this value. So dv
would be equal to 3. And your code, you represent this as da, which is we also figured out to be equal to 3. So we've
done backpropagation partially through this computation graph. Let's go through the rest of this example on the next
slide. So let's go to a cleaned up copy of the computation graph. And just to recap, what we've done so far is go
backward here and figured out that dv = 3. And again, the definition of dv, that's just a variable name, where the code
is really dJ/dv. We've figured out that da = 3. And again, da is the variable name in your code and that's really the
value dJ/da.
8:32
And we hand wave how we've gone backwards on these two edges like so. Now let's keep computing derivatives.
Now let's look at the value u. So what is dJ/du? Well, through a similar calculation as what we did before and then we
start off with u = 6. If you bump up u to 6.001, then v, which is previously 11, goes up to 11.001. And so J goes from
33 to 33.003. And so the increase in J is 3x, so this is equal. And the analysis for u is very similar to the analysis we
did for a. This is actually computed as dJ/dv times dv/du, where this we had already figured out was 3. And this turns
out to be equal to 1. So we've gone up one more step of backpropagation. We end up computing that du is also equal
to 3. And du is, of course, just this dJ/du. Ahora solo pasamos por un último ejemplo en detalle. Entonces, ¿qué es dJ
/ db? Entonces, imagínense si se les permite cambiar el valor de b. Y quiere ajustar un poquito para minimizar o
maximizar el valor de J. Entonces, ¿cuál es el derivado o ¿Cuál es la pendiente de esta función J cuando cambias el
valor de ba un poquito?
10:11
Resulta que usando la regla de la cadena para el cálculo, esto puede escribirse como el producto de dos cosas. Este es
el momento you / db. Y el razonamiento es si cambias un poquito, entonces b = 3 a, digamos, 3.001. La forma en que
afectará a J es que primero te afectará a ti. Entonces, ¿cuánto te afecta? Bueno, u se define como b veces c. Así que
esto pasará de 6, cuando b = 3, hasta ahora 6.002 porque c = 2 en nuestro ejemplo aquí. Entonces, esto nos dice que
du / db = 2. Porque cuando subes b por 0.001, aumentas el doble. Entonces du / db, esto es igual a 2. Y ahora,
sabemos que has subido el doble que b. Bueno, ¿qué es dJ / du? Ya hemos descubierto que esto es igual a 3. Y así al
multiplicar estos dos, encontramos que dJ / db = 6. Y de nuevo, aquí está el razonamiento para la segunda parte del
argumento. Que es lo que queremos saber cuando aumenta 0.002, ¿cómo afecta eso a J? El hecho de que dJ / du = 3,
eso nos dice que cuando subes 0.002, J sube 3 veces más. Entonces J debería subir por 0.006. Esto se debe al hecho
de que dJ / du = 3. Y si revisas las matemáticas en detalle, encontrará que si b se convierte en 3.001, entonces u se
convierte en 6.002, v se convierte en 11.002. Entonces eso es un + u, entonces eso es 5 + u. Y luego J, que es igual a
3 veces v, eso termina siendo igual a 33.006. Y así es como obtienes ese dJ / db = 6. Y para completar eso, esto es si
retrocedemos, entonces esto es db = 6. Y db realmente es el nombre de la variable de código Python para dJ / db. Y
no voy a ir a través del último ejemplo en gran detalle. Pero resulta que si también computas dJ, esto resulta ser dJ /
du times du. Y esto resulta ser 9, esto resulta ser 3 por 3. No voy a seguir ese ejemplo en detalle. Entonces, a través
de este último paso, es posible deducir que dc es igual a.
13:20
Entonces, la clave de este video, de este ejemplo, es que cuando se computa derivados e informática de todos estos
derivados, la forma más eficiente de hacer también lo es a través de un cálculo de derecha a izquierda siguiendo la
dirección de las flechas rojas. Y, en particular, primero calcularemos la derivada con respecto a v. Y luego eso se
vuelve útil para computar la derivada con respecto a a y la derivada con respecto a u. Y luego la derivada con
respecto a u, para ejemplo, este término aquí y este término aquí. Estos a su vez se vuelven útiles para calcular la
derivada con respecto a by la derivada con respecto a c. Así que ese era el gráfico de computación y cómo avanza o
de izquierda a derecha Cálculo para calcular la función de costo, como J, que quizás desee optimizar. Y un cálculo
hacia atrás o de derecha a izquierda para calcular derivadas. Si no está familiarizado con el cálculo o la regla de la
cadena, Conozco algunos de esos detalles, pero se han ido muy rápido. Pero si no siguió todos los detalles, no se
preocupe. En el siguiente video, revisaremos esto nuevamente en el contexto de la regresión logística. Y le mostrará
exactamente lo que necesita hacer para implementar los cálculos que necesidad de calcular los derivados del modelo
de regresión logística.