В последнее время особенно набирает обороты тема с дистилляцией. Двусмысленно получилось… Ну да ладно…
BERT оказался хорошим примером сильной модели, которую хочется использовать везде, но не везде можно, так как она тяжёлая, не на все устройства влезает и инференс на ней довольно долгий, что опять же ограничивает применение.
Направление сжатия и ускорения моделей сильно актуально и дистилляция оказалась одним из хороших вариантов этого добиться.
BERT оказался хорошим примером сильной модели, которую хочется использовать везде, но не везде можно, так как она тяжёлая, не на все устройства влезает и инференс на ней довольно долгий, что опять же ограничивает применение.
Направление сжатия и ускорения моделей сильно актуально и дистилляция оказалась одним из хороших вариантов этого добиться.
Итак, первый лот:
DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter
Victor Sanh, Lysandre Debut, Julien Chaumond, Thomas Wolf
Статья: https://arxiv.org/abs/1910.01108
Эту модель все уже давно знают по посту от Hugging Face (https://medium.com/huggingface/distilbert-8cf3380435b5) и по их же реализации в библиотеке transformers (бывшая pytorch-transformers, которая теперь стала достаточно универсальной, чтобы обеспечить interoperability моделей между как раз только что вышедшим TF 2.0 и PyTorch), тоже на днях вместе с переименованием обновившейся до версии 2.0.0 (https://github.com/huggingface/transformers/releases). Кажется, это самая популярная быблиотека, сожержащая наиболее популярные предобученные модели на трансформерах (https://github.com/huggingface/transformers#model-architectures).
В предверии NeuralIPS 2019 вышла наконец и статья на arxiv.
Собственно DistilBERT — это дистиллированный BERT, примерно на 40% меньший по размеру, на 60% более быстрый и сохраняющий 97% качества оригинального BERT’а (BERT-base на самом деле).
Идея дистиллирования весьма проста. Давайте обучим более простую модель (ученика), воспроизводящую поведение более сложной модели (учителя).
Модель-студент в DistilBERT — это модель, где слоёв в два раза меньше, а их размерность остаётся прежней (типа, все BLAS вычисления настолько оптимизированы, что это слабо влияет). Слои студента инициализируются весами из модели-учителя.
В случае DistilBERT мы воспроизводим финальное распределение вероятностей после softmax в задаче masked language modeling (MLM).
Функция потерь — это комбинация обычного MLM loss с новым кросс-энтропийным лоссом, штрафующим за непохожесть предсказаний ученика на предсказания учителя. Также добавляется косинусный лосс на эмбеддинги, чтобы вектора скрытых состояний обеих моделей смотрели в одинаковых направлениях.
Кроме того в DistilBERT применены улучшения из недавней RoBERTa: обучение на больших батчах (4К), динамические маски и отсутствие Next Sentence Prediction (NSP) задачи.
Обучали DistilBERT на том же датасете, что и BERT. 90 часов на 8xV100 (16Gb) против 1 дня на 1024xV100 (32 Gb) в случае обучения RoBERT’ы.
Дистиллировали только предобучение. Отдельным экспериментом попробовали сделать дополнительное дистиллирование для fine-tuning под SQuAD, оказалось ещё получше.
В целом результат достойный, работает хорошо, времени требует меньше (и на обучении, и на инференсе). Пробовали даже загонять модель в iPhone 7 Plus, этот код живёт тут: https://github.com/huggingface/swift-coreml-transformers.
DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter
Victor Sanh, Lysandre Debut, Julien Chaumond, Thomas Wolf
Статья: https://arxiv.org/abs/1910.01108
Эту модель все уже давно знают по посту от Hugging Face (https://medium.com/huggingface/distilbert-8cf3380435b5) и по их же реализации в библиотеке transformers (бывшая pytorch-transformers, которая теперь стала достаточно универсальной, чтобы обеспечить interoperability моделей между как раз только что вышедшим TF 2.0 и PyTorch), тоже на днях вместе с переименованием обновившейся до версии 2.0.0 (https://github.com/huggingface/transformers/releases). Кажется, это самая популярная быблиотека, сожержащая наиболее популярные предобученные модели на трансформерах (https://github.com/huggingface/transformers#model-architectures).
В предверии NeuralIPS 2019 вышла наконец и статья на arxiv.
Собственно DistilBERT — это дистиллированный BERT, примерно на 40% меньший по размеру, на 60% более быстрый и сохраняющий 97% качества оригинального BERT’а (BERT-base на самом деле).
Идея дистиллирования весьма проста. Давайте обучим более простую модель (ученика), воспроизводящую поведение более сложной модели (учителя).
Модель-студент в DistilBERT — это модель, где слоёв в два раза меньше, а их размерность остаётся прежней (типа, все BLAS вычисления настолько оптимизированы, что это слабо влияет). Слои студента инициализируются весами из модели-учителя.
В случае DistilBERT мы воспроизводим финальное распределение вероятностей после softmax в задаче masked language modeling (MLM).
Функция потерь — это комбинация обычного MLM loss с новым кросс-энтропийным лоссом, штрафующим за непохожесть предсказаний ученика на предсказания учителя. Также добавляется косинусный лосс на эмбеддинги, чтобы вектора скрытых состояний обеих моделей смотрели в одинаковых направлениях.
Кроме того в DistilBERT применены улучшения из недавней RoBERTa: обучение на больших батчах (4К), динамические маски и отсутствие Next Sentence Prediction (NSP) задачи.
Обучали DistilBERT на том же датасете, что и BERT. 90 часов на 8xV100 (16Gb) против 1 дня на 1024xV100 (32 Gb) в случае обучения RoBERT’ы.
Дистиллировали только предобучение. Отдельным экспериментом попробовали сделать дополнительное дистиллирование для fine-tuning под SQuAD, оказалось ещё получше.
В целом результат достойный, работает хорошо, времени требует меньше (и на обучении, и на инференсе). Пробовали даже загонять модель в iPhone 7 Plus, этот код живёт тут: https://github.com/huggingface/swift-coreml-transformers.
arXiv.org
DistilBERT, a distilled version of BERT: smaller, faster, cheaper...
As Transfer Learning from large-scale pre-trained models becomes more prevalent in Natural Language Processing (NLP), operating these large models in on-the-edge and/or under constrained...
Лот #2
TinyBERT: Distilling BERT for Natural Language Understanding
Xiaoqi Jiao, Yichun Yin, Lifeng Shang, Xin Jiang, Xiao Chen, Linlin Li, Fang Wang, Qun Liu
Статья: https://arxiv.org/abs/1909.10351
Статья от команды из Huawei про более продвинутую дистилляцию BERT’а (здесь тоже используют BERT-base) по сравнению с DistilBERT. Засабмичена на ICLR 2020. Код вроде пока не выложен, но обещан.
DistilBERT использовал распределение вероятностей предсказывамых классов плюс косинусный лосс на вектора скрытых состояний, но в модели есть много чего ещё интересного. Например, различные исследования показывают, что веса внимания содержат в себе важную лингвистическую информацию, так что было бы неплохо их тоже учитывать в модели-студенте. TinyBERT делает этот (и другие) шаги. Новый метод называется дистилляцией трансформера (transformer distillation).
Transformer distillation подразумевает, что и модель учитель, и модель студент являются трансформерами. В учителе N слоёв, в студенте меньшее M, вводится функция маппинга слоёв студента на слои учителя (могут быть разные стратегии выбора слоёв для дистилляции). Вес лосса за каждый из слоёв студента также является гиперпараметром (можно взвешивать неодинаково).
Собственно дистилляция слоя трансформера включает дистилляцию матриц внимания (по MSE) и дистилялцию скрытых состояний (тоже MSE, но с линейным преобразованием, так как размер скрытых слоёв студента может быть меньше). В последнюю включаются также дистилляция эмбеддинг слоя (входной, лосс аналогичен скрытым слоям) и слоя предсказаний (выходной, кросс-энтропийный лосс). Слой предсказаний дистиллируется после предыдущих слоёв.
В работе предложен двухстадийный фреймворк, включающий общую дистилляцию (general distillation) и задаче-специфичную дистилляцию (task-specific distillation). На первой стадии авторы дистиллируют обычный предобученный BERT без файн-тюнинга (он получается довольно посредственным относительно оригинального BERT’а), На второй стадии проводится аугментация данных (с помощью BERT’а все слова в предложении заменяются на других предсказанных кандидатов, а в случае слов, состоящих из нескольких sub-word pieces, делают замену на близкие по косинусу из GloVe) и студент обучается под конкретную задачу вместе с дистилляцией файнтюненного BERT’а. После второго этапа получаем лёгкую модель хорошего качества под конкретную задачу.
В экспериментах TinyBERT даёт качество выше DistilBERT даже в случае более лёгких моделей.
На GLUE получают сравнимую с BERT’ом модель в 7.5 раз меньшую и в 9.4 раз более быструю на инференсе.
Кажется, хороший вариант, чтобы попробовать в тех местах, где уже пробуют DistilBERT.
TinyBERT: Distilling BERT for Natural Language Understanding
Xiaoqi Jiao, Yichun Yin, Lifeng Shang, Xin Jiang, Xiao Chen, Linlin Li, Fang Wang, Qun Liu
Статья: https://arxiv.org/abs/1909.10351
Статья от команды из Huawei про более продвинутую дистилляцию BERT’а (здесь тоже используют BERT-base) по сравнению с DistilBERT. Засабмичена на ICLR 2020. Код вроде пока не выложен, но обещан.
DistilBERT использовал распределение вероятностей предсказывамых классов плюс косинусный лосс на вектора скрытых состояний, но в модели есть много чего ещё интересного. Например, различные исследования показывают, что веса внимания содержат в себе важную лингвистическую информацию, так что было бы неплохо их тоже учитывать в модели-студенте. TinyBERT делает этот (и другие) шаги. Новый метод называется дистилляцией трансформера (transformer distillation).
Transformer distillation подразумевает, что и модель учитель, и модель студент являются трансформерами. В учителе N слоёв, в студенте меньшее M, вводится функция маппинга слоёв студента на слои учителя (могут быть разные стратегии выбора слоёв для дистилляции). Вес лосса за каждый из слоёв студента также является гиперпараметром (можно взвешивать неодинаково).
Собственно дистилляция слоя трансформера включает дистилляцию матриц внимания (по MSE) и дистилялцию скрытых состояний (тоже MSE, но с линейным преобразованием, так как размер скрытых слоёв студента может быть меньше). В последнюю включаются также дистилляция эмбеддинг слоя (входной, лосс аналогичен скрытым слоям) и слоя предсказаний (выходной, кросс-энтропийный лосс). Слой предсказаний дистиллируется после предыдущих слоёв.
В работе предложен двухстадийный фреймворк, включающий общую дистилляцию (general distillation) и задаче-специфичную дистилляцию (task-specific distillation). На первой стадии авторы дистиллируют обычный предобученный BERT без файн-тюнинга (он получается довольно посредственным относительно оригинального BERT’а), На второй стадии проводится аугментация данных (с помощью BERT’а все слова в предложении заменяются на других предсказанных кандидатов, а в случае слов, состоящих из нескольких sub-word pieces, делают замену на близкие по косинусу из GloVe) и студент обучается под конкретную задачу вместе с дистилляцией файнтюненного BERT’а. После второго этапа получаем лёгкую модель хорошего качества под конкретную задачу.
В экспериментах TinyBERT даёт качество выше DistilBERT даже в случае более лёгких моделей.
На GLUE получают сравнимую с BERT’ом модель в 7.5 раз меньшую и в 9.4 раз более быструю на инференсе.
Кажется, хороший вариант, чтобы попробовать в тех местах, где уже пробуют DistilBERT.
arXiv.org
TinyBERT: Distilling BERT for Natural Language Understanding
Language model pre-training, such as BERT, has significantly improved the performances of many natural language processing tasks. However, pre-trained language models are usually computationally...
Другие известные дистилляции BERT’а
(2019/03) “Distilling Task-Specific Knowledge from BERT into Simple Neural Networks”
Статья: https://arxiv.org/abs/1903.12136
В работе BERT дистиллируется в однослойную BiLSTM, получают результат сравнимый с EMLo при стократно меньшем числе параметров и в 15 раз меньшем времени инференса.
Как видно из таблицы в предыдущем посте, и DistilBERT, и TinyBERT этот результат бьют по качеству, хотя коэффициенты и сжатия, и ускорения здесь вроде выше.
(2019/08) “Patient Knowledge Distillation for BERT Model Compression”
Статья: https://arxiv.org/abs/1908.09355
Код: https://github.com/intersun/PKD-for-BERT-Model-Compression
Предложили метод под названием Patient Knowledge Distillation, который претендует на то что был первым (или среди первых), кто стал использовать при дистилляции не только выходное распределение, но и скрытые состояния учителя. Причём, ученик, похоже пытается имитировать только репрезентации для [CLS] токена.
Опять же в предыдущем посте есть сравнение и с ним, он получше DistilBERT, но слабее TinyBERT. Есть разные вариации по размеру (3 и 6), на 3-слойной ускорение около 4 раз относительно 12-слойной BERT-base.
(2019/09)“Extreme Language Model Compression with Optimal Subwords and Shared Projections”
Статья: https://arxiv.org/abs/1909.11687
Свежая статья из Гугла, засабмичена на ICLR 2020. Акцентировались на сокращении словаря, эмбеддинги которого занимают много места. Плюс также сокращают и размер скрытых состояний. Придумали метод дуального обучения, когда учитель одновременно с учеником пытается выучить сокращённый словарь. Если я не ошибаюсь, другие подходы не подразумевали, что учителя тоже надо обучать.
Сжали BERT-base в 60 раз, получили модель размером под 7Мб. Круто для мобильного. Тоже пробовали разные по размеру варианты, на самом разумном (среднем) с эмбеддингнами размером 96 сжатие получают под 20 раз (модель 22Мб), сокращение количества вычислений под 75 раз. По качеству результаты слабее TinyBERT.
(2019/03) “Distilling Task-Specific Knowledge from BERT into Simple Neural Networks”
Статья: https://arxiv.org/abs/1903.12136
В работе BERT дистиллируется в однослойную BiLSTM, получают результат сравнимый с EMLo при стократно меньшем числе параметров и в 15 раз меньшем времени инференса.
Как видно из таблицы в предыдущем посте, и DistilBERT, и TinyBERT этот результат бьют по качеству, хотя коэффициенты и сжатия, и ускорения здесь вроде выше.
(2019/08) “Patient Knowledge Distillation for BERT Model Compression”
Статья: https://arxiv.org/abs/1908.09355
Код: https://github.com/intersun/PKD-for-BERT-Model-Compression
Предложили метод под названием Patient Knowledge Distillation, который претендует на то что был первым (или среди первых), кто стал использовать при дистилляции не только выходное распределение, но и скрытые состояния учителя. Причём, ученик, похоже пытается имитировать только репрезентации для [CLS] токена.
Опять же в предыдущем посте есть сравнение и с ним, он получше DistilBERT, но слабее TinyBERT. Есть разные вариации по размеру (3 и 6), на 3-слойной ускорение около 4 раз относительно 12-слойной BERT-base.
(2019/09)“Extreme Language Model Compression with Optimal Subwords and Shared Projections”
Статья: https://arxiv.org/abs/1909.11687
Свежая статья из Гугла, засабмичена на ICLR 2020. Акцентировались на сокращении словаря, эмбеддинги которого занимают много места. Плюс также сокращают и размер скрытых состояний. Придумали метод дуального обучения, когда учитель одновременно с учеником пытается выучить сокращённый словарь. Если я не ошибаюсь, другие подходы не подразумевали, что учителя тоже надо обучать.
Сжали BERT-base в 60 раз, получили модель размером под 7Мб. Круто для мобильного. Тоже пробовали разные по размеру варианты, на самом разумном (среднем) с эмбеддингнами размером 96 сжатие получают под 20 раз (модель 22Мб), сокращение количества вычислений под 75 раз. По качеству результаты слабее TinyBERT.
Ну и дистилляция дистилляцией, но не забывайте, что появился ещё и весьма качественный ALBERT (тоже на ICLR 2020), который существенно легче оригинального BERT'а, но по качеству круче RoBERT'ы. И его по идее тоже можно отдистиллировать :)
Про ALBERT уже было тут: https://moocaholic.medium.com/speeding-up-bert-5528e18bb4ea
Про ALBERT уже было тут: https://moocaholic.medium.com/speeding-up-bert-5528e18bb4ea
Medium
Speeding up BERT
How to make BERT models faster
Дистилляция: матчасть
Пора немного поговорить про истоки дистилляции и её суть.
В целом, как уже было описано, идея дистилляции подразумевает обучение более лёгкой модели-ученика, воспроизводящей поведение более сложной и тяжёлой модели-учителя.
Пора немного поговорить про истоки дистилляции и её суть.
В целом, как уже было описано, идея дистилляции подразумевает обучение более лёгкой модели-ученика, воспроизводящей поведение более сложной и тяжёлой модели-учителя.
Одной из ранних работ, на которую принято ссылаться, является:
Model Compression
Rich Caruana, Cristian Bucila, Alexandru Niculescu-Mizil
https://www.cs.cornell.edu/~caruana/compression.kdd06.pdf
Это ещё не дистилляция в привычном смысле, но предтеча. В работе авторы пользуются тем, что нейросети — это универсальный аппроксиматор, и заменяют большой сложный ансамбль (не чисто нейросетевой) на маленькие быстрые модели, в качестве которых выступают нейросети. Здесь не симулируется поведение сложной модели напрямую. Вместо этого ансамбль используется для разметки большого количества новых неразмеченных данных, а потом на этом новом датасете обучается небольшая полносвязная нейросеть. Возможно, получается в каком-то смысле защита от оверфиттинга, если изначальный датасет был небольшим.
Поскольку неразмеченный датасет не всегда есть, авторы придумали метод (MUNGE) создания такого датасета (псевдо трейн сет), который лучше рандомного сэмплинга атрибутов или naive Bayes estimation.
В итоге на автоматически размеченных реальных или псевдо данных обучают нейросеть и получают сокращение размера модели и ускорение до 1000 раз, при этом не сильно теряя в качестве.
Model Compression
Rich Caruana, Cristian Bucila, Alexandru Niculescu-Mizil
https://www.cs.cornell.edu/~caruana/compression.kdd06.pdf
Это ещё не дистилляция в привычном смысле, но предтеча. В работе авторы пользуются тем, что нейросети — это универсальный аппроксиматор, и заменяют большой сложный ансамбль (не чисто нейросетевой) на маленькие быстрые модели, в качестве которых выступают нейросети. Здесь не симулируется поведение сложной модели напрямую. Вместо этого ансамбль используется для разметки большого количества новых неразмеченных данных, а потом на этом новом датасете обучается небольшая полносвязная нейросеть. Возможно, получается в каком-то смысле защита от оверфиттинга, если изначальный датасет был небольшим.
Поскольку неразмеченный датасет не всегда есть, авторы придумали метод (MUNGE) создания такого датасета (псевдо трейн сет), который лучше рандомного сэмплинга атрибутов или naive Bayes estimation.
В итоге на автоматически размеченных реальных или псевдо данных обучают нейросеть и получают сокращение размера модели и ускорение до 1000 раз, при этом не сильно теряя в качестве.
Затем Rich Caruana с Lei Jimmy Ba развили эту тему в работе:
Do Deep Nets Really Need to be Deep?
https://arxiv.org/abs/1312.6184
Здесь большая глубокая нейросеть заменяется на неглубокую с сохранением качества. Цель не в сокращении размера как таковом, а в попытке разобраться, так ли нужна глубина.
Model compression даёт интересное наблюдение: нельзя выучить маленькую модель с качеством как у большой, обучая её на тех же данных. Но маленькая модель в принципе способна выучить более точную функцию, и мы знаем, что функция эта не слишком сложна. Просто текущие алгоритмы оптимизации этого не позволяют. Для такого обучения почему-то требуется промежуточная сложная модель.
Соответственно этим авторы и занимаются в работе, показывая, что можно обучить неглубокие модели такого же качества, как и глубокие.
Снова используются данные, размеченные сложной моделью, transfer set (иногда это те же самые данные, на которых модель обучалась, иногда дополнительный датасет). Модель-ученик учится предсказывать логиты модели-учителя — выходы сети _ДО_ софтмакса, ибо на софтмаксе теряется много информации. Например, активации [10.0, 20.0, 30.0] и [-10.0, 0.0, 10.0] дают одинаковый результат после софтмакса, но они по сути существенно разные. Идея в том, что в этих числах закодированы тонкие взаимоотношения между классами, которые отсутствуют в разреженных hard labels, и эту информацию можно использовать для обучения ученика. Задача обучения сводится к задаче L2-регрессии на предсказание логитов.
В итоге на TIMIT и на CIFAR-10 смогли обучить неглубокие модели, приближающиеся по качеству к продвинутым моделям (CNN и ансамбль CNN) и обгоняющие DNN. Снова получилось, что имитирующие модели (они называют их mimic models) получаются более точными, чем если бы изначально были обучены на оригинальных данных.
В общем интересная история, неглубокую модель текущими методами оптимизации хорошо обучить с нуля не получается. Только через model compression (доразметку неразмеченного датасета) и/или качественную модель-учителя (считайте, дистилляцию).
Есть хорошее выступление Каруаны по данной теме:
https://www.youtube.com/watch?v=NedWl0lZw2E
Do Deep Nets Really Need to be Deep?
https://arxiv.org/abs/1312.6184
Здесь большая глубокая нейросеть заменяется на неглубокую с сохранением качества. Цель не в сокращении размера как таковом, а в попытке разобраться, так ли нужна глубина.
Model compression даёт интересное наблюдение: нельзя выучить маленькую модель с качеством как у большой, обучая её на тех же данных. Но маленькая модель в принципе способна выучить более точную функцию, и мы знаем, что функция эта не слишком сложна. Просто текущие алгоритмы оптимизации этого не позволяют. Для такого обучения почему-то требуется промежуточная сложная модель.
Соответственно этим авторы и занимаются в работе, показывая, что можно обучить неглубокие модели такого же качества, как и глубокие.
Снова используются данные, размеченные сложной моделью, transfer set (иногда это те же самые данные, на которых модель обучалась, иногда дополнительный датасет). Модель-ученик учится предсказывать логиты модели-учителя — выходы сети _ДО_ софтмакса, ибо на софтмаксе теряется много информации. Например, активации [10.0, 20.0, 30.0] и [-10.0, 0.0, 10.0] дают одинаковый результат после софтмакса, но они по сути существенно разные. Идея в том, что в этих числах закодированы тонкие взаимоотношения между классами, которые отсутствуют в разреженных hard labels, и эту информацию можно использовать для обучения ученика. Задача обучения сводится к задаче L2-регрессии на предсказание логитов.
В итоге на TIMIT и на CIFAR-10 смогли обучить неглубокие модели, приближающиеся по качеству к продвинутым моделям (CNN и ансамбль CNN) и обгоняющие DNN. Снова получилось, что имитирующие модели (они называют их mimic models) получаются более точными, чем если бы изначально были обучены на оригинальных данных.
В общем интересная история, неглубокую модель текущими методами оптимизации хорошо обучить с нуля не получается. Только через model compression (доразметку неразмеченного датасета) и/или качественную модель-учителя (считайте, дистилляцию).
Есть хорошее выступление Каруаны по данной теме:
https://www.youtube.com/watch?v=NedWl0lZw2E
arXiv.org
Do Deep Nets Really Need to be Deep?
Currently, deep neural networks are the state of the art on problems such as speech recognition and computer vision. In this extended abstract, we show that shallow feed-forward networks can learn...
Ну и наконец ещё одна работа, на которую чаще всего ссылаются:
Distilling the Knowledge in a Neural Network
Geoffrey Hinton, Oriol Vinyals, Jeff Dean
https://arxiv.org/abs/1503.02531
Авторы развивают работы Каруаны и коллег, предлагая метод дистилляции для нейросетей.
Идея всё та же, в распределениях вероятностей классов при предсказании моделью-учителем хранится ценная богатая структура, которую и надо использовать для клонирования поведения модели учителя. Для этого можно использовать как предсказания на оригинальном датасете, так и на любом другом.
Для этого предлагается метод дистилляции, более общий, чем у Каруаны, за счёт повышения температуры на выходном софтмаксе. Версия Каруаны с логитами показывается частным случаем этой процедуры.
Технически задача дистилляции сводится к минимизации кросс-энтропии между предсказаниями учителя и ученика. При обучении ученика в качестве soft labels берутся предсказания после софтмакса, но взятого с какой-то температурой выше 1 (чтобы получить менее жёсткое распределение). Когда ученик обучен, он использует для предсказания уже обычный софтмакс.
В работе есть ещё одно интересное ответвление про обучение на очень больших датасетах ансамблей моделей-специалистов, которые фокусируются на своём подмножестве классов. Это чем-то напоминает Mixture of Experts (MoE), но легче него по вычислениям и параллелизации.
Distilling the Knowledge in a Neural Network
Geoffrey Hinton, Oriol Vinyals, Jeff Dean
https://arxiv.org/abs/1503.02531
Авторы развивают работы Каруаны и коллег, предлагая метод дистилляции для нейросетей.
Идея всё та же, в распределениях вероятностей классов при предсказании моделью-учителем хранится ценная богатая структура, которую и надо использовать для клонирования поведения модели учителя. Для этого можно использовать как предсказания на оригинальном датасете, так и на любом другом.
Для этого предлагается метод дистилляции, более общий, чем у Каруаны, за счёт повышения температуры на выходном софтмаксе. Версия Каруаны с логитами показывается частным случаем этой процедуры.
Технически задача дистилляции сводится к минимизации кросс-энтропии между предсказаниями учителя и ученика. При обучении ученика в качестве soft labels берутся предсказания после софтмакса, но взятого с какой-то температурой выше 1 (чтобы получить менее жёсткое распределение). Когда ученик обучен, он использует для предсказания уже обычный софтмакс.
В работе есть ещё одно интересное ответвление про обучение на очень больших датасетах ансамблей моделей-специалистов, которые фокусируются на своём подмножестве классов. Это чем-то напоминает Mixture of Experts (MoE), но легче него по вычислениям и параллелизации.
arXiv.org
Distilling the Knowledge in a Neural Network
A very simple way to improve the performance of almost any machine learning algorithm is to train many different models on the same data and then to average their predictions. Unfortunately,...