Не «как установить» и не пересказ новостей, а как эта штука устроена внутри — и что из этого следует на практике. Фундамент честно с нуля, потом всё поле за пределами текста: изображения, звук, зрение, своё дообучение. Вся практика рассчитана на RTX 4090 Laptop с 16 ГБ видеопамяти и 96 ГБ оперативной.
Бесплатная книга · tariel.ge · версии инструментов и команды проверяйте в документации проектов
Вы всю жизнь пишете правила: если напряжение просело — проверь конденсаторы. Машинное обучение идёт с другого конца, и вся разница между ИИ и обычной программой начинается здесь.
Возьмём задачу, которую вы решали руками сотни раз: по светодиодной лампе определить, что в ней сгорело.
Правила пишет человек. Машина их выполняет.
Правила выводит машина. Человек даёт примеры.
Обычное программирование: данные + правила → ответ.
Машинное обучение: данные + ответы → правила.
Полученные правила потом применяются к новым данным. Всё остальное в этой книге —
подробности того, как именно машина их выводит.
Не надо думать, что обучение всегда лучше. Для огромного класса задач правила остаются правильным выбором, и вы это уже знаете из практики.
| Задача | Чем решать | Почему |
|---|---|---|
| Посчитать резистор по закону Ома | Правило | Есть точная формула. Обучать нечему |
| Проверить, что напряжение в допуске | Правило | Условие известно и однозначно |
| Отличить рабочий конденсатор от вздутого по фото | Обучение | Правило «вздутый» не формализуется |
| Расставить файлы по расширению | Правило | Однозначная классификация |
| Понять, о чём текст | Обучение | Правил нет и не будет |
| Перевести с грузинского | Обучение | Язык не описывается конечным набором правил |
Спросите себя: могу ли я записать правило словами? Если да — пишите программу, она будет быстрее, точнее и дешевле. Обучение нужно там, где вы узнаёте ответ, увидев его, но не можете объяснить, по каким признакам.
| Вид | Что даём | Что получаем | Пример из вашей практики |
|---|---|---|---|
| С учителем | Примеры с правильными ответами | Умение предсказывать ответ | 5000 фото ламп с диагнозом → диагноз по новому фото |
| Без учителя | Только данные, без ответов | Структуру, группы, похожесть | Тысяча ваших статей → сами собой разделились по темам |
| С подкреплением | Возможность пробовать и оценку результата | Стратегию поведения | Робот учится держать паяльник: получилось — плюс, сжёг плату — минус |
Языковые модели, о которых вся книга дальше, — это в основе обучение с учителем в неожиданной форме: правильным ответом служит следующее слово в реальном тексте. Разметку никто не делает руками, она уже есть в самом тексте. Отсюда и берётся возможность учиться на всём интернете. Подробно — глава 10.
Здесь прячется самое важное недопонимание. Модель не «поняла» задачу. Она нашла функцию, которая на обучающих примерах даёт правильные ответы. Это совсем не одно и то же.
Сеть научилась не тогда, когда правильно отвечает на примерах, которые видела. Это она могла просто запомнить. Научилась — когда правильно отвечает на данных, которых не видела никогда. Это свойство называется обобщением, и вся глава 05 посвящена тому, как его не потерять.
История, которую рассказывают на каждом курсе, потому что она идеально показывает проблему. Сеть учили отличать волков от собак. Точность на тестах — отличная. Потом посмотрели, на что сеть на самом деле смотрит.
Оказалось — на снег. В обучающей выборке волки почти всегда были сфотографированы на снегу, собаки — на траве. Сеть выучила детектор снега, а не детектор волка. На всех примерах работало безупречно.
Тот же механизм объясняет, почему языковая модель уверенно пишет несуществующий ключ команды или выдуманный номер детали. Она не проверяет факт — она выдаёт то, что статистически похоже на правильный ответ. Механизм тот же самый, что со снегом, и глава 11 разбирает его подробно.
Слово «модель» звучит абстрактно, хотя вещь предельно конкретная. Модель — это файл с числами. Те самые 5, 14 или 70 миллиардов параметров — это миллиарды чисел, записанных подряд.
Архитектура — это схема платы. Веса — номиналы всех компонентов. Обучение — подбор номиналов, пока схема не заработает как надо. Когда лампа собрана, вы не пересчитываете номиналы при каждом включении: вы просто подаёте питание. С моделью так же — обучение один раз, использование сколько угодно.
Разберём самый маленький кирпич, из которого собрано всё остальное. Он проще, чем операционный усилитель.
Умножить, сложить, согнуть. Из этих трёх операций собраны все модели мира, включая те, что рисуют картинки и пишут код.
Искусственный нейрон не имеет отношения к биологии, кроме названия. Это простейший вычислительный узел, который делает ровно три вещи:
вход: x₁ x₂ x₃
вес: w₁ w₂ w₃
сумма = x₁·w₁ + x₂·w₂ + x₃·w₃ + b
↑ смещение
выход = f(сумма)
↑ активация
Всё. Больше внутри нейрона ничего нет.
Это резистивный сумматор с усилителем. Входы — напряжения. Веса — проводимости (чем больше вес, тем сильнее влияет вход). Смещение — опорное напряжение. Активация — нелинейность вроде диода или ограничителя на выходе.
В вашей схеме номиналы резисторов выбираете вы, исходя из расчёта. В нейросети веса подбирает алгоритм, глядя на примеры. Глава 04 — про то, как именно.
Нейрон, решающий, исправен ли драйвер. Три входа: напряжение на выходе в вольтах, пульсации в процентах, температура корпуса в градусах.
напряжение в норме? x₁ = 1 w₁ = +2.0 → сильный довод «исправен» пульсации высокие? x₂ = 1 w₂ = -3.0 → сильный довод «неисправен» перегрев? x₃ = 0 w₃ = -2.5 → не сработал сумма = 1·2.0 + 1·(-3.0) + 0·(-2.5) + 0.5 = -0.5 выход: отрицательно → «неисправен»
Обратите внимание: знак веса — это направление довода, а модуль — его сила. Пульсации весят −3.0, то есть перевешивают нормальное напряжение с его +2.0. Именно такие соотношения и подбираются при обучении.
Самый неочевидный и самый важный пункт главы. Без активации вся сеть, сколько бы слоёв в ней ни было, схлопывается в одно-единственное линейное преобразование.
Линейная функция от линейной функции — снова линейная. Сто слоёв умножений и сложений математически эквивалентны одному слою с другими коэффициентами. Глубина не даёт ничего. Нелинейность — единственное, что позволяет слоям добавлять выразительность, а не дублировать друг друга.
Практический смысл: линейная модель может провести только прямую границу. Задачи вроде «исправно, если напряжение в норме и пульсации низкие, но при перегреве всё равно нет» прямой не разделяются. Нелинейность даёт возможность гнуть границу.
| Название | Что делает | Где встречается |
|---|---|---|
| ReLU | Отрицательное обнуляет, положительное пропускает как есть | Рабочая лошадка. Проста и быстра |
| GELU | То же, но со сглаженным переходом около нуля | Современные языковые модели |
| SiLU / Swish | Похожа на GELU | Многие свежие архитектуры |
| Sigmoid | Сжимает что угодно в диапазон от 0 до 1 | Выход, когда нужна вероятность |
| Tanh | Сжимает в диапазон от −1 до 1 | Старые архитектуры |
| Softmax | Превращает набор чисел в вероятности, дающие в сумме единицу | Последний слой классификатора |
Отрицательное не пропускает, положительное пропускает без изменений. Ровно идеализированный диод из вашей схемотехники. Именно за счёт такой предельной простоты она и вытеснила более «математичные» варианты: быстро считается и хорошо обучается.
Она вам ещё встретится и во внимании (глава 08), и при генерации текста. Задача: превратить произвольные числа в вероятности.
сеть выдала оценки: драйвер 3.2 кристалл 1.1 конденсатор 0.4
после softmax: драйвер 0.79 кристалл 0.16 конденсатор 0.05
в сумме ровно 1.0
Обратите внимание на важное свойство: softmax усиливает разрыв. Разница между 3.2 и 1.1 была троекратной, стала почти пятикратной. Это потому, что внутри стоит возведение в степень. Свойство пригодится, когда будем говорить о температуре при генерации текста.
| Задача | Порядок |
|---|---|
| Разделить две группы точек прямой | Один нейрон |
| Логическое «исключающее или» | Три-четыре, в два слоя |
| Узнать рукописную цифру | Тысячи |
| Узнать объект на фотографии | Миллионы |
| Понимать и писать текст | Миллиарды |
«7B» из названия модели — это и есть количество весов и смещений, сложенных вместе. Семь миллиардов чисел, каждое из которых участвует в описанных трёх операциях.
Один нейрон почти ничего не умеет. Соберём из них сеть и посмотрим, откуда берётся способность узнавать сложное.
Один нейрон проводит прямую. Слой нейронов ищет признаки. Стопка слоёв строит признаки из признаков — и отсюда берётся всё остальное.
Слой — это просто несколько нейронов, которые смотрят на одни и те же входы, но с разными весами. Каждый ищет своё.
┌─ нейрон 1 → «напряжение просело» вход x₁ ──┬───┼─ нейрон 2 → «пульсации выше нормы» вход x₂ ──┼───┼─ нейрон 3 → «греется» вход x₃ ──┴───└─ нейрон 4 → «всё в допуске» каждый видит все входы, но у каждого свои веса
Никто не говорил нейронам, что искать. Подписи справа — это то, что они начали выделять сами, потому что так уменьшалась ошибка. И это уже интересная мысль: признаки не задаются, они возникают.
Второй слой смотрит уже не на исходные данные, а на выводы первого. Третий — на выводы второго. С каждым слоем абстракция растёт.
| Слой | Что выделяет в фотографии платы |
|---|---|
| 1 | Границы яркости: где светлое сменяется тёмным |
| 2 | Линии и углы: из границ складываются отрезки |
| 3 | Простые формы: прямоугольники, круги, дорожки |
| 4 | Детали: корпус конденсатора, ножки микросхемы |
| 5 | Сборки: узел питания, выходной каскад |
| 6 | Ответ: «вздутый конденсатор в фильтре питания» |
Никто не программировал «ищи границы на первом слое». Такая иерархия возникает сама, потому что это экономный способ описать изображения: границы переиспользуются во всех формах, формы — во всех деталях. Сеть находит эту экономию, минимизируя ошибку.
Считается просто. Между соседними слоями каждый нейрон связан с каждым, то есть число весов — это произведение размеров слоёв.
слой из 1000 нейронов → слой из 1000 нейронов = 1 000 × 1 000 = 1 000 000 весов (один переход!) языковая модель: ширина слоя ~4096, слоёв ~32, плюс внимание итог: миллиарды. Отсюда «7B», «14B», «70B».
Каждый параметр надо хранить и умножать. Модель 7B в сжатии Q4 — это около 4,7 ГБ, которые должны лежать в видеопамяти. У вас 16 ГБ: спокойно помещается 14B, впритык 32B в сильном сжатии. Отсюда прямая связь между «миллиарды параметров» и «что реально запустится».
«Каждый с каждым» — не единственный вариант, и для разных данных придуманы разные схемы.
| Тип | Идея | Для чего |
|---|---|---|
| Полносвязный | Каждый с каждым | Универсально, но дорого. Внутри всех остальных |
| Свёрточный | Маленькое окно скользит по картинке, веса общие | Изображения. Экономит параметры в сотни раз |
| Рекуррентный | Выход подаётся обратно на вход | Последовательности. Сейчас почти вытеснен |
| Внимание | Каждый элемент решает, на какие другие смотреть | Текст, и не только. Глава 08 |
Угол остаётся углом в любом месте кадра. Значит незачем учить отдельный детектор угла для каждой точки изображения — достаточно одного набора весов, который применяется везде. Это называется разделением весов, и именно оно сделало распознавание изображений реальным. Та же идея внутри моделей, генерирующих картинки — глава 14.
Вход слоя прибавляется к его выходу напрямую, в обход вычислений. Звучит странно, а без этого приёма сети глубже примерно двадцати слоёв практически не обучались: сигнал ошибки затухал, не доходя до первых слоёв.
Обходной путь даёт ошибке «короткую дорогу» назад. Именно это позволило перейти от десятков слоёв к сотням, и это есть в каждом современном трансформере.
После каждого слоя числа приводятся к сопоставимому масштабу. Иначе значения либо разрастаются до бесконечности, либо схлопываются в ноль — и обучение разваливается.
Это как согласование уровней между каскадами усилителя. Не согласовали — либо перегруз, либо сигнал утонул в шуме. Нормализация делает ровно это: держит рабочую точку каждого слоя в разумном диапазоне.
| Что | Сколько | Когда |
|---|---|---|
| Веса модели | Основной объём | Всегда, пока модель загружена |
| Активации | Зависит от длины входа | Во время прохода |
| Кэш контекста | Растёт с длиной диалога | В языковых моделях |
| Градиенты и состояния оптимизатора | В разы больше самих весов | Только при обучении |
При обучении кроме весов надо хранить градиенты и служебные состояния оптимизатора — обычно втрое-вчетверо больше памяти, чем занимает сама модель. Поэтому на 16 ГБ вы спокойно запускаете 14B, но обучать её целиком не сможете. Выход — LoRA, которая обучает крошечную добавку вместо всей модели. Глава 13.
Самое интересное: как именно подбираются эти миллиарды чисел. Оказывается, довольно простым приёмом.
Никакого волшебства: измерить ошибку, понять, в какую сторону её уменьшить, сделать маленький шаг. Повторить миллион раз. Это весь алгоритм.
Всё. Дальше — следующий пример, и так миллионы раз.
Представьте, что вы настраиваете старый приёмник вслепую, на ощупь, в тёмной комнате. Крутите ручку — шум усилился, значит не туда. Крутите обратно — стало чище. Ещё немного в ту же сторону. Ещё. Вы не знаете, где идеальная точка, но знаете направление улучшения прямо сейчас.
Градиент — это и есть ответ на вопрос «в какую сторону крутить каждую ручку, чтобы стало лучше». Только ручек не одна, а семь миллиардов, и для каждой вычисляется своё направление. Одновременно.
Чтобы улучшать, надо мерить. Функция потерь превращает «сеть ошиблась» в конкретное число, которое можно уменьшать.
| Задача | Как меряют | Смысл |
|---|---|---|
| Предсказать число | Квадрат разности | Чем дальше промах, тем непропорционально хуже |
| Выбрать из вариантов | Перекрёстная энтропия | Насколько мала была вероятность, назначенная правильному ответу |
| Сгенерировать текст | То же самое, на каждом слове | Насколько модель «удивилась» настоящему следующему слову |
Для языковой модели ошибка — это мера удивления. Текст «паяльник надо держать за...» — если модель назначила слову «ручку» вероятность 0,9, удивление мало, ошибка мала. Назначила 0,01 — удивление огромно, ошибка большая, веса поедут сильно. Обучение языковой модели буквально сводится к «перестань удивляться настоящему тексту».
Главная техническая идея всего глубокого обучения, и по сути — школьное правило производной сложной функции.
Ошибка известна на выходе. Нужно понять вклад каждого веса в глубине сети. Считаем с конца: как последний слой повлиял на ошибку, затем как предпоследний повлиял на последний, и так до начала. Ответственность распределяется назад по цепочке.
вперёд: вход → слой1 → слой2 → слой3 → ответ → ошибка
назад: ошибка → вклад слоя3 → вклад слоя2 → вклад слоя1
и для каждого веса: «подвинуть сюда, на столько»
Наивный способ — подвинуть один вес, прогнать всю сеть, посмотреть, что стало. Для семи миллиардов весов это семь миллиардов прогонов на каждый пример. Обратное распространение даёт все направления сразу, за один проход назад. Разница в вычислительной стоимости — миллиарды раз, и именно она сделала обучение возможным.
Насколько большой шаг делать в найденном направлении.
| Шаг | Что происходит | Аналогия |
|---|---|---|
| Слишком маленький | Учится, но бесконечно долго | Подкручиваете ручку на микрон за раз |
| В самый раз | Ошибка плавно падает | Уверенные движения, точная настройка в конце |
| Слишком большой | Перескакивает минимум, ошибка скачет | Дёргаете ручку туда-сюда, проскакивая станцию |
| Катастрофически большой | Числа уходят в бесконечность, обучение умирает | Сорвали ручку |
На практике шаг делают переменным: сначала побольше, чтобы быстро прийти в нужную область, потом всё меньше, для тонкой настройки. Это расписание скорости обучения, и оно вам встретится в главе 13, когда будете обучать LoRA.
Считать градиент по одному примеру — шумно: этот конкретный пример может быть нетипичным. По всему набору сразу — слишком дорого. Компромисс: батч, пачка из нескольких десятков примеров, по которой градиент усредняется.
| Термин | Что значит |
|---|---|
| Батч | Пачка примеров, обрабатываемая за один шаг |
| Шаг | Один батч: прогон вперёд, назад, обновление весов |
| Эпоха | Все обучающие данные прошли по одному разу |
| Оптимизатор | Правило обновления весов. Adam — самый ходовой |
Чем больше батч, тем стабильнее градиент и тем больше нужно памяти. На 16 ГБ батчи будут маленькими. Обходной приём — накопление градиента: обработать четыре маленьких батча, усреднить и только потом обновить веса. Эффект как от большого батча, памяти — как от маленького. Вам это пригодится в главах 13 и 17.
Это до сих пор не до конца объяснено теоретически, и честно это сказать стоит. Поверхность ошибки в пространстве миллиардов параметров чудовищно сложна, и нет гарантии, что простой спуск придёт куда-то хорошее.
Эмпирически оказалось: в очень многомерных пространствах плохих тупиков практически не встречается, а найденные решения обычно достаточно хороши. Почему — предмет исследований. Работает надёжно, объясняется не полностью.
| Что обучаем | Порядок затрат | Реально ли у вас |
|---|---|---|
| Модель 7B с нуля | Тысячи видеокарт, недели, миллионы долларов | Нет |
| Дообучение 7B целиком | Несколько мощных карт, дни | Нет |
| LoRA к 7B | Одна карта, часы | Да — глава 13 |
| LoRA для изображений | Одна карта, десятки минут | Да — глава 17 |
| Маленькая своя сеть | Минуты | Да, и это полезно для понимания |
Сеть научилась давать правильные ответы на обучающих примерах. Это ещё ничего не значит — и следующая глава объясняет почему.
Модель с идеальным результатом на обучающих данных может быть совершенно бесполезной. Как это выглядит, почему случается и как поймать.
Студент выучил наизусть ответы к тридцати задачам из методички. На экзамене по этим задачам — отлично. Дали тридцать первую, немного другую — ноль. Он не решал задачи, он запоминал пары «условие — ответ».
Сеть с достаточным количеством параметров умеет ровно это. Если весов хватает, она может просто запомнить обучающую выборку целиком, не выведя из неё ни одной закономерности.
На обучающих данных точность 99%. На новых — 60%. Разрыв между этими двумя числами и есть переобучение. Чем он больше, тем больше модель запоминала и меньше понимала.
| Часть | Доля | Для чего | Правило |
|---|---|---|---|
| Обучающая | около 70% | На ней подбираются веса | Модель видит постоянно |
| Проверочная | около 15% | Настройка параметров обучения, выбор момента остановки | Модель не учится на ней, но вы на неё смотрите |
| Тестовая | около 15% | Финальная честная оценка | Смотреть один раз, в самом конце |
Если вы прогнали тест, увидели плохой результат, что-то поменяли и прогнали снова — тест перестал быть честным. Вы начали подгонять модель под него, просто медленнее и вручную. Это называется утечкой, и именно так получаются модели, которые прекрасно выглядят в отчёте и разваливаются в деле.
ошибка │ │╲ ← обучающая: падает всегда │ ╲___________________________ │╲ │ ╲______ ← проверочная: сначала падает, │ ‾‾‾─────────── потом разворачивается вверх │ ↑ │ здесь надо было остановиться └──────────────────────────────► шаги обучения
Момент, когда проверочная ошибка перестала падать и пошла вверх, — это точка, после которой модель начала запоминать вместо обобщения. Приём «остановиться здесь» так и называется — ранняя остановка, и это самое простое лекарство.
| Способ | Как работает | Аналогия |
|---|---|---|
| Больше данных | Запомнить всё становится дороже, чем понять | Тысяча задач вместо тридцати — заучить нереально |
| Ранняя остановка | Прекратить, когда проверочная ошибка развернулась | Закончить подготовку до того, как начнёте зубрить |
| Dropout | На каждом шаге случайно отключать часть нейронов | Заставить схему работать с любой половиной элементов — резервирование |
| Регуляризация весов | Штрафовать за большие веса | Запрет на решения «в упор», только плавные |
| Аугментация | Искусственно варьировать примеры | Та же плата под разным светом и углом — это всё ещё та же плата |
| Модель поменьше | Меньше весов — нечем запоминать | Не давать шпаргалке столько места |
Идея контринтуитивная: во время обучения случайно выключают часть нейронов на каждом шаге. Сеть не может положиться на конкретный нейрон, потому что он может исчезнуть, — и вынуждена распределять знание по многим путям. Получается что-то вроде горячего резервирования в схемотехнике: система устойчива к отказу любого узла.
| Недообучение | Переобучение | |
|---|---|---|
| На обучающих | Плохо | Отлично |
| На новых | Плохо | Плохо |
| Причина | Модель слишком проста или мало училась | Модель слишком сложна или училась слишком долго |
| Лечение | Больше слоёв, дольше учить | Всё из таблицы выше |
Диагностика однозначная: смотрите на обе ошибки вместе. Обе плохи — недообучение. Одна отличная, другая плохая — переобучение. Обе хороши — вы закончили.
Вы будете дообучать LoRA в главах 13 и 17 — там это встретится напрямую. Но есть и более общий смысл.
Волк на снегу — частный случай той же болезни. Сеть нашла признак, который прекрасно работал на обучающих данных и не имел отношения к задаче. Все модели, которыми вы пользуетесь, содержат в себе такие выученные «снега» — просто менее заметные. Отсюда странные провалы на вещах, где вы ждали успеха.
Практический вывод: когда модель уверенно ошибается на чём-то простом, это обычно не «глупость», а признак, который она выучила вместо настоящего. И ваш способ это обойти — переформулировать задачу так, чтобы ложный признак не срабатывал.
Пригодится, когда дойдёте до глав 13 и 17.
Фундамент готов. Переходим к идее, без которой не понять ни языковые модели, ни поиск по смыслу, ни генерацию картинок: как превратить смысл в числа.
Сеть умеет только умножать числа. Значит, слово, картинку и звук надо сначала превратить в числа — причём так, чтобы близкие по смыслу оказались рядом. Это и есть главный трюк.
Нейрон умножает и складывает. Слово «конденсатор» умножать нельзя. Значит нужен способ сопоставить каждому понятию набор чисел.
Наивный вариант: пронумеровать все слова. Конденсатор — 1, резистор — 2, кошка — 3. Работать не будет: из такой нумерации следует, что конденсатор ближе к резистору, чем к кошке, только случайно, а ещё что «кошка минус резистор равно конденсатор». Числа появились, смысла в них нет.
Пусть каждое понятие описывается не одним числом, а набором — вектором. Каждая координата отвечает за какое-то свойство.
электронный пассивный накопитель живой конденсатор 0.9 0.9 0.9 0.0 резистор 0.9 0.9 0.1 0.0 аккумулятор 0.7 0.3 0.9 0.0 кошка 0.0 0.0 0.0 1.0
Теперь близость осмысленна: конденсатор и резистор похожи по трём координатам из четырёх, конденсатор и аккумулятор — по свойству «накопитель», кошка не похожа ни на что.
В реальных моделях координат не четыре, а от нескольких сотен до нескольких тысяч. И — важно — никто не задаёт, что означает каждая. Они получаются в процессе обучения, и человеческих названий у них нет. Таблица выше — иллюстрация идеи, а не устройство.
Раз понятия стали точками в пространстве, между ними можно мерить расстояние. Обычно считают не расстояние, а угол между векторами — косинусную близость.
| Значение | Смысл | Пример |
|---|---|---|
| около 1 | Почти одно и то же | «конденсатор» и «ёмкость» |
| около 0.6 | Из одной области | «конденсатор» и «резистор» |
| около 0 | Не связаны | «конденсатор» и «кошка» |
| отрицательное | Противоположны по какому-то признаку | редко и неочевидно |
Длина вектора часто отражает частоту слова или «силу» сигнала, а не смысл. Угол от длины не зависит: он ловит именно направление, то есть о чём слово, а не насколько оно популярно. Для поиска по смыслу это то, что нужно.
Обнаруженное в ранних моделях свойство, которое до сих пор лучше всего объясняет идею: векторы можно складывать и вычитать, и результат осмыслен.
король − мужчина + женщина ≈ королева Париж − Франция + Грузия ≈ Тбилиси идти − настоящее+ прошлое ≈ шёл
Направление «мужское → женское» оказалось одним и тем же направлением в пространстве для множества пар слов. Модель никто этому не учил — оно возникло само, как экономный способ описать язык.
Эти примеры часто приводят как безотказное свойство, а на деле оно работает выборочно и подобрано задним числом: для многих пар слов арифметика даёт ерунду. Как иллюстрация идеи — прекрасна. Как метод — ненадёжна.
Слово «ключ» — это гаечный ключ, ключ от двери, ключ шифрования или родник. Один вектор не может отражать все смыслы сразу.
Современные модели дают контекстные векторы: у одного и того же слова получается разный вектор в зависимости от окружения. «Ключ на тринадцать» и «ключ от квартиры» дадут разные числа.
Чтобы вектор слова зависел от окружения, сеть должна уметь смотреть на другие слова в предложении и решать, какие из них важны. Механизм, который это делает, называется вниманием — глава 08. Всё в этой книге сходится туда.
| Что | Во что превращается | Что даёт |
|---|---|---|
| Слово, фраза, абзац | Вектор смысла | Поиск по смыслу, а не по буквам |
| Изображение | Вектор содержания | Найти похожие картинки |
| Звук | Вектор | Узнать голос, найти похожий звук |
| Пользователь сайта | Вектор интересов | Рекомендации |
| Товар, статья, файл | Вектор | Похожее рядом |
Можно обучить так, что текст и картинки попадают в одно и то же пространство. Тогда вектор фразы «вздутый конденсатор» оказывается рядом с векторами соответствующих фотографий. Отсюда вырастает и поиск картинок словами, и генерация изображений по описанию — глава 14.
Соберём из этого рабочий инструмент: поиск по смыслу в ваших собственных книгах, который запускается на вашем ноутбуке.
Соберём рабочий инструмент: поиск по смыслу в ваших собственных книгах. Всё локально, на вашем ноутбуке, и заодно станет понятно, как устроен RAG изнутри.
У вас полтора десятка книг в HTML. Задача: спросить «почему лампа мигает после включения» и получить нужные куски текста — даже если слова «мигает» там нет, а есть «пульсации выпрямленного напряжения».
ваши книги → нарезка на куски → эмбеддинг каждого куска → база векторов
↓
ваш вопрос → эмбеддинг вопроса → поиск ближайших ──┘
↓
куски текста
↓
(необязательно) языковая модель
↓
ответ
Последние два шага необязательны. Часто достаточно самого поиска: вы получаете три нужных абзаца и читаете сами. Это быстрее, точнее и не содержит риска выдумывания. Языковую модель добавляют, когда нужен связный ответ, а не ссылки.
Самый недооценённый шаг. Слишком крупные куски — в ответ попадает много лишнего и смысл размывается. Слишком мелкие — теряется контекст, и кусок становится непонятен сам по себе.
| Размер куска | Что получается |
|---|---|
| Предложение | Слишком узко: «Его надо заменить» — а что «его»? |
| Абзац (200–400 слов) | Обычно оптимально |
| Раздел под заголовком | Хорошо для структурированных книг вроде ваших |
| Глава целиком | Слишком широко: вектор усредняет всё и ни на что не похож |
Это отдельная модель, не та, что генерирует текст. Её единственная работа — превращать текст в вектор.
ollama pull nomic-embed-text
| На что смотреть при выборе | Почему |
|---|---|
| Поддержка русского | Многие модели заметно слабее вне английского. Проверяйте на своих текстах |
| Размер вектора | Больше — точнее и тяжелее. Типично 384–1024 |
| Максимальная длина входа | Кусок не должен её превышать, иначе хвост обрежется молча |
| Скорость | Вам предстоит прогнать тысячи кусков |
Вопрос и документы должны кодироваться одной и той же моделью. Векторы от разных моделей находятся в разных пространствах, и сравнивать их бессмысленно — поиск будет выдавать случайный мусор без единой ошибки в коде. Сменили модель эмбеддингов — пересчитывайте всю базу.
| Вариант | Когда подходит |
|---|---|
| Просто список в памяти | До нескольких тысяч кусков. Для ваших книг — достаточно |
| Файл на диске | Чтобы не пересчитывать при каждом запуске |
| Векторная база | Десятки тысяч кусков и больше, нужны фильтры и обновления |
Не начинайте с базы данных. Пятнадцать книг — это тысячи кусков, и перебор всех векторов занимает доли секунды. База нужна, когда кусков сотни тысяч.
Считаем косинусную близость вопроса с каждым куском и берём лучшие. Дальше — нюансы, которые отличают работающий поиск от игрушки.
| Приём | Что даёт |
|---|---|
| Брать 5–10 кусков, а не 1 | Нужное часто не на первом месте |
| Отсекать по порогу близости | Если всё ниже 0,3 — ответа в базе просто нет, и лучше это сказать |
| Гибридный поиск | Совместить поиск по смыслу с обычным поиском по словам. Ловит точные термины и номера деталей |
| Переранжирование | Взять 20 кандидатов и отсортировать более тяжёлой моделью. Заметно точнее, но медленнее |
Поиск по смыслу плох там, где нужна буквальная точность: артикул «BUZ11», обозначение «C12», редкое слово. Обычный текстовый поиск это ловит, а смысловой — размывает. Их сумма работает заметно лучше каждого по отдельности, и это самое дешёвое улучшение качества.
Если нужен связный ответ, а не список абзацев, найденные куски подаются модели вместе с вопросом. Формулировка запроса здесь решает многое.
Ответь на вопрос, используя ТОЛЬКО приведённые ниже фрагменты. Если в них нет ответа — так и скажи, не придумывай. После каждого утверждения укажи, из какого фрагмента оно взято. ФРАГМЕНТЫ: [1] (Учебник по электрике, гл. 9) ... [2] (LED, гл. 10) ... ВОПРОС: почему лампа мигает после включения?
Модель всё равно может сказать то, чего в фрагментах нет, — механизм в главе 11. Указание источника для каждого утверждения помогает: вы можете проверить за десять секунд. Считайте такой ответ черновиком со ссылками, а не истиной.
| Симптом | Причина | Что делать |
|---|---|---|
| Находит не то | Куски слишком большие | Резать мельче, добавить перекрытие |
| Находит обрывки без смысла | Куски слишком мелкие | Резать крупнее, дописывать заголовок |
| Полный мусор в выдаче | Разные модели для вопроса и базы | Пересчитать базу одной моделью |
| Не находит точные термины | Смысловой поиск их размывает | Добавить обычный текстовый поиск |
| Плохо с русским | Модель эмбеддингов слабая вне английского | Попробовать другую, сравнить на своих текстах |
| Модель отвечает мимо фрагментов | Слабая модель или размытая инструкция | Жёстче формулировка, модель крупнее |
Заведите два десятка вопросов, на которые вы знаете правильный ответ и знаете, в какой главе он лежит. Прогоняйте их после каждого изменения настроек.
Система, которая на любой вопрос что-то уверенно выдаёт, бесполезна. Проверяйте её на вопросах, ответа на которые заведомо нет: правильное поведение — сказать «не нашёл». Именно этот тест чаще всего пропускают, а он ловит самые дорогие ошибки.
Вернёмся к устройству. Механизм, который позволил всему этому взлететь, и главное изобретение последних лет.
Одна идея, опубликованная в 2017 году, стоит за всеми современными моделями — текстовыми, графическими, звуковыми. Разберём её без формул.
Предложение: «Ключ на тринадцать лежал рядом с платой, и он был нужен, чтобы открутить радиатор». Что такое «он»?
Чтобы понять, сеть должна связать «он» с «ключ» через восемь слов. Старые архитектуры читали последовательно, слово за словом, и к концу предложения начало уже размывалось. Чем дальше связь, тем хуже.
А что если не читать подряд, а дать каждому слову возможность посмотреть сразу на все остальные и самому решить, какие из них для него важны? Расстояние перестаёт иметь значение: первое слово и сотое равно доступны.
Механизм строится на том, что из вектора каждого слова получают три разных вектора. Названия странные, но смысл простой.
| Роль | Что означает | Аналогия |
|---|---|---|
| Запрос | Что это слово ищет вокруг себя | Поисковая строка |
| Ключ | Чем это слово может быть полезно другим | Заголовок в каталоге |
| Значение | Что оно передаст, если его выберут | Содержимое карточки |
Все три получаются умножением вектора слова на три обучаемые матрицы. То есть чем слово интересуется и чем оно полезно — это тоже выученное, а не заданное.
1. Берём ЗАПРОС слова «он» 2. Сравниваем его с КЛЮЧОМ каждого слова предложения (скалярное произведение — мера совпадения направлений) ключ ████████████ 0.82 плата ████ 0.21 радиатор ███ 0.15 лежал █ 0.04 ... 3. Пропускаем оценки через softmax → веса внимания, в сумме дающие единицу 4. Складываем ЗНАЧЕНИЯ всех слов с этими весами 5. Результат: новый вектор «он», в который в основном подмешано слово «ключ»
Из главы 06 помните задачу: у слова должен быть разный вектор в разном окружении. Именно это сейчас и произошло. «Он» вобрало в себя «ключ» — и дальше по сети идёт уже не абстрактное местоимение, а «он, который ключ».
Одного набора запросов и ключей мало: в языке одновременно существуют разные типы связей. Поэтому механизм запускают параллельно несколько раз с разными матрицами — это головы внимания.
| Голова | Что может отслеживать |
|---|---|
| 1 | К чему относится местоимение |
| 2 | Кто выполняет действие |
| 3 | Согласование по роду и числу |
| 4 | Ближайший предлог |
| ... | Десятки других, многие без человеческого названия |
Такие аккуратные роли — упрощение. Исследователи действительно находят головы с понятными функциями, но большинство занимается чем-то, что не сводится к named-понятию. Не ждите, что каждая голова окажется объяснимой.
Обратите внимание на неприятность: механизм смотрит на все слова одинаково, без учёта позиции. «Собака укусила человека» и «человека укусила собака» для него неразличимы.
Решение: к вектору каждого слова прибавляется информация о его позиции. Есть разные способы кодировать позицию, и в современных моделях используется довольно хитрый — но смысл один: сеть должна знать, где слово стоит.
| Свойство | Следствие |
|---|---|
| Все слова обрабатываются одновременно | Задача раскладывается на тысячи видеоядер. Обучение в сотни раз быстрее |
| Расстояние не мешает | Связь между первым и тысячным словом такая же прямая |
| Механизм универсален | Работает не только со словами — с кусками изображений, звука, чего угодно |
| Хорошо масштабируется | Больше данных и параметров — стабильно лучше результат |
Предыдущие архитектуры были последовательными по своей природе: чтобы обработать десятое слово, нужно закончить с девятым. Внимание сняло это ограничение и тем самым позволило использовать видеокарты на полную. Без этого свойства моделей на миллиарды параметров просто не существовало бы.
Каждое слово сравнивается с каждым. Удвоили длину текста — вчетверо больше вычислений и памяти. Отсюда прямое следствие, которое вы видите на практике: длинный контекст стоит дорого, съедает видеопамять и замедляет всё. Когда в главе 08 книги «Агент ИИ» речь шла про расход памяти на контекст — вот откуда он берётся.
С этим борются: придуманы способы считать внимание экономнее по памяти и приближённо для очень длинных текстов. Но квадратичная природа никуда не делась, и длинный контекст остаётся дорогим.
Соберём из внимания и всего предыдущего полную архитектуру — ту самую, на которой работает всё, что вы запускаете.
Все части собраны. Осталось увидеть, как они складываются в одну конструкцию — и почему она везде одинаковая, от чат-бота до генератора картинок.
Трансформер — это стопка одинаковых блоков. Внутри блока всего две содержательные части.
вход │ ├──────────────┐ │ │ ↓ │ нормализация │ ↓ │ ВНИМАНИЕ │ ← слова смотрят друг на друга ↓ │ ⊕ ←────────────┘ ← остаточная связь │ ├──────────────┐ │ │ ↓ │ нормализация │ ↓ │ ПОЛНОСВЯЗНЫЙ │ ← каждое слово обрабатывается отдельно ↓ │ ⊕ ←────────────┘ │ выход → на вход следующего такого же блока
Внимание перемешивает информацию между словами — кто на что смотрит. Полносвязная часть обрабатывает каждое слово по отдельности, ни с кем не общаясь: это место, где хранится и применяется «знание». Две функции строго разделены, и блок чередует их.
Интересная деталь: в полносвязной части обычно больше параметров, чем во внимании — её внутренний слой в несколько раз шире. То есть большая часть «знаний» модели физически лежит именно там, а внимание отвечает за то, как эти знания связываются.
текст ↓ разбиение на токены [1284, 97, 3301, ...] ↓ таблица эмбеддингов + кодирование позиции векторы ↓ блок 1 блок 2 ... блок 32 ← глубина модели ↓ финальная нормализация ↓ проекция на словарь → оценка для каждого возможного токена ↓ softmax вероятности → выбор следующего токена
Всё. Ширина вектора и число блоков определяют размер модели: у 7B это примерно 4096 и 32, у моделей покрупнее — больше и того и другого.
Модель выдаёт только один следующий токен. Чтобы получить предложение, результат приписывается к входу, и всё прогоняется заново.
«Паяльник надо» → «держать» «Паяльник надо держать» → «за» «Паяльник надо держать за» → «ручку»
При обучении модель видит весь текст сразу. Но предсказывая пятое слово, она не должна знать шестое — иначе задача тривиальна и учиться нечему.
Поэтому во внимание вставляют маску: каждому слову разрешено смотреть только назад, на себя и на предыдущие. Приём называется каузальной маской, и именно он позволяет учиться на всём тексте параллельно, честно предсказывая каждое следующее слово.
На выходе — вероятности всех токенов словаря. Дальше нужно выбрать один, и здесь есть настройки, которые вы видели в интерфейсах.
| Параметр | Что делает | Практика |
|---|---|---|
| Температура | Сглаживает или заостряет распределение перед выбором | 0 — всегда самый вероятный, предсказуемо. 0.7 — обычный разговор. Выше 1 — креативно и бессвязно |
| Top-k | Выбирать только из k самых вероятных | Отсекает совсем маловероятную чушь |
| Top-p | Выбирать из тех, что в сумме дают вероятность p | Гибче top-k: размер набора зависит от уверенности модели |
| Штраф за повтор | Понижает вероятность уже сказанного | Лечит зацикливание |
Для кода, извлечения данных и любых задач агента ставьте температуру близко к нулю. Там нужна не фантазия, а воспроизводимость. Для текстов и идей — 0.7–0.9. Половина жалоб «модель выдумывает» лечится этой одной настройкой.
| Тип | Устройство | Для чего |
|---|---|---|
| Только декодер | Маска, генерация вперёд | Все языковые модели, которые вы запускаете |
| Только энкодер | Без маски, видит весь текст | Эмбеддинги, классификация. Глава 07 |
| Энкодер-декодер | Обе части | Перевод, распознавание речи. Глава 19 |
Отдельно стоит знать про смесь экспертов: полносвязная часть делится на множество «экспертов», и для каждого токена активируется лишь пара из них. Модель получается огромной по числу параметров, но считается как маленькая. Минус — в память грузить всё равно надо целиком, поэтому на 16 ГБ такие модели помогают мало.
Самое удивительное свойство: то же самое работает не только с текстом.
| Данные | Что играет роль «слова» |
|---|---|
| Текст | Токен |
| Изображение | Квадратный кусочек картинки |
| Звук | Короткий фрагмент спектра |
| Видео | Кусочек кадра плюс время |
Разобравшись здесь, вы разобрались и в главах про картинки, звук и зрение. Меняется только то, что подают на вход и что считают ответом. Механизм один.
Устройство понятно. Теперь самый интересный вопрос: почему из «угадай следующее слово» получается что-то, похожее на понимание.
Задача «угадай следующее слово» выглядит примитивно. Почему её решение даёт модель, которая пишет код и объясняет схемы — и где у этого проходит граница.
Кажется, что предсказание следующего слова — статистика поверхностная. Но посмотрите, что нужно, чтобы предсказывать хорошо.
«Пульсации на выходе драйвера были высокими, поэтому лампа...»
→ «мигала»
требуется: причинно-следственная связь в электронике
«Гурам починил лампу, потому что он...»
→ «электрик»
требуется: отслеживание, кто есть кто
«2 + 2 * 3 = ...»
→ «8»
требуется: порядок операций
«def factorial(n): if n <= 1: return 1; return n *...»
→ «factorial(n-1)»
требуется: понимание рекурсии
Чтобы хорошо предсказывать текст, написанный людьми, приходится выучить то, что стоит за текстом: причинность, арифметику, синтаксис, факты о мире. Не потому, что кто-то этого хотел, а потому, что без этого ошибка не уменьшается. Понимание оказывается побочным продуктом сжатия.
Полезный взгляд: чтобы предсказывать текст, надо его сжать. А сжать — значит найти закономерности. Архиватор, который знал бы физику, сжимал бы учебник физики лучше любого обычного.
Модель на семь миллиардов параметров «видела» терабайты текста. Запомнить это невозможно — параметров на порядки меньше. Значит, она была вынуждена искать сокращённые описания: правила вместо примеров. Это и есть обобщение из главы 05, доведённое до предела.
Наблюдение, изменившее отношение к области: при увеличении размера модели некоторые способности появляются не плавно, а скачком. Модель поменьше не умеет совсем, модель покрупнее — вдруг умеет.
| Способность | Появляется примерно при |
|---|---|
| Связная грамматика | Очень маленьких размерах |
| Фактические знания | Небольших |
| Следование инструкции в запросе | Средних |
| Многошаговое рассуждение | Крупных |
| Надёжный вызов инструментов | Крупных — вот почему агенту нужно 14B и выше |
«Скачкообразное появление способностей» — популярная, но спорная формулировка. Часть исследователей показывает, что скачок возникает из-за резких метрик оценки: если мерить мягче, рост оказывается плавным. Что достоверно — крупные модели умеют то, чего не умеют мелкие. Насколько это «скачок» — вопрос открытый.
Модель тратит фиксированное количество вычислений на каждый токен. Сложная задача, которую просят решить «в уме», требует больше вычислений, чем помещается в один шаг.
Когда модель пишет промежуточные шаги, каждый шаг — это новые токены, то есть новые вычисления. Она буквально выделяет себе больше времени на подумать, и предыдущие рассуждения становятся частью контекста для следующих.
Фраза «рассуждай по шагам, потом дай ответ» — не заклинание, а изменение объёма вычислений. На сложных задачах она реально повышает точность. На простых — только удлиняет ответ. Современные «думающие» модели делают это встроенно.
Теперь честно о том, чего механизм не даёт — и это следует прямо из устройства, а не из недоработок.
| Ограничение | Почему так устроено |
|---|---|
| Нет проверки фактов | Внутри только вероятность продолжения. Механизма «свериться с истиной» не существует. Глава 11 |
| Нет памяти между сессиями | Веса не меняются при разговоре. Всё «запомненное» — это текст в контексте |
| Нет модели самой себя | «Я уверен» — тоже предсказанный текст, а не отчёт о внутреннем состоянии |
| Слаба в точных вычислениях | Считает не арифметикой, а сходством с виденными примерами |
| Знание на дату обучения | После неё — ничего. Отсюда нужда в поиске и RAG |
| Плохо с очень длинными цепочками | Ошибка на шаге попадает в контекст и множится дальше |
Модель не знает, что она знает. Уверенный тон и правильный ответ порождаются одним и тем же механизмом, и по тону отличить одно от другого невозможно в принципе. Это не недостаток реализации — это устройство.
Вопрос, на который нет согласованного ответа, и стоит держать обе позиции в голове.
Вопрос «понимает ли» ничего не меняет в вашей работе. Меняет другое: в чём ей можно доверять и как проверять. Модель — мощный преобразователь текста с обширными, но ненадёжными знаниями. Стройте работу исходя из этого, и философский спор можно оставить философам.
Самое практически важное следствие из всего сказанного — почему модель врёт и почему это невозможно полностью починить.
Не баг и не «недоученность». Прямое следствие устройства из предыдущих глав. Разберём механизм — и станет ясно, что можно сделать, а что нет.
Оно намекает на сбой: обычно модель говорит правду, а иногда ломается. На деле механизм всегда один и тот же. Модель порождает правдоподобное продолжение. Иногда правдоподобное совпадает с истиной, иногда нет. Внутри разницы не существует.
В модели нет отдельного механизма для правды. Есть один механизм — для правдоподобия. Поэтому «выключить галлюцинации» нельзя: это значит выключить саму модель.
Вопрос: «Какой ключ у ollama показывает температуру видеокарты?» Что происходит внутри: • похожие тексты в обучении: «ollama --help», «ollama ps», «--verbose» • шаблон «команда + ключ + понятное слово» встречался тысячи раз • слово «температура» тянет за собой «--temp», «--temperature» Результат: «ollama ps --temperature» Такого ключа нет. Но текст выглядит ровно так, как выглядел бы правильный ответ.
Обратите внимание: модель не «решила соврать». Она построила самое вероятное продолжение. Отсутствие такого ключа в реальности — информация, которой у неё просто нет.
| Источник | Механизм | Пример |
|---|---|---|
| Пробел в знаниях | Данных не было, но шаблон ответа известен | Выдуманный ключ команды, несуществующий артикул |
| Смешение похожего | Два близких факта склеились в один | Свойство одной микросхемы приписано другой из той же серии |
| Давление формата | Просили список из пяти — модель допишет пятый, даже если знает три | «Назови 5 причин» → две последние выдуманы |
| Подхват вашей ошибки | Вопрос содержит неверную посылку, модель её принимает | «Почему в этой лампе стоит трансформатор?» — а его там нет |
Оба провоцируются вами. Просьба «дай ровно пять пунктов» и вопрос с ложной посылкой почти гарантируют вымысел. Это единственные два источника, которые полностью в вашей власти: не задавайте жёсткое количество и не встраивайте в вопрос непроверенные утверждения.
Неприятный поворот. Модели дообучают быть полезными: отвечать, а не уклоняться. Люди при оценке ставят высокие баллы уверенным развёрнутым ответам и низкие — осторожным «не знаю».
В итоге обучение прямо поощряет уверенность, включая ту, что не подкреплена знанием. Отсюда типичное поведение: модель предпочтёт выдумать, чем признать незнание. Подробнее про этот механизм — глава 12.
| Тип вопроса | Риск | Почему |
|---|---|---|
| Объяснить принцип работы | Низкий | Принципы описаны в тысячах текстов одинаково |
| Переформулировать ваш текст | Очень низкий | Исходник перед глазами |
| Написать типовой код | Средний | Синтаксис знает, конкретные функции библиотек выдумывает |
| Точные числа, даты, номиналы | Высокий | Именно то, что плохо сжимается в веса |
| Цитаты, ссылки, источники | Очень высокий | Формат воспроизводится идеально, содержание выдумывается |
| Редкие факты и узкие темы | Очень высокий | Мало данных — но шаблон ответа есть |
| События после обучения | Гарантированный | Информации нет физически |
Числа, артикулы, номиналы, ссылки и цитаты — проверять всегда. Это не перестраховка: именно эти категории модель выдумывает чаще всего, и именно они выглядят убедительнее всего. Объяснение принципа можно принять на веру; конкретный номинал конденсатора — нет.
| Приём | Насколько помогает | Почему |
|---|---|---|
| Дать источник в контексте (RAG) | Сильно | Отвечать по тексту перед глазами намного надёжнее, чем по памяти. Глава 07 |
| Разрешить «не знаю» | Заметно | Снимает давление обязательно ответить |
| Температура около нуля | Заметно | Меньше случайности при выборе токена |
| Просить указать источник | Заметно | Проверяется за секунды; плюс сам факт требования дисциплинирует ответ |
| Модель крупнее | Умеренно | Больше знает — реже додумывает. Но врать не перестаёт |
| Дать инструмент | Сильно, точечно | Калькулятор считает, поиск ищет. Модель перестаёт угадывать то, что можно вычислить |
| Задать два раза по-разному | Как проверка | Расхождение ответов — признак выдумки |
| «Не галлюцинируй» в запросе | Почти никак | Модель не знает, что сейчас галлюцинирует |
«Отвечай только по приведённому тексту. Если ответа в нём нет — напиши в тексте нет ответа. Не используй общие знания.» Три предложения, каждое закрывает свой источник вымысла. Вместе они дают самый заметный эффект из всего списка.
Относитесь к модели как к очень начитанному коллеге, который никогда не признаётся, что чего-то не помнит. Он прочитал невероятно много, отлично объясняет, быстро пишет — и при этом способен уверенно назвать номинал, которого не существует. С таким человеком можно прекрасно работать. Просто номиналы вы за ним проверяете.
Мы несколько раз упомянули дообучение. Разберём, что оно на самом деле меняет внутри — и чего от него ждать не стоит.
Базовая модель просто продолжает текст. Чтобы она отвечала на вопросы и слушалась, нужны ещё два этапа. Что каждый из них меняет и чего не меняет ни один.
| Этап | На чём учат | Что появляется | Стоимость |
|---|---|---|---|
| Предобучение | Терабайты текста из интернета | Знания о мире и языке | Миллионы долларов, недели |
| Обучение инструкциям | Десятки тысяч пар «задание — хороший ответ» | Привычка отвечать, а не продолжать | Тысячи долларов, часы |
| Настройка по предпочтениям | Сравнения «этот ответ лучше того» | Тон, полезность, отказ от вредного | Дорого по разметке |
Модель после одного лишь предобучения на вопрос «Как починить драйвер?» может выдать «...и другие вопросы вы найдёте в нашем FAQ» — она продолжает текст, а не отвечает. Отвечать её научил второй этап. Поэтому в главе 09 книги «ИИ» и сказано брать только instruct.
Та же механика, что в главе 04 — предсказание следующего токена. Изменился только материал: вместо случайного интернета — аккуратные примеры «вот задание, вот образцовый ответ».
ЗАДАНИЕ: Объясни, почему светодиодной лампе нужен драйвер. ОТВЕТ: Светодиод — токовый прибор: его яркость и срок службы зависят от тока, а не от напряжения. В сети переменное напряжение 220 В, и оно нестабильно. Драйвер выпрямляет его и стабилизирует ток...
Модель не узнаёт новых фактов на этом этапе. Про светодиоды она уже всё прочитала в предобучении. Она учится формату: на вопрос давать ответ, писать структурно, останавливаться вовремя. Это переключение режима, а не пополнение знаний.
Проблема этапа 2: «хороший ответ» трудно определить. Правильных ответов много, и они разного качества. Решение — не показывать образец, а сравнивать.
Этот подход называют обучением с подкреплением по человеческим предпочтениям. Позже появился более простой способ — обучать прямо на парах «лучше/хуже» без отдельного оценщика; он дешевле и потому распространился в открытых моделях.
Оценщики — люди. Люди ставят выше уверенный развёрнутый ответ и ниже — осторожное «точно не скажу». Модель оптимизируется под эту оценку. Отсюда прямо следует поведение из главы 11: лучше выдумать, чем признать незнание. Это не ошибка обучения, это то, чему её научили.
| Эффект | Как проявляется |
|---|---|
| Налог на выравнивание | После настройки модель может стать чуть слабее в чистых задачах — часть способностей приносится в жертву удобству |
| Подхалимство | Соглашается с вами, даже когда вы неправы: согласие оценивали выше |
| Многословие | Длинные ответы систематически получали оценку выше коротких |
| Избыточная осторожность | Отказ там, где ничего опасного нет |
| Узнаваемый стиль | Те самые обороты, по которым текст опознаётся как машинный |
Дайте модели верный ответ и скажите «по-моему, это неправильно». Если она немедленно согласится и начнёт оправдываться — перед вами подхалимство, а не рассуждение. Полезно знать про свою рабочую модель: значит, её согласие с вами ничего не подтверждает.
«Дообучу модель на своих книгах, и она будет их знать». Так это не работает. Факты, показанные несколько раз, тонут среди терабайтов предобучения и воспроизводятся искажённо. Для знания ваших текстов нужен RAG из главы 07, а не дообучение. Дообучение — про как отвечать, RAG — про что отвечать.
| Задача | Дообучение | RAG | Просто хороший запрос |
|---|---|---|---|
| Отвечать в вашем стиле | Да | Нет | Отчасти |
| Всегда выдавать строгий JSON | Да | Нет | Отчасти |
| Знать содержание ваших книг | Нет | Да | Нет |
| Разбираться в вашей узкой терминологии | Да | Да | Отчасти |
| Знать свежие факты | Нет | Да | Нет |
| Разовая задача | Нет | Нет | Да |
Сначала попробуйте сформулировать запрос лучше — это бесплатно и решает больше, чем кажется. Потом RAG, если нужны ваши данные. И только потом дообучение, если нужен устойчивый стиль или формат. Люди обычно идут в обратном порядке и тратят недели зря.
Практика: как дообучить модель на вашем ноутбуке, не имея дата-центра.
Обучить 7B целиком — нужны десятки гигабайт видеопамяти. Обучить крошечную добавку к ней — хватит ваших шестнадцати. Как устроен приём и как им пользоваться.
Из главы 03: при обучении помимо весов надо хранить градиенты и состояния оптимизатора — втрое-вчетверо больше памяти, чем занимает модель. Для 7B это десятки гигабайт. У вас 16.
Приём LoRA: не трогать исходные веса вообще. Заморозить их и обучить маленькую добавку, которая прибавляется к результату.
обычное дообучение: W → W' (меняем 7 млрд чисел)
LoRA: W + A·B (W заморожен,
↑ ↑ учим только A и B)
не трогаем несколько миллионов чисел
Хитрость в том, что A и B — узкие матрицы. Если исходная матрица 4096×4096 (это 16 миллионов чисел), то A размером 4096×8 и B размером 8×4096 дают вместе 65 тысяч — в 250 раз меньше. А их произведение имеет тот же размер, что исходная матрица, и потому может к ней прибавляться.
Наблюдение, лежащее в основе: изменения, нужные для адаптации модели к новой задаче, оказываются простыми по структуре. Их можно описать гораздо меньшим числом параметров, чем саму модель. Это не доказано строго, но подтверждается на практике повсеместно.
| Полное дообучение 7B | LoRA к 7B | |
|---|---|---|
| Видеопамять | Десятки ГБ | Умещается в 16 ГБ |
| Время | Дни на нескольких картах | Часы на одной |
| Размер результата | Вся модель заново, гигабайты | Файл в десятки мегабайт |
| Можно ли отключить | Нет | Да — просто не подключать |
| Сколько штук | Одна | Много, переключаемые |
| Качество | Эталон | Близко для узких задач |
Результат — маленький отдельный файл. Одна базовая модель плюс несколько адаптеров: один под ваш стиль текстов, другой под строгий формат вывода, третий под грузинский. Переключаются мгновенно, места почти не занимают.
Можно пойти дальше: держать замороженную базовую модель в сжатом виде (4 бита, как в главе 10 книги «ИИ»), а обучать адаптер в обычной точности. Это то, что обычно называют QLoRA.
Экономия огромная: 7B в четырёх битах занимает около 4 ГБ вместо 14, и на ваших 16 ГБ остаётся достаточно места для самого обучения. Именно этот вариант делает дообучение на ноутбуке реальным.
| Параметр | Что значит | С чего начать |
|---|---|---|
| rank (r) | Ширина добавки. Больше — выразительнее и тяжелее | 8 или 16. Для стиля хватает 8, для сложного — 32 |
| alpha | Насколько сильно добавка влияет | Обычно берут вдвое больше rank |
| target modules | К каким матрицам подключать | Начните с матриц внимания; шире — сильнее, но дороже |
| learning rate | Размер шага из главы 04 | Для LoRA заметно больше, чем при полном дообучении |
| epochs | Сколько раз пройти данные | 1–3. Больше — почти гарантированное переобучение |
| batch + накопление | Приём из главы 04 для экономии памяти | Маленький батч, накопление 4–8 шагов |
Значения по умолчанию в разных библиотеках различаются, и они меняются от версии к версии. Берите значения из документации того инструмента, которым будете пользоваться, — таблица выше про то, что настраивать и в какую сторону, а не про точные цифры.
Здесь ровно как в главе 05: результат определяется данными, а не настройками.
| Сколько примеров | Что получится |
|---|---|
| Меньше 50 | Почти ничего. Либо не изменится, либо сломается |
| 100–500 | Стиль и формат схватываются |
| 1000–5000 | Уверенный результат для узкой задачи |
| Больше 10000 | Хорошо, но собрать качественно — уже работа |
Двести отличных примеров лучше пяти тысяч посредственных. Модель выучит ровно то, что вы показали, включая ваши опечатки, непоследовательность формата и случайно затесавшийся мусор. Час на вычитку данных даёт больше, чем день на подбор параметров.
Формат данных — те же пары «задание — ответ», что в главе 12. Важно, чтобы ответы были единообразны: если в половине примеров вы пишете маркированным списком, а в половине сплошным текстом, модель выучит случайность.
| Симптом | Причина | Решение |
|---|---|---|
| Не хватает видеопамяти | Слишком большой батч или длинные примеры | Батч 1 плюс накопление; укоротить примеры; сжатая база |
| Ничего не изменилось | Мало данных, мало эпох, слишком маленький шаг | Больше данных; проверить, что адаптер вообще подключён |
| Дословно повторяет обучающие примеры | Переобучение — глава 05 | Меньше эпох, меньше rank, больше данных |
| Стала хуже в обычных задачах | Забывание: адаптер перетянул одеяло | Меньше rank и alpha, меньше эпох |
| Выдаёт бессвязное | Слишком большой шаг обучения | Уменьшить в несколько раз |
| Ошибка в середине обучения | Длинный пример не влез | Ограничить длину, отфильтровать данные |
| Размер модели | На 16 ГБ видеопамяти |
|---|---|
| 1–3B | Свободно, быстро. Хорошо для тренировки навыка |
| 7–8B | Реально в сжатом варианте. Основной рабочий размер |
| 14B | Возможно в сжатом, с короткими примерами и маленьким батчем |
| 32B и выше | Нет |
Первую LoRA сделайте на модели 1–3B, даже если она вам не нужна. Цикл пройдёт за десятки минут, вы увидите весь процесс целиком и набьёте руку на настройках. Начинать сразу с 7B — значит по три часа ждать результата каждой ошибки.
Языковые модели закончились. Переходим к совершенно другому классу — тому, что рисует картинки. Механизм там неожиданно изящный.
Механизм совершенно не похож на языковые модели и при этом очень изящный: научить сеть убирать шум, а потом попросить убрать шум из чистого шума.
Как научить сеть рисовать? Прямая постановка безнадёжна: что считать правильным ответом на «нарисуй плату»? Правильных картинок бесконечно много.
Обходной путь оказался гениально простым. Берём настоящую картинку и портим её шумом — постепенно, за много шагов, пока не останется чистый шум. Теперь у нас есть бесконечно много пар «чуть более зашумлённое → чуть менее зашумлённое», и правильный ответ для каждой известен точно.
фото платы → +шум → +шум → +шум → ... → сплошной шум
шаг 0 шаг 1 шаг 2 шаг 3 шаг 1000
обучение: по картинке на шаге N предсказать добавленный шум
Обучили. Теперь запускаем в обратную сторону: берём случайный шум и просим сеть шаг за шагом убирать из него «шум». Из ничего проступает изображение.
Как проявка фотографии: сначала мутное пятно, постепенно проступают контуры, потом детали. Только здесь на плёнке изначально ничего не было — изображение рождается из того, что сеть «считает» правдоподобным при удалении шума.
Картинка 1024×1024 — это три миллиона чисел. Прогонять их через сеть сотню раз было бы неподъёмно.
Решение: работать не с картинкой, а с её сжатым представлением. Отдельная сеть-кодировщик сжимает изображение в компактный массив в десятки раз меньше, весь процесс удаления шума происходит там, а в конце декодер разворачивает результат обратно в картинку.
текст «плата с вздутым конденсатором» ↓ текстовый кодировщик векторы смысла (глава 06) ↓ случайный шум в сжатом пространстве ↓ ← сюда через внимание (глава 08) подмешивается текст шаг 1: убрали часть шума шаг 2: убрали ещё ... шаг 25: чистое сжатое представление ↓ декодер готовая картинка
Именно переход в сжатое пространство сделал генерацию изображений доступной для домашнего железа. Без него нужны были бы серверные карты. Отсюда же понятно, почему генерация в большом разрешении дорожает нелинейно — сжатое представление тоже растёт.
Ваше описание превращается в векторы (ровно как в главе 06), и на каждом шаге удаления шума сеть смотрит на эти векторы через внимание — механизм из главы 08, только между картинкой и текстом.
То есть сеть на каждом шаге спрашивает себя: «какой шум надо убрать, чтобы получившееся было похоже вот на это описание». Постепенно накапливаясь, эти решения и приводят к нужному изображению.
Текстовый кодировщик понимает описание как «мешок признаков» гораздо лучше, чем как структуру. Поэтому модели плохо даются точные пространственные отношения («красный куб слева от синего шара»), счёт («ровно пять конденсаторов») и текст на картинке. Свежие модели стали заметно лучше, но природа ограничения та же.
| Параметр | Что делает | Практика |
|---|---|---|
| Шаги | Сколько раз убирать шум | 20–30 обычно достаточно. Больше — почти нет разницы, только дольше |
| Сила следования тексту | Насколько жёстко держаться описания | Слишком мало — игнорирует запрос. Слишком много — пережжённые цвета и артефакты |
| Сэмплер | Алгоритм, каким именно убирается шум | Влияет на стиль и скорость. Поменяйте — увидите разницу, единственно верного нет |
| Seed | Начальный шум | Тот же seed и те же настройки — та же картинка. Записывайте удачные |
| Разрешение | Размер результата | Модель обучалась на определённом размере; сильно отклоняться — получать искажения |
| Негативный запрос | Чего не должно быть | Работает как отталкивание от описанного |
Генерация полностью детерминирована: одинаковые входные данные дают одинаковый результат. Это значит, что вы можете менять один параметр за раз и честно сравнивать. Без фиксации seed любое сравнение настроек бессмысленно — вы сравниваете разные случайные шумы.
| Поколение | Особенности | Требования |
|---|---|---|
| Ранние (SD 1.x) | Лёгкие, огромная экосистема дополнений, качество по нынешним меркам слабое | Идут почти на всём |
| Средние (SDXL и родственные) | Хорошее качество, много готовых стилей и адаптеров | Комфортно на ваших 16 ГБ |
| Новые (крупные модели вроде Flux) | Заметно лучше с текстом и композицией | Тяжелее; на 16 ГБ нужны сжатые варианты |
У моделей изображений условия использования различаются сильнее, чем у языковых: часть свободна для коммерции, часть разрешает только некоммерческое использование, часть требует отдельной лицензии. Если планируете использовать результаты в своих продуктах — это надо прочитать до того, как вы на модели что-то построили.
| Языковая | Диффузионная | |
|---|---|---|
| Что предсказывает | Следующий токен | Шум, который надо убрать |
| Как получается результат | Слева направо, по одному | Целиком, за несколько проходов уточнения |
| Можно ли вернуться и исправить | Нет | Да — каждый шаг уточняет всю картинку |
| Повторяемость | Зависит от температуры | Полная при фиксированном seed |
| Размер | Миллиарды параметров | Обычно заметно меньше |
Практика на вашем железе: что ставить, что реально влезет в 16 ГБ и чего ожидать по скорости.
Что поставить, что влезет в шестнадцать гигабайт, сколько ждать и как формулировать запрос, чтобы получать нужное, а не случайное.
| Инструмент | Кому | Плюс | Минус |
|---|---|---|---|
| ComfyUI | Тем, кто любит разбираться | Полный контроль, схема из блоков, максимум возможностей, экономнее по памяти | Порог входа выше |
| Веб-интерфейсы вроде Forge / A1111 | Большинству | Привычные поля и ползунки, огромная экосистема дополнений | Меньше гибкости |
| Упрощённые оболочки | Чтобы просто попробовать | Поставил и рисуешь | Мало настроек |
Вы собираете схемы и разбираетесь в железе — ComfyUI вам подойдёт лучше, чем кажется на первый взгляд. Это буквально блок-схема: узлы, соединённые проводами, каждый делает одну операцию. Плюс он бережнее расходует видеопамять, что при 16 ГБ существенно. Начать можно с готовых схем, которых в сети множество.
| Модель | Разрешение | Влезет? |
|---|---|---|
| Ранние (SD 1.x) | 512–768 | Свободно, очень быстро |
| SDXL и родственные | 1024 | Да, комфортно — основной ваш рабочий вариант |
| SDXL | 1536 и выше | Впритык; лучше генерировать меньше и увеличивать отдельно |
| Крупные новые модели в полной точности | 1024 | Нет |
| Крупные новые в сжатом виде | 1024 | Да, медленнее — но это рабочий путь |
Генерировать сразу в большом разрешении дорого и часто даёт искажения — модель обучалась на другом размере. Правильный порядок: сгенерировать в родном разрешении модели, выбрать удачное, и только его увеличить отдельной моделью-апскейлером. Экономит время и память, и результат обычно лучше.
Порядок величин для вашей карты. Точные цифры зависят от модели, разрешения, числа шагов и от того, не ушла ли часть модели в оперативную память.
| Что | Порядок времени |
|---|---|
| Первая генерация после запуска | Дольше остальных — модель грузится в память |
| SDXL, 1024, 25 шагов | Единицы секунд |
| Крупная модель в сжатом виде | Десятки секунд |
| Увеличение готовой картинки | Единицы секунд |
| Обучение LoRA (глава 17) | Десятки минут |
Генерация вдруг замедлилась в разы или программа падает с сообщением о нехватке памяти. Причины: слишком большое разрешение, слишком много картинок за раз, подключено много дополнений, либо в памяти осталась языковая модель из Ollama. Ollama и генератор картинок делят одну видеопамять — держать их одновременно на 16 ГБ обычно не выйдет.
Здесь всё иначе, чем с языковой моделью. Текстовому кодировщику нужен не связный текст, а перечисление признаков по убыванию важности.
[что изображено] , [детали] , [окружение] , [свет] , [ракурс] , [стиль] , [качество] Пример: печатная плата крупным планом, вздутый электролитический конденсатор, следы пайки, зелёная маска, макросъёмка, мягкий боковой свет, малая глубина резкости, техническая фотография, высокая детализация
| Правило | Почему |
|---|---|
| Важное — в начало | Первые слова влияют сильнее |
| Конкретные существительные | «Макросъёмка» работает, «красиво» — нет |
| Через запятую, а не предложениями | Кодировщик так устроен |
| Не больше 2–3 главных объектов | Больше — начнёт путать и смешивать |
| Отрицания — в негативный запрос | «Без текста» в основном запросе может дать текст |
| Считать модель не умеет | «Три конденсатора» даст сколько получится |
Писать запрос как просьбу человеку: «нарисуй мне красивую плату, чтобы было понятно, где сгоревший элемент». Модель не понимает намерений — она сопоставляет слова с изображениями. Пишите описание готовой картинки, а не задание.
Большинство инструментов сохраняет параметры прямо в файл картинки. Проверьте, что эта опция включена: через месяц вы захотите повторить понравившийся результат и без seed и настроек не сможете.
| Задача | Годится? | Комментарий |
|---|---|---|
| Обложки и иллюстрации для книг | Отлично | Абстрактные и стилизованные — сильная сторона |
| Фоны и заставки для видео | Отлично | То же самое |
| Иконки и элементы оформления | Хорошо | Может понадобиться доработка |
| Технически точная схема | Нет | Модель рисует похожее на схему, а не правильную схему |
| Иллюстрация конкретной детали | С осторожностью | Выглядит убедительно, но детали выдуманы — как галлюцинации в тексте |
| Изображение с текстом | Слабо | Надпись лучше добавить обычным редактором |
Сгенерированная «фотография платы» относится к реальной плате так же, как выдуманный номинал относится к настоящему. Для оформления — прекрасно. Как иллюстрация к технической инструкции, где читатель будет опознавать деталь — опасно.
Случайные картинки — это развлечение. Управление композицией превращает генерацию в инструмент.
Пока вы получаете случайные картинки по описанию — это игрушка. Управление композицией, дорисовка по маске и работа от исходника превращают её в рабочий инструмент.
| Способ | Что задаёте | Когда применять |
|---|---|---|
| От исходника | Картинку, которую надо переделать | Есть черновик или фото, нужно изменить стиль |
| Дорисовка по маске | Область, которую надо заменить | Убрать лишнее, исправить кусок, заменить деталь |
| Расширение | Куда достроить кадр | Кадр оказался тесен, нужно поле под текст |
| Управление структурой | Контуры, глубину, позу | Нужна точная композиция |
Вместо чистого шума процесс стартует от вашей картинки, зашумлённой частично. Ключевой параметр — насколько сильно зашумлять.
| Сила изменения | Что получается |
|---|---|
| 0.2–0.3 | Почти исходник, слегка причёсанный |
| 0.4–0.6 | Композиция сохранена, стиль и детали новые. Рабочий диапазон |
| 0.7–0.8 | От исходника осталась общая идея |
| 0.9+ | Почти то же, что генерация с нуля |
Набросайте композицию в любом редакторе хоть цветными пятнами — где что расположено, какого цвета. Подайте это как исходник с силой около 0.6. Модель превратит пятна в изображение, но сохранит вашу компоновку. Быстрее и надёжнее, чем пытаться описать расположение словами, которое модель всё равно плохо понимает.
Вы закрашиваете область, и модель перерисовывает только её, подстраиваясь под окружение. Самый практичный из всех приёмов.
| Задача | Как |
|---|---|
| Убрать лишний предмет | Закрасить его; в запросе описать, что должно быть вместо — фон, поверхность |
| Исправить испорченную деталь | Закрасить только её, запрос — описание нужной детали |
| Заменить объект | Закрасить и описать новый |
| Почистить артефакты | Мелкие области, малая сила изменения |
Самый мощный инструмент. Из вашей опорной картинки извлекается некая структура — контуры, карта глубины, скелет позы — и модель обязана её соблюдать, свободно распоряжаясь всем остальным.
| Тип структуры | Что сохраняется | Ваш сценарий |
|---|---|---|
| Контуры | Все линии и границы | Перерисовать эскиз в другом стиле, сохранив форму |
| Мягкие линии | Основные контуры, без мелочей | То же, но с большей свободой |
| Глубина | Расположение в пространстве | Сохранить компоновку сцены, сменив всё остальное |
| Поза | Положение фигуры человека | Иллюстрации для видео с нужной позой |
| Набросок | Грубые линии от руки | Превратить свой рисунок в готовое изображение |
| Сегменты | Где какая область по смыслу | Точная раскладка «здесь фон, здесь объект» |
Нарисовали от руки схему расположения блоков — управление по наброску превратит её в аккуратную иллюстрацию с сохранением вашей компоновки. Это тот случай, когда генерация перестаёт быть лотереей: структуру задаёте вы, модель отвечает только за исполнение.
Способы комбинируются: можно одновременно держать контуры и глубину, добавить LoRA со своим стилем (глава 17) и работать по маске. Сила у каждого управления регулируется отдельно.
Три-четыре управления одновременно, каждое на полной силе — и они начинают противоречить друг другу, а результат разваливается. Добавляйте по одному, смотрите на результат, уменьшайте силу до минимальной, при которой эффект ещё есть. И помните, что каждое дополнение съедает видеопамять.
Когда остался один мелкий дефект, соблазн велик перегенерировать «ещё разок» — и уходит час. Убрать его в графическом редакторе за две минуты почти всегда быстрее. Генерация — инструмент, а не религия.
Последняя ступень контроля: научить модель вашему собственному стилю или конкретному объекту.
Тот же приём, что в главе 13, но для картинок — и здесь он на порядок доступнее: два десятка изображений и полчаса на вашей видеокарте.
| Задача | Что обучаете | Сколько изображений |
|---|---|---|
| Единый стиль для всех обложек ваших книг | Стиль | 20–40 |
| Конкретный повторяющийся объект | Объект | 15–30 |
| Узнаваемый персонаж для видео | Персонаж | 20–40 |
| Специфическая манера съёмки | Стиль | 30–50 |
У вас полтора десятка учебников, и каждому нужны обложка и иллюстрации в едином виде. Описывать стиль словами при каждой генерации — ненадёжно, результат плывёт. Обученный один раз адаптер даёт воспроизводимый стиль одним словом-ключом.
Базовая модель заморожена, обучается маленькая добавка — как в главе 13. Разница количественная и приятная: изображений нужно два десятка, а не тысячи примеров, и обучение занимает десятки минут, а не часы.
Результат — файл в десятки мегабайт, который подключается к любой совместимой базовой модели, а сила его влияния регулируется.
| Требование | Почему |
|---|---|
| Единый стиль | Учите стиль — все изображения должны быть в нём. Один чужеродный испортит |
| Разные ракурсы и планы | Иначе выучит конкретный кадр, а не суть. Это переобучение из главы 05 |
| Разный фон | Иначе фон станет частью «стиля» — прямой аналог волка на снегу |
| Хорошее качество | Размытые и мелкие научат размытости |
| Одинаковый размер | Обычно квадрат в родном разрешении модели |
| Без посторонних надписей | Водяные знаки и подписи выучатся тоже |
Если все ваши обучающие картинки сняты на одном столе — модель решит, что этот стол часть стиля, и будет дорисовывать его везде. Разнообразие всего, кроме того, чему вы учите, — главное правило подготовки данных.
К каждому изображению пишется краткое описание. Здесь есть неочевидное правило, из-за которого чаще всего не получается.
Модель связывает слово-ключ с тем, что не описано в подписях, но присутствует на всех картинках. Поэтому:
изображение 1: mystyle, печатная плата, вид сверху, светлый фон изображение 2: mystyle, паяльник на столе, боковой ракурс изображение 3: mystyle, светодиодная лампа в разборе, тёмный фон Про сам стиль — ни слова. Общее у всех трёх и есть стиль, и он привяжется к слову mystyle.
| Параметр | С чего начать | Куда двигать |
|---|---|---|
| rank | Небольшой — 8–16 | Для стиля хватает малого; для сложного объекта больше |
| Шаги обучения | Около 1000–1500 при 20–30 картинках | Больше — риск переобучения |
| Скорость обучения | Из документации инструмента | Слишком большая — «пережжённые» результаты |
| Промежуточные сохранения | Включить обязательно | Сохранять каждые несколько сотен шагов |
Обучение сохраняет адаптер несколько раз по ходу. Потом вы сравниваете их на одном и том же запросе с одним seed и выбираете лучший. Очень часто лучшим оказывается не последний, а средний: к концу модель успевает переобучиться. Без промежуточных сохранений вы этого просто не увидите.
Просите что-то новое, а получаете вариации обучающих картинок. Это переобучение: адаптер запомнил конкретные изображения вместо стиля. Лечится меньшим числом шагов, меньшим rank и большим разнообразием данных.
| Что | Получается |
|---|---|
| Стиль, цветовая гамма, манера | Отлично. Самый надёжный сценарий |
| Узнаваемый персонаж | Хорошо при качественных данных |
| Конкретный предмет | Средне — форма плывёт |
| Технически точная деталь | Плохо. Та же проблема, что в главе 15 |
| Текст и надписи | Не решается адаптером |
Обучать адаптер на своих работах — очевидно нормально. На чужих — вопрос не технический, а правовой и этический, и он по-разному решается в разных странах и по-разному воспринимается сообществом. Особенно чувствительны узнаваемый стиль живого автора и изображения реальных людей. Если результат пойдёт в коммерческое использование — это стоит выяснить заранее.
Последняя глава блока: движущиеся картинки, и честный разговор о том, что из этого реально работает дома.
Самая быстро меняющаяся область и самая требовательная к железу. Что принципиально сложнее, чем с картинками, и что реально получится на шестнадцати гигабайтах.
| Проблема | В чём сложность |
|---|---|
| Объём | Пять секунд при 24 кадрах — это 120 изображений вместо одного |
| Связность во времени | Мало сгенерировать 120 хороших кадров — они должны быть одним и тем же миром |
| Физика | Предметы не должны появляться из ниоткуда и проходить сквозь друг друга |
| Память | Внимание квадратично (глава 08), а элементов теперь не сотни, а десятки тысяч |
| Данные | Размеченного видео на порядки меньше, чем картинок |
Основной приём: добавить внимание вдоль времени. Каждый кусочек кадра смотрит не только на соседей в своём кадре, но и на себя же в предыдущих и следующих. Тот же механизм из главы 08, просто применённый ещё по одной оси. Из-за этого и растут требования к памяти.
| Подход | Как | Нагрузка |
|---|---|---|
| Оживление картинки | Берётся готовое изображение, к нему добавляется движение | Умеренная. Самый реальный вариант для вас |
| Надстройка над моделью изображений | К обычной модели картинок подключается модуль движения | Умеренная |
| Полноценная видеомодель | Обучена на видео с нуля | Высокая. На 16 ГБ — только сжатые варианты и короткие клипы |
| Задача | Реалистичность |
|---|---|
| Оживить статичную картинку на 2–4 секунды | Да, это рабочий сценарий |
| Короткий клип по описанию, низкое разрешение | Да, в сжатом варианте модели, медленно |
| 5+ секунд в высоком разрешении | Нет |
| Видео с людьми, говорящими и жестикулирующими | Плохо. Руки и лица — известная слабость |
| Управляемая сцена с конкретным сюжетом | Нет. Контроля почти нет |
| Увеличить частоту кадров и разрешение готового | Да, и это часто полезнее генерации |
Домашняя генерация видео сейчас — это короткие вставки и оживлённые заставки, а не съёмка сюжетов. Если нужен контент для роликов, гораздо практичнее: сгенерировать хорошую статичную картинку (главы 15–17), добавить ей лёгкое движение, и использовать как перебивку или фон. Это работает и выглядит прилично.
Для вашей работы с роликами это, вероятно, полезнее генерации — и требует куда меньше ресурсов.
| Задача | Насколько зрело | Польза для вас |
|---|---|---|
| Увеличение разрешения | Зрело | Старые записи в приличный вид |
| Повышение частоты кадров | Зрело | Плавность, замедление |
| Удаление фона без хромакея | Зрело | Съёмка где угодно, без зелёной ткани |
| Шумоподавление и стабилизация | Зрело | Съёмка с рук и при плохом свете |
| Субтитры из речи | Очень зрело | Глава 19 — вероятно, самое полезное в книге для видео |
| Перевод и озвучка | Развивается | Русский, грузинский, английский из одного ролика |
| Автонарезка длинного в короткие | Развивается | Вертикальные отрывки из длинного видео |
Удаление фона без зелёной ткани — самый недооценённый инструмент для домашней съёмки. Работает по одному кадру, требований к памяти почти нет, а экономит целый этап подготовки.
Видео — самая быстро движущаяся часть области. Конкретные названия моделей и требования к памяти меняются за месяцы, поэтому в этой главе их сознательно нет. Что останется верным надолго: видео требует на порядок больше ресурсов, чем картинки, связность во времени — принципиальная трудность, и контроля над сюжетом мало. По этим трём осям и оценивайте любую новую модель, о которой услышите.
Звук — область, где локальные модели уже сейчас работают отлично и требуют немного. Начнём с самого полезного.
Область, где локальные модели работают на уровне платных сервисов и требуют немного. Для вашей работы с видео — вероятно, самое полезное из всей книги.
Звук превращают в картинку. Спектрограмма — это график, где по горизонтали время, по вертикали частота, а яркость означает громкость. Дальше работает уже знакомая архитектура из главы 09.
звуковая волна ↓ разбиение на короткие окна, преобразование Фурье спектрограмма — по сути изображение ↓ энкодер векторы (глава 06) ↓ декодер с вниманием текст, по одному токену (глава 09)
Спектр сигнала вам знаком по электронике. Это ровно он: частотное представление вместо временного. Модель распознавания речи — это, по сути, модель, читающая спектрограммы как картинки и выдающая текст.
Ключевым оказался не хитрый алгоритм, а масштаб и разнообразие данных: сотни тысяч часов записей на десятках языков, с разным качеством, акцентами и шумом. Модель научилась работать в реальных условиях, а не в студийных.
Отсюда и практический вывод: качество записи влияет меньше, чем кажется. Съёмка на телефон с эхом в комнате распознаётся вполне прилично.
| Размер | Качество | Скорость | Когда брать |
|---|---|---|---|
| Крошечная | Слабое, много ошибок | Очень быстро | Черновая расшифровка, реальное время |
| Базовая | Приемлемое для английского | Быстро | Быстрые задачи |
| Средняя | Хорошее | Средне | Разумный компромисс |
| Большая | Отличное, включая русский | Медленнее | Ваш выбор. На 16 ГБ идёт свободно |
Существуют переписанные реализации, которые работают в несколько раз быстрее оригинала при том же качестве, и версии, идущие на процессоре. Если скорость важна — ищите их, это даёт больше, чем уменьшение размера модели.
| Задача | Результат |
|---|---|
| Субтитры к вашему ролику | Готовый файл с таймкодами. Правки минимальны |
| Расшифровка длинного видео в текст | Основа для статьи или главы книги |
| Перевод речи в текст другого языка | Модель умеет сразу переводить на английский |
| Поиск по своим видеозаписям | Расшифровать всё, дальше — поиск по смыслу из главы 07 |
| Определение, кто говорит | Отдельным инструментом поверх; работает, но не идеально |
Наговорить главу книги голосом, расшифровать, и дальше править текст. Говорить человек может в несколько раз быстрее, чем печатать, а правка расшифровки быстрее написания с нуля. Для человека, который пишет учебники и снимает видео, это заметное ускорение всего процесса.
| Проблема | Почему | Что делать |
|---|---|---|
| Термины и названия деталей | Редкие слова, мало примеров в обучении | Подсказать список терминов в начальном запросе, если инструмент это поддерживает |
| Смесь языков в одной фразе | Модель выбирает язык для фрагмента целиком | Указать язык явно; разделять записи по языкам |
| Повторы и зацикливание | Долгая тишина или музыка — модель «додумывает» | Вырезать длинные паузы; ограничить длину сегмента |
| Выдуманный текст на пустом месте | Та же природа, что галлюцинации из главы 11 | Проверять участки, где по звуку речи нет |
| Несколько говорящих одновременно | Наложение спектров | Записывать раздельно, если возможно |
| Пунктуация и абзацы | Ставит на слух, иногда странно | Прогнать расшифровку через языковую модель для оформления |
Важное и малоизвестное: на участках без речи модель иногда выдаёт целые фразы, которых не было. Механизм ровно тот же, что в главе 11 — она порождает правдоподобное продолжение. Если в расшифровке появился фрагмент, который вы не говорили, это не мистика и не подстава, а ожидаемое поведение.
| Задача | Зрелость | Применение у вас |
|---|---|---|
| Шумоподавление в записи голоса | Отличная | Съёмка в неподготовленном помещении |
| Разделение на дорожки: голос, музыка, шум | Отличная | Вытащить чистый голос из готового ролика |
| Определение языка | Отличная | Сортировка архива записей |
| Кто говорит в какой момент | Средняя | Расшифровка диалогов и интервью |
Обратная задача: превратить текст в голос. Здесь техника уже опережает то, что разрешено и уместно.
Локальный синтез речи уже звучит естественно, а клонирование голоса требует нескольких секунд записи. Как это работает — и почему здесь техника опередила право и этику.
Обратная задача к предыдущей главе, и решается похоже: текст превращается в спектрограмму, спектрограмма — в звуковую волну.
текст ↓ нормализация: «220 В» → «двести двадцать вольт» последовательность звуков с ударениями ↓ модель (та же архитектура из главы 09) спектрограмма ↓ вокодер звуковая волна
Чаще всего — на первом шаге, а не в нейросети. Числа, единицы измерения, сокращения, обозначения деталей. «C12» может стать «си двенадцать» или «эс двенадцать», «220В» — «двести двадцать вэ». Для технических текстов это основной источник неестественности, и лечится он правкой текста, а не настройкой модели.
| Уровень | Что даёт | Требования |
|---|---|---|
| Лёгкие модели | Разборчиво, слегка механически, очень быстро, идёт даже на слабом железе | Минимальные |
| Качественные модели | Естественная интонация, несколько голосов на выбор | Умеренные, на вашей карте свободно |
| С клонированием | Повторяет конкретный голос по короткому образцу | Умеренные |
Качество синтеза сильно зависит от языка: на английском выбор огромен, на русском — заметно скромнее, на грузинском может не оказаться вовсе или быть слабым. Это ограничение данных обучения, а не моделей. Проверяйте на своём языке прежде, чем строить на этом рабочий процесс.
Модель кодирует образец голоса в вектор — тот самый приём из главы 06, только вектор описывает тембр, а не смысл. Дальше синтез идёт с оглядкой на этот вектор.
Дообучение не требуется: достаточно нескольких секунд чистой записи. Именно это делает технологию одновременно удобной и проблемной.
| Что влияет на качество | Как |
|---|---|
| Чистота образца | Решающе. Шум и эхо копируются вместе с голосом |
| Длина образца | Обычно хватает десятков секунд; больше — стабильнее |
| Совпадение языка | Клонировать голос на язык, которого не было в образце, получается хуже |
| Ровность речи в образце | Эмоциональный образец даёт нестабильный результат |
Голос человека во многих юрисдикциях защищён — как элемент личности, как биометрия, или и то и другое. Правила различаются от страны к стране и активно меняются. Практическое разделение:
Отдельно: маркировка. Растёт практика — а местами и требование — помечать синтезированный голос как синтезированный. Для вашего контента это разумно делать по умолчанию, даже где не обязательно: доверие аудитории дороже.
| Сценарий | Насколько хорош | Комментарий |
|---|---|---|
| Озвучка своих роликов своим голосом | Отлично | Записали образец один раз — дальше правите текстом, а не переозвучкой |
| Версии ролика на разных языках | Хорошо | Проверьте качество на каждом языке отдельно |
| Аудиоверсия книги | Хорошо | Много текста — экономия огромная. Но вычитывать произношение терминов придётся |
| Голосовые подсказки в самоделке | Отлично | Сгенерировать заранее и положить файлы в устройство |
| Живое озвучивание в реальном времени | Ограниченно | Лёгкие модели успевают, качественные — нет |
| Эмоциональная актёрская игра | Слабо | Ровный тон получается, живая игра — пока нет |
Перед озвучкой прогоните текст через языковую модель с задачей: раскрыть все сокращения, числа и обозначения словами так, как их произносят вслух. «C12» → «конденсатор це двенадцать», «220В» → «двести двадцать вольт». Это убирает большую часть неестественности за один проход.
Третья звуковая тема, и для вас — возможно, самая интересная: звук как способ диагностики.
Генерация музыки — самая слабая из звуковых областей. Зато разделение дорожек работает отлично, а классификация звука открывает то, чего в книге ещё не было: диагностику по слуху.
Открытые модели генерации музыки существуют, работают на домашнем железе и дают результат, который заметно отстаёт от того, что вы слышите в рекламе облачных сервисов.
| Задача | Локально |
|---|---|
| Короткая фоновая подложка без вокала | Получается приемлемо |
| Звуковой эффект по описанию | Получается |
| Полноценный трек со структурой | Слабо: разваливается через десятки секунд |
| Вокал | Плохо |
| Конкретный жанр «как у...» | Приблизительно |
У музыки структура на нескольких масштабах одновременно: тембр на миллисекундах, ритм на секундах, форма произведения на минутах. Всё это должно быть согласовано. Плюс размеченных данных на порядки меньше, а правовая ситуация вокруг обучения на музыке сложнее, чем вокруг изображений. Отсюда отставание.
Практический вывод: для фоновой подложки под ролик — можно пробовать. Для чего-то серьёзного — библиотеки готовой музыки пока надёжнее.
Здесь противоположная картина — зрелая технология, которая делает то, что ещё недавно казалось невозможным: из готовой записи выделить отдельно вокал, барабаны, бас, остальное.
| Задача | Польза для вас |
|---|---|
| Вытащить чистый голос из ролика с музыкой | Перемонтировать, переозвучить, сделать субтитры точнее |
| Убрать музыку из записи интервью | Улучшить разборчивость перед распознаванием |
| Отделить шум помещения | Спасти запись, сделанную в плохих условиях |
| Получить минус из готового трека | Фоновая подложка без вокала |
Отделить голос от фона, и уже чистый голос подать на распознавание из главы 19. На записях с музыкой или шумом улицы точность вырастает ощутимо — это самая простая оптимизация всего процесса.
Здесь книга подходит к вашей основной области с неожиданной стороны. Задача: по звуку определить, что происходит. Технически это ровно классификация спектрограмм, то есть задача про картинки из главы 03.
| Применение | Что распознаётся | Реалистичность |
|---|---|---|
| Диагностика механики | Изношенный подшипник, разбалансировка, задевание | Работает. Признаки в спектре устойчивы |
| Диагностика электроники | Писк дросселя, свист трансформатора, гул при перегрузке | Работает для явных случаев |
| Контроль состояния | «Звучит не так, как обычно» — обнаружение аномалии | Самое надёжное: не нужны примеры поломок |
| Кодовое слово | Устройство просыпается на одно слово | Работает даже на микроконтроллере — глава 23 |
| Бытовые звуки | Стук, сигнал, разбитое стекло | Готовые модели существуют |
Обычная классификация требует примеров каждой поломки, а их взять негде. Обнаружение аномалии устроено иначе: модель учится только на звуке исправного устройства и сообщает, когда услышанное на него не похоже. Что именно сломалось, она не скажет — но скажет, что что-то изменилось. Данных нужно на порядок меньше, и собрать их легко.
Записали исправные устройства утром, неисправные вечером — модель выучит фоновый шум времени суток. Записали на разные микрофоны — выучит микрофон. Меняйте всё, кроме того, что классифицируете. В звуке эта ловушка встречается чаще, чем в изображениях, потому что условия записи незаметны на слух.
| Ресурс | Сколько |
|---|---|
| Записей на класс | От нескольких десятков |
| Видеопамяти | Немного — спектрограммы маленькие |
| Времени на обучение | Минуты |
| Микрофон | Обычный, но одинаковый для всех записей |
По сравнению со всем остальным в книге это очень дёшево — и это самый прямой способ попробовать обучить свою модель под настоящую задачу, а не учебную.
От звука к изображению: как научить компьютер находить нужное на фотографии — и как это применить к плате.
Четыре разные задачи, которые часто путают, и практический путь к своему детектору — например, находить компоненты на фотографии платы.
| Задача | Вопрос | Ответ модели | Разметка |
|---|---|---|---|
| Классификация | Что на картинке? | Один класс | Метка на картинку. Дёшево |
| Детекция | Где и что? | Рамки с классами | Рамки вручную. Дорого |
| Сегментация | Какие точно пиксели? | Точный контур | Обводка. Очень дорого |
| Поиск похожих | Что ещё такое же? | Ближайшие по вектору | Не нужна вообще |
Люди обычно берутся сразу за детекцию, потому что она эффектнее. Начните с классификации: она требует на порядок меньше разметки и часто решает задачу. «Эта плата исправна или нет» — классификация. «Обведи все конденсаторы» — детекция, и разметка займёт больше времени, чем всё остальное вместе.
Самый недооценённый вариант. Берёте готовую сеть, прогоняете все свои фотографии и получаете вектор для каждой (глава 06). Дальше — поиск ближайших, ровно как в главе 07.
Архив фотографий плат, которые вы ремонтировали. Новая плата — находите визуально похожие из архива и смотрите, что там было. Это работает уже сегодня, без единой размеченной картинки, и по полезности часто обгоняет детектор, который вы неделю размечали.
Обучать сеть распознавать изображения с нуля — задача на тысячи картинок минимум. Но этого не требуется.
Берётся сеть, обученная на миллионах разных изображений. Первые её слои уже умеют то, о чём говорилось в главе 03: границы, линии, формы, текстуры. Это универсально. Нужно лишь заменить последний слой и дообучить его под ваши классы.
| Подход | Картинок на класс | Время |
|---|---|---|
| С нуля | Тысячи | Дни |
| Дообучить последний слой | 30–100 | Минуты |
| Дообучить несколько последних | 100–300 | Десятки минут |
Оставить выученное общее, доучить только специфическое. Главы 13 и 17 — про то же самое для текста и картинок. Это, пожалуй, главный практический принцип всей современной работы с моделями: почти никогда не учите с нуля.
| Этап | Что делать | Сколько времени |
|---|---|---|
| 1. Снять данные | Сотни фотографий в разных условиях | Часы |
| 2. Разметить | Обвести рамками каждый объект | Основная работа. Дни |
| 3. Обучить | Взять готовую архитектуру, дообучить | Десятки минут на вашей карте |
| 4. Проверить | На отложенной части, глава 05 | Быстро |
| 5. Доснять, где ошибается | Добавить сложные случаи, переобучить | Повторять |
Это главное, что стоит знать перед началом. Обучение занимает полчаса, разметка — дни. Существуют инструменты, которые предлагают рамки автоматически, а вы только исправляете — они экономят много времени, и найти такой стоит до начала, а не после первой сотни картинок вручную.
У популярных готовых моделей детекции лицензии разные, и некоторые требуют либо открывать исходный код вашего продукта, либо покупать коммерческую лицензию. Для личных экспериментов это неважно, для чего-то, что вы планируете продавать, — важно очень. Проверяйте до того, как построите на модели продукт.
| Задача | Реалистичность | Комментарий |
|---|---|---|
| Найти похожую плату в своём архиве | Отлично | Без обучения. Начните с этого |
| Отличить вздутый конденсатор от нормального | Хорошо | Признак визуально яркий |
| Найти явный прогар или следы перегрева | Хорошо | Заметный контраст |
| Найти все конденсаторы на плате | Средне | Детекция, нужна разметка |
| Прочитать маркировку мелких SMD | Плохо | Нужен макрообъектив и отдельная модель распознавания текста |
| Определить неисправность по внешнему виду | Плохо | Большинство неисправностей не видно |
Пробитый транзистор, деградировавший конденсатор, ушедший номинал резистора — внешне не отличаются от исправных. Никакая модель зрения этого не увидит, потому что информации нет в изображении. Зрение хорошо ловит видимые дефекты; для остального нужны измерения — а вот тут возвращается диагностика по звуку из главы 21.
Последний пункт — тот самый волк на снегу. Он повторяется в этой книге трижды, потому что именно он губит больше всего проектов.
Из всей книги — самое близкое к вашим самоделкам: нейросеть, работающая на микроконтроллере за несколько долларов.
Модель на несколько десятков килобайт, работающая на копеечном микроконтроллере без интернета и без облака. Здесь сходятся все ваши интересы сразу.
Всё предыдущее требовало видеокарты. Здесь наоборот: модель ужимается до десятков килобайт и работает на микроконтроллере с сотнями килобайт памяти, питаясь от батарейки.
| Модель на ПК | На микроконтроллере | |
|---|---|---|
| Размер | Гигабайты | Десятки килобайт |
| Память | Гигабайты | Сотни килобайт |
| Питание | Десятки и сотни ватт | Милливатты |
| Автономность | Нет | Месяцы от батарейки |
| Задачи | Любые | Одна конкретная |
| Цена | Тысячи | Единицы долларов |
| Задача | Датчик | Реалистичность |
|---|---|---|
| Кодовое слово | Микрофон | Классика жанра. Работает надёжно |
| Аномалия в вибрации | Акселерометр | Отлично. Подшипники, дисбаланс — глава 21 |
| Аномалия в звуке | Микрофон | Отлично |
| Распознавание жестов | Акселерометр, гироскоп | Работает |
| Есть ли человек | Камера | Работает на маленьких картинках |
| Классификация по датчикам | Температура, ток, давление | Работает хорошо |
| Распознавание речи | Микрофон | Нет. Только отдельные команды |
| Что-либо с языком | — | Нет |
Датчик состояния механизма. Акселерометр на корпусе, модель обучена на вибрации исправного устройства, и она зажигает светодиод, когда вибрация перестала быть обычной. Не требует облака, интернета и обслуживания. Обнаружение аномалии из главы 21, только целиком внутри копеечной железки — и это соединяет всю книгу с вашей мастерской.
| Приём | Что даёт |
|---|---|
| Целочисленная арифметика | Вместо дробных чисел — восьмибитные целые. Вчетверо меньше и намного быстрее: у микроконтроллеров часто нет блока дробной арифметики |
| Отсечение лишнего | Удалить веса, близкие к нулю. Их всегда много |
| Обучение маленькой по большой | Крупная модель «учит» маленькую повторять свои ответы. Маленькая получается лучше, чем при обучении с нуля |
| Простая архитектура | Никаких трансформеров — несколько слоёв из главы 03 |
| Признаки вместо сырых данных | Посчитать спектр на самом контроллере, а в сеть подать уже его. Резко упрощает задачу |
Не пытайтесь подать в крошечную сеть сырой сигнал с датчика. Посчитайте спектр, статистику, максимумы — то, что вы и так умеете делать в схемотехнике, — и подайте десяток осмысленных чисел. Сеть тогда нужна совсем маленькая. В этой области ручная подготовка признаков не устарела, в отличие от больших моделей.
| Класс | Что умеет | Замечание |
|---|---|---|
| Простые 32-битные контроллеры | Вибрация, датчики, простые звуковые задачи | Самый дешёвый вход |
| Контроллеры с ускорителем ИИ | Звук, маленькие изображения | Появляются в популярных семействах, включая те, что вы уже используете |
| Одноплатные компьютеры | Полноценное зрение, распознавание речи | Уже не микроконтроллер: нужна операционная система и питание посерьёзнее |
| Отдельные ускорители | Зрение в реальном времени | Дороже, зато быстро |
Ограничение почти всегда — оперативная память, а не скорость процессора. Модель, буфер входных данных и промежуточные результаты должны поместиться одновременно. Выбирая контроллер под такую задачу, смотрите на объём памяти в первую очередь.
Существуют сервисы, которые проводят через весь путь — от сбора данных с платы до готовой прошивки — и берут на себя подготовку признаков и преобразование модели. Для первого проекта это резко снижает порог: вы занимаетесь задачей, а не инструментами. Бесплатные тарифы для личных проектов обычно есть.
| Проблема | Причина | Решение |
|---|---|---|
| На компьютере работает, на плате нет | Другой датчик, другая частота опроса, другое крепление | Собирать данные тем же железом в том же положении |
| Не помещается в память | Модель велика или буфер большой | Меньше слоёв, короче окно, сильнее сжатие |
| Ложные срабатывания | Мало разнообразия в «нормальных» данных | Записать нормальное в разное время и в разных условиях |
| Сильно село качество после сжатия | Целочисленный вид требует калибровки | Проверять качество после преобразования, а не до |
| Работает, пока держишь рукой | Изменилась передача вибрации | Крепить так же, как в изделии, с самого начала |
Обратно к большим моделям — и к тому, как в одной модели соединяются текст, изображение и звук.
Как картинка попадает внутрь языковой модели, что она с ней реально делает и где заканчивается польза от «покажи фото, и он разберётся».
Языковая модель работает с векторами (глава 06) и внимание ей всё равно, откуда они взялись (глава 08). Значит, если научиться превращать изображение в такие же векторы, модель сможет «читать» картинку теми же механизмами.
изображение ↓ зрительный кодировщик (сеть из глав 03 и 22) векторы кусочков изображения ↓ проектор — маленькая сеть-переходник векторы в том же пространстве, что слова ↓ [вектор картинки][вектор картинки]...[«что здесь сломано?»] ↓ обычная языковая модель — и не различает, что откуда
Не пришлось изобретать новую архитектуру. Взяли готовый зрительный кодировщик, готовую языковую модель, и обучили между ними маленький переходник — чтобы он выдавал векторы в понятном языковой модели виде. Дальше всё работает само.
| Задача | Насколько хорошо | Комментарий |
|---|---|---|
| Описать, что на фотографии | Отлично | Общее описание сцены |
| Прочитать текст на изображении | Хорошо | Крупный и чёткий — уверенно, мелкий — хуже |
| Разобрать скриншот интерфейса | Хорошо | Очень практично для работы за компьютером |
| Перенести таблицу с фото в текст | Хорошо | Проверять числа обязательно |
| Объяснить график или схему | Средне | Общий смысл — да, точные значения — нет |
| Считать объекты | Плохо | Та же проблема, что при генерации из главы 14 |
| Точные пространственные отношения | Средне | «Слева от» путает |
| Мелкие детали, маркировка | Плохо | Изображение сжимается в векторы, детали теряются |
Изображение сжимается в ограниченное число векторов. Фотография 4000×3000 превращается в несколько сотен векторов — информации теряется колоссально. Поэтому модель прекрасно скажет «это печатная плата с электролитическими конденсаторами» и не прочитает мелкую маркировку на них. Не потому что «не умеет читать», а потому что этих пикселей до неё физически не дошло.
| Что делать | Почему |
|---|---|
| Кадрируйте перед отправкой | Снимок одного конденсатора крупно даст несравнимо больше, чем вся плата целиком |
| Задавайте конкретный вопрос | «Что тут?» — общее описание. «Есть ли вздутие на верхнем торце этого конденсатора?» — полезный ответ |
| Не доверяйте числам с фото | Показания приборов и маркировку проверяйте глазами |
| Несколько снимков вместо одного | Общий план плюс крупные планы деталей |
| Хороший свет | Блики на пайке модель сбивают так же, как человека |
Разбор скриншотов. Непонятное окно с ошибкой, незнакомая настройка, сообщение на языке, которого вы не знаете — снимок экрана и вопрос работают отлично, потому что текст там крупный и чёткий. Это, пожалуй, самое надёжное применение мультимодальных моделей в повседневной работе.
| Замечание | |
|---|---|
| Размер | Такие модели тяжелее обычных того же класса — добавляется зрительная часть |
| На 16 ГБ | Модели среднего размера идут; крупные — в сжатом виде |
| Скорость | Обработка картинки заметно медленнее обработки текста |
| Качество локальных | Заметно уступает лучшим облачным, особенно на мелких деталях |
В чистом тексте локальная модель на 14B вполне полезна. В работе с изображениями отрыв крупных облачных моделей ощутимее. Если задача действительно важна, а данные не секретные — это как раз случай, когда стоит вспомнить про облако. Если на фото ваши рабочие документы — только локально, и с поправкой на качество.
Логика развития понятна из устройства: раз любой сигнал можно превратить в векторы, ничто не мешает добавить в одну модель текст, изображения, звук и видео одновременно. Это уже происходит.
«Понимает видео» обычно означает: разбирает отдельные кадры плюс расшифровывает звук. Настоящего понимания протяжённого действия во времени там существенно меньше, чем кажется по демонстрациям. Оценивайте по конкретной задаче, а не по общему описанию возможностей.
Последний блок. Сначала — как честно понять, стало лучше или вам показалось.
«Вроде получше» — не результат. Почему рейтингам моделей нельзя верить, как собрать свою проверку за час и какие ловушки ждут по дороге.
Вы будете постоянно выбирать: эта модель или та, эти настройки или другие, до дообучения или после. Без способа честно сравнить вы будете принимать решения по впечатлению — а впечатление обманывает систематически и в предсказуемую сторону.
| Проблема | Суть |
|---|---|
| Утечка тестов в обучение | Тестовые задания опубликованы в интернете, а модели учатся на интернете. Модель могла видеть ответы |
| Оптимизация под тест | Когда метрика становится целью, её начинают улучшать напрямую — часто в ущерб реальной пользе |
| Не ваши задачи | Тест на школьной математике ничего не говорит о ваших текстах про электронику |
| Не ваш язык | Большинство тестов на английском |
| Не ваше сжатие | Рейтинг для полной модели, а вы запускаете сжатую в четыре бита |
Как фильтром, а не решением. Отобрать три-четыре кандидата подходящего размера — годится. Выбрать из них лучшую для себя — только своей проверкой. Разница между 1-м и 5-м местом в рейтинге для вашей задачи может оказаться нулевой или обратной.
Час на составление списка кажется лишним, пока вы в четвёртый раз не пытаетесь вспомнить, была ли старая модель лучше. С готовым списком ответ занимает десять минут и не зависит от настроения.
| Приём | Зачем |
|---|---|
| Вслепую | Перемешайте ответы двух моделей и не смотрите, где чей, пока не оценили |
| Попарно | «Какой из двух лучше» надёжнее, чем «оцени по десятибалльной» |
| Фиксируйте всё остальное | Температура, запрос, seed для картинок. Меняйте одно |
| Несколько прогонов | При ненулевой температуре ответ каждый раз разный |
| Записывайте, а не запоминайте | Иначе сработает «запоминается яркое» |
| Показатель | Почему важен |
|---|---|
| Доля правильных | Основное |
| Доля выдуманного | Модель с 90% правильных и 10% уверенных выдумок хуже, чем с 80% правильных и 20% честных «не знаю» |
| Честные отказы | Умение сказать «в тексте нет ответа» — отдельная ценная способность. Глава 11 |
| Соблюдение формата | Для агентов и автоматизации критично |
| Скорость | Модель вдвое умнее и впятеро медленнее часто проигрывает на практике |
| Стабильность | Одинаковый ли результат при повторе |
Обязательно включите в список задачи, на которые правильный ответ — «не знаю». Вопросы о несуществующих деталях, о том, чего нет в предоставленном тексте, о событиях после обучения. Модель, которая на них честно отказывается, полезнее той, что набрала балл выше, но уверенно врёт. Этот тест почти никогда не делают.
Соблазнительная идея: пусть сильная модель оценивает ответы слабой. Экономит время и работает — с оговорками, которые стоит знать.
| Искажение | В чём проявляется |
|---|---|
| Предпочитает длинное | Длинный ответ получает оценку выше при равном содержании |
| Предпочитает свой стиль | Оценивает выше ответы, похожие на собственные |
| Влияние порядка | Первый из двух вариантов систематически выигрывает |
| Не ловит фактические ошибки | Если сама их не знает — пропустит |
Минимум, который стоит делать: предъявлять пары в обоих порядках и сравнивать. Если оценка меняется от перестановки — она бесполезна.
| Область | Как проверять |
|---|---|
| Изображения | Один набор запросов, один seed, генерация до и после — и смотреть парами |
| LoRA стиля | Обязательно на объектах, которых не было в обучении — глава 17 |
| Распознавание речи | Взять записи с известным текстом и считать долю ошибок в словах |
| Классификация | Отложенная часть данных, глава 05. И смотреть не только на долю верных, но и на то, какие ошибки |
Если из ста плат исправны девяносто, то модель, всегда отвечающая «исправна», покажет 90% точности и будет абсолютно бесполезна. Смотрите на ошибки по типам: сколько исправных названо сломанными и, главное, сколько сломанных пропущено. Цена у этих двух ошибок совершенно разная.
Последняя глава: как превратить всё это в работающий инструмент под вашу задачу.
Общая схема почти любого инструмента на моделях, пять готовых проектов под ваши задачи — и честный список того, где ИИ не нужен.
ИСТОЧНИК → откуда берутся данные
(папка, запись, камера, микрофон, ваши книги)
↓
ПОДГОТОВКА → привести к виду, который принимает модель
(нарезка, спектрограмма, кадрирование)
↓
МОДЕЛЬ → одна операция
(эмбеддинг, распознавание, генерация, классификация)
↓
ПРОВЕРКА → отсечь очевидно плохое, пометить сомнительное
↓
РЕЗУЛЬТАТ → файл, база, папка, уведомление
↓
ЖУРНАЛ → что сделано, с чем, когда
Проверка и журнал. Без первого в результат попадают выдумки из главы 11. Без второго через месяц невозможно понять, откуда взялся странный файл и какими настройками он получен. Оба добавляются за полчаса и экономят дни.
| Элемент | Что взять |
|---|---|
| Источник | HTML-файлы ваших учебников |
| Подготовка | Нарезка по главам и разделам, с заголовком в тексте куска |
| Модель | Эмбеддинги, глава 07 |
| Проверка | Порог близости: ниже — «не найдено» |
| Результат | Ссылки на главы с цитатами |
Почему первым: сложность низкая, польза сразу, и вы точно можете оценить качество — вы знаете свои книги.
| Элемент | Что взять |
|---|---|
| Источник | Папка с видео |
| Подготовка | Извлечь звук, отделить голос от фона (глава 21) |
| Модель | Распознавание речи, глава 19 |
| Проверка | Просмотреть начало и конец, найти повторы |
| Результат | Файл субтитров плюс текст для будущей статьи |
Почему это стоит сделать: вероятно, наибольшая экономия времени из всего, что есть в книге.
Наговорить главу голосом, расшифровать проектом 2, и прогнать через языковую модель с задачей: расставить абзацы, исправить термины, убрать слова-паразиты, не меняя содержания. Последнее условие обязательно и требует проверки — модель склонна «улучшать».
Обучить LoRA на стиле (глава 17), сделать заготовку схемы в ComfyUI с управлением по наброску (глава 16), и дальше получать иллюстрации для всех книг с одинаковым видом. Сложность выше, зато результат переиспользуется годами.
Акселерометр, обнаружение аномалии, микроконтроллер (главы 21 и 23). Самый «ваш» проект из всех: соединяет электронику, самоделки и машинное обучение, и не требует ни видеокарты, ни интернета.
| Проект | Сложность | Польза | Порядок |
|---|---|---|---|
| Субтитры | Низкая | Очень высокая | Первый |
| Поиск по книгам | Средняя | Высокая | Второй |
| Оформление расшифровок | Низкая | Высокая | Третий |
| Датчик состояния | Средняя | Интересная | Когда захочется железа |
| Иллюстрации в стиле | Высокая | Долгоиграющая | Последний |
| Что | Насколько быстро устаревает |
|---|---|
| Механизмы из глав 01–09 | Не устаревают. Основа не меняется с 2017 года |
| Принципы работы с данными | Не устаревают |
| Понимание ограничений | Не устаревает |
| Названия моделей | Месяцы |
| Команды и инструменты | Месяцы |
| Требования к памяти | Медленно снижаются |
Не читать новости каждый день. Раз в два-три месяца проверять одно: не появилось ли чего-то лучше в моей весовой категории — то есть в 16 ГБ видеопамяти. И прогонять кандидата по своему списку из главы 25. Всё остальное — шум, который вас не касается.
Всё, что вы прочитали, собрано из трёх операций над числами, одного приёма подбора весов
и одной идеи о том, как элементам смотреть друг на друга. Ничего мистического внутри нет
— и именно поэтому вы можете понимать, где этому доверять, а где нет.
Вы всю жизнь разбираетесь, как устроены вещи, и чините то, что сломалось. Эта штука
устроена не сложнее усилителя — просто деталей больше, и номиналы подобраны не вами.
Дальше всё как обычно: взять схему, собрать, померить, понять, где не сходится.
Бесплатная книга · tariel.ge · версии инструментов и команды проверяйте в документации проектов