Некоторые нейронные сети слишком велики для использования. Есть способ сделать их меньше, но при этом сохранить точность. Прочтите, чтобы узнать, как это сделать.

Практическое машинное обучение - это компромисс. Мы можем повысить точность нейронных сетей, сделав их больше, но в реальной жизни большие нейронные сети трудно использовать. Конкретно проблема возникает не в обучении, а в развертывании. Большие нейронные сети можно успешно обучать на гигантских кластерах суперкомпьютеров, но проблема возникает, когда приходит время развернуть эти сети на обычных потребительских устройствах. Компьютер или телефон обычного человека не могут справиться с работой в таких больших сетях. Следовательно, если мы хотим использовать эти сети на практике, нам необходимо уменьшить их размер, сохраняя при этом точность. Это возможно?

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

Второй подход - это тот, который мы обсудим здесь, он называется дистилляция знаний. Вместо того, чтобы уменьшать размер сети во время обучения, мы сначала обучаем сеть до полного размера. Затем мы обучаем другую, меньшую сеть, используя полностью обученную большую сеть как источник истины. Идея использования сетей для обучения других сетей - это разновидность трансферного обучения. На высоком уровне дистилляция знаний - это двухступенчатая форма трансфертного обучения. Во-первых, обучите большую сеть. Затем используйте большую сеть для обучения последней, маленькой сети. А теперь давайте посмотрим на детали.

Поскольку дистилляция знаний состоит из двух этапов обучения, мы, естественно, разбиваем наши данные на два обучающих набора. Второй обучающий набор (используемый для обучения небольшой нейронной сети) называется передаточным набором. Поскольку на втором этапе обучения мы используем большую нейронную сеть в качестве источника истины (в отличие от меток данных), нам не нужно помечать набор передачи. Это большое преимущество и одна из причин, по которой используются такие методы трансфертного обучения, как дистилляция. Поясним, что это значит. Типичная парадигма машинного обучения заключается в использовании некоторых данных x и меток y для изучения функции f (x), которая приближает y. Что мы делаем с переданным набором, так это заменяем y на g (x), где g - обученная большая сеть. Следовательно, y не требуется.

Почему это хорошо? В реальной жизни трудно найти ярлыки. Обычно метки создаются людьми, поэтому для больших наборов данных необходимо приложить много усилий, чтобы пометить данные. Это стоит денег и времени. С дистилляцией знаний нам нужны метки только для обучения большой сети, то есть нам нужно пометить только часть наших данных, а не все.

Процесс обучения большой сети одним отличием от обычного обучения. Разница заключается в функции активации softmax от предпоследнего слоя к выходному слою. Напомним, что цель функции softmax - заставить итоговые выходные узлы суммировать 1. Форма этой функции - o_i = exp (z_i) / Σ_j (exp (z_j)), где o_i - это i-й узел выходного слоя. , а z_i - i-й узел предпоследнего слоя. В процессе дистилляции знаний мы вносим поправки в эту формулу. В частности, на первом этапе (обучение большой сети) мы меняем функцию на exp (z_i / T) / Σ_j (exp (z_j / T)), где T - константа ›1. T управляет так называемым« мягкость »конечных результатов. Сама T называется температурой. Чем больше T (более высокая температура), тем ближе (мягче) конечные результаты будут к однородным. В литературе по дистилляции знаний вы часто встретите фразу «использование мягких мишеней» - использование высокой температуры - вот что означает эта фраза.

Почему мы используем большое значение T? Две причины. Во-первых, когда мягкие цели используются в большой сети, когда приходит время обучать маленькую сеть, дисперсия градиента будет меньше. Это позволяет нам увеличить скорость обучения для небольшой сети и использовать меньше выборок. Во-вторых, мягкие цели могут предоставить больше информации, чем обычные цели. Например, предположим, что обычным выходом softmax был вектор [0,98, 0,011, 0,009]. При высоком значении T выход может иметь вид [0,8, 0,12, 0,08]. Этот второй вывод показывает четкую разницу между вторым и третьим узлами вывода (0,12 против 0,08), которую первый вывод (0,011 против 0,009) почти не показывает. Таким образом, в выходных данных [0.8, 0.12, 0.08] содержится больше информации, и мы бы предпочли использовать ее для обучения небольшой сети.

Как упоминалось ранее, после обучения большой сети, малая сеть обучается на передаточном наборе, используя большие сетевые выходы в передаточном наборе (которые будут мягкими) в качестве меток. Этот процесс обучения для небольшой сети обычен - здесь нет никаких специальных шагов. Подводя итог, весь процесс дистилляции знаний от начала до конца:

1. Разделите свой обучающий набор на два набора: первый набор для обучения большой сети, а второй (переносной) набор для обучения небольшой сети.

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

3. Обучите небольшую сеть на передаточном наборе, используя большие сетевые выходы на передаточном наборе как источник истины.

Мы объяснили, как работает извлечение знаний. Есть более сложные версии, но концептуально они аналогичны нашей простой версии. Теперь - действительно ли это работает? да. Было проведено множество экспериментов, давайте рассмотрим самый простой. Сначала исследователи обучили большую нейронную сеть (2 скрытых слоя, 1200 узлов в каждом слое) на наборе данных MNIST. На тестовом наборе эта большая нейронная сеть имела 67 ошибок. Затем исследователи обучили меньшую сеть (2 скрытых слоя, 800 режимов на слой) на наборе данных MNIST. На тесте у этой меньшей нейронной сети было 146 ошибок. Если бы эта меньшая сеть вместо этого обучалась с извлечением знаний из большой сети (температура T = 20), она имела бы только 74 ошибки на тестовом наборе, что сопоставимо с производительностью теста большой сети. Этот эксперимент демонстрирует, что дистилляция знаний действительно передает большую часть знаний из большой сети в малую сеть, а также демонстрирует, что без большой сети малая сеть не могла бы достичь сопоставимой производительности. Были проведены эксперименты и в других областях, например, в распознавании речи - подробнее о них вы можете прочитать в оригинальной статье.

Итог: извлечение знаний - многообещающий метод для достижения производительности большой сети в меньшей сети. Он решает практическую проблему невозможности использования больших сетей из-за их размера, открывая двери для более высокопроизводительных нейронных сетей на потребительских устройствах. Я ожидаю увидеть широкое применение этой техники в будущем. Спасибо за чтение, оставляйте вопросы / комментарии!