From c518dc52c18e1032f3a41f57bbf66e1cabd48eff Mon Sep 17 00:00:00 2001 From: Lucia Cipolina Kun Date: Tue, 15 Sep 2020 20:50:45 -0400 Subject: [PATCH 01/11] Create week14 --- docs/es/week14 | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/es/week14 diff --git a/docs/es/week14 b/docs/es/week14 new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/docs/es/week14 @@ -0,0 +1 @@ + From f68a5c1f809256479efcc2cf29c6746408ea8a88 Mon Sep 17 00:00:00 2001 From: Lucia Cipolina Kun Date: Tue, 15 Sep 2020 20:51:18 -0400 Subject: [PATCH 02/11] Delete week14 --- docs/es/week14 | 1 - 1 file changed, 1 deletion(-) delete mode 100644 docs/es/week14 diff --git a/docs/es/week14 b/docs/es/week14 deleted file mode 100644 index 8b1378917..000000000 --- a/docs/es/week14 +++ /dev/null @@ -1 +0,0 @@ - From 3170e008cfd5db2d9406f575119e20882909e2c2 Mon Sep 17 00:00:00 2001 From: Lucia Cipolina Kun Date: Tue, 15 Sep 2020 20:51:58 -0400 Subject: [PATCH 03/11] Created Week14 --- docs/es/week14/test.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/es/week14/test.md diff --git a/docs/es/week14/test.md b/docs/es/week14/test.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/docs/es/week14/test.md @@ -0,0 +1 @@ + From 4970a8cf713d195e17e1c0af843e48e6b7e46f82 Mon Sep 17 00:00:00 2001 From: Lucia Cipolina Kun Date: Tue, 15 Sep 2020 20:53:15 -0400 Subject: [PATCH 04/11] Added translated files --- docs/es/week14/14-1.md | 431 ++++++++++++++++++++++++++++++++++ docs/es/week14/14-2.md | 492 +++++++++++++++++++++++++++++++++++++++ docs/es/week14/14-3.md | 512 +++++++++++++++++++++++++++++++++++++++++ docs/es/week14/14.md | 30 +++ 4 files changed, 1465 insertions(+) create mode 100644 docs/es/week14/14-1.md create mode 100644 docs/es/week14/14-2.md create mode 100644 docs/es/week14/14-3.md create mode 100644 docs/es/week14/14.md diff --git a/docs/es/week14/14-1.md b/docs/es/week14/14-1.md new file mode 100644 index 000000000..3ec2e5281 --- /dev/null +++ b/docs/es/week14/14-1.md @@ -0,0 +1,431 @@ +--- +lang-ref: ch.14-1 +lecturer: Yann LeCun +title: Deep Learning for Structured Prediction +authors: Junrong Zha, Muge Chen, Rishabh Yadav, Zhuocheng Xu +date: 4 May 2020 +translator: lcipolina (Lucia Cipolina-Kun) +date: 15 Sep 2020 +--- + + + +## Predicción estructurada + +Es el problema de predecir la variable 'y' para una entrada 'x' dada que es mutuamente dependiente y restringida, en lugar de valores escalares discretos o reales. La variable de salida no pertenece a una sola categoría, sino que puede tener valores posibles exponenciales o infinitos. +Por ejemplo: en el caso de reconocimiento de voz, escritura a mano o traducción de lenguaje natural, la salida debe ser gramaticalmente correcta y no es posible limitar el número de posibilidades de salida. La tarea del modelo es capturar la estructura secuencial, espacial o combinatorial en el dominio del problema. + + + + +### Primeros trabajos sobre predicción estructurada + +Este vector se alimenta a un TDNN que proporciona un vector de características que, en el caso de los sistemas modelo, se puede comparar con softmax, el cual representa una categoría. Un problema que surge en el caso de reconocer la palabra que se pronunció, es que diferentes personas pueden pronunciar la misma palabra de diferentes formas y velocidades. Para resolver esto se utiliza "Deformacion en Tiempo Dinamico". + +La idea es proporcionar al sistema un conjunto de plantillas (templates) pregrabadas que correspondan a vectores de secuencia o características que alguien haya registrado. La red neuronal se entrena al mismo tiempo que la plantilla para que el sistema aprenda a reconocer la palabra en diferentes pronunciaciones. La variable latente nos permite deformar en el tiempo el vector de características para que coincida con la longitud de las plantillas. + +
+
+Figura 1. +
+ +Esto se puede visualizar como una matriz ordenando los vectores de características de TDNN horizontalmente y las plantillas de palabras verticalmente. Cada entrada en la matriz corresponde a la distancia entre el vector de características. Esto se puede visualizar como un problema gráfico en el que el objetivo es comenzar desde la esquina inferior izquierda y llegar a la esquina superior derecha atravesando el camino que minimiza la distancia. + +Para entrenar este modelo de variable latente, necesitamos hacer que la energía para las respuestas correctas sea lo más pequeña posible y más grande para cada respuesta incorrecta. Para hacer esto, usamos una función objetivo que toma plantillas para palabras incorrectas y las aleja de la secuencia actual de características y propaga hacia atrás los gradientes. + + + +## Grafos de factores basados en energía + +La idea detrás de los grafos de factores basados en energía es construir un modelo basado en "energía" en el que la energía es la suma de términos parciales de energía cuando la probabilidad es un producto de factores. El beneficio de estos modelos es que se pueden emplear algoritmos de inferencia eficientes. + +
+
+Figura 2. +
+ + + + +### Etiquetado de secuencia + +El modelo toma una señal de entrada de voz 'X' y devuelve las etiquetas 'Y' de manera que las etiquetas de salida minimizan el término de energía total. + +
+
+Figura 3. +
+ +
+
+Figura 4. +
+ +En este caso, la energía es una suma de tres términos representados por los cuadrados azules que son redes neuronales que producen vectores de características para las variables de entrada. En el caso del reconocimiento de voz, la 'X' se puede considerar como una señal de voz y los cuadrados implementan las restricciones gramaticales, las 'Y' representan las etiquetas de salida generadas. + + + + + + + +## Inferencia eficiente para gráficos de factores basados en energía + +Un tutorial sobre el aprendizaje basado en la energía (Yann LeCun, Sumit Chopra, Raia Hadsell, Marc'Aurelio Ranzato y Fu Jie Huang 2006): + +El aprendizaje y la inferencia con modelos basados en energía implican una minimización de la energía sobre el conjunto de respuestas $\mathcal {Y}$ y variables latentes $\ mathcal {Z}$. Cuando la cardinalidad de $\ mathcal {Y} \ times \ mathcal {Z}$ es grande, esta minimización puede volverse intratable. Una forma de abordar el problema es aprovechar la estructura de la función energética para realizar la minimización de manera eficiente. Un caso en el que se puede explotar la estructura ocurre cuando la energía se puede expresar como una suma de funciones individuales (llamadas factores) que dependen de diferentes subconjuntos de las variables en Y y Z. Estas dependencias se expresan mejor en la forma de un factor grafico. Los grafos de factores son una forma general de modelos de grafos o de "redes de creencias". + +
+
+Figura 5. +
+ +En la Figura (arriba) se muestra un ejemplo simple de un gráfico de factores. La función de energía es la suma de cuatro factores: + +$$E(Y, Z, X) = E_a(X, Z_1) + E_b(X, Z_1, Z_2) + E_c(Z_2, Y_1) + E_d(Y_1, Y_2)$$ + +donde $Y = [Y_1, Y_2]$ son las variables de salida y $Z = [Z_1, Z_2]$ son las variables latentes. Cada factor puede verse como una representación de restricciones suaves entre los valores de sus variables de entrada. El problema de la inferencia consiste en encontrar: + +$$(\bar{Y}, \bar{Z})=\operatorname{argmin}_{y \in \mathcal{Y}, z \in \mathcal{Z}}\left(E_{a}\left(X, z_{1}\right)+E_{b}\left(X, z_{1}, z_{2}\right)+E_{c}\left(z_{2}, y_{1}\right)+E_{d}\left(y_{1}, y_{2}\right)\right)$$ + +Supongamos que $Z_1$, $ Z_2$ y $ Y_1$ son variables binarias discretas y que $ Y_2$ es una variable ternaria. La cardinalidad del dominio de $ X$ es inmaterial ya que X siempre es observable. El número de configuraciones posibles de $ Z$ y $ Y$ dado X es $2 \times 2 \times 2 \times 3 = 24$. Un algoritmo de minimización ingenuo a través de una búsqueda exhaustiva evaluaría la función de energía completa 24 veces (96 evaluaciones de un solo factor). + +Sin embargo, notamos que para un $X$ dado, $E_a$ solo tiene dos configuraciones de entrada posibles: $Z_1 = 0$ y $Z_1 = 1$. De manera similar, $E_b$ y $E_c$ solo tienen 4 configuraciones de entrada posibles, y $E_d$ tiene 6. Por lo tanto, no hay necesidad de más de $2 + 4 + 4 + 6 = 16$ evaluaciones de un solo factor. + +Por lo tanto, podemos calcular previamente los 16 valores de los factores y colocarlos en los arcos en una grilla como se muestra en la Figura de arriba (parte inferior). + +Los nodos de cada columna representan los posibles valores de una sola variable. Cada flanco está ponderado por la energía de salida del factor para los valores correspondientes de sus variables de entrada. Con esta representación, una única ruta desde el nodo inicial al nodo final representa una posible configuración de todas las variables. La suma de los pesos a lo largo de un camino es igual a la energía total para la configuración correspondiente. Por lo tanto, un problema de inferencia se puede reducir a buscar la ** ruta más corta ** en este gráfico. Esto se puede realizar utilizando un método de programación dinámica como el algoritmo de Viterbi o el algoritmo A *. El costo es proporcional al número de aristas (16), que es exponencialmente menor que el número de caminos en general. + +Para calcular $E (Y, X) = \ min_ {z \ in Z} E (Y, z, X)$, seguimos el mismo procedimiento, pero restringimos el grafo al subconjunto de arcos que son compatibles con el valor de $Y$. + + +El procedimiento anterior a veces se denomina algoritmo de suma mínima y es la versión de dominio de registro del producto máximo tradicional para modelos gráficos. El procedimiento se puede generalizar fácilmente a grafos de factores donde los factores toman más de dos variables como entradas, y a grafos de factores que tienen una estructura de árbol en lugar de una estructura de cadena. + +Sin embargo, solo se aplica a los grafos de factores que son árboles bipartitos (sin bucles). Cuando hay bucles en el gráfico, el algoritmo de suma mínima puede dar una solución aproximada cuando se repite, o puede que no converja en absoluto. En este caso, se podría utilizar un algoritmo de descenso como el annealing. + + + + +## Grafos simples de factores basados ​​en energía con factores "superficiales" + +
+
+Figura 6. +
+ +El grafo de factores que se muestra en la Figura anterior es un grafo de factores de dominio logarítmico para modelos estructurados lineales (estamos hablando de "grafos de factores simples basados ​​en energía") + +Cada factor es una función lineal de los parámetros entrenables. Depende de la entrada y de un par de etiquetas individuales $(Y_m, Y_n)$. En general, cada factor podría depender de más de dos etiquetas individuales, pero limitaremos la discusión a factores por pares para simplificar la notación: + +$$E(W, Y, X)=\sum_{(m, n) \in \mathcal{F}} W_{m n}^{T} f_{m n}\left(X, Y_{m}, Y_{n}\right)$$ + +Aquí $\ mathcal {F}$ denota el conjunto de factores (el conjunto de pares de etiquetas individuales que tienen una interdependencia directa), $W_ {mn}$ es el vector de parámetro para el factor $(m, n),$ y $f_ {mn} \ left (X, Y_ {m}, Y_ {n} \ right)$ es un vector de características (fijo). El vector de parámetro global $W$ es la concatenación de todos los $W_ {m n}.$ + +Y luego podemos pensar en qué tipo de función de pérdida utilizar. Aquí vienen varios modelos diferentes. + + + +### Campo aleatorio condicional + +Podemos usar la función de pérdida de probabilidad logarítmica negativa para entrenar un modelo estructurado lineal. + +Este es el campo aleatorio condicional + +La intuición es que queremos la energía de la respuesta correcta a la ecuacion debajo y ademas queremos que el logaritmo de exponencial para todas las respuestas, incluida la buena, sea grande. + +A continuación se muestra la definición formal de la función de pérdida de probabilidad logarítmica negativa: + +$$\mathcal{L} _ {\mathrm{nll}} (W) = \frac {1} {P} \ sum_ {i = 1} ^ {P} E \left (W, Y ^ {i}, X ^ {i} \right) + \ frac {1} {\beta} \log \sum_ {y \ in \mathcal {Y}} e ^ {- \beta E \left (W, y, X ^ {i } \right)}$$ + + + +### Redes de márgenes de margen máximo y SVM latente + +También podemos utilizar la función de pérdida "de bisagra" para la optimización. + +La intuición detrás es que queremos que la energía de la respuesta correcta sea baja, y luego entre todas las configuraciones posibles de respuestas incorrectas, vamos a buscar la que tenga la energía más baja entre todas las equivocadas o malas. Luego vamos a impulsar la energía de este. No necesitamos aumentar la energía para las otras respuestas malas porque de todos modos son más grandes. + + + + +### Modelo de perceptrón estructurado + +Podemos entrenar el modelo estructurado lineal usando la pérdida de perceptrón. + +Collins [Collins, 2000, Collins, 2002] ha abogado por su uso para modelos estructurados lineales en el contexto de la PNL: + +$$ +\mathcal {L} _ {\text {perceptron}} (W) = \frac {1} {P} \sum_ {i = 1} ^ {P} E \left (W, Y ^ {i}, X ^ {i} \right) -E \left (W, Y ^ {* i}, X ^ {i} \right) +$$ + +donde $Y ^ {* i} = \operatorname {argmin} _ {y \ in \mathcal {Y}} E \left (W, y, X ^ {i} \right)$ es la respuesta producida por el sistema. + + + +#### Primeras pistas sobre entrenamiento discriminativo para reconocimiento de voz y escritura a mano. + +Pérdida mínima por error empírico (Ljolje y Rabiner 1990): + +Al entrenar a nivel de secuencia, no le especifican dicen al sistema el sonido o la ubicación. Sino que le dan al sistema una oración de entrada y la transcripción en términos de palabras, y le piden al sistema que la resuelva haciendo deformaciones de tiempo. No usaban redes neuronales ya que tenían otras formas de convertir las señales del habla en categorías de sonido. + + +## Red del transformador gráfico + +Aquí el problema es que tenemos una secuencia de dígitos en la entrada y no sabemos cómo hacer la segmentación. Lo que podemos hacer es construir un grafo en el que cada camino es una forma de romper la secuencia de caracteres, y vamos a encontrar el camino con menor energía, que básicamente es encontrar el camino más corto. Aquí hay un ejemplo concreto de cómo funciona. + +Tenemos la imagen de entrada 34. Ejecute esto a través del segmentador y obtenga múltiples segmentaciones alternativas. Estas segmentaciones son formas de agrupar estas manchas de cosas. Cada ruta en el grafo de segmentación corresponde a una forma particular de agrupar las manchas de tinta. + +
+
+Figura 7. +
+ + + +Pasamos cada uno por el mismo ConvNet de reconocimiento de caracteres y obtenemos una lista de 10 puntuaciones (aqui hay dos, pero esencialmente deberían ser 10, que representan 10 categorías). Por ejemplo, 1 [0.1] significa que la energía es 0.1 para la categoría 1. Así que obtengo una gráfica aquí, y puedes pensar en ella como una forma extraña de tensor. Realmente es un tensor escaso. Es un tensor que dice que "para cada posible configuración de esta variable, dime el costo de la variable". Es más como una distribución sobre tensores o distribución logarítmica porque estamos hablando de energías. + +
+
+Figura 8. +
+ +Toma esta gráfica y calcula la energía de la respuesta correcta. Le estoy diciendo que la respuesta correcta es 34. Selecciona dentro de esos caminos y encuentra los que dicen 34. Hay dos de ellos, uno de energía 3.4 + 2.4 = 5.8, y el otro 0.1 + 0.6 = 0.7. Elije el camino con la energía más baja. Aquí obtenemos el camino con energía 0.7. + +
+
+Figura 9. +
+ + +Entonces, encontrar la ruta es como minimizar la variable latente donde la variable latente es la ruta que elijas. Conceptualmente, es un modelo energético con una variable latente como camino. + +Ahora tenemos la energía del camino correcto, 0,7. Lo que tenemos que hacer ahora es propagar el gradiente a través de toda esta estructura, de modo que podamos cambiar el peso en la ConvNet de tal manera que la energía final disminuya. Parece abrumador, pero es completamente posible. Debido a que todo este sistema está construido con elementos que ya conocemos, la red neuronal es regular y el selector de ruta y el transformador de Viterbi son básicamente "swtiches" o "alternadores" que eligen un borde en particular o no. + +Entonces, ¿cómo propagamos hacia atrás? Bueno, el punto 0.7 es la suma de 0.1 y 0.6. Entonces, tanto el punto 0.1 como el 0.6 tendrán gradiente +1, que se indican entre paréntesis. Luego, el transformador de Viterbi simplemente selecciona una ruta entre dos. Así que simplemente copia el degradado para el borde correspondiente en el gráfico de entrada y establezca el grado para otras rutas que no estén seleccionadas como cero. Es exactamente lo que está sucediendo en Max-Pooling o Mean-Pooling. El selector de ruta es el mismo, es solo un sistema que selecciona la respuesta correcta. Tenga en cuenta que 3 [0.1] (0) en el gráfico debe ser 3 [0.1] (1) en esta etapa, y volveremos a esto más adelante. Luego, puede propagar el gradiente hacia atrás a través de la red neuronal. Eso hará que la energía de la respuesta correcta sea pequeña. + +Lo importante aquí es que esta estructura es dinámica en la esencia de que si le doy una nueva entrada, el número de instancias de red neuronal cambiará con el número de segmentaciones, y los gráficos derivados también cambiarán. Necesitamos retropropagar a través de esta estructura dinámica. Esta es la situación donde cosas como PyTorch son realmente importantes. + +Esta fase de retropropagación reduce la energía de la respuesta correcta. Y habrá una segunda fase en la que aumentaremos la energía de la respuesta incorrecta. En este caso, simplemente dejamos que el sistema elija la respuesta que desee. Esta será una forma simplificada de entrenamiento discriminativo para la predicción de estructuras que utiliza la pérdida de percepción. + +Las primeras etapas de la fase dos son exactamente las mismas que las de la primera. El Transformador de Viterbi solo elige el mejor camino con la energía más baja, no nos importa si este camino es correcto o no aquí. La energía que obtienes aquí será menor o igual a la que obtienes de la fase uno, ya que la energía que obtienes aquí es la más pequeña entre todos los caminos posibles. + +
+
+Figura 10. +
+ + +Juntando las fases uno y dos. La función de pérdida debe ser energía1 - energía2. Antes, presentamos como propagar hacia atrás a través de la parte izquierda, y ahora realmente necesitamos propagar hacia atrás a través de toda la estructura. Cualquier camino en el lado izquierdo obtendrá +1, y cualquier camino en el lado derecho obtendrá -1. Entonces apareció 3 [0.1] en ambos caminos, por lo que debería obtener un gradiente 0. Si hacemos esto, el sistema eventualmente minimizará la diferencia entre la energía de la respuesta correcta y la energía de la mejor respuesta cualquiera que sea. La función de pérdida aquí es la pérdida de perceptrón. + +
+
+Figura 11. +
+ + + +## Preguntas y respuestas de comprensión + + +#### Pregunta 1: ¿Por qué es fácil la inferencia en el caso de grafos de factores basados ​​en energía? + +La inferencia en el caso del modelo basado en energía con variable latente implica el uso de técnicas exhaustivas como el descenso de gradiente para minimizar la energía, sin embargo, ya que la energía, en este caso, es la suma de factores y se pueden utilizar técnicas como la programación dinámica. en lugar. + + +#### Pregunta 2: ¿Qué pasa si las variables latentes en los gráficos de factores son variables continuas? ¿Podemos seguir usando el algoritmo de suma mínima? + +No podemos porque ahora no podemos buscar todas las combinaciones posibles para todos los valores de los factores. Sin embargo, en este caso, las energías también nos dan una ventaja, porque podemos hacer optimizaciones independientes. Como la combinación de $Z_1$ y $Z_2$ solo afecta a $E_b$. Podemos hacer una optimización independiente y programación dinámica para hacer la inferencia. + + +#### Pregunta 3: ¿Los cuadros NN se refieren a ConvNets separados? + +Son compartidos. Son varias copias de la misma ConvNet. Es solo una red de reconocimiento de personajes. \ No newline at end of file diff --git a/docs/es/week14/14-2.md b/docs/es/week14/14-2.md new file mode 100644 index 000000000..251bdd6c5 --- /dev/null +++ b/docs/es/week14/14-2.md @@ -0,0 +1,492 @@ +--- +lang-ref: ch.14-2 +lecturer: Yann LeCun +title: Graphical Energy-based Methods +authors: Yada Pruksachatkun, Ananya Harsh Jha, Joseph Morag, Dan Jefferys-White, and Brian Kelly +date: 4 May 2020 + +date: 15 Sep 2020 +translator: lcipolina (Lucia Cipolina-Kun) +--- + + +## Comparación de pérdidas + +
+
+Figura 1: Arcitectura de la red +
+ +En la figura anterior, las rutas incorrectas tienen -1. + +El profesor LeCun comienza con la pérdida de perceptrón, que se utiliza en el ejemplo de Graph Transformer Model en la figura anterior. El objetivo es aumentar la energía de las respuestas incorrectas y reducir las respuestas correctas. + +En términos de implementación, representaría los arcos en la visualización con un vector. En lugar de un arco separado para cada categoría, un vector contiene tanto las categorías como la puntuación para cada categoría. + +P: ¿Cómo se implementa el segmento o en el modelo anterior? + +R: El segmento es heurístico artesanal. El modelo utiliza un segmento artesanal aunque hay una forma de hacerlo entrenable de principio a fin. Este enfoque artesanal fue reemplazado por el enfoque de ventana deslizante para el reconocimiento de personajes. + + + +## Resumen de las funciones de pérdida + +
+Tabla 1: Varias ecuaciones de pérdida +
+ +| Ecuacion de pérdida | Formula | Margen | +| :---- | :----: | ---:| +| Perdida de energia | $\text{E}(\text{W}, \text{Y}^i, \text{X}^i)$ | None | +| Perceptron | $\text{E}(\text{W}, \text{Y}^i, \text{X}^i)-\min\limits_{\text{Y}\in\mathcal{Y}}\text{E}(\text{W}, \text{Y}, \text{X}^i)$ | 0 | +| Bisagra | $\max\big(0, m + \text{E}(\text{W}, \text{Y}^i,\text{X}^i)-\text{E}(\text{W}, \overline{\text{Y}}^i,\text{X}^i)\big)$ | $m$ | +| Log | $\log\bigg(1+\exp\big(\text{E}(\text{W}, \text{Y}^i,\text{X}^i)-\text{E}(\text{W}, \overline{\text{Y}}^i,\text{X}^i)\big)\bigg)$ | >0 | +| LVQ2 | $\min\bigg(M, \max\big(0, \text{E}(\text{W}, \text{Y}^i,\text{X}^i)-\text{E}(\text{W}, \overline{\text{Y}}^i,\text{X}^i)\big)\bigg)$ | 0 | +| MCE | $\bigg(1+\exp\Big(-\big(\text{E}(\text{W}, \text{Y}^i,\text{X}^i)-\text{E}(\text{W}, \overline{\text{Y}}^i,\text{X}^i)\big)\Big)\bigg)^{-1}$| >0 | +| Cuadrado-cuadrado | $\text{E}(\text{W}, \text{Y}^i,\text{X}^i)^2-\bigg(\max\big(0, m - \text{E}(\text{W}, \overline{\text{Y}}^i,\text{X}^i)\big)\bigg)^2$ | $m$ | +| Cuadrado-Exp | $\text{E}(\text{W}, \text{Y}^i,\text{X}^i)^2 + \beta\exp\big(-\text{E}(\text{W}, \overline{\text{Y}}^i,\text{X}^i)\big)$ | >0 | +| NNL/MMI | $\text{E}(\text{W}, \text{Y}^i,\text{X}^i) + \frac{1}{\beta}\log\int_{y\in\mathcal{Y}}\exp\big(-\beta\text{E}(\text{W}, y,\text{X}^i)\big)$ | >0 | +| MEE |$1-\frac{\exp\big(-\beta E(W,Y^i,X^i)\big)}{\int_{y\in\mathcal{Y}}\exp\big(-\beta E(W,y,X^i)\big)}$ | >0 | + + +La pérdida de perceptrón que se ve en la tabla anterior no tiene margen y, por lo tanto, la pérdida tiene el riesgo de colapsar. + +* La <> consiste en tomar la energía de la peor respuesta y la respuesta correcta y calcular su diferencia. Intuitivamente, con un margen 'm', la bisagra solo tendrá una pérdida de 0 cuando la energía correcta sea menor que la energía más ofensiva en (al menos) 'm'. +* La pérdida de MCE se utiliza en el reconocimiento de voz y se parece a un sigmoide. +* La pérdida de NLL tiene como objetivo hacer que la energía de la respuesta correcta sea pequeña y que el componente logarítmico de la ecuación sea grande. + +P: ¿Cómo puede ser mejor la bisagra que la pérdida NLL? + +R: Bisagra es mejor que NLL porque NLL intentará llevar la diferencia entre la respuesta correcta y otras respuestas al infinito, mientras que Hinge solo quiere que sea más grande que algún valor (el margen m). + + +### DEFINICIÓN: + +Un decodificador ltoma como variable de entrada una secuencia de vectores que indican las puntuaciones o la energía de sonidos o imágenes individuales y selecciona la mejor salida posible. + +P: ¿Cuáles son algunos ejemplos de problemas que se pueden utilizar con decodificadores? +R: Modelado de idiomas, traducción automática y etiquetado de secuencias. + + + +## Algoritmo de avance en redes de transformadores de grafos + +### Composición de grafos + +La composición de grafos nos permite combinar dos grafos. En este ejemplo, podemos ver un léxico de un modelo de lenguaje representado como $trie$ (un grafo) y un grafo de reconocimiento producido por una red neuronal. + +
+
+Figura 2: Composicion del grafo +
+ +El grafo de reconocimiento especifica con diferentes valores de energía (asociados con cada arco) la probabilidad de que un personaje esté en un paso en particular. + +Ahora, para este ejemplo, la pregunta que respondemos con una operación de composición de grafo es, ¿cuál es el mejor camino en este grafo de reconocimiento que también concuerda con nuestro léxico? + +El salto común del paso 1 al paso 2 entre el grafo de reconocimiento y la gramática es el carácter $ c$, asociado con la energía 0.4. Por lo tanto, nuestro grafo de interpretación contiene solo 1 arco entre el paso 1 y 2 correspondiente a $c$. De manera similar, los caracteres posibles entre los pasos 2 y 3 son $ x$, $u$ y $ a$ en el gráfico de reconocimiento. Las ramas que siguen a $ c$ en el gráfico gramatical contienen $ u$ y $ a$. Entonces, la operación de composición de grafos selecciona los arcos $ u$ y $a$ para que estén presentes en el grafo de interpretación. También asocia el arco que copia del grafo de reconocimiento con sus valores de energía. + +Si la gramática también contuviese valores de energía asociados con arcos, la composición del grafo habría agregado los valores de energía o los habría combinado usando algún otro operador. + +De manera similar, la composición de grafos también nos permite combinar dos bases de conocimiento que están representadas por redes neuronales. En el ejemplo discutido anteriormente, la gramática se puede representar esencialmente como una red neuronal que predice el siguiente carácter. La salida softmax del NN nos proporciona las probabilidades de transición al siguiente carácter de un nodo dado. + +Como nota al margen, si el modelo de lenguaje que se muestra en este ejemplo es una red neuronal, podemos propagar hacia atrás a través de toda la estructura. Esto se convierte en un ejemplo de un programa diferenciable en el que retropropagamos a través de un programa que contiene bucles, condiciones if, recursiones, etc. + + + +Toda la arquitectura de un lector de cheques de mediados de los 90 es bastante compleja, pero lo que más nos interesa es la parte que parte del reconocedor de caracteres, que produce el gráfico de reconocimiento. + + +
+ Figura 3 : lector de cheques + + +Este gráfico de reconocimiento se somete a dos operaciones de composición separadas, una con la interpretación correcta (o la verdad básica) y la segunda con la gramática que crea un gráfico de todas las posibles interpretaciones. + +Todo el sistema se entrena mediante la función de pérdida de probabilidad logarítmica negativa. La probabilidad logarítmica negativa dice que cada camino en el grafo de interpretación es una posible interpretación y la suma de energías a lo largo de ese camino es la energía de esa interpretación. + +Ahora, en lugar de usar el algoritmo de Viterbi, usamos el algoritmo de avance. Las siguientes subsecciones discuten las diferencias entre los dos enfoques. + + +#### Algoritmo de Viterbi + +El algoritmo de Viterbi es un algoritmo de programación dinámica que se utiliza para encontrar la ruta más probable (o la ruta con la energía mínima) en un gráfico dado. Minimiza la energía con respecto a una variable latente z, donde z representa el camino que estamos tomando en la gráfica. + +$$ F (x, y) = \min_ {z} \; E (x, y, z) $$ + + + +#### El algoritmo de avance +El algoritmo directo, por otro lado, calcula el logaritmo de la suma de exponenciales del valor negativo de las energías de todos los caminos. Esto se puede ver fácilmente como una fórmula a continuación: + +$$F_{\beta} (x, y) = -\frac{1}{\beta} \; \log \; \sum_{z \, \in \, \text{paths}} \; \exp \, (- \beta \; E(x, y, z))$$ + +Esto es marginalizar sobre la variable latente z, que define las rutas en un grafo de interpretación. Este enfoque calcula este valor exponencial de suma logarítmica en todas las rutas posibles a un nodo en particular. Esto es como combinar el costo de todos los caminos posibles de una manera mínima suave. + +El algoritmo de reenvío es barato de implementar y no cuesta más que el algoritmo de Viterbi. Además, podemos propagar hacia atrás a través del nodo del algoritmo de avance en el gráfico. + +El funcionamiento del algoritmo de avance se puede mostrar utilizando el siguiente ejemplo definido en un gráfico de interpretación. + + +
+ Figura 4 : Gráfico de interpretación + + + +El costo desde el nodo de entrada hasta el nodo sombreado en rojo se calcula marginando todos los caminos posibles que llegan al nodo rojo. Las flechas que entran en el nodo rojo definen estas posibles rutas en nuestro ejemplo. + +Para el nodo rojo, el valor de la energía en el nodo viene dado por: + + +$$-\frac{1}{\beta} \; \log \; [ \, \exp \, (- \, \beta (e_1 \, + \, e_3)) \; + \; \exp \, (- \, \beta (e_2 \, + \, e_4)) \, ]$$ + + +#### Analogía de red neuronal del algoritmo directo + +El algoritmo de avance es un caso especial del algoritmo de propagación de creencias, cuando el grafo subyacente es un grafo de cadena. Todo este algoritmo puede verse como una red neuronal de retroalimentación donde la función en cada nodo es una suma logarítmica de exponenciales y un término de suma. + +Para cada nodo en el gráfico de interpretación, mantenemos una variable $\alpha$. + +$$ \alpha_{i} = - \; \log \; \biggl[ \sum_{k \, \in \, \text{parent} \, (i)} \; \exp \, (- \, \beta \; (\alpha_k \, + \, e_{ki})) \biggl]$$ + +donde $ e_ {ki} $ es la energía del enlace desde el nodo $ k $ al nodo $i$. + +$\alpha_i$ forma la activación de un nodo $i$ en esta red neuronal y $e_ {ki}$ es el peso entre los nodos $k$ y el nodo $i$. Esta formulación es algebraicamente equivalente a las operaciones de suma ponderada de una red neuronal regular en el dominio logarítmico. + +Podemos retropropagar a través del gráfico de interpretación dinámica (ya que cambia de un ejemplo a otro) en el que aplicamos el algoritmo de avance. Podemos calcular los gradientes de $F (x, y)$ calculados en el último nodo del grafo con los pesos $e_ {ki}$ que definen los bordes del gráfico de interpretación. + +
+
+Figure 5: Check reader +
+ + +Volviendo al ejemplo del lector de cheques, aplicamos el algoritmo de avance en las dos composiciones de grafos y obtenemos el valor de energía en el último nodo utilizando el foro exponencial de suma logarítmica. La diferencia entre estos valores de energía es la pérdida de probabilidad logarítmica negativa. + +El valor obtenido al aplicar el algoritmo de avance en la composición del gráfico entre la respuesta correcta y el gráfico de reconocimiento es el valor exponencial de la suma logarítmica de la respuesta correcta. Por el contrario, el valor exponencial de la suma logarítmica en el último nodo de la composición del gráfico entre el gráfico de reconocimiento y la gramática es el valor marginado sobre todas las posibles interpretaciones válidas. + + +# Formulación Lagrangiana de retropropagación +Para una entrada $x$ y una salida objetivo $y$, podemos formular una red como una colección de funciones, $f_k$ y pesos, $w_k$ de manera que los pasos sucesivos en la red generen $z_k$ con $z_ {k + 1} = f_k (z_k, w_k)$. En un entorno supervisado, el objetivo de la red es minimizar $C (z_n, y)$, el costo de la salida $n ^ \mathrm {th}$ de la red, con respecto a la verdad del terreno. Esto es equivalente al problema de minimizar $C (z_n, y)$ con respecto a las restricciones $z_ {k + 1} = f_k (z_k, w_k)$ y $z_0 = x$. + +El lagrangiano se puede escribir: +$$ \mathcal {L} (x, y, \lambda_i, z_i, w_i) = C (z_n, y) + \sum \limits_ {k = 0} ^ {n-1} \lambda ^ T_ {k + 1 } (z_ {k + 1} - f_k (z_k, w_k)) $$ + +donde los términos $\lambda$ denotan multiplicadores de Lagrange (ver [Paul's online notes](http://tutorial.math.lamar.edu/Classes/CalcIII/LagrangeMultipliers.aspx) para un repaso si Calc 3 fue tomada hace un tiempo). + +Para minimizar $\mathcal {L}$, necesitamos establecer las derivadas parciales de $\ mathcal{L}$ con respecto a cada uno de sus argumentos a cero y resolver. + +- Para $\lambda$, simplemente recuperamos la restricción: $\frac{\partial{\mathcal{L}}}{\partial \lambda_{k+1}} = 0 \rightarrow z_{k+1} = f_k(z_k, w_k)$. +- +- Para $z_k$, $\frac{\partial \mathcal{L}}{\partial z_k} = 0 \rightarrow \lambda^T_k - \lambda^T_{k+1} \frac{\partial f_k(z_k, w)}{\partial z_k} \rightarrow \lambda_k = \frac{\partial f_k(z_k, w_k)^T}{\partial z_k}\lambda_{k+1}$, que es solo la fórmula de retropropagación estándar. + + + +Este enfoque se originó con Lagrange y Hamilton en el contexto de la Mecánica Clásica, donde la minimización está sobre la energía del sistema y los términos $\lambda$ denotan restricciones físicas del sistema, como dos bolas que se ven obligadas a permanecer a una distancia fija. unos de otros en virtud de estar unidos por una barra de metal, por ejemplo. + +En una situación en la que necesitamos minimizar el costo $C$ en cada paso de tiempo, $k$, el Lagrangiano se convierte en + +$$ \mathcal{L} = \sum_k \left(C_k(z_k, y_k) + \lambda^T_{k+1}(z_{k+1} - f_k(z_k, w_k)) \right) $$. + + + + +# Ecuación diferencial ordinaria neural (ODE) +Usando esta formulación de retropropagación, ahora podemos hablar de una nueva clase de modelos, Neural ODEs (Ecuacion Diferencial Ordinaria). Estas son básicamente redes recurrentes donde el estado, $z$, en el momento $ t $ viene dado por $ z_{t+\text{d}t} = z_t + f(z_t, W) dt$, donde $ W $ representa un conjunto de parámetros fijos. + +Esto también se puede expresar como una ecuación diferencial ordinaria (sin derivadas parciales): $\frac{\text{d}z}{\text{d}t} = f(z_t, W)$. + +Entrenar una red de este tipo utilizando la formulación lagrangiana es muy sencillo. Si tenemos un objetivo, $y$, y queremos que el estado del sistema alcance $y$ en el tiempo $T$, simplemente establecemos la función de costo como la distancia entre $z_T$ y $ y $. Otro objetivo de la red podría ser encontrar un estado estable del sistema, es decir, uno que deje de cambiar después de cierto punto. + + Matemáticamente, esto es equivalente a establecer $\frac{\text{d}z}{\text{d}t} = f(y, W) = 0$. En general, encontrar una solución, $y$ para esta ecuación es mucho más fácil que la propagación hacia atrás en el tiempo, porque la red no necesita recordar el gradiente con respecto a toda la secuencia, y solo tiene que minimizar $f$ o $ \lvert f \rvert ^ 2$. Para obtener más información sobre el entrenamiento de ODE neuronales para alcanzar puntos fijos, consulte [(Lecun88)](http://yann.lecun.com/exdb/publis/pdf/lecun-88.pdf). + + + + +# Inferencia variacional en términos de energía + +## Introducción +Para una función de energía elemental $E (x, y, z)$, si deseamos marginar sobre una variable, z, para obtener una pérdida en términos de solo $x$ y $y$, $L (x, y)$, debemos calcular + +$$L(x,y) = -\frac{1}{\beta}\int_z \exp(-\beta E(x,y,z))$$ + +Si luego multiplicamos por $\frac {q (z)} {q (z)}$, obtenemos +$$L(x,y) = -\frac{1}{\beta}\int_z q(z) \frac{\exp({-\beta E(x,y,z)})}{q(z)}$$ + +Si asumimos que $q (z)$ es una distribución de probabilidad sobre $z$, podemos interpretar nuestra integral de función de pérdida reescrita como un valor esperado, con respecto a la distribución de $\frac{\exp({-\beta E(x,y,z)})}{q(z)}$. + +Usamos esta interpretación, la Desigualdad de Jensen y las aproximaciones basadas en muestreo, para optimizar indirectamente nuestra función de pérdida. + + +## Desigualdad de Jensen + +La desigualdad de Jensen es una observación geométrica que establece: si tenemos una función convexa, entonces la *expectativa* de esa función, en un rango, es menor que el promedio de la función evaluada al principio y al final del rango. Ilustrado geométricamente, esto es muy intuitivo: + +
+
+Figure 6: Jensen's Inequality (taken from [Wikipedia](https://en.wikipedia.org/wiki/Jensen%27s_inequality)) +
+ + +Asimismo, si $F$ es convexo, para una distribución de probabilidad fija $q$, podemos inferir de la Desigualdad de Jensen que en el rango $z$, + +$$F\Bigg(\int_z q(z)h(z)\Bigg) \leq \int_z q(z)F(h(z)) \tag{1}$$ + +Ahora, recuerde que nuestro $L (x, y)$ marginado después de la multiplicación con $\frac {q (z)} {q (z)}$ es, +$$L(x,y) = -\frac{1}{\beta}\int_z q(z) \frac{\exp({-\beta E(x,y,z)})}{q(z)}$$ + + + +Si hacemos $h(z) = -\frac{1}{\beta} \frac{\exp({-\beta E(x,y,z)})}{q(z)}$, sabemos de la desigualdad de Jensen $(1)$ que + +$$F\Bigg(\int_z q(z)\frac{\exp({-\beta E(x,y,z)})}{q(z)}\Bigg) \leq \int_z q(z)F\Bigg(\frac{\exp({-\beta E(x,y,z)})}{q(z)}\Bigg)$$ + +Continuemos trabajando esto, con una función de pérdida convexa concreta, $F(x) = - \log(x)$ + +$$-\log\Bigg(-\frac{1}{\beta}\int_z q(z)\frac{\exp({-\beta E(x,y,z)})}{q(z)}\Bigg) \leq \int_z q(z) * \frac{-1}{\beta}\log\Bigg(\frac{\exp({-\beta E(x,y,z)})}{q(z)}\Bigg)$$ + +$$\leq \int_z q(z)[E(x,y,z) + \frac{1}{\beta}\log(q(z))]$$ + +$$\leq \int_z q(z)E(x,y,z) + \frac{1}{\beta}\int_z q(z)\log(q(z))$$ + +¡Excelente! Ahora tenemos un límite superior para nuestra función de pérdida $L (x, y)$, compuesto por dos términos que entendemos. El primer término $\int_z q (z) E (x, y, z)$ es la energía *promedio*. Y el segundo término $\frac{1} {\beta} \int_z \log (q (z))$ es solo un factor ($ - \frac {1} {\ beta}$) multiplicado por la *entropía* del distribución $q$. + + + +## ¿Cuál es el punto? + +Ahora hemos formulado un límite superior de tal manera que podemos evitar integraciones complicadas y, en cambio, simplemente aproximar estos valores tomando muestras de una distribución sustituta ($q(z)$) ¡de nuestra elección! + +Para obtener el valor del primer término de nuestra función de límite superior, simplemente tomamos una muestra de esa distribución y calculamos el valor promedio de $L$ que obtenemos aplicando nuestros $z$ de muestra. + +El segundo término (un factor de entropía) es solo una propiedad de la familia de distribución, y también puede aproximarse con un muestreo aleatorio de $ q $. + +Finalmente, podemos minimizar $L$ con respecto a sus parámetros (digamos, pesos de una red $W$), minimizando esta función que limita $L$ arriba. Llevamos a cabo esta minimización actualizando nuestras dos variables: (1) la entropía de $ q $ y (2) los parámetros de nuestro modelo $ W $. + +## Resumen +Ésta es la "visión energética" de la inferencia variacional. Si necesita calcular el logaritmo de una suma de exponenciales, reemplácelo con el promedio de su función más un término de entropía. Esto nos da un límite superior. Luego minimizamos este límite superior y, al hacerlo, minimizamos la función que realmente nos importa. \ No newline at end of file diff --git a/docs/es/week14/14-3.md b/docs/es/week14/14-3.md new file mode 100644 index 000000000..e2cce44f9 --- /dev/null +++ b/docs/es/week14/14-3.md @@ -0,0 +1,512 @@ +--- +lang-ref: ch.14-3 +title: Overfitting and regularization +lecturer: Alfredo Canziani +authors: Karl Otness, Xiaoyi Zhang, Shreyas Chandrakaladharan, Chady Raach +date: 5 May 2020 + +translator: lcipolina (Lucia Cipolina-Kun) +date: 15 Sep 2020 +--- + + + +## Sobreajuste + +Considere un problema de regresión. Un modelo podría: ajustarse, encajar bien o sobreajustarse. + +Si el modelo no es lo suficientemente expresivo para los datos, se ajustará. Si el modelo es más expresivo que los datos (como es el caso de las redes neuronales profundas), corre el riesgo de sobreajuste. + +En este caso, el modelo es lo suficientemente potente como para adaptarse tanto a los datos originales *como* al ruido, lo que produce una mala solución para la tarea en cuestión. + +Idealmente, nos gustaría que nuestro modelo se ajustara a los datos subyacentes y no al ruido, produciendo un buen ajuste para nuestros datos. Nos gustaría especialmente hacer esto sin necesidad de reducir la potencia de nuestros modelos. Los modelos de aprendizaje profundo son muy poderosos, a menudo mucho más de lo estrictamente necesario para aprender los datos. Nos gustaría mantener ese poder (para facilitar el entrenamiento), pero aún así luchar contra el sobreajuste. + + +### Sobreajuste para depuración + +El sobreajuste puede resultar útil en algunos casos, como durante la depuración. Se puede probar una red en un pequeño subconjunto de datos de entrenamiento (incluso un solo lote o un conjunto de tensores de ruido aleatorios) y asegurarse de que la red pueda sobreajustarse a estos datos. Si no aprende, es una señal de que puede haber un error. + + +## Regularización + +Podemos intentar luchar contra el sobreajuste introduciendo la regularización. La cantidad de regularización afectará el rendimiento de validación del modelo. Muy poca regularización no resolverá el problema de sobreajuste. Demasiada regularización hará que el modelo sea mucho menos efectivo. + +* Regularización * agrega conocimientos previos a un modelo; se especifica una distribución previa para los parámetros. Actúa como una restricción sobre el conjunto de posibles funciones aprendibles. + +Otra definición de regularización de Ian Goodfellow: +> La regularización es cualquier modificación que hacemos a un algoritmo de aprendizaje que tiene como objetivo reducir su error de generalización pero no su error de entrenamiento. + + +### Técnicas de inicialización + +Podemos seleccionar un previo para nuestros parámetros de red inicializando los pesos de acuerdo con una distribución particular. Una opción: [Xavier initialization](https://pytorch.org/docs/stable/nn.init.html#torch.nn.init.xavier_normal_). + + +### Regularización de caída de peso + +La pérdida de peso es nuestra primera técnica de regularización. La pérdida de peso se usa ampliamente en el aprendizaje automático, pero menos en las redes neuronales. En PyTorch, la caída de peso se proporciona como un parámetro para el optimizador (consulte, por ejemplo, el parámetro `weight_decay` para [SGD](https://pytorch.org/docs/stable/optim.html#torch.optim.SGD)). + +Esto también se llama: + +- L2 +- Ridge +- Prior gaussiano + +Podemos considerar un objetivo que actúa sobre los parámetros: + +$$J_{\text{train}}(\theta) = J^{\text{old}}_{\text{train}}(\theta)$$ + +entonces tenemos actualizaciones: + +$$\theta \gets \theta - \eta \nabla_{\theta} J^{\text{old}}_{\text{train}}(\theta)$$ + +Para la disminución de peso, agregamos un término de penalización: + +$$J_{\text{train}}(\theta) = J^{\text{old}}_{\text{train}}(\theta) + \underbrace{\frac\lambda2 {\lVert\theta\rVert}_2^2}_{\text{penalty}}$$ + +que produce una actualización + +$$\theta \gets \theta - \eta \nabla_{\theta} J^{\text{old}}_{\text{train}}(\theta) - \underbrace{\eta\lambda\theta}_{\text{decay}}$$ + +Este nuevo término en la actualización lleva los parámetros $\theta$ ligeramente hacia cero, agregando algo de "decaimiento" en los pesos con cada actualización. + + +### Regularización L1 + +Disponible como una opción para PyTorch [optimizers](https://pytorch.org/docs/stable/optim.html).. + +También llamado: + +- LASSO: Operador selector de contracción mínima absoluta +- Prior laplaciano +- Escasa antes + +Al ver esto como una distribución de Laplace anterior, esta regularización pone más masa de probabilidad cerca de cero que una distribución gaussiana. + +Comenzando con la misma actualización que la anterior, podemos ver esto como agregar otra penalización: + +$$J_{\text{train}}(\theta) = J^{\text{old}}_{\text{train}}(\theta) + \underbrace{\lambda{\lVert\theta\rVert}_1}_{\text{penalty}}$$ + +que produce una actualización + +$$\theta \gets \theta - \eta \nabla_{\theta} J^{\text{old}}_{\text{train}}(\theta) - \underbrace{\eta\lambda\cdot\mathrm{sign}(\theta)}_{\text{penalty}}$$ + + +A diferencia del decaimiento de peso de $L_2$, la regularización de $L_1$ "matará" los componentes que están cerca de un eje en el espacio de parámetros, en lugar de reducir uniformemente la longitud del vector de parámetros. + + +### Abandonar + +La deserción implica poner a cero una cierta cantidad de neuronas al azar durante el entrenamiento. Esto evita que la red aprenda una ruta singular de entrada a salida. Del mismo modo, debido a la gran parametrización de las redes neuronales, es posible que la red neuronal memorice eficazmente la entrada. Sin embargo, con la deserción, esto es mucho más difícil, ya que la entrada se coloca en una red diferente cada vez, ya que la deserción entrena efectivamente un número infinito de redes que son diferentes cada vez. Por lo tanto, la deserción puede ser una forma poderosa de controlar el sobreajuste y ser más robusto frente a pequeñas variaciones en la entrada. + +
+
+Figura 1: Red sin abandono +
+ +
+
+Figura 2: Red con abandono +
+ + +En PyTorch, podemos establecer una tasa de abandono aleatoria de neuronas. + +
+
+Figura 3: Código de abandono +
+ + +Después del entrenamiento, durante la inferencia, la deserción ya no se usa. Con el fin de crear la red final para la inferencia, promediamos todas las redes individuales creadas durante el abandono y las usamos para la inferencia. De manera similar, podemos multiplicar todos los pesos por $1/1-p$ donde $p$ es la tasa de abandono. + + +### Parada temprana + +Durante el entrenamiento, si la pérdida de validación comienza a aumentar, podemos detener el entrenamiento y usar los mejores pesos encontrados hasta ahora. Esto evita que los pesos crezcan demasiado, lo que comenzará a dañar el rendimiento de la validación en algún momento. En la práctica, es común calcular el rendimiento de la validación en ciertos intervalos y detenerse después de que un cierto número de cálculos de errores de validación dejan de disminuir. + +
+
+Figura 4: Parada anticipada +
+ + + +# Lucha contra el sobreajuste indirecto + +Hay técnicas que tienen el efecto secundario de regularizar parámetros pero no son regularizadores en sí mismos. + + +## Norma de lote + +P. ¿Cómo la norma por lotes hace que la capacitación sea más eficiente? +R. Podemos utilizar una tasa de aprendizaje más alta al aplicar la norma por lotes. + +La normalización por lotes se utiliza para evitar el cambio de covariables interno de una red neuronal, pero existe un gran debate sobre si realmente hace esto y cuál es el verdadero beneficio. + +
+
+Figura 5: Normalización por lotes +
+ + +La normalización por lotes esencialmente extiende la lógica de normalizar la entrada de la red neuronal para normalizar la entrada de cada capa oculta en la red. La idea básica es tener una distribución fija que alimente cada capa subsiguiente de una red neuronal, ya que el aprendizaje ocurre mejor cuando tenemos una distribución fija. Para hacer esto, calculamos la media y la varianza de cada lote antes de cada capa oculta y normalizamos los valores entrantes mediante estas estadísticas específicas del lote, lo que reduce la cantidad en la que los valores finalmente cambiarán durante el entrenamiento. + +Con respecto al efecto de regularización, debido a que cada lote es diferente, cada muestra se normalizará con estadísticas ligeramente diferentes basadas en el lote en el que se encuentra. Por lo tanto, la red verá varias versiones ligeramente alteradas de una sola entrada que ayuda a la red a aprender a ser más robusto frente a ligeras variaciones en la entrada y evita el sobreajuste. + +Otro beneficio de la normalización por lotes es que el entrenamiento es mucho más rápido. + + +### Más datos + +Recopilar más datos es una forma fácil de evitar el sobreajuste, pero puede resultar caro o no factible. + + +### Aumento de datos + +Las transformaciones que utilizan Torchvision pueden tener un efecto de regularización al enseñar a la red a aprender a ser insensible a las perturbaciones. + +
+
+Figure 6: Data augmentation with Torchvision. +
+ + +### Ajuste fino de inclinación de transferencia (TF) (FT) + +El aprendizaje por transferencia (TF) se refiere simplemente a entrenar a un clasificador final en la parte superior de una red previamente entrenada (generalmente se usa en casos de pocos datos). + +El ajuste fino (FT) también se refiere al entrenamiento de porciones parciales / completas del netowrk previamente entrenado (utilizado en los casos en los que tenemos muchos datos en general). + +P. Generalmente, ¿cuándo deberíamos congelar las capas de un modelo previamente entrenado? +R. Si tenemos pocos datos de entrenamiento. + +4 casos generales: +1) Si tenemos pocos datos con distribuciones similares, podemos simplemente transferir el aprendizaje. +2) Si tenemos muchos datos con distribuciones similares, podemos hacer ajustes para mejorar también el rendimiento del extractor de características. +3) Si tenemos pocos datos y una distribución diferente, deberíamos eliminar algunas de las capas finales entrenadas en el extractor de características, ya que son demasiado especializadas. +4) Si tenemos muchos datos y son de diferentes distribuciones, podemos entrenar todas las porciones. + +Tenga en cuenta que también podemos usar diferentes tasas de aprendizaje para diferentes capas a fin de mejorar el rendimiento. + +Para ampliar nuestra discusión sobre el sobreajuste y la regularización, veamos las visualizaciones a continuación. Estas visualizaciones se generaron con el código de [Notebook](https://github.com/Atcold/pytorch-Deep-Learning/blob/master/12-regularization.ipynb). + +
+
+Figure 7: Curvas de pérdida sin abandono +
+ +
+
+Figure 8: Curvas de pérdida con deserción +
+ +
+
+Figure 9: Efecto de la regularización sobre los pesos +
+ + + +De la Figura 7 y la Figura 8, podemos comprender el efecto dramático que tiene la deserción en el error de generalización, es decir, la diferencia entre la pérdida de entrenamiento y la pérdida de validación. En la Figura 7, sin abandonos hay un claro sobreajuste ya que la pérdida de entrenamiento es mucho menor que la pérdida de validación. + + Sin embargo, en la Figura 8, con el abandono, la pérdida de entrenamiento y la pérdida de validación se superponen casi continuamente, lo que indica que el modelo se está generalizando bien al conjunto de validación, que sirve como nuestro proxy para el conjunto fuera de la muestra. Por supuesto, podemos medir el rendimiento real fuera de la muestra utilizando un conjunto de pruebas de exclusión por separado. + +En la Figura 9, observamos el efecto que tiene la regularización (L1 y L2) sobre los pesos de la red. + +- Cuando aplicamos la regularización L1, desde el pico rojo en cero, podemos entender que la mayoría de los pesos son cero. Los pequeños puntos rojos más cercanos a cero son los pesos distintos de cero del modelo. + +- Por el contrario, en la regularización L2, desde el pico azul cercano a cero podemos ver que la mayoría de los pesos están cerca de cero pero distintos de cero. + +- Cuando no hay regularización (lavanda) los pesos son mucho más flexibles y se distribuyen alrededor de cero pareciendo una distribución normal. + + +## Redes neuronales bayesianas: estimación de la incertidumbre en torno a las predicciones + +Nos preocupamos por la incertidumbre en las redes neuronales porque una red necesita saber qué tan segura / segura de su predicción. + +Por ejemplo: si construye una red neuronal para predecir el control de dirección, necesita saber qué tan confiables son las predicciones de la red. + +Podemos usar una red neuronal con abandono para obtener un intervalo de confianza alrededor de nuestras predicciones. Entrenemos una red con deserción, siendo $r$ la tasa de deserción. + +Por lo general, durante la inferencia, configuramos la red en modo de validación y usamos todas las neuronas para obtener la predicción final. Mientras hacemos la predicción, escalamos los pesos $\delta$ por $\dfrac {1} {1-r}$ para tener en cuenta la caída de neuronas durante el entrenamiento. + +Este método nos da una única predicción para cada entrada. Sin embargo, para obtener un intervalo de confianza alrededor de nuestra predicción, necesitamos múltiples predicciones para la misma entrada. Entonces, en lugar de configurar la red en modo de validación durante la inferencia, la retenemos en modo de entrenamiento *es decir,* todavía suelta neuronas al azar y obtenemos una predicción. Cuando predecimos varias veces usando esta red de deserción, para la misma entrada obtendremos diferentes predicciones dependiendo de las neuronas que se eliminen. Usamos estas predicciones para estimar la predicción final promedio y un intervalo de confianza a su alrededor. + +En las siguientes imágenes, hemos estimado intervalos de confianza en torno a las predicciones de redes. Estas visualizaciones se generaron con el código de [Bayesian Neural Networks Notebook](https://github.com/Atcold/pytorch-Deep-Learning/blob/master/13-bayesian_nn.ipynb). La línea roja representa las predicciones. La región sombreada de color púrpura alrededor de las predicciones representa la incertidumbre *es decir,* la varianza de las predicciones. + +
+
+Figure 10: Estimación de la incertidumbre mediante la activación de ReLU +
+ +
+
+Figure 11: Estimación de la incertidumbre mediante la activación de Tanh +
+ + +Como puede observar en las imágenes anteriores, estas estimaciones de incertidumbre no están calibradas. Son diferentes para diferentes funciones de activación. Notablemente en las imágenes, la incertidumbre en torno a los puntos de datos es baja. Además, la varianza que podemos observar es una función diferenciable. Entonces podemos ejecutar un descenso de gradiente para minimizar esta variación. De este modo podemos obtener predicciones más seguras. + + +#### Si tenemos varios términos que contribuyen a la pérdida total en nuestro modelo de EBM, ¿cómo interactúan? + +En los modelos EBM, podemos sumar de manera simple y conveniente los diferentes términos para estimar la pérdida total. + +**Digresión**: un término que penaliza la longitud de la variable latente puede actuar como uno de los muchos términos de pérdida en un modelo. La longitud de un vector es aproximadamente proporcional al número de dimensiones que tiene. Entonces, si disminuye el número de dimensiones, la longitud del vector disminuye y, como resultado, codifica menos información. En una configuración de codificador automático, esto asegura que el modelo está reteniendo la información más importante. Entonces, una forma de bloquear la información en los espacios latentes es reducir la dimensionalidad del espacio latente. + + +#### ¿Cómo podemos determinar el hiperparámetro para regularización? + +En la práctica, para determinar el hiperparámetro óptimo para la regularización, es decir, la fuerza de regularización, podemos usar + +- Optimización de hiperparámetros bayesianos +- Búsqueda de cuadrícula +- Búsqueda aleatoria + +Al hacer estas búsquedas, las primeras épocas suelen ser suficientes para darnos una idea de cómo está funcionando la regularización. Entonces necesitamos train el modelo extensamente. diff --git a/docs/es/week14/14.md b/docs/es/week14/14.md new file mode 100644 index 000000000..25f429ad7 --- /dev/null +++ b/docs/es/week14/14.md @@ -0,0 +1,30 @@ +--- +lang-ref: ch.14 +title: Week 14 +date: 15 Sep 2020 +translator: lcipolina (Lucia Cipolina-Kun) +--- + + + + + + +## Clase parte A +En esta sección, discutimos sobre predicción estructurada. Primero introducimos el grafo de factores basado en energía y un metodo de inferencia efficiente. Luego damos algunos ejemplos de estos grafos con factores "llanos". Finalmente, discutimos la red the grafos Transformador. + + + + +## Clase parte B +La segunda parte de la clase analiza en mayor profundidad la aplicación de métodos de modelos de grafos a modelos basados en energía. Después de comparar diferentes funciones de pérdida, discutimos la aplicación del algoritmo de Viterbi y el algoritmo de reenvío a redes de Transformadores gráficos. Luego pasamos a discutir la formulación lagrangiana de retropropagación y luego, la inferencia variacional para modelos basados en energía + + +## Practicum + + + +Al entrenar modelos altamente parametrizados, como redes neuronales profundas, existe el riesgo de sobreajuste de los datos de entrenamiento. Esto conduce a un mayor error de generalización. Para ayudar a reducir el sobreajuste, podemos introducir la regularización en nuestro entrenamiento, desalentando ciertas soluciones para disminuir el grado en que nuestros modelos se adaptarán al ruido. + From 92b7739f702446f047782983834b8a6113d30ad4 Mon Sep 17 00:00:00 2001 From: Lucia Cipolina Kun Date: Tue, 15 Sep 2020 20:53:56 -0400 Subject: [PATCH 05/11] Delete test.md --- docs/es/week14/test.md | 1 - 1 file changed, 1 deletion(-) delete mode 100644 docs/es/week14/test.md diff --git a/docs/es/week14/test.md b/docs/es/week14/test.md deleted file mode 100644 index 8b1378917..000000000 --- a/docs/es/week14/test.md +++ /dev/null @@ -1 +0,0 @@ - From 5dac939039155eb13346877953ef89fdab4676a1 Mon Sep 17 00:00:00 2001 From: Lucia Cipolina Kun Date: Wed, 16 Sep 2020 15:18:55 -0400 Subject: [PATCH 06/11] Update 14-1.md --- docs/es/week14/14-1.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/es/week14/14-1.md b/docs/es/week14/14-1.md index 3ec2e5281..fcabffc49 100644 --- a/docs/es/week14/14-1.md +++ b/docs/es/week14/14-1.md @@ -1,7 +1,7 @@ --- lang-ref: ch.14-1 lecturer: Yann LeCun -title: Deep Learning for Structured Prediction +title: Aprendizaje profundo para prediccion estructurada authors: Junrong Zha, Muge Chen, Rishabh Yadav, Zhuocheng Xu date: 4 May 2020 translator: lcipolina (Lucia Cipolina-Kun) @@ -17,7 +17,7 @@ For eg: In case of speech/handwriting recognition or natural language translatio ## Predicción estructurada -Es el problema de predecir la variable 'y' para una entrada 'x' dada que es mutuamente dependiente y restringida, en lugar de valores escalares discretos o reales. La variable de salida no pertenece a una sola categoría, sino que puede tener valores posibles exponenciales o infinitos. +Es el problema de predecir la variable 'y' para una entrada 'x' dada que es mutuamente dependiente y restringida, en lugar de valores escalares discretos o reales. La variable de salida no pertenece a una sola categoría, sino que puede tener un numero de valores posibles exponenciales o infinitos. Por ejemplo: en el caso de reconocimiento de voz, escritura a mano o traducción de lenguaje natural, la salida debe ser gramaticalmente correcta y no es posible limitar el número de posibilidades de salida. La tarea del modelo es capturar la estructura secuencial, espacial o combinatorial en el dominio del problema. @@ -40,7 +40,7 @@ To train this latent variable model we need to make the energy for the correct a ### Primeros trabajos sobre predicción estructurada -Este vector se alimenta a un TDNN que proporciona un vector de características que, en el caso de los sistemas modelo, se puede comparar con softmax, el cual representa una categoría. Un problema que surge en el caso de reconocer la palabra que se pronunció, es que diferentes personas pueden pronunciar la misma palabra de diferentes formas y velocidades. Para resolver esto se utiliza "Deformacion en Tiempo Dinamico". +Este vector se alimenta a un TDNN que proporciona un vector de características que, en el caso de los sistemas modelo, se puede comparar con softmax, el cual representa una categoría. Un problema que surge en el caso de reconocer la palabra que se pronunció, es que diferentes personas pueden pronunciar la misma palabra de diferentes formas y velocidades. Para resolver esto se utiliza "Deformación en Tiempo Dinámico". La idea es proporcionar al sistema un conjunto de plantillas (templates) pregrabadas que correspondan a vectores de secuencia o características que alguien haya registrado. La red neuronal se entrena al mismo tiempo que la plantilla para que el sistema aprenda a reconocer la palabra en diferentes pronunciaciones. La variable latente nos permite deformar en el tiempo el vector de características para que coincida con la longitud de las plantillas. @@ -49,7 +49,7 @@ La idea es proporcionar al sistema un conjunto de plantillas (templates) pregrab Figura 1. -Esto se puede visualizar como una matriz ordenando los vectores de características de TDNN horizontalmente y las plantillas de palabras verticalmente. Cada entrada en la matriz corresponde a la distancia entre el vector de características. Esto se puede visualizar como un problema gráfico en el que el objetivo es comenzar desde la esquina inferior izquierda y llegar a la esquina superior derecha atravesando el camino que minimiza la distancia. +Esto se puede visualizar como una matriz ordenando los vectores de características de TDNN horizontalmente y las plantillas de palabras verticalmente. Cada entrada en la matriz corresponde a la distancia entre el vector de características. Esto se puede visualizar como un problema de grafos en el que el objetivo es comenzar desde la esquina inferior izquierda y llegar a la esquina superior derecha atravesando el camino que minimiza la distancia. Para entrenar este modelo de variable latente, necesitamos hacer que la energía para las respuestas correctas sea lo más pequeña posible y más grande para cada respuesta incorrecta. Para hacer esto, usamos una función objetivo que toma plantillas para palabras incorrectas y las aleja de la secuencia actual de características y propaga hacia atrás los gradientes. @@ -357,7 +357,7 @@ Figura 9. Entonces, encontrar la ruta es como minimizar la variable latente donde la variable latente es la ruta que elijas. Conceptualmente, es un modelo energético con una variable latente como camino. -Ahora tenemos la energía del camino correcto, 0,7. Lo que tenemos que hacer ahora es propagar el gradiente a través de toda esta estructura, de modo que podamos cambiar el peso en la ConvNet de tal manera que la energía final disminuya. Parece abrumador, pero es completamente posible. Debido a que todo este sistema está construido con elementos que ya conocemos, la red neuronal es regular y el selector de ruta y el transformador de Viterbi son básicamente "swtiches" o "alternadores" que eligen un borde en particular o no. +Ahora tenemos la energía del camino correcto, 0,7. Lo que tenemos que hacer ahora es propagar el gradiente a través de toda esta estructura, de modo que podamos cambiar el peso en la ConvNet de tal manera que la energía final disminuya. Parece abrumador, pero es completamente posible. Debido a que todo este sistema está construido con elementos que ya conocemos, la red neuronal es regular y el selector de ruta y el transformador de Viterbi son básicamente "switches" o "alternadores" que eligen un borde en particular o no. -Entonces, ¿cómo propagamos hacia atrás? Bueno, el punto 0.7 es la suma de 0.1 y 0.6. Entonces, tanto el punto 0.1 como el 0.6 tendrán gradiente +1, que se indican entre paréntesis. Luego, el transformador de Viterbi simplemente selecciona una ruta entre dos. Así que simplemente copia el degradado para el borde correspondiente en el gráfico de entrada y establezca el grado para otras rutas que no estén seleccionadas como cero. Es exactamente lo que está sucediendo en Max-Pooling o Mean-Pooling. El selector de ruta es el mismo, es solo un sistema que selecciona la respuesta correcta. Tenga en cuenta que 3 [0.1] (0) en el gráfico debe ser 3 [0.1] (1) en esta etapa, y volveremos a esto más adelante. Luego, puede propagar el gradiente hacia atrás a través de la red neuronal. Eso hará que la energía de la respuesta correcta sea pequeña. +Entonces, ¿cómo propagamos hacia atrás? Bueno, el punto 0.7 es la suma de 0.1 y 0.6. Entonces, tanto el punto 0.1 como el 0.6 tendrán gradiente +1, que se indican entre paréntesis. Luego, el transformador de Viterbi simplemente selecciona una ruta entre dos. Así que simplemente copia el gradiente para el borde correspondiente en el gráfico de entrada y establezca el grado para otras rutas que no estén seleccionadas como cero. Es exactamente lo que está sucediendo en Max-Pooling o Mean-Pooling. El selector de ruta es el mismo, es solo un sistema que selecciona la respuesta correcta. Tenga en cuenta que 3 [0.1] (0) en el gráfico debe ser 3 [0.1] (1) en esta etapa, y volveremos a esto más adelante. Luego, puede propagar el gradiente hacia atrás a través de la red neuronal. Eso hará que la energía de la respuesta correcta sea pequeña. Lo importante aquí es que esta estructura es dinámica en la esencia de que si le doy una nueva entrada, el número de instancias de red neuronal cambiará con el número de segmentaciones, y los gráficos derivados también cambiarán. Necesitamos retropropagar a través de esta estructura dinámica. Esta es la situación donde cosas como PyTorch son realmente importantes. @@ -416,9 +416,9 @@ They are shared. They are multiple copies of the same ConvNet. It's just a chara ## Preguntas y respuestas de comprensión -#### Pregunta 1: ¿Por qué es fácil la inferencia en el caso de grafos de factores basados ​​en energía? +#### Pregunta 1: ¿Por qué es fácil la inferencia en el caso de grafos de factores basados en energía? -La inferencia en el caso del modelo basado en energía con variable latente implica el uso de técnicas exhaustivas como el descenso de gradiente para minimizar la energía, sin embargo, ya que la energía, en este caso, es la suma de factores y se pueden utilizar técnicas como la programación dinámica. en lugar. +La inferencia en el caso del modelo basado en energía con variable latente implica el uso de técnicas exhaustivas como el descenso de gradiente para minimizar la energía, sin embargo, ya que la energía, en este caso, es la suma de factores y se pueden utilizar técnicas como la programación dinámica. #### Pregunta 2: ¿Qué pasa si las variables latentes en los gráficos de factores son variables continuas? ¿Podemos seguir usando el algoritmo de suma mínima? @@ -428,4 +428,4 @@ No podemos porque ahora no podemos buscar todas las combinaciones posibles para #### Pregunta 3: ¿Los cuadros NN se refieren a ConvNets separados? -Son compartidos. Son varias copias de la misma ConvNet. Es solo una red de reconocimiento de personajes. \ No newline at end of file +Son compartidos. Son varias copias de la misma ConvNet. Es solo una red de reconocimiento de personajes. From ca44560eb1fda9f32d28570747ba894c9d678420 Mon Sep 17 00:00:00 2001 From: Alfredo Canziani Date: Thu, 17 Sep 2020 01:09:32 -0400 Subject: [PATCH 07/11] Add lang: es --- docs/es/week14/14-1.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/es/week14/14-1.md b/docs/es/week14/14-1.md index fcabffc49..66527364d 100644 --- a/docs/es/week14/14-1.md +++ b/docs/es/week14/14-1.md @@ -1,5 +1,6 @@ --- lang-ref: ch.14-1 +lang: es lecturer: Yann LeCun title: Aprendizaje profundo para prediccion estructurada authors: Junrong Zha, Muge Chen, Rishabh Yadav, Zhuocheng Xu From db29b0cc7eae6a0aeaf4d158f51d31a171e6bce0 Mon Sep 17 00:00:00 2001 From: Alfredo Canziani Date: Thu, 17 Sep 2020 01:09:55 -0400 Subject: [PATCH 08/11] Update 14-2.md --- docs/es/week14/14-2.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/es/week14/14-2.md b/docs/es/week14/14-2.md index 251bdd6c5..ccecc4b76 100644 --- a/docs/es/week14/14-2.md +++ b/docs/es/week14/14-2.md @@ -1,10 +1,10 @@ --- lang-ref: ch.14-2 +lang: es lecturer: Yann LeCun title: Graphical Energy-based Methods authors: Yada Pruksachatkun, Ananya Harsh Jha, Joseph Morag, Dan Jefferys-White, and Brian Kelly date: 4 May 2020 - date: 15 Sep 2020 translator: lcipolina (Lucia Cipolina-Kun) --- @@ -489,4 +489,4 @@ El segundo término (un factor de entropía) es solo una propiedad de la familia Finalmente, podemos minimizar $L$ con respecto a sus parámetros (digamos, pesos de una red $W$), minimizando esta función que limita $L$ arriba. Llevamos a cabo esta minimización actualizando nuestras dos variables: (1) la entropía de $ q $ y (2) los parámetros de nuestro modelo $ W $. ## Resumen -Ésta es la "visión energética" de la inferencia variacional. Si necesita calcular el logaritmo de una suma de exponenciales, reemplácelo con el promedio de su función más un término de entropía. Esto nos da un límite superior. Luego minimizamos este límite superior y, al hacerlo, minimizamos la función que realmente nos importa. \ No newline at end of file +Ésta es la "visión energética" de la inferencia variacional. Si necesita calcular el logaritmo de una suma de exponenciales, reemplácelo con el promedio de su función más un término de entropía. Esto nos da un límite superior. Luego minimizamos este límite superior y, al hacerlo, minimizamos la función que realmente nos importa. From f24bb5ea524a6f98ab6ad0f9569f069622da9254 Mon Sep 17 00:00:00 2001 From: Alfredo Canziani Date: Thu, 17 Sep 2020 01:10:47 -0400 Subject: [PATCH 09/11] Add lang: es --- docs/es/week14/14-3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/es/week14/14-3.md b/docs/es/week14/14-3.md index e2cce44f9..b38ff52fc 100644 --- a/docs/es/week14/14-3.md +++ b/docs/es/week14/14-3.md @@ -4,7 +4,7 @@ title: Overfitting and regularization lecturer: Alfredo Canziani authors: Karl Otness, Xiaoyi Zhang, Shreyas Chandrakaladharan, Chady Raach date: 5 May 2020 - +lang: es translator: lcipolina (Lucia Cipolina-Kun) date: 15 Sep 2020 --- From 02224ff00ea8ce62c311f28858852ce28bbbeda2 Mon Sep 17 00:00:00 2001 From: Alfredo Canziani Date: Thu, 17 Sep 2020 01:11:31 -0400 Subject: [PATCH 10/11] Add lang: es --- docs/es/week14/14.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/es/week14/14.md b/docs/es/week14/14.md index 25f429ad7..faac418f7 100644 --- a/docs/es/week14/14.md +++ b/docs/es/week14/14.md @@ -1,6 +1,7 @@ --- lang-ref: ch.14 -title: Week 14 +title: Semana 14 +lang: es date: 15 Sep 2020 translator: lcipolina (Lucia Cipolina-Kun) --- From 712879d2a2af70972a7f9397166ef1341e491330 Mon Sep 17 00:00:00 2001 From: Alfredo Canziani Date: Thu, 17 Sep 2020 01:13:13 -0400 Subject: [PATCH 11/11] Add ES week 14 to _config.yml --- docs/_config.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/_config.yml b/docs/_config.yml index 4d0af6ac8..1e90d89a3 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -271,6 +271,11 @@ es: sections: - path: es/week08/08-1.md - path: es/week10/10.md + - path: es/week14/14.md + sections: + - path: es/week14/14-1.md + - path: es/week14/14-2.md + - path: es/week14/14-3.md ################################### Italian #################################### it: