0:00
Hola a todos.
Hemos visto que un clasificador
de ventanas se basa en una frontera en el espacio del descriptor de esas ventanas.
Esas fronteras quedan definidas por un conjunto de parámetros,
lo que llamamos modelo y hemos visto en el vídeo anterior que esos modelos se pueden
aprender por ejemplo mediante el método de regresión logística.
En realidad lo que vimos es una función de coste que teníamos que minimizar
para obtener el modelo que queremos.
Lo que vamos a ver hoy en este vídeo es un procedimiento
relativamente sencillo para realizar esa minimización.
Empezamos recordando brevemente algunos conceptos.
Queremos aprender modelo a partir de un conjunto de m muestras.
En realidad cada muestra estará asociada a una ventana de entrenamiento,
así la j-ésima muestra de entrenamiento tiene dos componentes.
La primera componente x es el descriptor de la ventana asociada a la
muestra y la segunda componente y es la etiqueta de esa misma ventana.
La etiqueta tiene valor uno si la ventana contiene uno de los objetos
que nos interesan y tiene valor cero en caso contrario.
También habíamos definido la h para un modelo que acepta un descriptor
como parámetro y que devuelve la función logística del producto escalar
del modelo y del descriptor.
Con esos ingredientes habíamos definido el procedimiento de regresión logística
que consiste en minimizar una función de coste que depende del modelo.
El proceso utilizado para hacer esa
minimización nos devolverá el modelo que buscamos.
La función de coste sin entrar mucho en detalle básicamente lo
que hace es medir el error que se comete al clasificar las muestras
que tenemos de entrenamiento dado un cierto modelo.
Además recordemos que es una función convexa respecto al modelo.
Como nuestra función de coste es convexa,
para minimizarla podemos utilizar un algoritmo que desde el punto de vista
conceptual es relativamente sencillo y que se conoce como descenso del gradiente.
Pero antes de entrar en ese algoritmo necesitamos revisar algunos conceptos
relacionados con la derivada de una función para el caso de una función de
una variable o equivalentemente para el gradiente de una función para el caso de
funciones de más de una variable.
Supongamos que tenemos la variable x,
una función de x que podría consistir en este segmento de curva que tenemos aquí.
Nos interesa saber la derivada de la función en un cierto punto x asterisco.
Sabemos que esa derivada consiste en la pendiente de la
recta tangente a la función en ese punto.
Dado un salto en x podemos ver cuál es el salto en y que
le corresponde desde el punto de vista de esa recta tangente.
El cociente entre el salto y y el salto en x es la aproximación a la derivada.
Pero en realidad lo que nos interesa es esta otra operación.
Delta de x es un número
positivo y en este caso el delta de y es
un número positivo también entonces este cociente es un número positivo.
Por tanto, esta operación consiste en venirnos al punto x asterisco y
dar un paso hacia atrás en el eje de la x.
Si la tangente fuera esta otra que tiene más pendiente pues
entonces la delta de y sería mayor y el salto sería mayor.
En este otro caso lo que tenemos es que el paso en y es un número negativo
y por tanto este cociente es un número negativo y por tanto esta operación al
final es dar un salto hacia adelante, porque es restar un número negativo,
es decir venir aquí hasta este x asterisco y dar un paso hacia adelante.
Si la pendiente de la recta tangente fuese mayor pues entonces el paso sería mayor.
Bien, ahora nos centramos en un ejemplo para una función de dos variables.
Aquí el gradiente de la función tiene dos componentes,
uno es la derivada parcial de la función respecto a la primera variable y la otra
componente es la derivada parcial de la función respecto a la segunda variable.
Ahora lo que nos va a interesar para ilustrar el gradiente es
considerar un conjunto de planos que son paralelos
entre sí y que todos están a la misma distancia uno de otros.
Uno de estos planos es el definido por los ejes de coordenadas x1 y x2,
es decir todos estos planos son paralelos al plano definido por x1 y x2.
Uno de estos planos podría ser este que dibujo aquí.
Bien, pues si considero la intersección de ese plano con la función pues
en este caso concreto obtengo una circunferencia,
en general no será un circunferencia pero en este caso concreto sí.
Y si hago lo mismo para el resto del plano,
pues en este caso obtengo una serie de circunferencias concéntricas.
En general la intersección de estos planos con la función es lo que se conoce como
curvas de nivel.
Bien, entonces podemos venir a una de estas curvas de nivel,
situarnos en un punto y preguntarnos por el gradiente de la función en ese punto.
Bien, el gradiente viene determinado por dos números,
uno es la dirección y el otro es la magnitud del gradiente.
O sea uno es en qué dirección apunta la flechita esta y el otro es
la longitud de la flechita.
Bien, pues en la dirección simplemente es perpendicular
a la curva de nivel en ese punto que estamos considerando.
Es decir, si esta es la tangente de la curva de nivel
en el punto pues este es el gradiente en ese punto.
Y la magnitud corresponde a cuanto cambia la función en esa dirección.
De hecho el gradiente apunta siempre en la dirección de máximo cambio local de
la función que le corresponde.
Así pues, en este otro punto tendremos otro gradiente,
en este otro y en este otro de aquí.
Bien, dicho esto lo que nos interesa
realmente es también considerar este tipo de operación.
Es decir, si yo me sitúo en este otro punto, este de aquí,
y considero el gradiente en ese punto pues al hacer esta operación
lo que vamos a hacer es dar un salto en la dirección contraria al gradiente.
Aquí sería en este dirección, aquí en esta, aquí en esta y aquí en esta.
Si miramos eso desde el punto de vista de la función, pues en realidad sería como
situarse en un cierto punto de la ladera y dar un salto hacia abajo.
Llegaríamos a otro punto y daríamos un salto hacia abajo y así
sucesivamente de forma que iríamos bajando por la ladera
hasta que llegamos en este caso a este mínimo local que bueno,
para esta función que he dibujado también es un mínimo global.
Bien, una vez repasado el concepto de gradiente de una función
podemos esbozar el algoritmo por descenso al gradiente que nos permitirá minimizar
el valor de la función de coste que como you dijimos es convexa respecto al modelo.
Es decir, que tiene un mínimo global.
A nosotros en realidad nos interesa el valor concreto del modelo que
da lugar a ese mínimo.
Evidentemente a priori no sabemos cómo es la función de coste en su
totalidad y para descubrirlo pues necesitaremos el gradiente de
la función de coste y partir de un cierto punto,
es decir en un instante cero tener un cierto valor inicial del modelo.
Con eso lo que haremos es, partiendo del valor inicial del modelo
le restaremos el gradiente de la función de
coste en ese valor inicial y lo que estaremos haciendo mediante esta operación
que hemos esbozado en la transparencia anterior es lo siguiente,
si este es el gradiente en ese punto pues podemos verlo desde dos puntos de vista.
Por un lado si nos fijamos pues en el eje del modelo,
como veíamos en la transparencia anterior lo que vamos a estar haciendo aquí es dar
un salto en este caso hacia atrás, es decir para acercarnos al óptimo.
Si lo miramos desde el punto de vista de la función de coste lo que estaremos
haciendo es bajar por esta ladera.
Así desde el punto de vista de la función de coste, lo que vamos
a ir haciendo es mediante la aplicación de este concepto en cada nuevo punto en el
que digamos vamos a parar o aterrizamos, pues si lo que estaremos haciendo es ir
bajando paso a paso por la ladera hasta eventualmente llegar a este mínimo.
O si lo miramos desde el punto de vista del eje del modelo,
lo que vamos a estar es cada vez acercándonos más y más al óptimo
que buscamos o como mínimo nos quedaremos cerca de ese óptimo.
Bien, esto que acabamos de ilustrar aquí es exactamente lo que se esboza en este
algoritmo de descenso al gradiente, donde lo que estamos diciendo es que tenemos
un proceso iterativo, es decir lo vamos a ir repitiendo hasta un punto
de convergencia y en ese proceso lo que hacemos es actualizar en el
instante k los valores de las componentes del modelo, a partir de los valores
que habían en el instante anterior y el gradiente también en el instante anterior,
es decir las componentes del gradiente o lo que es dicho de otra forma,
las derivadas parciales de la función de coste en el instante anterior.
¿Y qué quiere decir converger?
Bueno, pues aquí podemos utilizar diversos criterios.
Por ejemplo, podríamos monitorizar los valores de la función de coste y ver si
esos valores you han dejado de descender y por tanto,
posiblemente hemos llegado al óptimo.
O incluso podemos considerar la monitorización del propio gradiente de
la función de coste, de forma que cuando esté cercano a cero podemos suponer que,
estamos cerca del, del, mínimo global.
O podemos combinar estos dos criterios, o incluso pensar criterios más sofisticados.
También comentar que como esta función es convexa,
eventualmente, si hacemos las cosas bien da igual en qué punto inicial empecemos,
que siempre acabaremos convergiendo al óptimo que,
al mínimo, al mínimo global que buscamos.
Aquí volvemos a tener el algoritmo por descenso al gradiente,
que es el que hemos visto en la transparencia anterior.
Pero hemos introducido un número real positivo, alfa,
que se conoce como velocidad de aprendizaje.
Esto puesto en forma compacta es esta expresión en modelo en el instante
k es igual al modelo en el instante anterior menos, en este caso,
alfa por el gradiente de la función de coste en el instante anterior.
Bien, este alfa lo que va a hacer es controlar los saltos.
Si alfa está entre cero y uno acortaremos los saltos que corresponden
al módulo del gradiente.
Si alfa es un número mayor que uno, los alargaremos.
Y por tanto esto nos va a servir para controlar básicamente dos tipos de
situaciones.
Puede haber casos en que la función de coste sea muy plana y por tanto,
intentar llegar al mínimo local a base de
saltos basados en el módulo del gradiente podría dar lugar a muchas iteraciones.
En este caso nos conviene tener un alfa mayor que uno
eventualmente pues relativamente grande.
Pero también podemos tener el caso contrario de los gradientes son muy
grandes y esto provocaría incluso ir,
ir dando saltos de una ladera a otra de la función de coste.
Eventualmente, depende de como,
incluso costaría converger o incluso, no se llegaría a converger.
Y en estos casos nos conviene un alfa pequeño, algún número entre cero y uno.
El problema es que no sabemos bien, bien en general cuál es el mejor alfa,
y lo que vamos a hacer normalmente es utilizar lo que se conoce como
cross-validation, en inglés, o en español validación cruzada,
que es un concepto que veremos en la próxima semana.
Bien, finalmente para llegar a implementar el algoritmo por descenso del
gradiente necesitamos conocer los valores concretos de las derivadas parciales de la
función de coste.
Aquí, si nos entretenemos en calcular la derivada parcial de la función de coste
respecto a la componente y del modelo,
veremos que la expresión resultante es esta de aquí.
Donde tenemos un sumatorio y cada uno de los sumandos consiste
en el error de clasificación de la muestra j multiplicado
por la componente y del descriptor de la ventana de esa muestra j.
Y, todo esto, pues sumado para todas las muestras que hay en nuestro conjunto de
entrenamiento y promediado.
Así pues, utilizando estas expresiones el algoritmo
por descenso del gradiente que finalmente nos va a quedar es este que tenemos aquí.
En resumen, en este vídeo hemos visto en qué consiste el algoritmo del
descenso del gradiente, y también en que gracias a que la función de coste de la
regresión logística es convexa, podemos utilizar ese algoritmo de descenso
del gradiente para encontrar el óptimo de esa función de coste.
Es decir, el mínimo global.