Deep Dive 2 Deep Learning
387 subscribers
23 photos
4 videos
333 links
Канал про глубокое машинное обучение: кейсы, новости, открытия и факапы из мира нейросетей и не только
Download Telegram
👻NLP с Deep Learning: 3 перспективных ИИ-стартапа
За последние несколько лет в ИИ-обработке естественного языка подходы на базе глубокого обучения все чаще заменяют классические статистические методы. Самым ярким примером здесь стала нейросеть GPT-3, способная генерировать текст, неотличимый от человеческого, и формировать программный код. Но, это не единственный интересный кейс применения DL к NLP-задачам. Сегодня рассмотрим три разных стартапа: Explosion, Huggingface и John Snow Labs, которые сочетают DL-модели с NLP-подходами.
Explosion – разработчик популярной open-source NLP-библиотеки spaCy, написанной на языках Python и Cython. Она без труда справляется с огромными рабочими нагрузками и идет в ногу с новейшими NLP-технологиями, включая конвейеры на предварительно обученных Transformer-моделях, таких как BERT, с возможностью интеграции PyTorch и TensorFlow. Также Explosion предлагает коммерческий продукт Prodigy, который позволяет создавать выразительные аннотации наборов данных с возможностью создания сценариев, Поддерживая аннотирование изображений, аудио и видео, с Prodigy DS-специалисты могут снизить затраты на создание богатых датасетов и более совершенных DL-моделей.
Huggingface – компания, которая создала библиотеку PyTorch и постоянно выпускает множество Transformer-моделей NLP для разных доменов и языков. Решения Huggingface используется во множестве продуктов, от Grammarly до решений Microsoft, Google и Facebook. А недавно Huggingface выпустил библиотеку Accelerate, которая упрощает обучение больших моделей на множестве распределенных машин.
John Snow Labs продвигает Spark NLP для реализации множества приложений: распознавание именованных сущностей, поиск информации, классификация и анализ настроений с помощью огромного количества DL-моделей и более 400 конвейеров для различных приложений. NLP-модуль использует преимущества масштабирования Apache Spark, что упрощает его распределенное развертывание. Из практических кейсов Spark NLP от John Snow Labs стоит отметить Healthcare AI - управляемую платформу поверх Kubernetes для анализа и исследований в сфере здравоохранения с набором дополнительных пакетов для распознавания и связывания клинических объектов, извлечения медицинских концепций из текста и пр. Здесь же упомянем другой коммерческий продукт - Spark OCR для распознавания текста, который может захватывать области изображения с буквами и выводить их в форматах DICOM и PDF, поддерживая сквозное извлечение именованных сущностей. https://www.infoworld.com/article/3621022/3-ai-startups-revolutionizing-nlp.html
🎲Не только GAN: DL-метод NeRF для генерации трехмерных изображений
Neural Radiance Fields — метод глубокого обучения для генерации изображений любых новых ракурсов для конкретного фотосета. Нейросеть обучается на ограниченном числе фотографий. Широкой публике NERF был представлен на конференции ECCV весной 2020 года. Благодаря включению в вычислительную функцию данных о координатах точки в пространстве, RGB-цветах и вектору направления, NeRF позволяет получить весьма фотореалистичные изображения. Так можно симулировать спекулярные view-dependent отражения на основе пары десятков фотографий с разных углов, чтобы они показывали заметное пересечение областей.
У большинства других методов сканирования и генерации изображений со стандартным рендерингом текстурных Mesh’ей спекуляры получаются не очень хорошо. Это преимущество позволяет с помощью NERF получать новые виды трехмерной сцены с различных ракурсов и высокой детализацией, что актуально для производства рекламных роликов и художественных фильмов, а также научных исследований.
Однако, при всех своих достоинствах фон на фотографии вызывает сильное переобучение нейросети и вносит значительный шум в генерируемую сцену. Эта проблема решается удалением фона на обучающей фотографии. Кроме того, NeRF-модели очень долго обучаются и требуют много аппаратных ресурсов. Для ускорения можно использовать версию NeRF от Google Research с элементами JAX и распараллеливания на нескольких GPU и TPU.
Наконец, главным недостатком является заточенность NERF под конкретную сцену из-за особенностей архитектуры нейросети. Чтобы восстановить непрерывное представление новой сцены, требуется заново тренировать нейросеть на новом наборе фотографий. Хотя сегодня активно ведутся исследования в сторону универсализации этого метода и DS-специалисты ищут способы получения novel views на сценах, которых не было в обучающей выборке.
Больше подробностей про NERF:
https://www.matthewtancik.com/nerf
https://github.com/google-research/google-research/tree/master/jaxnerf
https://habr.com/ru/company/twin3d/blog/569174/
🏂Китайская DL-нейросеть Wu Dao 2.0 превзошла GPT-3
Обученная на китайском и английском языках на 4,9 терабайт изображений и текстов, эта нейросеть от Пекинской AI-академии имеет 1,75 трлн параметров, что в десять раз больше GPT-3 и Google Switch Transformer. Wu Dao 2.0 вышла в июне 2021 года, всего через 3 месяца после выпуска первой версии в марте 2021. В отличие от аналогов, эта DL-нейросеть универсальна: она может генерировать тексты, изображения и предсказывать 3D-структуры белков как AlphaFold, требуя небольшого количества новых данных для решения новых задач. Продуктом уже заинтересовался Xiaomi и другие известные китайские компании: Meituan, Kuaishou и пр.
https://habr.com/ru/news/t/560854/
🔥SeqSNR от Google AI
Хотя многозадачное обучение фиксирует взаимозависимости между разными объектами, его сложно реализовать на практике: совместно выполняемые задачи часто мешают друг другу, вызывая эффект «отрицательной передачи». Исследователи Google AI предлагают смягчить эту проблему с помощью автоматической оптимизации распределения информации между задачами за счет последовательной подсетевой маршрутизацией (SeqSNR, Sequential Sub-Network Routing). SeqSNR – это адаптация временного ряда SNR-архитектуры, которая объединяет уровень глубокого встраивания (Deep Embedding) со слоями рекуррентной нейросети (RNN). Разделяя маршрут распространения данных на несколько модулей, между блоками разных уровней, можно снизить отрицательную передачу и отфильтровать данные. По сути, это означает, что каждая задача использует свой путь в модели.
Ощутимое повышение производительности SeqSNR наблюдается при небольшом количестве обучающих меток. Эта модель была протестирована в прогнозировании клинических исходов у пациентов отделения интенсивной терапии на датасете EHR MIMIC-III, который данные о 36 498 взрослых из 52 038 госпитализаций в клинику Beth Israel Deaconess Medical Center в период с 2001 по 2012 год. https://ai.googleblog.com/2021/07/multi-task-prediction-of-organ.html
🗣AdaShare: глубокое мультизадачное машинное обучение
Многозадачное обучение - открытая и сложная проблема компьютерного зрения. Обычно с глубокими нейросетями используются вручную созданные схемы, которые разделяют все начальные уровни и разветвляются в одной точке или применяются отдельные сети для конкретных задач с дополнительным механизмом совместного использования/слияния фич. Альтернативой этим методам является адаптивный подход к совместному использованию, который решает, что разделять при выполнении каких задач для достижения наилучшей точности распознавания с учетом эффективности использования ресурсов. Основная идея подхода в том, чтобы изучить шаблон совместного использования с помощью политики для конкретной задачи, которая выборочно выбирает, какие уровни выполнять для нее в многозадачной сети. Оптимизация политики для конкретной задачи выполняется вместе с весами сети, используя стандартное обратное распространение. Такой дифференцированный подход к эффективному многозадачному обучению позволяет получить единую сеть, которая поддерживает отдельные пути выполнения для разных задач.
На практике это актуально для беспилотных автомобилей, где нужно выполнять несколько задач в режиме реального времени, например, обнаружение объектов и оценку глубины. Метод реализован в модели AdaShare, представленной на конференции NeurIPS 2020 и вызвавший широкой интерес профессионального DS-сообщества.
https://github.com/sunxm2357/AdaShare
https://pythonrepo.com/repo/sunxm2357-AdaShare-python-deep-learning
🎯Универсальное ИИ-решение от DeepMind
Компания DeepMind, специализирующаяся на глубоком обучении, планирует разработать многоцелевую AI-архитектуру, которая сможет обрабатывать все типы данных, решая любые задачи: от распознавания образов до синтеза текстов. Поэтому в 2021 году на международной ML-конференции ICML сотрудники DeepMind представили Perceiver - архитектуру общего назначения на базе Transformer, которая способна обрабатывать данные: изображения, облака точек, аудио, видео и их комбинации. Но Perceiver ограничен задачами с простыми выходными данными, такими как классификация. Чтобы снять эти ограничения, проект получил развитие в виде Perceiver IO - более общая версия архитектуры Perceiver, которая может выдавать широкий спектр выходных данных из множества различных входных данных. Благодаря этому Perceiver IO можно применять к различным областям реального мира, используя в NLP, CV, мультимодальном понимании и сложных играх, например, StarCraft II.
https://deepmind.com/blog/article/building-architectures-that-can-handle-the-worlds-data
https://arxiv.org/abs/2107.14795
https://github.com/deepmind/deepmind-research/tree/master/perceiver
Forwarded from Big Data Science [RU]
⚡️ Ситимобил запускает митапы о применении Data Science в городских и геосервисах, логистике и технологиях умных городов - Citymobil Data Meetup.
Первый митап состоится 12 августа в 18:00, онлайн.
Звездный состав спикеров с очень интересными темами:
🚕 Артём Солоухин (Product Owner Surge Pricing в Ситимобил) поделится своими знаниями о «Switchback-экспериментах и сетевом эффекте»
🏢 Андрей Критилин (Руководитель центра моделирования ЦИАН) расскажет о «Работе с географически неоднородными данными в моделях онлайн-оценки»
🚖 Фёдор Лаврентьев (Head of Internal Efficiency в Yandex Go) выступит с докладом «Границы Москвы: эволюция географии в отчетности Яндекс Такси»
После докладов будет дискуссия со спикерами в которой смогут принять участия слушатели.
Ведущий мероприятия – Алексей Чернобровов.
❗️Регистрация по ссылке: https://citymobil.timepad.ru/event/1730682/
🥁2 датасета разговорного NLP от Google AI
Главная проблема обработки естественного языка – это создание диалоговых агентов, которые могут понимать реальную речь живых людей, которые не всегда заранее обдумывают, что именно они собираются сказать. Естественная беседа прерывается междометиями, повторами и исправлениями, а также более сложными семантическими отклонениями, когда изменяется основное значение фразы. Еще понимание разговора часто требует знания временных отношений, когда одно событие предшествует другому или следует за ним. Большинство современных разговорных агентов NLP часто сталкиваются с трудностями при обработке таких данных. Отчасти это связано с отсутствием тренировочных датасетов, включающих разговорную речь.
Поэтому GooGle AI в августе 2021 представил TimeDial и Disfl-QA:
TimeDial предназначен для понимания времени с аннотированным тестовым набором из более чем 1,1 тысяч диалогов;
Disfl-QA - первый датасет, содержащий контекстные неточности в настройке поиска информации, а именно ответы на вопросы в отрывках из Википедии, с примерно 12 тысячами неудобных вопросов, аннотированных людьми.
Эти наборы данных тестов являются первыми в своем роде и демонстрируют значительный разрыв между производительностью человека и современными моделями НЛП.
https://ai.googleblog.com/2021/08/two-new-datasets-for-conversational-nlp.html
Глубокое обучение и голография в медицинских исследованиях
Группа ученых из Калифорнийского университета Лос-Анджелеса разработала быстрый и экономичный датчик агглютинации частиц на базе голографической визуализации и глубокого обучения. Одноразовые капиллярные устройства позволяют анализировать реакцию агглютинации менее чем за 2 цента. Мобильный и недорогой голографический микроскоп снимает этот процесс, наблюдая за процессом кластеризации частиц в течение 3 минут. Созданный мини-фильм быстро обрабатывается обученными DL-нейросетями для автоматического измерения целевой концентрации аналита в образце. Это позволяет быстро и дешево определять антигены для выявления множества заболеваний.
https://phys.org/news/2021-08-deep-holography-point-of-care-sensor.html
☀️TensorFlow Lite – DL-платформа, не требовательная к аппаратным ресурсам
Эта open-source среда глубокого обучения адаптирована к небольшим вычислительным устройствам с малым размером. Она помогает разработчикам запускать свои ML-модели на совместимом оборудовании и устройствах IoT. Необходимо выбрать подходящую модель в зависимости от варианта использования. Платформа также позволяет переобучить существующую модель на настраиваемом наборе данных и является совместимой с TensorFlow. Настройка параметров оптимизации и квантования позволяет уменьшить размер модели и время ожидания. TensorFlow Lite поддерживает несколько платформ, включая мобильные телефоны Android и iOS , встроенный Linux и микроконтроллеры, позволяя разрабатывать ML-программы на Java, Swift, Objective-C, C ++ и Python. https://www.tensorflow.org/lite
💨Не только AlphaFold: альтернатива от ученых Вашингтонского университета
RoseTTAFold – нейросеть предсказания структуры белка, разработанная исследователями University of Washington. Как и AlphaFold2, она представляет собой сложную многослойную нейронную сеть, которая выводит предсказанные трехмерные структуры белка по заданной последовательности аминокислот. Поскольку компания Deep Mind, которой принадлежит авторство AlphaFold2, летом 2021 года открыла ее код на Github, разработчики RoseTTAFold тоже позволяют всем заглянуть под капот своей модели, разместив предпринт на Biorxiv https://www.biorxiv.org/content/10.1101/2021.06.14.448402v1
Интересно, что RoseTTAFold с AlphaFold с самого начала шли «ноздря в ноздрю», соревнуясь в производительности и качестве DL-моделей. https://www.wired.com/story/without-code-for-deepminds-protein-ai-this-lab-wrote-its-own/
Forwarded from Big Data Science [RU]
🚀Компания ATF Media (https://t.me/atflife ) решила сделать визионерский проект в помощь всем разработчикам продуктов на ИИ.

Запускается международный каталог продуктов, реализованных на искусственном интеллекте TopAI.me
Каталог будет рассылаться в более чем 25000 крупнейших компаний, правительствам стран, венчурным фондам.
В каталоге представлены решения из разных сфер разработки искусственного интеллекта.
Если вы являетесь разработчиками в сфере ИИ, наш каталог будет полезен вам для поиска инвесторов и интересных сотрудничеств.
Если вы являетесь инвестором и в поиске проектов, то наш каталог будет полезен вам для поиска новых инструментов для инвестирования и внедрения.

Отбор проектов по модерации.
P.S. Регистрация на TopAI занимает 20 секунд.
🚀Краткий ликбез по функциям активации DL-нейросетей
В нейросетях функция активации действует как (нелинейный) активатор нейрона на следующем сетевом уровне после учета смещения и весовых коэффициентов, позволяя DL-сети изучать многомерные сложные данные, а не просто выводить линейную комбинацию входов. Для глубоких нейросетей, например, сверточных (CNN), чаще всего применяются нелинейные функции активации: Sigmoid, ReLU и Softmax.
В частности, сигмоида используется для масштабирования выходного сигнала от 0 до 1 и отлично подходит для двоичной классификации с одним выходным блоком или даже с несколькими метками, когда каждое наблюдение может принадлежать более чем одному классу. А вот Softmax требует, чтобы входные данные принадлежали только одному классу. Обычно Softmax используется на конечном выходном слое. Ее главный недостаток – это высокие вычислительные затраты, а также проблемы с градиентами.
ReLU (Rectified Linear Unit) определяется как нулевое значение для отрицательного входа и равное входу для нулевого или положительного числа. Поскольку ReLU возвращает ноль для любого отрицательного входного сигнала, это может привести к остановке или зависанию активации ReLU в процессе обучения при обратном распространении сигнала. Из-за этого градиенты активации равны нулю, а нейроны с этой функцией активации не будут обновлять свои параметры (смещения и веса). ReLU обычно применяется в скрытых слоях нейросети. Утранить недостатки этой функции активации можно с помощью Leaky ReLU, которая допускает небольшое отрицательное число, пропорциональное входу, вместо нуля. Функции на основе ReLU считаются более надежными для глубоких сетевых уровней из-за стабильного обучения, однако склонны к неограниченному возрастанию, что выводит из строя узел нейросети.
Решить проблемы расходящихся градиентов и переобучения нейросети поможет простой, но мощный метод пакетной нормализации. Например, расширение ReLU6 ограничивает активацию этой функции выше заданного положительного порога. Однако, на практике оно используется нечасто. https://ai.plainenglish.io/my-notes-on-deep-learning-activation-functions-9d89cd326488
функции активации нейросетей
🤜🏻ТОП-5 достоинств TensorFlow
TensorFlow - это ML-платформа с открытым исходным кодом, созданная в 2015 году DL-исследователями Google. В этом фреймворке Python выступает в качестве интерфейсного API для создания приложений, транслируя их код C ++. В 2019 году вышел TensorFlow 2.0, который включает Keras API для обучения моделей. Основными преимуществами TensorFlow являются следующие:
• Многофункциональность: множество различных инструментов, библиотек и пользовательских ресурсов
• Переносимость: обучайте и развертывайте ML-модели независимо от языка и платформы
• Мощь: создавайте сложные топологии c Keras Functional API и API подклассов моделей
• Быстрая и интуитивно понятная отладка
• Несколько уровней абстракции для любых пользовательских потребностей
Наконец, TensorFlow имеет большое и активное сообщество ML-профессионалов, которое способствует развитию и популяризации этого фреймворка.
😎Что такое TensorFlow.js?
TensorFlow.js (TFJS) - это ML-библиотека с открытым исходным кодом, которую можно запускать с JavaScript. TFJS поддерживает WebGL – интерфейс браузера для OpenGL, который представляет собой API для рендеринга 2D и 3D векторной графики. TensorFlow.js обеспечивает возможности TensorFlow для экосистемы JavaScript, позволяя выполнять JS-код на графическом процессоре. Так можно создавать глубокие нейросети, которые легко интегрировать в веб-приложения, используя API Keras.
Запустить TensorFlow.js можно на следующих платформах:
• На стороне клиента в веб-браузере с использованием JavaScript
• На стороне сервера и с инструментами IoT с использованием Node.js
• Настольные и веб-приложения с использованием Electron
• Нативные мобильные приложения с использованием React Native
• Модели TensorFlow.js
TensorFlow.js предоставляет предварительно обученные готовые ML-модели, которые можно использовать в реальных проектах:
• Классификация изображений
• Обнаружение объекта
• Сегментация тела
• Распознавание речевых команд
• Простое распознавание лиц
• Трансферное обучение
👁Сверточные нейросети (CNN): краткий ликбез
CNN активно используются в задачах компьютерного зрения и распознавания образов: детекция объекта, классификация, реконструкция и пр.
Сверточная нейронная сеть (ConvNet) использует математическую операцию свертки, чтобы объединить два набора данных. В случае CNN свертка применяется к входным данным для фильтрации информации и создания карты признаков. При этом часто применяются следующие методы:
• Padding расширяет входную матрицу, добавляя поддельные пиксели к ее границам, т.к. свертка уменьшает размер матрицы.
• Striding – шаг, позволяющий пропускать некоторые области, например, каждые 2 или 3 пикселя, чтобы снизить размер пространства и сделать нейросеть более эффективной с точки зрения вычислений.

Архитектура ConvNet включает три уровня:
• Сверточный слой отвечает за распознавание элементов в пикселях
• Слой объединения отвечает за то, чтобы сделать эти функции более абстрактными
• Полносвязный слой отвечает за использование приобретенных функций для прогнозирования.

Достоинства CNN:
• Высокая адаптивность к новым задачам – CNN не требуют ручного feature-инжиниринга: даже при работе над совершенно новой задачей можно использовать предварительно обученную нейросеть и, передавая ей данные, корректировать веса;
• вычислительная эффективность благодаря процедуре свертки. CNN применяет совместное использование параметров и уменьшение размерности, упрощая и ускоряя развертывание моделей. Эти нейросети можно оптимизировать для работы на любом устройстве, даже на смартфонах.
• высокая точность в задачах, связанных с распознаванием изображений и видео и пр. по сравнению с другими нейросетями.

Однако, ConvNet не идеальна и имеет следующие недостатки:
• подверженность состязательным атакам, когда подача «плохих» примеров вызывает ошибки классификации. Даже небольшой сдвиг в пикселях может свести CNN с ума, изменив смысл дорожного знака или обманув систему распознавания лиц.
• Необходим огромный объем обучающих данных, которые нужно собрать и предварительно обработать.
Поэтому при всем современном техническом прогрессе сегодня существует всего несколько хороших предварительно обученных моделей: GoogleNet, VGG, Inception, AlexNet, большинство из которых принадлежит глобальным корпорациям с огромной ИИ-экспертизой.

https://ai.plainenglish.io/introduction-to-convolutional-neural-networks-cnns-2ab209f4fa16
🤦🏼‍♀️Переобучение в DL и как с ним бороться: 2 простых метода
В статистике переобучение - это ошибка моделирования, которая возникает, когда функция слишком тесно связана с ограниченным набором точек данных и не может соответствовать дополнительным данным или прогнозировать будущие наблюдения. Это случается, если модель слишком сложна или чрезмерно долго обучается на одних данных: она начинает соответствовать шуму и в итоге не может предсказать общую тенденцию, запоминает обучающие примеры вместо того, чтобы делать обобщения. Бороться с этим помогают следующие методы:
Исключение слоев из нейросети. В процессе обучения DL-сеть может зависеть от некоторых весов в скрытых слоях и игнорировать остальные. В результате сеть будет идеально соответствовать обучающим данным, но выйдет из строя на реальных. Исключение некоторых слоев гарантирует, что результаты обучения распределены по всем нейронам и не слишком сильно зависят от отдельной единицы. Веса отсева определяются случайным образом, чтобы не дать ни одному нейрону преимущества. В результате сеть намного лучше справляется с обобщением данных.
Пакетная нормализация – метод, направленный на предотвращение проблемы расхождения градиентов также помогает решить проблему переобучения. Веса DL-сети могут стать слишком большими, что приведет к экстремальным значениям градиентов, заставив функцию потерь возвращать бесконечные или неопределенные значения. Нормализация масштабирует данные в диапазоне от -1 до +1 или от 0 до +1. Например, для обработки изображений входные каналы обычно масштабируют в диапазоне от -1 до +1 вместо диапазона от 0 до 255. Это приводит к нормализации входного слоя. Но как скрытые слои не нормализуются и из-за случайной инициализации весов процесс обучения сети может вызвать экспоненциальный рост некоторых из них. Если разместить слои пакетной нормализации после других слоев, можно обеспечить плавное обучение. Внутри слоя пакетной нормализации есть два параметра: среднее значение и стандартное отклонение каналов пакетного ввода. Нормализация представляет собой вычитание среднего значения и деления на стандартное отклонение, обеспечивая удержание вывода из предыдущего слоя в рамках нужного диапазона. Важно, что среднее значение и стандартное отклонение не являются обучаемыми параметрами, поскольку они вычисляются во время прямого, а не обратного распространения.
https://ai.plainenglish.io/2-deep-learning-methods-against-overfitting-532710059c5d
😎Что такое конвейер Hugging Face Transformers и какие NLP-задачи он решает
Hugging Face - компания, занимающаяся разработкой NLP-технологий и демократизацией ИИ. Конвейеры ML-трансформеров от Hugging Face представляют собой объекты, которые абстрагируют большую часть сложного кода от библиотеки, предлагая простой API для конкретных MLP-задач:
• Анализ настроений – определение тональности текста с вероятностной оценкой положительных и отрицательных маркеров
• Ответы на вопросы на основе контекстной информации, предоставленной ML-модели
• Генерация текста
• Обобщение текста – формирование краткого описания из большого фрагмента
• Машинный перевод с одного языка на другой
https://huggingface.co/transformers/main_classes/pipelines.html
🏂Почему все GAN-сети работают одинаково, и зачем настраивать гиперпараметры
Генеративные состязательные сети, представляют собой структуру, способную изучать распределение на основе конкуренции между генератором и дискриминатором. Генератор учится генерировать образцы, неотличимые от реальных данных, а дискриминатор учится классифицировать, является ли данное изображение реальным или поддельным. Сегодня GAN-сети считаются мощным инструментом и активно используются в задачах генерации и реконструкции текстов, изображений и пр. При том, что есть множество разных архитектур и видов GAN-сетей, при достаточном гиперпараметрическом поиске почти все алгоритмы имеют случайные ранги, и даже самые последние работы работают аналогично оригинальной GAN, впервые предложенной Яном Гудфеллоу. Бенчмаркинговое сравнение различных GAN-сетей показало, что алгоритмические различия не так актуальны, а вот поиск по гиперпараметрам имеет большее влияние на результат. Однако, оптимальные гиперпараметры во многом зависят от набора данных и настройка гиперпараметров – одна из самых интересных и тонких задач ML-специалиста.
https://medium.com/codex/do-all-gans-perform-the-same-cc02055091af