Autocodificador

De testwiki
Revisión del 21:13 7 ene 2025 de imported>Aosbot (Añadiendo Control de autoridades)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)
Ir a la navegación Ir a la búsqueda

Un autocodificador es un tipo de red neuronal artificial utilizada para aprender codificaciones eficientes de datos no etiquetados (aprendizaje no supervisado).[1][2] El autocodificador aprende dos funciones, la primera es aquella que transforma los datos de entrada y la segunda es la función de decodificación que recrea los datos de entrada a partir de la representación codificada. El autocodificador aprende una representación eficiente (codificación) para un conjunto de datos, normalmente para reducir la dimensionalidad.

Existen variantes cuyo objetivo es forzar a las representaciones aprendidas a asumir propiedades útiles.[3] Algunos ejemplos son los autocodificadores regularizados (Sparse, Denoising y Contractive), que son eficaces en el aprendizaje de representaciones para tareas de clasificación posteriores,[4] y los autocodificadores variacionales, con aplicaciones como modelos generativos.[5] Los autocodificadores pueden ser aplicados en muchos problemas, incluyendo el reconocimiento facial,[6] la detección de características,[7] la detección de anomalías y la adquisición del significado de las palabras.[8][9] Los autocodificadores también son modelos generativos que pueden generar aleatoriamente nuevos datos que son similares a los datos de entrada (datos de entrenamiento).[7]

Principios matemáticos

Definición

Un autocodificador se define por los siguientes componentes:

  • Dos conjuntos: el espacio de los mensajes descodificados 𝒳; el espacio de los mensajes codificados 𝒵. Casi siempre, ambos 𝒳 y 𝒵 son espacios euclidianos, es decir, 𝒳=m,𝒵=n para algunos m,n.
  • Dos familias de funciones parametrizadas: la familia de codificadores Eϕ:𝒳𝒵 parametrizado por ϕ y la familia de decodificadores Dθ:𝒵𝒳, parametrizado por θ.

Para cualquier x𝒳, normalmente escribimos z=Eϕ(x), y nos referiremos a él como el código variable latente, la representación latente, el vector latente, etc. A la inversa, para cualquier z𝒵, normalmente escribimos x=Dθ(z) y nos referirnos a él como el mensaje (descodificado).

Usualmente, tanto el codificador como el descodificador se definen como perceptrones de múltiples capas. Por ejemplo, un codificador MLP de una capa Eϕ es:

Eϕ(𝐱)=σ(Wx+b)

Donde σ es una función de activación por elementos, como una función sigmoidea o una unidad lineal rectificada, W es una matriz denominada "peso", y b es un vector llamado "sesgo".

Entrenamiento de un autocodificador

Un autocodificador, por sí mismo, es simplemente una tupla de dos funciones. Para juzgar su calidad, necesitamos una tarea. Una tarea se define mediante una distribución de probabilidad de referencia μref sobre 𝒳 y una función de "calidad de la reconstrucción d:𝒳×𝒳[0,] de forma que d(x,x) mide cuánto x difiere de x.

Con ellos, podemos definir la función de pérdida para el autocodificador como:

L(θ,ϕ):=𝔼xμref[d(x,Dθ(Eϕ(x)))]

El autocodificador óptimo para una tarea determinada (μref,d) es entonces argminθ,ϕL(θ,ϕ). La búsqueda del autocodificador óptimo puede llevarse a cabo mediante cualquier técnica matemática de optimización, pero normalmente es realizado mediante el descenso de gradiente. Este proceso de búsqueda se denomina "entrenamiento del autocodificador". En la mayoría de las situaciones, la distribución de referencia es simplemente la distribución empírica dada por un conjunto de datos {x1,...,xN}𝒳, de forma que:

μref=1Ni=1Nδxi

Donde δxi es la medida de Dirac, y la función de calidad es sólo la pérdida L2: d(x,x)=xx22 y 2 es la norma euclidiana. Entonces, el problema de buscar el autocodificador óptimo no es más que una optimización por mínimos cuadrados:

minθ,ϕL(θ,ϕ),where L(θ,ϕ)=1Ni=1NxiDθ(Eϕ(xi))22

Interpretación

Esquema de un autocodificador básico

Un autocodificador consta de dos partes principales, una parte que convierte el mensaje en un código y una parte que reconstruye el mensaje a partir del código. Un autocodificador óptimo realizaría una reconstrucción lo más perfecta posible, definida como "casi perfecta" por la función de calidad de la reconstrucción d.

La forma más sencilla de realizar perfectamente la tarea de copia sería duplicar la señal. Para suprimir este comportamiento, el espacio del código 𝒵 suele tener menos dimensiones que el espacio de mensajes 𝒳.

Un autocodificador de este tipo se denomina subcompleto. Puede interpretarse como una compresión del mensaje o una reducción de su dimensionalidad.[1][10]

En el límite de un autocodificador incompleto ideal, cada código posible z en el espacio del código se utiliza para codificar un mensaje x que realmente aparece en la distribución μref y el decodificador también es perfecto: Dθ(Eϕ(x))=x. Este autocodificador ideal puede utilizarse para generar mensajes indistinguibles de los reales, alimentando su decodificador con código arbitrario z y obtener Dθ(z), que es un mensaje que realmente aparece en la distribución μref.

Si el espacio de código 𝒵 tiene una dimensión mayor (sobrecompleta) o igual al espacio de mensajes 𝒳, o las unidades ocultas tienen suficiente capacidad, un autocodificador puede aprender la función de identidad y volverse inútil. Sin embargo, los resultados experimentales han demostrado que los autocodificadores sobrecompletos pueden aprender características útiles.[11]

En un escenario ideal, la dimensión del código y la capacidad del modelo podrían establecerse en función de la complejidad de la distribución de datos que se desea modelar. Una forma estándar de hacerlo es añadir modificaciones al autocodificador básico, que se detallarán a continuación.[3]

Historia

El autocodificador fue propuesto por primera vez por Kramer como una generalización no lineal del análisis de componentes principales (ACP) .[1] El autocodificador también ha sido llamado autoasociador,[12] o red Diábolo.[11][13] Sus primeras aplicaciones datan de principios de los años 90.[3][14][15] Su aplicación más tradicional fue la reducción de dimensionalidad o el aprendizaje de características, pero el concepto se generalizó para el aprendizaje de modelos generativos de datos.[16][17] Algunas de las IA más potentes de la década de 2010 involucraban autoencoders apilados dentro de redes neuronales profundas.[18]

Variaciones

Autocodificadores regularizados

Existen varias técnicas para evitar que los autocodificadores aprendan la función de identidad y para mejorar su capacidad de captar información importante y aprender representaciones más ricas.

Autocodificador disperso (SAE, por sus siglas en inglés)

Inspirados en la hipótesis de la codificación dispersa en neurociencia, los autocodificadores dispersos son variantes de los autocodificadores, tales que los códigos Eϕ(x) o mensajes tienden a ser códigos dispersos, es decir, Eϕ(x) es cercano a cero en la mayoría de las entradas. Los autocodificadores dispersos pueden incluir más (en lugar de menos) unidades ocultas que entradas, pero sólo se permite que un pequeño número de unidades ocultas estén activas al mismo tiempo.[18] Fomentar la dispersión mejora el rendimiento en tareas de clasificación.[19]

Esquema simple de un autocodificador disperso de una sola capa. Los nodos ocultos en amarillo brillante están activados, mientras que los de amarillo claro están inactivos. La activación depende de la entrada.

Hay dos formas principales de imponer la dispersión. Una consiste simplemente en fijar en cero todas las activaciones del código latente excepto las k más altas. Este es el autocodificador k-sparse.[20]

El autocodificador k-sparse inserta la siguiente "función k-sparse" en la capa latente de un autocodificador estándar:

fk(x1,...,xn)=(x1b1,...,xnbn)

Donde bi=1 si |xi| se encuentra entre los k primeros, y 0 en caso contrario.

La retropropagación a través de fk es simple: se fija el gradiente en 0 para bi=0 y se mantiene el gradiente para bi=1 entradas.

Se trata esencialmente de una función ReLU generalizada.

La otra forma es una versión relajada del autocodificador k-sparse. En lugar de forzar la dispersión, añadimos una pérdida de regularización por dispersión y optimizamos para:

minθ,ϕL(θ,ϕ)+λLsparsity(θ,ϕ)

Donde λ>0 mide cuánta dispersión queremos imponer.[21]

La arquitectura del autocodificador tiene K capas. Para definir una pérdida de regularización de la dispersión, necesitamos una dispersión "deseada" ρ^k para cada capa, un peso wk para determinar en qué medida debe aplicarse cada dispersión, y una función s:[0,1]×[0,1][0,] para medir cuánto difieren dos esparcimientos.

Para cada entrada x, dejar que la dispersión real de la activación en cada capa k sea

ρk(x)=1ni=1nak,i(x)

Donde ak,i(x) es la activación en la neurona i de la capa k a la entrada x. La pérdida de dispersión en la entrada x para una capa es s(ρ^k,ρk(x)), y la pérdida de regularización de la dispersión para todo el autocodificador es la suma ponderada esperada de las pérdidas de dispersión:

Lsparsity(θ,ϕ)=𝔼xμX[k1:Kwks(ρ^k,ρk(x))]

Usualmente la función s es la divergencia de Kullback-Leibler (KL), como:[19] [21][22][23]

s(ρ,ρ^)=KL(ρ||ρ^)=ρlogρρ^+(1ρ)log1ρ1ρ^

O la pérdida L1, como s(ρ,ρ^)=|ρρ^|, o la pérdida L2, como s(ρ,ρ^)=|ρρ^|2

Alternativamente, la pérdida por regularización de la dispersión puede definirse sin referencia a ninguna "dispersión deseada", sino simplemente forzando tanta dispersión como sea posible. En este caso, se puede definir la pérdida de regularización de la dispersión como:

Lsparsity(θ,ϕ)=𝔼xμX[k1:Kwkhk]

Donde hk es el vector de activación en la capa k del autocodificador. La norma suele ser la norma L1 (para obtener el autocodificador disperso L1) o la norma L2 (para obtener el autocodificador disperso L2).

Autocodificador de eliminación de ruido (DAE)

Los autocodificadores de eliminación de ruido (DAE, por sus siglas en inglés) intentan conseguir una buena representación cambiando el criterio de reconstrucción.[3][4]

Una DAE, originalmente denominada "red autoasociativa robusta",[2] se entrena corrompiendo intencionadamente las entradas de un autocodificador estándar durante el entrenamiento. Un proceso de ruido se define por una distribución de probabilidad μT sobre las funciones T:𝒳𝒳. Es decir, la función T toma un mensaje x𝒳 y lo corrompe a una versión ruidosa T(x). La función T se selecciona aleatoriamente, con una distribución de probabilidad μT.

Dada una tarea (μref,d), el problema de entrenamiento de un DAE es el problema de optimización:

minθ,ϕL(θ,ϕ)=𝔼xμX,TμT[d(x,(DθEϕT)(x))]

Es decir, el DAE óptimo debe tomar cualquier mensaje ruidoso e intentar recuperar el mensaje original sin ruido, de ahí el nombre de "denoising".

Normalmente, el proceso de ruido T sólo se aplica durante el entrenamiento y las pruebas, no durante el uso posterior.

El uso del DAE depende de dos supuestos:

  • Existen representaciones de los mensajes que son relativamente estables y robustas frente al tipo de ruido que es probable que encontremos;
  • Dichas representaciones captan estructuras en la distribución de entrada que son útiles para nuestros fines.[4]

Algunos ejemplos de procesos ruidosos son:

  • ruido gaussiano isótropo aditivo,
  • ruido de enmascaramiento (una fracción de la entrada se elige aleatoriamente y se pone a 0)
  • ruido de sal y pimienta (una fracción de la entrada se elige al azar y se fija aleatoriamente en su valor mínimo o máximo).[4]

Autocodificador contractivo (CAE, por sus siglas en inglés)

Un autocodificador contractivo añade la pérdida de regularización contractiva a la pérdida del autocodificador estándar:

minθ,ϕL(θ,ϕ)+λLcontractive(θ,ϕ)

Donde λ>0 mide el grado de contracción que queremos imponer. La pérdida de regularización contractiva se define como la norma de Frobenius esperada de la matriz jacobiana de las activaciones del codificador con respecto a la entrada:

Lcontractive(θ,ϕ)=𝔼xμrefxEϕ(x)F2

Para entender lo que Lcontractive mide, tenga en cuenta que:

Eϕ(x+δx)Eϕ(x)2xEϕ(x)Fδx2

Para cualquier mensaje x𝒳, y pequeña variación δx en él. Por lo tanto, si xEϕ(x)F2 es pequeño, significa que una pequeña vecindad del mensaje se corresponde con una pequeña vecindad de su código. Se trata de una propiedad deseada, ya que significa que una pequeña variación en el mensaje conduce a una variación pequeña, incluso nula, en su código, al igual que dos imágenes pueden parecer iguales aunque no lo sean exactamente.

El DAE puede entenderse como un límite infinitesimal del CAE: en el límite de un ruido de entrada gaussiano pequeño, los DAE hacen que la función de reconstrucción resista perturbaciones de entrada pequeñas pero de tamaño finito, mientras que los CAE hacen que las características extraídas resistan perturbaciones de entrada infinitesimales.

Autocodificador de longitud de descripción mínima

[24] Autocodificador concreto

El autocodificador concreto está diseñado para la selección de características discretas.[25] Un autocodificador concreto fuerza al espacio latente a consistir sólo en un número de características especificado por el usuario. El autocodificador concreto utiliza una relajación continua de la distribución categórica para permitir que los gradientes pasen a través de la capa de selección de características, lo que hace posible utilizar la retropropagación estándar para aprender un subconjunto óptimo de características de entrada que minimicen la pérdida de reconstrucción.

Autocodificador variacional (VAE)

Los autocodificadores variacionales (VAE, por sus siglas en inglés) pertenecen a la familia de los métodos bayesianos variacionales. A pesar de las similitudes arquitectónicas con los autocodificadores básicos, los VAE son arquitecturas con objetivos diferentes y con una formulación matemática completamente distinta. En este caso, el espacio latente está compuesto por una mezcla de distribuciones en lugar de un vector fijo.

Dado un conjunto de datos de entrada x caracterizada por una función de probabilidad desconocida P(x) y un vector de codificación latente multivariante z el objetivo es modelar los datos como una distribución pθ(x), con θ definido como el conjunto de los parámetros de la red de forma que pθ(x)=zpθ(x,z)dz.

Ventajas de la profundidad

Estructura esquemática de un autoencoder con 3 capas ocultas totalmente conectadas. El código (z, o h para referencia en el texto) es la capa más interna.

Los autocodificadores suelen entrenarse con un codificador de una sola capa y un decodificador de una sola capa, pero el uso de codificadores y decodificadores de muchas capas (profundos) ofrece muchas ventajas.[3]

  • La profundidad puede reducir exponencialmente el coste computacional de representar algunas funciones.
  • La profundidad puede reducir exponencialmente la cantidad de datos de entrenamiento necesarios para aprender algunas funciones.
  • Experimentalmente, los autocodificadores profundos ofrecen una mejor compresión en comparación con los autocodificadores superficiales o lineales.[10]

Formación

Geoffrey Hinton desarrolló la técnica de red de creencia profunda para entrenar autocodificadores profundos de muchas capas. Su método consiste en tratar cada conjunto vecino de dos capas como una máquina de Boltzmann restringida para que el pre-entrenamiento se aproxime a una buena solución y, a continuación, utilizar la retropropagación para afinar los resultados.[10]

Los investigadores han debatido si el entrenamiento conjunto (es decir, el entrenamiento de toda la arquitectura junto con un único objetivo de reconstrucción global para optimizar) sería mejor para los autocodificadores profundos.[26] Un estudio de 2015 mostró que el entrenamiento conjunto aprende mejores modelos de datos junto con características más representativas para la clasificación en comparación con el método por capas.[26] Sin embargo, sus experimentos mostraron que el éxito del entrenamiento conjunto depende en gran medida de las estrategias de regularización adoptadas.[26][27]

Aplicaciones

Las dos aplicaciones principales de los autocodificadores son la reducción de la dimensionalidad y la recuperación de información,[3] pero se han aplicado variaciones modernas a otras tareas.

Reducción de la dimensionalidad

La reducción de dimensionalidad fue una de las primeras aplicaciones del aprendizaje profundo.[3]

Representación gráfica de los dos primeros componentes principales (izquierda) y una capa oculta bidimensional de un autocodificador lineal (derecha) aplicados al conjunto de datos Fashion MNIST.[28] Los dos modelos, al ser lineales, aprenden a abarcar el mismo subespacio. De hecho, la proyección de los puntos de datos es idéntica, salvo por la rotación del subespacio. Mientras que PCA selecciona una orientación específica hasta las reflexiones en el caso general, la función de coste de un autocodificador simple es invariable a las rotaciones del espacio latente.

En su estudio de 2006, Hinton[10] preentrenó un autocodificador multicapa con una pila de RBM y luego utilizó sus pesos para inicializar un autocodificador profundo con capas ocultas gradualmente más pequeñas hasta llegar a un cuello de botella de 30 neuronas. Las 30 dimensiones resultantes del código produjeron un menor error de reconstrucción en comparación con los primeros 30 componentes de un análisis de componentes principales (ACP), y aprendieron una representación que era cualitativamente más fácil de interpretar, separando claramente los grupos de datos.[3][10]

La representación de las dimensiones puede mejorar el rendimiento en tareas como la clasificación.[3] De hecho, el sello distintivo de la reducción de la dimensionalidad es colocar ejemplos semánticamente relacionados cerca unos de otros.[29]

Análisis de componentes principales

Si se utilizan activaciones lineales, o una sola capa oculta sigmoidea, entonces la solución óptima de un autocodificador está fuertemente relacionada con el análisis de componentes principales (ACP).[30][31] Los pesos de un autocodificador con una sola capa oculta de tamaño p (donde p es menor que el tamaño de la entrada) abarcan el mismo subespacio vectorial que el abarcado por la primera p componentes principales, y la salida del autocodificador es una proyección ortogonal sobre este subespacio. Los pesos del autocodificador no son iguales a los componentes principales y, por lo general, no son ortogonales, pero los componentes principales pueden recuperarse a partir de ellos mediante la descomposición en valores singulares.[32]

Reconstrucción de imágenes de 28x28píxeles mediante un Autoencoder con un tamaño de código de dos (capa oculta de dos unidades) y la reconstrucción a partir de los dos primeros Componentes Principales de PCA. Las imágenes proceden del conjunto de datos Fashion MNIST.[28]

Sin embargo, el potencial de los autocodificadores reside en su no linealidad, que permite al modelo aprender generalizaciones más potentes en comparación con PCA, y reconstruir la entrada con una pérdida de información significativamente menor.[10]

Recuperación de información y optimización de motores de búsqueda

La recuperación de información se beneficia especialmente de la reducción de la dimensionalidad, ya que la búsqueda puede ser más eficiente en determinados tipos de espacios de baja dimensión. Salakhutdinov y Hinton propusieron en 2007 la aplicación de los autocodificadores al hash semántico.[29] Entrenando el algoritmo para producir un código binario de baja dimensión, todas las entradas de la base de datos podrían almacenarse en una tabla hash que asignara vectores de código binario a las entradas. Esta tabla permitiría recuperar la información devolviendo todas las entradas con el mismo código binario que la consulta, o entradas ligeramente menos similares cambiando algunos bits de la codificación de la consulta.

La arquitectura codificador-decodificador, utilizada a menudo en el procesamiento del lenguaje natural y las redes neuronales, puede aplicarse científicamente en el campo de la SEO (Search Engine Optimization) de diversas maneras:

  1. Procesamiento de texto: Utilizando un autocodificador, es posible comprimir el texto de las páginas web en una representación vectorial más compacta. Esto puede ayudar a reducir el tiempo de carga de las páginas y mejorar su indexación por los motores de búsqueda.
  2. Reducción del ruido: Los autocodificadores pueden utilizarse para eliminar el ruido de los datos textuales de las páginas web. De este modo, los motores de búsqueda comprenden mejor el contenido y mejoran la clasificación en las páginas de resultados.
  3. Generación de metaetiquetas y fragmentos: Los autocodificadores pueden entrenarse para generar automáticamente metaetiquetas, fragmentos y descripciones para páginas web utilizando el contenido de la página. Esto puede optimizar la presentación en los resultados de búsqueda, aumentando el porcentaje de clics (CTR).
  4. Agrupación de contenidos: Mediante un autocodificador, las páginas web con contenidos similares pueden agruparse automáticamente. Esto puede ayudar a organizar el sitio web de forma lógica y mejorar la navegación, lo que puede afectar positivamente a la experiencia del usuario y a la clasificación en los motores de búsqueda.
  5. Generación de contenidos relacionados: Se puede emplear un autocodificador para generar contenidos relacionados con lo que ya está presente en el sitio. Esto puede aumentar el atractivo del sitio web para los motores de búsqueda y proporcionar a los usuarios información adicional relevante.
  6. Detección de palabras clave: Los codificadores automáticos pueden entrenarse para identificar palabras clave y conceptos importantes en el contenido de las páginas web. Esto puede ayudar a optimizar el uso de palabras clave para una mejor indexación.
  7. Búsqueda semántica: El uso de técnicas de autocodificación permite crear modelos de representación semántica de los contenidos. Estos modelos pueden utilizarse para mejorar la comprensión de los temas tratados en las páginas web por parte de los motores de búsqueda.

En esencia, la arquitectura codificador-decodificador o los autocodificadores pueden aprovecharse en SEO para optimizar el contenido de las páginas web, mejorar su indexación y aumentar su atractivo tanto para los motores de búsqueda como para los usuarios.

Detección de anomalías

Otra aplicación de los autocodificadores es la detección de anomalías.[2][33][34][35][36][37] Al aprender a reproducir las características más destacadas de los datos de entrenamiento con algunas de las restricciones descritas anteriormente, se fomenta que el modelo aprenda a reproducir con precisión las características observadas con más frecuencia. Cuando se enfrenta a anomalías, el modelo debe empeorar su rendimiento de reconstrucción. En la mayoría de los casos, sólo se utilizan datos con instancias normales para entrenar el autocodificador; en otros, la frecuencia de anomalías es pequeña en comparación con el conjunto de observaciones, de modo que podría ignorarse su contribución a la representación aprendida. Tras el entrenamiento, el autocodificador reconstruirá con precisión los datos "normales", mientras que no lo hará con los datos anómalos desconocidos.[35] El error de reconstrucción (el error entre los datos originales y su reconstrucción de baja dimensión) se utiliza como puntuación de anomalía para detectar anomalías.[35]

Sin embargo, la literatura reciente ha demostrado que ciertos modelos de autocodificación pueden, contra intuitivamente, ser muy buenos reconstruyendo ejemplos anómalos y, en consecuencia, no ser capaces de realizar de forma fiable la detección de anomalías.[38][39]

Procesamiento de imágenes

Las características de los autocodificadores son útiles en el tratamiento de imágenes.

Un ejemplo lo encontramos en la compresión de imágenes con pérdidas, donde los autocodificadores superaron a otros enfoques y resultaron competitivos frente a JPEG 2000.[40][41]

Otra aplicación útil de los autocodificadores en el preprocesamiento de imágenes es la eliminación de ruido.[42][43][44]

Los autocodificadores se han utilizado en contextos más exigentes, como la imagen médica, donde se han empleado para la eliminación de ruido de imágenes[45] y la superresolución.[46][47] En el diagnóstico asistido por imagen, se han realizado experimentos con autocodificadores para la detección del cáncer de mama[48] y para modelar la relación entre el deterioro cognitivo de la enfermedad de Alzheimer y las características latentes de un autocodificador entrenado con IRM.[49]

Descubrimiento de fármacos

En 2019 se validaron experimentalmente en ratones moléculas generadas con autocodificadores variacionales.[50][51]

Predicción de popularidad

Recientemente, un marco de autocodificación apilada produjo resultados prometedores en la predicción de la popularidad de las publicaciones en las redes sociales,[52] lo que resulta útil para las estrategias de publicidad en línea.

Traducción automática

Los autocodificadores se han aplicado a la traducción automática, que suele denominarse traducción automática neuronal (NMT).[53][54] A diferencia de los autocodificadores tradicionales, la salida no coincide con la entrada, sino que está en otro idioma. En la NMT, los textos se tratan como secuencias que se codifican en el procedimiento de aprendizaje, mientras que en el lado del decodificador se generan secuencias en la lengua o lenguas de destino. Los autocodificadores específicos para cada idioma incorporan más características lingüísticas al procedimiento de aprendizaje, como las características de descomposición del chino.[55] La traducción automática rara vez se sigue haciendo con autocodificadores, debido a la disponibilidad de redes de transformadores más eficaces.

Véase también

Referencias

Plantilla:Listaref


Plantilla:Control de autoridades

  1. 1,0 1,1 1,2 Plantilla:Cita publicación
  2. 2,0 2,1 2,2 Plantilla:Cita publicación
  3. 3,0 3,1 3,2 3,3 3,4 3,5 3,6 3,7 3,8 Plantilla:Cita web
  4. 4,0 4,1 4,2 4,3 Plantilla:Cita publicación
  5. Plantilla:Cita publicación
  6. Plantilla:Cita publicación
  7. 7,0 7,1 Plantilla:Cita publicación
  8. Plantilla:Cita publicación
  9. Plantilla:Cita publicación
  10. 10,0 10,1 10,2 10,3 10,4 10,5 Plantilla:Cita publicación
  11. 11,0 11,1 Plantilla:Cita publicación
  12. Plantilla:Cita publicación
  13. Plantilla:Cita publicación
  14. Plantilla:Cita publicación
  15. Plantilla:Cita publicación
  16. Plantilla:Cita publicación
  17. Plantilla:Cita publicación
  18. 18,0 18,1 Plantilla:Cita publicación
  19. 19,0 19,1 Plantilla:Cita publicación
  20. Plantilla:Cita publicación
  21. 21,0 21,1 Plantilla:Cita publicación
  22. Plantilla:Cita publicación
  23. Plantilla:Cita publicación
  24. Plantilla:Cita publicación
  25. Plantilla:Cita publicación
  26. 26,0 26,1 26,2 Plantilla:Cita publicación
  27. Plantilla:Cita publicación
  28. 28,0 28,1 Plantilla:Obra citada
  29. 29,0 29,1 Plantilla:Cita publicación
  30. Plantilla:Cita libro
  31. Plantilla:Cita publicación
  32. Plantilla:Cita publicación
  33. Plantilla:Cita publicación
  34. Plantilla:Cita publicación
  35. 35,0 35,1 35,2 Plantilla:Cita publicación
  36. Plantilla:Cita publicación
  37. Plantilla:Cita publicación
  38. Plantilla:Cita publicación
  39. Plantilla:Cita publicación
  40. Plantilla:Cita publicación
  41. Plantilla:Cita publicación
  42. Plantilla:Cita publicación
  43. Plantilla:Cita publicación
  44. Plantilla:Cita publicación
  45. Plantilla:Cita publicación
  46. Plantilla:Cita publicación
  47. Plantilla:Cita publicación
  48. Plantilla:Cita publicación
  49. Plantilla:Cita publicación
  50. Plantilla:Cita publicación
  51. Plantilla:Cita noticia
  52. Plantilla:Cita publicación
  53. Plantilla:Cita publicación
  54. Plantilla:Cita publicación
  55. Plantilla:Cita publicación