Tailoring: encoding inductive biases by optimizing unsupervised objectives at prediction time
Ferran Alet, Kenji Kawaguchi, Tomas Lozano-Perez, Leslie Pack Kaelbling
Статья: https://arxiv.org/abs/2009.10623
Очередная прикольная работа из серии “а что, так можно было?”.
Помните, на заре текущего хайпа, когда ещё даже VGG не появилась (и тем более резнеты), был популярен такой способ получения более точных предсказаний уже обученной модели, когда картинка подавалась на вход несколько раз с кропами, отзеркаливанием, иногда поворотами (где это было можно), а результат предсказания потом усреднялся?
Этот метод возвращается в новой ипостаси — Tailoring! Не знаю, как лучше по-русски назвать, пусть будет “подгонка”.
В чём суть?
В основе успеха многих решений лежит правильный inductive bias. Обычный классический подход подразумевает добавление inductive bias в архитектуру или через дополнительные лоссы. Первый подход неуниверсальный, а второй как и обучение с обычным лоссом приводит к generalization gap между данными обучения и предсказания, а также уводит objective в сторону от того, который нам реально важен.
Проблема здесь в том, что когда поступают запросы на инференс, модель уже не может использовать знание об этой новой конкретной точке, она “заморожена”. А собственно кто нам запретил воспользоваться этой новой информацией?
Вапник в своё время предложил подход под названием transductive learning (в противовес обычному inductive learning), где алгоритм получает не только обучающие данные, но и набор точек, на которых потом надо будет сделать предсказания, то есть делает предсказание от частного к частному без перехода к общему. Кстати, есть мнение, что Бертран Рассел сделал это ещё раньше, https://www.cs.bham.ac.uk/~jdk/transductive.html — не прогуливайте философию, в ML она тоже полезна!
Красивый пример, когда трансдукция полезнее обычной индукции, реализованной в виде supervised модели, есть в английской википедии — это классификация точек (https://en.wikipedia.org/wiki/Transduction_(machine_learning)#Example_problem). Действительно, обладая полным набором точек, хоть бы большинство из них и было без разметки, сделать разумную классификацию гораздо проще, проведя сначала unsupervised кластеризацию. И вообще говоря, множество подходов с предобучением или semi-supervised подходов, по сути делают что-то подобное. Теперь мы знаем, как это называется! :)
Но проблема с этим подходом в том, что обычно заранее мы не знаем, на чём надо будет потом применять модель, и хочется подход, который умеет делать предсказания в режиме онлайн по мере поступления новых точек. А гонять на каждом предсказании полный вариант transductive learning это too much.
Авторы предлагают подход tailoring и meta-tailoring. При “подгонке” (tailoring) мы при поступлении новой точки на предсказание файн-тюним модель на специальный unsupervised tailoring loss, а затем делаем предсказание. При “мета-подгонке” у нас есть двухуровневый процесс оптимизации по типу как в мета-обучении, где по сути мы обучаем модель с учётом последующей подгонки, чтобы она прошла легче — во внешнем цикле мы оптимизируем лосс, который нам важен (например, какой-то из supervised), а во внутреннем цикле оперируем этим нашим unsupervised tailoring loss. И, кстати, широко известный MAML (https://arxiv.org/abs/1703.03400) легко транслируется в текущий сеттинг с мета-подгонкой.
Если чуть больше конкретики, то мы, например, знаем, что данные должны обладать какими-то гарантиями: гладкость, симметрия, сохранение момента или энергии, что-нибудь ещё — мы можем использовать это в tailoring loss. Можно также заюзать какой-нибудь contrastive loss.
Отдельный практический челлендж — сделать так, чтобы можно было параллельно делать подгонку одной модели для всего батча.
Ferran Alet, Kenji Kawaguchi, Tomas Lozano-Perez, Leslie Pack Kaelbling
Статья: https://arxiv.org/abs/2009.10623
Очередная прикольная работа из серии “а что, так можно было?”.
Помните, на заре текущего хайпа, когда ещё даже VGG не появилась (и тем более резнеты), был популярен такой способ получения более точных предсказаний уже обученной модели, когда картинка подавалась на вход несколько раз с кропами, отзеркаливанием, иногда поворотами (где это было можно), а результат предсказания потом усреднялся?
Этот метод возвращается в новой ипостаси — Tailoring! Не знаю, как лучше по-русски назвать, пусть будет “подгонка”.
В чём суть?
В основе успеха многих решений лежит правильный inductive bias. Обычный классический подход подразумевает добавление inductive bias в архитектуру или через дополнительные лоссы. Первый подход неуниверсальный, а второй как и обучение с обычным лоссом приводит к generalization gap между данными обучения и предсказания, а также уводит objective в сторону от того, который нам реально важен.
Проблема здесь в том, что когда поступают запросы на инференс, модель уже не может использовать знание об этой новой конкретной точке, она “заморожена”. А собственно кто нам запретил воспользоваться этой новой информацией?
Вапник в своё время предложил подход под названием transductive learning (в противовес обычному inductive learning), где алгоритм получает не только обучающие данные, но и набор точек, на которых потом надо будет сделать предсказания, то есть делает предсказание от частного к частному без перехода к общему. Кстати, есть мнение, что Бертран Рассел сделал это ещё раньше, https://www.cs.bham.ac.uk/~jdk/transductive.html — не прогуливайте философию, в ML она тоже полезна!
Красивый пример, когда трансдукция полезнее обычной индукции, реализованной в виде supervised модели, есть в английской википедии — это классификация точек (https://en.wikipedia.org/wiki/Transduction_(machine_learning)#Example_problem). Действительно, обладая полным набором точек, хоть бы большинство из них и было без разметки, сделать разумную классификацию гораздо проще, проведя сначала unsupervised кластеризацию. И вообще говоря, множество подходов с предобучением или semi-supervised подходов, по сути делают что-то подобное. Теперь мы знаем, как это называется! :)
Но проблема с этим подходом в том, что обычно заранее мы не знаем, на чём надо будет потом применять модель, и хочется подход, который умеет делать предсказания в режиме онлайн по мере поступления новых точек. А гонять на каждом предсказании полный вариант transductive learning это too much.
Авторы предлагают подход tailoring и meta-tailoring. При “подгонке” (tailoring) мы при поступлении новой точки на предсказание файн-тюним модель на специальный unsupervised tailoring loss, а затем делаем предсказание. При “мета-подгонке” у нас есть двухуровневый процесс оптимизации по типу как в мета-обучении, где по сути мы обучаем модель с учётом последующей подгонки, чтобы она прошла легче — во внешнем цикле мы оптимизируем лосс, который нам важен (например, какой-то из supervised), а во внутреннем цикле оперируем этим нашим unsupervised tailoring loss. И, кстати, широко известный MAML (https://arxiv.org/abs/1703.03400) легко транслируется в текущий сеттинг с мета-подгонкой.
Если чуть больше конкретики, то мы, например, знаем, что данные должны обладать какими-то гарантиями: гладкость, симметрия, сохранение момента или энергии, что-нибудь ещё — мы можем использовать это в tailoring loss. Можно также заюзать какой-нибудь contrastive loss.
Отдельный практический челлендж — сделать так, чтобы можно было параллельно делать подгонку одной модели для всего батча.
❤1👍1
Авторы предлагают алгоритм под названием CNGrad, использующий подход conditional normalization. В этом подходе мы, похожим на BatchNorm образом, выучиваем два параметра (γ, β), которые масштабируют и сдвигают соответственно выход каждого определённого узла сети. И задача оптимизации заключается в адаптации этих двух параметров под конкретный запрос. Легко добавить подгонку в обученную без неё модель — достаточно навесить куда надо (γ = 1, β = 0), что даёт identity transformation, а дальше тюнить. Авторы доказывают, что глобального минимума в обучении можно достичь только модификациями этих вот двух параметров, не трогая основные веса сети.
Прогоняют эксперименты на трёх задачах: предсказание эволюции физической системы из 5 тел (tailoring loss основан на сохранении энергии и момента); классификация с целью добиться устойчивости к adversarial examples (tailoring loss стремится оптимизировать KL divergence для слегка возмущённых входов x + δ в каком-то небольшом радиусе); и классификация CIFAR-10 (где tailoring loss оптимизирует косинусное расстояние для слегка возмущённых точек, но делает это уже не только для предсказаний классов, но и для активаций предпоследнего слоя). Результаты везде интересные, предсказания более качественные и устойчивые.
В общем любопытный подход, в сочетании с contrastive loss и не только ещё много чего можно придумать, это всё только начало!
Да, очевидным образом это, конечно, удорожает предсказание, инференс становится более вычислительно требовательным. Для нескольких шагов градиентной оптимизации фактор увеличения вычислений в описанных задачах от 1.5x до 10x (но число параметров зато меняется несильно). Понятно, это не везде допустимо, но тут как обычно trade-off. Возможно зато, что можно получать то же качество с меньшими по размеру сетями и отыграть сколько-то вычислений.
Прогоняют эксперименты на трёх задачах: предсказание эволюции физической системы из 5 тел (tailoring loss основан на сохранении энергии и момента); классификация с целью добиться устойчивости к adversarial examples (tailoring loss стремится оптимизировать KL divergence для слегка возмущённых входов x + δ в каком-то небольшом радиусе); и классификация CIFAR-10 (где tailoring loss оптимизирует косинусное расстояние для слегка возмущённых точек, но делает это уже не только для предсказаний классов, но и для активаций предпоследнего слоя). Результаты везде интересные, предсказания более качественные и устойчивые.
В общем любопытный подход, в сочетании с contrastive loss и не только ещё много чего можно придумать, это всё только начало!
Да, очевидным образом это, конечно, удорожает предсказание, инференс становится более вычислительно требовательным. Для нескольких шагов градиентной оптимизации фактор увеличения вычислений в описанных задачах от 1.5x до 10x (но число параметров зато меняется несильно). Понятно, это не везде допустимо, но тут как обычно trade-off. Возможно зато, что можно получать то же качество с меньшими по размеру сетями и отыграть сколько-то вычислений.
Linformer: Self-Attention with Linear Complexity
Sinong Wang, Belinda Z. Li, Madian Khabsa, Han Fang, Hao Ma
Статья: https://arxiv.org/abs/2006.04768
Хочется написать про свежий Performer, но пожалуй стоит перед ним написать про Linformer.
Это всё из серии про уменьшить квадратичную сложность полного механизма внимания в трансформере. Линформер, очевидно по названию, уменьшает сложность до линейной и по времени и по месту. За последние полгода таких работ уже несколько, недавний Big Bird (https://news.1rj.ru/str/gonzo_ML/381) из свежего, или чуть более ранняя работа с многообещающим названием “Transformers are RNNs” (https://arxiv.org/abs/2006.16236).
Разберём Linformer.
Идея в общем проста — заменим полную матрицу внимания на низкоранговую аппроксимацию. Авторы исходят из наблюдения, что self-attention низкоранговый. Для этого они анализируют спектр матрицы и утверждают, что особенно в верхних слоях, больше информации сконцентрировано в наибольших сингулярных значениях. И грубо говоря, считаем SVD для матрицы внимания и оставляем только k сингулярных значений (например, 128).
SVD только дорого считать на каждый чих, поэтому делаем проще, вводим две линейные проекции для K и V (Q не трогаем) перед расчётом внимания, так что в итоге считать придётся меньше. Оригинальные размерности n*d матрицы ключей и значений конвертятся в k*d и дальше внимание уже скейлится линейно, получается матрица внимания n*k вместо n*n.
Для пущей оптимизации эти матрицы проекций (E и F) можно ещё и пошарить между головами или слоями.
В экспериментах получают для k=128 качество как у трансформера с n=512, а для k=256 сравнимо с n=1024. И шаринг тоже работает, даже если шарить матрицы на все слои (то есть вообще одна матрица E на всю сеть).
Ну в общем работает вроде как, качество норм. Получают качество сравнимое с BERT’ом или RoBERTa, но при в 4 раза меньшем k. Плюс всё получается быстрее и памяти жрёт меньше.
Sinong Wang, Belinda Z. Li, Madian Khabsa, Han Fang, Hao Ma
Статья: https://arxiv.org/abs/2006.04768
Хочется написать про свежий Performer, но пожалуй стоит перед ним написать про Linformer.
Это всё из серии про уменьшить квадратичную сложность полного механизма внимания в трансформере. Линформер, очевидно по названию, уменьшает сложность до линейной и по времени и по месту. За последние полгода таких работ уже несколько, недавний Big Bird (https://news.1rj.ru/str/gonzo_ML/381) из свежего, или чуть более ранняя работа с многообещающим названием “Transformers are RNNs” (https://arxiv.org/abs/2006.16236).
Разберём Linformer.
Идея в общем проста — заменим полную матрицу внимания на низкоранговую аппроксимацию. Авторы исходят из наблюдения, что self-attention низкоранговый. Для этого они анализируют спектр матрицы и утверждают, что особенно в верхних слоях, больше информации сконцентрировано в наибольших сингулярных значениях. И грубо говоря, считаем SVD для матрицы внимания и оставляем только k сингулярных значений (например, 128).
SVD только дорого считать на каждый чих, поэтому делаем проще, вводим две линейные проекции для K и V (Q не трогаем) перед расчётом внимания, так что в итоге считать придётся меньше. Оригинальные размерности n*d матрицы ключей и значений конвертятся в k*d и дальше внимание уже скейлится линейно, получается матрица внимания n*k вместо n*n.
Для пущей оптимизации эти матрицы проекций (E и F) можно ещё и пошарить между головами или слоями.
В экспериментах получают для k=128 качество как у трансформера с n=512, а для k=256 сравнимо с n=1024. И шаринг тоже работает, даже если шарить матрицы на все слои (то есть вообще одна матрица E на всю сеть).
Ну в общем работает вроде как, качество норм. Получают качество сравнимое с BERT’ом или RoBERTa, но при в 4 раза меньшем k. Плюс всё получается быстрее и памяти жрёт меньше.
Telegram
gonzo-обзоры ML статей
Big Bird: Transformers for Longer Sequences
Manzil Zaheer, Guru Guruganesh, Avinava Dubey, Joshua Ainslie, Chris Alberti, Santiago Ontanon, Philip Pham, Anirudh Ravula, Qifan Wang, Li Yang, Amr Ahmed
Статья: https://arxiv.org/abs/2007.14062
Чего-то мы про…
Manzil Zaheer, Guru Guruganesh, Avinava Dubey, Joshua Ainslie, Chris Alberti, Santiago Ontanon, Philip Pham, Anirudh Ravula, Qifan Wang, Li Yang, Amr Ahmed
Статья: https://arxiv.org/abs/2007.14062
Чего-то мы про…
Rethinking Attention with Performers
Krzysztof Choromanski, Valerii Likhosherstov, David Dohan, Xingyou Song, Andreea Gane, Tamas Sarlos, Peter Hawkins, Jared Davis, Afroz Mohiuddin, Lukasz Kaiser, David Belanger, Lucy Colwell, Adrian Weller
Статья: https://arxiv.org/abs/2009.14794
Код: https://github.com/google-research/google-research/tree/master/performer
Свеженький Performer, которому ещё недели не исполнилось, от сборной команды Гугла, DeepMind, Университета Кэмбриджа и Института Алана Тьюринга.
Окей, ладно, в реальности он появился ещё в июне в другой статье с названием “Masked Language Modeling for Proteins via Linearly Scalable Long-Context Transformers” (https://arxiv.org/abs/2006.03555), но она объявлена deprecated, так что он всё равно обновился (как минимум, добавился + к методу FAVOR).
Цель всё та же — заменить стандартное квадратичное внимание трансформера чем-то линейным. Но хочется это сделать так, чтобы точность была гарантирована, и при этом не полагаться на какие-то прайоры типа разреженности или низкоранговости.
Куча модификаций трансформера, также целящихся в его ускорение, не имеют целью аппроксимировать стандартное [софтмакс] внимание, а скорее предлагают более специфические механизмы внимания, часто за счёт дополнительных ограничений. Эти методы как правило без строгих гарантий относительно representational power и проверить их часто можно лишь эмпирически. Есть группа оптимизаций лишь по части памяти (обратимые слои или шаренные веса), но они не про аппроксимацию внимания. Из идейно близкого будет Linformer (https://news.1rj.ru/str/gonzo_ML/397), но его оценка внимания смещённая и он даёт большую среднеквадратичную ошибку.
Авторы предложили новый интересный подход под названием FAVOR+: Fast Attention Via positive Orthogonal Random features. В двух словах он даёт качество полноценного механизма внимания (с теоретическими гарантиями), но с линейной сложностью!
Сначала про FA (Fast Attention). Здесь используются ядерная функция (kernel) от рандомизированного мэппинга φ(x) фич размерности d в размерность r. Авторы предлагают вид φ(x) такой, что через него можно смоделировать большинство ядер, используемых на практике (Гауссово, софтмакс, PNG-ядра).
В частности для софтмакса получают несмещённую аппроксимацию через тригонометрические функции (sin, cos). Но с ними засада — рандомный маппинг с потенциально отрицательными значениями ведёт к нестабильному поведению, особенно когда ядро близко к нулю. Авторы взамен предлагают устойчивый механизм с положительными рандомными фичами. Это про R+ часть.
И наконец в фичи добавляют ортогональность, это ещё уменьшает дисперсию оценки софтмакса внимания. Это O-часть метода.
Желающие могут проверить предложенную теорию положительных ортогональных случайных фич, есть доказательства разных интересных свойств.
Далее идут эксперименты, где в стандартном трансформере заменяют механизм внимания на предложенный, оставляя всё остальное как есть (такой вот drop-in replacement). Получают линейное время и субквадратичную память. Кроме того, показывают, что и ортогональные и положительные фичи дают меньшую ошибку в реконструкции внимания, чем IID и тригонометрические.Также на разных задачах (например, на белковом TrEMBL) показывают, что в целом перформанс Performer’а соответствует нормальному трансформеру, чего не скажешь о перформансе Linformer’а или Reformer’а (https://news.1rj.ru/str/gonzo_ML/176).
Отдельный интерес — датасеты с длинными последовательностями, на которых обычный трансформер даже не посчитаешь. 6-слойный Performer равносилен 12-слойному Reformer’у, аналогично с 12/24 слоями.
Работа изначально делалась с прицелом на биологические последовательности, что очень круто. Кажется, наконец, появился прямо таки заточенный на биоинформатику трансформер!
История эта скорее всего сильно больше, чем только про трансформеры. Наверняка, оно будет полезно и в куче других мест с механизмами внимания. Большое поле для деятельности. Ну и тема про рандомные фичи, думаю, ещё не раз себя покажет с интересных сторон.
Krzysztof Choromanski, Valerii Likhosherstov, David Dohan, Xingyou Song, Andreea Gane, Tamas Sarlos, Peter Hawkins, Jared Davis, Afroz Mohiuddin, Lukasz Kaiser, David Belanger, Lucy Colwell, Adrian Weller
Статья: https://arxiv.org/abs/2009.14794
Код: https://github.com/google-research/google-research/tree/master/performer
Свеженький Performer, которому ещё недели не исполнилось, от сборной команды Гугла, DeepMind, Университета Кэмбриджа и Института Алана Тьюринга.
Окей, ладно, в реальности он появился ещё в июне в другой статье с названием “Masked Language Modeling for Proteins via Linearly Scalable Long-Context Transformers” (https://arxiv.org/abs/2006.03555), но она объявлена deprecated, так что он всё равно обновился (как минимум, добавился + к методу FAVOR).
Цель всё та же — заменить стандартное квадратичное внимание трансформера чем-то линейным. Но хочется это сделать так, чтобы точность была гарантирована, и при этом не полагаться на какие-то прайоры типа разреженности или низкоранговости.
Куча модификаций трансформера, также целящихся в его ускорение, не имеют целью аппроксимировать стандартное [софтмакс] внимание, а скорее предлагают более специфические механизмы внимания, часто за счёт дополнительных ограничений. Эти методы как правило без строгих гарантий относительно representational power и проверить их часто можно лишь эмпирически. Есть группа оптимизаций лишь по части памяти (обратимые слои или шаренные веса), но они не про аппроксимацию внимания. Из идейно близкого будет Linformer (https://news.1rj.ru/str/gonzo_ML/397), но его оценка внимания смещённая и он даёт большую среднеквадратичную ошибку.
Авторы предложили новый интересный подход под названием FAVOR+: Fast Attention Via positive Orthogonal Random features. В двух словах он даёт качество полноценного механизма внимания (с теоретическими гарантиями), но с линейной сложностью!
Сначала про FA (Fast Attention). Здесь используются ядерная функция (kernel) от рандомизированного мэппинга φ(x) фич размерности d в размерность r. Авторы предлагают вид φ(x) такой, что через него можно смоделировать большинство ядер, используемых на практике (Гауссово, софтмакс, PNG-ядра).
В частности для софтмакса получают несмещённую аппроксимацию через тригонометрические функции (sin, cos). Но с ними засада — рандомный маппинг с потенциально отрицательными значениями ведёт к нестабильному поведению, особенно когда ядро близко к нулю. Авторы взамен предлагают устойчивый механизм с положительными рандомными фичами. Это про R+ часть.
И наконец в фичи добавляют ортогональность, это ещё уменьшает дисперсию оценки софтмакса внимания. Это O-часть метода.
Желающие могут проверить предложенную теорию положительных ортогональных случайных фич, есть доказательства разных интересных свойств.
Далее идут эксперименты, где в стандартном трансформере заменяют механизм внимания на предложенный, оставляя всё остальное как есть (такой вот drop-in replacement). Получают линейное время и субквадратичную память. Кроме того, показывают, что и ортогональные и положительные фичи дают меньшую ошибку в реконструкции внимания, чем IID и тригонометрические.Также на разных задачах (например, на белковом TrEMBL) показывают, что в целом перформанс Performer’а соответствует нормальному трансформеру, чего не скажешь о перформансе Linformer’а или Reformer’а (https://news.1rj.ru/str/gonzo_ML/176).
Отдельный интерес — датасеты с длинными последовательностями, на которых обычный трансформер даже не посчитаешь. 6-слойный Performer равносилен 12-слойному Reformer’у, аналогично с 12/24 слоями.
Работа изначально делалась с прицелом на биологические последовательности, что очень круто. Кажется, наконец, появился прямо таки заточенный на биоинформатику трансформер!
История эта скорее всего сильно больше, чем только про трансформеры. Наверняка, оно будет полезно и в куче других мест с механизмами внимания. Большое поле для деятельности. Ну и тема про рандомные фичи, думаю, ещё не раз себя покажет с интересных сторон.
GitHub
google-research/performer at master · google-research/google-research
Google Research. Contribute to google-research/google-research development by creating an account on GitHub.
GeDi: Generative Discriminator Guided Sequence Generation
Ben Krause, Akhilesh Deepak Gotmare, Bryan McCann, Nitish Shirish Keskar, Shafiq Joty, Richard Socher, Nazneen Fatema Rajani
Статья: https://arxiv.org/abs/2009.06367
Блогопост попроще: https://blog.einstein.ai/gedi/
Родной код: https://github.com/salesforce/GeDi
(и там же ссылка на демо в colab notebook)
Разбавлю, пожалуй, тяжёлую поступь череды огромных Трансформеров простой, но занятной штукой от команды Salesforce.
В контексте задачи управления генерацией текста большими моделями, вместо того, чтобы тюнить большую модель на конкретный топик или сентимент или другое свойство, или фильтровать её выхлоп обычным классификатором, они делают следующее:
- учат отдельную generative discriminator (GeDi) языковую модель, размерами поменьше основной;
- при обучении используется двойной loss -- обычный для LM + дискриминаторный по заданному набору классов, например <positive>/<negative>;
- такая модель может быть достаточно маленькой выдавать и не очень гладкий текст, т.к. сэмплить из неё напрямую никто не собирается;
- вместо этого она сэмплится одновременно с основной, но её logits на следующий токен используют для перевзвешивания logits большой модели (GPT-2, например).
Таким образом показывают, что можно направлять генерацию generic GPT-2 на нужный топик и/или сентимент, уменьшать вероятность "toxic output", ну и так далее, если у вас на чём такой generative discriminator обучить.
Это конечно, не первая попытка сделать внешнее управление генерации классификаторами, например, год назад команда из Uber предлагала пускать в процессе генерации градиент от классификатора внутрь модели (https://arxiv.org/abs/1912.02164), но тут всё проще и эффективнее, а также поддерживает концепцию Zero-shot learning, т.к. подобные классификаторы можно будет отстегнуть и потом переиспользовать с GPT-5, GPT-7 и так далее, без какого-либо дообучения.
Ben Krause, Akhilesh Deepak Gotmare, Bryan McCann, Nitish Shirish Keskar, Shafiq Joty, Richard Socher, Nazneen Fatema Rajani
Статья: https://arxiv.org/abs/2009.06367
Блогопост попроще: https://blog.einstein.ai/gedi/
Родной код: https://github.com/salesforce/GeDi
(и там же ссылка на демо в colab notebook)
Разбавлю, пожалуй, тяжёлую поступь череды огромных Трансформеров простой, но занятной штукой от команды Salesforce.
В контексте задачи управления генерацией текста большими моделями, вместо того, чтобы тюнить большую модель на конкретный топик или сентимент или другое свойство, или фильтровать её выхлоп обычным классификатором, они делают следующее:
- учат отдельную generative discriminator (GeDi) языковую модель, размерами поменьше основной;
- при обучении используется двойной loss -- обычный для LM + дискриминаторный по заданному набору классов, например <positive>/<negative>;
- такая модель может быть достаточно маленькой выдавать и не очень гладкий текст, т.к. сэмплить из неё напрямую никто не собирается;
- вместо этого она сэмплится одновременно с основной, но её logits на следующий токен используют для перевзвешивания logits большой модели (GPT-2, например).
Таким образом показывают, что можно направлять генерацию generic GPT-2 на нужный топик и/или сентимент, уменьшать вероятность "toxic output", ну и так далее, если у вас на чём такой generative discriminator обучить.
Это конечно, не первая попытка сделать внешнее управление генерации классификаторами, например, год назад команда из Uber предлагала пускать в процессе генерации градиент от классификатора внутрь модели (https://arxiv.org/abs/1912.02164), но тут всё проще и эффективнее, а также поддерживает концепцию Zero-shot learning, т.к. подобные классификаторы можно будет отстегнуть и потом переиспользовать с GPT-5, GPT-7 и так далее, без какого-либо дообучения.