Está en la página 1de 44

Traducido del inglés al español - www.onlinedoctranslator.

com

información

Revisar

Aprendizaje automático en Python: principales desarrollos y


tendencias tecnológicas en ciencia de datos,
Aprendizaje automático e inteligencia artificial
Sebastián Raschka1,*,† , Josué Patterson2y Corey Nolet2,3
1 Departamento de Estadística, Universidad de Wisconsin-Madison, Madison, WI 53575, EE. UU. NVIDIA, Santa Clara, CA 95051,
2 EE. UU.; joshuap@nvidia.com (JP); cnolet@nvidia.com (CN) Departamento de Ciencias de la Computación e Ingeniería Eléctrica,
3 Universidad de Maryland, Condado de Baltimore, Baltimore, MD 21250, EE. UU.

* Correspondencia: sraschka@wisc.edu
† Dirección actual: 1300 University Ave, Medical Sciences Building, Madison, WI 53706, EE. UU.

---- -
Recibido: 6 de febrero de 2020; Aceptado: 31 de marzo de 2020; Publicado: 4 de abril de 2020 ---

Abstracto:Las aplicaciones más inteligentes están haciendo un mejor uso de los conocimientos obtenidos de los datos, lo
que tiene un impacto en todas las industrias y disciplinas de investigación. En el centro de esta revolución se encuentran las
herramientas y los métodos que la impulsan, desde el procesamiento de enormes cantidades de datos generados cada día
hasta aprender de ellos y tomar medidas útiles. Las redes neuronales profundas, junto con los avances en el aprendizaje
automático clásico y la computación con unidades de procesamiento de gráficos (GPU) escalables de propósito general, se
han convertido en componentes críticos de la inteligencia artificial, lo que permite muchos de estos avances asombrosos y
reduce la barrera para la adopción. Python sigue siendo el lenguaje preferido para la informática científica, la ciencia de
datos y el aprendizaje automático, ya que aumenta tanto el rendimiento como la productividad al permitir el uso de
bibliotecas de bajo nivel y API limpias de alto nivel. Esta encuesta ofrece información sobre el campo del aprendizaje
automático con Python, realizando un recorrido por temas importantes para identificar algunos de los paradigmas centrales
de hardware y software que lo han permitido. Cubrimos bibliotecas y conceptos ampliamente utilizados, recopilados para
una comparación integral, con el objetivo de educar al lector e impulsar el campo del aprendizaje automático de Python.

Palabras clave:Pitón; aprendizaje automático; aprendizaje profundo; Computación GPU; Ciencia de los datos; Redes neuronales

1. Introducción

La inteligencia artificial (IA), como subcampo de la informática, se centra en el diseño de programas informáticos y
máquinas capaces de realizar tareas en las que los humanos son naturalmente buenos, incluida la comprensión del lenguaje
natural, la comprensión del habla y el reconocimiento de imágenes. A mediados del siglo XX, el aprendizaje automático surgió
como un subconjunto de la IA, proporcionando una nueva dirección para diseñar IA inspirándose en una comprensión
conceptual de cómo funciona el cerebro humano.1,2]. Hoy en día, el aprendizaje automático sigue profundamente
entrelazado con la investigación de la IA. Sin embargo, el aprendizaje automático a menudo se considera más ampliamente
como un campo científico que se centra en el diseño de modelos y algoritmos informáticos que pueden realizar tareas
específicas, que a menudo implican reconocimiento de patrones, sin la necesidad de ser programados explícitamente.
Una de las ideas y motivaciones centrales detrás del multifacético y fascinante campo de la programación informática es
la automatización y el aumento de tareas tediosas. Por ejemplo, la programación permite al desarrollador escribir software
para reconocer códigos postales que pueden permitir la clasificación automática de cartas en una oficina de correos. Sin
embargo, el desarrollo de un conjunto de reglas que, cuando se integran en un programa de computadora, pueden realizar
esta acción de manera confiable es a menudo tedioso y extremadamente desafiante. En este contexto, el aprendizaje
automático puede entenderse como el estudio y desarrollo de enfoques que automatizan la toma de decisiones complejas, ya
que permite a las computadoras descubrir reglas predictivas a partir de patrones en datos etiquetados.

Información2020,11, 193; doi:10.3390/info11040193 www.mdpi.com/journal/information


Información2020,11, 193 2 de 44

sin instrucciones explícitas. En el ejemplo anterior de reconocimiento de códigos postales, el aprendizaje automático se puede utilizar
para aprender modelos a partir de ejemplos etiquetados para descubrir un reconocimiento altamente preciso de códigos postales
escritos a mano y a máquina [3].
Históricamente, se ha utilizado una amplia gama de lenguajes y entornos de programación diferentes para permitir la
investigación y el desarrollo de aplicaciones de aprendizaje automático. Sin embargo, dado que el lenguaje Python de
propósito general ha experimentado un enorme crecimiento en popularidad dentro de la comunidad informática científica en
la última década, las bibliotecas de aprendizaje automático y aprendizaje profundo más recientes ahora están basadas en
Python.
Con su enfoque principal en la legibilidad, Python es un lenguaje de programación interpretado de alto nivel,
ampliamente reconocido por ser fácil de aprender, pero aún así capaz de aprovechar el poder de los lenguajes de
programación a nivel de sistemas cuando sea necesario. Además de los beneficios del lenguaje en sí, la comunidad en
torno a las herramientas y bibliotecas disponibles hace que Python sea particularmente atractivo para cargas de
trabajo en ciencia de datos, aprendizaje automático e informática científica. Según una encuesta reciente de
KDnuggets que encuestó a más de 1800 participantes sobre sus preferencias en análisis, ciencia de datos y
aprendizaje automático, Python mantuvo su posición en la cima del lenguaje más utilizado en 2019 [4].
Desafortunadamente, la implementación más utilizada del compilador e intérprete de Python, CPython, ejecuta código
vinculado a la CPU en un solo subproceso, y sus paquetes de multiprocesamiento conllevan otras compensaciones
importantes en el rendimiento. Una alternativa a la implementación CPython del lenguaje Python es PyPy [5]. PyPy es un
compilador justo a tiempo (JIT), a diferencia del intérprete de CPython, capaz de hacer que ciertas partes del código Python se
ejecuten más rápido. Según los propios puntos de referencia de PyPy, ejecuta código cuatro veces más rápido que CPython en
promedio [6]. Desafortunadamente, PyPy no es compatible con las versiones recientes de Python (compatible con la 3.6 al
momento de escribir este artículo, en comparación con la última versión estable 3.8). Dado que PyPy sólo es compatible con
un grupo seleccionado de bibliotecas de Python (enumeradas enhttp://paquetes.pypy.org), generalmente se considera poco
atractivo para la ciencia de datos, el aprendizaje automático y el aprendizaje profundo.
La cantidad de datos que se recopilan y generan hoy en día es enorme y las cifras continúan creciendo a un
ritmo récord, lo que genera la necesidad de herramientas que sean tan eficaces como fáciles de usar. El enfoque más
común para aprovechar las fortalezas de Python, como la facilidad de uso y al mismo tiempo garantizar la eficiencia
computacional, es desarrollar bibliotecas de Python eficientes que implementen código de nivel inferior escrito en
lenguajes de tipado estático como Fortran, C/C++ y CUDA. En los últimos años, se están dedicando esfuerzos
sustanciales al desarrollo de bibliotecas eficaces pero fáciles de usar para la informática científica y el aprendizaje
automático.
La comunidad Python ha crecido significativamente durante la última década y, según un informe de GitHub [7], la
principal fuerza impulsora "detrás del crecimiento de Python es una comunidad de aficionados y profesionales de la ciencia de
datos en rápida expansión". Esto se debe en parte a la facilidad de uso que han creado lenguajes como Python y su
ecosistema de soporte. También se debe a la viabilidad del aprendizaje profundo, así como al crecimiento de la
infraestructura en la nube y de las soluciones de procesamiento de datos escalables capaces de manejar volúmenes masivos
de datos, que hacen posibles flujos de trabajo que antes eran intratables en un período de tiempo razonable. Estas
capacidades informáticas simples, escalables y aceleradas han permitido una insurgencia de recursos digitales útiles que
están ayudando a moldear aún más la ciencia de datos en su propio campo distintivo, atrayendo a personas de muchos
orígenes y disciplinas diferentes. Con su primer lanzamiento en 2010 y su compra por parte de Google en 2017, Kaggle se ha
convertido en una de las comunidades más diversas, reuniendo a aficionados novatos con algunos de los mejores científicos e
investigadores de datos en más de 194 países. Kaggle permite a las empresas organizar competiciones sobre problemas
desafiantes de aprendizaje automático que se enfrentan en la industria, donde los miembros pueden formar equipos y
competir por premios. Los concursos a menudo dan como resultado conjuntos de datos públicos que pueden ayudar a
realizar más investigaciones y aprendizajes. Además, Kaggle proporciona materiales educativos y un entorno social
colaborativo donde los miembros pueden compartir conocimientos y códigos. Es de especial interés para la comunidad de
ciencia de datos estar al tanto de las herramientas que utilizan los equipos ganadores en las competiciones de Kaggle, ya que
esto proporciona evidencia empírica de su utilidad.
El propósito de este artículo es enriquecer al lector con una breve introducción a los temas y
tendencias más relevantes que prevalecen en el panorama actual del aprendizaje automático en Python.
Información2020,11, 193 3 de 44

Nuestra contribución es un estudio del campo, que resume algunos de los desafíos, taxonomías y enfoques
importantes. A lo largo de este artículo, nuestro objetivo es encontrar un equilibrio justo entre la investigación
académica y los temas de la industria, al mismo tiempo que destacamos las herramientas y bibliotecas de software
más relevantes. Sin embargo, esto no pretende ser una instrucción integral ni una lista exhaustiva de los enfoques,
investigaciones o bibliotecas disponibles. Solo se supone un conocimiento rudimentario de Python, y también será
beneficiosa cierta familiaridad con la informática, la estadística y el aprendizaje automático. En última instancia,
esperamos que este artículo proporcione un punto de partida para futuras investigaciones y ayude a impulsar la
comunidad de aprendizaje automático de Python.
El documento está organizado para proporcionar una visión general de los principales temas que cubren la
amplitud del campo. Aunque cada tema se puede leer de forma aislada, se anima al lector interesado a seguirlos en
orden, ya que puede proporcionar el beneficio adicional de conectar la evolución de los desafíos técnicos con sus
soluciones resultantes, junto con los contextos históricos y proyectados de las tendencias implícitas en la narrativa.

1.1. Computación científica y aprendizaje automático en Python

Las aplicaciones de aprendizaje automático y computación científica comúnmente utilizan operaciones de


álgebra lineal en matrices multidimensionales, que son estructuras de datos computacionales para representar
vectores, matrices y tensores de orden superior. Dado que estas operaciones a menudo se pueden paralelizar en
muchos núcleos de procesamiento, bibliotecas como NumPy [8] y SciPy [9] utilizan implementaciones C/C++, Fortran y
BLAS de terceros siempre que sea posible para evitar los subprocesos y otras limitaciones de Python. NumPy es una
biblioteca de matrices multidimensionales con rutinas básicas de álgebra lineal, y la biblioteca SciPy adorna las
matrices NumPy con muchas primitivas importantes, desde optimizadores numéricos y procesamiento de señales
hasta estadísticas y álgebra lineal dispersa. En 2019, se descubrió que SciPy se utilizaba en casi la mitad de todos los
proyectos de aprendizaje automático en GitHub [9].
Mientras que tanto NumPy como Pandas [10] (Cifra1) proporcionar abstracciones sobre una colección de puntos de datos
Con operaciones que funcionan en el conjunto de datos en su conjunto, Pandas extiende NumPy al proporcionar un objeto
similar a un marco de datos que admite tipos de columnas heterogéneos y metadatos de filas y columnas. En los últimos
años, la biblioteca Pandas se ha convertido en el formato de facto para representar datos tabulares en Python paraextracto,
transformar , carga"(ETL) contextos y análisis de datos. Doce después, se Años después su primer lanzamiento en 2008, y 25 en la
versiones lanzó la primera versión 1.0 de Pandas y la mayoría de los en 2020. Yo comunidad de código abierto, la facilidad
donde m proyectos siguenestándares de versiones semánticas[1 1], un 1,0 rel transmite que una biblioteca tiene
alcanzó un importante nivel de madurez, junto con una API estable.

Preparación de datos Entrenamiento modelo Visúalización

Dask

pandas Scikit-Aprende Red-X Encadenador PyTorch MxNet pyViz


Analítica Aprendizaje automático Análisis de gráficos Aprendizaje profundo Visualización

Memoria GPU

Memoria de la CPU

Figura 1.El ecosistema Python estándar para aprendizaje automático, ciencia de datos y computación científica.

Aunque la primera versión de NumPy se lanzó hace más de 25 años (bajo su nombre anterior, "Numeric"), al
igual que Pandas, todavía se desarrolla y mantiene activamente. En 2017, el equipo de desarrollo de NumPy recibió
una subvención de 645 000 dólares de la Fundación Moore para ayudar con el desarrollo y mantenimiento de la
biblioteca [12]. Al momento de escribir este artículo, Pandas, NumPy y SciPy siguen siendo las opciones más fáciles de
usar y recomendadas para muchos proyectos de informática y ciencia de datos.
Información2020,11, 193 4 de 44

Desde lo antes mencionadoPila de ciencia ficciónLos proyectos SciPy, NumPy y Pandas han sido parte del
ecosistema informático científico de Python durante más de una década; esta revisión no cubrirá estas
bibliotecas en detalle. Sin embargo, el resto del artículo hará referencia a esas bibliotecas principales para
ofrecer puntos de comparación con desarrollos recientes en informática científica, y se recomienda una
familiaridad básica con SciPy Stack para aprovechar al máximo esta revisión. El lector interesado puede
encontrar más información y recursos sobre SciPy Stack en el sitio web oficial de SciPy (https://www.scipy.org/
getting-started.html).

1.2. Optimización del rendimiento de Python para computación numérica y procesamiento de datos

Aparte de sus limitaciones de subprocesos, el intérprete CPython no aprovecha al máximo el hardware del
procesador moderno, ya que necesita ser compatible con una gran cantidad de plataformas informáticas [13].
Conjuntos de instrucciones optimizados especiales para la CPU, como los de IntelExtensiones SIMD de transmisión
(SSE) e IBMAltiVec, se utilizan debajo de muchas especificaciones de biblioteca de bajo nivel, como laSubrutinas de
álgebra lineal binaria(BLAS) [14] yPaquete de álgebra lineal(LAPACK) [15] bibliotecas, para operaciones matriciales y
vectoriales eficientes.
Se dedican importantes esfuerzos comunitarios al desarrollo deAbiertoBLAS, una implementación de código abierto de
la API BLAS que admite una amplia variedad de tipos de procesadores diferentes. Si bien todas las bibliotecas científicas
importantes se pueden compilar con la integración OpenBLAS [dieciséis], los fabricantes de los diferentes conjuntos de
instrucciones de la CPU también suelen proporcionar sus propias implementaciones optimizadas para hardware de las
subrutinas BLAS y LAPACK. Por ejemplo, IntelBiblioteca del núcleo matemático(Intel MKL) [17] y de IBMESSL de energía[18]
proporcionan eficiencia conectable para aplicaciones informáticas científicas. Este diseño de API estandarizado ofrece
portabilidad, lo que significa que el mismo código puede ejecutarse en diferentes arquitecturas con diferentes conjuntos de
instrucciones, mediante la compilación en diferentes implementaciones.
Cuando las bibliotecas numéricas como NumPy y SciPy reciben un aumento sustancial de rendimiento, por ejemplo, a
través de subrutinas optimizadas por hardware, las ganancias de rendimiento se extienden automáticamente a bibliotecas de
aprendizaje automático de nivel superior, como Scikit-learn, que utilizan principalmente NumPy y SciPy.19,20]. Intel también
proporciona una distribución de Python orientada a la informática científica de alto rendimiento, incluida la aceleración MKL [
21] mencionado anteriormente. El atractivo detrás de esta distribución de Python es que es de uso gratuito, funciona desde el
primer momento, acelera el propio Python en lugar de un conjunto de bibliotecas seleccionadas y funciona como un
reemplazo directo de la distribución estándar de CPython sin código. cambios requeridos. Sin embargo, una desventaja
importante es que está restringido a los procesadores Intel.
El desarrollo de algoritmos de aprendizaje automático que operan con un conjunto de valores (en lugar de un
solo valor) a la vez también se conoce comúnmente comovectorización. Los conjuntos de instrucciones de CPU antes
mencionados permiten la vectorización al permitir que los procesadores programen una sola instrucción sobre
múltiples puntos de datos en paralelo, en lugar de tener que programar instrucciones diferentes para cada punto de
datos. Una operación vectorial que aplica una sola instrucción a múltiples puntos de datos también se conoce como
una sola instrucción múltiples datos(SIMD), que existe en el campo de la computación paralela y de alto rendimiento
desde los años 1960. El paradigma SIMD se generaliza aún más en bibliotecas para escalar cargas de trabajo de
procesamiento de datos, como MapReduce [22], Chispa - chispear [23] y Dask [24], donde se aplica la misma tarea de
procesamiento de datos a colecciones de puntos de datos para que puedan procesarse en paralelo. Una vez
compuesta, la tarea de procesamiento de datos se puede ejecutar a nivel de subproceso o proceso, lo que permite
que el paralelismo abarque múltiples máquinas físicas.
El formato de marco de datos de Pandas utiliza columnas para separar los diferentes campos en un conjunto de datos y permite
que cada columna tenga un tipo de datos diferente (en NumPy).ndarraycontenedor, todos los artículos son del mismo tipo). En lugar de
almacenar los campos de cada registro juntos de forma contigua, como en un archivo de valores separados por comas (CSV), almacena
columnas de forma contigua. La disposición de los datos de forma contigua por columna habilita SIMD al permitir que el procesador
agrupe o fusione accesos a la memoria para el procesamiento a nivel de fila, haciendo un uso eficiente del almacenamiento en caché y
al mismo tiempo reduciendo el número de accesos a la memoria principal.
La plataforma de desarrollo en varios idiomas Apache Arrow para datos en memoria [25] estandariza el formato
de columnas para que los datos se puedan compartir entre diferentes bibliotecas sin los costos asociados
Información2020,11, 193 5 de 44

sin tener que copiar y reformatear los datos. Otra biblioteca que aprovecha el formato de columnas es Apache Parquet [26].
Mientras que bibliotecas como Pandas y Apache Arrow están diseñadas teniendo en cuenta el uso en memoria, Parquet está
diseñado principalmente para la serialización y almacenamiento de datos en disco. Tanto Arrow como Parquet son
compatibles entre sí, y los flujos de trabajo modernos y eficientes involucran a Parquet para cargar archivos de datos desde el
disco en las estructuras de datos en columnas de Arrow para computación en memoria.
De manera similar, NumPy admite diseños basados en filas y columnas, y sunorte-matriz dimensional (cuadro
numérico)El formato también separa los datos que se encuentran debajo de las operaciones que actúan sobre ellos. Esto
permite que la mayoría de las operaciones básicas en NumPy utilicen el procesamiento SIMD.
Dask y Apache Spark [27] proporcionan abstracciones tanto para marcos de datos como para matrices
multidimensionales que pueden escalarse a múltiples nodos. Al igual que Pandas y NumPy, estas abstracciones también
separan la representación de datos de la ejecución de operaciones de procesamiento. Esta separación se logra tratando un
conjunto de datos como un gráfico acíclico dirigido (DAG) de tareas de transformación de datos que se pueden programar en
el hardware disponible. Dask resulta atractivo para muchos científicos de datos porque su API está fuertemente inspirada en
Pandas y, por lo tanto, es fácil de incorporar a los flujos de trabajo existentes. Sin embargo, los científicos de datos que
prefieren realizar cambios mínimos al código existente también pueden considerar Modin (https: //github.com/modin-project/
modin), que proporciona un reemplazo directo para los Pandas Marco de datosobjeto, es decir,modin.pandas.DataFrame.
ModínMarco de datospresenta la misma API que el equivalente de Pandas, pero puede aprovechar marcos externos para el
procesamiento de datos distribuidos en segundo plano, como Ray [28] o Dask. Las pruebas comparativas de los
desarrolladores muestran que los datos se pueden procesar hasta cuatro veces más rápido en una computadora portátil con
cuatro núcleos físicos [29] en comparación con los pandas.
El resto de este artículo está organizado de la siguiente manera. La siguiente sección presentará Python como una
herramienta para la informática científica y el aprendizaje automático antes de analizar las optimizaciones que lo hacen simple
y eficaz. Sección2Cubre cómo se utiliza Python para el aprendizaje automático convencional. Sección3presenta los desarrollos
recientes para automatizar la creación y experimentación de canalizaciones de aprendizaje automático a través del
aprendizaje automático automatizado (AutoML), donde AutoML es un área de investigación que se centra en la optimización
automática de hiperparámetros y canalizaciones de ML. En la sección4, analizamos el desarrollo de la computación científica y
el aprendizaje automático acelerados por GPU para mejorar el rendimiento computacional, así como los nuevos desafíos que
crea. Centrándonos en el subcampo del aprendizaje automático que se especializa en el entrenamiento acelerado por GPU de
redes neuronales profundas (DNN), analizamos el aprendizaje profundo en la Sección5. En los últimos años, las tecnologías de
aprendizaje automático y aprendizaje profundo han avanzado en muchos campos, pero una de las desventajas de estas
tecnologías que se cita con frecuencia frente a los enfoques más tradicionales es la falta de interpretabilidad y explicabilidad.
En la sección6, destacamos algunos de los métodos y herramientas novedosos para hacer que los modelos de aprendizaje
automático y sus predicciones sean más explicables. Por último, la sección7proporciona una breve descripción general de los
desarrollos recientes en el campo del aprendizaje adversarial, cuyo objetivo es hacer que el aprendizaje automático y el
aprendizaje profundo sean más sólidos, donde la solidez es una propiedad importante en muchas aplicaciones del mundo real
relacionadas con la seguridad.

2. Aprendizaje automático clásico

El aprendizaje profundo representa una subcategoría del aprendizaje automático que se centra en la parametrización de DNN.
Para mayor claridad, nos referiremos al aprendizaje automático no basado en aprendizaje profundo comoaprendizaje automático
clásico(ML clásico), mientras queaprendizaje automáticoes un término resumido que incluye tanto el aprendizaje profundo como el
aprendizaje automático clásico.
Si bien el aprendizaje profundo ha experimentado un tremendo aumento en popularidad en los últimos años, el aprendizaje
automático clásico (incluidos árboles de decisión, bosques aleatorios, máquinas de vectores de soporte y muchos otros) sigue siendo
muy frecuente en diferentes campos de investigación e industrias. En la mayoría de las aplicaciones, los profesionales trabajan con
conjuntos de datos que no son muy adecuados para los métodos y arquitecturas de aprendizaje profundo contemporáneos. El
aprendizaje profundo es particularmente atractivo para trabajar con conjuntos de datos grandes y no estructurados, como texto e
imágenes. Por el contrario, la mayoría de las técnicas de ML clásicas se desarrollaron condatos estructuradosen mente;
Información2020,11, 193 6 de 44

es decir, datos en forma tabular, donde los ejemplos de entrenamiento se almacenan como filas y las observaciones (características)
que los acompañan se almacenan como columnas.
En esta sección, revisamos los desarrollos recientes en torno a Scikit-learn, que sigue siendo una de las bibliotecas de
código abierto más populares para el aprendizaje automático clásico. Después de una breve introducción a la biblioteca
principal de Scikit-learn, analizamos varias bibliotecas de extensión desarrolladas por la comunidad de código abierto con un
enfoque en bibliotecas para abordar el desequilibrio de clases, el aprendizaje en conjunto y el aprendizaje automático
distribuido escalable.

2.1. Scikit-learn, el estándar industrial para el aprendizaje automático clásico

Aprendizaje de Scikit [19] (Cifra1) se ha convertido en la biblioteca Python estándar de la industria utilizada para
la ingeniería de características y el modelado de ML clásico en conjuntos de datos pequeños y medianos, en gran
parte porque tiene una API limpia, consistente e intuitiva. En este contexto, como regla general, consideramos
conjuntos de datos con menos de 1000 ejemplos de entrenamiento como pequeños y conjuntos de datos con entre
1000 y 100 000 ejemplos como de tamaño mediano. Además, con la ayuda de la comunidad de código abierto, el
equipo de desarrolladores de Scikit-learn mantiene un fuerte enfoque en la calidad del código y la documentación
integral. Pioneros en lo simple “ajustar()/predecir()”Modelo API, su diseño ha servido como inspiración y modelo para
muchas bibliotecas porque presenta una cara familiar y reduce los cambios de código cuando los usuarios exploran
diferentes opciones de modelado.
Además de sus numerosas clases para el procesamiento y modelado de datos, denominadasestimadores, Scikit-
learn también incluye una API de primera clase para unificar la construcción y ejecución de canales de aprendizaje
automático: la API de canalización (Figura2). Permite que un conjunto de estimadores incluya procesamiento de datos,
ingeniería de características y estimadores de modelado, que se combinarán para su ejecución de un extremo a otro.
Además, Scikit-learn proporciona una API para evaluar modelos entrenados utilizando técnicas comunes como la
validación cruzada.
Para encontrar el equilibrio adecuado entre proporcionar funciones útiles y la capacidad de mantener código de
alta calidad, el equipo de desarrollo de Scikit-learn solo considera algoritmos bien establecidos para su inclusión en la
biblioteca. Sin embargo, la explosión de la investigación en aprendizaje automático e inteligencia artificial durante la
última década ha creado una gran cantidad de algoritmos que es mejor dejarlos como extensiones, en lugar de
integrarlos en el núcleo. Los algoritmos más nuevos y, a menudo, menos conocidos se aportan como bibliotecas
compatibles con Scikit-learn o los llamados paquetes "Scikit-contrib", donde estos últimos son mantenidos por la
comunidad Scikit-learn bajo una organización compartida de GitHub, "Scikit-learn-contrib". (https://github.com/scikit-
learn-contrib). Cuando estos paquetes separados siguen la API de Scikit-learn, pueden beneficiarse del ecosistema de
Scikit-learn, brindando a los usuarios la capacidad de heredar algunas de las características avanzadas de Scikit-learn,
como la canalización y la validación cruzada, de forma gratuita.
En las siguientes secciones, destacamos algunas de las bibliotecas compatibles con Scikit-learn
más notables.
Información2020,11, 193 7 de 44

a 7`QKbFH2 `MXT`2T`Q+2bbBM;BKTQ`iai M/ `/a+ H2` 7`QK


bFH2 `MX/2+QKTQbBiBQMBKTQ`iS* 7`QKbFH2 `MXbpK
BKTQ`iao*
7`QKbFH2 `MXTBT2HBM2BKTQ`iKF2nTBT2HBM2
7`QKbFH2 `MBKTQ`i/yo b2ib
7`QKbFH2 `MXKQ/2Hnb2H2+iBQMBKTQ`ii` BMni2binbTHBi

Si`Sib4/ yo b2ibXHQ /nB`BbUV s-v4Si`SibX/


i - B`BbXyo `;2i sni` BM- sni2bi- vni` BM-
vni2bi4ps
i` BMni2binbTHBiUs-v-i2binbBx24yXj-
`M/QKnbi i249k-bi`iB7v4vV

TBT24K F2nTBT2HBM2Uai M/ `/a+ H2`UV-


S* UMn+QKTQM2Mib4k
Vao*UF2`M2H4ĤBM2 `V̂V

TBT2X7BiUsni` BM- vni` BMV vnT`2/


4TBT2XT`2/B+iUsni2biV
T`BMiUd.ĥ2bi ++m` +v,WXj7̂W.TBT2Xb+Q`2Usni2bi-vni2biVV

b encajar y transformar
Escalada
transformar

Dimensionalidad

tubería.fit( reducción
tubería.predecir (
encajar y transformar
tren_x, X_prueba)
y_tren) Algoritmo de aprendizaje
transformar

adaptar

Modelo predictivo
Etiquetas de clase
predecir

Figura 2.Ilustración de un proceso de aprendizaje de Scikit. (a) ejemplo de código que muestra cómo ajustar las características de
una máquina de vectores de soporte lineal del conjunto de datos de Iris, que se han normalizado mediante la normalización de
puntuación z y luego se han comprimido en dos nuevos ejes de características mediante el análisis de componentes principales,
utilizando un objeto de canalización; (b) ilustra los pasos individuales dentro de la tubería al ejecutar suadaptarmétodo sobre los
datos de entrenamiento y elpredecirmétodo en los datos de prueba.

2.2. Abordar el desequilibrio de clases

Las distribuciones sesgadas de etiquetas de clases presentan uno de los desafíos más importantes que surgen cuando se trabaja
con conjuntos de datos del mundo real [30]. Tales sesgos en la distribución de etiquetas o desequilibrios de clases pueden generar
fuertes sesgos predictivos, ya que los modelos pueden optimizar el objetivo de entrenamiento al aprender a predecir la etiqueta
mayoritaria la mayor parte del tiempo. Métodos como el de Scikit-learntren_prueba_split()realice un muestreo uniforme de forma
predeterminada, lo que puede dar como resultado conjuntos de entrenamiento y pruebas cuyas distribuciones de etiquetas de clase
no representan la distribución de etiquetas en el conjunto de datos original. Para reducir la posibilidad de sobreajuste en presencia de
desequilibrio de clases, Scikit-learn proporciona una opción para realizar un muestreo estratificado, de modo que las etiquetas de clase
en cada muestra resultante coincidan con la distribución encontrada en el conjunto de datos de entrada (es decir,train_test_split(...,
estratificar=y),dóndeyes la matriz de etiquetas de clase). Si bien este método a menudo muestra menos sesgo de muestreo que el
comportamiento de muestreo aleatorio uniforme predeterminado, los conjuntos de datos con distribuciones muy sesgadas de
etiquetas de clase aún pueden dar como resultado modelos entrenados que también están fuertemente sesgados hacia etiquetas de
clase más representadas en la población. Para evitar este problema, las técnicas de remuestreo a menudo se implementan
manualmente para equilibrar la distribución de las etiquetas de clase. La modificación de los datos también crea la necesidad de
validar qué estrategia de remuestreo tiene el impacto más positivo en el modelo resultante y, al mismo tiempo, asegurarse de no
introducir sesgos adicionales debido al remuestreo.
Información2020,11, 193 8 de 44

Aprendizaje desequilibrado [30] es una biblioteca de Scikit-contrib escrita para abordar el problema anterior con
cuatro técnicas diferentes para equilibrar las clases en un conjunto de datos sesgado. Las dos primeras técnicas
vuelven a muestrear los datos, ya sea reduciendo el número de instancias de las muestras de datos que contribuyen a
la clase sobrerrepresentada (submuestreo) o generando nuevas muestras de datos de las clases subrepresentadas
(sobremuestreo). Dado que el sobremuestreo tiende a entrenar modelos que se ajustan excesivamente a los datos, la
tercera técnica combina el sobremuestreo con una técnica de “limpieza” de submuestreo que elimina los valores
atípicos extremos en la clase mayoritaria. La técnica final que Imbalanced-learn proporciona para equilibrar clases
combina el embolsado con AdaBoost [31] mediante el cual se construye un conjunto de modelos a partir de diferentes
conjuntos submuestreados de la clase mayoritaria, y el conjunto completo de datos de la clase minoritaria se utiliza
para capacitar a cada alumno. Esta técnica permite utilizar más datos de la clase sobrerrepresentada como alternativa
al remuestreo solo. Si bien los investigadores utilizan AdaBoost en este enfoque, los posibles aumentos de este
método pueden implicar otras técnicas de ensamblaje. En la siguiente sección analizamos las implementaciones de
métodos de conjunto desarrollados recientemente.

2.3. Aprendizaje conjunto: máquinas de aumento de gradiente y combinación de modelos

Las combinaciones de múltiples algoritmos o modelos de aprendizaje automático, que se conocen como técnicas de
conjunto, se utilizan ampliamente para proporcionar estabilidad, aumentar el rendimiento del modelo y controlar el equilibrio
entre sesgo y varianza.32]. Técnicas de ensamblaje bien conocidas, como el metaalgoritmo de agregación bootstrap
altamente paralelizable (también conocido como embolsado) [33], se han utilizado tradicionalmente en algoritmos como
bosques aleatorios [34] para promediar las predicciones de árboles de decisión individuales, al tiempo que se reduce con
éxito el sobreajuste. A diferencia del embolsado, el metaalgoritmo de impulso es de naturaleza iterativa y ajusta
gradualmente a los alumnos débiles, como los árboles de decisión previamente podados, donde los modelos mejoran
sucesivamente las predicciones deficientes (los nodos de las hojas) de iteraciones anteriores. El aumento de gradiente mejora
los algoritmos de aumento adaptativo anteriores, como AdaBoost [35], añadiendo elementos de descenso de gradiente para
construir sucesivamente nuevos modelos que optimicen una función de costes diferenciable a partir de los errores de
iteraciones anteriores [36].
Más recientemente, las máquinas de aumento de gradiente (GBM) se han convertido en una navaja suiza en el
cinturón de herramientas de muchos Kaggler [37,38]. Uno de los principales desafíos de rendimiento del aumento de
gradiente es que es un algoritmo iterativo en lugar de paralelo, como el ensacado. Otro cálculo que requiere mucho
tiempo en los algoritmos de aumento de gradiente es evaluar diferentes umbrales de características para dividir los
nodos al construir los árboles de decisión.39]. El algoritmo de aumento de gradiente original de Scikit-learn es
particularmente ineficiente porque enumera todos los puntos de división posibles para cada característica. Este
método se conoce como elexacto codiciosoalgoritmo y es costoso, desperdicia memoria y no se adapta bien a
conjuntos de datos más grandes. Debido a los importantes inconvenientes de rendimiento en la implementación de
Scikit-learn, han surgido bibliotecas como XGBoost y LightGBM, que ofrecen alternativas más eficientes. Actualmente,
estas son las dos bibliotecas más utilizadas para máquinas de aumento de gradiente y ambas son ampliamente
compatibles con Scikit-learn.
XGBoost se introdujo en la comunidad de código abierto en 2014 [38] y ofrece una aproximación eficiente al
algoritmo codicioso de búsqueda dividida exacto, que agrupa características en histogramas utilizando solo un
subconjunto de los ejemplos de entrenamiento disponibles en cada nodo. LightGBM se presentó a la comunidad de
código abierto en 2017 y construye árboles primero en profundidad, en lugar de utilizar un enfoque amplio como se
hace en muchas otras bibliotecas GBM [39]. LightGBM también implementa una estrategia de división mejorada para
hacerlo competitivo con XGBoost, que era la biblioteca GBM más utilizada en ese momento. La idea principal detrás
de la estrategia de división de LightGBM es solo retener instancias con gradientes relativamente grandes, ya que
contribuyen más a la ganancia de información mientras submuestrean las instancias con gradientes más bajos. Este
enfoque de muestreo más eficiente tiene el potencial de acelerar significativamente el proceso de capacitación.

Tanto XGBoost como LightGBM admiten funciones categóricas. Si bien LightGBM puede analizarlos directamente,
XGBoost requiere que las categorías estén codificadas en caliente porque sus columnas deben ser numéricas. Ambas
bibliotecas incluyen algoritmos para explotar eficientemente características escasas, como las que se han
Información2020,11, 193 9 de 44

Codificación one-hot, lo que permite que el espacio de funciones subyacente se utilice de manera más eficiente. Scikit-learn
(v0.21.0) también agregó recientemente un nuevo algoritmo de aumento de gradiente (HistGradientBoosing)inspirado en
LightGBM que tiene un rendimiento similar a LightGBM con el único inconveniente de que no puede manejar tipos de datos
categóricos directamente y requiere codificación one-hot similar a XGBoost.
Se ha demostrado que la combinación de múltiples modelos en conjuntos mejora la precisión de la generalización y,
como se vio anteriormente, mejora el desequilibrio de clases al combinar métodos de remuestreo.40]. La combinación de
modelos es un subcampo del aprendizaje conjunto, que permite que diferentes modelos contribuyan a un objetivo
compartido independientemente de los algoritmos que los componen. En los algoritmos de combinación de modelos, por
ejemplo, un modelo de regresión logística podría combinarse con un clasificador de k vecinos más cercanos y un bosque
aleatorio.
Los algoritmos de apilamiento, uno de los métodos más comunes para combinar modelos, entrenan un modelo
agregador sobre las predicciones de un conjunto de modelos individuales para que aprenda cómo combinar las predicciones
individuales en una predicción final.41]. Las variantes de apilamiento comunes también incluyen metacaracterísticas [42] o
implementar múltiples capas de apilamiento [43], que también se conoce como apilamiento de varios niveles. Los
clasificadores y regresores de apilamiento compatibles con Scikit-learn están disponibles en Mlxtend desde 2016 [44] y
también se agregaron recientemente a Scikit-learn en v0.22. Una alternativa al apilamiento es el algoritmo de selección
dinámica, que utiliza sólo el clasificador o conjunto más competente para predecir la clase de una muestra, en lugar de
combinar las predicciones.45].
Una biblioteca relativamente nueva que se especializa en aprendizaje en conjunto es Combo, que proporciona
varios algoritmos comunes bajo una API unificada compatible con Scikit-learn para que mantenga la compatibilidad
con muchos estimadores del ecosistema Scikit-learn [37]. La biblioteca Combo proporciona algoritmos capaces de
combinar modelos para tareas de clasificación, agrupación y detección de anomalías, y ha tenido una amplia
adopción en la comunidad de modelado predictivo de Kaggle. Una ventaja de utilizar una única biblioteca como
Combo, que ofrece un enfoque unificado para diferentes métodos de conjunto, sin dejar de ser compatible con Scikit-
learn, es que permite una experimentación conveniente y comparaciones de modelos.

2.4. Aprendizaje automático distribuido escalable

Si bien Scikit-learn está dirigido a conjuntos de datos pequeños y medianos, los problemas modernos a menudo
requieren bibliotecas que puedan escalar a tamaños de datos más grandes. Usando la biblioteca de trabajos (https://
github.com/joblib/joblib) API, un puñado de algoritmos en Scikit-learn se pueden paralelizar a través del multiprocesamiento
de Python. Desafortunadamente, la escala potencial de estos algoritmos está limitada por la cantidad de memoria y núcleos
de procesamiento físico en una sola máquina.
Dask-ML proporciona versiones distribuidas de un subconjunto de algoritmos de ML clásicos de Scikit-learn con una API
compatible con Scikit-learn. Estos incluyen algoritmos de aprendizaje supervisados como modelos lineales, algoritmos de
aprendizaje no supervisados como k-means y algoritmos de reducción de dimensionalidad como análisis de componentes
principales y descomposición de vectores singulares truncados. Dask-ML utiliza multiprocesamiento con el beneficio adicional
de que los cálculos para los algoritmos se pueden distribuir en múltiples nodos en un clúster de cómputo.

Muchos algoritmos de ML clásicos se preocupan por ajustar un conjunto de parámetros que generalmente se supone
que es menor que la cantidad de muestras de datos en el conjunto de datos de entrenamiento. En entornos distribuidos, esta
es una consideración importante ya que el entrenamiento de modelos a menudo requiere comunicación entre los distintos
trabajadores, ya que comparten su estado local para converger en un conjunto global de parámetros aprendidos. Una vez
entrenada, la inferencia de modelos suele poder ejecutarse de una manera vergonzosamente paralela.

El ajuste de hiperparámetros es un caso de uso muy importante en el aprendizaje automático, ya que requiere entrenar
y probar un modelo en muchas configuraciones diferentes para encontrar el modelo con el mejor rendimiento predictivo. La
capacidad de entrenar múltiples modelos más pequeños en paralelo, especialmente en un entorno distribuido, se vuelve
importante cuando se combinan múltiples modelos, como se menciona en la Sección2.3.
Dask-ML también proporciona una biblioteca de optimización de hiperparámetros (HPO) que admite cualquier API
compatible con Scikit-learn. HPO de Dask-ML distribuye el entrenamiento del modelo para diferentes parámetros
Información2020,11, 193 10 de 44

configuraciones en un grupo de trabajadores de Dask para acelerar el proceso de selección del modelo. El algoritmo
exacto que utiliza, junto con otros métodos para HPO, se analizan en la Sección3sobre el aprendizaje automático de
máquinas.
PySpark combina el poder de MLLib de Apache Spark con la simplicidad de Python; aunque algunas partes de la
API tienen un ligero parecido con las convenciones de nomenclatura de funciones de Scikit-learn, la API no es
compatible con Scikit-learn [46]. No obstante, la API de Spark MLLib sigue siendo muy intuitiva debido a este parecido,
lo que permite a los usuarios entrenar fácilmente modelos avanzados de aprendizaje automático, como
recomendadores y clasificadores de texto, en un entorno distribuido. El motor Spark, que está escrito en Scala, utiliza
una implementación BLAS de C++ en cada trabajador para acelerar las operaciones de álgebra lineal.
A diferencia de sistemas como Dask y Spark, es elinterfaz de paso de mensajes(IPM). MPI proporciona una API
estándar probada en el tiempo que se puede utilizar para escribir algoritmos distribuidos, donde las ubicaciones de
memoria se pueden pasar entre los trabajadores (conocidos como rangos) en tiempo real como si todos fueran
procesos locales que compartieran el mismo espacio de memoria [47]. LightGBM utiliza MPI para la capacitación
distribuida, mientras que XGBoost puede capacitarse en entornos Dask y Spark. El h2O biblioteca de aprendizaje
automático puede utilizar MPI para ejecutar algoritmos de aprendizaje automático en entornos distribuidos. A través
de un adaptador llamado Sparkling Water (https://github.com/h2oai/sparkling-water), H.2Los algoritmos O también se
pueden utilizar con Spark.
Si bien el aprendizaje profundo domina gran parte de la investigación actual sobre aprendizaje automático, está lejos de
inutilizar los algoritmos de aprendizaje automático clásicos. Aunque existen enfoques de aprendizaje profundo para datos tabulares,
las arquitecturas de red de redes neuronales convolucionales (CNN) y de memoria a corto plazo (LSTM) demuestran consistentemente
un rendimiento de última generación en tareas que van desde la clasificación de imágenes hasta la traducción de idiomas. Sin
embargo, los modelos de ML clásicos tienden a ser más fáciles de analizar e introspeccionar y, a menudo, se utilizan en el análisis de
modelos de aprendizaje profundo. La relación simbiótica entre el aprendizaje automático clásico y el aprendizaje profundo quedará
especialmente clara en la sección6.

3. Aprendizaje automático automático (AutoML)

l Bibliotecas como Pandas, Nu ion mPy, S cikit-learn, PyTorch y tenso rFlow, así como la inmersión rse
recolectar de bibliotecas con tuberías de t-aprender - API compatibles, proporcionadas. para que los usuarios ejecuten
herramientas electrónicas nordeste

aprendiendo ciencia de extremo a extremo manua Herramientas para automatico máquina machi e learning (AutoML) objetivo a
automático consumieron una o más etapas def estos canales de aprendizaje automático nep (F figura3), haciéndolo más fácil para
a los no expertos construir modelos de aprendizaje automático mientras se eliminan tareas repetitivas y se permite a los ingenieros

experimentados en aprendizaje automático construir mejores modelos más rápido.

a
Fcomer hiperpara metro
Preparación de datos Selección de modelo Evaluación del modelo
ing inquisitivo Optimizar ación

b
Característica
Preparación de datos Selección de modelo, optimización de hiperparámetros, evaluación de modelo
Ingeniería

Figura 3.(a) las diferentes etapas del proceso de AutoML para seleccionar y ajustar modelos de ML clásicos; (b) Etapas de
AutoML para generar y ajustar modelos mediante la búsqueda de arquitectura neuronal.

Varias bibliotecas importantes de AutoML se han vuelto bastante populares desde la introducción inicial
de Auto-Weka [48] en 2013. Actualmente, Auto-sklearn [49], TPOT [50], H2O-AutoML [51], NNI de Microsoft (
https://github.com/microsoft/nni), y AutoKeras [52] son los más populares entre los profesionales y se
analizan con más detalle en esta sección.
Información2020,11, 193 11 de 44

Si bien AutoKeras proporciona una API similar a Scikit-learn similar a Auto-sklearn, se centra en AutoML para
DNN entrenados con Keras, así como en la búsqueda de arquitectura neuronal, que se analiza por separado en la
Sección3.3. La biblioteca AutoML de Neural Network Intelligence (NNI) de Microsoft proporciona búsqueda de
arquitectura neuronal además del ML clásico, admite modelos compatibles con Scikit-learn y automatiza la ingeniería
de funciones.
La API de Auto-sklearn es directamente compatible con Scikit-learn, mientras que H2O-AutoML, TPOT y auto-keras proporcionan
API similares a Scikit-learn. Cada una de estas tres herramientas se diferencia en la colección de modelos de aprendizaje automático
proporcionados que pueden explorarse mediante la estrategia de búsqueda de AutoML. Si bien todas estas herramientas
proporcionan métodos supervisados, y algunas herramientas como H20-AutoML apilarán o ensamblarán los modelos con mejor
rendimiento, la comunidad de código abierto actualmente carece de una biblioteca que automatice el ajuste y la selección de modelos
no supervisados.
A medida que la cantidad de investigación y enfoques innovadores de AutoML continúa aumentando, se
extiende a través de diferentes objetivos de aprendizaje y es importante que la comunidad desarrolle un método
estandarizado para compararlos. Esto se logró en 2019 con la contribución de un punto de referencia de código
abierto para comparar algoritmos de AutoML en un conjunto de datos de 39 tareas de clasificación [53].
Las siguientes secciones cubren los tres componentes principales de un proceso de aprendizaje automático que se
puede automatizar: (1) preparación inicial de datos e ingeniería de características, (2) optimización de hiperparámetros y
evaluación de modelos, y (3) búsqueda de arquitectura neuronal.

3.1. Preparación de datos e ingeniería de funciones.

Los procesos de aprendizaje automático a menudo comienzan con un paso de preparación de datos, que generalmente incluye
la limpieza de datos, la asignación de campos individuales a tipos de datos en preparación para la ingeniería de características y la
imputación de valores faltantes.54,55]. Algunas bibliotecas, como H2O-AutoML, intentan automatizar la etapa de mapeo de tipos de
datos del proceso de preparación de datos infiriendo diferentes tipos de datos automáticamente. Otras herramientas, como Auto-
Weka y Auto-sklearn, requieren que el usuario especifique los tipos de datos manualmente.
Una vez que se conocen los tipos de datos, comienza el proceso de ingeniería de características. En la etapa de extracción de
características, los campos a menudo se transforman para crear nuevas características con relaciones señal-ruido mejoradas o para
escalar características para ayudar a los algoritmos de optimización. Los métodos de extracción de características comunes incluyen la
normalización y escalado de características, la codificación de características en un formato único u otro y la generación de
combinaciones de características polinómicas. La extracción de características también se puede utilizar para la reducción de
dimensionalidad, por ejemplo, utilizando algoritmos como análisis de componentes principales, proyecciones aleatorias, análisis
discriminante lineal y árboles de decisión para descorrelacionar y reducir la cantidad de características. Estas técnicas aumentan
potencialmente las capacidades discriminativas de las características al tiempo que reducen los efectos de la maldición de la
dimensionalidad.
Muchas de las herramientas mencionadas anteriormente intentan automatizar al menos una parte del proceso de
ingeniería de funciones. Bibliotecas como TPOT modelan directamente el proceso de aprendizaje automático de un extremo a
otro para que puedan evaluar variaciones de técnicas de ingeniería de características además de seleccionar un modelo
mediante rendimiento predictivo. Sin embargo, si bien la inclusión de la ingeniería de características en el proceso de
modelado es muy convincente, esta elección de diseño también aumenta sustancialmente el espacio de hiperparámetros a
buscar, lo que puede ser computacionalmente prohibitivo.
Para los modelos que consumen muchos datos, como las DNN, el alcance de AutoML a veces puede incluir la
automatización de la síntesis y el aumento de datos [55]. El aumento y la síntesis de datos son especialmente comunes en la
visión por computadora, donde se introducen perturbaciones al voltear, recortar o sobremuestrear varias partes de un
conjunto de datos de imágenes. Recientemente, esto también incluye el uso de redes generativas adversarias para generar
imágenes completamente novedosas a partir de la distribución de datos de entrenamiento [56].

3.2. Optimización de hiperparámetros y evaluación de modelos.

Los algoritmos de optimización de hiperparámetros (HPO) forman el núcleo de AutoML. El enfoque más ingenuo para
encontrar el modelo con mejor rendimiento sería seleccionar y evaluar exhaustivamente todas las configuraciones posibles
para, en última instancia, seleccionar el modelo con mejor rendimiento. El objetivo de HPO es mejorar esto
Información2020,11, 193 12 de 44

enfoque exhaustivo optimizando la búsqueda de configuraciones de hiperparámetros o la evaluación de los modelos


resultantes, donde la evaluación implica una validación cruzada con el modelo entrenado para estimar el rendimiento de
generalización del modelo. [57].Búsqueda de cuadrículaes un método de búsqueda basado en fuerza bruta que explora todas
las configuraciones dentro de un rango de parámetros especificado por el usuario. A menudo, el espacio de búsqueda se
divide uniformemente con puntos finales fijos. Aunque esta cuadrícula se puede cuantificar y buscar de manera gruesa a fina,
se ha demostrado que la búsqueda en la cuadrícula requiere demasiadas pruebas en hiperparámetros sin importancia [58].
Relacionado con la búsqueda en cuadrícula,búsqueda aleatoriaEs un enfoque de fuerza bruta. Sin embargo, en lugar de
evaluar exhaustivamente todas las configuraciones en un rango de parámetros especificado por el usuario, elige
configuraciones al azar, generalmente de un área limitada del espacio de búsqueda total. Los resultados de la evaluación de
los modelos en estas configuraciones seleccionadas se utilizan para mejorar iterativamente futuras selecciones de
configuración y limitar aún más el espacio de búsqueda. Los análisis teóricos y empíricos han demostrado que la búsqueda
aleatoria es más eficiente que la búsqueda en cuadrícula [58]; es decir, se pueden encontrar modelos con un rendimiento
predictivo similar o mejor en una fracción del tiempo de cálculo.
Algunos algoritmos, como elHiperbandaalgoritmo utilizado en Dask-ML [59], Auto-sklearn y H2O-AutoML, recurren a la
búsqueda aleatoria y se centran en optimizar la etapa de evaluación del modelo para lograr buenos resultados. Hyperband
utiliza una estrategia de evaluación conocida como detención temprana, donde se inician en paralelo múltiples rondas de
validación cruzada para varias configuraciones.60]. Los modelos con una precisión de validación cruzada inicial deficiente se
detienen antes de que se complete el análisis de validación cruzada, lo que libera recursos para la exploración de
configuraciones adicionales. En esencia, Hyperband se puede resumir como un método que primero ejecuta configuraciones
de hiperparámetros al azar y luego selecciona configuraciones candidatas para ejecuciones más largas. Hyberband es una
excelente opción para optimizar la utilización de recursos y lograr mejores resultados más rápido en comparación con una
búsqueda aleatoria pura [55]. A diferencia de la búsqueda aleatoria, métodos como la optimización bayesiana (BO) se centran
en seleccionar mejores configuraciones utilizando modelos probabilísticos. Como describen los desarrolladores de
Hyperband, las técnicas de optimización bayesiana superan consistentemente a las estrategias de búsqueda aleatoria; sin
embargo, lo hacen sólo en una pequeña cantidad [60]. Los resultados empíricos indican que ejecutar una búsqueda aleatoria
durante el doble de tiempo produce resultados superiores en comparación con la optimización bayesiana [61].

Varias bibliotecas utilizan un formalismo de BO, conocido comooptimización secuencial basada en modelos(
SMBO), para construir un modelo probabilístico mediante prueba y error. La biblioteca Hyperopt lleva SMBO a Spark
ML, utilizando un algoritmo conocido comoárbol de estimadores de Parzen[62]. ElHiperbanda optimizada bayesiana(
BOHB) [63] combina BO e Hyperband, al tiempo que proporciona su propia capacidad de optimización distribuida
incorporada. Auto-sklearn utiliza un enfoque SMBO llamadoconfiguración del algoritmo del modelo secuencial(SMAC)
[54]. De forma similar a la parada anticipada, SMAC utiliza una técnica llamadacarreras adaptativasEvaluar un modelo
sólo el tiempo necesario para compararlo con otros modelos competitivos (https://github.com/automl/SMAC3).

BO y la búsqueda aleatoria con Hyperband son las técnicas de optimización más utilizadas para la
selección de configuraciones en HPO generalizado. Como alternativa, se ha demostrado que TPOT es un
enfoque muy eficaz, que utiliza computación evolutiva para buscar estocásticamente en el espacio de
parámetros razonables. Debido a su paralelismo inherente, el algoritmo TPOT también se puede ejecutar en
Dask (https://examples.dask.org/machine-learning/tpot.html) para mejorar el tiempo total de ejecución cuando
hay recursos adicionales disponibles en un clúster informático distribuido.
Dado que todas las estrategias de búsqueda mencionadas anteriormente pueden ser bastante extensas y consumir
mucho tiempo, un paso importante en AutoML y HPO implica reducir el espacio de búsqueda, siempre que sea posible,
basándose en cualquier conocimiento previo útil. Todas las bibliotecas a las que se hace referencia aceptan una opción para
que el usuario limite la cantidad de tiempo que dedica a buscar el mejor modelo. Auto-sklearn utiliza metaaprendizaje, lo que
le permite aprender de conjuntos de datos previamente entrenados, mientras que tanto Auto-sklearn como H2O-AutoML
brindan opciones para evitar parámetros que se sabe que causan una optimización lenta.
Información2020,11, 193 13 de 44

3.3. Búsqueda de arquitectura neuronal

Los enfoques HPO discutidos anteriormente consisten en algoritmos HPO de propósito general, que son
completamente indiferentes al modelo de aprendizaje automático subyacente. La suposición subyacente de estos
algoritmos es que existe un modelo que puede validarse objetivamente dado un subconjunto de configuraciones de
hiperparámetros a considerar.
En lugar de seleccionar entre un conjunto de algoritmos de ML clásicos o arquitecturas DNN conocidas, la investigación reciente
sobre aprendizaje profundo de AutoML se centra en métodos para componer motivos o arquitecturas DNN completas a partir de un
conjunto predefinido de bloques de construcción de bajo nivel. Este tipo de generación de modelos se conoce como búsqueda de
arquitectura neuronal (NAS) [64], que es un subcampo debúsqueda de arquitectura[sesenta y cinco,66].
El tema general en el desarrollo de algoritmos de búsqueda de arquitectura es definir un espacio de búsqueda, que se refiere a
todas las posibles estructuras de red o hiperparámetros que se pueden componer. Una estrategia de búsqueda es un HPO sobre el
espacio de búsqueda, que define cómo los algoritmos NAS generan estructuras modelo. Al igual que HPO para los modelos de ML
clásicos, las estrategias de búsqueda de arquitectura neuronal también requieren una estrategia de evaluación del modelo que pueda
producir una puntuación objetiva para un modelo cuando se le proporciona un conjunto de datos para evaluar.
Los espacios de búsqueda neuronal se pueden ubicar en una de cuatro categorías, según la cantidad de estructura de
la red neuronal que se proporciona de antemano.55]:

1. Estructura completa: genera la red completa desde cero eligiendo y encadenando un conjunto de
primitivas, como convoluciones, concatenaciones o agrupaciones. Esto se conoce como búsqueda
de macros.
2. Basado en celdas: busca combinaciones de un número fijo de bloques de construcción hechos a mano, llamados celdas.
Esto se conoce comomicrobúsqueda.
3. Jerárquico: amplía el enfoque basado en celdas al introducir múltiples niveles y encadenar un número
fijo de celdas, utilizando iterativamente las primitivas definidas en las capas inferiores para
construir las capas superiores. Esto combina búsqueda macro y micro.
4. Estructura basada en morfismo: transfiere conocimiento de una red existente con buen rendimiento a una nueva
arquitectura.

Similar al HPO tradicional descrito anteriormente en la Sección3.2, los algoritmos NAS pueden hacer uso de diversas
estrategias de evaluación de modelos y optimización de propósito general para seleccionar las arquitecturas de mejor
rendimiento de un espacio de búsqueda neuronal.
Google ha estado involucrado en la mayoría de los trabajos fundamentales en NAS. En 2016, investigadores del
proyecto Google Brain publicaron un artículo que describe cómo el aprendizaje por refuerzo se puede utilizar como
optimizador para todo el espacio de búsqueda de estructuras, capaz de construir redes neuronales tanto recurrentes
como convolucionales.67]. Un año después, los mismos autores publicaron un artículo que presenta el espacio de
búsqueda NASNet basado en celdas, utilizando la capa convolucional como motivo y el aprendizaje de refuerzo para
buscar las mejores formas en que se puede configurar y apilar.64].
La computación evolutiva se estudió con el espacio de búsqueda NASNet en AmoebaNet-A, donde
investigadores de Google Brain propusieron un enfoque novedoso para la selección de torneos.68]. Los espacios de
búsqueda jerárquicos fueron propuestos por el equipo DeepMind de Google [69]. Este enfoque utilizó computación
evolutiva para navegar en el espacio de búsqueda, mientras que Melody Guan de Stanford, junto con miembros del
equipo de GoogleBrain, utilizó el aprendizaje por refuerzo para navegar en espacios de búsqueda jerárquicos en un
enfoque conocido como ENAS [70]. Dado que todas las redes generadas se utilizan para la misma tarea, ENAS estudió
el efecto de compartir el peso entre los diferentes modelos generados, utilizando el aprendizaje por transferencia
para reducir el tiempo dedicado al entrenamiento.
La búsqueda de arquitectura neuronal progresiva (PNAS) investigó el uso de la estrategia de optimización
bayesiana SMBO para hacer la búsqueda de arquitecturas CNN más eficiente mediante la exploración de células más
simples antes de determinar si se deben buscar células más complejas.71]. De manera similar, NASBOT define una
función de distancia para arquitecturas generadas, que se usa para construir un núcleo para usar procesos
gaussianos para BO [72]. AutoKeras introdujo el espacio de búsqueda basado en morfismos, permitiendo
Información2020,11, 193 14 de 44

Los modelos de alto rendimiento deben modificarse, en lugar de regenerarse. Al igual que NASBOT, AutoKeras define un
kernel para arquitecturas NAS con el fin de utilizar procesos gaussianos para BO [52].
Otro artículo de 2018 del equipo DeepMind de Google propuso DARTS, que permite el uso de métodos de
optimización basados en gradientes, como el descenso de gradientes, para optimizar directamente el espacio
de la arquitectura neuronal [73]. En 2019, Xie et al. propuso SNAS, que mejora DARTS, utilizando muestreo para
lograr una aproximación más suave de los gradientes [74].

4. Ciencia de datos y aprendizaje automático acelerados por GPU

Existe un circuito de retroalimentación que conecta el hardware, el software y los estados de sus mercados. Las arquitecturas de
software se crean para aprovechar el hardware disponible, mientras que el hardware se crea para permitir nuevas capacidades de
software. Cuando el rendimiento es crítico, el software se optimiza para utilizar las opciones de hardware más efectivas al menor
costo. En 2003, cuando el almacenamiento en disco duro se convirtió en un producto básico, sistemas de software como GFS de
Google [75] y MapReduce [76] aprovechó las rápidas lecturas y escrituras secuenciales, utilizando grupos de servidores, cada uno con
múltiples discos duros, para lograr escala. En 2011, cuando el rendimiento del disco se convirtió en un cuello de botella y la memoria
se convirtió en un producto básico, bibliotecas como Apache Spark [23] priorizó el almacenamiento en caché de datos en la memoria
para minimizar el uso de los discos tanto como sea posible.
Desde el momento en que se introdujeron las GPU por primera vez en 1999, los informáticos aprovecharon su potencial
para acelerar cálculos altamente paralelizables. Sin embargo, no fue hasta el lanzamiento de CUDA en 2007 que la
computación GPU de propósito general (GPGPU) se generalizó. Los ejemplos descritos anteriormente fueron el resultado del
impulso para admitir más datos con mayor rapidez, al tiempo que brindaban la capacidad de ampliar y ampliar para que las
inversiones en hardware pudieran crecer con las necesidades individuales de los usuarios. Las siguientes secciones presentan
el uso de la computación GPU en el entorno Python. Después de una breve descripción general de GPGPU, analizamos el uso
de GPU para acelerar los flujos de trabajo de ciencia de datos de un extremo a otro. También analizamos cómo las GPU están
acelerando el procesamiento de matrices en Python y cómo las diversas herramientas disponibles pueden trabajar juntas.
Después de una introducción al aprendizaje automático clásico en GPU, revisamos la respuesta de la GPU al problema de
escala descrito anteriormente.

4.1. Computación GPU de uso general para aprendizaje automático

Incluso cuando se utilizan bibliotecas y optimizaciones eficientes, la cantidad de paralelismo que se puede lograr
con la computación vinculada a la CPU está limitada por la cantidad de núcleos físicos y el ancho de banda de la
memoria. Además, las aplicaciones que dependen en gran medida de la CPU también pueden entrar en conflicto con
el sistema operativo.
La investigación sobre el uso del aprendizaje automático en GPU es anterior al reciente resurgimiento del aprendizaje
profundo. Ian Buck, el creador de CUDA, estaba experimentando con redes neuronales totalmente conectadas de dos capas
en 2005, antes de unirse a NVIDIA en 2006.77]. Poco después, se implementaron redes neuronales convolucionales sobre las
GPU, observándose una espectacular aceleración de extremo a extremo en comparación con implementaciones de CPU
altamente optimizadas.78]. En este momento, los beneficios de rendimiento se lograron antes de que existiera una biblioteca
BLAS dedicada acelerada por GPU. El lanzamiento del primer CUDA Toolkit dio vida a la computación paralela de propósito
general con GPU. Inicialmente, solo se podía acceder a CUDA a través de interfaces C, C++ y Fortran, pero en 2010 la biblioteca
PyCUDA comenzó a hacer que CUDA también fuera accesible a través de Python [79].
Las GPU cambiaron el panorama del aprendizaje automático clásico y el aprendizaje profundo. Desde finales de la década de
1990 hasta finales de la década de 2000, las máquinas de vectores de soporte mantuvieron un gran interés en la investigación.80] y
fueron considerados de última generación. En 2010, las GPU dieron nueva vida al campo del aprendizaje profundo [78], impulsando
una gran cantidad de investigación y desarrollo.
Las GPU permiten el paradigma de programación de subprocesos múltiples de instrucción única (SIMT), un modelo de mayor
rendimiento y más paralelo en comparación con SIMD, con memoria de alta velocidad que abarca varios multiprocesadores (bloques),
cada uno de los cuales contiene muchos núcleos (subprocesos) paralelos. Los núcleos también tienen la capacidad de compartir
memoria con otros núcleos del mismo multiprocesador. Al igual que con los conjuntos de instrucciones SIMD basados en CPU
utilizados por algunas implementaciones BLAS y LAPACK optimizadas por hardware en la CPU
Información2020,11, 193 15 de 44

En todo el mundo, la arquitectura SIMT funciona bien para paralelizar muchas de las operaciones primitivas necesarias para los
algoritmos de aprendizaje automático, como las subrutinas BLAS, lo que hace que la aceleración de GPU sea una opción natural.

4.2. Ciencia de datos de extremo a extremo: RAPIDS

La capacidad de las GPU para acelerar los flujos de trabajo de ciencia de datos abarca un espacio mucho mayor que las
tareas de aprendizaje automático. A menudo, que consisten en transformaciones altamente paralelizables que pueden
aprovechar al máximo el procesamiento SIMT, se ha demostrado que todas las etapas de entrada/salida y ETL del proceso de
ciencia de datos obtienen enormes ganancias en el rendimiento.
RÁPIDOS (https://rapids.ai) se introdujo en 2018 como un esfuerzo de código abierto para respaldar y hacer
crecer el ecosistema de herramientas Python aceleradas por GPU para ciencia de datos, aprendizaje automático y
computación científica. RAPIDS respalda las bibliotecas existentes, llena los vacíos al proporcionar bibliotecas de
código abierto con componentes cruciales que faltan en la comunidad Python y promueve la cohesión en todo el
ecosistema al respaldar la interoperabilidad entre bibliotecas.
Tras el impacto positivo de la fachada API unificadora de Scikit-learn y la colección diversa de API muy poderosas que ha
habilitado, RAPIDS se construye sobre un conjunto central de bibliotecas Python estándar de la industria, intercambiando
implementaciones basadas en CPU por variantes aceleradas por GPU. . Al utilizar el formato de columnas de Apache Arrow, ha
permitido que múltiples bibliotecas aprovechen este poder y compongan flujos de trabajo de un extremo a otro
completamente en la GPU. El resultado es la minimización, y muchas veces la eliminación completa, de las transferencias y
traducciones entre la memoria del host y la memoria de la GPU, como se ilustra en la Figura4.
Las bibliotecas principales de RAPIDS incluyen reemplazos casi directos para las bibliotecas Pandas, Scikit-learn y
Network-X llamadas cuDF, cuML y cuGraph, respectivamente. Otros componentes llenan los vacíos que están más
enfocados y, al mismo tiempo, brindan un reemplazo casi inmediato para una API de Python estándar de la industria,
cuando corresponde. cuIO proporciona almacenamiento y recuperación de muchos formatos de datos populares,
como CSV y Parquet. cuStrings permite representar, buscar y manipular cadenas
en GPU. cuSpatial proporciona algoritmos para construir y consultar estructuras de datos espaciales, mientras que
cuSignal proporciona un reemplazo casi directo para el submódulo de señalización de SciPy.señal.scipy.También están
comenzando a surgir bibliotecas de terceros, que se basan en el núcleo de RAPIDS, ampliándolo con nuevas
y útil capacidades. BlazingSQL [81] carga datos en GP tu memoria, haciéndolo consultable a través de
dialecto de SQL. Grafística (https://https://grafistry.com) ciones permite vértices de exploración y
de conexión y relaciones en datos modelándolos como un graficar con visualización y aristas de conexión.

Preparación de datos Entrenamiento modelo Visual ización

Dask

cuDF cuIO cuml cuGraph Encadenador PyTorch MxNet cuXfilter<>pyViz


Analítica Aprendizaje automático Análisis de gráficos Aprendizaje profundo Visualización

Memoria GPU

Figura 4.RAPIDS es un esfuerzo de código abierto para respaldar y hacer crecer el ecosistema de herramientas Python
aceleradas por GPU para ciencia de datos, aprendizaje automático e informática científica. RAPIDS respalda las bibliotecas
existentes, llena los vacíos al proporcionar bibliotecas de código abierto con componentes cruciales que faltan en la
comunidad Python y promueve la cohesión en todo el ecosistema al respaldar la interoperabilidad entre las bibliotecas.

4.3. NDArray y operaciones vectorizadas

Si bien NumPy es capaz de invocar una implementación BLAS para optimizar las operaciones SIMD, su capacidad
de vectorizar funciones es limitada, lo que proporciona pocos o ningún beneficio de rendimiento. La numba
Información2020,11, 193 16 de 44

La biblioteca proporciona compilación justo a tiempo (JIT) [82], permitiendo que funciones vectorizadas hagan
uso de tecnologías como SSE y AltiVec. Esta separación de describir el cálculo por separado de los datos
también permite a Numba compilar y ejecutar estas funciones en la GPU. Además de JIT, Numba también
define undispositivoNDArray,proporcionando implementaciones aceleradas por GPU de muchas funciones
comunes en NDArray de NumPy.
CuPy define un NDArray acelerado por GPU con un alcance ligeramente diferente al de Numba [83]. CuPy está diseñado
específicamente para la GPU, sigue la misma API de NumPy e incluye muchas funciones de la API de SciPy, como
scipy.estadsticasyscipy.escaso,que utilizan las bibliotecas del kit de herramientas CUDA correspondientes siempre que sea
posible. CuPy también incluye NVRTC (https://docs.nvidia.com/cuda/nvrtc/index.html) para proporcionar una API de Python
capaz de compilar y ejecutar kernels CUDA en tiempo de ejecución. CuPy fue desarrollado para proporcionar soporte de
matrices multidimensionales para la biblioteca de aprendizaje profundo Chainer [84], y desde entonces muchas bibliotecas lo
han utilizado como un reemplazo directo acelerado por GPU para NumPy y SciPy.
Las bibliotecas TensorFlow y PyTorch definenTensorobjetos, que son matrices multidimensionales. Estas
bibliotecas, junto con Chainer, proporcionan API similares a NumPy, pero crean gráficos de cálculo para permitir que
las secuencias de operaciones en tensores se definan por separado de su ejecución. Esto está motivado por su uso en
aprendizaje profundo, donde el seguimiento de las dependencias entre operaciones les permite proporcionar
características como la diferenciación automática, que no es necesaria en bibliotecas de matrices generales como
Numba o CuPy. Puede encontrar una discusión más detallada sobre el aprendizaje profundo y la diferenciación
automática en la Sección5.
Biblioteca de álgebra lineal acelerada (XLA) de Google [85] proporciona su propio formato específico de dominio
para representar y compilar gráficos computacionales JIT, lo que también brinda al optimizador el beneficio de
conocer las dependencias entre las operaciones. XLA es utilizado tanto por TensorFlow como por la biblioteca JAX de
Google [86], que proporciona diferenciación automática y XLA para Python, usando una corrección NumPy que
construye el gráfico computacional a partir de sucesiones de transformaciones, similar a TensorFlow, pero usando
directamente la API NumPy.

4.4. Interoperabilidad

Bibliotecas como Pandas y Scikit-learn se construyen sobre NDArray de NumPy, heredando los beneficios de
unificación y rendimiento de construir NumPy sobre un núcleo de alto rendimiento. Las contrapartes de NumPy y
SciPy aceleradas por GPU son diversas y brindan a los usuarios muchas opciones. Las opciones más utilizadas son las
bibliotecas CuDF, CuPy, Numba, PyTorch y TensorFlow. Como se analizó en la introducción de este documento, la
necesidad de copiar un conjunto de datos o cambiar significativamente su formato cada vez que se utiliza una
biblioteca diferente ha sido prohibitiva para la interoperabilidad en el pasado. Por lo tanto, a menudo se prefieren las
operaciones de copia cero, que son operaciones que no requieren copiar datos de una ubicación de memoria a otra
(dentro o entre dispositivos). Esto es aún más cierto para las bibliotecas de GPU, donde estas copias y traducciones
requieren comunicación de CPU a GPU, lo que a menudo anula la ventaja de la memoria de alta velocidad en las GPU.

Dos estándares han ganado popularidad recientemente para intercambiar punteros a la memoria del dispositivo entre
estas bibliotecas: __cuda_array_interface__
(https://numba.pydata.org/numba-doc/latest/cuda/cuda_array_interface.html) y DLPack (https://
github.com/dmlc/dlpack). Estos estándares permiten que la memoria del dispositivo se represente y pase
fácilmente entre diferentes bibliotecas sin la necesidad de copiar o convertir los datos subyacentes. Estos
formatos de serialización están inspirados en el apropiadamente llamado __ de NumPy.interfaz_matriz__,
que existe desde 2005. Ver figura5para ejemplos de interoperabilidad de Python entre las bibliotecas
Numba, CuPy y PyTorch.
Información2020,11, 193 17 de 44

Figura 5. Ejemplos de interoperabilidad de copia cero entre diferentes Python acelerados por
bibliotecas. GPU Tanto DLPack como __cuda_array _interfaz__permitir la conversión de copia cero
y viceversa entre todas las bibliotecas compatibles. (a) creando una matriz de dispositivos con Numba y usando el
__cuda_array_interface__para crear una matriz CuPy que haga referencia al mismo puntero a la memoria del
dispositivo subyacente. Esto permite que las dos bibliotecas utilicen y manipulen la misma memoria sin copiarla; (
b) creando un tensor de PyTorch y usando DLPack para crear una matriz CuPy que hace referencia al mismo
puntero a la memoria del dispositivo subyacente, sin copiarlo.

4.5. Aprendizaje automático clásico en GPU

La multiplicación de matrices, que se extiende a la multiplicación matriz-matriz y matriz-vector en el contexto de


la informática, subyace a una parte importante de las operaciones de aprendizaje automático, desde la optimización
convexa hasta la descomposición de valores propios, los modelos lineales y las estadísticas bayesianas hasta los
algoritmos basados en la distancia. Por lo tanto, los algoritmos de aprendizaje automático requieren
implementaciones BLAS de alto rendimiento. Las bibliotecas aceleradas por GPU necesitan hacer uso de primitivas
eficientes de álgebra lineal de nivel inferior de la misma manera en que NumPy y SciPy usan código C/C++ y Fortran
debajo, con la principal diferencia de que las bibliotecas invocadas deben ser aceleradas por GPU. Esto incluye
opciones como las bibliotecas cuBLAS, cuSparse y cuSolver contenidas en CUDA Toolkit.
El espacio de las bibliotecas de aprendizaje automático aceleradas por GPU para Python está bastante
fragmentado con diferentes categorías de algoritmos especializados. En la categoría de GBM, XGBoost proporciona
implementaciones aceleradas por GPU.38] y LightGBM [87]. SnapML y H de IBM2O proporcionar implementaciones
aceleradas por GPU altamente optimizadas para modelos lineales [88]. ThunderSVM tiene una implementación
acelerada por GPU de máquinas de vectores de soporte, junto con el conjunto estándar de núcleos, para tareas de
clasificación y regresión. También contiene SVM de una clase, que es un método no supervisado para detectar valores
atípicos. Tanto SnapML como ThunderSVM tienen API de Python que son compatibles con Scikit-learn.

La biblioteca FAISS de Facebook acelera la búsqueda de vecinos más cercanos, proporcionando


implementaciones aproximadas y exactas junto con una versión eficiente de K-Means [89]. CannyLabs proporciona
una implementación eficiente del algoritmo de reducción de dimensionalidad no lineal T-SNE [90], que ha demostrado
ser eficaz tanto para tareas de visualización como de aprendizaje. T-SNE es generalmente prohibitivo en CPU, incluso
para conjuntos de datos de tamaño mediano de un millón de muestras de datos [91].
cuML está diseñado como una biblioteca de uso general para el aprendizaje automático, con el objetivo
principal de llenar los vacíos que faltan en la comunidad Python. Además de los algoritmos para crear modelos
de aprendizaje automático, proporciona versiones aceleradas por GPU de otros paquetes en Scikit-learn, como
elpreprocesamiento, feature_extraction,yselección_modeloAPI. Al centrarse en características importantes que
faltan en el ecosistema de herramientas aceleradas por GPU, cuML también proporciona algunos algoritmos
que no están incluidos en Scikit-learn, como los algoritmos de series de tiempo. Aunque todavía
Información2020,11, 193 18 de 44

Al mantener una interfaz similar a Scikit-learn, se utilizan otras API estándar de la industria para algunos de los algoritmos
más específicos con el fin de capturar diferencias sutiles que aumentan la usabilidad, como Statsmodels [92].

4.6. Ciencia de datos distribuida y aprendizaje automático en GPU

Las GPU se han convertido en un componente clave de la informática científica de uso general flexible y de alto
rendimiento. Aunque las GPU proporcionan características como ancho de banda de memoria de alta velocidad,
memoria compartida, paralelismo extremo y lecturas/escrituras fusionadas en su memoria global, la cantidad de
memoria disponible en un solo dispositivo es menor que los tamaños disponibles en la memoria del host (CPU).
Además, aunque los flujos CUDA permiten ejecutar diferentes núcleos CUDA en paralelo, las aplicaciones altamente
paralelizables en entornos con cargas de trabajo de datos de gran tamaño pueden verse limitadas por la cantidad de
núcleos disponibles en un solo dispositivo.
Se pueden combinar varias GPU para superar esta limitación, proporcionando más memoria en general para
cálculos en conjuntos de datos más grandes. Por ejemplo, es posible ampliar una sola máquina instalando varias GPU
en ella. Al utilizar esta técnica, es importante que estas GPU puedan acceder directamente a la memoria de cada una,
sin las cargas de rendimiento que supone viajar a través de transportes lentos como PCI-express. Sin embargo, es
posible que la ampliación no sea suficiente, ya que la cantidad de dispositivos que se pueden instalar en una sola
máquina es limitada. Para mantener un alto rendimiento escalable, también es importante que las GPU puedan
compartir su memoria a través de los límites de las máquinas físicas, como a través de NIC como Ethernet e
interconexiones de alto rendimiento como Infiniband.
En 2010, Nvidia presentó GPUDirect Shared Access [93], un conjunto de optimizaciones de hardware y
controladores de bajo nivel para acelerar la comunicación entre GPU y dispositivos de terceros en el mismo puente
PCI-express. En 2011, se introdujo GPUDirect Peer-to-peer, lo que permite mover la memoria entre varias GPU con
transferencias DMA de alta velocidad. La comunicación entre procesos CUDA (CUDA IPC) utiliza esta característica
para que las GPU en el mismo nodo físico puedan acceder a la memoria de las demás, brindando así la capacidad de
escalar. En 2013, GPUDirect RDMA permitió que las tarjetas de red omitieran la CPU y accedieran a la memoria
directamente en la GPU. Esto eliminó el exceso de copias y creó una línea directa entre GPU en diferentes máquinas
físicas [94], brindando oficialmente soporte para la ampliación horizontal.
Aunque han existido estrategias ingenuas para la computación distribuida con GPU desde la invención de
SETI@home en 1999 [95], al simplemente tener varios trabajadores ejecutando núcleos CUDA locales, las
optimizaciones proporcionadas por GPUDirect dotan a los sistemas distribuidos que contienen múltiples GPU
de medios mucho más completos para escribir algoritmos escalables.
La biblioteca MPI, presentada en la Sección2.4, se puede construir con soporte CUDA (https://
www.openmpi.org/faq/?category=runcuda), permitiendo que los punteros CUDA se transmitan entre múltiples
dispositivos GPU. Por ejemplo, LightGBM (Sección2.3) realiza entrenamiento distribuido en GPU con MPI,
utilizando OpenCL para admitir dispositivos AMD y NVIDIA. Snap ML también puede realizar entrenamiento de
GPU distribuido con MPI [88] utilizando el CoCoA [96] marco para la optimización distribuida. El marco CoCoA
preserva la localidad entre los recursos informáticos en cada máquina física para reducir la cantidad de
comunicación de red necesaria entre las máquinas del clúster. Al agregar soporte CUDA al paquete conda de
OpenMPI, la biblioteca Mpi4py (https://github.com/mpi4py/mpi4py) ahora expone MPI compatible con CUDA a
Python, lo que reduce la barrera para que los científicos creen algoritmos distribuidos dentro del ecosistema de
datos de Python.
Sin embargo, incluso con MPI compatible con CUDA, las operaciones de comunicación colectiva, como
reducciones y transmisiones, que permiten que un conjunto de rangos participen colectivamente en una operación de
datos, se realizan en el host. La biblioteca de comunicaciones colectivas de NVIDIA (NCCL) proporciona una API similar
a MPI para realizar estas reducciones completamente en las GPU. Esto ha hecho que NCCL sea muy popular entre las
bibliotecas de aprendizaje profundo distribuido, como PyTorch, Chainer, Horovod y TensorFlow. También se utiliza en
muchas bibliotecas de ML clásicas con algoritmos distribuidos, como XGBoost, H2OGPU y cuML.
Tanto MPI como NCCL asumen que los rangos están disponibles para comunicarse sincrónicamente en tiempo real. Los
sistemas asincrónicos de tareas programadas para computación distribuida escalable de propósito general, como Dask y
Apache Spark, funcionan en marcado contraste con este diseño al construir sistemas acíclicos dirigidos.
Información2020,11, 193 19 de 44

Gráficos de cálculo (DAG) que representan las dependencias entre tareas arbitrarias y su ejecución de forma
asincrónica o completamente perezosa. Si bien esto brinda la capacidad de programar tareas superpuestas arbitrarias
en un conjunto de trabajadores, es posible que no siempre se conozcan los tipos de retorno de estas tareas y, por lo
tanto, la dimensionalidad de las salidas, antes de ejecutar el gráfico. PyTorch y TensorFlow también crean DAG y, dado
que se supone que se utiliza un tensor tanto para la entrada como para la salida, las dimensiones generalmente se
conocen antes de ejecutar el gráfico.
La ciencia de datos de un extremo a otro requiere ETL como una etapa importante en el proceso, un hecho que
va en contra del alcance de las bibliotecas de procesamiento de tensores como PyTorch y TensorFlow. RAPIDS llena
este vacío al brindar un mejor soporte para GPU en sistemas como Dask y Spark, al tiempo que promueve el uso de la
interoperabilidad para moverse entre estos sistemas, como se describe en la Sección4.4. Construir sobre los
componentes principales de RAPIDS proporciona el beneficio adicional para que las bibliotecas de terceros, como
BlazingSQL, hereden estas capacidades distribuidas y funcionen bien dentro del ecosistema.
El paradigma de un proceso por GPU (OPG) es un diseño popular para el multiprocesamiento con GPU, ya que
permite utilizar el mismo código tanto en entornos de múltiples GPU de un solo nodo como en entornos de múltiples
GPU de múltiples nodos. RAPIDS proporciona una biblioteca, llamada Dask-CUDA (https://github.com/rapidsai/
daskcuda), que facilita la inicialización de un grupo de trabajadores de OPG, detectando automáticamente las GPU
disponibles en cada máquina física y asignando solo una a cada trabajador.
RAPIDS proporciona un Dask DataFrame respaldado por cuDF. Al admitir CuPy debajo de su
distribuciónFormaciónEn lugar de NumPy, Dask puede hacer uso inmediato de GPU para el
procesamiento distribuido de matrices multidimensionales. Dask admite el uso de la comunicación
unificada-X (UCX) [97] capa de abstracción de transporte, que permite a los trabajadores pasar objetos
respaldados por CUDA, como cuDF DataFrames, CuPy NDArrays y Numba DeviceNDArrays, utilizando el
mecanismo más rápido disponible. El soporte UCX en Dask lo proporciona RAPIDS UCX-py (https://github.
es/rapidsai/ucx-py), que envuelve el código C de bajo nivel en UCX con una interfaz limpia y simple, por lo
que se puede integrar fácilmente con otros sistemas distribuidos basados en Python. UCX utilizará
CUDA IPC cuando la memoria de GPU se pase entre diferentes GPU en la misma máquina física (intra-
nodo). GPUDirect RDMA se utilizará para comunicaciones entre máquinas físicas (entre nodos) si está
instalado; sin embargo, dado que requiere la instalación de un dispositivo de red compatible y un
módulo de kernel en el sistema operativo, la memoria se almacenará en el host.
Utilizar el soporte integral de Dask para la computación GPU distribuida de propósito general junto con el enfoque
general para el aprendizaje automático distribuido descrito en la Sección2.4, RAPIDS cuML puede distribuir y acelerar el
proceso de aprendizaje automático de un extremo a otro. Cifra6a muestra el estado del sistema Dask durante la etapa de
capacitación, mediante la ejecución de tareas de capacitación en los trabajadores de Dask que contienen particiones de datos
del conjunto de datos de capacitación. El estado del sistema Dask después del entrenamiento se ilustra en la Figura6b. En esta
etapa, los parámetros se mantienen en la GPU de un solo trabajador hasta que se invoca la predicción en el modelo. Cifra6c
muestra el estado del sistema durante la predicción, donde los parámetros entrenados se transmiten a todos los trabajadores
que tienen particiones del conjunto de datos de predicción. La mayoría de las veces, es sólo eladaptar()tarea o conjunto de
tareas que necesitarán compartir datos con otros trabajadores. Asimismo, la etapa de predicción generalmente no requiere
ninguna comunicación entre los trabajadores, lo que permite a cada trabajador ejecutar su predicción local de forma
independiente. Este diseño cubre la mayoría de los algoritmos paramétricos del modelo ML clásico, con solo unas pocas
excepciones.
Información2020,11, 193 20 de 44

Figura 6.Computación GPU distribuida de propósito general con Dask. (a) entrenamiento cuML distribuido. Eladaptar()la función se
ejecuta en todos los trabajadores que contienen datos en el conjunto de datos de entrenamiento; (b) parámetros distribuidos del
modelo cuML después del entrenamiento. Los parámetros entrenados se llevan a un solo trabajador; (C) modelo cuML distribuido
para predicción. Los parámetros entrenados se transmiten a todos los trabajadores que contienen particiones en el conjunto de
datos de predicción. Las predicciones se hacen de una manera vergonzosamente paralela.

MLLib de Apache Spark admite GPU, aunque la integración no es tan completa como Dask, ya que carece de
soporte para la serialización nativa o el transporte de memoria de GPU, por lo que requiere copias innecesarias del
host a la GPU y de regreso al host para cada función. El proyecto Ray (https://github.com/ray-project/ray) es similar: si
bien los cálculos de GPU se admiten indirectamente a través de TensorFlow, la integración no va más allá. En 2016,
Spark introdujo un concepto similar a Ray, al que llamaron TensorFrame. Desde entonces, esta característica ha
quedado obsoleta. Actualmente, RAPIDS está agregando soporte más completo para la computación GPU distribuida
en Spark 3.0 [98], incorpora programación nativa compatible con GPU, así como soporte para el diseño de columnas
de un extremo a otro, manteniendo los datos en la GPU en todas las etapas de procesamiento.

XGBoost (Sección2.3) admite entrenamiento distribuido en GPU y se puede usar tanto con Dask como con Spark.
Además de MPI, la biblioteca Snap ML también proporciona un backend para Spark. Como se menciona en la sección
2.4, el uso de la biblioteca Sparkling dota a H2O con la capacidad de ejecutarse en Spark y la compatibilidad con GPU
se hereda automáticamente. Los algoritmos distribuidos de la biblioteca de propósito general cuML, que también
incluyen preparación de datos e ingeniería de funciones, se pueden utilizar con Dask.
Información2020,11, 193 21 de 44

5. Aprendizaje profundo

Al utilizar ML clásico, el rendimiento predictivo depende significativamente del procesamiento de datos y la ingeniería
de características para construir el conjunto de datos que se utilizará para entrenar los modelos. Métodos de ML clásicos,
mencionados en la sección2, suelen ser problemáticos cuando se trabaja con conjuntos de datos de alta dimensión: los
algoritmos no son óptimos para extraer conocimiento de datos sin procesar, como texto e imágenes [99]. Además, convertir
un conjunto de datos de entrenamiento a un formato tabular (estructurado) adecuado normalmente requiere ingeniería de
funciones manual. Por ejemplo, para construir un conjunto de datos tabulares, podemos representar un documento como un
vector de frecuencias de palabras [100], o podemos representar flores (Iris) tabulando las medidas de los tamaños de las hojas
en lugar de usar los píxeles de las fotografías como entradas [101].
El aprendizaje automático clásico sigue siendo la opción recomendada para la mayoría de las tareas de modelado basadas en
conjuntos de datos tabulares. Sin embargo, aparte de las herramientas de AutoML mencionadas en la Sección3Como se mencionó
anteriormente, depende de una cuidadosa ingeniería de funciones, que requiere una experiencia sustancial en el dominio. El
preprocesamiento de datos y la ingeniería de características pueden considerarse un arte, donde el objetivo es extraer información útil
y destacada de los datos sin procesar recopilados de tal manera que se conserve la mayor parte de la información relevante para hacer
predicciones. La ingeniería de características descuidada o ineficaz puede dar como resultado la eliminación de información destacada
y obstaculizar sustancialmente el rendimiento de los modelos predictivos.
Si bien algunos algoritmos de aprendizaje profundo son capaces de aceptar datos tabulares como entrada, la mayoría de los
métodos de última generación que están encontrando el mejor rendimiento predictivo son de propósito general y capaces de extraer
información destacada de datos sin procesar de una manera algo automatizada. . Esta extracción automática de características es un
componente intrínseco de su tarea de optimización y arquitectura de modelado. Por esta razón, el aprendizaje profundo a menudo se
describe como un método de aprendizaje de características o representaciones. Sin embargo, una desventaja importante del
aprendizaje profundo es que no se adapta bien a conjuntos de datos tabulares más pequeños, y la parametrización de DNN puede
requerir conjuntos de datos más grandes, lo que requiere entre 50 000 y 15 millones de ejemplos de capacitación para una
capacitación efectiva.
Las siguientes secciones revisan los primeros desarrollos de bibliotecas de aprendizaje profundo basadas en GPU y
Python, centrándose en el rendimiento computacional a través de gráficos estáticos, la convergencia hacia gráficos dinámicos
para mejorar la facilidad de uso y los esfuerzos actuales para aumentar la eficiencia y escalabilidad computacional, para tener
en cuenta el aumento del conjunto de datos. y tamaños de arquitectura.

5.1. Gráficos de flujo de datos estáticos

Lanzado por primera vez en 2014, el marco de aprendizaje profundo Caffe apuntaba a una alta eficiencia
computacional al tiempo que proporcionaba una API fácil de usar para implementar arquitecturas CNN comunes [102
]. Caffe gozó de gran popularidad en la comunidad de visión por computadora. Además de centrarse en las CNN,
también admite redes neuronales recurrentes y unidades de memoria a corto plazo. Si bien las piezas principales de
Caffe se implementan en C++, logra facilidad de uso mediante el uso de archivos de configuración como interfaz para
implementar arquitecturas de aprendizaje profundo. Una desventaja de este enfoque es que dificulta el desarrollo e
implementación de cálculos personalizados.
Lanzado inicialmente en 2007, Theano es otro marco académico de aprendizaje profundo que ganó impulso en
la década de 2010 [103]. A diferencia de Caffe, Theano permite a los usuarios definir DNN directamente en el tiempo
de ejecución de Python. Sin embargo, para lograr eficiencia, Theano separa la definición de algoritmos y arquitecturas
de aprendizaje profundo de su ejecución. Theano y Caffe representan los cálculos como algo estático.gráfico de
cálculoográfico de flujo de datos, que se compila y optimiza antes de poder ejecutarse. En Theano, esta compilación
puede tardar desde varios segundos hasta varios minutos, y puede ser un punto de fricción importante al depurar
arquitecturas o algoritmos de aprendizaje profundo. Además, separar la representación gráfica de su ejecución
dificulta la interacción con el código en tiempo real.
En 2016 [104], Google lanzó TensorFlow, que siguió un enfoque similar a Theano mediante el uso de un modelo
de gráfico estático. Si bien esta separación entre la definición del gráfico y la ejecución aún no permite la interacción
en tiempo real, TensorFlow redujo los tiempos de compilación, lo que permitió a los usuarios iterar sobre las
diferentes ideas más rápidamente. TensorFlow también se centró en la informática distribuida, que no ofrecían
muchas bibliotecas DNN en ese momento. Este soporte permitió definir modelos de aprendizaje profundo
Información2020,11, 193 22 de 44

una vez y se implementó en diferentes entornos informáticos como servidores y dispositivos móviles, una característica que
lo hizo particularmente atractivo para la industria. TensorFlow también ha tenido una adopción generalizada en el mundo
académico, volviéndose tan popular que el desarrollo de Theano se detuvo en 2017.
En los años comprendidos entre 2016 y 2019, se lanzaron varias otras bibliotecas de aprendizaje profundo de
código abierto con paradigmas de gráficos estáticos, incluida CNTK de Microsoft.105], Nnabla de Sony (https://
github.com/sony/nnabla), Neón de Nervana (https://github.com/NervanaSystems/neon), Caffe2 de Facebook [106], y
PaddlePaddle de Baidu [107]. A diferencia de otras bibliotecas de aprendizaje profundo, Nervana Neon, que luego fue
adquirida por Intel y ahora está descontinuada, no usó cuDNN para implementar componentes de redes neuronales.
En cambio, presentaba un backend de CPU optimizado a través de MKL de Intel (Sección1.2). MXNET [108] cuenta con
el respaldo de Amazon, Baidu y Microsoft; es parte de Apache Software Foundation y sigue siendo la única biblioteca
importante de aprendizaje profundo de código abierto desarrollada activamente que no está desarrollada
principalmente por una importante empresa de tecnología con fines de lucro.
Si bien los gráficos de cálculo estáticos son atractivos para aplicar optimizaciones de código, exportación de modelos y
portabilidad en entornos de producción, la falta de interacción en tiempo real todavía hace que su uso en entornos de
investigación sea engorroso. La separación entre declaración y ejecución hace que los gráficos estáticos sean engorrosos para
muchos contextos de investigación, que a menudo requieren introspección y experimentación. Por ejemplo, los errores
lógicos no relacionados con la sintaxis que se descubren durante el tiempo de ejecución pueden ser difíciles de depurar y los
mensajes de error en el código de ejecución pueden estar muy alejados del código problemático en la sección de declaración.
Dado que los gráficos dinámicos se crean sobre la marcha, son naturalmente mutables y pueden modificarse durante el
tiempo de ejecución. Esto permite a los usuarios interactuar con el gráfico directamente durante el tiempo de ejecución y se
pueden utilizar depuradores convencionales. Otra característica de los gráficos dinámicos que favorece la investigación es que
no requieren relleno cuando se trabaja con entradas de tamaño variable, como oraciones, cuando se entrenan redes
neuronales recurrentes para el procesamiento del lenguaje natural.
La siguiente sección destaca algunos de los principales marcos de aprendizaje profundo que están adoptando
un enfoque alternativo, llamado gráficos de cálculo dinámico, que permiten a los usuarios interactuar con los cálculos
directamente y en tiempo real.

5.2. Bibliotecas de gráficos dinámicos con ejecución entusiasta

Con su primer lanzamiento en 2002, hace casi dos décadas, Torch fue una biblioteca de aprendizaje automático y
aprendizaje profundo de código abierto muy influyente. Mientras usa C/C++ y CUDA como otros marcos de
aprendizaje profundo, Torch se basa en el lenguaje de programación Lua y utiliza un compilador justo a tiempo LuaJIT
[109]. Al igual que Python, Lua es un lenguaje interpretado fácil de aprender y utilizar. También es sencillo ampliarlo
con código C/C++ personalizado para mejorar la eficiencia en contextos informáticos científicos. Lo que hace que Lua
sea particularmente atractivo es que puede integrarse en diferentes entornos informáticos, como dispositivos móviles
y servidores web, una característica menos sencilla de realizar con Python.
Torch 7 (lanzado en 2011) fue particularmente atractivo para una gran parte de la comunidad de investigación de
aprendizaje profundo debido a su enfoque dinámico de los gráficos computacionales [109]. En contraste con los marcos de
aprendizaje profundo mencionados en la sección anterior (Sección5.1), Torch 7 permite al usuario interactuar con los cálculos
directamente, en lugar de definir un gráfico estático que debe compilarse explícitamente antes de la ejecución (Figura7). A
medida que Python comenzó a evolucionar hasta convertirse en la lengua franca de la informática científica, el aprendizaje
automático y el aprendizaje profundo a lo largo de la década de 2010, muchos investigadores todavía parecían preferir un
entorno basado en Python como Theano a Torch, a pesar de su enfoque de gráfico estático menos fácil de usar.

Torch 7 finalmente fue reemplazada por PyTorch en 2017 [110], que comenzó como un contenedor Python fácil de usar
alrededor del código C/C++ de nivel inferior de Torch 7. Inspirado por pioneros en marcos de aprendizaje profundo dinámicos
y basados en Python, como Chainer [84] y DyNet [111], PyTorch adopta un estilo de programación imperativo en lugar de
utilizar metaprogramación de gráficos (en la metaprogramación de gráficos, parte o toda la estructura del gráfico se
proporciona en el tiempo de compilación, y solo se genera o agrega un código mínimo durante el tiempo de ejecución). La
programación imperativa es particularmente atractiva para los investigadores, ya que proporciona una interfaz familiar para
los usuarios de Python, facilita la experimentación y la depuración.
Información2020,11, 193 23 de 44

y es directamente compatible con otras herramientas basadas en Python. Sin embargo, lo que distingue a las
bibliotecas como DyNet, Chainer y PyTorch de las bibliotecas de matriz normales aceleradas por GPU como CuPy es
que incluyen diferenciación automática en modo inverso (autodiff) para calcular gradientes de funciones con valores
escalares (las funciones con valores escalares reciben uno o más valores de entrada pero devuelve un solo valor) con
respecto a las entradas multivariadas. Desde 2017, PyTorch ha sido ampliamente adoptado y ahora se considera
ser la biblioteca de aprendizaje profundo más popular para la investigación. En 2019, PyTorch fue el aprendizaje profundo más
utilizado.
ng biblioteca en todas las principales conferencias de aprendizaje profundo [112].

a
En:
Definiendo el gráfico

Inicializando y
evaluando el grafico

Afuera:

b
En:

Afuera:

Figura 7.Comparación entre (a) un gráfico de cálculo estático en TensorFlow 1.15 y (b) un paradigma de
programación imperativo habilitado por gráficos dinámicos en PyTorch 1.4.

Los gráficos de cálculo dinámico permiten a los usuarios interactuar con los cálculos en tiempo real, lo cual es
una ventaja al implementar o desarrollar nuevos algoritmos y arquitecturas de aprendizaje profundo. Si bien esta
característica particular es enriquecedora, una ejecución entusiasta como esta tiene un alto costo computacional.
Además, se requiere un tiempo de ejecución de Python para la ejecución, lo que dificulta la implementación de DNN
en dispositivos móviles y otros entornos que no estén equipados con versiones recientes de Python. Por otro lado,
cuando se trata de comparaciones entre implementaciones de gráficos dinámicos y estáticos basados en Python
para el aprendizaje profundo, dado que el código Python solo se usa para poner en cola operaciones para la ejecución
asincrónica en la GPU a través de devoluciones de llamadas a las bibliotecas CUDA y cuDNN de nivel inferior, Se
espera que las diferencias de rendimiento computacional de todos los principales marcos de aprendizaje profundo
sean aproximadamente similares. No obstante, los puntos de referencia independientes destacaron que la velocidad
del entrenamiento DNN en GPU ya era más rápida en PyTorch en comparación con bibliotecas de gráficos estáticos
como TensorFlow [113], y Facebook ha contribuido con muchas mejoras de rendimiento notables a lo largo de los
años. Por ejemplo, la biblioteca de tensores centrales original de Torch 7 se reescribió en gran medida desde cero,
Información2020,11, 193 24 de 44

y PyTorch finalmente se fusionó con el código base de Caffe2. En ese momento, Caffe2 se había especializado
en rendimiento computacional e implementación móvil. Esta fusión permitió a PyTorch heredar estas
características automáticamente. En 2019, PyTorch agregó la compilación JIT (justo a tiempo), entre otras
características, mejorando aún más su rendimiento computacional [114].
Varias bibliotecas de aprendizaje profundo existentes que originalmente usaban gráficos de flujo de datos estáticos,
como TensorFlow, MXNet y PaddlePaddle, desde entonces han agregado soporte para gráficos dinámicos. Es probable que
las solicitudes de los usuarios y la creciente popularidad de PyTorch hayan contribuido a este cambio. Los gráficos
computacionales dinámicos son tan efectivos que ahora es el comportamiento predeterminado en TensorFlow 2.0.

5.3. JIT y eficiencia computacional

A pesar de ser favorecidas por la investigación debido a su facilidad de uso, todas las bibliotecas de gráficos dinámicos
mencionadas anteriormente alcanzan el nivel deseado de eficiencia computacional al proporcionar bloques de construcción
fijos para componentes específicos de redes neuronales y algoritmos de aprendizaje profundo. Si bien es posible desarrollar
funciones personalizadas a partir de bloques de construcción de nivel inferior (por ejemplo, implementar una capa de red
neuronal personalizada utilizando operaciones de álgebra lineal expuestas por los submódulos de matriz de la biblioteca),
una desventaja de este enfoque es que puede introducir fácilmente cuellos de botella computacionales. Sin embargo, en una
sola línea de código, estos cuellos de botella se pueden evitar en PyTorch habilitando la compilación JIT (a través de Torch
Script).
Otra visión de la personalización y la eficiencia computacional es la biblioteca de código abierto JAX
recientemente lanzada por Google.86]. Como se menciona en la sección4.5, JAX agrega elementos componibles al
código Python y NumPy normal centrados en la diferenciación automática (autodiff en modo directo e inverso), XLA (
Álgebra lineal acelerada; un compilador de dominio específico para álgebra lineal), así como computación GPU y TPU
(las TPU son chips desarrollados a medida por Google para aprendizaje automático y aprendizaje profundo). JAX es
capaz de diferenciar funciones ingenuas de Python y NumPy, incluidos bucles, cierres, ramas y funciones recursivas.
Además de la diferenciación en modo inverso, el módulo de diferenciación automática admite la diferenciación en
modo directo. Esto permite el cálculo eficiente de derivadas de orden superior como las hessianas; Otras bibliotecas
importantes de aprendizaje profundo aún no lo admiten, pero es una característica muy solicitada y actualmente se
está implementando en PyTorch (https://github.com/pytorch/pytorch/issues/10223). La diferenciación automática en
modo directo permite la diferenciación automática de funciones con más de una salida, lo que no se utiliza
comúnmente en la investigación actual de aprendizaje profundo que utiliza retropropagación [115].

JAX es una biblioteca relativamente nueva y aún no ha tenido una adopción generalizada. Sin embargo, la
elección de diseño de JAX de adoptar completamente la API de NumPy, en lugar de desarrollar una API similar a
NumPy como PyTorch, puede reducir la barrera de entrada para los usuarios que están familiarizados con el
ecosistema de NumPy. Al estar orientado a la computación de matrices con soporte de diferenciación automática, JAX
se diferencia de PyTorch en que no se centra en proporcionar un conjunto completo de capacidades de aprendizaje
profundo, basándose en Flax (https://github.com/googleresearch/flax/tree/prerelease) biblioteca para hacerlo. En
particular, Flax agrega capas comunes como capas convolucionales y normalización por lotes [116], atención [117],
etc., e implementa algoritmos de optimización de uso común, incluido el gradiente estocástico decente (SGD) con
impulso [118], Lars [119], y ADÁN [120].
Es importante que esta sección concluya señalando que todos los principales marcos de aprendizaje profundo ahora
están basados en Python. Otra tendencia que vale la pena señalar es que todas las bibliotecas de aprendizaje profundo
utilizadas en el mundo académico ahora están respaldadas por grandes empresas de tecnología. Las diferentes necesidades
de la academia y la industria probablemente contribuyeron a la intrincada complejidad y los esfuerzos de ingeniería
necesarios para desarrollar patrones de diseño como estos. Según análisis elaborados de los principales medios de
publicación, redes sociales y resultados de búsqueda, muchos investigadores están abandonando TensorFlow en favor de
PyTorch [112]. Horace He sugiere además que, si bien PyTorch domina actualmente la investigación sobre aprendizaje
profundo (superando en número a TensorFlow 2:1 y 3:1 en las principales conferencias sobre visión por computadora y
procesamiento del lenguaje natural), TensorFlow sigue siendo el marco más popular en la industria [112]. Tanto TensorFlow
como PyTorch parecen inspirarse mutuamente y convergen en sus respectivas fortalezas y debilidades. Se agregó PyTorch
Información2020,11, 193 25 de 44

Funciones de gráficos estáticos (recientemente habilitadas por TorchScript) para producción e implementación móvil, mientras que
TensorFlow agregó gráficos dinámicos para que sean más amigables para la investigación. Se espera que ambas bibliotecas sigan
siendo opciones populares en los próximos años.

5.4. API de aprendizaje profundo

Sentado encima de las bibliotecas de aprendizaje profundo analizadas en las secciones5.1y5.2Hay varias bibliotecas
contenedoras diferentes que hacen que el aprendizaje profundo sea más accesible para los profesionales. Uno de los
principales objetivos de diseño de estas API es proporcionar un mejor equilibrio entre la verbosidad del código y la
personalización; Los marcos de aprendizaje profundo existentes pueden ser muy poderosos y personalizables, pero también
confusos para los recién llegados. Uno de los primeros esfuerzos por abstraer código aparentemente complicado fue
Lasagne, una envoltura "ligera" de Theano (https://github.com/Lasagne/Lasagne). En 2015, un año después del lanzamiento
inicial de Lasagne, la biblioteca Keras (https://github.com/keras-team/keras) introdujo otro enfoque para hacer que Theano
sea más accesible para una amplia base de usuarios, presentando un diseño de API que recuerda al enfoque orientado a
objetos de Scikit-learn. En los años posteriores a su primer lanzamiento, la API de Keras se estableció como el contenedor de
Theano más popular. A principios de 2016, poco después del lanzamiento de TensorFlow, Keras también comenzó a admitirlo
como otro backend opcional. En 2017, al año siguiente, la CNTK de Microsoft [105] se agregó como una tercera opción de
backend. Durante este tiempo, los desarrolladores de TensorFlow estaban experimentando con bibliotecas de abstracción,
con la esperanza de facilitar la construcción y el entrenamiento de modelos y hacerlos más accesibles para los no expertos.
Después de muchos intentos diferentes y diseños abandonados, TensorFlow 2.0 finalmente fortaleció su integración con
Keras en 2019, exponiendo un submódulo (tensorflow.keras) y crear la API oficial orientada al usuario [121]. En consecuencia,
la versión independiente de Keras ya no se desarrolla activamente.

Dado que, para empezar, PyTorch se centró fuertemente en la facilidad de uso, inspirado en el enfoque limpio
de Chainer para trabajar con gráficos dinámicos [84], no hubo un fuerte incentivo por parte de la comunidad de
investigación para adoptar las API de extensión. No obstante, a lo largo de los años surgieron varios proyectos
basados en PyTorch que ayudan al proceso de implementación de redes neuronales para diferentes casos de uso,
haciendo que el código sea más compacto y simplificando el entrenamiento del modelo. Ejemplos notables de tales
bibliotecas son Skorch(https://github.com/skorch-dev/skorch), que proporciona una API compatible con Scikit-learn
además de PyTorch, Ignite(https://github.com/pytorch/ignite), portador de la antorcha (https://github.com/
pytorchbearer/torchbearer) [122], Catalizador(https://github.com/catalyst-team/catalyst) y PyTorch Lightning (https://
github.com/PyTorchLightning/pytorch-lightning).
En 2020, la empresa de software Explosion lanzó una versión principal de su biblioteca de aprendizaje profundo
de código abierto, Thinc. Versión 8.0(https://github.com/explosion/thinc/releases/tag/v8.0.0a0) prometió una versión
funcional refrescante del aprendizaje profundo con una API liviana que admite código PyTorch, MXNet y TensorFlow.
Esta versión también contenía verificación de tipos estáticos a través de Mypy (https://github.com/python/mypy), lo
que facilita la depuración del código de aprendizaje profundo. Al igual que la versión independiente de Keras, Thinc
admite múltiples bibliotecas de aprendizaje profundo. A diferencia de Keras, Thinc enfatiza un enfoque funcional, más
que orientado a objetos, para definir modelos. Thinc ofrece además acceso a los componentes subyacentes de
retropropagación y es capaz de combinar diferentes marcos simultáneamente, en lugar de proporcionar una fachada
conectable, como Keras, que solo puede utilizar las características de una única biblioteca de aprendizaje profundo a
la vez.
La biblioteca Fastai combina una API fácil de usar con los últimos avances y mejores prácticas para la capacitación de
modelos. Las versiones iniciales se basaron en Keras, aunque en 2018 recibió una revisión importante en su versión 1.0, y
ahora proporciona su API intuitiva además de PyTorch. Fastai también proporciona funciones que permiten a los usuarios
visualizar fácilmente modelos DNN para su publicación y depuración. Además, mejora el rendimiento predictivo de las DNN al
proporcionar funciones de capacitación útiles, como programadores de tasas de aprendizaje automáticos que están
equipados con las mejores prácticas para reducir los tiempos de capacitación y acelerar la convergencia. La hoja de ruta de
Fastai incluye algoritmos de aprendizaje profundo que funcionan de inmediato sin ajustes ni experimentación sustanciales, lo
que hace que el aprendizaje profundo sea más accesible al reducir los requisitos de costosos recursos informáticos. Al utilizar
restricciones en el rendimiento esperado, el equipo de Fast.ai fue
Información2020,11, 193 26 de 44

capaz de entrenar el modelo de aprendizaje profundo más rápido y económico en la competencia CIFAR 10 de DAWNBench
(DAWNbench [113] es una suite de referencia que no solo considera el rendimiento predictivo sino también la velocidad y el
costo de entrenamiento de un modelo de aprendizaje profundo).

5.5. Nuevos algoritmos para acelerar el aprendizaje profundo a gran escala

Avances de investigación recientes que utilizan arquitecturas Transformer, como BERT [123] y GPT-2 [124], han
demostrado que el rendimiento del modelo DNN predictivo puede estar altamente correlacionado con el tamaño del modelo
para ciertas arquitecturas. En el transcurso de solo tres años (de 2014 a 2017), el tamaño del modelo del desafío de
reconocimiento visual ImageNet [125] el ganador pasó de aprox. 4 millones [126] a 146 millones [127] parámetros, que es de
aprox. Aumento de 36x. Al mismo tiempo, la memoria de la GPU sólo ha crecido en un factor de aprox. 3x y presenta un cuello
de botella para la investigación de aprendizaje profundo con una sola GPU [128].
Un enfoque para el entrenamiento de modelos a gran escala es el paralelismo de datos, donde se utilizan múltiples
dispositivos en paralelo en diferentes lotes del conjunto de datos. Si bien esto puede acelerar la convergencia del modelo, el
enfoque aún puede ser prohibitivo para entrenar modelos grandes, ya que solo el conjunto de datos se divide entre
dispositivos y los parámetros del modelo aún deben caber en la memoria de cada dispositivo [129]. El paralelismo del modelo,
por otro lado, distribuye el modelo entre diferentes dispositivos, permitiendo que modelos con una gran cantidad de
parámetros quepan en la memoria de una sola GPU.130].
En marzo de 2019, Google lanzó GPipe [131] a la comunidad de código abierto para hacer más eficiente el
entrenamiento de modelos de redes neuronales a gran escala. GPipe va más allá del paralelismo de datos y modelos,
implementando una técnica de paralelismo de tuberías basada en un descenso de gradiente estocástico sincrónico [
131]. En GPipe, el modelo se distribuye en diferentes aceleradores de hardware y los minilotes del conjunto de datos
de entrenamiento se dividen en microlotes y los gradientes se acumulan consistentemente en estos microlotes
(paralelismo de datos sincrónicos). En un impresionante estudio de caso, los investigadores pudieron entrenar un
AmoebaNet-B [sesenta y cinco] modelo con más de 500 millones de parámetros en más de 230.000 TPU en la nube. En
un AmoebaNet-D [sesenta y cinco] de referencia, los investigadores observaron un aumento de rendimiento
computacional de 3 veces al usar GPipe para dividir un modo en ocho particiones, en comparación con el uso de un
enfoque de paralelismo de modelo ingenuo para dividir el modelo [131].
El enfoque tradicional para mejorar el rendimiento predictivo de las DNN es aumentar el número de capas de
arquitecturas de última generación. Por ejemplo, escalar arquitecturas ResNet [132] de ResNet-18 a ResNet-200 (al
agregar más capas), resultó en una mejora de 4 veces en la precisión superior en ImageNet [133]. Una forma más
basada en principios de mejorar el rendimiento predictivo es mediante el llamadocoeficiente compuestoescalar CNN
de una manera estructurada como lo proponen Tan y Le en el enfoque de búsqueda de arquitectura neuronal
EfficientNet [134]. En lugar de escalar arbitrariamente la resolución de entrada, la profundidad y el ancho de las CNN,
un enfoque de escalado compuesto primero utiliza la búsqueda de cuadrícula para determinar la relación entre esos
diferentes parámetros arquitectónicos. A partir de esta búsqueda inicial, se pueden derivar coeficientes de escala
compuestos para ajustar la arquitectura de referencia en función de un presupuesto computacional o tamaño del
modelo especificado por el usuario.134]. Se dice que los modelos EfficientNets producen un mejor rendimiento que
los métodos actuales de última generación, logrando una eficiencia 10 veces mayor al reducir el tamaño del
parámetro y aumentar la capacidad computacional.134]. El equipo de ingeniería de Google impulsó aún más la
implementación y desarrolló una variante EfficientNet que puede utilizar mejor su llamadoBorde de TPUacelerador de
hardware [135]—la computación de borde es un paradigma para sistemas distribuidos que se enfoca en mantener la
computación y el almacenamiento de datos cerca de donde se realizan las operaciones reales.
Un enfoque que se utiliza a menudo para acelerar el entrenamiento y reducir la huella de memoria de los modelos es la
cuantificación, que describe el proceso de convertir señales o datos continuos en números discretos con un tamaño o
precisión fijos (un ejemplo típico de cuantificación es la conversión de datos representados en un flotante de 64 bits en un
formato entero de 8 bits). Es un concepto que existe desde hace décadas pero que recientemente ha visto un mayor interés
en el aprendizaje profundo. Aunque generalmente se asocia con una pérdida de precisión, se han desarrollado muchos trucos
para minimizar esta pérdida.136–141]. La cuantificación Int8 (8 bits) es compatible con las últimas versiones de la mayoría de
las bibliotecas de aprendizaje profundo, como TensorFlow v2.0 y PyTorch 1.4, que pueden reducir los requisitos de ancho de
banda de memoria en un factor de 4 en comparación con los modelos Float32 (32 bits). .
Información2020,11, 193 27 de 44

Además de mejorar la escalabilidad y la velocidad del aprendizaje profundo a través de implementaciones de


software mejoradas, las mejoras algorítmicas se centraron recientemente en métodos de aproximación para
algoritmos de optimización, entre otros. Esto incluye nuevos conceptos como SignSGD [142], que es una versión
modificada de SGD para capacitación distribuida, donde los trabajadores solo comunican el signo del gradiente. Los
investigadores descubrieron que SignSGD logra 32 veces menos comunicación por iteración que SGD distribuido con
total precisión, mientras que su tasa de convergencia es competitiva con SGD.

6. Explicabilidad, interpretabilidad y equidad de los modelos de aprendizaje automático

La explicabilidad se refiere a la comprensión, en términos simples, de cómo funciona exactamente un modelo bajo el
capó, mientras que la interpretabilidad se refiere a la capacidad de observar el efecto que los cambios en la entrada o los
parámetros tendrán en los resultados previstos. Aunque están relacionados, cada uno supone un conocimiento distinto sobre
un modelo: la interpretabilidad nos permite comprender la mecánica de un modelo, mientras que la explicabilidad nos
permite comunicar cómo se generan los resultados de un modelo a partir de un conjunto de parámetros aprendidos. La
explicabilidad implica interpretabilidad, pero lo contrario no siempre es necesariamente cierto. Además de comprender el
proceso de decisión, la interpretabilidad también requiere la identificación del sesgo. La transparencia requiere que las reglas
que utiliza un modelo para producir una predicción sean completas y fáciles de entender [143].

6.1. Importancia de la característica

El principal atractivo detrás de los modelos lineales es la simplicidad de la relación lineal entre las entradas, los
parámetros de peso aprendidos y las salidas. Estos modelos son a menudo interpretables implícitamente, ya que pueden
ponderar naturalmente la influencia de cada característica, y perturbar las entradas o los parámetros aprendidos tiene un
efecto predeterminado (lineal) en las salidas.144]. Sin embargo, las diferentes correlaciones entre múltiples características
pueden dificultar el análisis de la atribución independiente que cada característica tiene en las predicciones resultantes. Hay
muchas formas diferentes de importancia de las características, pero el concepto general es hacer que los parámetros y las
características sean más fácilmente interpretables. Según esta definición, las características exactas de las características
importantes resultantes pueden variar según el objetivo.
En el campo de la interpretabilidad, se hace una distinción entre modelos locales y globales. Mientras que los modelos
locales brindan una explicación solo para un punto de datos específico, que generalmente se entiende más fácilmente, los
modelos globales brindan transparencia al brindar una descripción general del proceso de decisión.143].
CAL [144] es uno de los algoritmos más simples para interpretar modelos no lineales una vez que ya han sido
entrenados (lo que se conoce como post-hoc). Este algoritmo entrena un modelo lineal, conocido como modelo
sustituto, sobre las predicciones de perturbaciones alrededor de un dato específico para aprender la forma de la
función de decisión no lineal alrededor de esa instancia. Al aprender la función de decisión local alrededor de un
único punto, podemos explicar mejor cómo los parámetros del modelo original relacionan las entradas con las
salidas.
A diferencia de LIME, SHAP [145] es un algoritmo post-hoc capaz de explicabilidad global [145] proporcionando
un promedio de todos los puntos de datos. SHAP no es un algoritmo único sino múltiples algoritmos. Lo que une a las
variantes de SHAP es el uso de valores Shapley [146] para determinar la importancia o atribución de una característica
calculando la contribución promedio de cada característica en diferentes predicciones de un modelo. Una biblioteca
SHAP Python (https://github.com/slundberg/shap) proporciona las diferentes variantes, basándose en otros métodos
de atribución de funciones como LIME, gradientes integrados [147] y DeepLift [148] para el agnosticismo modelo.

Específicos para problemas de clasificación de clases múltiples, los competidores lineales independientes del
modelo (MALC) [149] entrena un clasificador lineal separado para conocer el límite de decisión para cada clase y utiliza
el modelo de caja negra ya entrenado solo cuando las predicciones de los competidores lineales son lo
suficientemente confiables. Esta técnica es similar a la clasificación uno contra todos: estos modelos lineales se
usarían durante la inferencia, integrando así la explicabilidad en el proceso de aprendizaje automático,
proporcionando transparencia y atribución de características para aquellas predicciones que se pueden clasificar
utilizando los competidores.
Información2020,11, 193 28 de 44

captum(https://captum.ai) es una biblioteca de Python para explicar modelos en PyTorch con una gran
lista de algoritmos compatibles que incluyen, entre otros, LIME, SHAP, DeepLift y Integrated Gradients.

6.2. Restringir modelos no lineales

Imponer restricciones a la función objetivo en modelos lineales es un enfoque común para aumentar la
discernibilidad y, por tanto, la interpretabilidad, entre los parámetros aprendidos. Por ejemplo, algoritmos como lasso
y ridge utilizan la regularización para mantener los vectores de peso resultantes cerca de cero, lo que hace que las
características importantes sean más inmediatamente discernibles entre sí.
Si bien la regularización puede aumentar la discernibilidad en los modelos lineales, los modelos no lineales
pueden introducir correlaciones entre las variables de entrada, lo que puede dificultar la predicción de la relación de
causa y efecto entre las entradas y las salidas. MonoNet [143] impone la restricción de monotonicidad entre
características y resultados en clasificadores no lineales con el objetivo de una relación más discernible de forma
independiente entre las características y sus resultados. MonoNet es una implementación de red neuronal de esta
restricción, utilizando lo que los autores llaman una red monótona.
Penalización por explicación de descomposición contextual (CDEP) [150] agrega un término del objetivo de optimización
que impone una restricción a los parámetros de una red neuronal para que aprendan a producir buenas explicaciones
además de predecir el valor correcto. En lugar de capturar únicamente las atribuciones de características individuales, este
enfoque también utiliza puntuaciones llamadaspuntuaciones de descomposición contextual[151] para saber cómo se
combinaron las características para realizar cada predicción. El atractivo detrás del CDEP es que el término de restricción se
puede agregar a cualquier objetivo diferenciable.
Restringir un clasificador de redes neuronales para que sea invertible puede permitir interpretabilidad y
explicabilidad. Las redes neuronales reversibles se componen de bloques reversibles apilados y conservan suficiente
información en cada capa para reconstruir la entrada a partir de la salida. Al adjuntar una capa lineal a la capa de
salida de una red neuronal, la restricción de invertibilidad se puede utilizar para aproximar los límites de decisión
locales y construir la importancia de las características.152].

6.3. Lógica y razonamiento

Las puntuaciones de importancia de las características a menudo se construyen a partir del criterio de ganancia de
información y de impureza de Gini en los árboles de decisión, de modo que las divisiones que tienen el mayor impacto en una
predicción se mantienen más cerca de la raíz del árbol. Por este motivo, los árboles de decisión se conocen como modelos de
caja blanca, puesto que ya contienen la información necesaria para su interpretación. Silas [153,154] se basa en este concepto,
extrayendo las fórmulas lógicas de conjuntos de árboles combinando predicados divididos aprendidos a lo largo de caminos
desde la raíz hasta las predicciones en las hojas en conjunciones lógicas y todos los caminos de una clase en disyunciones
lógicas. Estas fórmulas lógicas se pueden analizar con técnicas de razonamiento lógico para proporcionar información sobre
el proceso de toma de decisiones, lo que permite ajustar los modelos para eliminar inconsistencias y hacer cumplir ciertos
requisitos proporcionados por el usuario. Este enfoque pertenece a una categoría conocida como aprendizaje a nivel de
conocimiento [155] porque la estructura interna del modelo entrenado ya imita una expresión lógica.

Si bien los enfoques de aprendizaje profundo dominan el estado del arte para la clasificación de imágenes,
explicar los modelos únicamente con retroalimentación visual, resaltando las regiones de la imagen que condujeron a
la clasificación, deja una tarea de interpretación engorrosa para los humanos. Se ha demostrado que combinar
explicaciones visuales con explicaciones verbales (por ejemplo, incluyendo relaciones entre diferentes objetos dentro
de las imágenes que condujeron a predicciones) es muy eficaz para la interpretación a nivel humano. El algoritmo
LIME es capaz de generar características importantes que pueden resaltar parches de píxeles en imágenes, conocidos
como superpíxeles. Las relaciones espaciales entre los superpíxeles se pueden extraer de sistemas de programación
de lógica inductiva como Aleph para construir un conjunto de expresiones lógicas simples que expliquen verbalmente
las predicciones.156,157].
Información2020,11, 193 29 de 44

6.4. Explicar con visualizaciones interactivas

A menudo resulta útil visualizar las características de los parámetros aprendidos de un modelo y la interpretación de
sus interacciones con un conjunto de datos. La importancia de las características y las puntuaciones de atribución pueden
proporcionar información más útil cuando se analizan de forma visual, exponiendo patrones que de otro modo serían difíciles
de discernir. En la comunidad de aprendizaje automático de Python, Matplotlib [158], nacido en el mar (https://github.com/
seaborn/seaborn), bokeh(https://github.com/bokeh/bokeh), y Altaír [159] se utilizan ampliamente para visualizar datos en
gráficos y gráficos.
Si bien una explicación visual de un clasificador de imágenes puede dar pistas sobre por qué se hizo una única
predicción para que un humano pueda comprender mejor un límite de decisión, las visualizaciones interactivas pueden
permitir la exploración en tiempo real de los parámetros aprendidos del modelo. Esto es especialmente importante para los
modelos de caja negra, como las redes neuronales, para profundizar y comprender lo que se está aprendiendo.
Las herramientas de visualización interactiva como Graphistry y la biblioteca cuDataShader de RAPIDS permiten la
exploración de datos de uso general en GPU. Profundizar en un conjunto de datos puede resultar particularmente útil para
visualizar diferentes partes de modelos de caja negra. Como ejemplo, los vectores de activaciones para cada capa en una red
neuronal se pueden diseñar visualmente para diferentes entradas, lo que permite a los usuarios explorar las relaciones entre
ellas, proporcionando así información sobre lo que está aprendiendo la red neuronal.
Como alternativa a la visualización de datos de propósito general, las herramientas específicas del modelo son
menos flexibles pero brindan información más específica. Cumbre [160] revela asociaciones de características
influyentes en los clasificadores de CNN a través de visualizaciones interactivas y específicas. Se basa en las técnicas
generales devisualización de características[161] yatlas de activación[162], proporcionando vistas en diferentes
granularidades que agregan y resumen información sobre las neuronas más influyentes para cada etiqueta de clase.
Una visualización de grano fino resume las conexiones de las neuronas más influyentes en cada capa de la red,
mientras que una visualización de grano grueso resalta las similitudes de estas neuronas influyentes en todas las
clases agregando la información neuronal y usando UMAP.163], lo último en técnicas de reducción de
dimensionalidad no lineal, para incrustar en un espacio adecuado para la visualización.
El modelo de representaciones de codificador bidireccional de Transformers (BERT) es el estado actual del arte en
modelos de aprendizaje de representación de lenguajes.123], cuyo objetivo es aprender representaciones contextuales de
palabras que pueden usarse en otras tareas. Proviene de una clase de modelos construidos en redes LSTM conocidas como
Transformers, utilizando una estrategia conocida como atención [117] para mejorar el aprendizaje condicionando (prestando
atención a) los diferentes tokens en la secuencia de entrada sobre los otros tokens en la secuencia. Al igual que otros modelos
de aprendizaje profundo de caja negra, un modelo puede tener un alto rendimiento en un conjunto de pruebas determinado,
pero aún tener un sesgo significativo en partes del espacio de parámetros aprendidos. Tampoco se comprende bien qué
propiedades lingüísticas se aprenden con este enfoque. exBERTO [164] proporciona visualizaciones interactivas específicas
que resumen los parámetros aprendidos de manera similar a la Cumbre mencionada anteriormente. exBERT ayuda a llegar a
explicaciones al permitir la exploración interactiva del mecanismo de atención en diferentes capas para diferentes secuencias
de entrada y al proporcionar una búsqueda de vecinos más cercanos de las incorporaciones aprendidas.

6.5. Privacidad

Si bien el aprendizaje automático nos permite impulsar lo último en muchos campos, como el procesamiento del
lenguaje natural [117,124,165,166] y visión por computadora [132,167–169], determinadas aplicaciones involucran datos
sensibles que exigen un tratamiento responsable. Junto a los métodos basados en vecinos más cercanos, que almacenan
conjuntos de entrenamiento completos, los DNN pueden ser particularmente propensos a memorizar información sobre
ejemplos de entrenamiento específicos (en lugar de extraer o aprender patrones generales). La implícita de dicha información
es problemática ya que puede violar la privacidad de un usuario y potencialmente usarse con fines maliciosos. Para brindar
sólidas garantías de privacidad cuando las tecnologías se basan en datos de entrenamiento potencialmente confidenciales,
Google lanzó recientemente TensorFlow Privacy(https://github.com/tensorflow/privacidad) [170], un conjunto de
herramientas para TensorFlow que implementa técnicas basadas en privacidad diferencial. Un marco de privacidad diferencial
ofrece sólidas garantías matemáticas para garantizar que los modelos no recuerden ni aprendan detalles sobre usuarios
específicos [170].
Información2020,11, 193 30 de 44

6.6. Justicia
Si bien el aprendizaje automático permitió el desarrollo de tecnologías asombrosas, un problema importante
que recientemente ha recibido mayor atención es que los conjuntos de datos de entrenamiento pueden reforzar o
reflejar sesgos (humanos) injustos. Por ejemplo, un estudio reciente demostró que los métodos de reconocimiento
facial discriminan según los atributos de raza y género.171]. Google lanzó recientemente un conjunto de
herramientas llamado Indicadores de Equidad (https://github.com/tensorflow/fairness-indicators) que ayudan a
implementar métricas de equidad y visualización para modelos de clasificación. Por ejemplo, Fairness Indicators
implementa métricas bastante comunes para detectar sesgos de equidad, como tasas de falsos negativos y falsos
positivos (incluidos intervalos de confianza), y las aplica a diferentes porciones de un conjunto de datos (por ejemplo,
grupos con características sensibles, como género, nacionalidad e ingresos) [172].
El tema de la explicabilidad y la interpretabilidad está adquiriendo cada vez más importancia a medida que el
aprendizaje automático se generaliza en la industria. Específicamente, a medida que el aprendizaje profundo continúa
superando el desempeño a nivel humano en una lista cada vez mayor de tareas diferentes, también lo será la necesidad de
que sean explicables. Lo que también prevalece en este análisis es la relación simbiótica entre el aprendizaje automático
clásico y el aprendizaje profundo, ya que el primero todavía tiene una gran demanda para el cálculo de características
importantes, el modelado sustituto y el soporte de la visualización de DNN.

7. Aprendizaje adversario

Si bien es un concepto general, el aprendizaje adversario suele explicarse y demostrarse de manera más intuitiva en el contexto
de la visión por computadora y el aprendizaje profundo. Por ejemplo, dada una imagen de entrada, un ataque adversario puede
describirse como la adición de pequeñas perturbaciones, que generalmente son insustanciales o imperceptibles para los humanos, que
pueden engañar a los modelos de aprendizaje automático para que hagan ciertas predicciones (generalmente incorrectas). En el
contexto de engañar a los modelos DNN, el término "ejemplos contradictorios" fue acuñado por Szegedy et al. en 2013 [173]. En el
contexto de la seguridad, el aprendizaje adversario está estrechamente relacionado con la explicabilidad, lo que requiere el análisis de
los parámetros aprendidos de un modelo entrenado para comprender mejor las implicaciones que las asignaciones de características y
los límites de decisión tienen sobre la seguridad del modelo.
Los ataques adversarios pueden tener graves implicaciones en muchas aplicaciones relacionadas con la seguridad, así como en
el mundo físico. Por ejemplo, en 2018, Eykholt et al. demostró que colocar pequeñas pegatinas en las señales de tráfico (aquí: señales
de alto) puede inducir una tasa de clasificación errónea del 100% en entornos de laboratorio y del 85% en una prueba de campo donde
se capturan cuadros de video desde un vehículo en movimiento [174].
Los ataques adversarios pueden ocurrir durante el entrenamiento (ataques de envenenamiento) o en la fase de
predicción (prueba) después del entrenamiento (ataques de evasión). Los ataques de evasión se pueden clasificar además en
ataques de caja blanca y de caja negra. Los ataques de caja blanca suponen un conocimiento total sobre el método y la
arquitectura DNN. En los ataques de caja negra, el atacante no tiene conocimiento sobre cómo funciona el sistema de
aprendizaje automático, excepto qué tipo de datos toma como entrada.
Las bibliotecas basadas en Python para el aprendizaje adversario incluyen Cleverhans [175], caja tonta [
176], ARTE [177], SEC.PROFUNDA [178] y AdvBox [179]. Con la excepción de Cleverhans y FoolBox, todas las
bibliotecas admiten mecanismos de ataque y defensa adversarios; Según la documentación del código de
Cleverhans, los desarrolladores pretenden agregar implementaciones de mecanismos de defensa comunes en
el futuro. Si bien Cleverhans es compatible con TensorFlow y PyTorch, y DEEPSEC solo admite MXNet, FoolBox y
ART admiten los tres principales marcos de aprendizaje profundo antes mencionados. Además, AdvBox, que es
la biblioteca lanzada más recientemente, también agrega soporte para la biblioteca de aprendizaje profundo
PaddlePaddle de Baidu.
Si bien una discusión detallada de la lista exhaustiva de diferentes métodos de defensa y ataque adversario
implementados en estos marcos está fuera del alcance de este artículo de revisión, Tabla1proporciona un resumen de
los métodos admitidos junto con referencias a artículos de investigación para estudios posteriores.
Información2020,11, 193 31 de 44

Tabla 1.Selección de mecanismos de defensa y ataque de evasión que se implementan en kits de herramientas de aprendizaje adversarial.

Tenga en cuenta que ART también implementa métodos para ataques de envenenamiento y extracción (no se muestran).

Cleverhans v3.0.1 FoolBox v2.3.0 ARTE v1.1.0 SEGURIDAD PROFUNDA (2019) AdvBox v0.4.1
Marcos soportados
TensorFlow Sí Sí Sí No Sí
MXnet Sí Sí Sí No Sí
PyTorch No Sí Sí Sí Sí
RemoRemo No No No No Sí
Mecanismos de ataque (evasión)

L-BFGS con restricciones de caja [173 Sí No No Sí No


] Adv. manipulación de repr profunda. [180] Sí No No No No
ZOO [181] No No Sí No No
Método adversarial virtual [182] Sí Sí Sí No No
Parche adversario [183] No No Sí No No
Ataque de transformación espacial [184] No Sí Sí No No
Ataque al árbol de decisión [185] No No Sí No No
FGSM [186] Sí Sí Sí Sí Sí
R+FGSM [187] No No No Sí No
R+LLC [187] No No No Sí No
U-MI-FGSM [188] Sí Sí No Sí No
T-MI-FGSM [188] Sí Sí No Sí No
Método iterativo básico [189] No Sí Sí Sí Sí
LLC/ILLC [189] No Sí No Sí No
Perturbación adversarial universal [190] No No Sí Sí No
tonto profundo [191 Sí Sí Sí Sí Sí
] Newtontonto [192] No Sí Sí No No
Mapa de prominencia jacobiana [193] Sí Sí Sí Sí Sí
CW/CW2 [194] Sí Sí Sí Sí Sí
Descenso de gradiente proyectado [195] Sí No Sí Sí Sí
OptarMargen [196] No No No Sí No
Ataque de red elástica [197] Sí Sí Sí Sí No
Ataque de límites [198] No Sí Sí No No
SaltoSaltoSaltoAtaque [199] Sí Sí Sí No No
MaxConf [200] Sí No No No No
Ataque de inversión [201] Sí Sí No No No
EscasoL1 [202] Sí Sí No No No
SPSA [203] Sí No No No No
HCLU [204] No No Sí No No
ADef [205] No Sí No No No
DDNL2 [206] No Sí No No No
Busqueda local [207 No Sí No No No
] Ataque puntual [208] No Sí No No No
GenAttack [209] No Sí No No No
Mecanismos de defensa

Función de compresión [210] No No Sí No Sí


Suavizado espacial [210] No No Sí No Sí
Suavizado de etiquetas [ No No Sí No Sí
210] Aumento gaussiano [211] No No Sí No Sí
Entrenamiento adversario [195] No No Sí Sí Sí
Codificación del termómetro [212] No No Sí Sí Sí
NA [213] No No No Sí No
Entrenamiento de conjunto adversario [187] No No No Sí No
La destilación como defensa [214] No No No Sí No
Regularización del gradiente de entrada [215] No No No Sí No
Transformaciones de imágenes [216] No No Sí Sí No
Aleatorización [217] No No No Sí No
Defensa de píxeles [218] No No Sí Sí No
Clasificación basada en registros [219] No No No Sí No
Compresión JPEG [220] No No Sí No No

8. Conclusiones

Este artículo revisó algunos de los avances más notables en aprendizaje automático, ciencia de datos y
computación científica. Proporcionó una breve descripción general de los temas principales, mientras
investigaba los diversos desafíos y el estado actual de las soluciones para cada uno. Hay varias áreas de
aplicación e investigación más especializadas que están fuera del alcance de este artículo. Por ejemplo,
arquitecturas Transformer basadas en la atención, junto con herramientas especializadas (https://github.com/
Información2020,11, 193 32 de 44

abrazando cara/transformers), han comenzado recientemente a dominar el subcampo de procesamiento del lenguaje natural del
aprendizaje profundo [117,124].
El aprendizaje profundo de datos gráficos se ha convertido en un área de interés creciente, y las redes
neuronales convolucionales gráficas ahora se aplican activamente en biología computacional para modelar
estructuras moleculares.221]. Las bibliotecas populares en esta área incluyen Graph Nets basadas en TensorFlow [222
] biblioteca y PyTorch Geométrico [223]. El análisis de series de tiempo, que fue notoriamente descuidado en Python,
ha despertado un interés renovado en la forma de la biblioteca escalable StumPy [224]. Otra área descuidada, la
minería de patrones frecuente, recibió cierta atención con implementaciones de Python compatibles con Pandas en
MLxtend [44]. UMAP [163], se ha adoptado ampliamente una nueva biblioteca de extracción de características
compatible con Scikit-learn para visualizar conjuntos de datos de alta dimensión en variedades bidimensionales. Para
mejorar la eficiencia computacional en grandes conjuntos de datos, se incluye en RAPIDS una versión de UMAP
basada en GPU (https://github.com/rapidsai/cuml).
En los últimos años también se ha visto un mayor interés en la programación probabilística, la inferencia
bayesiana y el modelado estadístico en Python. El software notable en esta área incluye PyStan (https://github.com/
stan-dev/pystan) envoltorio de STAN [225], el PyMC3 basado en Theano [226] biblioteca, la Edward [ basada en
TensorFlow227] biblioteca y granada [228], que presenta una API similar a Scikit-learn fácil de usar. Como biblioteca de
nivel inferior para implementar modelos probabilísticos en aprendizaje profundo e investigación de IA, Pyro [229]
proporciona una API de programación probabilística construida sobre PyTorch. NumPyro [230] proporciona un
backend de NumPy para Pyro (utilizando JAX a JIT) para compilar y optimizar la ejecución de operaciones de NumPy
tanto en CPU como en GPU.
Otra dirección futura interesante para el aprendizaje automático es la computación cuántica. La computación
cuántica es un enfoque de la computación basado en la mecánica cuántica. En una computadora clásica, la unidad
básica de información es el bit, que es una variable binaria que puede asumir los estados 0 y 1. En la computación
cuántica, el bit se reemplaza por un bit cuántico (o qubit), que puede existir en superposiciones. (los qubits, en
términos sencillos) pueden tomar un número infinito de valores. El qubit, combinado con otros aspectos de la
mecánica cuántica como el entrelazamiento, ofrece la posibilidad de que las computadoras cuánticas superen a las
computadoras clásicas. En un esfuerzo de colaboración con socios de la industria y el mundo académico, Google lanzó
recientemente TensorFlow Quantum, que es una biblioteca experimental para implementar modelos de aprendizaje
automático basados en computación cuántica.231]. Similar a PennyLane (https://github.com/XanaduAI/PennyLane),
TensorFlow Quantum está dirigido a investigadores para crear y estudiar algoritmos de computación cuántica
simulando una computadora cuántica en una computadora clásica. La simulación de una computadora cuántica en
una computadora clásica es prohibitivamente lenta para las aplicaciones de la computación cuántica en el mundo real;
sin embargo, según un informe de noticias de Google (https://ai.googleblog.com/2020/03/annunciando-tensorflow-
quantum-open.html), las versiones futuras de TensorFlow Quantum podrán ejecutar cálculos en un procesador
cuántico real.
El aprendizaje por refuerzo (RL) es un área de investigación que capacita a agentes para resolver problemas complejos y
desafiantes. Dado que los algoritmos de RL se basan en un enfoque de prueba y error para maximizar las recompensas a
largo plazo, RL es un área del aprendizaje automático que exige recursos particularmente. Además, dado que las tareas que
RL pretende resolver son particularmente desafiantes, RL es difícil de escalar: aprender una serie de pasos para jugar juegos
de mesa o videojuegos, o entrenar a un robot para navegar a través de un entorno complejo, es una tarea inherentemente
más compleja que reconocer un objeto en una imagen. Las redes Q profundas, que son una combinación del algoritmo Q-
learning y el aprendizaje profundo, han estado a la vanguardia de los avances recientes en RL, que incluyen vencer al
campeón mundial jugando al juego de mesa Go [232] y competir con los mejores jugadores de StarCraft II [233]. Dado que la
RL moderna se basa en gran medida en el aprendizaje profundo, la mayoría de las implementaciones utilizan una de las
bibliotecas populares de aprendizaje profundo que se analizan en la Sección5, como PyTorch o TensorFlow. Esperamos ver
avances más sorprendentes gracias a RL en los próximos años. Además, esperamos que los algoritmos utilizados para
entrenar agentes para jugar juegos de mesa o videojuegos puedan usarse en áreas de investigación importantes como el
plegamiento de proteínas, que es una posibilidad explorada actualmente por DeepMind [234]. Al ser un lenguaje fácil de
aprender y usar, Python ha evolucionado hasta convertirse en una lengua franca en muchas áreas de investigación y
aplicación que destacamos en esta revisión. Habilitado por avances
Información2020,11, 193 33 de 44

En la computación con CPU y GPU, así como en comunidades de usuarios y ecosistemas de bibliotecas en constante crecimiento,
esperamos que Python siga siendo el lenguaje dominante para las computadoras científicas durante muchos años.

Contribuciones de autor:Redacción: preparación del borrador original, SR, CN, JP; redacción: revisión y edición, SR,
CN, JP; visualización, CN, SR; supervisión, SR, JP; administración de proyectos, SR; adquisición de financiación, SR Todos
los autores han leído y aceptado la versión publicada del manuscrito.

Fondos:El apoyo para este artículo de revisión fue proporcionado por la Oficina del Vicerrector de Investigación y Educación
de Posgrado de la Universidad de Wisconsin-Madison con financiación de la Wisconsin Alumni Research Foundation.

Expresiones de gratitud:Nos gustaría agradecer a John Zedlewski, Dante Gama Dessavre y Thejaswi Nanditale del
equipo RAPIDS de NVIDIA y a Scott Sievert por sus útiles comentarios sobre el manuscrito.

Conflictos de interés:Los autores declaran no tener ningún conflicto de intereses.

Abreviaturas

En este manuscrito se utilizan las siguientes abreviaturas:


AI Inteligencia artificial Interfaz de
API programación de aplicaciones
diferenciación automática Diferenciación automática
AutoML Aprendizaje automático
BERT Representaciones del codificador bidireccional a partir de la optimización bayesiana
B.O. del modelo Transformers
CDEP Descomposición contextual Explicación Penalización
AA clásico Aprendizaje automático clásico
cnn Red neuronal convolucional Unidad
UPC central de procesamiento
TROZO DE CUERO Gráfico Acíclico Dirigido
DL Aprendizaje profundo

DNN Red neuronal profunda


ETL Extraer traducir carga
Ganar Redes generativas adversarias Máquinas
GBM potenciadoras de gradiente Unidad de
GPU procesamiento de gráficos
HPO Optimización de hiperparámetros
IPC Comunicación entre procesos Justo a
JIT tiempo
LSTM memoria a largo plazo
IPM Interfaz de paso de mensajes

NAS Búsqueda de arquitectura neuronal

NCCL Biblioteca de comunicaciones colectivas de NVIDIA


OPG Un proceso por GPU
PNAS Búsqueda de arquitectura neuronal
rl progresiva Aprendizaje por refuerzo
RNN Red neuronal recurrente Instrucción
SIMT única subproceso múltiple Instrucción
SIMD única datos múltiples Descenso de
SGD gradiente estocástico

Referencias

1. McCulloch, WS; Pitts, W. Un cálculo lógico de las ideas inmanentes a la actividad nerviosa.Toro. Matemáticas. Biofísica. 1943,5,
115-133. [Referencia cruzada]
2. Rosenblatt, F. El perceptrón: un modelo probabilístico para el almacenamiento y organización de la información en el cerebro. Psicólogo. Rdo.
1958,sesenta y cinco, 386. [Referencia cruzada] [PubMed]
3. LeCun, Y.; Bóser, B.; Denker, JS; Henderson, D.; Howard, RE; Hubbard, W.; Jackel, LD Retropropagación aplicada al reconocimiento de
códigos postales escritos a mano.Computación neuronal.1989,1, 541–551. [Referencia cruzada]
Información2020,11, 193 34 de 44

4. Piatetsky, G. Python lidera las 11 principales plataformas de aprendizaje automático y ciencia de datos: tendencias y
análisis. 2019. Disponible en línea:https://www.kdnuggets.com/2019/05/poll-top-data-science-machine-
learningplatforms.html(consultado el 1 de febrero de 2020).
5. Biham, E.; Seberry, J. PyPy: Otra versión de Py.eSTREAM, proyecto de cifrado de flujo ECRYPT. Reps.2006,38, 2006.
6. Desarrolladores, P. ¿Qué tan rápido es PyPy? 2020. Disponible en línea:https://speed.pypy.org(consultado el 1 de febrero de 2020).
7. Equipo, G. El estado del Octoverse 2020. Disponible en línea:https://octoverse.github.com(consultado el 25 de
marzo de 2020).
8. Oliphant, TE Python para informática científica.Computadora. Ciencia. Ing.2007,9, 10–20. [Referencia cruzada]
9. Virtanen, P.; Gommers, R.; Oliphant, TE; Haberland, M.; Reddy, T.; Cournapeau, D.; Burovski, E.; Peterson, P.;
Weckesser, W.; Brillante, J.; et al. SciPy 1.0: Algoritmos fundamentales para la informática científica en Python.
Nat. Métodos2020,17, 261–272. [Referencia cruzada]
10. Mckinney, W. pandas: una biblioteca fundamental de Python para análisis de datos y estadísticas.Alto rendimiento de Python. Ciencia.
Computadora.2011,14, 1–9.
11. Preston-Werner, T. Versionado semántico 2.0.0. 2013. Versionado semántico. Disponible en linea:https://semver. organización/
(consultado el 26 de enero de 2020).
12. Autores, N. NumPy recibe la primera financiación gracias a la Fundación Moore. 2017. Disponible en línea: https://
numfocus.org/blog/numpy-receives-first-ever-funding-thanks-to-moore-foundation(consultado el 1 de febrero
de 2020).
13. Fedotov, A.; Litvinov, V.; Melik-Adamyan, A. Acelerar los cálculos numéricos en Python. 2016. Disponible en línea:
http://russianscdays.org/files/pdf16/26.pdf(consultado el 1 de febrero de 2020).
14. Blackford, LS; Petitet, A.; Pozo, R.; Remington, K.; Whaley, RC; Demmel, J.; Dongarra, J.; Duff, I.; Hammarling, S.; Enrique, G.;
et al. Un conjunto actualizado de subprogramas básicos de álgebra lineal (BLAS).Transmisión ACM. Matemáticas.
Software.2002,28, 135-151.
15. Angerson, E.; Bai, Z.; Dongarra, J.; Greenbaum, A.; McKenney, A.; Du Croz, J.; Hammarling, S.; Demmel, J.; Bischof,
C.; Sorensen, D. LAPACK: Una biblioteca portátil de álgebra lineal para computadoras de alto rendimiento. En
Actas de la Conferencia ACM/IEEE sobre Supercomputación de 1990, Nueva York, NY, EE.UU., 12 a 16 de
noviembre de 1990; págs. 2-11.
16. Equipo, O. OpenBLAS: una biblioteca BLAS optimizada. 2020. Disponible en línea:https://www.openblas.net (consultado el
1 de febrero de 2020).
17. Equipo, I. Python Accelerated (usando Intel© RMKL). 2020. Disponible en línea:https://software.intel.com/en-
nosotros/blogs/python-optimizado(consultado el 1 de febrero de 2020).
18. Diefendorff, K.; Dubey, PK; Hochsprung, R.; Scale, la extensión H. Altivec para PowerPC acelera el procesamiento de
medios.Micro IEEE2000,20, 85–95. [Referencia cruzada]
19. Pedregosa, F.; Michel, V.; Grisel, O.; Blondel, M.; Prettenhofer, P.; Weiss, R.; Vanderplas, J.; Cournapeau, D.;
Pedregosa, F.; Varoquaux, G.; et al. Scikit-learn: aprendizaje automático en Python.J. Mach. Aprender. Res.2011,
12, 2825–2830.
20. Buitinck, L.; Louppe, G.; Blondel, M.; Pedregosa, F.; Mueller, A.; Grisel, O.; Niculae, V.; Prettenhofer, P.; Gramfort, A.;
Grobler, J.; et al. Diseño de API para software de aprendizaje automático: experiencias del proyecto Scikit-learn.
arXiv2013, arXiv:1309.0238.
21. Equipo, I. Usando Intel©RDistribución para Python. 2020. Disponible en línea:https://software.intel.com/en-us/
distribución-para-python(consultado el 1 de febrero de 2020).
22. Decano, J.; Ghemawat, S. MapReduce: Procesamiento de datos simplificado en grandes clústeres.Comunitario. ACM2008, 51,
107-113. [Referencia cruzada]
23. Zaharia, M.; Chowdhury, M.; Das, T.; Dave, A. Conjuntos de datos distribuidos resilientes: una abstracción tolerante a fallas para la
computación en clústeres en memoria. En actas de la novena conferencia USENIX sobre diseño e implementación de sistemas
en red, San José, CA, EE. UU., 25 a 27 de abril de 2012; pag. 2.
24. Rocklin, M. Dask: Computación paralela con algoritmos bloqueados y programación de tareas. En Actas de la 14ª
Conferencia Python in Science, Austin, TX, EE. UU., 6 a 12 de julio de 2015; págs. 130-136.
25. Equipo, AA Apache Arrow: una plataforma de desarrollo en varios idiomas para datos en memoria. 2020. Disponible en
línea:https://arrow.apache.org/(consultado el 1 de febrero de 2020).
26. Equipo, Documentación AP Apache Parquet. 2020. Disponible en línea:https://parquet.apache.org(consultado el 1 de
febrero de 2020).
Información2020,11, 193 35 de 44

27. Zaharia, M.; Xin, RS; Wendell, P.; Das, T.; Armbrust, M.; Dave, A.; Meng, X.; Rosen, J.; Venkataraman, S.; Franklin, MJ; et al.
Apache Spark: un motor unificado para el procesamiento de big data.Comunitario. ACM2016,59, 56–65. [Referencia
cruzada]
28. Desarrolladores, R. Computación distribuida rápida y simple. 2020. Disponible en línea:https://ray.io(consultado el 1 de
febrero de 2020).
29. Desarrolladores, M. Pandas más rápidos, incluso en su computadora portátil. 2020. Disponible en línea:https://
modin.readthedocs.io/ en/latest/#faster-pandas-even-on-your-laptop(consultado el 1 de febrero de 2020).
30. Lemaître, G.; Nogueira, F.; Aridas, CK Imbalanced-learn: una caja de herramientas de Python para abordar la maldición de los conjuntos de datos

desequilibrados en el aprendizaje automático.J. Mach. Aprender. Res.2017,18, 559–563.

31. Galar, M.; Fernández, A.; Barrenechea, E.; Bustince, H.; Herrera, F. Una revisión sobre conjuntos para el problema del desequilibrio
de clases: enfoques basados en embolsado, impulso e híbrido.Traducción IEEE. Sistema. Hombre Cibernético. Parte C (Rev.
Aplic.)2012,42, 463–484. [Referencia cruzada]
32. Raschka, S. Evaluación de modelos, selección de modelos y selección de algoritmos en el aprendizaje automático.arXiv2018,
arXiv:1811.12808.
33. Breiman, L. Predictores de ensacado.Mach. Aprender.1996,24, 123-140.
34. Breiman, L. Bosques aleatorios.Mach. Aprender.2001,45, 5–32. [Referencia cruzada]
35. Freund, Y.; Schapire, RE Una generalización teórica de la toma de decisiones del aprendizaje en línea y una aplicación al impulso. En
Actas de la Conferencia Europea sobre Teoría del Aprendizaje Computacional, Barcelona, España, 13 a 15 de marzo de 1995;
págs. 23–37.
36. Friedman, JH Aproximación de función codiciosa: una máquina de refuerzo de gradiente.Ana. Estadística.2001,29, 1189-1232. [Referencia
cruzada]
37. Zhao, Y.; Wang, X.; Cheng, C.; Ding, X. Combinación de modelos de aprendizaje automático mediante la biblioteca Combo.arXiv
2019, arXiv:1910.07988.
38. Chen, T.; Guestrin, C. XGBoost: un sistema de impulso de árboles escalable. En Actas de la 22ª Conferencia Internacional ACM
SIGKDD sobre Descubrimiento de Conocimiento y Minería de Datos, Nueva York, NY, EE.UU., 13 de agosto de 2016; págs. 785–
794.
39. Ke, G.; Meng, Q.; Finley, T.; Wang, T.; Chen, W.; Mamá, W.; Sí, Q.; Liu, TY LightGBM: Un árbol de decisión que impulsa
gradientes altamente eficiente. En Actas de los avances en sistemas de procesamiento de información neuronal, Long
Beach, CA, EE. UU., 4 a 9 de diciembre de 2017; págs. 3147–3155.
40. Raschka, S.; Mirjalili, V.Aprendizaje automático de Python: aprendizaje automático y aprendizaje profundo con Python, Scikit-learn y
TensorFlow 2; Packt Publishing Ltd.: Birmingham, Reino Unido, 2019.
41. Wolpert, DH Generalización apilada.Red neuronal.1992,5, 241–259. [Referencia cruzada]
42. Alféizar, J.; Takács, G.; Mackey, L.; Lin, D. Apilamiento lineal ponderado por características.arXiv2009, arXiv:0911.0460.
43. Lorbieski, R.; Nassar, SM Impacto de una capa extra en el algoritmo de apilamiento para problemas de clasificación. JCS2018,14,
613–622. [Referencia cruzada]
44. Raschka, S. MLxtend: Proporcionar utilidades y extensiones de aprendizaje automático y ciencia de datos a la pila de computación
científica de Python.J. Software de código abierto.2018,3, 638. [Referencia cruzada]
45. Cruz, RM; Sabourin, R.; Cavalcanti, GD Selección de clasificadores dinámicos: avances recientes y perspectivas. inf. Fusión
2018,41, 195–216. [Referencia cruzada]
46. Deshai, N.; Sekhar, BV; Venkataramana, S. MLlib: Aprendizaje automático en Apache Spark.En t. J. Tecnología reciente.
Ing.2019,8, 45–49.
47. Barker, B. Interfaz de paso de mensajes (MPI). En Actas del taller: Computación de alto rendimiento en Stampede,
Austin, TX, EE. UU., 15 a 20 de noviembre de 2015; Volumen 262.
48. Thornton, C.; Hutter, F.; Hoos, HH; Leyton-Brown, K. Auto-WEKA: Selección combinada y optimización de hiperparámetros
de algoritmos de clasificación. En Actas de la 19.ª Conferencia Internacional ACM SIGKDD sobre Descubrimiento de
Conocimiento y Minería de Datos, Chicago, IL, EE.UU., 11 a 14 de agosto de 2013; págs. 847–855.
49. Feurer, M.; Klein, A.; Eggensperger, K.; Springenberg, JT; Blum, M.; Hutter, F. Auto-sklearn: aprendizaje automático
automatizado eficiente y robusto. EnAprendizaje automático automatizado; Springer: Suiza, Cham, 2019; págs. 113-134.
50. Olson, RS; Moore, JH TPOT: una herramienta de optimización de canalizaciones basada en árboles para automatizar el aprendizaje
automático. EnAprendizaje automático automatizado; Springer: Suiza, Cham, 2019; págs. 151-160.
51. Equipo, HH2O AutoML. 2020. Disponible en línea:http://docs.h2o.ai/h2o/latest-stable/h2o-docs/automl. HTML
(consultado el 1 de febrero de 2020).
Información2020,11, 193 36 de 44

52. Jin, H.; Canción, Q.; Hu, X. Auto-Keras: un sistema de búsqueda de arquitectura neuronal eficiente. En actas de la 25.ª Conferencia
internacional ACM SIGKDD sobre descubrimiento de conocimientos y minería de datos, Dalian, China, 21 a 23 de noviembre de
2019; págs. 1946-1956.
53. Gijsbers, P.; LeDell, E.; Tomás, J.; Poirier, S.; Bischl, B.; Vanschoren, J. Un punto de referencia de AutoML de código abierto.
arXiv2019, arXiv:1907.00909.
54. Feurer, M.; Klein, A.; Eggensperger, K.; Springenberg, JT; Blum, M.; Hutter, F. Aprendizaje automático automatizado
eficiente y robusto. En Actas de los avances en sistemas de procesamiento de información neuronal, Montreal, Canadá,
7 a 12 de diciembre de 2015; págs. 2962-2970.
55. Él, X.; Zhao, K.; Chu, X. AutoML: un estudio del estado del arte.arXiv2019, arXiv:1908.00709.
56. Antoniou, A.; Stokey, A.; Edwards, H. Redes adversativas generativas de aumento de datos.arXiv2017,
arXiv:1711.04340.
57. Arlot, S.; Celisse, A. Un estudio de los procedimientos de validación cruzada para la selección de modelos.Estadística. Sobrevivir.2010,4, 40–79. [Referencia

cruzada]

58. Bergstra, J.; Bengio, Y. Búsqueda aleatoria para optimización de hiperparámetros.J. Mach. Aprender. Res.2012,13, 281–305.
59. Sievert, S.; Augspurger, T.; Rocklin, M. Optimización de hiperparámetros mejor y más rápida con Dask. En Actas de
la 18.ª Conferencia Python in Science, Austin, TX, EE. UU., 8 a 14 de julio de 2019; págs. 118-125.
60. Li, L.; Jamieson, K.; DeSalvo, G.; Rostamizadeh, A.; Talwalkar, A. Hyperband: un nuevo enfoque basado en bandidos para la
optimización de hiperparámetros.J. Mach. Aprender. Res.2018,18, 6765–6816.
61. Snoek, J.; Rippel, O.; Swersky, K.; Kiros, R.; Satish, N.; Sundaram, N.; Patwary, M.; Prabhat, M.; Adams, R. Optimización
bayesiana escalable mediante redes neuronales profundas. En Actas de la Conferencia Internacional sobre Aprendizaje
Automático, Lille, Francia, 6 a 11 de julio de 2015; págs. 2171–2180.
62. Bergstra, JS; Bardenet, R.; Bengio, Y.; Kégl, B. Algoritmos para la optimización de hiperparámetros. EnAvances en los
sistemas de procesamiento de información neuronal 24; Shawe-Taylor, J., Zemel, RS, Bartlett, PL, Pereira, F., Weinberger,
KQ, Eds.; Curran Associates, Inc.: Granada, España, 2011; págs. 2546–2554.
63. Falkner, S.; Klein, A.; Hutter, F. BOHB: Optimización de hiperparámetros robusta y eficiente a escala.arXiv 2018,
arXiv:1807.01774.
64. Zoph, B.; Vasudevan, V.; Shlens, J.; Le, QV Aprendizaje de arquitecturas transferibles para reconocimiento de imágenes escalable. En
actas de la conferencia de la IEEE Computer Society sobre visión por computadora y reconocimiento de patrones,
Salt Lake City, UT, EE. UU., 18 a 22 de junio de 2018; págs. 8697–8710.
65. Real, E.; Aggarwal, A.; Huang, Y.; Le, QV Evolución regularizada para la búsqueda de arquitectura de clasificador de imágenes. En
Actas de la Conferencia AAAI sobre Inteligencia Artificial, Honolulu, Hawaii, EE. UU., 27 de enero a 1 de febrero de 2019; Volumen
33, págs. 4780–4789.
66. Negrinho, R.; Gormley, M.; Gordon, GJ; Patil, D.; Le, N.; Ferreira, D. Hacia la búsqueda de una arquitectura modular y
programable. En Actas de los avances en sistemas de procesamiento de información neuronal, Vancouver, BC, Canadá,
8 a 14 de diciembre de 2019; págs. 13715-13725.
67. Zoph, B.; Le, QV Búsqueda de arquitectura neuronal con aprendizaje por refuerzo.arXiv2016, arXiv:1611.01578.
68. Goldberg, DE; Deb, K. Un análisis comparativo de los esquemas de selección utilizados en algoritmos genéticos. En
Fundamentos de los algoritmos genéticos; Elsevier: Ámsterdam, Países Bajos, 1991; Volumen 1, págs. 69–93.
69. Liu, H.; Simonyan, K.; Vinyals, O.; Fernando, C.; Kavukcuoglu, K. Representaciones jerárquicas para una búsqueda de
arquitectura eficiente. En Actas de la VI Conferencia Internacional sobre Representaciones del Aprendizaje, Vancouver,
BC, Canadá, 30 de abril a 3 de mayo de 2018.
70. Pham, H.; Guan, MI; Zoph, B.; Le, QV; Dean, J. Búsqueda eficiente de arquitectura neuronal mediante el intercambio de parámetros.
En Actas de la 35.ª Conferencia Internacional sobre Aprendizaje Automático, ICML 2018, Viena, Austria, 25 a 31 de julio de 2018;
Volumen 9, págs. 6522–6531.
71. Liu, C.; Zoph, B.; Neumann, M.; Shlens, J.; Hua, W.; Li, LJ; Fei-Fei, L.; Yuille, A.; Huang, J.; Murphy, K. Búsqueda de arquitectura
neuronal progresiva. EnApuntes de conferencias en informática (incluidas las subseries Apuntes de conferencias sobre
inteligencia artificial y Apuntes de conferencias sobre bioinformática); Springer: Suiza, Cham, 2018; Volumen 11205, págs. 19–35.

72. Kandasamy, K.; Neiswanger, W.; Schneider, J.; Póczos, B.; Xing, EP Búsqueda de arquitectura neuronal con optimización
bayesiana y transporte óptimo. En Actas de los avances en sistemas de procesamiento de información neuronal,
Montreal, QC, Canadá, 3 a 8 de diciembre de 2018; págs. 2016-2025.
73. Liu, H.; Simonyan, K.; Yang, Y. DARDOS: Búsqueda de arquitectura diferenciable. En Actas de la Séptima Conferencia
Internacional sobre Representaciones del Aprendizaje, ICLR 2019, Nueva Orleans, LA, EE. UU., 6 al 9 de mayo de 2019.
Información2020,11, 193 37 de 44

74. Xie, S.; Zheng, H.; Liu, C.; Lin, L. SNAS: Búsqueda de arquitectura neuronal estocástica. En Actas de la Séptima Conferencia
Internacional sobre Representaciones del Aprendizaje, ICLR 2019, Nueva Orleans, LA, EE. UU., 6 al 9 de mayo de 2019.
75. Ghemawat, S.; Gobioff, H.; Leung, ST El sistema de archivos de Google. En Actas del Decimonoveno Simposio ACM sobre
Principios de Sistemas Operativos, Bolton Landing, Nueva York, EE. UU., 19 a 22 de octubre de 2003; págs. 29–43.
76. Decano, J.; Ghemawat, S. MapReduce: Procesamiento de datos simplificado en grandes grupos. En Actas del OSDI'04:
Sexto Simposio sobre Diseño e Implementación de Sistemas Operativos, San Francisco, CA, EE.UU., 6 a 8 de diciembre
de 2004; págs. 137-150.
77. Steinkraus, D.; Dólar, yo; Simard, P. Uso de GPU para algoritmos de aprendizaje automático. En Actas de la Octava
Conferencia Internacional sobre Análisis y Reconocimiento de Documentos (ICDAR'05), Seúl, Corea, 29 de agosto a 1 de
septiembre de 2005; págs. 1115-1120.
78. Cirecsan, D.; Meier, U.; Gambardella, LM; Schmidhuber, J. Las redes neuronales simples, grandes y profundas sobresalen en el
reconocimiento de dígitos escritos a mano.arXiv2010, arXiv:1003.0358 v1.
79. Klöckner, A. PyCuda: Programación de GPU aún más sencilla con Python. En Actas de la GPU Technology Conference,
Berkeley, CA, EE. UU., 20 a 23 de septiembre de 2010.
80. Brereton RG; Lloyd, GR Máquinas de vectores de soporte para clasificación y regresión.Analista2010,135, 230–267. [Referencia
cruzada]
81. Ocsa, A. SQL para marcos de datos de GPU en RAPIDS Aceleración de los flujos de trabajo de ciencia de datos de un extremo a otro
utilizando GPU. En Actas de LatinX in AI Research en ICML 2019, Long Beach, CA, EE. UU., 10 de junio de 2019.
82. Lam, SK; Pitrou, A.; Seibert, S. Numba: un compilador Python JIT basado en LLVM. En Actas del segundo taller
sobre la infraestructura del compilador LLVM en HPC, Austin, TX, EE. UU., 15 de noviembre de 2015.
83. Nishino, R.; Loomis, SHC CuPy: una biblioteca compatible con NumPy para cálculos de GPU NVIDIA. En Actas del taller sobre
sistemas de aprendizaje automático (LearningSys) en la trigésima primera conferencia anual sobre sistemas de procesamiento
de información neuronal (NeurIPS), Long Beach, CA, EE. UU., 4 al 9 de diciembre de 2017.
84. Tokui, S.; Oono, K.; Hido, S.; Clayton, J. Chainer: Un marco de código abierto de próxima generación para el aprendizaje
profundo. En Actas del taller sobre sistemas de aprendizaje automático (LearningSys) en la vigésima novena
conferencia anual sobre sistemas de procesamiento de información neuronal (NeurIPS), Tbilisi, Georgia, 16 a 19 de
octubre de 2015; Volumen 5.
85. Desarrolladores, G. XLA—TensorFlow, compilado. 2017. Disponible en línea:https://developers.googleblog.com/2017/03/
xla-tensorflow-compiled.html(consultado el 1 de febrero de 2020).
86. Frostig, R.; Johnson, MJ; Leary, C. Compilación de programas de aprendizaje automático mediante seguimiento de alto
nivel. En Actas de Systems for Machine Learning, Montreal, QC, Canadá, 4 de diciembre de 2018.
87. Zhang, H.; Si, S.; Hsieh, CJ Aceleración de GPU para impulsar árboles a gran escala.arXiv2017, arXiv:1706.08359.
88. Dünner, C.; Parnell, T.; Sarigiannis, D.; Ioannou, N.; Anghel, A.; Ravi, G.; Kandasamy, M.; Pozidis, H. Snap ML: un marco
jerárquico para el aprendizaje automático. En Actas de la Trigésima Segunda Conferencia sobre Sistemas de
Procesamiento de Información Neural (NeurIPS 2018), Montreal, QC, Canadá, 15 de noviembre de 2018.
89. Johnson, J.; Douzé, M.; Jegou, H. Búsqueda de similitudes a escala de mil millones con GPU. EnTransacciones IEEE sobre Big Data;
Instituto de Ingenieros Eléctricos y Electrónicos Inc.: Piscataway, Nueva Jersey, EE. UU., 2019; pag. 1.
90. Maaten, LVd; Hinton, G. Visualización de datos utilizando t-SNE.J. Mach. Aprender. Res.2008,9, 2579–2605.
91. Chan, DM; Rao, R.; Huang, F.; Canny, JF t-SNE-CUDA: t-SNE acelerado por GPU y sus aplicaciones a datos modernos.
En actas del 30.º Simposio internacional sobre arquitectura informática y computación de alto rendimiento
(SBAC-PAD) de 2018, Lyon, Francia, 24 a 27 de septiembre de 2018; págs. 330–338.
92. Seabold, S.; Perktold, J. Statsmodels: Modelado econométrico y estadístico con Python. En Actas de la novena Conferencia
Python in Science. Scipy, Austin, TX, EE. UU., 28 de junio a 3 de julio de 2010; Volumen 57, pág. 61.
93. Shainer, G.; Ayoub, A.; Luis, P.; Liu, T.; Kagan, M.; Trot, CR; Scantlen, G.; Crozier, PS El desarrollo de Mellanox/NVIDIA
GPUDirect sobre InfiniBand: un nuevo modelo para comunicaciones de GPU a GPU. Computadora. Ciencia. Res.
Desarrollo.2011,26, 267–273. [Referencia cruzada]
94. Potluri, S.; Hamidouche, K.; Venkatesh, A.; Bureddy, D.; Panda, DK Comunicación MPI eficiente entre nodos
utilizando GPUDirect RDMA para clústeres InfiniBand con GPU NVIDIA. En Actas de la 42ª Conferencia
Internacional sobre Procesamiento Paralelo de 2013, Lyon, Francia, 1 a 4 de octubre de 2013; págs. 80–89.
95. Anderson, DP; Cobb, J.; Korpela, E.; Lebofsky, M.; Werthimer, D. informática de Casa SETI@: Un experimento en
recursos públicos.Comunitario. ACM2002,45, 56–61. [Referencia cruzada]
96. Smith, V.; Fuerte, S.; Mac.; Takáč, M.; Jordania, Michigan; Jaggi, M. CoCoA: Un marco general para la optimización
distribuida eficiente en la comunicación.J. Mach. Aprender. Res.2017,18, 8590–8638.
Información2020,11, 193 38 de 44

97. Shamis, P.; Venkata, MG; López, MG; panadero, MB; Hernández, O.; Itigin, Y.; Dubman, M.; Shainer, G.;
Graham, RL; Liss, L.; et al. UCX: un marco de código abierto para API de red HPC y más.
En actas del 23.º Simposio anual del IEEE de 2015 sobre interconexiones de alto rendimiento, Washington, DC, EE. UU.,
26 a 28 de agosto de 2015; págs. 40–43.
98. Rajendran, K. GPU NVIDIA y Apache Spark, One Step Closer 2019. Disponible en línea:https://medio. com/rapids-ai/
nvidia-gpus-y-apache-spark-one-step-closer-2d99e37ac8fd(consultado el 25 de marzo de 2020).
99. LeCun, Y.; Bengio, Y.; Hinton, G. Aprendizaje profundo.Naturaleza2015,521, 436–444. [Referencia cruzada] [PubMed]
100. Raschka, S. Naive Bayes y clasificación de textos I: introducción y teoría.arXiv2014, arXiv:1410.5329.
101. Fisher, RA El uso de múltiples medidas en problemas taxonómicos.Ana. Eugenio.1936,7, 179–188. [Referencia
cruzada]
102. Jia, Y.; Shelhamer, E.; Donahue, J.; Karayev, S.; Largo, J.; Girshick, R.; Guadarrama, S.; Darrell, T. Caffe: Arquitectura
convolucional para una rápida incorporación de funciones. En Actas de la 22.ª conferencia internacional ACM sobre
multimedia, Nueva York, NY, EE. UU., 3 de marzo de 2014; págs. 675–678.
103. Equipo, TTD; Al-Rfou, R.; Alain, G.; Almahairi, A.; Angermueller, C.; Bahdanau, D.; Ballas, N.; Bastien, F.; Bayer, J.;
Belikov, A.; et al. Theano: un marco de Python para el cálculo rápido de expresiones matemáticas. arXiv2016,
arXiv:1605.02688.
104. Abadi, M.; Barham, P.; Chen, J.; Chen, Z.; Davis, A.; Decano, J.; Devin, M.; Ghemawat, S.; Irving, G.; Isard, M.; et al.
Tensorflow: un sistema para el aprendizaje automático a gran escala. En Actas del 12.º Simposio USENIX sobre diseño e
implementación de sistemas operativos OSDI 16), San Diego, CA, EE. UU., 2 a 4 de noviembre de 2016; págs. 265–283.
105. Seide, F.; Agarwal, A. CNTK: kit de herramientas de aprendizaje profundo de código abierto de Microsoft. En Actas de la 22ª
Conferencia Internacional ACM SIGKDD sobre Descubrimiento de Conocimiento y Minería de Datos, Nueva York, NY, EE.UU., 13
de agosto de 2016; págs. 2135–2135.
106. Markham, A.; Jia, Y.Caffe2: marco de aprendizaje profundo portátil de alto rendimiento de Facebook; Corporación
NVIDIA: Santa Clara, CA, EE. UU., 2017.
107. Ma, Y.; Yu, D.; Wu, T.; Wang, H. PaddlePaddle: una plataforma de aprendizaje profundo de código abierto procedente de la
práctica industrial.Frente. Control de datos2019,1, 105–115.
108. Chen, T.; Li, M.; Li, Y.; Lin, M.; Wang, N.; Wang, M.; Xiao, T.; Xu, B.; Zhang, C.; Zhang, Z. MXNet: una biblioteca de
aprendizaje automático flexible y eficiente para sistemas distribuidos heterogéneos.arXiv2015, arXiv:1512.01274.
109. Collobert, R.; Kavukcuoglu, K.; Farabet, C. Torch7: Un entorno similar a matlab para el aprendizaje automático. En
Actas de BigLearn, Taller NeurIPS, Sierra Nevada, España, 16 y 17 de diciembre de 2011.
110. Paszke, A.; Bruto, S.; Chintala, S.; Chanán, G.; Yang, E.; DeVito, Z.; Lin, Z.; Desmaison, A.; Antiga, L.; Lerer, A.
Diferenciación automática en PyTorch. En Actas de Neural Information Processing Systems, Long Beach, CA, EE.
UU., 4 a 9 de diciembre de 2017.
111. Neubig, G.; Dyer, C.; Goldberg, Y.; Matthews, A.; Ammar, W.; Anastasopoulos, A.; Ballesteros, M.; Chiang, D.; Clotiaux, D.;
Cohn, T.; et al. DyNet: el conjunto de herramientas de redes neuronales dinámicas.arXiv2017, arXiv:1701.03980.
112. He, H. The State of Machine Learning Frameworks in 2019. 2019. Disponible en línea:https://thegradient.pub/
state-of-ml-frameworks-2019-pytorch-dominates-research-tensorflow-dominates-industry/(consultado el 1 de
febrero de 2020).
113. Coleman, C.; Narayanan, D.; Kang, D.; Zhao, T.; Zhang, J.; Nardi, L.; Bailis, P.; Olukotun, K.; Ré, C.; Zaharia, M. DAWNBench: Un punto
de referencia y una competencia de aprendizaje profundo de un extremo a otro.Capacitación2017,100, 102.
114. Paszke, A.; Bruto, S.; Massa, F.; Lerer, A.; Bradbury, J.; Chanán, G.; Killeen, T.; Lin, Z.; Gimelshein, N.; Antiga, L.; et al. PyTorch: una
biblioteca de aprendizaje profundo de alto rendimiento y estilo imperativo. En Actas de los avances en sistemas de
procesamiento de información neuronal, Vancouver, BC, Canadá, 8 a 14 de diciembre de 2019; págs. 8024–8035.
115. Rumelhart, DE; Hinton, GE; Williams, RJ Aprendizaje de representaciones mediante errores de retropropagación.Naturaleza 1986,323, 533–
536. [Referencia cruzada]
116. Ioffe, S.; Szegedy, C. Normalización por lotes: acelerar el entrenamiento profundo de la red reduciendo el cambio de covariables
interno.arXiv2015, arXiv:1502.03167.
117. Vaswani, A.; Shazeer, N.; Parmar, N.; Uszkoreit, J.; Jones, L.; Gómez, AN; Kaiser, Ł.; Polosukhin, I. Atención es todo lo que
necesitas. En Actas de los avances en sistemas de procesamiento de información neuronal, Long Beach, CA, EE. UU., 4 a
9 de diciembre de 2017; págs. 5998–6008.
118. Qian, N. Sobre el término de impulso en algoritmos de aprendizaje de descenso de gradiente.Red neuronal.1999,12, 145-151. [Referencia
cruzada]
119. Efrón, B.; Hastie, T.; Johnstone, I.; Tibshirani, R. Regresión de ángulo mínimo.Ana. Estadística.2004,32, 407–499.
Información2020,11, 193 39 de 44

120. Kingma, DP; Ba, J. Adam: Un método para la optimización estocástica.arXiv2014, arXiv:1412.6980.
121. Equipo, T. ¡TensorFlow 2.0 ya está disponible! 2019. Disponible en línea:https://blog.tensorflow.org/2019/09/
tensorflow-20-is-now-available.html(consultado el 1 de febrero de 2020).
122. Harris, E.; Pintor, M.; Hare, J. Torchbearer: una biblioteca de ajuste de modelos para PyTorch.arXiv2018, arXiv:1809.03363.
123. Devlin, J.; Chang, MW; Puerro.; Toutanova, K. Bert: Entrenamiento previo de transformadores bidireccionales profundos para la
comprensión del lenguaje.arXiv2018, arXiv:1810.04805.
124. Radford, A.; Wu, J.; Niño, R.; Luan, D.; Amodei, D.; Sutskever, I. Los modelos lingüísticos son estudiantes
multitarea sin supervisión. 2019. Disponible en línea:https://cdn.openai.com/better-language-models/
language_models_are_unsupervised_multitask_learners.pdf(consultado el 1 de febrero de 2020).
125. Russakovsky, O.; Deng, J.; Su, H.; Krause, J.; Satheesh, S.; Mamá, S.; Huang, Z.; Karpatía, A.; Khosla, A.; Bernstein, M.; et al.
Desafío de reconocimiento visual a gran escala de ImageNet.En t. J. Computación. Vis.2015,115, 211–252. [Referencia
cruzada]
126. Szegedy, C.; Liu, W.; Jia, Y.; Sermanet, P.; Caña, S.; Anguelov, D.; Erhan, D.; Vanhoucke, V.; Rabinovich, A. Profundizando en
las circunvoluciones. En Actas de la Conferencia IEEE sobre visión por computadora y reconocimiento de patrones,
Boston, MA, EE. UU., 7 a 12 de junio de 2015.
127. Hu, J.; Shen, L.; Sun, G. Redes de compresión y excitación. En Actas de la Conferencia IEEE sobre visión por computadora
y reconocimiento de patrones, Salt Lake City, UT, EE. UU., 18-22 de junio de 2018; págs. 7132–7141.
128. Huang, Y. Presentación de GPipe, una biblioteca de código abierto para entrenar de manera eficiente modelos de redes
neuronales a gran escala. 2019. Disponible en línea:https://ai.googleblog.com/2019/03/introduciendo-gpipe-open-
sourcelibrary.html(consultado el 1 de febrero de 2020).
129. Hegde, V.; Usmani, S. Aprendizaje profundo paralelo y distribuido. EnReporte técnico; Universidad de Stanford: Stanford,
CA, EE. UU., 2016.
130. Ben-Nun, T.; Hoefler, T. Desmitificando el aprendizaje profundo paralelo y distribuido: un análisis de concurrencia en profundidad.
Computación ACM. Sobrevivir.2019,52, 1–43. [Referencia cruzada]
131. Huang, Y.; Cheng, Y.; Bapna, A.; Firat, O.; Chen, D.; Chen, M.; Lee, H.; Ngiam, J.; Le, QV; Wu, Y.; et al. GPipe: entrenamiento eficiente
de redes neuronales gigantes mediante paralelismo de canalizaciones. En Actas de los avances en sistemas de procesamiento de
información neuronal, Vancouver, BC, Canadá, 8 a 14 de diciembre de 2019; págs. 103-112.
132. Él, K.; Zhang, X.; Ren, S.; Sun, J. Aprendizaje residual profundo para el reconocimiento de imágenes. En Actas de la Conferencia IEEE sobre
visión por computadora y reconocimiento de patrones, Las Vegas, NV, EE. UU., 27 a 30 de junio de 2016; págs. 770–778.
133. Deng, J.; Dong, W.; Socher, R.; Li, LJ; Li, K.; Fei-Fei, L. ImageNet: una base de datos de imágenes jerárquica a gran escala. En Actas
de la Conferencia IEEE de 2009 sobre visión por computadora y reconocimiento de patrones, Miami, FL, EE. UU., 22 a 24 de junio
de 2009; págs. 248-255.
134. Tan, M.; Le, QV EfficientNet: Repensar el escalado de modelos para redes neuronales convolucionales.arXiv2019,
arXiv:1905.11946.
135. Gupta, S. EfficientNet-EdgeTPU: creación de redes neuronales optimizadas para aceleradores con AutoML. 2020.
Disponible en línea:https://ai.googleblog.com/2019/08/ficientnet-edgetpu-creating.html(consultado el 1 de
febrero de 2020).
136. Choi, J.; Wang, Z.; Venkataramani, S.; Chuang, Yihad Islámica en Palestina; Srinivasan, V.; Gopalakrishnan, K. PACT: Activación de
recorte parametrizada para redes neuronales cuantificadas.arXiv2018, arXiv:1805.06085.
137. Jacob, B.; Kligys, S.; Chen, B.; Zhu, M.; Tang, M.; Howard, A.; Adán, H.; Kalenichenko, D. Cuantización y entrenamiento de redes
neuronales para una inferencia eficiente únicamente aritmética de enteros. En Actas de la Conferencia IEEE sobre visión por
computadora y reconocimiento de patrones, Salt Lake City, UT, EE. UU., 18 a 22 de junio de 2018; págs. 2704–2713.
138. Rastegari, M.; Ordóñez, V.; Redmon, J.; Farhadi, A. XNOR-Net: clasificación de ImageNet utilizando redes neuronales
convolucionales binarias. En Actas de la Conferencia Europea sobre Visión por Computador, Ámsterdam, Países Bajos, 8
a 16 de octubre de 2016; págs. 525–542.
139. Zhang, D.; Yang, J.; Sí, D.; Hua, G. LQ-Nets: Cuantización aprendida para redes neuronales profundas compactas y de alta
precisión. En Actas de la Conferencia Europea sobre Visión por Computador (ECCV), Múnich, Alemania, 8 a 14 de
septiembre de 2018; págs. 365–382.
140. Zhou, A.; Yao, A.; Guo, Y.; Xu, L.; Chen, Y. Cuantización incremental de redes: hacia CNN sin pérdidas con ponderaciones
de baja precisión.arXiv2017, arXiv:1702.03044.
141. Zhou, S.; Wu, Y.; Ni, Z.; Zhou, X.; Wen, H.; Zou, Y. DoReFa-Net: Entrenamiento de redes neuronales convolucionales de bajo ancho
de bits con gradientes de bajo ancho de bits.arXiv2016, arXiv:1606.06160.
Información2020,11, 193 40 de 44

142. Bernstein, J.; Zhao, J.; Azizzadenesheli, K.; Anandkumar, A. signSGD con mayoría de votos es una comunicación eficiente y
tolerante a fallas. En Actas de la Conferencia Internacional sobre Representaciones del Aprendizaje (ICLR) 2019, Nueva
Orleans, LA, EE. UU., 6 al 9 de mayo de 2019.
143. Nguyen, AP; Martínez, MR MonoNet: Hacia modelos interpretables mediante el aprendizaje de características monótonas.
arXiv2019, arXiv:1909.13611.
144. Ribeiro, MT; Singh, S.; Guestrin, C. '¿Por qué debería confiar en ti?' Explicar las predicciones de cualquier clasificador. En
Actas de la 22ª Conferencia Internacional ACM SIGKDD sobre Descubrimiento de Conocimiento y Minería de Datos,
Nueva York, NY, EE.UU., 13 de agosto de 2016; págs. 1135-1144.
145. Lundberg, SM; Lee, SI Un enfoque unificado para interpretar las predicciones de los modelos. EnAvances en los sistemas
de procesamiento de información neuronal 30; Guyon, I., Luxburg, UV, Bengio, S., Wallach, H., Fergus, R., Vishwanathan,
S., Garnett, R., Eds.; Curran Associates, Inc.: Long Beach, CA, EE. UU., 2017; págs. 4765–4774.
146. Shapley, LS Un valor para juegos de n personas.Contribuir. Juegos de teoría1953,2, 307–317.
147. Sundararajan, M.; Taly, A.; Yan, Q. Atribución axiomática para redes profundas. En Actas de la 34.ª Conferencia
Internacional sobre Aprendizaje Automático, Sydney, Australia, 6 a 11 de agosto de 2017; págs. 3319–3328.
148. Shrikumar, A.; Greenside, P.; Kundaje, A. Aprendizaje de características importantes mediante la propagación de diferencias de
activación.arXiv2017, arXiv:1704.02685.
149. Rafique, H.; Wang, T.; Lin, Q. Competidores lineales independientes del modelo: cuando los modelos interpretables compiten y
colaboran con modelos de caja negra.arXiv2019, arXiv:1909.10467.
150. Rieger, L.; Singh, C.; Murdoch, WJ; Yu, B. Las interpretaciones son útiles: explicaciones penalizadoras para alinear las redes
neuronales con el conocimiento previo.arXiv2019, arXiv:1909.13584.
151. Murdoch, WJ; Liu, PJ; Yu, B. Más allá de la importancia de las palabras: descomposición contextual para extraer
interacciones de LSTM.arXiv2018, arXiv:1801.05453.
152. Zhuang, J.; Dvornek, Carolina del Norte; Li, X.; Yang, J.; Duncan, JS Explicación de decisiones e importancia de las características
para redes reversibles.arXiv2019, arXiv:1910.00406.
153. Novia, H.; Hou, Z.; Dong, J.; Dong, JS; Mirjalili, A. Silas: Aprendizaje automático de alto rendimiento,
explicable y verificable.arXiv2019, arXiv:1910.01382.
154. Novia, H.; Dong, J.; Dong, JS; Hóu, Z. Hacia un aprendizaje automático confiable y explicable mediante razonamiento
automatizado. En Actas de la Conferencia Internacional sobre Métodos de Ingeniería Formal, Gold Coast, QLD,
Australia, 12 al 16 de noviembre de 2018; págs. 412–416.
155. Dietterich, TG Aprendizaje a nivel de conocimiento.Mach. Aprender.1986,1, 287–315.
156. Rabold, J.; Siebers, M.; Schmid, U. Explicación de los clasificadores de caja negra con ILP: potenciación de LIME con Aleph
para aproximar decisiones no lineales con reglas relacionales. En Actas de la Conferencia Internacional sobre
Programación Lógica Inductiva, Ferrara, Italia, 12 de abril de 2018; págs. 105-117.
157. Rabold, J.; Deininger, H.; Siebers, M.; Schmid, U. Enriquecimiento visual con explicaciones verbales para conceptos
relacionales, combinando LIME con Aleph.arXiv2019, arXiv:1910.01837.
158. Hunter, JD Matplotlib: un entorno de gráficos 2D.Computadora. Ciencia. Ing.2007,9, 90–95. [Referencia cruzada]
159. VanderPlas, J.; Granger, B.; Heer, J.; Moritz, D.; Wongsuphasawat, K.; Satyanarayan, A.; Lees, E.; Timofeev, I.; galés, B.;
Sievert, S. Altair: visualizaciones estadísticas interactivas para Python.J. Software de código abierto.2018,1, 1–2.
160. Hohman, F.; Parque, H.; Robinson, C.; Chau, Cumbre DHP: Ampliación de la interpretabilidad del aprendizaje profundo mediante la
visualización de resúmenes de activación y atribución.Traducción IEEE. Vis. Computadora. Grafico.2019,26, 1096-1106. [Referencia cruzada]

161. Olá, C.; Mordvintsev, A.; Schubert, L. Visualización de funciones. 2017. Disponible en línea:https://distill.pub/2017/
feature-visualization/(consultado el 1 de febrero de 2020).
162. Carter S. Exploración de redes neuronales con atlas de activación. 2019. Disponible en línea:https://ai.googleblog. com/
2019/03/explorando-redes-neurales.html(consultado el 1 de febrero de 2020).
163. McInnes, L.; Healy, J.; Melville, J. UMAP: Aproximación y proyección de variedades uniformes para reducción de
dimensiones.arXiv2018, arXiv:1802.03426.
164. Hoover, B.; Strobelt, H.; Gehrmann, S. exBERT: Una herramienta de análisis visual para explorar representaciones aprendidas en
modelos de transformadores.arXiv2019, arXiv:1910.05276.
165. Howard, J.; Ruder, S. Ajuste del modelo de lenguaje universal para la clasificación de texto. En Actas de la 56.ª Reunión
Anual de la Asociación de Lingüística Computacional (Volumen 1: Artículos extensos), Melbourne, Australia, 15 a 20 de
julio de 2018; págs. 328–339.
Información2020,11, 193 41 de 44

166. Adiwardana, D.; Luong, MT; Así, RD; Salón, J.; Fiedel, N.; Thoppilan, R.; Yang, Z.; Kulshreshtha, A.; Nemade, G.; Lu,
Y.; et al. Hacia un chatbot de dominio abierto parecido a un humano.arXiv2020, arXiv:2001.09977.
167. Huang, G.; Liu, Z.; Van der Maaten, L.; Weinberger, KQ Redes convolucionales densamente conectadas. En Actas de la
Conferencia IEEE sobre visión por computadora y reconocimiento de patrones, Honolulu, Hawaii, EE. UU., 21 a 26 de
julio de 2017; págs. 4700–4708.
168. Joo, H.; Simón, T.; Sheikh, Y. Captura total: un modelo de deformación 3D para rastrear rostros, manos y cuerpos. En
Actas de la Conferencia IEEE sobre visión por computadora y reconocimiento de patrones, Salt Lake City, UT, EE. UU., 18
a 22 de junio de 2018; págs. 8320–8329.
169. Huang, DA; Nair, S.; Xu, D.; Zhu, Y.; Garg, A.; Fei-Fei, L.; Savarese, S.; Niebles, JC Gráficos de tareas neuronales: generalización a
tareas invisibles a partir de una única demostración en vídeo. En Actas de la Conferencia IEEE sobre visión por computadora y
reconocimiento de patrones, Long Beach, CA, EE. UU., 16 a 20 de junio de 2019; págs. 8565–8574.
170. McMahan, HB; Andrés, G.; Erlingsson, U.; Chien, S.; Mirónov, I.; Papernot, N.; Kairouz, P. Un enfoque general para
agregar privacidad diferencial a los procedimientos de capacitación iterativos.arXiv2018, arXiv:1812.06210.
171. Buolamwini, J.; Gebru, T. Tonos de género: disparidades de precisión interseccionales en la clasificación de género comercial. En
Actas de la Conferencia sobre Equidad, Responsabilidad y Transparencia, Nueva York, NY, EE. UU., 23 y 24 de febrero de 2018;
págs. 77–91.
172. Xu, C.; Doshi, T. Indicadores de equidad: infraestructura escalable para sistemas de aprendizaje automático justos. 2019.
Disponible en línea: https://ai.googleblog.com/2019/12/fairness-indicators-scalable.html(consultado el 1 de febrero de 2020).
173. Szegedy, C.; Zaremba, W.; Sutskever, I.; Bruna, J.; Erhan, D.; Buen compañero, yo; Fergus, R. Propiedades intrigantes de
las redes neuronales.arXiv2013, arXiv:1312.6199.
174. Eykholt, K.; Evtimov, I.; Fernández, E.; Li, B.; Rahmati, A.; Xiao, C.; Prakash, A.; Kohno, T.; Song, D. Ataques robustos del
mundo físico a la clasificación visual del aprendizaje profundo. En Actas de la Conferencia IEEE sobre visión por
computadora y reconocimiento de patrones, Salt Lake City, UT, EE. UU., 18 a 22 de junio de 2018; págs. 1625-1634.
175. Papernot, N.; Carlini, N.; Buen compañero, yo; Feinman, R.; Faghri, F.; Matyasko, A.; Hambardzumyan, K.; Juang,
YL; Kurakin, A.; Sheatsley, R.; et al. Cleverhans v2.0.0: una biblioteca de aprendizaje automático adversaria. arXiv
2016, arXiv:1610.00768.
176. Rauber, J.; Brendel, W.; Bethge, M. Foolbox: una caja de herramientas de Python para comparar la solidez de los modelos de
aprendizaje automático.arXiv2017, arXiv:1707.04131.
177. Nicolae, MI; Sinn, M.; Tran, Minnesota; Rawat, A.; Wistuba, M.; Zantedeschi, V.; Baracaldo, N.; Chen, B.; Luis, H.;
Molloy, IM; et al. Caja de herramientas de robustez adversarial v0.4.0.arXiv2018, arXiv:1807.01069.
178. Ling, X.; Ji, S.; Zou, J.; Wang, J.; Wu, C.; Li, B.; Wang, T. Deepsec: Una plataforma uniforme para el análisis de seguridad del
modelo de aprendizaje profundo. En las actas del Simposio IEEE sobre seguridad y privacidad (SP) de 2019,
San Francisco, California, EE. UU., 18 y 19 de mayo de 2019; págs. 673–690.

179. Goodman, D.; Xin, H.; Yang, W.; Yuesheng, W.; Junfeng, X.; Huan, Z. Advbox: una caja de herramientas para generar ejemplos
contradictorios que engañan a las redes neuronales.arXiv2020, arXiv:2001.05574.
180. Sabour, S.; Cao, Y.; Faghri, F.; Fleet, DJ Manipulación adversaria de representaciones profundas.arXiv2015,
arXiv:1511.05122.
181. Chen, PY; Zhang, H.; Sharma, Y.; Yi, J.; Hsieh, CJ ZOO: Ataques de caja negra basados en optimización de orden cero a
redes neuronales profundas sin entrenar modelos sustitutos. En actas del décimo taller de ACM sobre inteligencia
artificial y seguridad, Dallas, TX, EE. UU., 3 de noviembre de 2017; págs. 15-26.
182. Miyato, T.; Maeda, Si; Koyama, M.; Nakae, K.; Ishii, S. Suavizado distributivo con entrenamiento adversario virtual.
arXiv2015, arXiv:1507.00677.
183. Marrón, tuberculosis; Mané, D.; Roy, A.; Abadi, M.; Gilmer, J. Parche adversario. En Actas del Taller NeurIPS, Long
Beach, CA, EE. UU., 4 al 9 de diciembre de 2017.
184. Engstrom, L.; Tran, B.; Tsipras, D.; Schmidt, L.; Madry, A. Explorando el paisaje de la robustez espacial. arXiv
2017, arXiv:1712.02779.
185. Papernot, N.; McDaniel, P.; Goodfellow, I. Transferibilidad en el aprendizaje automático: desde fenómenos hasta ataques de caja
negra utilizando muestras adversas.arXiv2016, arXiv:1605.07277.
186. Goodfellow, IJ; Shlens, J.; Szegedy, C. Explicar y aprovechar ejemplos contradictorios.arXiv2014,
arXiv:1412.6572.
187. Tramér, F.; Kurakin, A.; Papernot, N.; Buen compañero, yo; Boneh, D.; McDaniel, P. Entrenamiento adversarial en
conjunto: ataques y defensas.arXiv2017, arXiv:1705.07204.
Información2020,11, 193 42 de 44

188. Dong, Y.; Liao, F.; Pang, T.; Su, H.; Zhu, J.; Hu, X.; Li, J. Impulsar los ataques adversarios con impulso. En Actas de la
Conferencia IEEE sobre visión por computadora y reconocimiento de patrones, Salt Lake City, UT, EE. UU., 18 a 22 de
junio de 2018; págs. 9185–9193.
189. Kurakin, A.; Buen compañero, yo; Bengio, S. Ejemplos contradictorios en el mundo físico.arXiv2016, arXiv:1607.02533.
190. Moosavi-Dezfooli, SM; Fawzi, A.; Fawzi, O.; Frossard, P. Perturbaciones adversarias universales. En Actas de la Conferencia
IEEE sobre visión por computadora y reconocimiento de patrones, Honolulu, Hawaii, EE. UU., 21 a 26 de julio de 2017;
págs. 1765-1773.
191. Moosavi-Dezfooli, SM; Fawzi, A.; Frossard, P. DeepFool: Un método simple y preciso para engañar a las redes neuronales
profundas. En Actas de la Conferencia IEEE sobre visión por computadora y reconocimiento de patrones, Las Vegas, NV, EE. UU.,
27 a 30 de junio de 2016; págs. 2574–2582.
192. Jang, U.; Wu, X.; Jha, S. Métricas objetivas y algoritmos de descenso de gradiente para ejemplos contradictorios en el
aprendizaje automático. En actas de la 33ª Conferencia Anual sobre Aplicaciones de Seguridad Informática, Orlando,
Florida, EE. UU., 4 a 8 de diciembre de 2017; págs. 262-277.

193. Papernot, N.; McDaniel, P.; Jha, S.; Fredrikson, M.; Celik, ZB; Swami, A. Las limitaciones del aprendizaje profundo
en entornos adversarios. En Actas del simposio europeo IEEE de 2016 sobre seguridad y privacidad (EuroS&P),
Saarbrücken, Alemania, 21 a 24 de marzo de 2016; págs. 372–387.
194. Carlini, N.; Wagner, D. Hacia la evaluación de la robustez de las redes neuronales. En Actas del Simposio IEEE sobre
Seguridad y Privacidad (sp) de 2017, San José, CA, EE. UU., 25 de mayo de 2017; págs. 39–57.
195. Madry, A.; Makelov, A.; Schmidt, L.; Tsipras, D.; Vladu, A. Hacia modelos de aprendizaje profundo resistentes a
ataques adversarios.arXiv2017, arXiv:1706.06083.
196. Él, W.; Li, B.; Song, D. Análisis de límites de decisión de ejemplos contradictorios. En Actas de la 6.ª Conferencia
Internacional sobre Representaciones del Aprendizaje, ICLR 2018, Vancouver, BC, Canadá, 30 de abril a 3 de mayo de
2018.
197. Chen, PY; Sharma, Y.; Zhang, H.; Yi, J.; Hsieh, CJ EAD: Ataques de red elástica a redes neuronales profundas mediante
ejemplos contradictorios. En Actas de la Trigésima Segunda Conferencia AAAI sobre Inteligencia Artificial, Nueva
Orleans, LA, EE. UU., 2 al 7 de febrero de 2018.
198. Brendel, W.; Rauber, J.; Bethge, M. Ataques adversarios basados en decisiones: ataques confiables contra modelos de
aprendizaje automático de caja negra.arXiv2017, arXiv:1712.04248.
199. Chen, J.; Jordania, Michigan; Wainwright, MJ HopSkipJumpAttack: un ataque basado en decisiones eficiente en consultas.arXiv 2019
,3, arXiv:1904.02144.
200. Goodfellow, I.; Qin, Y.; Berthelot, D. Metodología de evaluación de ataques contra modelos de umbral de confianza. En
Actas de la Conferencia Internacional sobre Representaciones del Aprendizaje, Nueva Orleans, Luisiana, EE. UU., 6 al 9
de mayo de 2019.
201. Hosseini, H.; Xiao, B.; Jaiswal, M.; Poovendran, R. Sobre la limitación de las redes neuronales convolucionales en el
reconocimiento de imágenes negativas. En actas de la 16.ª Conferencia Internacional del IEEE sobre Aplicaciones y
Aprendizaje Automático (ICMLA) de 2017, Cancún, México, 18 a 21 de diciembre de 2017; págs. 352–358.
202. Tramèr, F.; Boneh, D. Entrenamiento adversario y robustez para múltiples perturbaciones. En Actas de los avances en
sistemas de procesamiento de información neuronal, Vancouver, BC, Canadá, 8 a 14 de diciembre de 2019; págs. 5858–
5868.
203. Uesato, J.; O'Donoghue, B.; Oord, AVD; Kohli, P. Riesgo de confrontación y los peligros de evaluar contra ataques
débiles.arXiv2018, arXiv:1802.05666.
204. Grosse, K.; Pfaff, D.; Smith, MT; Backes, M. Las limitaciones de la incertidumbre del modelo en entornos adversarios. arXiv
2018, arXiv:1812.02606.
205. Alaifari, R.; Alberti, GS; Gauksson, T. ADef: Un algoritmo iterativo para construir deformaciones adversas. arXiv
2018, arXiv:1804.07729.
206. Rony, J.; Hafemann, LG; Oliveira, LS; Ayed, IB; Sabourin, R.; Granger, E. Dirección y norma de desacoplamiento para defensas y
ataques adversarios L2 basados en gradientes eficientes. En Actas de la Conferencia IEEE sobre visión por computadora y
reconocimiento de patrones, Long Beach, CA, EE. UU., 16 a 20 de junio de 2019; págs. 4322–4330.
207. Narodytska, N.; Kasiviswanathan, SP Perturbaciones adversas simples de caja negra para redes profundas.arXiv 2016,
arXiv:1612.06299.
208. Schott, L.; Rauber, J.; Bethge, M.; Brendel, W. Hacia el primer modelo de red neuronal adversamente robusto en
MNIST.arXiv2018, arXiv:1805.09190.
Información2020,11, 193 43 de 44

209. Alzantot, M.; Sharma, Y.; Chakraborty, S.; Zhang, H.; Hsieh, CJ; Srivastava, MB GenAttack: Prácticos ataques de
caja negra con optimización sin gradientes. En Actas de la Conferencia sobre Computación Genética y Evolutiva,
Praga, Praga, República Checa, 13 a 17 de julio de 2019; págs. 1111-1119.
210. Xu, W.; Evans, D.; Qi, Y. Expresión de funciones: detección de ejemplos contradictorios en redes neuronales profundas.arXiv 2017,
arXiv:1704.01155.
211. Zantedeschi, V.; Nicolae, MI; Rawat, A. Defensas eficientes contra ataques adversarios. En actas del décimo taller
de ACM sobre inteligencia artificial y seguridad, Dallas, TX, EE. UU., 3 de noviembre de 2017; págs. 39–49.
212. Buckman, J.; Roy, A.; Raffel, C.; Goodfellow, I. Codificación de termómetros: una buena forma de resistir ejemplos contradictorios.
En Actas de la Conferencia Internacional de Investigación sobre Aprendizaje Automático, Vancouver, BC, Canadá, 30 de abril a 3
de mayo de 2018.
213. Kurakin, A.; Buen compañero, yo; Bengio, S. Aprendizaje automático adversario a escala.arXiv2016, arXiv:1611.01236.
214. Papernot, N.; McDaniel, P.; Wu, X.; Jha, S.; Swami, A. La destilación como defensa contra perturbaciones adversas contra
redes neuronales profundas. En Actas del Simposio IEEE sobre Seguridad y Privacidad (SP) de 2016, San José, CA, EE.
UU., 22 a 26 de mayo de 2016; págs. 582–597.
215. Ross, AS; Doshi-Velez, F. Mejora de la robustez adversarial y la interpretabilidad de las redes neuronales profundas mediante la
regularización de sus gradientes de entrada. En Actas de la Trigésima Segunda Conferencia AAAI sobre Inteligencia Artificial,
Nueva Orleans, LA, EE. UU., 2 al 7 de febrero de 2018.
216. Guo, C.; Rana, M.; Cissé, M.; Van Der Maaten, L. Contrarrestar imágenes contradictorias mediante transformaciones de entrada.
arXiv2017, arXiv:1711.00117.
217. Xie, C.; Wang, J.; Zhang, Z.; Ren, Z.; Yuille, A. Mitigar los efectos adversos mediante la aleatorización.arXiv 2017,
arXiv:1711.01991.
218. Canción, Y.; Kim, T.; Nowozin, S.; Ermón, S.; Kushman, N. PixelDefend: Aprovechar los modelos generativos para
comprender y defenderse de ejemplos contradictorios.arXiv2017, arXiv:1710.10766.
219. Cao, X.; Gong, Nueva Zelanda Mitigación de ataques de evasión a redes neuronales profundas mediante clasificación basada en
regiones. En actas de la 33.ª Conferencia anual sobre aplicaciones de seguridad informática, Orlando, FL, EE. UU., 4 a 8 de
diciembre de 2017; págs. 278–287.
220. Das, N.; Shanbhogue, M.; Chen, ST; Hohman, F.; Chen, L.; Kounavis, ME; Chau, DH Mantener alejados a los malos:
proteger y vacunar el aprendizaje profundo con compresión JPEG.arXiv2017, arXiv:1705.02900.
221. Raschka, S.; Kaufman, B. Aprendizaje automático y enfoques basados en IA para el descubrimiento de ligandos bioactivos y el
reconocimiento de ligandos GPCR.arXiv2020, arXiv:2001.06545.
222. Battaglia, PW; Hamrick, JB; Bautista, V.; Sánchez-González, A.; Zambaldi, V.; Malinowski, M.; Tacchetti, A.; Raposo,
D.; Santoro, A.; Faulkner, R.; et al. Sesgos inductivos relacionales, aprendizaje profundo y redes gráficas. arXiv
2018, arXiv:1806.01261.
223. Fey, M.; Lenssen, JE Aprendizaje rápido de representación de gráficos con PyTorch Geométrico.arXiv2019, arXiv:1903.02428.
224. Law, S. STUMPY: una biblioteca Python potente y escalable para la extracción de datos de series temporales.J. Software de código abierto. 2019,4, 1504. [

Referencia cruzada]

225. Carpintero, B.; Gelman, A.; Hoffman, M.; Lee, D.; Goodrich, B.; Betancourt, M.; Brubaker, MA; Li, P.; Riddell, A. Stan: Un
lenguaje de programación probabilístico.J. estadística. Software.2016. [Referencia cruzada]
226. Salvatier, J.; Wiecki, TV; Fonnesbeck, C. Programación probabilística en Python usando PyMC3.Computación entre pares. Ciencia.2016,2016. [
Referencia cruzada]
227. Tran, D.; Kucukelbir, A.; Dieng, AB; Rudolf, M.; Liang, D.; Blei, DM Edward: Una biblioteca para modelos,
inferencias y críticas probabilísticas.arXiv2016, arXiv:1610.09787.
228. Schreiber, J. Pomegranate: Modelado probabilístico rápido y flexible en Python.J. Mach. Aprender. Res.2017, 18,
5992–5997.
229. Bingham, E.; Chen, JP; Jankowiak, M.; Obermeyer, F.; Pradhan, N.; Karaletsos, T.; Singh, R.; Szerlip, P.; Caída de caballos, P.;
Goodman, ND Pyro: Programación probabilística universal profunda.J. Mach. Aprender. Res.2019,20, 973–978.
230. Phan, D.; Pradhan, N.; Jankowiak, M. Efectos componibles para programación probabilística flexible y
acelerada en NumPyro.arXiv2019, arXiv:1912.11554.
231. Broughton, M.; Verdón, G.; McCourt, T.; Martínez, AJ; Yoo, JH; Isakov, SV; Massey, P.; Niu, MI; Halavati, R.;
Peters, E.; et al. TensorFlow Quantum: un marco de software para el aprendizaje automático cuántico.
arXiv2020, arXiv:2003.02989.
Información2020,11, 193 44 de 44

232. Plata, D.; Hubert, T.; Schrittwieser, J.; Antonoglou, I.; Lai, M.; Guez, A.; Lanctot, M.; Sifré, L.; Kumaran, D.; Graepel, T.; et al.
Dominar el ajedrez y el Shogi jugando por uno mismo con un algoritmo general de aprendizaje por refuerzo. arXiv2017,
arXiv:1712.01815.
233. Vinyals, O.; Babuschkin, I.; Czarnecki, WM; Mathieu, M.; Dudzik, A.; Chung, J.; Choi, DH; Powell, R.; Ewalds, T.; Georgiev, P.;
et al. Nivel de gran maestro en StarCraft II utilizando el aprendizaje por refuerzo de múltiples agentes. Naturaleza2019,
575, 350–354. [Referencia cruzada]
234. Quach K. DeepMind deja de jugar juegos con IA y aumenta las apuestas en proteínas con código de aprendizaje
automático. 2018. Disponible en línea:https://www.theregister.co.uk/2018/12/06/deepmind_alphafold_games/
(consultado el 1 de febrero de 2020).

©
c 2020 por los autores. Licenciatario MDPI, Basilea, Suiza. Este artículo es un artículo de
acceso abierto distribuido bajo los términos y condiciones de la licencia Creative Commons
Attribution (CC BY) (http://creativecommons.org/licenses/by/4.0/).

También podría gustarte