КАК ОБУЧАЮТ БОЛЬШИЕ ЛИНГВИСТИЧЕСКИЕ МОДЕЛИ - ЛЕКТОРИЙ ВИШ
Елизавета Боброва:
Классические модели появились и используются давно. Первой задачей, которую решали нейронные сети, была задача машинного перевода. И сейчас ее решают тоже с помощью нейронных сетей.
Раньше это были алгоритмы подсчетов и словарей, сейчас это уже нейронные сети.
Все, наверное, помнят эру, когда китайские товары очень смешно переводились на русский язык, вследствие несколько неправильного обучения как раз нейронных сетей.
А вот большие языковые модели – это уже сложнее. Они хорошо имитируют то, как мы пишем. Казалось бы, они начали нас понимать.
Запись лекции:
Мне с коллегами нравится играть в такую игру –давайте будем угадывать, написал ли данный текст человек или нейронная сеть. Если вы считаете, что это нейронная сеть, вы поднимаете руку.
Итак, кто написал данный текст?
Машина шинелит треножая со- Бака ребреется бака. Листи листи ле… И машина собаку ПРОПОРОПАЛА — Прохожие кашли, Позёвые чки, Бака липует — дресная масня, Лишь я один бредил руками, И то — по кривычке.
Это произведение Егора Летова.
Идём дальше. Кто написал данное произведение? Человек или нейросеть?
А рыжую кошку смотрело в подвал. Должно быть, должно быть, Ей виделись там земноводные вещи. И рыжая кошка тянула в подвал.
Нейросеть? Вы снова не угадали. Снова Егор Летов. Может быть, он был нейросетью…
Так, а теперь…
А потом Я сяду в кино. И в бездумном небе над нами И звезды, и птицы летят, И летят, и смеются. И не важно, что я не знаю, что такое любовь, Когда я иду по воде.
А теперь это действительно нейросеть. Это творчество нейросети из альбома «Нейронная оборона» 2016 года. Обучением искусственного интеллекта занимались сотрудники Яндекса. Так нейросеть научилась писать стихи в стиле Егора Летова. Как мы можем заметить, получилось вполне правдоподобно.
Теперь уже сложнее.
Вот какие были отношения в те времена между всеми людьми. Они хорошо умели делить тяготы жизни. Но постепенно у них исчезли охота и желание трудиться вместе.
Это нейросеть, сочинение нейросети «Порфиревич». Она была создана программистом Михаилом Гранькиным и запущена в открытом доступе. Сеть умеет продолжать любые фразы. Здесь вы видите вариант окончания рассказа Льва Толстого «Ноша».
Следующий текст
Если человек не понимает проблемы, он пишет много формул, а когда поймет, в чем дело, их остается в лучшем случае две…
Это действительно сказал человек. Это слова датского физика-теоретика Нильса Бора.
На данных примерах мы увидели очень интересный феномен. Нейросеть очень хорошо умеет, скажем так, адаптироваться к тому, чему ее учат. И учить нейросети – это очень интересно и весело.
Но давайте сначала обсудим что же вообще такое большие языковые модели. Можно представить себе идеального студента – он прочитал все книги, все статьи всю Википедию. Прочитал все-все-все статьи, которые нужны, по теме и не по теме, и не просто прочитал, но еще запомнил и уловил какие-то связи.
Но какие связи уловил этот студент? Он не улавливает логические связи. Он не может связать, если мы говорим про текст, что у нас все, что зеленое, это жабка, а все, что, допустим, розовенькое, это свинка, и что свинка у нас всегда розовая.
Я думаю, все видели историю промта в нейросеть, где просили давать рецепт свиных крылышек. Мы с вами понимаем, что у свинок крылышек нет, однако нейросеть выдала прекрасный рецепт свиных крылышек. Это прямое доказательство того, что логического мышления у машины нет.
Что делает машина?
Машина предсказывает на основе вероятности, какое следующее слово должно появиться.
Как она это делает?
Самые последние и качественные, наверное, архитектуры — это архитектура трансформера. Трансформер, по сути, состоит из энкодера и декодера, внутри которых есть механизм самовнимания, который называется self-attention. Энкодер кодирует информацию, декодер декодирует.
Зачем нам кодировать информацию? Все очень просто. Нейронная сеть — это все-таки что-то вычислительное. С компьютером мы общаемся хоть и программно, но внутри у него крутятся нолики-единички. Также у нейронной сети. В нейронной сети внутри крутятся вектора, нолики-единички, которые надо сначала закодировать, а потом раскодировать, чтобы мы могли понять, что нейронная сеть нам, собственно, сказала.
Посмотрим на данную иллюстрацию. Слева вы видите предложение:
The animal didn’t cross the street because it was too tired.
И пример того, как нейросеть сама у себя раскладывает связи слов с приложением.
Для нас с вами очевидно, что предложение «Животное не пересекло улицу, потому что оно было усталым», относится к животному, потому что улица в прямом смысле устать не может.
Однако для модели это не очевидно, но при этом она научилась на основе множества текстов и множества составлений вероятностных пространств и механизма self-attention определять, что в данном предложении слово it относится к конструкции the animal, и из-за этого у нас получаются красивые предложения.
Очень интересно, как большие языковые модели учатся нас понимать.
Как мы уже сказали, основная их функция –предсказать следующее слово.
Справа есть диалог. «После трудного рабочего дня она вернулась домой и…».
Мы с вами понимаем, что, скорее всего, если мы вернулись домой после трудного рабочего дня, мы, скорее всего, будем думать об отдыхе, о еде, сне или каких-то развлечениях. И вряд ли мы полетим на Луну или превратимся в динозавра.
Искать причинно-следственные связи с механизмом self-attention и понимать реальный мир – это как раз и есть контекст. Если мы все время говорим на научном языке, пишем научные тексты, вряд ли мы в тексте внезапно вспомним поросенка из сказки, потому что это звучит нелогично.
А теперь расскажу вам чуть подробнее, как обучение происходит.
Сначала мы подготавливаем датасет.
Если мы говорим про большую языковую модель, большую-большую, такую как ChatGPT, нам практически необходим весь интернет, который существует, плюс все оцифрованные книги, чтобы достаточно хорошо обучить модель.
Но примите во внимание, что не все можно скармливать для обучения нейросети.
Когда-то давно, в 2015 году, проходило соревнование между архитектурой GPT (Generative Pre-trained Transformer) и BERT (Bidirectional encoder representations from transformers).
Архитектура BERT обучалась на открытой, свободной энциклопедии, которую мы все знаем, это Википедия. А ChatGPT решили обучать на высокой художественной литературе. Это были первые версии.
Вот как вы думаете, какая из первых версий получилась лучше в понимании человеческого языка? Неужели литература? Нет, к сожалению, литература не помогла.
Когда обращались к данной модели с целью перевода, она хорошо справлялась с высококачественной литературой, но когда ее, грубо говоря, просили привести «привет, как дела», она выдавала очень странные результаты, совершенно не соответствующие переводу. Потому что она не знала такой простой конструкции, как «привет, как дела». В высокой художественной литературе так никто не писал. Знания у нее не появилось, связи не образовались, перевести не смогла.
Тогда стратегию обучения поменяли. Подготовили действительно обширный датасет, очень вариативный. Учли и художественную литературу, и посты с Reddit с определенной оценкой. И так появилась вторая версия GPT.
Итак, мы подготовили датасет. Мы данные токенизируем и маскируем. Зачем мы токенизируем данные?
Токен – это единица предложения. Токен может быть как одним словом, так и может состоять из комбинаций слов. Для этого используются специальные токенизаторы. Помимо того, чтобы использовать специальные токенизаторы, мы можем использовать регулярные выражения, чтобы разбить предложение на конкретные слова,
а потом преобразовать их уже в вектор.
Потому что мы помним, что у нас нейросеть предсказывает вероятность, а вероятность она предсказывает на основе вероятностного пространства векторов, которые она строит в процессе своего обучения.
Маскирование данных также одна из возможных стратегий. Когда мы специально скрываем для нейросети какое-то слово или подбираем ему какую-то маску, чтобы она умела предсказывать следующее слово или, допустим, это слово не имеет роли, либо оно наоборот суперважное, мы подсвечиваем нейросети именно конкретное слово.
Далее все идет в принципе ровно так же, как и с обычными нейронными сетями – мы разделяем данные, у нас есть обучающая выборка, валидационные и тестовые наборы. Мы проводим обучение, оценку и тестирование.
Для оценки моделей существует множество метрик. Есть метрики связанности текста, есть метрики перевода, но точность ответа на заданный вопрос, если мы говорим о свободных моделях, мы не можем никак математически обсчитать, мы не представляем, у нас нет заранее правильного ответа. Помимо предварительного обучения, происходит тонкая настройка моделей, тонкую настройку мы можем проводить через некоторое количество параметров в обычной нейросети, и через просто огромное количество параметров в большой языковой модели.
Большая языковая модель, если представлять, это по сути всего два файла. Файл самой модели, который сколько-то весит (очень легко понять, большая она или маленькая –
обычно большие весят много мегабайт), и файл с ее гиперпараметрами, которые она применяет при генерации ответа.
Это может быть как параметр того, насколько она креативна, насколько близко к исходному тексту она может подбирать слова. Мы можем настроить модель именно так, задавая ей определенные настройки. Мы можем настроить ее под себя через инженерию запросов.
Я думаю, многие, когда баловались, использовали промпт «Сегодня ты лучший физик в мире, пожалуйста, реши за меня вот эту контрольную». Именно вот этот промпт «Ты лучший физик в мире» обращает внимание модели на то, что сейчас мы будем с вами про физику говорить, и она уже понимает, что решать контрольную она будет по физике, возможно, она даже ее решит (но не факт).
С геометрией пока у больших языковых моделей очень плохо. Особенно, когда мы говорим про геометрию в 3D. Они у себя в голове не могут построить пирамидку, не могут провести сечения.
Также мы можем аугментировать данные. Что такое аугментация? Мы обогащаем данные для обучения моделей на какую-то конкретную тематику.
Например, я, помимо того, что являюсь сотрудником группы АСТРА, еще и являюсь аспирантом и ассистентом ВИШ МИФИ. И моя научная работа состояла в магистратуре как раз в том, чтобы научить большую языковую модель генерировать врачебные заключения.
На вход мы подавали описание щитовидной железы. На выходе нейронная сеть должна была рассказать нам, что с пациентом не так, и какой у него диагноз по определенной классификации. Это была не самая простая задача. Ни тонкая настройка, ни инженерия в запросах тут не помогла. Пришлось ходить к нашим коллегам – врачам из центра эндокринологии и говорить, дайте нам пожалуйста данные, на которых мы можем обучить модель.
Обучив модель на данных, мы научили модель предсказывать врачебный диагноз в формулировках, которые используют врачи, потому что мы на их данных и обучали модель. Однако потом мы пошли дальше, мы решили попробовать использовать обучение с подкреплением.
Что такое обучение с подкреплением?
Все из детства помнят, что сделаешь что-то хорошее – держи конфетку. Сделал что-то плохое, конфетку не дадут две недели. Примерно то же самое происходит и при обучении с подкреплением. Но в данном случае у нас для нейросети это не конфетка, а обратная связь, которая поступает от человека. Именно обучение с подкреплением в какой-то момент сделала третью версию GPT более «человечной».
В принципе, многие нейросетевые архитектуры, которые сейчас есть в открытом доступе, предлагают нам оценить ответ, нравится нам он или нет. Как раз для обучения с подкреплением это нам и нужно. На основе даже одного лайка или дизлайка мы можем подкорректировать, что нам выдает модель, и сделать лучше.
Так, с точностью модели где-то 90%, вследствие многих-многих итераций общения с врачами, просьбой и умолением их «пожалуйста, подскажите, что вам тут нравится, что нет», мы повысили точность нашей модели до 98%.
Возможно, могло показаться, что нейросеть –очень сложный, непонятный и темный лес. Но на самом деле любой из здесь присутствующих в принципе может сам сделать свою собственную нейросеть. Вы можете сделать нейросеть из слоев, а можете использовать какую-нибудь базовую архитектуру и дообучить модель, если у вас есть какие-то данные, которых будет достаточно, чтобы ее обучить, например, отвечать на вопросы коллег в необходимом вам тоне, или делать отчеты за вас.
На слайде вы видите пример простой архитектуры нейросети, это обучение мы начинаем, как всегда, с преобразования в токены, подготавливаем данные к обучению, создаем специальные метрики, создаем набор данных, загружаем данные в модель, выставляем параметры обучения, и вон там маленькая строчечка такая, TrainerTrain, вот этим мы обучаем модель, одной строчкой кода, казалось бы.
Не забывайте, пожалуйста, сохранять обученную модель, потому что некоторые модели обучаются долго, и очень грустно будет, если вы ее не сохраните.
Когда мы говорим про искусственный интеллект, важно помнить, что у нас есть текущие проблемы, которые с ним связаны, и возможные будущие. Нам всем понятно, что искусственный интеллект увеличивает производительность, помогает в обработке данных и поддерживает творческие задачи. Иногда даже может подкинуть какую-то идею, о которой мы не задумывались.
Вспоминая тот самый кадр из фильма «А может ли робот сочинить симфонию?», тогда нам казалось, что это шутка. Сейчас нейросети уже пишут симфонии, но они не пишут совершенно новые симфонии, они берут паттерны из уже существующих и составляют кусочки, красиво звучащие.
Нейросети крайне чувствительны к данным. Говорят, когда отделение Т-банка создавало свою первую нейросеть «Олег» для внутреннего общения, они тоже взяли и обучили его на всех данных интернета, которые у них были. Легенда гласит, что на вопрос в техподдержку «Добрый день, у меня не работает отпечаток пальца», добрая прекрасная нейросеть в первой итерации отвечала «Да, пальцы бы вам отрезать».
Предвзятость к данным может не только быть с точки зрения шуток и т.д. Мы можем, скажем так, сделать очень неправильную модель, которая будет осуждать нас, делать что-то неправильно или наоборот генерировать только неправильные данные, а они очень правдоподобно генерируют.
Заканчивая, наверное, расскажу про то, как видели будущее ИИ буквально недавно, 20 августа 2024 года. Статья говорила о том, что у нас появится новая архитектура и алгоритмы, нейросети научатся решать абстрактные задачи, нейросети проникнут во все сферы жизни.
Подчеркиваю, это 20 августа 2024 года, с тех пор уже появилась новая нейросетевая архитектура Titan, которая уже почти научилась решать абстрактные задачи.