 ¿Cómo andan? Bueno, vamos a seguir entonces. Ayer lo que hicimos básicamente, vamos a hacer un pequeño repaso para tener en mente, no más. Además de los ejemplos que vimos, que era el problema de valores propios y cuál otro vimos, al de completación de matrices, digamos. Lo que vimos básicamente fue, además de una introducción, como un abanico de condiciones de optimalidad, que podían depender de si la función era diferenciable o no, si el conjunto era convexo o no, si la función, si estaba... El problema de optimización era para todo el conjunto ambiente o era solamente su conjunto, cosa de ese estilo. Entonces básicamente teníamos algunas condiciones de optimalidad como que la clásica, que el gradiente se anule, o que las direcciones en las que te puedes mover el producto interno con el gradiente fuera siempre positivo, si había uno negativo quería decir que podías moverte para descender y lo mismo con el subgradiente. Entonces, vamos a empezar ahora, vamos a dar un par de ejemplos más y algo de métodos de optimización. Entonces, vamos a empezar con el métodos y después vamos a ir intercalando ejemplos. Entonces, hay una gran familia que son los métodos iterativos. Son de la forma... Vamos a hacerlo en general primero, son los que tienen la forma de digamos algo así. Tenemos un operador T, construimos una sucesión, vamos a partir de un operador T, arrancamos a algún lugar, vamos aplicando a T, aplicando a T y tal, construimos esta sucesión y que si tenemos suerte converge algún punto que sirva. Entonces, a ver qué es lo que quiere decir, primero que es lo que quiere decir que sirva idealmente que sea el óptimo global. Eso ya sabemos que en general es muy difícil, es algo que tenemos con vexidad y algunas cosas. Entonces, lo que podemos pretender es que converja a un mínimo local o más aún lo que vamos a intentar hacer es que converja a un punto de lo que hablamos hoy que cumple en la condición de optimalidad. Así que, en este caso, para fijar ideas, tenemos que ser renunciables en todo Rn y queremos hallar su mínimo, no es exactamente con vexidad. Entonces lo que hacemos es tratar de construir una sucesión que converja a un punto estacionario, un punto donde el gradiente se anule. Si tenemos suerte, eso es un mínimo local, si tenemos mucha suerte, eso es un mínimo global. Bien, entonces, el operador T este que va a ir construyendo la sucesión depende obviamente del problema, o sea de la función del conjunto donde estamos haciendo la optimización, pero además depende de lecciones que vamos a tomar nosotros. Por ejemplo, ¿cuántas cuentas tenemos a nadazar? ¿Cuán rápido queremos converger a la solución? Entonces, vamos a poner algunos, un par de ejemplos. Vamos a tratar primero el problema de el mínimo en un conjunto X, perdón, mínimo en toda Rn. Vamos a seguir trabajando por ahora con funciones en Rn, funciones de Rn a R. Y queremos hacer este mínimo. Y vamos a suponer que F es diferenciable. Así que lo que buscamos es un punto que cumpla esto, ¿no? Buscamos un punto donde se anule el gradiente. Entonces, una opción lo que podemos hacer es lo siguiente, estando parados en un punto XK, si el gradiente no se anula, entonces hay una dirección de descenso, hay una dirección, ¿no? Estamos parados en XK, estamos en R2, vamos acá en XK, y el gradiente no se anula, el gradiente es para allá, por ejemplo. Entonces, hay una dirección que es esta de acá, por lo menos, por ahí por lo menos una dirección que es esa en la cual la función decrece. ¿Está bien eso? La función decrece para ahí, y además es la dirección de máximo de crecimiento. El gradiente es la dirección de máximo de crecimiento, el menos gradiente es la función de máximo de crecimiento. Entonces, capaz que nos podamos mover para ahí un poco. Esa es la idea. O sea, lo que vamos a hacer es XK más 1. O sea, el próximo punto estando parados acá, empezamos de algún lugar arbitrario, y nos empezamos a mover con esta iteración. Lo que voy a definir ahora es un operador T posible. Estando parados acá, nos movemos en esta dirección un poco. Esto es lo que se llama como el método de descenso por gradiente o de la dirección máxima de gradiente, porque podríamos... Hay otras direcciones. Yo creo que capaz que por ahí también la función decrece. ¿Qué dicen? Vamos a ver después si hay más direcciones de crecimiento. Pero esa es la que, a priori, si estamos parados ahí, esa es como la mejor dirección. Entonces, surge varias preguntas. Primero, ¿cómo elegir el alfa? O sea, ¿cuánto nos movemos en esa dirección? ¿Capaz que nos podemos pasar? Si hay una elección de alfa razonable, si hay una elección de alfa que es la mejor de todas, si hay una elección de alfa que se pueda hacer computacionalmente en tiempo razonable. Pero la pregunta más importante es si esa solución al final va a converger o no a un punto de esto. ¿Capaz que sí o capaz que no? Eso va a depender, por ejemplo, de la elección de alfa. Bien. Entonces, ¿Es seguro que haya alguna alfa que haga que la función decrezca, o sea, en el sentido que la función evalua acá? Yo quiero esto, ¿no? Yo quiero eso. Quiero más que esto. Quiero esto y que, además, esta sucesión converja al mínimo de f y, además, que la sucesión de los x converja al larg min de eso. Eso es lo ideal. Ya sabemos que al mínimo global capaz que no, pero bueno, a un punto de estos. Entonces, por lo menos quiero esto. ¿Estamos seguros que hay algún por lo menos un alfa que verifique esto? Por lo menos uno muy chiquitito. De hecho, en realidad lo que pasa es que hay todo un entorno tal que si alfa está acá, entonces f de, vamos a ponerlo todo, xk menos alfa, la diente, es menor que fxk. Esto es porque la función es decreciente. Si quieren pueden pensar que, bueno, la derivada direccional en ese sentido es negativa. Entonces, por lo tanto, si te es derivada negativa, estrictamente negativa, entonces tenés esto. Un entornito es decreciente. Bien. ¿Cuál es el mejor alfa? Bueno, el mejor alfa es el que te minimiza esto de acá. El que minimiza esto de acá. Es el mejor. Claro. Para elegir ese alfa, te has que resolver otro problema de optimización que es minimizar esto en alfa. Es un problema de optimización ahora en r. ¿Entiendes lo? Para elegir el alfa en cada paso, o sea, yo voy a ir construyendo la sucesión esa, iterando. En cada paso tengo que elegir el alfa. Y después, calcular la dirección, el gradiente y después calcule el alfa ahí. Y después me muevo. Y después voy repitiendo eso. Si en cada iteración tengo que resolver un problema de optimización, bueno, más vale que sea fácil ese problema de optimización o que tenga otra manera de resolverlo. Bueno, en general, hay algunos casos en los cuales alfa sale, lo puedes hacer una cuentita. Y como hicimos allá, vamos a usar las condiciones de optimalidad que ya conocían ustedes. Anunlar la derivada. Es una función de rnr. La derivada y capaz que encontras un alfa para el cual esto se minimiza. Eso se puede hacer en algunos casos. En los casos más simples. En general, no. Si es una función más complicada, no la puedes usar. Pero basta decir que hay algunas maneras fáciles de calcular el alfa que funcionan. Y además, en general, si puedes hipótesis extra, como por ejemplo que la función, que el gradiente sea Lipschitz, entonces hay un alfa constante que te sirve siempre. Que no tenés que recalcularlo cada vez. En ese caso, voy a escribirlo acá, no importa mucho eso, pero cualquier alfa menor que uno sobre la constante de Lipschitz del gradiente funciona para siempre, digamos. Pones eso y te olvidas. Bueno, ¿y qué quiere decir que funciona? Quiere decir que la sucesión esta converge efectivamente en cualquier de esas elecciones que dije. Con el mejor alfa que puedes, minimizando esto en alfa con un paso fijo de estos, con algunos de los que no comenté, que hay que hacer algunas iteraciones sin tamas pero poquitas para calcular un alfa. O incluso, agarrás un alfa decreciente. Agarrás alfa igual uno sobre K. Cada vez lo vas decreciendo más y eso igual hace que esta sucesión converja a un punto de estos. ¿Vale? Hay dos preguntas planteadas que son si eso converge a un punto que te queden a gradiente nulo y dos ¿Es esto lo mejor que podemos hacer calculando ¿Es esta la mejor dirección? ¿Todo parece indicar que sí, no? Por lo menos localmente si estás parado ahí, miras alrededor la dirección de máximo de senso de CESA vas para ahí. Bueno, en realidad no, eso no es siempre lo mejor que lo que puedes hacer. Vamos a ir hacia ahí ahora hasta ahora tenemos entonces un problema de optimización NRN y una manera de construir una sucesión simple, que es calcular un gradiente y elegir un paso fijo si quieren y eso converge a un punto que tiene gradiente nulo. Después, claro, va a depender de las propiedades de f si puedes decir algo más sobre eso. Capaz que es un mínimo global, capaz que puedes decir que es un mínimo local, de eso depende de la función. Bueno, entonces ahora vamos a algunas maneras de mejorar esto. Esto, si tiene un problema de optimización que se quiere sacar de arriba fácil, esto lo hace en dos minutos, de hecho esto es así. O sea, el algoritmo este sería así. Esto no estaba allá, ¿no? El algoritmo sería de input que necesitamos. Un punto inicial una tolerancia y un paso. En realidad hay manera de calcularlo adentro. Supongan que necesitamos que nos dan un paso fijo y lo que sale es un punto que tenga gradiente chico que abrimos así. Digo por si quieren ir ahora e implementarlo ya. Mientras no estás contento eso así, simple eso converge a un punto estacionario. Bueno, un punto estacionario. Cerca, ¿no? O sea, siempre te dejes poner una tolerancia. Convergo un punto que tiene el gradiente tan chico como quieres. Norma de gradiente tan chico como quieres. Bien, la pregunta entonces era si esto es lo mejor que podíamos hacer. La respuesta es no. Hay ejemplos muy simples. Por ejemplo, si harán funciones cuadráticas cuyas curvas de nivel son estiradas, por ejemplo, yo que sé, x1 cuadrado más 100 y cuadrado. Entonces, lo que pasa con los métodos estos o lo que pasa con las direcciones por dicho con esta dirección, con la dirección del gradiente es que empiezan a pasar cosas así. Puedes pasar acá de x1 y te mueves en la dirección... el gradiente va para allá, ¿no? Entonces en la dirección no puedes estar gradiente y vas para allá. Así que capaz que caes como por acá. x2. Y puede venir para acá, así. X3. Y tiene un efecto de zigzaguero así. Va a converger esto al mínimo global en este caso y puso una función convexa. No está bueno. Se hace tardar más de lo que podrías. Entonces, claro, ¿qué es lo que pasa? Localmente era lo mejor que podía hacer porque yo tenía... yo estaba parado acá, yo tenía información de esto, ¿no? Estaba parado ahí, tenía información a más de la curva de nivel y hacia dónde tenía que ir para que eso descendiera. Pero no tenía una visión un poco más global de qué era lo que estaba pasando. Por ahora, esas cosas tengo que incorporar información de derivadas superiores. Por ejemplo, de la derivada segunda. Y ahí aparece, por ejemplo, el método Newton que acelera muchísimo la convergencia. Entonces, vamos a ver como ejemplo nada más. Algo como el método Newton que es... o bueno, vamos a ver una familia. Primero voy a escribir así. Premultiplicase el gradiente por una matriz de que te modifica la dirección. Un poco. Y ahí hay un montón de elecciones posibles. Yo voy a comentar solamente una o no sé si dos. ¿Qué es el siguiente? ¿Qué es? El método Newton. Arrar la información de la derivada segunda y corregir la dirección del descenso por gradiente con esa derivada segunda. Esto sale de lo siguiente. Supongamos que estamos parados en XK y vamos a ver cómo es la función localmente. Entonces, F localmente es lo que vale en XK más gradiente en XK por X menos XK más un medio X menos XK transpuesto la gesiana y X menos XK. ¿Está bien? Más algo de orden menor. Si tenés ganas de calcular derivada segunda esto es la mejor aproximación que tenés a la función localmente. Bueno, minimizad esto. Minimizad como si la función fuera esta. Minimizada, derivada igual a cero y ya está. Esto es una función cuadrática. Así que derivad respecto a X que es lo único que tenés acá. Deriva respecto a X y despejad, te queda esto. Sin el álcool. ¿Estás parado en algún punto de estos? La parada acá, calculas derivadas segundas tenés la aproximación local ahí y hallás cuál sería el mínimo si la función fuera solamente la aproximación que tenés hasta gradoso. Y te mueves hacia ahí. Si sacás el alfa, eso es exactamente el método de Newton que corresponda minimizar eso. Después hay algunas variantes que le pones un alfa ahí para moverte un poco menos o un poco más. Entonces, esto tiene una gran ventaja que se converge mucho más rápido que aquel. ¿Cuál es la desventaja? Sí. Hay casos donde empezás a iterar y te vas. Lo que tiene el método de Newton es que tenés una cuenca de atracción en donde funciona rapidísimo. O sea, si estás cerca del mínimo eso converge como trompada. Supongamos que tenemos una situación de esa, donde estamos cómodos. ¿Qué es lo que lo que no me gusta mirando esto con respecto a eso? Hay que calcular muchísimo más. Te hay que calcular el gradiente seguro, pero para corregir te hay que calcular todo el gesiano. Estos son, es del orden de si estás en Rn, son n derivadas que te hay que calcular. Acá te hay que calcular del orden de n cuadrado. Y además invertir la matriz. Eso puede ser complicado. Hay maneras de ir sorteando un poco eso. Bueno, y de hecho hay algunas direcciones de estas que son como parecidas a estas, pero que te sacás el problema de ese invertir o por ahí. Que agarras solamente la diagonal. Entonces te hay que calcular de vuelta del orden de n. Invertir la diagonal es solamente hacer uno sobre y eso funciona muy bien también. Entonces, conservar la complejidad en cantidad de cuentas que es del orden de n y tenés igual una mejora de velocidad. Bueno, y así como esto este, el método Newton sale de aproximar la función localmente por el polinomio de grados de Taylor. Uno podría decir, bueno, si quiero más velocidad, capaz que si calculo, si estoy dispuesto a calcular el desarrollo hasta orden 3, entonces esto mejora y es cierto. Haces el desarrollo de orden 3 y calculas acá otro término y eso te da otra iteración que te mejora todavía el método Newton. De vuelta, a costa de calcular mucha más derivada. Quería hacer un comentario más de esto. Ah, bueno. Estos son algo que dimos sin memoria. O sea, estoy parado en un punto, calculo a dónde voy, me muevo a ese punto y me olvido de dónde estaba. Calculo acá, de acá y de este ya me olvido. Ahora calculo a este punto solamente a partir de la información que tengo acá. Hay algunos algoritmos que incluyen, o sea, es como muy parecido a esto, pero en la dirección incluyen un poco de información de dónde estaba antes. Es relativamente reciente y eso mejora el orden de convergencia. O sea, mejorar la velocidad de convergencia se puede hacer de manera, mejorar la constante y vamos a que tardes un poco menos para el orden de convergencia, que es que cuando escalas el problema tenés una diferencia mucho más grande. Bueno. Bien. Estoy yendo más rápido lo que pensaba. Bueno, bien. Esto en cuanto a algoritmos de... algoritmos los más básicos posibles para resolver el problema de minimización en Rn. Después voy a hablar un poquito de qué pasa cuando no estamos en toda Rn para no salirnos del conjunto. Pero vamos a dar un ejemplo ahora. Ejemplo de vuelta como en los de ayer. En principio no tiene nada que ver con esto. Ejemplo 3, ¿no? Ayer vimos un ejemplo de como... de alzperadineal mezclado con aprendizaje automático o problemas de machine learning y el problema de valores propios. Ahora vamos a dar algo mezclado con estadística de los estimadores de máxima verosimilidad. Entonces, supongamos que tenemos... cuando ayer le dije que de la mayoría de esto yo sabía poco y que de algunas cosas sabía mucho más esta no es una de ellas. Esta es una de las que sé menos todavía. Pero bueno, supongamos que tenemos una familia de... vamos a ver cómo la escribí acá. Pesuvx. Una familia que tiene la probabilidad indexada por un vector x con densidades. Entonces, cuando miramos esto como función de x para un y fijo es decir, el y está fijo y lo miramos eso como función de x. Eso recibe el nombre de función de verosimilitud o de like lijo de en inglés. Y en general, las cuentas que ahora vamos a dar es conveniente trabajar con el logaritmo. Que es así, el x que es el logaritmo de eso ahí. Piensen que tienen un modelo que genera cosas. X son las... ¿Cómo se llama? ¿Qué es lo que quiero estimar de los modelos? Los parámetros, ahí va. Aquí son los parámetros del modelo y ahí son las muestras. Entonces, quiero estimar cuáles son los parámetros del modelo dado que estoy observando las muestras. Ahora vamos a ver algunos ejemplos de esto. Yo tengo las muestras y quiero ver cuál es el parámetro más probable dado que vi esas muestras. Entonces, el problema de S es... El problema de S es... Vamos a escribirlo. Ok. Que maximiza la verosimilitud. Entonces el problema es... Entonces el problema de estimación de un parámetro por máxima verosimilitud en general te termina dando un problema de optimización que hay que resolver de alguna manera. Y vamos a ver algún ejemplo. Entonces vamos a ver modelos lineales con ruido. Supongamos que tengo un modelo lineal de medidas, por ejemplo. Hay un parámetro X que quiero estimar que no conozco y lo que puedo hacer es medir algunas variaciones, una reacción lineal de los parámetros X. Pero tengo ruido ahí que se me suma. Conozco Y, conozco A porque es la manera de medirlo. Quiero ver cuál es el mejor X cuál es el X más probable que va a usar VI. Y tengo alguna distribución de probabilidad sobre el ruido. Entonces esto ustedes lo han hecho ya. Y lo hicimos allá. De hecho, en un caso particular que no vamos a dar cuenta ahora que lo hicimos. Entonces, ¿qué tenemos acá? Vamos a escribir que X es lo que queremos estimar. Queremos estimar X. Los I subí son las medidas y los V subí es el ruido que vamos a suponer ID y condensidad P. Entonces lo que da la función esta que vimos hoy es producto de todas las para todos los I de todas las medidas de esto. Y entonces por eso comienzo siempre a trabajar con el logaritmo porque esto transforma el producto en la suma de logaritmo. Bien, y veamos en un caso no dice cuál era qué distribución sería el ruido. Así que vamos a poner un par de ejemplos y ver qué es lo que da. Entonces, si el ruido es gausiano de media cero vamos a poner. Entonces, la densidad es esa y cuando metemos esto cuando hacemos la suma de los logaritmos de todas esas cosas lo que termina dando es esta función de veracimilitud. El logaritmo de 2P encima cuadrado eso sale de acá menos donde es la matriz formada por las filas de subi. Entonces, lo que quieren cuando tienes medidas I y ruido gausiano quieres estimar el X lo que haces es maximizar esta parte es constante así que maximizas eso lo que es lo mismo que minimizar en X a X menos I. Y eso apareció allá es el mínimo cuadrado es lo que dije que ya todos conocían. Bien, ¿qué pasa cuando es una distribución distinta del ruido? Bueno, y cómo hayas acá si tenés todas las medidas I tenés A y quieres hallar X y vamos a resolver este problema de optimización. Bueno, hay una manera que o sea, esta tiene forma cerrada hay mucha manera de hacerlo en la que ahora el niñado lo ven sino a partir de lo que íbamos a hallar podemos hacerlo también, calculamos las condiciones de la optimalidad que derivamos y volamos a 0 y ahí espejamos y ahí sale cuál es el estimador de máxima veracimilitud. Cuando el ruido es laplaciano entonces no hay a hacer las cuentas pero lo que queda básicamente es que vieron que acá esto la normal cuadrado sale de este acá del cuadrado, de este Z cuadrado acá cuando aparece, esto es muy parecido las constantes no nos importan porque en definitiva cuando vamos a optimizar las constantes no importan y lo que va a quedar entonces acá es que el problema de máxima veracimilitud maxima veracimilitud es X es el arg min en X de AX menos Y, la norma 1 bueno, y ese como si tenemos una matriz A y un vector I como hallamos este mínimo vamos a usar todo lo que vimos hasta ahora podemos hacer descenso por gradiente hay lugares donde es no diferenciable eso bueno, voy a dejar por ahí bueno vamos a volver un poquito a los algoritmos optimización y vamos a ver ahora métodos retomamos el método de descenso por gradiente pero para cuando estamos trabajando con esto ahora queremos optimización con restricciones es decir, queremos resolver eso y ahora el conjunto X es algo que no es todo el espacio repito, por ahora estamos trabajando en Rn o bueno, algún espacio de matriz o algo de eso bueno, entonces que es lo que podemos hacer? de vuelta estamos parados, vamos a suponer que X es convexo si es convexo tenemos las condiciones de la optimalidad que íbamos a hallar y vamos a suponer por un segundo que F es diferenciable también F es diferenciable y X es convexo entonces tenemos una de las condiciones de la optimalidad en el medio entonces, ¿qué es lo que podemos hacer? estamos parados en XK podemos intentar movernos en la dirección de gradiente pero lo que puede pasar es que eso te lleve afuera el conjunto entonces hay que tratar de volver al conjunto entonces, en general hay una familia de métodos de optimización para optimización con restricciones que tienen la siguiente cara vamos a aprovechar que X es convexo para la siguiente la dirección, o sea, estamos parados en un lugar que vamos a elegir una dirección a la cual movernos y cuánto movernos ¿está bien? la dirección a la cual movernos la vamos a elegir elegiendo un punto del conjunto porque como el conjunto es convexo es dar lo mismo, elegir una dirección o elegir un punto del conjunto ¿no? te da un conjunto convexo, supongo que estás en el bordo adentro, no importa pero ¿cuáles son las direcciones en las cuales te puedes mover? son las direcciones en las cuales hay punto, digamos, ahí ¿no? cualquier punto del conjunto te define una dirección factible así que lo que hacemos es el lugar de elegir la dirección directamente elegimos un punto y después consideramos la dirección hacia ese punto desde XK entonces acá hay distintas formas de elegir este X barra de vuelta, distintas formas de elegir el alfa pero vamos a dar solamente una manera de elegir X barra que es el lugar del método, lo que se llama método de gradiente proyectado entonces elegimos X barra como lo siguiente esto es estamos parados en XK, nos vemos en la dirección del gradiente un poco, un paso ese que de vuelta después vemos como lo hacemos y proyectamos eso el conjunto o sea, si eso nos saca el conjunto lo proyectamos de vuelta al conjunto y eso define el punto de X barra este punto de X barra entonces está en el conjunto pues lo proyecté y eso define la dirección y una vez que te des la dirección te mueves en esa dirección algo este alfa tiene que estar en 0 1 no importa pero vamos a elegir alfa 1 para fijar ideas vamos a poner alfa 1 entonces con alfa 1 fíjense acá de XK se cancela y me queda directamente voy a X barra ¿se ve eso? pongo alfa igual 1 así que es como estoy parado en XK y me muevo todo lo que me puedo mover de X barra en la dirección X barra termina en X barra entonces con alfa igual 1 el método queda XK más 1 que es XK perdón es X barra exactamente así que es a X de XK menos ese gradiente así que es justamente eso que dije recién estás parado en XK te mueves un poco en la dirección del gradiente si eso te saca para afuera del conjunto proyectas al conjunto y te quedas ahí bueno de vuelta las mismas preguntas miren que acá el paso está escondido acá en este S el cuánto te mueves está escondido en este S hay resultado de convergencia o sea esto eligiendo bien el S cuando digo eligiendo bien son como las cosas que dije hoy esto converge a un punto que cumple las condiciones de de la optimalidad que vimos allá eso por un lado bueno y hay una manera hay una cuentita que se puede hacer para convencerse uno de eso que es que cuando se estanca este método cuando te cuando vas a hacer las cuentas y te das cuenta que te quedas en el mismo lugar estás parado en XK cuando elegís XK exactamente como X barra ahí no tienes la acción de moverte así que el método se estanca cuando X barra es igual a XK está bien? me escribiré eso cuando XK es exactamente X barra o sea que es esto porque como el X barra lo elegimos así y eso apareció allá exactamente eso era esta condición es equivalente a la condición de optimalidad ahora que habíamos comentado eso allá o sea que el algoritmo se estanca cuando llegaste a un punto que verifica la condición de optimalidad el punto más cercano el conjunto o sea es bueno bien, fue más rápido que prevía una pregunta algo de acá bueno, vamos a ver otro ejemplo y luego lo que vas a hacer es interpretar esto como discretizaciones de ecuaciones diferenciales y vamos a ver algunas cosas creo que son interesantes de ahí ejemplo 4 entonces para ahí intercalando cosas todo esto con algún ejemplo cuál puedo contar ahora para aprovechar algo de lo que sé hoy de lo que sé así no siento que hablé todo el día de cosas que no sé el problema de grafo machimosa un grafo todo el mundo sabe lo que es definimos un grafo es un par B donde B son los vértices y E son las aristas que son pares de vértices un grafo es algo así es unos vértices y tensa aristas y definición dos grafos son isomorfos dos grafos B1 E1 B2 B2 son isomorfos si solo sí hay una abyección entre los conjuntos de vértices tal que te conserva la estructura o sea que si te des una arista en un grafo la abyección te lo lleva en otra lista o sea que VI VJ está en E1 si solo sí PI de VI PI de VJ está en B2 o sea son como un grafo son unidos por aristas y uno de esos lo puede dibujar y lo está desordenado este es B1 B2 B3 B4 B5 pero los puedo ordenar distinto estos noos o capaz que alguien se le ocurre que este es el 1 este es el 2, el 3, el 4 y el 5 y cuando lo dibuja lo puede dibujar de otra manera la pregunta es como darse cuenta si son isomorfos entonces algún ejemplo de grafos isomorfos bueno, unos bien sencillos ese grafo y ese grafo está claro que son isomorfos acá, acá hace tic, tic, tic, tic y vuelves agarras este y lo tiras para acá agarras el dibujo y lo mueves este lo mueves para acá y este lo mueves para allá arriba si lo puedes hacer con cuerdas eso, lo sé otro ejemplo un poco más complicado si me acuerdo como era este voy a mirar por las dudas creo que lo dibujé por acá este va con este con ese con el último con este, con ese y con el último y este va con ese con este y con este bueno, esos grafos son isomorfos también si este es este, tengo que identificar cuál es cuál este es este este es este y bueno, uno puede ir mirando ahí si quieren podemos mirar alguno más entonces este tiene que ser este lo vamos pintando este va con este este va con este qué vamos a poder decir este va con el segundo ahí este va con este entonces fíjense que ahora que tengo estos dos puedo ver cuál es este porque este es este y este es este así que necesito uno que esté conectado con esos dos con estos dos que es este acá ahí pueden ir siguiendo y pueden encontrar el isomorfismo bueno, está el problema es el siguiente para grafos chicos este no es capaz que incluso no es tan fácil darse cuenta que son isomorfos así de simple vista o sea, hay que estar un ratito la pregunta es cómo darse cuenta si dos grafos son isomorfos o no ese es un problema de hecho tiene nombres ya, el problema isomorfismo grafos que es el siguiente problema, dado dos grafos decidir si son isomorfos o no decidir y decir responder, sí o no los de dos grafos me dejes decir si son isomorfos o no ni siquiera he encontrado no he encontrado como lo encontramos recién, el isomorfismo o como parcialmente responda, sí o no hay algunos capaz que les tiro algunos par de grafos donde es muy fácil decir que no por ejemplo, si tienen distinta cantidad de aristas o yo que sé hay cosas muy fácil para verificar que no pero si verifican que tienen la misma cantidad de artes no sé los grafos la distribución de grafos, todas esas cosas todo eso te dio que sí, que son iguales calculas el espectro algo que voy a hablar capaz te da que son iguales, igual no puedes decir todavía puede ser que sí o que no y de hecho este problema todavía no está resuelto no está resuelto en el siente sentido es un problema que está entre las clases P y NP no se escucharon hablar pero a no solo que las clases esas colapsen estas clases están en el medio es más difícil que P y un poquito más fácil que NP lo que quiere decir que no tenemos esperanza de encontrar algoritmos polinómicos que resuelvan o lo que es lo mismo bueno no, no es lo mismo no voy a decir nada, bueno es lo mismo pero en principio es un problema muy difícil y hay un problema relacionado, otro este se refiere al problema el isomorfismo de grafos y es el graph matching problem que este sí es encontrar el isomorfismo o en caso que no sean isomorfos encontrar algo más o menos cerca de un isomorfismo, lo más parecido un isomorfismo en algún sentido con alguna medida que quieras poner por ejemplo cuál es la mínima cantidad de aristas que difieren cosas así ahora lo escribo un poco distinto este problema claramente si sabes resolver este claramente sabes resolver este este es más difícil que este y de hecho es SNP el problema de graph matching bueno, vamos a escribir el problema de graph matching con un problema de optimización entonces y vos qué es lo que se puede hacer entonces para eso lo primero que voy a hacer es definir lo que se llama la matriz de adjacencia un grafo, o sea da un grafo como esos definimos la matriz de adjacencia A de la siguiente manera ai j vale 1 o 0 si bi vj es una arista y 0 si no entonces es una matriz cuadrada simétrica que codifica la conectividad del grafo simétrica porque las aristas no están direccionadas entonces donde te es un 1 te es una arista entre el vértice i y el vértice j entonces que existe un isomorfismo se puede escribir en términos de la matriz de adjacencia si tenemos a y b grafos isomorfos perdón, matriz de adjacencia grafos isomorfos entonces existe una matriz de permutación al que conjuga estos matriz de permutación lo que estoy haciendo en definitiva es reordenando los nodos multiplico por una permutación por la transpuesta derecha y por p a la izquierda esto te reordena las 1 a las 2 las filas de las columnas y el otro te reordena las otras entonces es lo que decimos recien vos podes numerar estos nodos de una forma y lo podes numerar acá se ve mejor una forma, numerar los nodos de este grafo de otra forma queres ver si hay una reordenación esa que te transforma uno en el otro la reordenación es la matriz de permutación que te reordena exactamente los nodos bueno entonces como podemos plantear un problema de optimización que resuelva o que resolver el problema significa resolver alguno de esos problemas bueno así el argmin de a menos b de transpuesta alguna norma voy a ponerla que usamos ayer con p en la matriz de permutación queremos minimizar una función o sea el conjunto de x que estamos llamando hasta hace un rato le llamo x ahora es el conjunto de la matriz de permutación p es un conjunto de matriz y lo podes pensar como vamos a ayer como que son las matrices las pueden empezar en rn por n y estas son condiciones sobre las matrices que se pueden escribir fácilmente que bueno, que la matriz de permutación tiene un 1 por fila y por columna eso se puede escribir de alguna manera bueno el problema es que por que no podemos aplicar los algoritmos que vimos recien a esto no es convexo, mas que no es convexo es un conjunto discreto la matriz de permutación entonces si estas en todo el espacio en rn por n la matriz de permutación son algo que estan estan así saltas de una de estas a otra de estas a esta, eso podemos pensarlo sobre lo que decís vos el problema es que la única manera de asegurarte que llegas al mínimo de esto es si las recorres todas y cuantas son todas son n factorial así que olvídalo para n más de 10 ya esta perdiste y es la verdad para n más de 10 no lo podes hacer en la computadora entonces hay que hacer algo por eso este problema es np entonces no tenemos ninguna esperanza de encontrar un algoritmo que resuelva esto si podemos tener esperanza de hacer cosas razonables entonces lo que hacían por acá es tomar la envolvente convexa de esto es un conjunto convexo todo esto no es el conjunto convexo mas chico que contiene a la matriz de permutación ese conjunto resulta ser el conjunto de las matrices que llaman doblemente estocásticas tenemos este otro problema ahora y dejenme escribirlo así esto lo podría haber escrito así yo multiplico acá por p a derecha de los dos lados y tengo ahora les digo por qué lo multiplico por qué lo escribí así donde d es el conjunto este que es la envolvente convexa d es el conjunto de matrices n por n tales que todas las filas suman 1 eso lo voy a escribir así todas las columnas suman 1 y todas las entradas son positivas como no multiplicar la matriz por el vector de 1 te da el vector de 1 eso quiere decir que las filas y las columnas suman 1 y que todas las entradas son positivas esa es la envolvente convexa del conjunto de la matriz de permutación entonces ahora tenemos un conjunto convexo y ahora sí podemos hacer esas cosas vamos a hacer exactamente lo que dije recién agarrar estas en una matriz cualquiera calculas el gradiente te mueves, si eso te saca este conjunto proyectas a este conjunto y listo bien por qué lo escribí así esto porque esta funciona así escrita es convexa como la había escrito hoy no pues tenías el p, p y p transpuesto tenías como un producto ahí que involucraba p y p transpuesto y eso lo hace que no es convexa pero escrito así sí es convexo bueno claro entonces uno resuelve esto de hecho la mejor manera de resolver esto es una variación mínima del algoritmo que vimos recién de ese que era xk más 1 igual la proyección de xk menos ese le había puesto el gradiente de este eso que vimos hoy es la mejor manera de algo parecido a eso es la mejor manera de resolver esto qué más iba a decir eso eh no de hecho puedes calcular la proyección a esto de forma cerrada al conjunto de matrices que verifica eso de forma cerrada y hay que conjuntar la matrices que verifica eso de forma cerrada obviamente que es todo lo que es negativo lo pones a 0 esa es la proyección al conjunto si te ves una matriz cualquiera que tiene entradas positivas y negativas y lo que es proyectar el conjunto de matrices que tiene entradas positivas todo lo que es negativo lo matas, lo tiras a 0 y esa es la proyección y para calcular la proyección a este conjunto hay una se hace de forma cerrada pero calcular la proyección al conjunto de no se puede hacer de forma cerrada de hecho esa es una de las partes complicadas y lo que se hace es si quieres proyectar proyectas acá proyectas acá el resultado proyectas acá y vas iterando y eso te convergen a la proyección pero tienes un algoritmo iterativo en el medio no tienes una forma cerrada se entendía eso más bueno bien el problema entonces es que para hablar algo sobre sobre cuánto te sirve esto para resolver esto el objetivo es resolver esto ya sabemos que no vamos a poder resolver pero capaz que para alguna clase de grafos especial esto te resuelve el problema para todos ya sabemos que no esto entonces te va a dar una matriz p gorro que claro está acá o sea que puede ser esta que está acá bojerías una de mp lo que puedes hacer es buscar después la matriz de permutación más cercana a eso y esperar a que esa sea solución de esto y eso no siempre es a veces sí y a veces no hay una clase de grafos para las cuales la solución de este problema es única fíjense que si este problema tiene solución esa solución también es solución de este problema de este conjunto más grande si este problema tiene solución vamos a suponer que tiene solución entonces este problema tiene solución este problema siempre tiene solución pero si este problema tiene solución entonces esa solución es solución de este problema perdón voy a decirlo de vuelta porque lo dije mal solución tiene siempre solución en el sentido que esto te de cero exactamente o sea que sean isomorfos si te hace una matriz de permutación que te hace esto cero entonces el mínimo de esto es cero porque este conjunto es más grande que este así en particular todas las soluciones de acá están acá pero puedes traer más acá supongo que eres una sola acá hay una sola matriz de permutación que te conjuga a con B que es esta que está acá resolves esto esto te va a dar una matriz que no necesariamente va a ser P0 porque a qué sabes a qué va a converger esta solución capaz que converge a esa o capaz que converge a otra si tiene más soluciones te puede converger a esa de ahí lo que haces es buscar más cercana que eso es una opción ciertamente no es la más inteligente pero eso es una opción bajo qué condiciones este problema soluciona este problema te soluciona este problema bueno hay una clase de grafos ahí para las cuales estos dos problemas son equivalentes no que nos entra en eso si estas dos son soluciones todo esto es solución eso seguro porque? si n no en el factorial pero lo que decía Diego es que si tenés como estas funciones convexas y el conjunto es convexo si tenés dos soluciones todo el segmento que las une solución si vos sabés que el mínimo esto es cero por algo y lo que querés hacer es encontrar la matriz de permutación bueno entonces sabes que hay uno de estos segmentos que es todo de soluciones la pregunta es como allá de ese segmento pues no puedes probar con todas porque son en el factorial para eso probabas directamente con la matriz de permutación bueno hay un montón de problemas abiertos en estos que son súper interesantes no porque además de hecho hay una cosa que no está explotado acá y que la matriz de permutación es muy importante si hay resultados de robustos de eso si osea si que bajo ciertas condiciones que sobre el espectro tenés como un un entornito ahí que todas las que están ahí perdón que si esta solución entonces eso te cae acá y ahí puedes proyectar si estás tranquilo bien unos son ejemplos de grafos que no importa eso hay ejemplos donde la solución de este problema es el varicentro de esto y ahí está igualmente lejos de todos ahí no tenés lo que hacer bien vamos a hablar entonces ahora bueno si me quiero hacer de estos sí es de lo que sé osea que si quieren hacer más preguntas es el momento no le suena lo escribí hoy lo escribí así hoy no le suena eso algo de lo que vimos allá no exactamente pero algo similar lo que habíamos visto era lo escribí con un no es exactamente lo mismo no pero tiene una cara parecida allá lo que hicimos fue minimizar el conjunto de las matrices ortogonales y acá habíamos puesto en realidad la diagonal de esto o una matriz diagonal cualquiera ¿si se acuerdan eso? bueno mañana capaz que lo atamos un poco eso porque lo que lo que habíamos visto hasta ahora todo lo que venimos viendo hasta ahora es para minimizar funciones que están definidas en algún subconjunto de Rn o NRn y mañana vamos a ver qué pasa cuando en el conjunto de X tenemos una estructura de variedad diferenciable por ejemplo y vamos a ver si podemos aprovechar eso para hacer cosas un poco más inteligentes que esto y ahí va a venir un poco el problema de valores propios y un poco eso y ya aprovecho para invitarlos a la chala de Diego mañana que va a hablar de bien bueno volvamos entonces a los métodos iterativos y lo que vamos a ver es interpretación no, interpretación o conexión ¿cómo le va a poner esto? vamos a ponerle métodos iterativos y cuestiones diferenciables entonces bueno fíjense que lo que estamos buscando vamos a atar ahora veo que todos los métodos que vimos son discretos en el sentido que construimos una sucesión que esperamos que converja a un punto de de gradiente nulo vamos a atar a atar eso con una versión continua del mismo de lo que vamos a hacer es claro, si uno dice quiero arrancar de algún punto y seguir alguna trayectoria que converja a un punto donde se anule de gradiente creo que es natural pensar en esto ¿no? pensar en el flujo de gradiente 1, x de 0 algo cuestiones diferenciales por el mundo había alguna cuestión diferenciada en su vida bueno, acá estamos en nrn por ahora y lo que hacemos es en cada punto buscamos una solución que sea tangente al menos el gradiente en todo punto es fácil ver lo siguiente es fácil ver que bueno, vamos a tener unicidad de soluciones y vamos es fácil ver lo siguiente que la derivada respecto al tiempo de f de x de t es menos la norma de gradiente de f en x de t que esto es estrictamente negativo o sea que quiere decir esto que la función decrece sobre la sorbita solución se va decreciendo constantemente ahi hecho converja un punto de de gradiente nulo bajo cierta si puedo decir bien cuadrado es el plugin interno bien entonces que pasa si idealmente si pudiera chufar esto en una computadora carría resolver eso le llaman flujo de gradiente acá de cualquier punto seguís eso y eso te va a parar bajo ciertas condiciones a un punto donde se anula el gradiente a ver bueno vamos a implementar eso en la computadora como se implementan las ecuaciones diferenciales en computadora discretizadas y lo que te hace para discretizar acá es la derivada vamos a hacer lo siguiente una manera un método para resolver ecuaciones diferenciales numéricamente consiste en discretizar la derivada cosciente incremental tomamos un poquito h esa es una discretización de la derivada y entonces la cosciente diferencial te queda así a ver en lugar de derivada pongo el cosciente incremental con un h chiquito y acá pongo el gradiente evaluado en el punto a ver y esto es otra vez lo mismo si pasas el h para acá y despejas xk más 1 de acá despejando xk más 1 que queda xk lo paso para allá menos h por el gradiente es el método de descenso por gradiente que estudiamos hoy al principio así que la discretización del flujo de gradiente es exactamente el método de descenso por gradiente bien esto es lo que se llama esta manera de discretizar la opción diferencial es lo que se llama el método de Euler método explícito de Euler o lo que también se llama este es backward hay uno que forgo y hay otro que es backward no importa los nombres en inglés se dice también método explícito y método implícito este es el método explícito hay otro método de discretización de ecuación diferencial que es el que les digo el implícito que en lugar de de discretizar así la ecuación diferencial la discretiza las mejores propiedades de estabilidad y de convergencia que se discretiza así esto es método implícito muy parecido pero evaluas el gradiente el menos gradiente en el punto al que vas digamos pero eso se llama implícito porque no puedes evaluarlo de antemano de acá no podemos despejar X k más 1 porque está metido acá pero lo que podemos escribir es lo siguiente X k así lo puedo despejar que es así y no importa por qué pero esto es la condición de optimalidad esto sí despeje esta es la condición de optimalidad de un operador que se llama operador proximal que lo voy a escribir esto es equivalente a esto lo voy a decir cuál es esto no tiene demasiado tiene muchísima importancia pero no importa los detalles ahora quiero que se queden con la idea de que hay una manera de discretizar el flujo gradiente que te da lugar al método de senso por gradiente que estudiamos y hay otra manera de discretizar el flujo gradiente con otro método para discretizar ecuación diferencial queda lugar a otro método de utilización que es el método proximal el método proximal es el siguiente el no lo voy a apagar pero básicamente lo que hace es trata de minimizar la función sin alejarse demasiado del punto donde estás como que pesa un poco minimizar la función pero no te alejes demasiado de X k lo voy a escribir el operador proximal de z es el argmin en X de f de X más medio de argmin de todas entonces estás en un z y es como que sin ir demasiado lejos del z trata de minimizar la función este es un es un operador que define una iteración que es esta que bajo ciertas condiciones muy benevolentes se puede probar que esto converge al mínimo de f lo que quiero decir de esto es que es bastante distinto al al de senso por gradiente y que herramientas de este estilo pueden resolver problemas de optimización cuando la función es no diferenciable que hasta ahora no teníamos ninguna y dicho eso de función no diferenciable tengo 10 minutos todavía ah, está terminé una cosa última cosa y es que una cosa interesante es que en lugar de una ecuación diferencial se puede una inclusión diferencial que es la siguiente ayer hablamos de subgradiente y todas esas cosas en lugar de tener gradiente ahí lo que puedes hacer es una inclusión diferencial así menos el subdiferencial y esta inclusión diferencial si puedes hipótesis de convexidad en f sorprendendemente tenés unicidad de soluciones acá también un termatipo de picar digamos una convexidad de f y esto da lugar, discretizar esto da lugar a algoritmos para minimizar funciones cuando no son diferenciales pero puedes calcular el subdiferencial de esa manera o de esta manera se pueden resolver este tipo de problemas que están muy de moda por por ejemplo la aplicación que les conté ayer y otras aplicaciones que capas que les cuento mañana este joven ahí