Machine Learning Explained
828 subscribers
1 photo
30 links
Если вы так же, как и я, не успеваете следить за всем происходящим в ML

machine-learning-explained@yandex.ru
Download Telegram
Channel photo updated
Пока все неистово подбирают параметры, Хинтон пытается разобраться, что там внутри происходит.

Есть такая проблема, мы знаем, что делать, чтобы обучать нейронные сети, но мы не знаем, как именно они обучаются. Да, есть функция, которая оптимизируется во время обучения, но как она связана с конечной моделью, не очень понятно.

Хинтон и команда, не оставляя идею схожести нейросетей со структурой мозга, черпают вдохновение у нейробиологии, которая использует анализ сходства между отделами мозга, между людьми, биологическими видами и типами поведений.

Они предлагают использовать для анализа сходства представлений на скрытых слоях сети новую меру - centered kernel alignment.

По результатам, эта мера находит похожие слои между сетями с одинаковой архитектурой и разными начальными весами с точностью больше 99%, в то время как другие меры даже близко не подобрались к такому показателю. Она также находит связь между слоями сетей с совершенно разной архитектурой или натренированных на разных датасетах.

Что это значит? Что теперь можно сравнивать сети, причём даже с разной архитектурой. Можно находить слишком похожие слои, которые вредят качеству сети. Можно смотреть, какие именно архитектурные решения позволяют улучшить результаты работы сети.
В целом, это приближает нас (точнее их) к теоретическому пониманию устройства сетей и позволяет хоть немного отойти от довольно эмпирического подхода к их тренировке.

https://arxiv.org/pdf/1905.00414.pdf
Почти все о методах оптимизации нейросетей

Серия статей о почти всех используемых в современных библиотеках для нейронных сетей методах оптимизации. Начиная от просто градиентного спуска и заканчивая модификациями Adam, такими как NAdam, AdamNC, AMSGrad.

7 статей, 33 минуты, если верить оценкам medium, но кто же им поверит (умножайте примерно на 4).

1. Gradient Descent and Stochastic Gradient Descent https://bit.ly/2wqdFqM
2. Momentum and Nesterov Accelerated https://bit.ly/2Xiz4Oy
3. Adagrad https://bit.ly/2JLMoHZ
4. Adadelta and RMSProp https://bit.ly/2EFMFIb
5. RMSProp+Momentum and Adam https://bit.ly/2QwwC4r
6. Nadam https://bit.ly/2HLnKVL
7. AMSGrad and AdamNC https://bit.ly/2JSBRuT

А вот почти то же, на русском и с классными гифками https://habr.com/ru/post/318970/.
Говорящие головы из Сколково

Ура! Вот и наши соотечественники попали в СМИ со своими достижениями в области deep learning.

Они научились генерировать видео «говорящей головы» используя несколько или даже одно статическое изображение. Видео генерирует даже ракурсы, не представленные на фото. Это надо просто увидеть (ссылка на видео ниже).

А почитать можно, как они это сделали. До этого требовались видео длиной несколько минут или большой датасет фотографий и много часов обучения на GPU.

Ребята же придумали как сделать мета-обучение, чтобы потом всего на нескольких фото за несколько тренировочных шагов обучить модель под конкретного человека.

Их сеть показала отличные результаты при проверке на живых людях. Людям показывали 3 статических изображения одного человека, нужно угадать, где фейк.
Их лучшая модель показала результат 33%, то есть люди не догадались, где фейк и выбирали наугад.

Дальше немного о том, как.
Основа модели - генеративно-состязательная сеть(Generative adversarial network - GAN), которая состоит из 2х частей: генератора и дискриминатора. Они обучаются так: генератор создает изображения, а дискриминатор пытается отличить фейк от реального. Причем вывод дискриминатора используется для обновления весов генератора. Получается своего рода соревнование.

Их модель в итоге состоит из трех сетей: embedder, генератор и дискриминатор.

1. Embedder учится из исходного изображения и позы (landmark image, получен отдельным методом) получать вектор, который содержит информацию об индивидуальных чертах человека, независимо от позы и мимики.
2. Генератор, используя этот вектор и новую позу, генерирует фейковое изображение.
3. Дискриминатор, используя фейковое изображение и позу определяет насколько оно реалистично и соответствует позе.

Получается, большая часть уникальной информации о человеке содержится в сети embedder. Значит, чтобы генерировать изображения нового человека, нужно переобучить только эту сеть и немного дообучить (fine-tune) генератор и дискриминатор.

Саму идею иметь отдельный embedder позаимствовали из пары работ по генерации речи. Поменяли область использования, добавили состязательный (adversarial) компонент, поколдовали и вуаля.

https://arxiv.org/pdf/1905.08233.pdf
Кросс-валидация для временных рядов

7-минутная статья о том, как разбивать данные на train-validation-test сеты, если данные - это временные ряды.

Вкратце, разбивать надо вдоль оси времени. То есть, тренировочные данные идут хронологически до валидационных. Валидационные до тестовых. Потому что модель не должна иметь никакую информацию о будущем.

В статье есть очень понятные картинки о том, как именно разбивать.
Кроме этого в scikit-learn есть класс TimeSeriesSplit, но он разбивает только на train-test, валидацию все равно делать самим.

Статья: https://towardsdatascience.com/time-series-nested-cross-validation-76adba623eb9

TimeSeriesSplit: https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.TimeSeriesSplit.html
​​Халявные знания

Вот и закончились 2 соревнования на Kaggle, проводимые в рамках международной конференции CVPR: Google Landmark Recognition and Google Landmark Retrieval.

Суть их была в том, чтобы научиться распознавать достопримечательности на картинках.
То есть в первом соревновании (Recognition) надо было по фотографии Эйфелевой башни сказать, что это именно она. А во втором (Retrieval), имея фотографию Эйфелевой башни, найти из базы все остальные фотографии с ней.

Датасет при этом в обоих случаях был огромен, порядка 500 гигов и 4 миллиона фотографий для Recognition и 85 гигов и 760 тысяч в базе для Retrieval.

Круто то, что по правилам этих соревнований, призеры должны теперь запостить статью на arXiv с подробным описанием подхода.
А чтобы получить свой денежный приз нужно еще и в opensource выложить код.
Вот такое счастье всем, даром.
https://www.kaggle.com/c/landmark-recognition-2019/discussion/94514#latest-543946
https://www.kaggle.com/c/landmark-retrieval-2019/discussion/94515#latest-543948
Два в одном

Иллюстративная статья о том, как подружить автоэнкодеры и GAN и получить инструмент, который решает 2 задачи: кластеризации и поиска аномалий. И все это для временных рядов.

Напомню, что автоэнкодеры учатся представлять данные в компактном виде, а потом восстанавливать из него. Состоят из 2х частей: энкодер и декодер.

А GAN - generative adversarial network состоит также из двух частей: генератор и дискриминатор. Во время обучения они соревнуются таким образом: генератор пытается генерировать данные, подобные реальным, а дискриминатор пытается отличить сгенерированные и реальные.

Так вот декодер (2ая часть autoencoder) выступает здесь генератором (1ая часть GAN). Состоит он из двух слоев bidirectional LSTM.

Идея не нова, оригинальная статья еще из 2015 года (от людей из University of Toronto, Google Brain и OpenAI).

Конкретно в этой статье очень понятный код на Keras, подробное вступление, из которого можно понять-вспомнить основы этих сетей и в качестве данных взяты не изображения MNIST, a я данные обменного курса EUR-USD.

Ссылка отсюда
​​Вложенные капсульные сети
Свежачок прямо от команды Хинтона.
Вдохновились они идеей о том, что люди, в отличие от нейросетей, учатся распознавать объекты почти сами и не используют такое большое количество картинок для обучения, как нейронки.


Поэтому поменяли подход с попиксельной обработки изображений на обработки с помощью "капсул".
Капсула - это часть модели, которая описывает абстрактную сущность.


В данном случае используется 2 типа капсул: для объектов и для их частей. То есть часть - это какой-то простой элемент, который может встречаться в разных объектах. А объект это что-то уникальное, состоящее из частей.
Набор и размещение объектов и определяют изображение.


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


Обе части сети - это автоэнкодеры, то есть сначала они представляют входную информацию, например изображение, в определенном сжатом виде, а потом могут из него восстановить эту информацию.

Так вот на вход первой подсети подается изображение, а сжатый вид - это вектор, описывающий наличие частей и их позу.
Для второй подсети на вход подается вектор из первой подсети, а получается сжатый вектор, описывающий набор объектов, их вид и позу.
Вот этот вектор и есть представление изображение, которое можно использовать для кластеризации/классификации.

Пока всё очень сырое, работает на датасете MNIST и SVHN (the Street View House Numbers). На CIFAR пишут не очень работает.
Вот как всё это примерно выглядит
Два убийцы Берта


Недавно вышли две статьи, которые представляют модели, работающие лучше предыдущего state-of-the-art в области обработки естественного языка BERT.
Эти модели: XLNet и SpanBERT (все ссылки в конце).


BERT
Для начала про BERT. Эта технология предобучения. То есть она использует существующую архитектуру нейросети и из нового вносит только саму технику обучения.
Использована может быть для решения очень многих задач, таких как построение систем вопрос-ответ, генерация текста, анализ тональности.


Архитектура сети, которую использует BERT, называется Transformer. Она была представлена в статье "Attention is all you need". Это sequence-to-sequence модель, то есть на входе и на выходе - последовательности. При этом она не использует рекуррентные структуры типа RNN и LSTM. Вместо этого она полностью основывается на механизме attention. Этот механизм позволяет определять какие части входной последовательности важны для решения задачи, то есть использует информацию из всей входной последовательности, а не только запомненную внутри сети.


BERT использует эту архитектуру с добавлением направления справа-налево, то есть позволяя сети "видеть" последующие входящие значения. Поэтому и называется Bidirectional Encoder Representations from Transformers.


Основной же интерес представляет сам способ тренировки сети. Она тренируется на двух задачах: восстановления слова, замененного на символ [MASK] и предсказания, является ли второе предложение продолжением первого (masked language model и next sentence prediction).


Предобучив модель таким образом, можно использовать её на очень многих задачах, которые подразумевают на входе последовательность или две последовательности (как, например, система вопрос-ответ). Дообучение при этом происходит естественно гораздо быстрее-дешевле, чем с нуля.


XLNet
Использует другой тип сети Transformer под названием TransformerXL (eXtra-Large). Этот трансформер как раз не отказывается полностью от рекуррентной части и за счёт этого обучается более длинным зависимостям между словами-токенами.


Кроме этого, XLNet использует вместо masked language model permutation language model. То есть решает проблему, когда в предложении два слова заменены на [MASK] и BERT предсказывает их независимо.
Например, возьмем предложение "New York is a city". Предсказать нужно "New York". То есть BERT имеет на входе "[MASK] [MASK] is a city" и слова "New" и "York" будут предсказаны независимо. XLNet предскажет сначала одно, например "New", а потом, имея "New .. is a city", предскажет "York".
По результатам XLNet обгоняет BERT больше чем по 20 задачам, есть одно "но". Использует чуть больше данных для предобучения, гигов так на 100 🙂.


SpanBERT
Три основных отличия от BERT:
1. [MASK] закрывает целые непрерывные куски предложения
2. Дополнительная целевая функция, которая помогает модели предсказывать скрытую часть, используя только пограничные токены (то, что до и после [MASK])
3. Предобучение только на целых предложениях без использования next sentence prediction.
Обгоняет BERT на двух задачах: вопрос-ответ и разрешение кореферентных имен (coreference resolution).


BERT - https://arxiv.org/pdf/1810.04805.pdf
SpanBERT - https://arxiv.org/pdf/1907.10529.pdf
XLNET - https://arxiv.org/pdf/1906.08237.pdf
Transformer - https://arxiv.org/pdf/1706.03762.pdf
TransformerXL - https://arxiv.org/pdf/1901.02860.pdf
​​Победить самый большой датасет

По результатам Google Landmark Retrieval и Google Landmark Recognition 2019 были опубликованы 4 статьи с описаниями призовых решений. Уже был пост про то, что авторы обязаны объяснить подход и поделиться кодом.

Интересно в этих статьях конечно же их пересечение: что такого, помимо упорства авторов, позволило эффективнее всего решить задачи.

Задачи было две: в Retrieval - получить список изображений с той же достопримечательностью, что и в тестовой картинке. В Recognition - определить, что за достопримечательность на картинке, и есть ли она там вообще.

И всё это на самом большом на текущий момент публичном датасете для retrieval и recognition The Google Landmark Dataset (GLD) V2.

Так вот выигрышные подходы объединяет 5 техник:

1. Использование нескольких глобальных дескрипторов (описывающих изображение целиком), полученных на основе популярных архитектур CNN: ResNet-101 , ResNeXt-101, SE-ResNet-101, SE-ResNeXt-101, InceptionV4 и похожих.

2. Дескрипторы этих моделей собираются в один с помощью применения в разном порядке: пулинга - чаще всего generalized mean (GeM) pooling; снижения размерности - PCA, AUW, просто fully-connected layer; нормализации; конкатенации.

3. Использования локальных дескрипторов (описывающих ключевые точки изображения) в разных подзадачах, чаще всего вместе с пространственной верификацией, то есть нахождением соотношения между ключевыми точками двух картинок. В качестве самих дескрипторов используются классические SURF, SIFT или дескрипторы на основе CNN - DELF и DELFv2. Для пространственной верификации RANSAC.

4. Использование k nearest neighbours для классификации. В качестве метрики - просто евклидово расстояние. Для поиска кандидатов на retrieval - тоже часто brute-force поиск по евклидовому расстоянию.

5. После простого поиска ближайших соседей происходит переранжирование обычно с использованием дополнительного показателя доверия (confidence score), рассчитанного с помощью другой меры схожести, другого датасета или с привлечением локальных дескрипторов.

А дальше - кто во что горазд. Очень много моделей были испробовано авторами до получения результата. В основном, все начиналось с какой-то одной архитектуры CNN и уже потом объединялось несколько дескрипторов, добавлялись методы расширения запроса и увеличения базы данных (query expansion и database augmentation) и всяческие способы переранжирования.


Сами статьи:
1 место Recognition: https://arxiv.org/pdf/1906.11874.pdf
2 место Retrieval, 2 место Recognition: https://arxiv.org/pdf/1906.03990.pdf
1 место Retrieval, 3 место Recognition: https://arxiv.org/pdf/1906.04087.pdf
3 место Retrieval: https://arxiv.org/pdf/1906.04944.pdf