LLM рассматриваются как важнейшая технология для разработки инновационных продуктов и услуг, и ведущие компании вкладывают в них значительные средства, чтобы использовать эту новую технологию в своих продуктах/услугах и обеспечивать большую ценность для своих пользователей. Однако существует огромная проблема с обучением и обслуживанием этих больших языковых моделей, это дорого. Согласно некоторым статьям [1] [2] стоимость обучения этих больших моделей может составлять от миллионов до миллиардов долларов. Дорого не правда ли?!

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

Учитывая большое количество параметров, повторное обучение всех параметров в пользовательском наборе данных может оказаться невозможным. Мало того, представьте себе организацию, которая хочет использовать LLM для юридических и медицинских предметов. Чтобы иметь полный опыт в предметной области, мы можем захотеть обучить две разные модели, одну полностью настроенную на юридических данных, а другую на медицинских данных. Теперь у нас есть две модели для обслуживания; если бы мы расширили варианты использования, у нас было бы n моделей для обслуживания. Обслуживать миллионы или миллиарды параметров недешево.

Были предприняты усилия для повышения эффективности обучения и обслуживания LLM. Были проведены некоторые исследования по снижению стоимости при сохранении точности. Один из способов — добавить в модель дополнительные слои и обучить только эти слои. Таким образом, предварительно обученная модель может храниться в памяти, и в памяти должны храниться только дополнительные слои для каждой задачи, что значительно повышает операционную эффективность обслуживания этих моделей. К сожалению, эти методы обычно приводят к компромиссу между эффективностью и качеством модели.

Есть еще один метод, направленный на решение этой проблемы; Адаптация низкого ранга (LoRA). Опубликованный Microsoft, он предлагает заморозить веса предварительно обученной модели и вводит обучаемые матрицы ранговой декомпозиции в каждый уровень архитектуры преобразователя, что значительно сокращает количество обучаемых параметров для последующих задач. Что означает «ранг матрицы»?

Определение: Ранг матрицы относится к количеству линейно независимых строк или столбцов в матрице.

Or

Его также можно определить как порядок старшего ненулевого минора.

Читая статью, я просмотрел эту статью, чтобы освежить в памяти то, как мы можем вычислить ранг матрицы. Я также предлагаю вам прочитать о СВД и подобных методах декомпозиции.

В статье упоминается идея, определенная Агаджанян и др..

Говорится

предварительно обученные языковые модели имеют низкую «внутреннюю размерность» и могут эффективно обучаться, несмотря на случайную проекцию на меньшее подпространство.

Что мы подразумеваем под этим? Это означает, что если есть 4 фактора, от которых зависит решение проблемы, будет 2 фактора, которые вносят основной вклад в решение. Вот простое объяснение, созданное LLM:

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

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

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

К какой весовой матрице следует применять LoRa? В документе основное внимание уделяется применению LoRa только к весам внимания; здесь у нас все еще есть матрицы запросов, ключей, значений и выходов.

Давайте посмотрим на некоторые цифры из их экспериментов. Авторы сначала установили бюджет и предложили бюджет модификации около 18М параметров (для ГПТ-3 175Б); для адаптации одной матрицы бюджет допускает ранг 8, тогда как для двух матриц он допускает ранг 4 и ранг 2 для всех четырех матриц. Вот результаты для того же:

Но как она соотносится с другими техниками?

Авторы предлагают настраивать r на основе разных наборов данных для получения оптимальных результатов.

Если рассматривать GPT-3 175B, то 18M должны занимать до 35Mb (FP16). Практически, если бы мы использовали LoRa для 100 задач, потребовалось бы 350 ГБ (базовый) + 35 МБ * 100 ≈ 354 ГБ. Однако для обычного FT потребуется 100 * 350 ГБ ≈ 35 ТБ (что ОГРОМНО).

Дайте мне знать, если вы использовали этот метод и сравнивали его с обычной тонкой настройкой в ​​​​реальных случаях использования!

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

Ссылки: Бумага, Git