Пока все неистово подбирают параметры, Хинтон пытается разобраться, что там внутри происходит.
Есть такая проблема, мы знаем, что делать, чтобы обучать нейронные сети, но мы не знаем, как именно они обучаются. Да, есть функция, которая оптимизируется во время обучения, но как она связана с конечной моделью, не очень понятно.
Хинтон и команда, не оставляя идею схожести нейросетей со структурой мозга, черпают вдохновение у нейробиологии, которая использует анализ сходства между отделами мозга, между людьми, биологическими видами и типами поведений.
Они предлагают использовать для анализа сходства представлений на скрытых слоях сети новую меру - centered kernel alignment.
По результатам, эта мера находит похожие слои между сетями с одинаковой архитектурой и разными начальными весами с точностью больше 99%, в то время как другие меры даже близко не подобрались к такому показателю. Она также находит связь между слоями сетей с совершенно разной архитектурой или натренированных на разных датасетах.
Что это значит? Что теперь можно сравнивать сети, причём даже с разной архитектурой. Можно находить слишком похожие слои, которые вредят качеству сети. Можно смотреть, какие именно архитектурные решения позволяют улучшить результаты работы сети.
В целом, это приближает нас (точнее их) к теоретическому пониманию устройства сетей и позволяет хоть немного отойти от довольно эмпирического подхода к их тренировке.
https://arxiv.org/pdf/1905.00414.pdf
Есть такая проблема, мы знаем, что делать, чтобы обучать нейронные сети, но мы не знаем, как именно они обучаются. Да, есть функция, которая оптимизируется во время обучения, но как она связана с конечной моделью, не очень понятно.
Хинтон и команда, не оставляя идею схожести нейросетей со структурой мозга, черпают вдохновение у нейробиологии, которая использует анализ сходства между отделами мозга, между людьми, биологическими видами и типами поведений.
Они предлагают использовать для анализа сходства представлений на скрытых слоях сети новую меру - 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/.
Серия статей о почти всех используемых в современных библиотеках для нейронных сетей методах оптимизации. Начиная от просто градиентного спуска и заканчивая модификациями 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/.
Medium
Gradient Descent and Stochastic Gradient Descent Algorithms for Neural Networks
Everyone who ever have trained Neural Networks, chances are, have been stumbled with Gradient Descent algorithm or its variations. These…
Говорящие головы из Сколково
Ура! Вот и наши соотечественники попали в СМИ со своими достижениями в области 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
Ура! Вот и наши соотечественники попали в СМИ со своими достижениями в области 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
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
Medium
Time Series Nested Cross-Validation
This blog post discusses the pitfalls of using traditional cross-validation with time series data. Specifically, we address 1) splitting a…
Халявные знания
Вот и закончились 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
Вот и закончились 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.
Ссылка отсюда
Иллюстративная статья о том, как подружить автоэнкодеры и 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 пишут не очень работает.
Свежачок прямо от команды Хинтона.
Вдохновились они идеей о том, что люди, в отличие от нейросетей, учатся распознавать объекты почти сами и не используют такое большое количество картинок для обучения, как нейронки.
Поэтому поменяли подход с попиксельной обработки изображений на обработки с помощью "капсул".
Капсула - это часть модели, которая описывает абстрактную сущность.
В данном случае используется 2 типа капсул: для объектов и для их частей. То есть часть - это какой-то простой элемент, который может встречаться в разных объектах. А объект это что-то уникальное, состоящее из частей.
Набор и размещение объектов и определяют изображение.
Сеть состоит из 2х подсетей: одна учится описывать наличие частей и их размещение. А вторая учится имея набор частей и их размещение собирать из них объекты, то есть выдавать информацию о том, сколько объектов, как они выглядят и как расположены. Вот эта информация в векторном виде и может быть использована далее например для классификация изображений.
Обе части сети - это автоэнкодеры, то есть сначала они представляют входную информацию, например изображение, в определенном сжатом виде, а потом могут из него восстановить эту информацию.
Так вот на вход первой подсети подается изображение, а сжатый вид - это вектор, описывающий наличие частей и их позу.
Для второй подсети на вход подается вектор из первой подсети, а получается сжатый вектор, описывающий набор объектов, их вид и позу.
Вот этот вектор и есть представление изображение, которое можно использовать для кластеризации/классификации.
Пока всё очень сырое, работает на датасете MNIST и SVHN (the Street View House Numbers). На CIFAR пишут не очень работает.
akosiorek.github.io
Stacked Capsule Autoencoders
Objects play a central role in computer vision and, increasingly, machine learning research.With many applications depending on object detection in images an...