Технологии искусственного интеллекта: от Deep Learning до LLM-агентов

Курс систематизирует теорию глубокого обучения и дает практические навыки создания ИИ-решений. Вы изучите архитектуры CNN и RNN [techfuture.dev], освоите компьютерное зрение и OCR, а также погрузитесь в работу с LLM и трансформерами [deepschool.ru]. Программа включает методы адаптации моделей (LoRA), технологии RAG [vc.ru] и создание агентных систем с локальным развертыванием [practicum.yandex.ru].

1. Основы Deep Learning: от нейронов до CNN и RNN

Основы Deep Learning: от нейронов до CNN и RNN

Глубокое обучение (Deep Learning) — это не магия, а математическая статистика, умноженная на вычислительную мощность. Если классическое машинное обучение требует от инженера ручного выделения признаков (например, для определения стоимости квартиры вы сами создаете колонки «площадь», «район», «этаж»), то Deep Learning (DL) автоматизирует этот процесс. Нейросеть самостоятельно находит сложные зависимости в «сырых» данных: пикселях изображения, звуковых волнах или последовательностях текста.

В этой статье мы разберем архитектурные блоки, из которых строятся современные ИИ-системы: от простейшего перцептрона до сверточных (CNN) и рекуррентных (RNN) сетей.

Искусственный нейрон: атом глубокого обучения

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

Анатомия нейрона

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

Математически это записывается так:

где — выходное значение нейрона, — функция активации (вносит нелинейность), — количество входов, — вес -го входа (определяет силу влияния), — значение -го входа, — смещение (bias), позволяющее сдвигать функцию активации.

Пример на числах: Представьте, что нейрон решает, стоит ли покупать квартиру.

  • Вход (цена низкая): 1 (да). Вес : 5 (очень важно).
  • Вход (есть метро): 0 (нет). Вес : 2 (средне важно).
  • Смещение : -3 (порог требовательности).
  • Расчет до активации: . Если функция активации просто проверяет «больше 0», то нейрон «выстрелит» (активируется), и мы купим квартиру.

    Согласно education.yandex.ru, нейронные сети представляют собой последовательность таких дифференцируемых преобразований, где параметры настраиваются одновременно.

    Зачем нужна нелинейность?

    Если бы мы просто суммировали входы, то даже сеть из 100 слоев была бы эквивалентна одному линейному уравнению. Функции активации, такие как ReLU (Rectified Linear Unit), позволяют сети учить сложные кривые и формы.

    Формула ReLU:

    где — выходное значение функции, — входное значение. Если положительный, он проходит без изменений; если отрицательный — становится нулем.

    Полносвязные сети (MLP) и процесс обучения

    Когда мы объединяем нейроны в слои, где каждый нейрон предыдущего слоя связан с каждым нейроном следующего, мы получаем полносвязную сеть (Dense Network или MLP).

    Однако просто создать структуру недостаточно. Сеть нужно обучить. Процесс обучения сводится к минимизации ошибки.

  • Прямой проход (Forward Pass): Данные проходят через сеть, получается предсказание.
  • Функция потерь (Loss Function): Мы сравниваем предсказание с реальностью. Например, для регрессии часто используют MSE (среднеквадратичную ошибку):
  • где — значение ошибки, — количество примеров, — реальное значение, — предсказанное значение.
  • Обратное распространение ошибки (Backpropagation): Мы вычисляем градиенты — то есть понимаем, в какую сторону и насколько нужно изменить каждый вес , чтобы ошибка уменьшилась.
  • Обновление весов: Оптимизатор (например, SGD или Adam) корректирует веса.
  • По данным timeweb.cloud, глубокое обучение позволяет компьютерам не просто выполнять команды, а самостоятельно учиться на тысячах примеров, выявляя скрытые закономерности без явного программирования правил.

    Сверточные нейронные сети (CNN): зрение ИИ

    Полносвязные сети плохо работают с изображениями. Представьте картинку 1000x1000 пикселей. Если подать её на вход полносвязному слою с 1000 нейронов, количество весов будет миллиард. Это вычислительно невозможно и ведет к переобучению.

    Решением стали сверточные нейронные сети (CNN). Они используют идею локального восприятия: мы ищем признаки (линии, углы, текстуры) не сразу на всем изображении, а сканируя его небольшим «окном».

    Принцип работы свертки

    Основной элемент CNN — это сверточный слой (Convolutional Layer). По изображению скользит фильтр (ядро/kernel) небольшого размера (например, 3x3), выполняя покомпонентное умножение.

    Операция свертки для одного пикселя выхода:

    где — значение пикселя на карте признаков, — входное изображение, — ядро свертки (фильтр), и — индексы смещения внутри ядра.

    Если фильтр настроен на поиск вертикальной линии, он даст большое число там, где на изображении есть вертикальная граница, и ноль там, где фон однородный.

    Структура CNN

    Типичная архитектура, согласно gimal-ai.ru, состоит из чередования слоев:

  • Convolution (Свертка): Выделяет признаки (карты активации).
  • ReLU: Убирает отрицательные значения.
  • Pooling (Подвыборка): Уменьшает размерность карты признаков, оставляя только самое важное. Самый популярный метод — Max Pooling (выбор максимального значения в окне 2x2).
  • Flatten & Dense: В конце полученные признаки вытягиваются в вектор и подаются на классический полносвязный слой для классификации.
  • > Сверточные нейросети стали первыми архитектурами, научившими искусственный интеллект видеть. > > vc.ru

    Практический пример: Если вы строите систему OCR (распознавания текста), первые слои CNN найдут линии и кривые, средние слои соберут из них части букв, а последние слои распознают целые символы.

    Рекуррентные нейронные сети (RNN): память и последовательности

    Если CNN хороши для статики (фото), то для текста, речи или временных рядов они подходят хуже. В предложении «Я купил замок, чтобы повесить его на дверь» слово «замок» имеет смысл только в контексте конца фразы. Обычные сети не имеют памяти о предыдущих словах.

    RNN (Recurrent Neural Networks) решают эту проблему, передавая состояние (hidden state) от одного шага к следующему. Это похоже на чтение книги: вы понимаете текущее слово, помня содержание предыдущей страницы.

    Математика памяти

    В RNN выход зависит не только от текущего входа, но и от предыдущего скрытого состояния:

    где — скрытое состояние в момент времени , — функция активации (гиперболический тангенс), — веса для входных данных, — входной вектор в момент , — веса для предыдущего скрытого состояния, — скрытое состояние в предыдущий момент времени, — смещение.

    Проблема и эволюция

    Базовые RNN имеют серьезный недостаток — затухание градиента. При обучении на длинных текстах сеть «забывает», что было в начале абзаца. Как отмечает habr.com, RNN разработаны для задач, где следующая позиция зависит от предыдущего состояния, но стандартные сети с трудом справляются с длинными зависимостями.

    Для решения этой проблемы были созданы усложненные архитектуры: * LSTM (Long Short-Term Memory): Имеет механизм «ворот» (gates), которые решают, какую информацию забыть, а какую сохранить. * GRU (Gated Recurrent Unit): Упрощенная версия LSTM, работающая быстрее.

    Сегодня в задачах обработки текста (NLP) RNN практически вытеснены Трансформерами (о которых мы поговорим в следующих статьях), но понимание рекуррентности критически важно для работы с временными рядами и аудио.

    Практика: выбор архитектуры под задачу

    Чтобы научиться создавать модели, нужно уметь выбирать инструмент под тип данных. Рассмотрим таблицу принятия решений:

    | Тип данных | Пример задачи | Рекомендуемая архитектура | Почему? | | :--- | :--- | :--- | :--- | | Табличные данные | Оценка кредитоспособности, цена жилья | MLP (Dense) | Нет пространственной или временной структуры, важны комбинации признаков. | | Изображения | Распознавание дефектов на производстве, OCR | CNN (ResNet, EfficientNet) | Важна инвариантность к сдвигу (объект может быть в любом месте) и иерархия признаков. | | Временные ряды | Прогноз нагрузки на сервер, погода | RNN (LSTM/GRU) | Важна последовательность событий и зависимость от прошлого. | | Текст | Чат-боты, перевод, суммаризация | Transformers (BERT, GPT) | Лучше всего улавливают далекие контекстные связи (об этом в следующей статье). |

    Итоги

  • Нейрон — это линейный классификатор с нелинейной функцией активации. Обучение сети — это настройка весов для минимизации функции потерь.
  • CNN (Сверточные сети) идеальны для обработки изображений. Они используют фильтры для автоматического выделения визуальных признаков и пулинг для сжатия информации.
  • RNN (Рекуррентные сети) созданы для последовательностей. Они имеют «память» в виде скрытого состояния, что позволяет учитывать контекст (прошлое) при принятии решений.
  • Выбор архитектуры зависит от структуры данных: сетка пикселей требует сверток, последовательность событий — рекуррентности или внимания.
  • 2. Компьютерное зрение и технологии OCR

    Компьютерное зрение и технологии OCR

    В предыдущей статье мы разобрали фундамент глубокого обучения: как нейроны складываются в слои, а слои — в архитектуры CNN и RNN. Теперь пришло время применить эти знания к одной из самых востребованных задач в индустрии — компьютерному зрению (Computer Vision, CV), а конкретно — к оптическому распознаванию символов (OCR).

    OCR (Optical Character Recognition) — это технология, которая превращает изображения текста (фото документов, сканы чеков, номера автомобилей) в машиночитаемый формат. Если раньше OCR был набором жестких правил и шаблонов, то сегодня это область, где доминируют глубокие нейросети и мультимодальные LLM.

    Эволюция: от шаблонов к Deep Learning

    Классический OCR (например, ранние версии Tesseract) работал по принципу сопоставления с образцом: система пыталась наложить букву «А» на пиксели и проверить совпадение. Это работало на идеальных сканах, но ломалось на фото с телефона, где есть тени, наклоны или рукописный ввод.

    Современный OCR — это End-to-End процесс, основанный на глубоком обучении. Согласно blog.deepschool.ru, глобально задачу можно разделить на два ключевых этапа:

  • Text Detection (Детекция): Найти, где находится текст на картинке (выделить bounding box — ограничивающую рамку).
  • Text Recognition (Распознавание): Понять, что именно написано внутри этой рамки.
  • Архитектура современного OCR-пайплайна

    Разберем, как работают эти этапы на уровне нейросетевых архитектур.

    1. Детекция текста (Text Detection)

    Задача детекции похожа на поиск объектов (как YOLO ищет котов), но текст имеет специфику: он может быть очень длинным, изогнутым и плотным. Одной из самых популярных архитектур здесь является DBNet (Differentiable Binarization).

    Вместо того чтобы просто предсказывать рамки, сеть предсказывает карту вероятности того, что пиксель является частью текста, а затем использует умный алгоритм бинаризации (превращения в черно-белую маску), который встроен прямо в процесс обучения.

    2. Распознавание текста (Text Recognition): CRNN

    Когда мы вырезали кусочек изображения с текстом, нам нужно превратить его в строку. Здесь на сцену выходит гибридная архитектура CRNN (Convolutional Recurrent Neural Network). Она объединяет то, что мы изучили в прошлой лекции:

  • CNN (Сверточные слои): Изображение подается на вход сверточной сети (например, ResNet). Она извлекает визуальные признаки (линии, закругления), отбрасывая лишний шум.
  • RNN (Рекуррентные слои): Признаки с CNN вытягиваются в последовательность и подаются в двунаправленную LSTM (BiLSTM). RNN учитывает контекст: например, если мы видим вертикальную палку, а перед ней была буква «H», то это скорее всего «I» или «l».
  • #### Магия CTC Loss

    Главная проблема обучения OCR — мы не знаем, какому именно пикселю соответствует какая буква. У нас есть картинка слова «CAT» и текст «CAT», но мы не размечаем, что буква «C» занимает пиксели с 10 по 25.

    Для решения этой проблемы используется функция потерь CTC (Connectionist Temporal Classification). Она позволяет сети предсказывать последовательность символов без явного выравнивания.

    Математически вероятность получить целевую последовательность при входных данных рассчитывается как сумма вероятностей всех возможных путей , которые схлопываются в :

    где — вероятность правильного текста при данном изображении, — конкретный путь (последовательность предсказаний на каждом шаге времени), — множество всех путей, которые после удаления повторов и пробелов (blank-символов) превращаются в текст . Например, пути «c-a-t», «cc-aa-t» и «c-a--t» (где «-» — пустой символ) все превращаются в «cat».

    Новая эра: Transformer и LLM в OCR

    С появлением архитектуры Трансформер (которую мы детально разберем в следующих статьях), подходы к OCR изменились. Модели вроде TrOCR (Transformer OCR) отказываются от CNN и RNN, используя механизм внимания (Self-Attention) для прямой конвертации патчей изображения в текст.

    Более того, на сцену выходят мультимодальные LLM (Large Language Models). По данным habr.com, компания М.Видео-Эльдорадо экспериментировала с использованием GPT-4o-mini для распознавания сложных счетов за коммунальные услуги. Обычный OCR выдавал результат лишь в 30% случаев из-за разного форматирования, в то время как LLM смогла не просто прочитать текст, но и сразу структурировать его в JSON, понимая контекст (где сумма, а где дата).

    > Современные системы используют не просто распознавание текста, а модели с глубоким обучением, обработкой естественного языка (NLP) и генеративными подходами. > > dbrain.io

    Когда использовать LLM, а когда CRNN?

    | Задача | Рекомендуемый подход | Почему? | | :--- | :--- | :--- | | Потоковое распознавание (паспорта, номера авто) | CRNN / DBNet (PaddleOCR, EasyOCR) | Высокая скорость, низкая стоимость, работа локально. | | Сложные документы (таблицы, рукописный текст, чеки) | Multimodal LLM (GPT-4o, Llama Vision) | Понимание структуры документа, исправление ошибок за счет контекста. |

    Практика: Оценка качества и запуск OCR

    Для разработчика важно не только запустить модель, но и оценить её качество. В OCR используются две главные метрики:

  • CER (Character Error Rate) — процент ошибок на уровне символов.
  • WER (Word Error Rate) — процент ошибок на уровне слов.
  • Формула расчета CER (расстояние Левенштейна):

    где (Substitutions) — количество замен (написано «A», распознано «O»), (Deletions) — количество пропусков, (Insertions) — количество лишних вставленных символов, — общее количество символов в эталонном тексте.

    Пример: Эталон: «MOW 12» (6 символов). Прогноз: «M0W 1» (5 символов).

  • «O» заменена на «0» ().
  • «2» потеряна ().
  • Итого ошибок: 2.
  • или .
  • Запуск локального OCR (Python)

    Для быстрого старта и внедрения в свои проекты лучше всего использовать готовые библиотеки, такие как EasyOCR или PaddleOCR. Они уже содержат предобученные модели детекции и распознавания.

    Пример использования EasyOCR для чтения текста с картинки:

    Этот код выполняет полный пайплайн: сначала находит текст, затем распознает его. Если вы хотите дообучить модель под свой шрифт (Fine-tuning), вам потребуется собрать датасет пар «картинка — текст» и использовать скрипты обучения из репозитория PaddleOCR или EasyOCR, заморозив первые слои CNN и переобучив последние слои RNN/Dense.

    Проблемы и ограничения

    Несмотря на прогресс, OCR не идеален. Согласно habr.com, основные трудности возникают при нехватке качественных данных для редких языков или специфических шрифтов. Также проблемой остаются: * Блики и геометрические искажения. * Слитный рукописный текст (курсив). * Сложная верстка (газетные колонки).

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

    Итоги

  • OCR — это двухэтапный процесс: сначала Детекция (найти текст, например, через DBNet), затем Распознавание (прочитать текст).
  • CRNN + CTC — это «золотой стандарт» классического Deep Learning в OCR. CNN видит формы букв, RNN связывает их в слова, а CTC Loss позволяет обучать модель без посимвольной разметки.
  • LLM меняют игру: для неструктурированных документов (чеки, накладные) мультимодальные модели работают лучше, так как понимают смысл, а не только символы.
  • Метрика CER — главный инструмент оценки качества. Если CER < 5%, модель считается хорошей для большинства бизнес-задач.
  • Практическое применение: для старта используйте готовые библиотеки (PaddleOCR, EasyOCR), а для сложных кейсов внедряйте RAG или LLM-парсинг.
  • 3. Архитектура LLM: Трансформеры и GPT

    Архитектура LLM: Трансформеры и GPT

    В предыдущих статьях мы рассматривали рекуррентные нейронные сети (RNN) и их продвинутые вариации LSTM. Мы выяснили, что их главный недостаток — последовательная обработка данных. Чтобы понять слово в конце длинного предложения, RNN должна «протащить» контекст через все предыдущие слова, что часто приводит к потере смысла и невозможности параллельных вычислений.

    В 2017 году произошла революция. Исследователи Google представили архитектуру Transformer в статье «Attention Is All You Need». Это изменило всё: от машинного перевода до написания кода. Сегодня мы разберем, как работают Трансформеры, что такое механизм внимания и как на этой базе строятся модели GPT.

    Почему Трансформеры победили RNN?

    Главное отличие Трансформера от RNN — отказ от рекурсии. Трансформер не читает предложение слева направо. Он видит всё предложение целиком и сразу.

    Согласно serverflow.ru, трансформеры отказались от последовательной обработки в пользу параллельного анализа всех элементов входной последовательности. Это дало два колоссальных преимущества:

  • Параллелизм: Можно задействовать тысячи ядер GPU одновременно, что позволило обучать модели на гигантских объемах данных (весь интернет).
  • Глобальный контекст: Расстояние между словами больше не имеет значения. Связь между первым и последним словом в книге улавливается так же легко, как между соседними словами.
  • Токенизация и Эмбеддинги: как машина понимает текст

    Прежде чем попасть в нейросеть, текст должен превратиться в цифры. Этот процесс называется токенизацией.

    Раньше каждому слову присваивали номер. Но слов слишком много. Современные LLM используют BPE (Byte Pair Encoding) — алгоритм, который разбивает слова на часто встречающиеся части (токены). Например, слово «learning» может быть разбито на «learn» и «ing».

    По данным vc.ru, токенизация — это алгоритм компрессии. Оптимальный словарь токенов позволяет модели не сталкиваться с «неизвестными словами», разлагая их на знакомые составляющие.

    После токенизации каждый токен превращается в эмбеддинг (embedding) — вектор из чисел (например, длиной 768 или 4096), который хранит семантический смысл слова.

    Позиционное кодирование (Positional Encoding)

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

    Механизм внимания (Self-Attention)

    Сердце Трансформера — механизм Self-Attention (самовнимание). Он позволяет каждому слову в предложении «посмотреть» на другие слова и решить, насколько они важны для понимания текущего контекста.

    Рассмотрим фразу: «Банк заблокировал карту, потому что она была скомпрометирована». Когда модель обрабатывает слово «она», механизм внимания подсказывает, что это слово связано со словом «карта», а не со словом «Банк».

    Аналогия: Картотека

    Для реализации внимания используется концепция из баз данных, состоящая из трех векторов для каждого токена:

  • Query (Q) — Запрос: То, что ищет текущий токен (например, «я местоимение, ищу существительное»).
  • Key (K) — Ключ: То, чем токен представляется (например, «я существительное женского рода»).
  • Value (V) — Значение: Смысловое содержание токена.
  • Математика внимания

    Формула Scaled Dot-Product Attention выглядит так:

    Где: * — итоговый вектор контекста. * — матрица запросов (Query). * — транспонированная матрица ключей (Key). Умножение на вычисляет схожесть (relevance score) между словами. * — размерность векторов ключей. Деление на (корень из размерности) нужно для стабилизации градиентов, чтобы числа не становились слишком большими. * — функция активации, которая превращает полученные очки в вероятности (сумма равна 1). Самые важные слова получают вес близкий к 1, неважные — к 0. * — матрица значений (Value). Мы умножаем вероятности на смыслы слов, «приглушая» неважные слова и усиливая важные.

    Числовой пример: Допустим, мы считаем внимание для слова «Банк» ().

  • Считаем скалярное произведение («Банк») с («Река») результат 0.1 (низкая связь).
  • Считаем скалярное произведение («Банк») с («Деньги») результат 0.9 (высокая связь).
  • Softmax усиливает разницу.
  • Итоговый вектор будет состоять на 90% из смысла слова «Деньги» и лишь на 10% из смысла «Река».
  • Multi-Head Attention

    Одной «головы» внимания недостаточно. Одно внимание может следить за грамматикой, другое — за смыслом, третье — за эмоциональной окраской. Поэтому в моделях используют Multi-Head Attention — несколько параллельных механизмов внимания, результаты которых потом объединяются.

    Архитектура: Энкодеры и Декодеры

    Оригинальный Трансформер состоял из двух частей: Энкодера (читает вход) и Декодера (генерирует выход). Со временем архитектуры разделились на три ветви:

  • Encoder-only (например, BERT): Видит весь текст сразу. Идеален для классификации, поиска именованных сущностей, анализа тональности. Он не умеет генерировать текст, но отлично его «понимает».
  • Decoder-only (например, GPT, Llama): Видит только прошлые токены, но не будущие. Обучен предсказывать следующее слово. Это и есть основа современных генеративных LLM.
  • Encoder-Decoder (например, T5, BART): Используется для перевода или саммаризации (сжатия текста).
  • Согласно huggingface.co, GPT-подобные модели называются авторегрессионными трансформерами, так как они предсказывают последовательность шаг за шагом.

    GPT: Generative Pre-trained Transformer

    GPT — это стек из множества слоев декодера Трансформера. Ключевая особенность GPT — Masked Self-Attention. При обучении модель не должна «подглядывать» в будущее. Когда она предсказывает 5-е слово, она может использовать внимание только к словам с 1-го по 4-е.

    Как GPT генерирует текст?

    Это вероятностный процесс. На выходе нейросети мы получаем вектор вероятностей для всех слов в словаре (например, 50 000 токенов).

    Пример: «Мама мыла...» * «раму»: 45% * «посуду»: 30% * «машину»: 5%

    Выбор конкретного слова зависит от стратегии сэмплирования (sampling): * Greedy Search: Всегда брать самый вероятный вариант (скучно, может зациклиться). * Temperature: Параметр, который делает распределение более «плоским» или «острым». Высокая температура добавляет креативности (и бреда), низкая — делает ответы точными и детерминированными.

    Практика: Запуск GPT-2 на Python

    Для работы с трансформерами стандартом индустрии является библиотека transformers от Hugging Face. Давайте запустим небольшую модель GPT-2 локально.

    Что происходит в коде:

  • Мы загружаем предобученные веса модели gpt2.
  • pipeline берет на себя токенизацию текста, прогон через слои трансформера и декодирование выходных токенов обратно в текст.
  • Модель дописывает фразу, основываясь на статистических закономерностях, усвоенных при обучении.
  • Контекстное окно

    Важнейшая характеристика LLM — размер контекстного окна. Это количество токенов, которое модель может «держать в уме» одновременно. У GPT-3 это было 2048 токенов, у GPT-4 Turbo — 128 000.

    Если диалог превышает размер окна, начало разговора просто «отрезается», и модель забывает, с чего всё началось. Механизм внимания требует квадратичных вычислительных затрат от длины последовательности, поэтому бесконечно увеличивать окно сложно.

    Итоги

  • Трансформеры заменили RNN благодаря возможности параллельной обработки данных и механизму внимания, который улавливает связи между далекими словами.
  • Self-Attention работает по принципу базы данных: Query (запрос) ищет совпадения с Key (ключом), чтобы извлечь Value (значение). Это позволяет модели понимать контекст.
  • Токенизация разбивает текст на числовые векторы. Позиционное кодирование добавляет информацию о порядке слов, так как сам Трансформер её не видит.
  • GPT — это Decoder-only архитектура, обученная предсказывать следующее слово (авторегрессия). Она не видит «будущие» слова при генерации.
  • Библиотека Transformers позволяет развернуть мощные модели в несколько строк кода, скрывая сложную математику за удобным API.
  • 4. Адаптация моделей: Fine-tuning, LoRA и RAG

    Адаптация моделей: Fine-tuning, LoRA и RAG

    В предыдущей статье мы разобрали архитектуру Трансформеров и принцип работы GPT. Мы узнали, что базовые модели (Foundation Models) обучаются на огромных массивах данных — от Википедии до GitHub. Они отлично понимают язык, умеют писать код и сочинять стихи.

    Но что, если вам нужно, чтобы нейросеть отвечала на вопросы по внутренней документации вашей компании, знала специфический медицинский жаргон или общалась в стиле конкретного персонажа? Базовая модель этого не умеет, потому что она никогда не видела ваши приватные данные.

    Здесь на сцену выходят методы адаптации. В этой статье мы разберем три главных подхода: классический Fine-tuning, эффективный LoRA и архитектуру RAG.

    1. Fine-tuning: полное дообучение

    Fine-tuning (тонкая настройка) — это процесс дообучения уже готовой модели на ваших данных. Представьте, что вы наняли выпускника филфака (базовая модель). Он отлично знает язык, но ничего не смыслит в юридических договорах вашей фирмы. Вы даете ему стопку ваших документов и заставляете учиться. Через месяц он становится экспертом именно в вашем деле.

    Согласно ai.mitup.ru, Fine-tuning позволяет адаптировать общие знания модели под специфику конкретного домена, достигая высокой точности даже на небольших датасетах.

    Как это работает технически?

  • Мы берем предобученную модель (например, BERT или Llama).
  • Размораживаем её веса (или часть весов).
  • Запускаем процесс обучения на новом датасете с маленьким Learning Rate (скоростью обучения), чтобы не «сломать» уже имеющиеся знания.
  • Проблема полного файн-тюнинга

    Главная проблема — ресурсы. Современные модели огромны. Чтобы дообучить модель на 7 миллиардов параметров (например, Llama 3 8B), вам потребуется видеокарта с объемом памяти, превышающим 24 ГБ, а для моделей уровня 70B нужны уже промышленные кластеры.

    Кроме того, существует риск катастрофического забывания (catastrophic forgetting): пока модель учит ваши юридические термины, она может забыть, как спрягать глаголы или писать код.

    2. LoRA: Эффективная адаптация (PEFT)

    Чтобы решить проблему нехватки памяти, были придуманы методы PEFT (Parameter-Efficient Fine-Tuning). Самый популярный из них — LoRA (Low-Rank Adaptation).

    Идея LoRA гениальна в своей простоте: вместо того чтобы менять все гигантские веса модели, мы замораживаем их и добавляем рядом маленькие, легкие матрицы, которые и будем обучать.

    Математика LoRA

    В нейросети веса хранятся в матрицах. Допустим, у нас есть матрица весов слоя . При полном обучении мы ищем изменение весов , чтобы получить новые веса .

    В LoRA мы представляем это изменение как произведение двух маленьких матриц и :

    Где: * — итоговая матрица весов, которая используется при предсказании. * — исходная матрица весов предобученной модели (она заморожена и не меняется). * — обучаемая матрица размера (инициализируется нулями). * — обучаемая матрица размера (инициализируется случайным шумом). * — размерность скрытого слоя модели (например, 4096). * — ранг (rank), гиперпараметр, который мы выбираем (обычно 8, 16 или 64).

    Почему это экономит память? Пример на числах

    Допустим, размерность слоя модели . Полносвязная матрица имеет размер . Количество параметров: (1 миллион).

    Если мы используем LoRA с рангом :

  • Матрица имеет размер параметров.
  • Матрица имеет размер параметров.
  • Итого обучаемых параметров: .
  • Результат: Вместо 1 миллиона параметров мы обучаем всего 16 тысяч. Это сокращение в 62.5 раза!

    По данным systems-analysis.ru), LoRA позволяет снизить требования к GPU-памяти в 3 раза и уменьшить вес сохраняемых чекпоинтов до нескольких мегабайт, так как мы сохраняем только матрицы и .

    3. RAG: Генерация с дополненной реальностью

    И Fine-tuning, и LoRA имеют общий недостаток: знания «запекаются» в веса модели. Если ваша документация обновилась сегодня утром, модель об этом не узнает, пока вы её не переобучите.

    RAG (Retrieval-Augmented Generation) решает эту проблему. Это не обучение модели, а предоставление ей «шпаргалки» прямо во время экзамена.

    Архитектура RAG

    Согласно learn.microsoft.com, процесс RAG состоит из трех этапов:

  • Retrieval (Поиск): Пользователь задает вопрос. Система ищет в вашей базе знаний самые релевантные куски текста (chunks).
  • Augmentation (Дополнение): Найденные тексты добавляются в промпт (контекст) к вопросу пользователя.
  • Generation (Генерация): LLM получает промпт вида: «Используя этот текст: [найденный текст], ответь на вопрос: [вопрос пользователя]».
  • Векторный поиск и Эмбеддинги

    Чтобы RAG работал, компьютер должен понимать смысл текста, а не просто искать по ключевым словам. Для этого используются эмбеддинги (о которых мы говорили в прошлой статье) и векторные базы данных (например, ChromaDB, FAISS, Qdrant).

    Процесс поиска математически выглядит как поиск косинусного сходства (Cosine Similarity):

    Где: * — степень похожести двух текстов (от -1 до 1). * — вектор-эмбеддинг вопроса пользователя. * — вектор-эмбеддинг документа из базы. * — скалярное произведение векторов. * и — длины (нормы) векторов.

    Чем ближе значение к 1, тем больше документ подходит под вопрос.

    Практика: LoRA vs RAG

    Давайте реализуем концептуальные примеры для обоих подходов.

    Пример 1: Подготовка LoRA с библиотекой PEFT

    Для дообучения мы будем использовать библиотеку peft от Hugging Face. Она позволяет обернуть любую модель Transformer в LoRA-адаптер.

    Обратите внимание: мы обучаем всего 0.23% от всех параметров! Это позволяет запустить обучение даже на Google Colab или домашнем ПК.

    Пример 2: Простой RAG-пайплайн

    Для RAG нам не нужно обучать нейросеть. Нам нужно написать скрипт, который «скармливает» ей данные.

    Результат промпта, который уйдет в модель: > Используй следующую информацию для ответа: > Для оформления отпуска пишите на hr@company.com > > Вопрос: Как мне уйти в отпуск?

    Модель, получив такой контекст, ответит правильно, даже если изначально она ничего не знала о вашей HR-политике.

    Что выбрать: Таблица сравнения

    Как отмечает habr.com, выбор метода зависит от задачи и доступных ресурсов.

    | Критерий | Fine-tuning (LoRA) | RAG | | :--- | :--- | :--- | | Цель | Изменить поведение или стиль модели. | Дать модели новые факты и знания. | | Актуальность данных | Знания статичны (на момент обучения). | Знания динамичны (обновил базу — обновился ответ). | | Галлюцинации | Возможны (модель может выдумать факт). | Минимальны (ответ строится строго по контексту). | | Стоимость | Требует GPU для обучения. | Требует CPU/GPU для базы данных и инференса. | | Пример | Медицинский чат-бот, говорящий на латыни. | Поиск по юридическим документам компании. |

    Итоги

  • Fine-tuning меняет веса модели, заставляя её запоминать новые паттерны. Это лучший способ научить модель новому языку, стилю речи или формату вывода (например, JSON).
  • LoRA — это оптимизированный способ дообучения. Мы не трогаем основную модель, а обучаем маленькие матрицы-адаптеры. Это экономит память в десятки раз.
  • RAG — это не обучение, а умный поиск. Мы находим нужную информацию и показываем её модели. Это идеально для работы с актуальными данными (новости, цены, документация).
  • Комбинация: В сложных системах часто используют оба метода: LoRA для того, чтобы модель научилась понимать специфический жаргон, и RAG для доступа к базе знаний.
  • 5. Агентные системы и локальный деплой ИИ

    Агентные системы и локальный деплой ИИ

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

    Чтобы ИИ стал не просто справочником, а сотрудником, нам нужны Агентные системы. А чтобы этот сотрудник работал быстро, дешево и приватно, нам понадобится Локальный деплой. В этой статье мы объединим эти две концепции.

    Часть 1: Что такое ИИ-агент?

    Если LLM (Large Language Model) — это «мозг» в банке, то Агент — это мозг, к которому приделали «руки» (инструменты) и дали инструкцию, как ими пользоваться.

    Согласно habr.com, ключевая черта, отличающая агентов от других AI-систем — это автономность. Если в обычном чат-боте человек ведет диалог, то агент самостоятельно определяет план действий для достижения цели.

    Архитектура агента

    Современный агент состоит из трех компонентов:

  • Мозг (LLM): Отвечает за рассуждения (Reasoning) и планирование.
  • Инструменты (Tools): Функции, которые модель может вызвать. Это может быть поиск в Google, калькулятор, доступ к базе данных SQL или API вашего CRM.
  • Память (Memory): Журнал действий и наблюдений, чтобы агент не ходил кругами.
  • Паттерн ReAct: Рассуждай и Действуй

    Самый популярный алгоритм работы агента называется ReAct (Reason + Act). Он работает как бесконечный цикл:

  • Thought (Мысль): Агент анализирует задачу. «Пользователь просит узнать погоду в Лондоне и умножить температуру на 2».
  • Plan (План): «Сначала мне нужно узнать погоду. Для этого у меня есть инструмент get_weather».
  • Action (Действие): Агент генерирует специальный токен или JSON для вызова функции: {"tool": "get_weather", "args": "London"}.
  • Observation (Наблюдение): Программный код выполняет функцию и возвращает результат агенту: «В Лондоне 15 градусов».
  • Thought (Мысль): «Теперь нужно умножить 15 на 2. Это 30».
  • Final Answer (Ответ): «Результат: 30».
  • > Воркфлоу — это системы, где LLM и инструменты оркестрируются через предопределённые пути в коде. Агенты — это системы, где LLM динамически направляют собственные процессы. > > habr.com

    Часть 2: Практика создания агента

    Давайте напишем простейшего агента на Python. Мы не будем использовать тяжелые фреймворки, чтобы понять суть.

    Представим, что у нас есть модель, которая умеет возвращать JSON (большинство современных моделей это умеют).

    В реальных проектах для этого используют библиотеки LangGraph, AutoGen или CrewAI, которые управляют историей диалога, обработкой ошибок и параллельным запуском нескольких агентов.

    Часть 3: Локальный деплой (Local AI)

    Зачем запускать модели у себя, если есть API OpenAI или Anthropic?

  • Приватность: Ваши данные (юридические документы, код, личная переписка) не покидают ваш сервер.
  • Стоимость: Вы платите один раз за железо, а не за каждый токен.
  • Отсутствие цензуры: Локальные модели (например, Llama 3, Mistral, Qwen) часто имеют меньше ограничений на темы, которые облачные провайдеры считают «небезопасными».
  • Согласно habr.com, локальный AI — это инструмент для тех, кто ценит суверенитет. Разработчики используют модели вроде DeepSeek Coder для написания кода без ежемесячных счетов.

    Железо и Квантование

    Главное ограничение локального запуска — видеопамять (VRAM). Модели весят много. Чтобы запустить их на потребительских картах (NVIDIA RTX 3060/4090), используют квантование.

    Квантование — это уменьшение точности весов модели. Обычно веса хранятся в формате FP16 (16 бит на число). Мы можем сжать их до 4 бит (INT4) или даже меньше. Удивительно, но модель почти не теряет в уме при сжатии до 4 бит.

    Формула для примерной оценки необходимой видеопамяти:

    где — объем видеопамяти в гигабайтах, — количество параметров модели в миллиардах (например, 8 для Llama-3-8B), — битность квантования (обычно 4, 8 или 16), — резерв под контекстное окно (обычно 1-2 ГБ). Деление на 8 происходит потому, что в 1 байте 8 бит.

    Пример: Запускаем Llama-3-8B в квантовании 4 бита (Q4).

    Значит, эту модель можно запустить даже на ноутбуке с RTX 3060 (6 ГБ VRAM).

    Форматы моделей

  • GGUF: Лучший формат для запуска на процессорах (CPU) и Apple Silicon (MacBook M1/M2/M3). Позволяет выгружать часть слоев на видеокарту.
  • AWQ / GPTQ: Форматы, оптимизированные строго под видеокарты NVIDIA. Работают быстрее, чем GGUF, но требуют GPU.
  • Safetensors: Стандартный формат весов (не квантованный), используется для дообучения.
  • Часть 4: Инструменты для запуска

    1. Ollama: Самый простой путь

    Ollama — это утилита, которая позволяет скачивать и запускать модели одной командой, подобно Docker. Она автоматически поднимает локальный сервер с API.

    Установка и запуск:

  • Скачайте с ollama.com.
  • В терминале введите: ollama run llama3.
  • Модель скачается и откроется чат.
  • Ollama предоставляет API, совместимый с OpenAI. Это значит, что вы можете подключить своего агента к локальной модели, просто изменив base_url.

    2. LM Studio

    Если вы не любите командную строку, используйте LM Studio. Это графическое приложение, где можно искать модели на Hugging Face, скачивать их и общаться в интерфейсе, похожем на ChatGPT.

    3. vLLM: Продакшн-решение

    Для высоконагруженных систем (например, если вы делаете сервис для сотен пользователей) используют библиотеку vLLM. Она оптимизирует пропускную способность и управление памятью, используя технологию PagedAttention.

    Часть 5: RAG + Агенты + Локальный деплой

    Теперь мы можем собрать итоговую архитектуру курса:

  • База знаний: Векторная БД (ChromaDB) с вашими документами.
  • LLM: Локальная Llama 3, запущенная через Ollama.
  • Агент: Скрипт на Python, который имеет доступ к инструменту search_documents (поиск в ChromaDB).
  • Когда пользователь спрашивает: «Какие штрафы предусмотрены в договоре?», агент:

  • Понимает, что нужно искать в документах.
  • Вызывает функцию поиска.
  • Получает фрагменты текста (RAG).
  • Формирует финальный ответ.
  • Все это происходит на вашем сервере, бесплатно и приватно.

    Итоги

  • Агенты автономны: В отличие от простых чат-ботов, агенты могут использовать инструменты (поиск, калькулятор, API) и планировать свои действия для решения сложных задач.
  • Паттерн ReAct: Основа работы агента — цикл «Мысль Действие Наблюдение Ответ».
  • Локальный деплой: Позволяет запускать ИИ на своем железе для приватности и экономии. Для этого модели сжимают с помощью квантования (например, до 4 бит).
  • Инструменты: Для новичков идеален Ollama (простой запуск), для продвинутых пользователей — vLLM (высокая скорость).
  • GGUF и AWQ: Основные форматы сжатых моделей. GGUF универсален (CPU/GPU), AWQ — для NVIDIA GPU.