Open book on AutoML by Springer:
"Automated Machine Learning
Methods, Systems, Challenges"
Можно скачать pdf, epub
https://link.springer.com/book/10.1007/978-3-030-05318-5
"Automated Machine Learning
Methods, Systems, Challenges"
Можно скачать pdf, epub
https://link.springer.com/book/10.1007/978-3-030-05318-5
SpringerLink
Automated Machine Learning
This open access book gives the first comprehensive overview of general methods in Automatic Machine Learning, AutoML, collects denoscriptions of existing AutoML systems based on these methods, and discusses the first international challenge of AutoML systems.
Adaptive Attention Span in Transformers
Sainbayar Sukhbaatar, Edouard Grave, Piotr Bojanowski, Armand Joulin
Статья: https://arxiv.org/abs/1905.07799
Бенчмарки: https://paperswithcode.com/paper/adaptive-attention-span-in-transformers
Работа идейно близкая к ACT: давайте теперь сделаем адаптивным attention span трансформера.
Проблема обычного трансформера в том, что размер контекста, по которому считается self-attention, фиксирован и кроме того не может быть большим, потому что вычисления и память растут квадратично. Для увеличения контекста недавно уже было несколько решений, например, Transformer XL или Sparse Transformer. В первом из них ввели нечто вроде рекуррентности по времени, а во втором сильно облегчили матрицу внимания за счёт факторизации. Здесь же авторы (все из FB) вводят адаптивность, слой сам определяет необходимый ему размер контекста, так что это сокращает вычислительную сложность трансформера и позволяет, где надо, иметь большой контекст.
Кроме адаптивности в обычный трансформер вводятся две модификации.
1) Относительные позиционные ембеддинги (из работы Shaw et.al, https://arxiv.org/abs/1803.02155)
2) Механизм кеширования (из работы Dai про Transformer XL, https://arxiv.org/abs/1901.02860)
Далее размер контекста (attention span) каждой головы self-attention’а выучивается независимо от других (это называется adaptive attention span) путём добавления кусочно-линейной невозрастающей функции, маскирующей attention span. Функция состоит из двух кусков: константная единица от нуля до z (выучиваемый параметр) и спадающий до нуля кусок от z до z+R (гиперпараметр).
Усовершенствованным вариантом является dynamic attention span, динамически изменяющий attention span в зависимости от текущего входа. Здесь параметр z является функцией от входа (соответствует одному полносвязному слою с сигмоидальной активацией).
Проверяли на датасетах text8 и enwiki8, пробовали модели двух размеров (маленькая: 12 слоёв и размер внутреннего эмбеддинга 512; и большая: 24 слоя и эмбеддинг 768; везде 8 голов attention’а).
Сравнивались с Transformer XL и с глубоким (64 слоя) символьным трансформером Al-Rfou (https://arxiv.org/abs/1808.04444). Большие модели получили SotA на обоих датасетах с меньшим числом параметров и с меньшими FLOPS’ами.
На практике оказывается, что нижние слои обычно оперируют коротким контекстом, а верхние -- более длинным (несколько голов используют контекст до нескольких тысяч).
В общем прикольно, работает. В целом это довольно прямолинейный перенос идеи ACT.
Всё ещё кипятите? Тогда мы идём к вам. Что там ещё у нас в сетках зашито и не является адаптивным?
Sainbayar Sukhbaatar, Edouard Grave, Piotr Bojanowski, Armand Joulin
Статья: https://arxiv.org/abs/1905.07799
Бенчмарки: https://paperswithcode.com/paper/adaptive-attention-span-in-transformers
Работа идейно близкая к ACT: давайте теперь сделаем адаптивным attention span трансформера.
Проблема обычного трансформера в том, что размер контекста, по которому считается self-attention, фиксирован и кроме того не может быть большим, потому что вычисления и память растут квадратично. Для увеличения контекста недавно уже было несколько решений, например, Transformer XL или Sparse Transformer. В первом из них ввели нечто вроде рекуррентности по времени, а во втором сильно облегчили матрицу внимания за счёт факторизации. Здесь же авторы (все из FB) вводят адаптивность, слой сам определяет необходимый ему размер контекста, так что это сокращает вычислительную сложность трансформера и позволяет, где надо, иметь большой контекст.
Кроме адаптивности в обычный трансформер вводятся две модификации.
1) Относительные позиционные ембеддинги (из работы Shaw et.al, https://arxiv.org/abs/1803.02155)
2) Механизм кеширования (из работы Dai про Transformer XL, https://arxiv.org/abs/1901.02860)
Далее размер контекста (attention span) каждой головы self-attention’а выучивается независимо от других (это называется adaptive attention span) путём добавления кусочно-линейной невозрастающей функции, маскирующей attention span. Функция состоит из двух кусков: константная единица от нуля до z (выучиваемый параметр) и спадающий до нуля кусок от z до z+R (гиперпараметр).
Усовершенствованным вариантом является dynamic attention span, динамически изменяющий attention span в зависимости от текущего входа. Здесь параметр z является функцией от входа (соответствует одному полносвязному слою с сигмоидальной активацией).
Проверяли на датасетах text8 и enwiki8, пробовали модели двух размеров (маленькая: 12 слоёв и размер внутреннего эмбеддинга 512; и большая: 24 слоя и эмбеддинг 768; везде 8 голов attention’а).
Сравнивались с Transformer XL и с глубоким (64 слоя) символьным трансформером Al-Rfou (https://arxiv.org/abs/1808.04444). Большие модели получили SotA на обоих датасетах с меньшим числом параметров и с меньшими FLOPS’ами.
На практике оказывается, что нижние слои обычно оперируют коротким контекстом, а верхние -- более длинным (несколько голов используют контекст до нескольких тысяч).
В общем прикольно, работает. В целом это довольно прямолинейный перенос идеи ACT.
Всё ещё кипятите? Тогда мы идём к вам. Что там ещё у нас в сетках зашито и не является адаптивным?
arXiv.org
Adaptive Attention Span in Transformers
We propose a novel self-attention mechanism that can learn its optimal attention span. This allows us to extend significantly the maximum context size used in Transformer, while maintaining...
Дружественные каналы с разборами статей, похожие на наш.
https://news.1rj.ru/str/govorit_ai
Фокус на диалоговых системах и NLP
https://news.1rj.ru/str/govorit_ai
Фокус на диалоговых системах и NLP
Telegram
Говорит AI
Саммари статей про open-domain диалоговые системы и NLP вокруг них от команды Replika (replika.ai)
The Curious Case of Neural Text Degeneration
Ari Holtzman, Jan Buys, Maxwell Forbes, Yejin Choi
University of Washington, Allen Institute for Artificial Intelligence
#NLP #LM #sampling #beamsearch
Статья: https://arxiv.org/abs/1904.09751
Простенькая статья, которой, однако, давно не хватало. Аккуратно разбирают различные стратегии сэмплинга уже обученной LM. Противопоставляют open-ended сэмплинг (открытый сэмплинг, например, в GPT-2) и non-open-ended — когда сэмплинг имеет фиксированную цель (например, в NMT).
Дают красивое объяснение, почему open-ended сэмплинг обычно вырождается в повторение в случае использования beamseach стратегии — с каждым повторением вероятность следующего повторения растёт, образуется петля положительной обратной связи, соответственно, бимсёрч идёт по полю с воронками и так или иначе куда-то сваливается.
Кроме того, анализ частот n-gram показывает, что в реальной речи гораздо больше "чёрных лебедей", чем даёт сэмплинг по максимизации правдоподобия, а beamsearch даёт ровную высоковероятную картину.
С другой стороны, сэмплить из всего словаря с вероятностью, предсказанной моделью тоже не очень хорошо: в хвосте слова с эпсилон-вероятностями, но их много, и суммарно они дают высокую вероятность насэмплить полной фигни, по оценке авторов обычно эта вероятность около 30%, поэтому на 20 шагах вероятность зачерпнуть из хвоста 0.9996, в результате чего мы наблюдаем мусор, сломанную грамматику и т.п..
Далее рассматриваются разные способы, улучшающие ситуацию — температура, сэмплинг из top-K слов, а также предлагается несложный способ (Nucleus (Top-p) Sampling) адаптивно выбирать топ для сэмплинга по суммарной вероятности. Показывают, что такой способ даёт наиболее похожие на человеческие частоты n-gram.
Ari Holtzman, Jan Buys, Maxwell Forbes, Yejin Choi
University of Washington, Allen Institute for Artificial Intelligence
#NLP #LM #sampling #beamsearch
Статья: https://arxiv.org/abs/1904.09751
Простенькая статья, которой, однако, давно не хватало. Аккуратно разбирают различные стратегии сэмплинга уже обученной LM. Противопоставляют open-ended сэмплинг (открытый сэмплинг, например, в GPT-2) и non-open-ended — когда сэмплинг имеет фиксированную цель (например, в NMT).
Дают красивое объяснение, почему open-ended сэмплинг обычно вырождается в повторение в случае использования beamseach стратегии — с каждым повторением вероятность следующего повторения растёт, образуется петля положительной обратной связи, соответственно, бимсёрч идёт по полю с воронками и так или иначе куда-то сваливается.
Кроме того, анализ частот n-gram показывает, что в реальной речи гораздо больше "чёрных лебедей", чем даёт сэмплинг по максимизации правдоподобия, а beamsearch даёт ровную высоковероятную картину.
С другой стороны, сэмплить из всего словаря с вероятностью, предсказанной моделью тоже не очень хорошо: в хвосте слова с эпсилон-вероятностями, но их много, и суммарно они дают высокую вероятность насэмплить полной фигни, по оценке авторов обычно эта вероятность около 30%, поэтому на 20 шагах вероятность зачерпнуть из хвоста 0.9996, в результате чего мы наблюдаем мусор, сломанную грамматику и т.п..
Далее рассматриваются разные способы, улучшающие ситуацию — температура, сэмплинг из top-K слов, а также предлагается несложный способ (Nucleus (Top-p) Sampling) адаптивно выбирать топ для сэмплинга по суммарной вероятности. Показывают, что такой способ даёт наиболее похожие на человеческие частоты n-gram.
XLNet: Generalized Autoregressive Pretraining for Language Understanding
Carnegie Mellon University, Google Brain
Статья: https://arxiv.org/abs/1906.08237
Код на TF: https://github.com/zihangdai/xlnet
Совсем свежая работа, пять дней от роду, побившая кучу SOTA и обогнавшая BERT.
Я уверен, с ней ещё предстоит много разбираться и будет много постов с детальным анализом от разных авторов. Я пока напишу базовые моменты, которые видно из статьи (с кодом сам пока не успел поиграть).
В некотором смысле это гибрид LM-подхода, BERT-а и Transformer-XL.
Авторы сравнивают два подхода: Autoregressive (обычная односторонняя LM) — предсказываем следующий токен по последовательности предшествующих, Autoencoding (BERT) — максируем часть токенов в [MASK] и пытаемся их восстановить.
У обоих есть недостатки: первый вариант не видит правый контекст, во втором разные токены под маской восстанавливаются независимо, а кроме того, в обучении всегда предложения с масками, в finetuning режиме -- без, это даёт смещение.
Давайте попытаемся совместить плюсы обоих подходов: будем предсказывать 1 слово, но в качестве входа рассматривать левый контекст во всех возможных перестановках слов в предложении. Так мы обязательно увидим и левый и правый контекст в оригинальном предложении, но при этом в каждом случае будем видеть только часть слов. На практике и перестановок никаких нет — слова, как обычно в трансформере, подаются с эмбеддингами позиций, и они не меняются, а просто та часть слов, которые в текущей виртуальной перестановке оказались справа, скрывается на уровне маски внимания. Другими словами сетка просто учится на разных подмножествах доступных слов из предложения предсказывать текущее слово.
Тут делаются дополнительные усилия для того, чтобы избежать подглядывания, авторы делают два потока представлений — обычный и query, в котором слово не доступно для attention с самого себя. Query-поток используется для обучения, а на этапе finetuning-а уже обычный.
Позиционные эмбеддинги используются относительные, как в Transformer-XL.
Но механизм кэширования состяния прошлого окна для поддержания псевдо-реккурентости приходиться подправить так, чтобы он не зависел от конкретной виртуальной перестановки, использованной на предыдущем окне. Также для многосегментных входов добавляют в относительный позиционный эмбеддинг компоненту, которая зависит от того, принадлежат два слова одному сегменту или разным.
Такой подход в итоге умеет смотреть на слова с обоих сторон, и при этом у него нет масок в инпутах, и нет зависимых скрытых токенов (т.к. всегда скрыт только один).
В итоге, на 20 задачах обошли BERT, на 18 задачах получили SOTA.
Общественность радуется, huggingface уже вроде пообещали добавить XLNet в свой мега-репозиторий pytorch-моделей https://github.com/huggingface/pytorch-pretrained-BERT.
Carnegie Mellon University, Google Brain
Статья: https://arxiv.org/abs/1906.08237
Код на TF: https://github.com/zihangdai/xlnet
Совсем свежая работа, пять дней от роду, побившая кучу SOTA и обогнавшая BERT.
Я уверен, с ней ещё предстоит много разбираться и будет много постов с детальным анализом от разных авторов. Я пока напишу базовые моменты, которые видно из статьи (с кодом сам пока не успел поиграть).
В некотором смысле это гибрид LM-подхода, BERT-а и Transformer-XL.
Авторы сравнивают два подхода: Autoregressive (обычная односторонняя LM) — предсказываем следующий токен по последовательности предшествующих, Autoencoding (BERT) — максируем часть токенов в [MASK] и пытаемся их восстановить.
У обоих есть недостатки: первый вариант не видит правый контекст, во втором разные токены под маской восстанавливаются независимо, а кроме того, в обучении всегда предложения с масками, в finetuning режиме -- без, это даёт смещение.
Давайте попытаемся совместить плюсы обоих подходов: будем предсказывать 1 слово, но в качестве входа рассматривать левый контекст во всех возможных перестановках слов в предложении. Так мы обязательно увидим и левый и правый контекст в оригинальном предложении, но при этом в каждом случае будем видеть только часть слов. На практике и перестановок никаких нет — слова, как обычно в трансформере, подаются с эмбеддингами позиций, и они не меняются, а просто та часть слов, которые в текущей виртуальной перестановке оказались справа, скрывается на уровне маски внимания. Другими словами сетка просто учится на разных подмножествах доступных слов из предложения предсказывать текущее слово.
Тут делаются дополнительные усилия для того, чтобы избежать подглядывания, авторы делают два потока представлений — обычный и query, в котором слово не доступно для attention с самого себя. Query-поток используется для обучения, а на этапе finetuning-а уже обычный.
Позиционные эмбеддинги используются относительные, как в Transformer-XL.
Но механизм кэширования состяния прошлого окна для поддержания псевдо-реккурентости приходиться подправить так, чтобы он не зависел от конкретной виртуальной перестановки, использованной на предыдущем окне. Также для многосегментных входов добавляют в относительный позиционный эмбеддинг компоненту, которая зависит от того, принадлежат два слова одному сегменту или разным.
Такой подход в итоге умеет смотреть на слова с обоих сторон, и при этом у него нет масок в инпутах, и нет зависимых скрытых токенов (т.к. всегда скрыт только один).
В итоге, на 20 задачах обошли BERT, на 18 задачах получили SOTA.
Общественность радуется, huggingface уже вроде пообещали добавить XLNet в свой мега-репозиторий pytorch-моделей https://github.com/huggingface/pytorch-pretrained-BERT.
👍1
XLNet, говорили они...
https://moocaholic.medium.com/papers-roberta-a-robustly-optimized-bert-pretraining-approach-7449bc5423e7
https://moocaholic.medium.com/papers-roberta-a-robustly-optimized-bert-pretraining-approach-7449bc5423e7
Medium
[papers] RoBERTa: A Robustly Optimized BERT Pretraining Approach
Hardly a month comes without a new language model announces to surpass the good old (oh my god, it’s still 9-months old) BERT in one…
👍1
Обновил немного пост про RoBERTa, добавил чуток про ERNIE 2.0 и SpanBERT для контекста
Neural Text [de]Generation with Unlikelihood Training
Sean Welleck, Ilia Kulikov, Stephen Roller, Emily Dinan, Kyunghyun Cho, Jason Weston
NYU, FAIR
#NLP #LM #sampling #degeneration
Статья, родной код.
TLDR: Давайте вместо костыльных фильтров при сэмплинге из LM добавим штрафы за повторения при обучении этой LM, тогда даже небольшое доучивание с такими штрафами отучит сетку от повторений и сделает генерируемый текст более правдоподобным.
Подробнее:
Вырождение текста в повторяющиеся последовательности при open-ended сэмплинге -- общая проблема. Решать её костылями, вроде nucleus sampling, можно, но не очень эффективно, т.к. проблема в самом векторе вероятностей, возвращаемом моделью. По мнению авторов, корень проблемы — в недостаточно хорошем таргете обучения (максимизации правдоподобия следующего токена).
Авторы предлагают добавить дополнительный таргет обучения, unlikelihood training, уменьшающий вероятность появления "плохих для контекста" токенов.
Конкретнее, авторы предлагают добавить две цели обучения:
TOKEN LEVEL OBJECTIVE -- добавляем loss за предсказание каких-либо токенов, появлявшихся ранее (кроме случая, когда текущий ground truth токен действительно появлялся ранее).
SEQUENCE LEVEL OBJECTIVE -- сэмплим запись до конца, потом для каждого токена выясняем, был ли он частью повторной ngram-ы, если да -- штрафуем все такие токены на каждом из шагов.
Эксперименты показывают, что достаточно небольшого количества шагов по этим дополнительным таргетам, чтобы затюнить готовую LM до состояния, когда она перестаёт генерировать повторения, при этом потери в perplexity будут небольшими, а по асессорской оценке тексты окажутся лучше (по human evaluation обе попавки побеждают бейзлайн, а их совместное использование -- лучше каждой в отдельности).
Sean Welleck, Ilia Kulikov, Stephen Roller, Emily Dinan, Kyunghyun Cho, Jason Weston
NYU, FAIR
#NLP #LM #sampling #degeneration
Статья, родной код.
TLDR: Давайте вместо костыльных фильтров при сэмплинге из LM добавим штрафы за повторения при обучении этой LM, тогда даже небольшое доучивание с такими штрафами отучит сетку от повторений и сделает генерируемый текст более правдоподобным.
Подробнее:
Вырождение текста в повторяющиеся последовательности при open-ended сэмплинге -- общая проблема. Решать её костылями, вроде nucleus sampling, можно, но не очень эффективно, т.к. проблема в самом векторе вероятностей, возвращаемом моделью. По мнению авторов, корень проблемы — в недостаточно хорошем таргете обучения (максимизации правдоподобия следующего токена).
Авторы предлагают добавить дополнительный таргет обучения, unlikelihood training, уменьшающий вероятность появления "плохих для контекста" токенов.
Конкретнее, авторы предлагают добавить две цели обучения:
TOKEN LEVEL OBJECTIVE -- добавляем loss за предсказание каких-либо токенов, появлявшихся ранее (кроме случая, когда текущий ground truth токен действительно появлялся ранее).
SEQUENCE LEVEL OBJECTIVE -- сэмплим запись до конца, потом для каждого токена выясняем, был ли он частью повторной ngram-ы, если да -- штрафуем все такие токены на каждом из шагов.
Эксперименты показывают, что достаточно небольшого количества шагов по этим дополнительным таргетам, чтобы затюнить готовую LM до состояния, когда она перестаёт генерировать повторения, при этом потери в perplexity будут небольшими, а по асессорской оценке тексты окажутся лучше (по human evaluation обе попавки побеждают бейзлайн, а их совместное использование -- лучше каждой в отдельности).
GitHub
GitHub - facebookresearch/unlikelihood_training: Neural Text Generation with Unlikelihood Training
Neural Text Generation with Unlikelihood Training. Contribute to facebookresearch/unlikelihood_training development by creating an account on GitHub.
Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
Nils Reimers and Iryna Gurevych
Technische Universitat Darmstadt
#EMNLP2019 #BERT #siamese #sentenceembeddings
Статья: https://arxiv.org/abs/1908.10084
Код: https://github.com/UKPLab/sentence-transformers
При решении с помощью BERT-а (и других трансформеров) классификационных задач на парах предложений, например, semantic similarity или entailment, приходится подавать оба предложения вместе на вход. Расчётная сложность при этом растёт как квадрат от числа входных токенов, поэтому для задач типа массивных кластеризаций такой подход не годится. Удобнее разово построить sentence embeddings для предложений по одному, а потом уже над парами таких эмбеддингов делать классификатор или считать расстояние, такой способ сильно более эффективен.
Традиционно, в таких случаях применяется усреднение пословных эмбеддингов для получения эмбеддинга предложения. Другой известный подход -- использовать финальный эмбеддинг на специальном токене (CLS) в качестве эмбеддинга всего предложения. Так или иначе, на практике, на обычном BERT-е это работает не очень хорошо.
Авторы предлагают доучить сеть с помощью известных подходов: siamese и triplet networks. А именно: используя предобученный BERT делают двойную или тройную сеть с общими весами, получают эмбеддинг каждого предложения, и строят softmax-классификатор поверх конкатенации этих эмбеддингов (+возможно, простых функций от них). Учат на парах похожих предложений или на тройках с положительным и отрицательным примерами. В режиме использования просто считают cosine similarity между эмбеддингами.
Сравниваются со всевозможнымии эмбеддингами до кучи, как с довольно старыми типа GloVe и USE, так и с BERT-based (но без доучивания). Показывают, что даже доучивание на немного другой задаче (учились на SNLI-датасете, где разметка на логическое вытекание/противоречие, а проверялись потом на задаче семантической схожести) даёт почти столько же, сколько доучивание на целевой задаче, и это даёт почти везде лучшее качество, чем в бейзлайных.
Много сравнений на разных датасетах с разными sentence эмбеддингами по качеству и скорости, а также ablation study на тему того, какой пулинг использовать и что давать на вход финальному классификатору при обучении. В итоге, почти на всех тестах победили основных практических конкурентов InferSent и USE по качеству, а с помощью хака "smart batching" (группировки в батч предложений с похожей длиной) обошли и по скорости.
Nils Reimers and Iryna Gurevych
Technische Universitat Darmstadt
#EMNLP2019 #BERT #siamese #sentenceembeddings
Статья: https://arxiv.org/abs/1908.10084
Код: https://github.com/UKPLab/sentence-transformers
При решении с помощью BERT-а (и других трансформеров) классификационных задач на парах предложений, например, semantic similarity или entailment, приходится подавать оба предложения вместе на вход. Расчётная сложность при этом растёт как квадрат от числа входных токенов, поэтому для задач типа массивных кластеризаций такой подход не годится. Удобнее разово построить sentence embeddings для предложений по одному, а потом уже над парами таких эмбеддингов делать классификатор или считать расстояние, такой способ сильно более эффективен.
Традиционно, в таких случаях применяется усреднение пословных эмбеддингов для получения эмбеддинга предложения. Другой известный подход -- использовать финальный эмбеддинг на специальном токене (CLS) в качестве эмбеддинга всего предложения. Так или иначе, на практике, на обычном BERT-е это работает не очень хорошо.
Авторы предлагают доучить сеть с помощью известных подходов: siamese и triplet networks. А именно: используя предобученный BERT делают двойную или тройную сеть с общими весами, получают эмбеддинг каждого предложения, и строят softmax-классификатор поверх конкатенации этих эмбеддингов (+возможно, простых функций от них). Учат на парах похожих предложений или на тройках с положительным и отрицательным примерами. В режиме использования просто считают cosine similarity между эмбеддингами.
Сравниваются со всевозможнымии эмбеддингами до кучи, как с довольно старыми типа GloVe и USE, так и с BERT-based (но без доучивания). Показывают, что даже доучивание на немного другой задаче (учились на SNLI-датасете, где разметка на логическое вытекание/противоречие, а проверялись потом на задаче семантической схожести) даёт почти столько же, сколько доучивание на целевой задаче, и это даёт почти везде лучшее качество, чем в бейзлайных.
Много сравнений на разных датасетах с разными sentence эмбеддингами по качеству и скорости, а также ablation study на тему того, какой пулинг использовать и что давать на вход финальному классификатору при обучении. В итоге, почти на всех тестах победили основных практических конкурентов InferSent и USE по качеству, а с помощью хака "smart batching" (группировки в батч предложений с похожей длиной) обошли и по скорости.