Не только PyTorch. О чём на самом деле новая книга Лоуренса Морони

Название новой книги Лоуренса Морони — «Искусственный интеллект и машинное обучение для программистов в PyTorch» — на первый взгляд кажется довольно-таки скучным. Создается впечатление, что это очередной учебник по ИИ с использованием Python: в начале немного теории, потом базовые классы, потом еще базовые классы, потом очень базовые классы, и где-то по дороге читателя уже неизбежно потянет в сон.
Но нет: Морони написал совсем другую книгу. Она начинается как учебник по PyTorch, в середине превращается в практический курс по NLP и Transformer, а заканчивается почти полноценным туром по современному генеративному AI.
Давайте разберемся, как автор умудрился проделать этот фокус.
Сделай сам
Морони начинает с практического подхода: никаких готовых LLM и стандартных моделей: в первой главе он предлагает самому собрать простейшую нейросеть на PyTorch, обучить ее и посмотреть, что из этого получилось. И это сделано вполне осознанно: автор строит книгу по принципу «сначала попробуем руками, потом будем разбираться дальше». Сам он именно так описывает свой подход — code-first и без необходимости начинать со сложного математического аппарата.
При этом «сделай сам» не означает «напиши собственный ChatGPT». Первый проект гораздо скромнее: научить сеть различать классы объектов, а затем посмотреть, почему она ошибается, что такое переобучение и как его обнаружить. Во второй главе в качестве полигона используется Fashion-MNIST, а в третьей задача становится уже вполне наглядной - нейросеть должна отличать людей от лошадей.
И вот это, пожалуй, одна из самых удачных особенностей первой части: автор дает читателю возможность экспериментировать с моделью, например, покрутить параметры, изменить архитектуру. В результате PyTorch становится не очередным API, а живым рабочим инструментом для экспериментов.
Четыре главы про то, чем никто не любит заниматься
После первых экспериментов с картинками Морони делает неожиданный ход: вместо того чтобы поскорее добраться до модных трансформеров, он отправляет читателя разбираться с данными.
Четвертая глава целиком посвящена датасетам и загрузке данных в PyTorch. Здесь есть разбиение выборки, batching и shuffling, параллельная загрузка и вообще вся та инфраструктура, которая прекрасно знакома любому, кто хоть раз пытался накормить модель чем-нибудь посложнее игрушечного набора данных.
Дальше начинается NLP. Глава 5 посвящена токенизации: собственный токенизатор, готовый токенизатор из Hugging Face, последовательности, padding, неизвестные токены, очистка текста, загрузка реальных данных из CSV и JSON. Здесь рассматриваются типичные проблемы с исходными файлами и тем, как превратить их в пригодную для модели форму.

Следующая глава — про embeddings: читатель строит классификатор предложений и даже детектор сарказма, а затем может экспериментировать с размерностью embedding, размером словаря, архитектурой модели, скоростью обучения и регуляризацией. В конце автор доходит до визуализации embeddings и предварительно обученных представлений.
А затем появляются RNN и LSTM. Сегодня рядом с Transformer они выглядят почти как гости из прошлой эпохи, однако в логике книги этот кусок на своем месте: читателю сначала показывают разные способы работы с последовательностями, а уже потом подводят к архитектуре, которая перевернула NLP.
Получается четыре главы, которые на первый взгляд выглядят не самой захватывающей частью книги, но в этом определенная педагогическая хитрость. Когда позже появятся Hugging Face, Transformer и LLM, читатель уже успеет увидеть, какую работу за него теперь делают готовые инструменты.
Исторический артефакт
Седьмая глава внезапно переносит нас в эпоху, когда слово «последовательность» еще не означало автоматически Transformer. В книге появляются RNN, затем LSTM, потом двунаправленные RNN, а следом - генерация текста и различные эксперименты с архитектурой и обучением. Для читателя, который пришел к машинному обучению в эпоху GPT, это почти археология: оказывается, до self-attention тоже как-то жили, причем довольно активно.
Здесь Морони делает полезную вещь: он не рассказывает историю развития нейросетей в виде музейной экскурсии «раньше люди страдали, а потом придумали Transformer». RNN действительно используются по назначению: сначала для классификации текста, затем для генерации текста, а позже похожие методы появляются при работе с временными рядами.
После NLP автор переключается на последовательности вообще и предлагает работать с временными рядами. Сначала идут вполне классические вещи - тренд, сезонность, автокорреляция, шум, наивный прогноз и скользящее среднее. Затем появляются оконные наборы данных и нейросетевые модели, а для экспериментов используются, в частности, погодные данные NASA.
Сегодня такой материал может показаться слегка анахроничным, ведь если задача связана с современным NLP, первым делом мы, скорее всего, будем думать о Transformer. Но именно поэтому этот кусок книги интересен: он позволяет увидеть, что именно Transformer пришел заменить. С этого места книга начинает заметно ускоряться. До сих пор мы в основном строили модели, теперь пришло время посмотреть, что бывает, когда модель уже кто-то построил до нас.
Книга переключает передачу
До этого момента Морони в основном учит читателя делать модели самому. Теперь подход меняется: глава 12 вводит понятие инференса, следующая посвящена хостингу и обслуживанию моделей, а затем книга открывает дверь в Hugging Face Hub и, наконец, подробно разбирается с Transformer.
Именно здесь становится особенно заметно, что перед нами не просто учебник PyTorch: одно дело - обучить модель в ноутбуке, совсем другое - сделать из нее работающий сервис. Поэтому после разговора о том, как получить результат от обученной модели, Морони показывает два вполне рабочих варианта ее обслуживания: TorchServe и Flask.
Это поворотный момент, потому что здесь заканчивается уютная лаборатория, и появляется знакомый программистский вопрос: а как это запихнуть в приложение? В 14-й главе вместо собственной модели предлагается заглянуть в готовые хабы - прежде всего, Hugging Face Hub и PyTorch Hub, и научиться использовать уже обученные модели. После этого появляется глава о Transformer, в которой имеется практическая часть с библиотекой transformers, pipeline и токенизаторами.
Получается довольно разумная последовательность: сначала читатель несколько глав живет внутри моделей, потом ему показывают, как модель превратить в сервис, затем - где брать модели, которые уже обучены другими людьми, и только после этого начинают подробно разбирать тот самый Transformer, на котором сегодня построена значительная часть генеративного AI.
А следующая остановка еще интереснее. Потому что после того, как мы решили не писать модель самостоятельно, возникает закономерный вопрос: а что делать, если готовая модель почти подходит, но все-таки не совсем?
Самая интересная часть книги
До этого мы постепенно двигались от собственных небольших моделей к готовым решениям, а в 16-й главе наконец появляется то, ради чего многие и открывают книги по современному AI, - большая языковая модель и попытка приспособить ее под собственную задачу.
Причем Морони не ограничивается одним рецептом, он фактически предлагает три разных пути, которые очень хорошо иллюстрируют современную кухню разработки:
1. Модель недостаточно хороша под вашу задачу → fine-tuning.
2. Не хочется или не нужно переучивать модель → RAG.
3. Хочется контролировать всё самому → локальная LLM через Ollama.
Это три совершенно разных инженерных решения одной и той же проблемы: как превратить чужую обученную модель в полезный компонент собственного приложения. И, конечно, на этом автор не останавливается. Если с текстом мы уже разобрались, остается последний вопрос: а почему бы не заставить всю эту машинерию еще и рисовать картинки? Именно туда повествование направляется в двух последних главах.
Финальный сюрприз
Казалось бы, после LLM, fine-tuning, Ollama и RAG можно было уже ставить точку, но у Морони на этот счет другое мнение. Две последние главы посвящены генеративным моделям изображений и снова меняют декорации: вместо текста и языковых моделей речь идет о diffusion, Hugging Face Diffusers, image-to-image и inpainting.
В 19-й главе автор сначала разбирает саму идею диффузионных моделей, а затем переходит к библиотеке Diffusers и показывает работу с уже готовыми генеративными моделями. То есть снова работает уже знакомая по предыдущим главам схема: не обязательно строить всю модель самостоятельно - гораздо интереснее взять существующую и научиться использовать ее как инструмент.
Но 20-я глава снова возвращает нас к первоначальному принципу книги: сделай сам. Теперь объект эксперимента - не небольшой классификатор, а LoRA для генеративной модели изображений. Морони показывает подготовку набора данных, запуск тонкой настройки через Diffusers, публикацию получившейся модели и использование собственной LoRA для генерации новых изображений. В самом начале книги мы брали небольшой датасет и учили с нуля относительно простую модель отличать одни изображения от других. В конце делаем нечто гораздо более актуальное: берем большую готовую генеративную модель и адаптируем ее под свои данные.
Так что же это всё-таки за книга?
Читатель берет в руки «Искусственный интеллект и машинное обучение для программистов в PyTorch», ожидая увидеть очередной учебник по фреймворку. И действительно получает PyTorch - причем с самого нуля и с большим количеством практического кода, но на этом путешествие только начинается. За 400 с лишним страниц Морони успевает провести читателя через компьютерное зрение, обработку текста, embeddings, RNN и LSTM, временные ряды, инференс и хостинг моделей, Hugging Face и Transformer, а затем добраться до LLM, fine-tuning, prompt-tuning, Ollama, RAG, diffusion и LoRA.
Книга показывает несколько разных способов работы с готовыми моделями и постепенно расширяет инструментарий программиста: что-то можно написать самому, что-то проще взять готовым, что-то дообучить, к чему-то добавить собственные данные, а что-то вообще запустить локально. И у такого подхода есть очевидный плюс: книга не запирает читателя в одном стеке. Освоив очередной инструмент, он почти сразу получает следующий вопрос и переходит на следующую ступень, а это именно то, что обычно и заставляет разбираться в новой технологии дальше.
Так что название у книги действительно немного скучное, зато содержание оказалось заметно интереснее.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.