Пока все неистово подбирают параметры, Хинтон пытается разобраться, что там внутри происходит.
Есть такая проблема, мы знаем, что делать, чтобы обучать нейронные сети, но мы не знаем, как именно они обучаются. Да, есть функция, которая оптимизируется во время обучения, но как она связана с конечной моделью, не очень понятно.
Хинтон и команда, не оставляя идею схожести нейросетей со структурой мозга, черпают вдохновение у нейробиологии, которая использует анализ сходства между отделами мозга, между людьми, биологическими видами и типами поведений.
Они предлагают использовать для анализа сходства представлений на скрытых слоях сети новую меру - 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.
Ссылка отсюда
