Bienvenidos. En este video vamos a ver qué Hiperparámetros tenemos disponibles en nuestros modelos y cómo podemos optimizarlos. Hasta el momento conversamos bastante sobre distintos parámetros que obtendremos utilizados en nuestros modelos, es decir, los pesos w y b que se optimizan cada vez que hacemos una iteración de nuestro modelo. Finalmente, actualizando los pesos, utilizando alguna técnica del censo de gradiente como vimos hasta ahora. Vamos a conversar un poquito sobre los hiperparámetros de nuestro modelo. Y lo llamamos así para distinguirlos de los parámetros que se optimizan automáticamente con el censo de gradiente y que debemos definir nosotros manualmente y elegir su mejor valor. Por un lado tenemos la cantidad de capas ocultas en nuestra red y la cantidad de unidades de cada una de esas capas, es decir, la arquitectura de nuestra red neuronal. Otro grupo de Hiperparámetros que tengo para ajustar es nuestro ratio de aprendizaje y los distintos pesos de Beta, Beta 1 y Beta 2, dependiendo de qué optimizador estemos utilizando en nuestra red. Por último, también podemos definir el tamaño de "Mini batch" que utilicemos para cada iteración y qué reducción o Dickey utilizamos para el ratio de aprendizaje. Cada uno de estos van a ser Hiperparámetros, que nosotros podemos ajustar y dependiendo de la importancia, el impacto que tenga en otro modelo, ver cuánto podemos mejorar el resultado del mismo a partir del uso de los mismos. Casi siempre vamos a actualizar el ratio de aprendizaje y casi siempre vamos a definir la estructura y la arquitectura en nuestra capa, siendo los demás parámetros como los Betas o el tamaño "Mini Batch" o el uso de la reducción del ratio mensaje, parámetros que dejaremos para una segunda instancia, pero que también tenemos la opción de optimizar. ¿Cómo podemos saber cuáles son los Hiperparámetros óptimos que tenemos que usar en nuestro modelo? La realidad es que no lo sabemos y por eso vamos a tener que realizar una búsqueda dentro de un espacio posible de valores para encontrar cuál es el Hiperparámetro que mejor funcione para el modelo que estamos entrenando. Para eso, lo que normalmente vamos a hacer, va a ser definir un rango posible de valores por cada uno de los Hiperparámetros y luego hacer una exploración corriendo múltiples modelos con cada uno sus Hiperparámetros para ver en qué caso maximiza nuestra ganancia o minimiza nuestra pérdida. Para eso tenemos básicamente dos formas comunes de hacerlo: uno, a través de la búsqueda en grilla o "grid search"; y otro en la búsqueda aleatoria o "random search". La principal diferencia entre cada uno de esto es que en el primero, en la grilla, lo que vamos a hacer es definir para un hiperespacio de hiperparámetros; por ejemplo, en este caso voy a tomar dos para simplificar la graficación. Y teniendo el hiperparámetro 1 y 2, vamos a definir una cantidad de posibles valores donde vamos a ir iterando sobre cada uno de ellos. Esto tiene la ventaja de ser muy prolijo y que vamos a explorar todo el espacio de búsqueda de una forma uniforme, pero tiene varias desventajas que vamos a ver a continuación. Por otro lado, la búsqueda de Hiperparámetros aleatorios, lo que estamos haciendo es definiendo el mismo espacio de búsqueda que en el caso anterior, pero vamos a buscar puntos aleatorios, es decir, vamos a no definir rangos específicos, sino que vamos a hacer la misma cantidad de exploración que el paso anterior, pero de forma aleatoria, distribuida en ese espacio de búsqueda que tenemos. Las ventajas que tienen este segundo método son varias. Por un lado, al hecho de tener que buscar aleatoriamente, ya no estamos buscando solo una cantidad definida de valores. Por ejemplo, si nos fijamos en el espacio de la izquierda, vemos que tanto el Hiperparámetro 1 que tiene 4 valores posibles como el parámetro 2 que tiene 4 valores posibles, solamente toma esos 4 posibles valores, mientras que a la derecha, como es aleatorio, cada uno de los puntos puede estar ligeramente más arriba, más abajo que el anterior o ligeramente más a la derecha o a la izquierda, dando búsqueda en valores completamente distintos en cada búsqueda que hacemos. El segundo gran punto a favor que tiene buscar por aleatorio es que si hacemos la búsqueda por grilla, lo vamos haciendo secuencialmente desde un principio en adelante, y si la exploración se corta en un momento determinado, vamos a tener problemas que vamos a tener que o iniciar desde el principio o reiniciar desde el punto donde perdimos porque no vamos a tener explorado la otra zona del espacio de búsqueda donde no corrió el modelo. Sin embargo, si estamos en la búsqueda aleatoria, los puntos se van a ir distribuyendo uniformemente en todo el espacio, con lo cual si en un momento queremos cortar el iteramiento, porque no tenemos más tiempo o por la razón que fuera, ya tenemos una búsqueda uniforme en todos los lugares para saber más o menos donde está la zona óptima de nuestro hiperparámetro y a partir de ahí empezar a ajustar. Otra de las ventajas que tiene hacer la búsqueda de hiperparámetros de forma aleatoria es que podemos hacer una iteración para ir mejorando donde está ese espacio de búsqueda que estamos haciendo. Por ejemplo, supongamos que tenemos de vuelta el hiperparámetro 1 y 2, y empezamos realizando una búsqueda aleatoria en distintos puntos. Una vez que ya corrimos la suficiente cantidad de puntos para saber que hay cierta zona, cierto lugar donde los puntos son máximos y donde el valor que estamos tratando de optimizar se maximiza, o la pérdida se minimiza, lo que podemos hacer es un "zoom", es decir, definir una zona donde se encuentran esos valores máximos, volver a definir una nueva área, un nuevo rango posible de búsqueda y volver a correr modelos aleatorios de parte de Hiperparámetros que estén dentro de esta nueva zona restringida, para luego ver si dentro de esa misma zona del hiperespacio tenemos mejores lugares donde tenemos Hiperparámetros que maximicen aún más a los valores que ya encontramos. Este "zoom" es un proceso muy habitual de realizarlo en la búsqueda de Hiperparámetros siempre que tengamos tiempo para optimizar el modelo y suele ser muy recomendado y una de las razones por la cual también utilizamos la optimización aleatoria como método predilecto. Un último punto que tenemos que tener en cuenta es que tenemos que tener cuidado al momento de elegir los rangos de hiperparámetros que estamos usando para explorar. Hasta ahora simplemente venimos definiendo que definimos ese espacio de búsqueda como si fuera un espacio lineal y exploramos dentro de ese espacio. Sin embargo, vamos a ver que hay ciertos parámetros donde ese proceso no funciona. Supongamos, por un lado, que tenemos las unidades de nuestro capa oculta, eso lo podemos tener entre 50 unidades hasta 50 neuronas en cada una de nuestras capas, y podemos hacer una búsqueda lineal dentro de ese espacio de forma aleatoria, tomando valores entre 47, 30, 25, 15, hasta llegar a 10. Y la búsqueda, al ser una escala que es uniforme, al buscarlo aleatoriamente dentro de ese rango, funcionaría perfectamente para saber dónde está la zona dónde maximiza ese hiperparámetro. Sin embargo, hay otros Hiperparámetros como el ratio de aprendizaje que puede ir de valores como 0,0001 hasta 1, o en realidad, algún valor cercano a 1, nunca va a ser 1. Y en este caso, ¿qué es lo que pasa? Si yo hago una búsqueda aleatoria similar a lo que hice en el paso anterior, es muy probable que casi toda la búsqueda que yo termine haciendo quede entre un rango de 0,1 y 1. Es decir, como no es lineal el rango donde yo estoy tratando de trabajar, si la búsqueda yo la defino como lineal, el aleatorio sobre ese rango no va a ser uniforme a la exploración que yo quiero hacer, que es explorar en 0,001, 0,01, 0,1, y hay valores entre 0,1 y 1. Para este caso, lo que me conviene hacer es tratar de buscar, forzar a que la exploración se realice en el espectro que yo necesito explorar o que a mí me interesa explorar porque sé que tiene mayor sentido lógico. Para este caso, lo que puedo hacer es, por ejemplo, redefinir esa escala de rangos y colocarlo en una escala logarítmica. Para ese caso tengo, por ejemplo, desde 0,001 hasta 1 en la escala logarítmica. Y ahora sí la exploración aleatoria toma puntos en el rango que a mí me interesa para explorar ese hiperparámetro. La optimización de hiperparámetros es uno de los pasos más comunes realizados por un "Data Scientist" en un proceso de entrenamiento de un modelo supervisado. En este caso vimos cómo ajustar los principales Hiperparámetros y 2 formas de búsqueda, tanto aleatoria como en forma de grilla, que podemos realizar para ajustar cada uno de los Hiperparámetros. Este ajuste se realiza, en general, una vez al momento de entrenar el modelo, pero también se suele reentrenar periódicamente una vez que el modelo ya está en producción, a medida que vamos juntando nuevos datos, nuevas informaciones y queremos ver si nuestro modelo continúa funcionando como al momento que lo entrenamos, o incluso si lo podemos mejorar respecto a lo que teníamos antes. Por lo cual, es un proceso normal de realizarlo en forma reiterada en el entrenamiento de nuestro modelo cuando está en producción. Muchas gracias.