история о том, как чуваки, применив наработки deepmind в сфере transfer learning, обучили CodeBert взяв за основу RoBERTa используя только адаптеры
Описанное выше на самом деле находится в этой статье, где авторы делятся опытом transfer learning с помощью адаптеров для создания мультимодальной модели (язык - код). А подводка следующая☕️ :
Все наверняка уже слышали по 10050 раз, особенно в последнее время о том, что такое адаптер (2019). Но если вспомнить базовый механизм за счет которого все работает, то можно описать следующим образом: берем доп слой, вставляем где-то между слоями исходной модели, и обучаем, замораживая исходные веса. Это позволяет моделе узнавать новые задачи, при этом тратя меньше ресурсов при обучении.
В какой-то момент, изначально в CV, поняли. что можно обучить много адаптеров (каждый на определенную задачу), а потом использовать знания от всех и решать тем самым мульти-таск. Это конечно очень крутая идея, но имеет недостаток в виде забывчивости из-за разного веса каждого адаптера. Тогда приходят люди из deepmind и говорят о том, что вот есть некий подход AdapterFusion (2021), который направлен на то, чтобы решить эту проблему следующим образом в 2 стадии: сначала помимо параметров, обучаеммых в каждом из адаптеров, обучается и еще отдельный параметр, который учится запоминать, что за адаптер мы используем в данный момент, а на втором шаге мы учим с помощьюнеожиданно, но факт механизма внимания, комбинировать вместе все адаптеры. Собственно вся эта конструкция располагается между двумя residual connection
Итак, к чему мы вообще заговорили про комбинирование многих адаптеров вместе. Через некоторое непродолжительное время Deepmind пошли дальше и придумали подход MAD-X, способный за счет адаптеров не только реализовать cross-task модели, но и cross-lingual. Так как обычный pipeline тренировки (когда мы обучаем на новом языке модель с MLM, чтобы выучить язык) ведет опять же к забывчивости модели, ребята откапытвают свой подход FusionAdapter и модифицируют его еще и на обучаемость новым языкам. Теперь подход состоит уже из 3 частей. Adapter-L (адаптер языковой), который по расположению берет свою идею из предыдущей стать и располагает также после residual connection; Adapter-T, который идейно похож на Adapter-L, но располагается после нескольких языковых адаптеров и Invertible Adapters, который направлен на захват преобразований, специфичных для языка на уровне токенов. Идея такая: все эти адаптеры обучаются совместо, естл адаптер языка нового и языка, который уже был в модели, это касается и инфертированного адаптера. При инференсе мы можем отключать один из языков и подавать output от него в адаптер задач. Тем самым модель будет способна решать задачи на разных языках
Возвращаясь к тренировки СodeBert с помощью MAD-X. Они обучили Adapter-L на каждый из языков программирования, представленных в модели CodeBert и 2 задачи, используемые в модели на pretrain (Masked Language Modeling (MLM) – идея из оригинальной статьи BERT и Replaced Token Detection (RTD) – идея из оригинальной статьи ELECTRA). В итоге они получили весьма сравнительные результаты используя лишь адаптеры
🖥 Репозиторий с библиотекой адаптеров
🖥 Код обучения CodeBert аналога
Описанное выше на самом деле находится в этой статье, где авторы делятся опытом transfer learning с помощью адаптеров для создания мультимодальной модели (язык - код). А подводка следующая
Все наверняка уже слышали по 10050 раз, особенно в последнее время о том, что такое адаптер (2019). Но если вспомнить базовый механизм за счет которого все работает, то можно описать следующим образом: берем доп слой, вставляем где-то между слоями исходной модели, и обучаем, замораживая исходные веса. Это позволяет моделе узнавать новые задачи, при этом тратя меньше ресурсов при обучении.
В какой-то момент, изначально в CV, поняли. что можно обучить много адаптеров (каждый на определенную задачу), а потом использовать знания от всех и решать тем самым мульти-таск. Это конечно очень крутая идея, но имеет недостаток в виде забывчивости из-за разного веса каждого адаптера. Тогда приходят люди из deepmind и говорят о том, что вот есть некий подход AdapterFusion (2021), который направлен на то, чтобы решить эту проблему следующим образом в 2 стадии: сначала помимо параметров, обучаеммых в каждом из адаптеров, обучается и еще отдельный параметр, который учится запоминать, что за адаптер мы используем в данный момент, а на втором шаге мы учим с помощью
Итак, к чему мы вообще заговорили про комбинирование многих адаптеров вместе. Через некоторое непродолжительное время Deepmind пошли дальше и придумали подход MAD-X, способный за счет адаптеров не только реализовать cross-task модели, но и cross-lingual. Так как обычный pipeline тренировки (когда мы обучаем на новом языке модель с MLM, чтобы выучить язык) ведет опять же к забывчивости модели, ребята откапытвают свой подход FusionAdapter и модифицируют его еще и на обучаемость новым языкам. Теперь подход состоит уже из 3 частей. Adapter-L (адаптер языковой), который по расположению берет свою идею из предыдущей стать и располагает также после residual connection; Adapter-T, который идейно похож на Adapter-L, но располагается после нескольких языковых адаптеров и Invertible Adapters, который направлен на захват преобразований, специфичных для языка на уровне токенов. Идея такая: все эти адаптеры обучаются совместо, естл адаптер языка нового и языка, который уже был в модели, это касается и инфертированного адаптера. При инференсе мы можем отключать один из языков и подавать output от него в адаптер задач. Тем самым модель будет способна решать задачи на разных языках
Возвращаясь к тренировки СodeBert с помощью MAD-X. Они обучили Adapter-L на каждый из языков программирования, представленных в модели CodeBert и 2 задачи, используемые в модели на pretrain (Masked Language Modeling (MLM) – идея из оригинальной статьи BERT и Replaced Token Detection (RTD) – идея из оригинальной статьи ELECTRA). В итоге они получили весьма сравнительные результаты используя лишь адаптеры