
Полная версия
Искусственный интеллект от А до Б
Для создания приложений с помощью базовых моделей сначала необходимы базовые модели. Хотя вам не нужно знать, как разработать модель для ее использования, высокоуровневое понимание поможет вам решить, какую модель использовать и как адаптировать ее к вашим потребностям. Обучение базовой модели – невероятно сложный и затратный процесс. Те, кто умеет это делать хорошо, скорее всего, не смогут раскрыть секретный соус из-за соглашений о конфиденциальности.
Из-за растущего недостатка прозрачности в процессе обучения моделей фундаментов становится все трудности с пониманием всех проектных решений, которые используются при создании модели. В целом, однако, различия в базовых моделях можно проследить до решений об обучающих данных, архитектуре и размере модели, а также о том, как они обрабатываются после обучения в соответствии с предпочтениями человека. Поскольку модели учатся на данных, их обучающие данные многое говорят об их возможностях и ограничениях. Учитывая доминирование архитектуры трансформаторов, может показаться, что модельная архитектура не является выбором. Вы можете задаться вопросом, что делает архитектуру трансформатора настолько особенной, что она продолжает доминировать? Сколько времени пройдет, прежде чем на смену придет другая архитектура, и как может выглядеть эта новая архитектура?
Процесс обучения модели часто делится на претренинг и посттренинг. Предварительное обучение делает модель работоспособной, но не обязательно безопасной или простой в использовании. Вот тут-то и приходит на помощь пост-тренинг. Цель пост-тренинга – привести модель в соответствие с предпочтениями человека. Но что именно является человеческим предпочтением? Как его можно представить таким образом, чтобы модель могла обучаться? То, как разработчик модели выравнивает свою модель, оказывает значительное влияние на удобство использования модели. Хотя большинство людей понимают влияние обучения на производительность модели, влияние выборки часто упускается из виду. Выборка – это способ, с помощью которого модель выбирает выходные данные из всех возможных вариантов. Это, пожалуй, одна из самых недооцененных концепций в ИИ. Мало того, что выборка объясняет многие, казалось бы, сбивающие с толку модели поведения ИИ, включая галлюцинации и несоответствия, но выбор правильной стратегии выборки также может значительно повысить производительность модели при относительно небольших усилиях.
Модель ИИ хороша настолько, насколько хороши данные, на которых она была обучена. Если в обучающих данных нет вьетнамского языка, модель не сможет переводиться с английского на вьетнамский. Аналогичным образом, если модель классификации изображений видит только животных в своем обучающем наборе, она не будет хорошо работать на фотографиях растений. Если вы хотите, чтобы модель улучшила выполнение определенной задачи, вы можете включить больше данных для этой задачи в обучающие данные. Однако собрать достаточно данных для обучения большой модели непросто, и это может быть дорого. Разработчикам моделей часто приходится полагаться на доступные данные, даже если эти данные не совсем соответствуют их потребностям.
Например, распространенным источником обучающих данных является Common Crawl, созданный некоммерческой организацией, которая время от времени сканирует веб-сайты в Интернете. В 2022 и 2023 годах эта организация ежемесячно сканировала примерно 2–3 миллиарда веб-страниц. Google предоставляет чистое подмножество Common Crawl, которое называется Colossal Clean Crawled Corpus, или сокращенно C4.
Качество данных Common Crawl и C4 в определенной степени сомнительно – подумайте о кликбейте, дезинформации, пропаганде, теориях заговора, расизме, женоненавистничестве и обо всех сомнительных веб-сайтах, которые вы когда-либо видели или избегали в Интернете. Исследование, проведенное Washington Post, показывает, что 1000 наиболее распространенных веб-сайтов в наборе данных включают несколько СМИ, которые занимают низкие позиции по шкале надежности NewsGuard. Проще говоря, Common Crawl содержит множество фейковых новостей.
Тем не менее просто потому, что Common Crawl доступен, его вариации используются в большинстве базовых моделей, которые раскрывают свои источники обучающих данных, включая GPT-3 от OpenAI и Gemini от Google. Возможно, Common Crawl также используется в моделях, которые не раскрывают свои обучающие данные. Чтобы избежать пристального внимания как со стороны общественности, так и со стороны конкурентов, многие компании перестали раскрывать эту информацию.
Некоторые команды используют эвристику для фильтрации данных низкого качества из Интернета. Например, OpenAI использовал только те ссылки на Reddit, которые получили не менее трех голосов «за» для обучения GPT-2. Хотя это помогает отсеивать ссылки, которые никому не интересны, Reddit не является вершиной приличия и хорошего вкуса.
Подход «используйте то, что у нас есть, а не то, что мы хотим» может привести к созданию моделей, которые хорошо справляются с задачами, присутствующими в обучающих данных, но не обязательно с задачами, которые вас интересуют. Чтобы решить эту проблему, крайне важно подобрать наборы данных, которые соответствуют вашим конкретным потребностям. В этом разделе основное внимание уделяется курированию данных для конкретных языков и предметных областей, обеспечивая широкую, но специализированную основу для приложений в этих областях.
Несмотря на то, что базовые модели, специфичные для языка и предметной области, можно обучать с нуля, их также часто тонко настраивают поверх моделей общего назначения. Кто-то может задаться вопросом, почему бы просто не обучить модель на всех доступных данных, как общих, так и специализированных, чтобы модель могла делать все? Так поступают многие. Однако обучение на большем объеме данных часто требует больше вычислительных ресурсов и не всегда приводит к повышению производительности. Например, модель, обученная на меньшем объеме высококачественных данных, может превзойти модель, обученную на большом объеме данных низкого качества. Используя токены высококачественных данных кодирования, Gunasekar с соавторами (2023) смогли обучить модель с параметрами, которая превосходит гораздо более крупные модели по нескольким важным тестам кодирования.
Английский язык доминирует в интернете. Анализ набора данных Common Crawl показывает, что на английский язык приходится почти половина данных (45,88%), что делает его в восемь раз более распространенным, чем второй по распространенности язык, русский (5,97%). Многие другие языки несмотря на то, что на них сегодня много носителей, сильно недопредставлены в Common Crawl. Учитывая доминирование английского языка в интернет-данных, неудивительно, что, согласно многочисленным исследованиям, модели общего назначения работают гораздо лучше для английского, чем для других языков. Например, в бенчмарке MMLU, наборе из 14 000 задач с несколькими вариантами ответов, охватывающих 57 предметов, GPT-4 показал гораздо лучшие результаты на английском языке, чем недостаточно представленные языки, такие как телугу.
Аналогичным образом, при тестировании шести математических задач в рамках проекта Эйлер Йенни Джун обнаружила, что GPT-4 способен решать задачи на английском языке более чем в три раза чаще по сравнению с армянским или фарси. Недостаточная представленность является основной причиной такой низкой представленности. Три языка, которые имеют наихудшие показатели в тестах MMLU GPT-4 – телугу, маратхи и пенджаби – также входят в число языков, которые наиболее мало представлены в Common Crawl. Однако недостаточная представленность – не единственная причина. Структура языка и культура, которую он воплощает, также могут затруднить изучение языка моделью.
Учитывая, что LLM, как правило, хорошо переводят, можем ли мы просто перевести все запросы с других языков на английский, получить ответы и перевести их обратно на исходный язык? Многие люди действительно придерживаются этого подхода, но он не идеален. Во-первых, для этого требуется модель, которая может в достаточной степени понимать недостаточно представленные языки для перевода. Во-вторых, перевод может привести к потере информации. Например, в некоторых языках, таких как вьетнамский, есть местоимения для обозначения отношений между двумя носителями. При переводе на английский язык все эти местоимения переводятся как «я» и «ты», что приводит к потере информации об отношениях.
Модели также могут столкнуться с неожиданными проблемами производительности при работе на языках, отличных от английского. Например, NewsGuard обнаружил, что ChatGPT более склонен распространять дезинформацию на китайском языке, чем на английском. В апреле 2023 года NewsGuard попросил ChatGPT-3.5 подготовить дезинформационные статьи о Китае на английском, упрощенном и традиционном китайском языках. Что касается английского языка, ChatGPT отказался выдавать ложные утверждения в шести из семи запросов. Тем не менее, он делал ложные заявления на упрощенном китайском и традиционном китайском языках все семь раз. Неясно, что вызывает эту разницу в поведении. Помимо проблем с качеством, модели также могут быть медленнее и дороже для языков, отличных от английского. Задержка и стоимость вывода модели пропорциональны количеству маркеров на входе и в ответе. Оказывается, что токенизация может быть гораздо более эффективной для одних языков, чем для других. Сравнивая GPT-4 с MASSIVE, набором данных из миллиона коротких текстов, переведенных на 52 языка, Йенни Джун обнаружила, что для передачи того же смысла таким языкам, как бирманский и хинди, требуется гораздо больше токенов, чем английскому или испанскому. Для набора данных MASSIVE медианная длина токена в английском языке равна 7, но медианная длина в хинди равна 32, а в бирманском – колоссальные 72, что в десять раз больше, чем в английском.
Если предположить, что время, необходимое для генерации токена, одинаково на всех языках, то для того же контента GPT-4 на бирманском языке требуется примерно в десять раз больше времени, чем на английском. Для API, которые взимают плату за использование токенов, бирманский стоит в десять раз дороже, чем английский. Чтобы решить эту проблему, многие модели были обучены работать на языках, отличных от английского. Самым активным языком, помимо английского, безусловно, является китайский, с ChatGLM, YAYI, лама-китайским и другими. Также есть модели на французском (CroissantLLM), вьетнамском (PhoGPT), арабском (Jais) и многих других языках.
Модели общего назначения, такие как Gemini, GPT и Llamas, могут невероятно хорошо работать в широком спектре областей, включая, помимо прочего, кодирование, юриспруденцию, науку, бизнес, спорт и науку об окружающей среде. Во многом это связано с включением этих доменов в их обучающие данные. Было проведено не так много анализов распределения доменов в данных машинного зрения. Это может быть связано с тем, что изображения сложнее классифицировать, чем тексты. Тем не менее, вы можете определить домены модели на основе ее производительности в тестах производительности.
Несмотря на то, что базовые модели общего назначения могут отвечать на повседневные вопросы о различных предметных областях, они вряд ли будут хорошо справляться с задачами, специфичными для предметной области, особенно если они никогда не сталкивались с этими задачами во время обучения. Двумя примерами задач, специфичных для данной области, являются разработка лекарств и скрининг рака. Открытие лекарств включает в себя данные белков, ДНК и РНК, которые имеют определенные форматы и являются дорогостоящими для получения. Эти данные вряд ли можно найти в общедоступных интернет-данных. Точно так же скрининг рака обычно включает в себя рентген и фМРТ (функциональную магнитно-резонансную томографию), которые трудно получить из-за конфиденциальности.
Чтобы обучить модель для успешного выполнения этих задач, специфичных для предметной области, может потребоваться курировать очень специфические наборы данных. Одной из самых известных предметно-ориентированных моделей, пожалуй, является AlphaFold от DeepMind, обученная на последовательностях и трехмерных структурах около 100 000 известных белков. BioNeMo от NVIDIA – еще одна модель, которая фокусируется на биомолекулярных данных для разработки лекарств. Med-PaLM2 от Google объединил возможности LLM с медицинскими данными, чтобы отвечать на медицинские запросы с более высокой точностью.
Предметно-ориентированные модели особенно распространены в биомедицине, но и в других областях предметно-ориентированные модели также могут извлечь выгоду. Вполне возможно, что модель, обученная на архитектурных эскизах, может помочь архитекторам гораздо лучше, чем Stable Diffusion, или модель, обученная на заводских планах, может быть оптимизирована для производственных процессов гораздо лучше, чем общая модель, такая как ChatGPT.
В этом разделе представлен общий обзор того, как обучающие данные влияют на производительность модели. Теперь давайте рассмотрим влияние дизайна модели на ее производительность. Прежде чем обучать модель, разработчикам необходимо решить, как должна выглядеть модель. Какой архитектуры он должен придерживаться? Сколько параметров у него должно быть? Эти решения влияют не только на возможности модели, но и на удобство ее использования в последующих приложениях. Например, модель с 7B параметрами будет значительно проще развернуть, чем модель с 175B параметрами. Точно так же оптимизация модели трансформатора с точки зрения задержки сильно отличается от оптимизации другой архитектуры. Давайте рассмотрим факторы, лежащие в основе этих решений.
Наиболее доминирующей архитектурой для моделей оснований, основанных на языке, является архитектура трансформера (Vaswani с соавторами, 2017), которая основана на механизме внимания. Он устраняет многие ограничения предыдущих архитектур, которые способствовали его популярности. Однако архитектура трансформатора имеет свои ограничения. В этом разделе анализируется архитектура трансформатора и ее альтернативы. Поскольку он углубляется в технические детали различных архитектур, он может быть технически сложным. Если вы обнаружите какую-либо часть слишком глубоко в сорняках, не стесняйтесь пропустить ее.
Чтобы разобраться в трансформаторе, давайте посмотрим на проблему, для решения которой он был создан. Архитектура трансформатора была популяризирована вслед за успехом архитектуры seq2seq (sequence-to-sequence). На момент своего появления в 2014 году seq2seq обеспечил значительное улучшение в решении сложных на тот момент задач: машинный перевод и обобщение. В 2016 году Google включил seq2seq в Google Translate, обновление, которое, по их утверждению, дало им «самые большие на сегодняшний день улучшения качества машинного перевода». Это вызвало большой интерес к seq2seq, что сделало его незаменимой архитектурой для задач, связанных с последовательностями текста.
На высоком уровне seq2seq содержит энкодер, который обрабатывает входные данные, и декодер, который генерирует выходы. Как входы, так и выходы представляют собой последовательности токенов, отсюда и название. Seq2seq использует RNN (рекуррентные нейронные сети) в качестве кодировщика и декодера. В своей самой простой форме кодировщик обрабатывает входные токены последовательно, выводя окончательное скрытое состояние, представляющее входные данные. Затем декодер последовательно генерирует выходные маркеры, обусловленные как конечным скрытым состоянием входа, так и ранее сгенерированным маркером.
Есть две проблемы с seq2seq, которые решают Vaswani с соавторами (2017). Во-первых, ванильный декодер seq2seq генерирует выходные токены, используя только окончательное скрытое состояние входа. Интуитивно это похоже на генерирование ответов о книге с помощью краткого описания книги. Это ограничивает качество генерируемых выходных данных. Во-вторых, кодировщик и декодер RNN означают, что обработка и генерация входных данных и вывода выполняются последовательно, что замедляет работу при работе с длинными последовательностями. Если вход имеет длину 200 токенов, seq2seq должен дождаться завершения обработки каждого входного токена, прежде чем перейти к следующему.
Архитектура трансформатора решает обе проблемы с помощью механизма внимания. Механизм внимания позволяет модели взвешивать важность различных входных токенов при создании каждого выходного токена. Это похоже на генерирование ответов, ссылаясь на любую страницу в книге. В то время как механизм внимания часто ассоциируется с моделью трансформатора, он был представлен за три года до статьи о трансформаторе. Механизм внимания также может быть использован с другими архитектурами. В 2016 году Google использовал механизм внимания в своей архитектуре seq2seq для своей модели GNMT (Google Neural Machine Translation). Тем не менее только после того, как статья о трансформаторе показала, что механизм внимания может быть использован без RNN, он взлетел.
Архитектура трансформатора полностью исключает использование RNN. С помощью трансформаторов входные токены могут обрабатываться параллельно, что значительно ускоряет обработку входных данных. В то время как трансформер устраняет узкое место последовательного ввода, языковые модели на основе авторегрессии на основе трансформеров по-прежнему имеют узкое место последовательного вывода.
Таким образом, вывод для языковых моделей, основанных на трансформерах, состоит из двух этапов:
1. Предварительное заполнение.
Модель обрабатывает входные токены параллельно. На этом шаге создается промежуточное состояние, необходимое для создания первого выходного маркера. Это промежуточное состояние включает векторы ключа и значения для всех входных маркеров.
2. Расшифровывание.
Модель генерирует по одному выходному маркеру за раз.
Распараллеливаемая природа предварительного заполнения и последовательный аспект декодирования мотивируют многие методы оптимизации, чтобы сделать вывод языковой модели дешевле и быстрее.
Механизм внимания. В основе архитектуры трансформатора лежит механизм внимания. Понимание этого механизма необходимо для понимания того, как работают модели трансформаторов. В основе механизма внимания лежат ключи, значения и векторы запросов.
Вектор запроса (Q) представляет текущее состояние декодера на каждом шаге декодирования. Используя тот же пример с кратким изложением книги, этот вектор запроса можно представить как человека, ищущего информацию для создания резюме.
Каждый ключевой вектор (K) представляет предыдущую лексему. Если каждый предыдущий токен является страницей в книге, то каждый вектор ключа подобен номеру страницы. Обратите внимание, что на данном этапе декодирования предыдущие маркеры включают как входные маркеры, так и ранее созданные маркеры.
Каждый вектор значений (V) представляет фактическое значение предыдущего маркера, полученное моделью. Каждый вектор значений подобен содержимому страницы.
Механизм внимания вычисляет, сколько внимания следует уделить входному маркеру, выполняя скалярное произведение между вектором запроса и его ключевым вектором. Высокий балл означает, что модель будет использовать больше содержимого этой страницы (вектора значений) при создании краткого описания книги.
Поскольку каждый предыдущий маркер имеет соответствующий вектор ключа и значения, чем длиннее последовательность, тем больше векторов ключа и значения необходимо вычислить и сохранить. Это одна из причин, почему так трудно увеличить длину контекста для моделей трансформаторов.
Давайте разберемся, как работает функция внимания. Для входных данных x векторы ключа, значения и запроса вычисляются путем применения матриц ключей, значений и запросов к входным данным. Пусть WK, WV и WQ будут матрицами ключей, значений и запросов. Векторы ключа, значения и запроса вычисляются следующим образом: K = xWK; V = xWV; Q = xWQ. Матрицы запросов, ключей и значений имеют измерения, соответствующие скрытому измерению модели. Например, в Llama 2-7B размер скрытой размерности модели равен 4096, что означает, что каждая из этих матриц имеет размерность 4096 × 4096. Каждый результирующий вектор K, V, Q имеет размерность 4096.
Механизм внимания почти всегда многоголовый. Несколько головок позволяют модели одновременно обслуживать разные группы предыдущих токенов. При многоголовом внимании векторы запроса, ключа и значения разбиваются на более мелкие векторы, каждый из которых соответствует голове внимания. В случае ламы 2-7B, поскольку у нее 32 головы внимания, каждый вектор K, V и Q будет разбит на 32 вектора размерности 128. Это связано с тем, что 4096 / 32 = 128. Attention(Q, K, V ) = softmax( Q K T )V.
Затем выходы всех голов внимания объединяются. Матрица выходной проекции используется для применения еще одного преобразования к этому составному выходу перед тем, как он будет передан на следующий шаг вычислений модели. Матрица выходной проекции имеет ту же размерность, что и скрытая размерность модели.
Трансформаторный блок. Теперь, когда мы обсудили, как работает внимание, давайте посмотрим, как оно используется в модели. Архитектура трансформатора состоит из нескольких трансформаторных блоков. Точное содержимое блока варьируется от модели к модели, но, в целом, каждый трансформаторный блок содержит модуль внимания и модуль MLP (многослойный персептрон). Каждый модуль внимания состоит из четырех весовых матриц: запроса, ключа, значения и проекции вывода. Модуль MLP состоит из линейных слоев, разделенных нелинейными функциями активации. Каждый линейный слой представляет собой весовую матрицу, которая используется для линейных преобразований, в то время как функция активации позволяет линейным слоям изучать нелинейные закономерности. Линейный слой также называется слоем с прямой связью.
Распространенными нелинейными функциями являются ReLU, выпрямленная линейная единица (Agarap, 2018) и GELU (Hendrycks and Gimpel, 2016), которая использовалась в GPT-2 и GPT-3 соответственно. Функции действий очень просты. Например, все, что делает ReLU, – это преобразует отрицательные значения в 0. Математически это записывается как: ReLU(x) = max(0, x).
Количество трансформаторных блоков в модели трансформатора часто называют количеством слоев в этой модели. Языковая модель, основанная на трансформерах, также снабжена модулем до и после всех блоков трансформеров. Встраиваемый модуль перед трансформаторными блоками состоит из матрицы вложения и матрицы позиционного встраивания, которые преобразуют токены и их позиции в векторы вложения соответственно. Наивно считается, что количество индексов позиции определяет максимальную длину контекста модели. Например, если модель отслеживает 2 048 позиций, ее максимальная длина контекста равна 2 048. Однако существуют методы, которые увеличивают длину контекста модели без увеличения числа индексов позиции.
Выходной слой после трансформаторных блоков сопоставляет выходные векторы модели с вероятностями маркеров, используемыми для выборки выходных данных модели (обсуждается в разделе «Выборка» на стр. 88). Этот модуль обычно состоит из одной матрицы, которая также называется слоем отвержения. Некоторые люди называют выходной слой головкой модели, так как это последний слой модели перед генерацией выходных данных.
Размер модели трансформатора определяется размерами его строительных блоков. Вот некоторые из ключевых ценностей: размерность модели определяет размеры матриц проекции ключа, запроса, значения и вывода в блоке трансформатора; количество трансформаторных блоков; размер слоя прямой связи; объем словарного запаса.
Чем больше значения размеров, тем больше размеры модели. Обратите внимание, что хотя увеличенная длина контекста влияет на объем памяти, занимаемый моделью, она не влияет на общее количество параметров модели.
Несмотря на то, что модель трансформера доминирует в ландшафте, это не единственная архитектура. С тех пор, как в 2012 году AlexNet возродил интерес к глубокому обучению, многие архитектурные архитектуры то входили, то выходили из моды. Seq2seq был в центре внимания в течение четырех лет (2014–2018). GAN (генеративно-состязательные сети) захватили коллективное воображение немного дольше (2014–2019). По сравнению с архитектурами, которые были до него, трансформатор липкий. Он существует с 2017 года. Сколько времени пройдет, прежде чем появится что-то лучшее? Разработать новую архитектуру, способную превзойти трансформаторы, непросто. С 2017 года трансформатор подвергается серьезной оптимизации. Новая архитектура, которая призвана заменить трансформатор, должна будет работать в том масштабе, который важен для людей, на оборудовании, которое их интересует.
Тем не менее, надежда есть. В то время как модели, основанные на трансформаторах, доминируют, несколько альтернативных архитектур набирают обороты.
Одной из популярных моделей является RWKV, модель на основе RNN, которую можно распараллелить для обучения. Из-за своей природы RNN, теоретически, она не имеет такого же ограничения по длине контекста, как модели на основе трансформаторов. Однако на практике отсутствие ограничений по длине контекста не гарантирует хорошей производительности при длительном контексте. Моделирование длинных последовательностей остается основной проблемой при разработке LLM. Архитектура, которая показала большие перспективы в области памяти дальнего действия, – это SSM (модели пространства состояний). С момента появления архитектуры в 2021 году было внедрено несколько методов, которые делают архитектуру более эффективной, лучше справляется с обработкой длинных последовательностей и масштабируется для моделей больших размеров. Вот некоторые из этих методов, чтобы проиллюстрировать эволюцию новой архитектуры: S4 был разработан для повышения эффективности SSM; H3 включает в себя механизм, который позволяет модели вспоминать ранние лексемы и сравнивать лексемы в разных последовательностях, назначение этого механизма схоже с назначением механизма внимания в архитектуре трансформатора, но он более эффективен; Mamba масштабирует SSM до трех миллиардов параметров. По моделированию языка Mamba-3B превосходит трансформаторы того же размера и соответствует трансформаторам в два раза больше по размеру. Авторы также показывают, что вычисления вывода Mamba масштабируются линейно с длиной последовательности (по сравнению с квадратичным масштабированием для трансформаторов), его производительность демонстрирует улучшение на реальных данных с последовательностями длиной до миллиона; Jamba чередует блоки слоев transformer и Mamba для дальнейшего масштабирования SSM. Авторы выпустили смешанную модель с 52 млрд общих доступных параметров (12 млрд активных параметров), предназначенную для размещения в одном графическом процессоре емкостью 80 ГБ. Jamba демонстрирует высокую производительность в тестах стандартной языковой модели и оценке длинного контекста при длине контекста до 256 тыс. токенов. Он также занимает мало памяти по сравнению с ванильными трансформаторами.