gonzo-обзоры ML статей – Telegram
gonzo-обзоры ML статей
24.1K subscribers
2.72K photos
2 videos
3 files
1.34K links
Авторы:
Гриша Сапунов, ранее руководитель разработки Яндекс-Новостей, ныне CTO Intento. Области интересов: AI/ML/DL, биоинформатика.
Лёша Тихонов, ранее аналитик в Яндексе, автор Автопоэта, Нейронной Обороны... Области интересов: discrete domain, NLP, RL.
Download Telegram
Результаты на задаче определения чётности вектора
Результаты на задаче сложения (кумулятивная сумма по вектору чисел)
Визуализация задачи предсказания символов
Продолжение про ACT

#1b: Repeat-RNN

Comparing Fixed and Adaptive Computation Time for Recurrent Neural Networks
Daniel Fojo, Víctor Campos, Xavier Giro-i-Nieto
https://arxiv.org/abs/1803.08165

Любопытная работа с ICLR 2018. А что если дело не в динамическом определении, сколько раз прогонять каждый слой, а просто в том, чтобы прогонять каждый слой несколько раз?

Сделали новый бейзлайн под названием Repeat-RNN, который выполняет фиксированное количество шагов (>1) на каждом элементе. Это по сути ablation полноценного ACT. Число повторов здесь является гиперпараметром.

Это также эквивалентно кратному увеличению количества каждого входного элемента с дополнительным флажком про то новый это токен или повторный.

Неожиданно оказалось, что Repeat-RNN научается решать задачи за меньшее число шагов SGD и с меньшим количеством повторов, чем ACT. Получилось, что предложенный baseline не хуже или лучше, чем ACT.

И в ACT, и в Repeat-RNN надо тюнить гиперпараметры, но гиперпараметр в Repeat-RNN более интуитивно понятный.

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

(продолжение следует)
Продолжение про ACT, часть 3-я.

#2: ResNet & SACT

Интересная работа про применение ACT к свёрточным сетям, конкретно к ResNet’ам. Главный автор -- Миша Фигурнов, который теперь тоже работает в DeepMind.

Пользуясь случаем передаю Мише привет :)

Spatially Adaptive Computation Time for Residual Networks
Michael Figurnov, Maxwell D. Collins, Yukun Zhu, Li Zhang, Jonathan Huang, Dmitry Vetrov, Ruslan Salakhutdinov
Статья: https://arxiv.org/abs/1612.02297
Код: https://github.com/mfigurnov/sact

Идея работы в том, что для разных участков изображения можно было бы регулировать количество вычислений, следуя интуиции, что одни участки изображения важнее других и “сложность” у них тоже разная. Для простых и менее важных регионов могло бы хватить одного-двух слоёв в residual блоке, для более важных и сложных требуется больше.

Эта вариация ACT называется Spatially Adaptive Computation Time (SACT).

Идейно внутри всё похоже на предыдущие варианты, только теперь применено не в рекуррентных сетях, а в (почти) обычных feed-forward -- ResNet’ах. Это своего рода встраивание механизма внимания в ResNet’ы. Мы прекращаем обрабатывать конкретную позицию изображения, как только её фичи стали “достаточно хорошими”.

ResNet’ы состят из блоков (block), каждый из которых содержит пачку слоёв (units). К выходу каждого юнита добавляется ветка, считающая halting score. Как только накопленная сумма halting scores для конкретной позиции достигла единицы (в реальности здесь тоже фигурирует небольшой epsilon как в оригинальной работе), все последующие юниты этого блока пропускаются. Все halting scores превращаются в распределение (усечением веса для последнего сработавшего юнита и занулением весов всех последующих, так чтобы сумма весов была равна единице). И наконец выход блока считается взвешенной суммой выходов юнитов этого блока с весами полученными описанным выше способом.

Визуализация SACT даёт карты, похожие на карты, продуцируемые механизмами внимания, что можно использовать для интерпретации результата и получения некой интуиции про работу сети.

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

SACT даёт лучшее качество и производительность по сравнению с обычным ACT или бейзлайновыми резнетами.

Поскольку механизм полносвёрточный, то всё это применимо и к разным разрешениям, и к разным задачам (классификация, детекция, …)

По-прежнему надо тюнить гиперпараметр про вклад ACT в функцию потерь.

(продолжение следует)
Мы завели чатик для обсуждения статей. Иногда хочется, так что велкам:
https://news.1rj.ru/str/joinchat/BVpazxaJ5vHOsrnZ2xRlaQ

Вот ACT как раз можно пообсуждать ;)
Продолжение про ACT, часть 4-я.

#3: Universal Transformer

Наконец про трансформеры. Лёша про них уже недавно писал, но теперь более детально.

Universal Transformers
Mostafa Dehghani, Stephan Gouws, Oriol Vinyals, Jakob Uszkoreit, Łukasz Kaiser
Статья: https://arxiv.org/abs/1807.03819
Презентация: http://mostafadehghani.com/wp-content/uploads/2018/08/Universal_Transformers.pdf
Код: https://github.com/tensorflow/tensor2tensor/blob/master/tensor2tensor/models/research/universal_transformer.py
Некоторые другие реализации: https://github.com/topics/universal-transformer

Работа выставлялась постером на ICLR 2019, но известна уже более полугода.

По сути делаем трансформер с рекуррентностью и динамическим критерием останова. А заодно вроде как получаем Turing completeness (теоретическую способность вычислить всё вычислимое — сэмулировать машину Тьюринга).

Рекуррентность здесь такого же рода как рекуррентность добавляемая ACT, то есть не рекуррентность над последовательностью символов, а рекуррентность над репрезентациями каждого конкретного символа — итеративно улучшаем представления (фичи) входной последовательности. По идее получаем как бы более глубокий трансформер с шарингом весов (что эффективно).

Добавление рекуррентного inductive bias должно быть полезным в задачах, где такой bias естественнен (некоторые алгоритмические и языковые задачи).

На каждом рекуррентном шаге выполняются две операции: 1) self-attention по входной для этого слоя последовательности, 2) transition function поверх выходов self-attention’а, независимо в каждой позиции. В работе применяли две различные transition function в зависимости от задачи: separable convolution или полносвязную сеть с relu.

Это Universal Transformer.

А чтобы было совсем интересно для определения глубины этой рекуррентности добавим ACT, то есть адаптивное определение этой глубины. Применяется точно так же, как и в предыдущих кейсах с ACT.

Это Adaptive Universal Transformer.

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

На bAbi QA dataset результат хороший. На subject-verb agreement обычный трансформер работает хуже LSTM, а адаптивный универсальный дотягивает до SOTA. На LAMBADA бьёт и обычный трансформер и LSTM. На алгоритмических задачах не дотягивает до Neural GPU (который обучался по специальному протоколу), но бьёт LSTM и обычный трансформер. На Learning to Execute тоже бьёт эту парочку. На машинном переводе в WMT 2014 en-de тоже бьёт обычные и weighted трансформеры.

В общем явно хорошая штука.

Среди преимуществ авторы отмечают эффективность по данным — работает на маленьких датасетах.

Авторы сводят Universal Transformer к Neural GPU (который Turing complete) и соответственно доказывают, что UT тоже Turing complete. Для тех, кто этой темой ранее не интересовался, про RNN также существует доказательство, что они Turing complete. Но про это как-нибудь отдельно, если будет интересно. Также на ICLR 2019 была другая интересная работа про универсальность обычных трансформеров и Neural GPU, но про неё тоже как-нибудь отдельно.
1
Results on bAbI tasks