Обзор

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

Эти требования начинают делать доступ к самым мощным моделям и возможностям недоступным для всех, кроме крупнейших технологических компаний, таких как Microsoft, IBM и Google. Это также требует огромных затрат каждый раз, когда кто-то хочет переобучить модель для новой задачи.

Например, передовые модели обработки естественного языка (NLP), такие как BERT и GPT-3, имеют 340 миллионов и 17 миллиардов параметров соответственно в своих полноразмерных версиях моделей, и их обучение включает оптимизацию всех этих параметров. Сообщается, что для обучения полной модели BERT на высокопроизводительном вычислительном оборудовании требуется 4 дня, при этом потребляется огромное количество электроэнергии. Точные детали того, как был обучен GPT-3, остаются неясными, но считается, что в процессе он использовал 45 терабайт данных, а его обучение оценивается в 4,6 миллиона долларов.

Доступны урезанные версии этих моделей, которые следуют общей концепции и архитектуре более крупных версий, жертвуя некоторой степенью производительности, однако даже они значительны. Меньшая версия BERT, доступная в настоящее время, содержит, например, 110 миллионов параметров.

К счастью, есть способ работать с этими моделями, который позволяет избежать полной переобучения модели для каждой задачи, в которой она используется. После того, как эти огромные модели были обучены, они часто становятся общедоступными, поэтому они доступны для всех. Эти выпущенные модели затем можно настроить для решения конкретной задачи. Именно этот этап тонкой настройки называется «Передача обучения», мы передаем знания, заложенные в обученной модели, для конкретной цели.

В этом блоге я объясню, как можно достичь такого трансферного обучения, и я надеюсь продемонстрировать это в следующей статье.

Трансферное обучение

Короче говоря, Transfer Learning использует продвинутую и очень сложную модель машинного обучения, которая была предварительно обучена на огромных объемах данных, а затем настраивает ее для работы над конкретной задачей. Например, мы можем загрузить предварительно обученную версию BERT, которая находится в свободном доступе в Интернете, «заморозить» большие части модели, сохранив все изученные параметры неизменными.

Затем мы позволяем остальным частям модели обучаться на данных, характерных для нашей текущей задачи, связанной с текстом. Цель здесь состоит в том, чтобы воспользоваться общими знаниями, заложенными в модели, и применить их к узкой задаче. Это на много порядков дешевле и проще, чем переобучение модели с нуля каждый раз, когда она используется. С разумным аппаратным обеспечением модель можно настроить за несколько часов, а не дни или недели для полного обучения.

Чтобы более подробно разобраться в трансферном обучении, нам сначала нужно понять общую концепцию искусственной нейронной сети. На рисунке 1 ниже показана концептуальная схема очень простой нейронной сети. Двигаясь слева направо, данные передаются в узлы (обозначены кружками на диаграмме) входного слоя, передаются по соединениям (показаны линиями), обрабатываются в Скрытый слой и, наконец, результат выводится на Выходной слой. Этим результатом может быть число, которое мы пытаемся предсказать, например, стоимость дома, детали которого мы поместили в модель в качестве входных данных. В качестве альтернативы, это может быть вероятность того, что твит является «фейковой новостью», а текст твита является входными данными, или что-либо еще, что мы хотим предсказать с заданными релевантными входными данными.

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

Помимо простой сети, такой как эта, у нас есть глубокое обучение, где сеть имеет много скрытых слоев, как показано на рисунке 2 ниже.

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

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

Чтобы сделать это более конкретным, рассмотрим сеть на рис. 3 ниже. Это задача распознавания изображения, и фотография лица передается на входной слой. Первые слои идентифицируют простые функции низкого уровня, такие как края, темные и светлые участки. Следующие несколько слоев определяют более сложные элементы среднего уровня, такие как глаза, носы, рты и т. д. Затем последние слои объединяют все это, чтобы получить детали лиц. Затем модель выводит свой результат, который может быть именем человека на исходном изображении для этого примера.

Если бы нам дали эту модель, которая была предварительно обучена, но мы хотели бы использовать ее для выполнения задачи распознавания лиц, немного отличающейся от той, на которой она была обучена, то у нас есть три варианта:

  1. Используйте заданную архитектуру модели (расположение узлов/соединений/и т. д.), но переобучите всю модель с нуля, чтобы найти подходящие параметры. Как уже говорилось, если модель очень мощная и большая, это может потребовать огромных усилий и затрат, при этом очень мало пользы от ранее проделанной работы.
  2. Мы могли бы попробовать использовать модель как есть. В некоторых случаях, когда новые данные близки к исходным обучающим данным, это может работать достаточно хорошо. Например, модель, обученная определять тональность твитов, может достаточно хорошо работать для определения тональности в других типах текста. Это практически не требует никакой работы, кроме обеспечения того, что модель может принимать новые данные, но, вероятно, не будет работать так хорошо, как можно было бы надеяться.
  3. Мы могли бы попытаться использовать знания, уже встроенные в сеть, и настроить их для новой задачи, для которой мы хотим их использовать. Это то, что известно как Перенос обучения.

Для трансферного обучения мы берем предварительно обученную модель и замораживаем параметры на ранних слоях сети (самых левых на диаграммах). Другими словами, когда мы обучаем модель, мы не позволяем изменять эти параметры на ранних этапах, а только те, которые находятся в более поздних слоях, ближе к выходу.

Это показано ниже на рисунке 4, «Предварительно обученные веса» относятся к замороженным параметрам, а «Обучаемые веса» — это слои, которые мы позволяем адаптировать к новым данным.

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

Трансферное обучение имеет следующие три основных преимущества:

  1. Тренироваться намного быстрее и легче. Поскольку мы должны изменить только часть параметров в модели, это требует намного меньше вычислений и, следовательно, времени.
  2. Мы используем уже затраченные усилия, мы не пытаемся воссоздать те же самые функции, которые были идентифицированы исходной моделью за определенную плату.
  3. Transfer Learning обычно требует только часть объема данных для обучения по сравнению с обучением полной модели с нуля.

Вывод

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