Files
Procesamiento-de-Imagenes-y…/Lab4/Informe_Laboratorio_GAN.tex
T
2026-09-13 20:04:33 -06:00

366 lines
19 KiB
TeX

\documentclass[11pt,letterpaper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage[margin=2.5cm]{geometry}
\usepackage{amsmath,amssymb}
\usepackage{booktabs}
\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{enumitem}
\usepackage{float}
\usepackage[hidelinks]{hyperref}
\usepackage[strings]{underscore}
\graphicspath{{outputs/gan_mode_collapse/}}
\setlength{\parindent}{0pt}
\setlength{\parskip}{0.6em}
\setlist[enumerate]{leftmargin=*,itemsep=0.8em}
\newcommand{\answerbox}[1]{%
\par\noindent\textcolor{gray}{\rule{\linewidth}{0.4pt}}%
\vspace{#1}\par\noindent\textcolor{gray}{\rule{\linewidth}{0.4pt}}%
}
\newcommand{\answer}[1]{\par\noindent\textbf{Respuesta:} #1}
\newcommand{\resultfigure}[2]{%
\begin{figure}[H]
\centering
\IfFileExists{outputs/gan_mode_collapse/#1}{%
\includegraphics[width=0.96\linewidth,height=0.55\textheight,keepaspectratio]{#1}%
}{%
\fbox{\parbox[c][4cm][c]{0.88\linewidth}{\centering
Ejecute el notebook para generar \texttt{\detokenize{#1}}.}}%
}
\caption{#2}
\end{figure}
}
\title{Informe de laboratorio\\Recuperación del colapso de modos en una GAN}
\author{Estudiante: Alejandro Lembke Barrientos}
\date{Carné: 12002840\hfill Fecha: 12 de septiembre de 2026}
\begin{document}
\maketitle
\section{Propósito e hipótesis}
Todos los experimentos de recuperación parten del mismo punto de control con
colapso de modos. La variable independiente es el peso de la pérdida de
diversidad $\lambda_{\mathrm{div}}\in\{0,0.1,0.5,1.0\}$. La función objetivo del
generador es
\[
\mathcal{L}_G
=\mathcal{L}_{\mathrm{adv}}
+\lambda_{\mathrm{div}}\mathcal{L}_{\mathrm{div}},
\qquad
\mathcal{L}_{\mathrm{div}}
=-\mathbb{E}\!\left[
\frac{\lVert G(z_1)-G(z_2)\rVert_1}
{\lVert z_1-z_2\rVert_1+\epsilon}
\right].
\]
\begin{enumerate}
\item Antes de observar los resultados, ¿qué valor de
$\lambda_{\mathrm{div}}$ esperaba que funcionara mejor? Explique el beneficio
esperado y un posible riesgo.
\end{enumerate}
\answer{Antes de examinar los resultados se esperaría que
$\lambda_{\mathrm{div}}=0.5$ ofreciera un buen equilibrio: suficiente para
incentivar diversidad entre las muestras del generador sin ser tan agresivo
como $\lambda_{\mathrm{div}}=1.0$, que podría distorsionar excesivamente las
imágenes en su intento de maximizar la distancia entre pares generados. El
riesgo esperado era que un $\lambda_{\mathrm{div}}$ demasiado alto sacrificara
realismo visual a cambio de diversidad artificial (por ejemplo, añadiendo
ruido o trazos distorsionados en lugar de dígitos genuinamente distintos).}
\section{Diagnóstico del punto de control colapsado}
\resultfigure{collapsed_samples.png}{Muestras del punto de control común con colapso de modos.}
\resultfigure{collapsed_class_distribution.png}{Distribución de dígitos predicha por el clasificador en el punto colapsado.}
\begin{enumerate}[resume]
\item ¿Qué evidencia visual sugiere colapso de modos? Distinga entre clases
ausentes y apariencias repetidas dentro de una clase representada.
\end{enumerate}
\answer{\texttt{collapsed\_samples.png} muestra 64 imágenes, todas dígitos "1"
o "7" perfectamente legibles y con variedad de trazo (rectos, inclinados, con
o sin serifa horizontal); no aparece ningún otro dígito.
\texttt{collapsed\_class\_distribution.png} confirma cuantitativamente que
solo esas dos clases superan el umbral del 1\% (\textasciitilde49\% y
\textasciitilde48.5\% de la masa respectivamente), con el resto prácticamente
en cero. La evidencia distingue ambos fenómenos con claridad: hay 8 clases
completamente ausentes (0, 2, 3, 4, 5, 6, 8, 9 por debajo del umbral),
mientras que dentro de las dos clases representadas sí se observa variedad de
apariencia (distintos estilos de trazo para el "1" y para el "7"); es decir,
el colapso es entre clases, no una repetición monótona de una única imagen.}
\begin{enumerate}[resume]
\item Utilice el número de modos y la entropía normalizada para describir el
colapso entre clases. ¿Qué información aporta cada medida?
\end{enumerate}
\answer{El número de modos (2/10) confirma que exactamente dos clases superan
el umbral del 1\%, coincidiendo con los dígitos objetivo del colapso (1 y 7).
La entropía normalizada (0.367) cuantifica además qué tan pareja es la masa
entre esas clases activas: un valor tan por debajo de 1.0 refleja que, aunque
hay 2 modos, la distribución global sigue muy alejada de la uniformidad sobre
las 10 clases, ya que la masa está casi enteramente concentrada en ese
subconjunto (aproximadamente 50/50 entre 1 y 7), dejando 8 clases sin
representación. El conteo de modos aporta una lectura discreta de cobertura;
la entropía aporta la forma continua de toda la distribución, incluyendo cuán
desbalanceada está incluso entre las clases activas.}
\begin{enumerate}[resume]
\item ¿Las muestras mostradas permiten identificar confiablemente el colapso
dentro de cada clase? Explique qué evidencia adicional se necesita.
\end{enumerate}
\answer{Sí, de forma razonablemente confiable: las imágenes en
\texttt{collapsed\_samples.png} son dígitos "1" y "7" claramente legibles, con
variación visible de estilo (inclinación, presencia de barra horizontal en el
"7", grosor del trazo), por lo que se puede juzgar directamente si hay
diversidad dentro de cada clase representada. Como evidencia adicional, la
diversidad intra-clase cuantitativa del punto colapsado (25.954) es
considerablemente menor que la alcanzada tras la recuperación
(\textasciitilde37--38), lo que corrobora numéricamente que la variedad
dentro de esas dos clases también era más limitada en el punto de partida, y
no es solo una impresión visual.}
\section{Resultados de recuperación}
\IfFileExists{outputs/gan_mode_collapse/summary_table.tex}{%
\begin{table}[H]
\centering
\small
\resizebox{\linewidth}{!}{\input{outputs/gan_mode_collapse/summary_table.tex}}
\caption{Resultados cuantitativos generados por el notebook.}
\end{table}
}{%
\begin{center}
\fbox{\parbox[c][2.2cm][c]{0.88\linewidth}{\centering
Ejecute el notebook para generar
\texttt{outputs/gan\_mode\_collapse/summary\_table.tex}.}}
\end{center}
}
\resultfigure{recovery_samples.png}{Muestras del punto colapsado y de todas las configuraciones de recuperación.}
\resultfigure{class_distributions.png}{Distribuciones de clases predichas; la línea discontinua indica el umbral de modo.}
\resultfigure{recovery_metrics.png}{Comparación cuantitativa de las configuraciones de recuperación.}
\begin{enumerate}[resume]
\item ¿Qué configuraciones recuperan el mayor número de clases? ¿Un número
alto de modos implica necesariamente una distribución equilibrada? Utilice
la entropía como evidencia.
\end{enumerate}
\answer{Las cuatro configuraciones de recuperación
($\lambda_{\mathrm{div}}=0$, $0.1$, $0.5$ y $1.0$) recuperan la totalidad de
las 10 clases (10/10 modos), frente a 2/10 en el punto de partida. Un número
alto de modos no garantiza automáticamente una distribución perfectamente
equilibrada, pero en este caso la entropía normalizada confirma que sí se
logró una cobertura casi uniforme: entre 0.984 y 0.988 en las cuatro
configuraciones, muy cerca del máximo teórico de 1.0, frente a 0.367 en el
punto colapsado. \texttt{class\_distributions.png} corrobora visualmente que
las cuatro configuraciones producen barras de altura similar en las 10
clases (con una ligera sobre-representación del dígito "9" y
sub-representación del "4" en las cuatro), consistente con una recuperación
genuina y no solo nominal.}
\begin{enumerate}[resume]
\item Compare la confianza del clasificador. Identifique cualquier compromiso
aparente entre diversidad y calidad.
\end{enumerate}
\answer{La confianza del clasificador baja de 0.971 (colapsado) a un rango
estrecho de 0.909--0.912 en las cuatro configuraciones recuperadas, sin una
tendencia clara respecto a $\lambda_{\mathrm{div}}$ ($\lambda=0.1$ tiene la
confianza más baja, 0.909, mientras que $\lambda=0$ y $\lambda=1.0$ empatan en
la más alta, 0.912). Esta pequeña caída es esperable y saludable: el punto
colapsado concentraba casi toda la probabilidad en solo 2 clases con trazos
muy estereotipados (más fáciles de clasificar con alta confianza), mientras
que al cubrir las 10 clases el clasificador enfrenta dígitos naturalmente más
ambiguos entre sí (por ejemplo 4 frente a 9, o 3 frente a 8). No se observa
aquí un compromiso fuerte entre diversidad y calidad: las cuatro
configuraciones logran cobertura completa sin una penalización de confianza
mayor al \textasciitilde6\% respecto al punto colapsado.}
\begin{enumerate}[resume]
\item Compare la diversidad de características con la diversidad dentro de
cada clase. ¿Qué configuraciones mejoran ambas medidas y cuáles mejoran
principalmente una?
\end{enumerate}
\answer{Ambas métricas suben de forma marcada respecto al punto colapsado
(diversidad de características: 32.059 $\to$ \textasciitilde50.3--51.0;
diversidad intra-clase: 25.954 $\to$ \textasciitilde37.3--38.1), pero entre
las cuatro configuraciones de recuperación las diferencias son mínimas y no
siguen un patrón monótono claro: $\lambda=0.5$ tiene la diversidad de
características más baja (50.256) y la intra-clase más baja (37.341) de las
cuatro, mientras que $\lambda=1.0$ tiene ambas más altas (50.829 y 38.141
respectivamente). No hay una configuración que mejore claramente una medida
sacrificando la otra; las cuatro se comportan de forma muy similar, lo que
sugiere que, una vez corregido el entrenamiento adversarial, la recuperación
de diversidad en este escenario depende más de reanudar el entrenamiento
sobre datos completos que del peso específico de la pérdida de diversidad
explícita.}
\begin{enumerate}[resume]
\item Examine las muestras. ¿La mayor diversidad representa variaciones
significativas o solamente ruido, distorsiones o dígitos ambiguos? Describa
dos ejemplos concretos.
\end{enumerate}
\answer{En esta corrida la mayor diversidad numérica sí corresponde a
variaciones significativas y no a ruido: en \texttt{recovery\_samples.png},
las cuatro filas de recuperación muestran dígitos completos y reconocibles de
múltiples clases (ejemplo 1: la tercera columna muestra un "9" con trazo
cursivo bien formado en las cuatro configuraciones; ejemplo 2: la octava
columna muestra una forma con un trazo diagonal marcado parecido a un rayo,
consistente entre las cuatro configuraciones). Cabe notar que, como la
evaluación usa la misma semilla de muestreo para las cuatro configuraciones,
las imágenes de una misma columna son decodificaciones del mismo vector
latente por cada generador, y por eso lucen casi idénticas entre filas de
recuperación --lo cual es coherente con que las métricas cuantitativas
también sean casi idénticas entre configuraciones-- y ninguna muestra manchas
de ruido ni dígitos ambiguos.}
\section{Comportamiento durante el entrenamiento}
\resultfigure{recovery_training.png}{Pérdidas del generador y discriminador durante la recuperación.}
\begin{enumerate}[resume]
\item ¿Por qué las pérdidas totales del generador para distintos valores de
$\lambda_{\mathrm{div}}$ no deben compararse como si midieran exactamente la
misma función objetivo?
\end{enumerate}
\answer{Porque $\mathcal{L}_G=\mathcal{L}_{\mathrm{adv}}+\lambda_{\mathrm{div}}
\mathcal{L}_{\mathrm{div}}$ combina dos términos con escalas y pesos
distintos según la configuración. En \texttt{recovery\_training.png} se
observa que el objetivo total del generador es sistemáticamente más bajo
cuanto mayor es $\lambda_{\mathrm{div}}$ (por ejemplo, $\lambda=1.0$ termina en
\textasciitilde1.07 frente a \textasciitilde1.35 en $\lambda=0$), pero esto no
significa que ese modelo entrene "mejor": $\mathcal{L}_{\mathrm{div}}$ está
definida como una cantidad negativa (más negativa cuanto más diversas son las
salidas), así que un $\lambda_{\mathrm{div}}$ mayor simplemente resta más de
ese término negativo al total, sin que ello implique una pérdida adversarial
menor. Comparar el total directamente confundiría el efecto de la
ponderación con una diferencia real de desempeño adversarial.}
\begin{enumerate}[resume]
\item ¿Las curvas de pérdida demuestran por sí solas que se resolvió el
colapso de modos? Justifique utilizando los demás resultados.
\end{enumerate}
\answer{No por sí solas. \texttt{recovery\_training.png} muestra que la
pérdida del discriminador sube de forma saludable desde
\textasciitilde0.57--0.61 hasta \textasciitilde0.90--0.98 a lo largo de las 5
épocas de recuperación en las cuatro configuraciones, sin colapsar a 0 ni
dispararse --un patrón consistente con un equilibrio adversarial funcional.
Sin embargo, esta curva por sí sola solo indica que el entrenamiento es
estable; la confirmación de que el colapso de modos realmente se resolvió
requiere las métricas de cobertura (10/10 modos, entropía
\textasciitilde0.98--0.99, Pregunta 5) y la inspección visual de
\texttt{recovery\_samples.png}, que muestran dígitos reconocibles de las 10
clases.}
\section{Decisión y limitaciones}
\begin{enumerate}[resume]
\item Seleccione un valor de $\lambda_{\mathrm{div}}$. Defienda la elección
con al menos dos resultados cuantitativos y dos observaciones visuales.
\end{enumerate}
\answer{Se recomienda $\lambda_{\mathrm{div}}=1.0$. Evidencia cuantitativa:
(1) alcanza la entropía normalizada más alta de las cuatro configuraciones
(0.988, frente a 0.984 en $\lambda=0$); (2) alcanza la diversidad intra-clase
más alta (38.141) y empata en la confianza de clasificador más alta (0.912)
junto con $\lambda=0$, sin ningún costo aparente respecto a las demás.
Evidencia visual: (3) en \texttt{recovery\_samples.png}, la fila
$\lambda=1.0$ muestra las mismas 16 imágenes nítidas y reconocibles que el
resto de configuraciones, sin manchas de ruido ni distorsiones adicionales
pese a tener el peso de diversidad más alto evaluado; (4) en
\texttt{class\_distributions.png}, su distribución de clases es tan pareja
como la de las demás configuraciones (mismo patrón de ligera
sobre-representación de "9" y sub-representación de "4"). Dado que
$\lambda_{\mathrm{div}}=1.0$ no muestra ninguna penalización visible de
calidad frente a $\lambda_{\mathrm{div}}=0$, y sí una ligera ventaja
consistente en las métricas de diversidad, es la opción mejor respaldada
entre las evaluadas --con la salvedad de que las diferencias entre las
cuatro configuraciones son pequeñas y podrían no ser robustas frente a otra
semilla aleatoria, ya que cada una se evaluó una sola vez (Pregunta 13).}
\begin{enumerate}[resume]
\item Si la fidelidad de las imágenes fuera más importante que la cobertura
de clases, ¿cambiaría su elección? Justifique.
\end{enumerate}
\answer{Sí cambiaría, aunque por poco: se elegiría $\lambda_{\mathrm{div}}=0$,
que logra la confianza de clasificador empatada más alta (0.912, igual que
$\lambda=1.0$) sin necesidad de introducir el término adicional de diversidad
ni su costo de ajuste. Como en este experimento fidelidad y diversidad no
muestran un compromiso fuerte entre sí (las cuatro configuraciones logran
calidad visual y cobertura muy similares), priorizar fidelidad favorecería la
configuración más simple ($\lambda_{\mathrm{div}}=0$) por parsimonia, ya que
no hay evidencia de que agregar la pérdida de diversidad aporte una mejora
de fidelidad adicional en este caso.}
\begin{enumerate}[resume]
\item Indique una limitación de utilizar un clasificador de MNIST para medir
la cobertura de la GAN y una limitación del diseño experimental.
\end{enumerate}
\answer{\emph{Clasificador:} se entrenó únicamente con dígitos reales de
MNIST, por lo que su confianza y sus predicciones de clase pueden no ser
completamente fiables frente a imágenes fuera de esa distribución; incluso en
esta corrida corregida, la confianza no debe interpretarse como una medida
absoluta de realismo, solo como un proxy relativo entre configuraciones.
\emph{Diseño experimental:} cada configuración de $\lambda_{\mathrm{div}}$ se
evaluó con una sola semilla y un solo conjunto de 5 épocas de recuperación,
por lo que las pequeñas diferencias entre configuraciones (por ejemplo, 0.984
frente a 0.988 de entropía) podrían no ser estadísticamente robustas frente a
la variación aleatoria de la inicialización o el orden de los datos.
\emph{Nota de depuración:} durante una primera ejecución de este notebook se
detectó que el punto de control "colapsado" y las cuatro recuperaciones
producían únicamente ruido no estructurado, sin relación aparente con
dígitos reales, independientemente de $\lambda_{\mathrm{div}}$. La causa era
un error en la celda \texttt{train\_gan\_epoch}: durante el paso de
actualización del generador, el discriminador se ponía en
\texttt{discriminator.eval()} antes de calcular la pérdida adversarial. Como
el discriminador incluye una capa \texttt{nn.BatchNorm2d}, el modo
\texttt{eval()} lo hace usar estadísticas acumuladas (running mean/var) en
lugar de las del lote actual, desincronizando el discriminador que evalúa al
generador del discriminador que realmente se entrena, e impidiendo que el
generador recibiera una señal de gradiente útil (el discriminador saturaba en
la época 5 de 16 del preentrenamiento). El arreglo --cambiar esa línea a
\texttt{discriminator.train()}-- resolvió el problema por completo: el punto
de control colapsa correctamente hacia los dígitos 1 y 7 (97.2\% de la masa,
Pregunta 2) y las cuatro recuperaciones alcanzan cobertura completa de las 10
clases. Todos los resultados de este informe corresponden a la corrida ya
corregida.}
\begin{enumerate}[resume]
\item Proponga un experimento posterior que fortalezca o cuestione su
conclusión. Indique la variable que modificaría y la evidencia que recopilaría.
\end{enumerate}
\answer{Se propone repetir las cuatro configuraciones de recuperación con al
menos 3 semillas aleatorias distintas cada una, midiendo la media y
desviación estándar de entropía, confianza y diversidad intra-clase por
configuración. Dado que en esta corrida las diferencias entre
$\lambda_{\mathrm{div}}=0$, $0.1$, $0.5$ y $1.0$ son pequeñas (por ejemplo,
0.984 frente a 0.988 de entropía), este experimento permitiría confirmar si
$\lambda_{\mathrm{div}}=1.0$ realmente aventaja de forma consistente a
$\lambda_{\mathrm{div}}=0$, o si la diferencia observada aquí es ruido de una
sola corrida; si las diferencias desaparecen bajo múltiples semillas, la
recomendación debería simplificarse a $\lambda_{\mathrm{div}}=0$ por
parsimonia.}
\section*{Recomendación final}
Valor recomendado: $\lambda_{\mathrm{div}}=1.0$
Conclusión en una oración:
\answer{Tras corregir un error de \texttt{BatchNorm}/modo \texttt{eval()} en
el paso del generador, las cuatro configuraciones de recuperación restauran
por completo las 10 clases de dígitos (entropía \textasciitilde0.98--0.99
frente a 0.367 en el punto colapsado), y $\lambda_{\mathrm{div}}=1.0$ se
recomienda por lograr la mayor entropía y diversidad intra-clase sin
sacrificar confianza de clasificador frente a las demás configuraciones
evaluadas.}
\end{document}