Программа хэндбука по машинному обучению
ЧерновикМатериалы дорабатываются и будут дополняться.
Для школьников 10–11 классов. Введение и 30 основных тем: 10 в первой главе и по 5 в остальных. Для начала нужны основы Python и школьная математика.
Результаты обучения: постановка задачи, сравнение моделей, обучение небольшой нейросети, применение готовых моделей и объяснение устройства знакомых архитектур.
0. Введение
Jupyter или Colab, открытие и сохранение ноутбука, загрузка данных, выполнение ячеек, чтение сообщений об ошибках и перезапуск примера. Самопроверка по Python и математике.
Результат: подготовленная среда и готовность к первому эксперименту. Введение не входит в 30 основных тем.
1. Классическое машинное обучение
10 тем. Результат: самостоятельное решение небольшой табличной задачи и обоснованный выбор способа проверки модели.
| № | Тема и содержание | Практика и проверяемый результат |
|---|---|---|
| 1.1 | От задачи к первому эксперименту. Какие задачи решает ML, что такое признаки и правильные ответы. Простое начальное предсказание, средняя ошибка и доля верных ответов. Проверка на новых данных. | По таблице предсказать всем объектам одно число или класс. Сравнить среднее и медиану для числового ответа; объяснить, какую ошибку измеряем. |
| 1.2 | Ближайшие соседи и масштаб признаков. Предсказываем ответ по похожим примерам. Разберём, как искать ближайших соседей и почему метры и сантиметры могут изменить результат модели. | По здоровью и магической силе персонажа предсказать его класс. Сравнить способы измерять расстояние, число соседей и результат до и после нормализации. Дополнительно: реализация KNN. |
| 1.3 | Линейная регрессия и обучение параметров. Учимся предсказывать число с помощью прямой и нескольких признаков. Будем понемногу менять коэффициенты модели, чтобы она ошибалась меньше. | Подобрать коэффициенты прямой по шумным наблюдениям. Нарисовать предсказания и ошибки, проверить один шаг обучения и сравнить результат с постоянным ответом. |
| 1.4 | Решающие деревья. Как принимать решение с помощью цепочки простых вопросов. Построим небольшое дерево и посмотрим, почему слишком большое дерево может ошибаться на новых примерах. | Нарисовать дерево для маленькой таблицы, затем сравнить библиотечные деревья разной глубины. Дополнительно: реализация решающего пня. |
| 1.5 | Кластеризация и K-means. Как найти группы похожих объектов, если правильные ответы заранее неизвестны. Научимся распределять точки по группам и двигать их центры. | Вручную выполнить два шага группировки точек и сравнить разные начальные центры. Дополнительно: реализация K-means и Rand index. |
| 1.6 | Логистическая регрессия и вероятностный ответ. Как модель оценивает вероятность ответа: например, является ли письмо спамом. Посмотрим, как из вероятности получить решение и что меняется при выборе порога. | Сравнить логистическую регрессию и дерево на одном разбиении. Показать, как порог меняет ошибки. |
| 1.7 | Признаки, переобучение и регуляризация. Какие сведения об объекте помогают предсказывать ответ. Разберём, почему модель иногда заучивает примеры, и попробуем упростить её, чтобы лучше работать с новыми данными. | Добавить признак в знакомую модель, сравнить ошибки на старых и новых данных. Проверить, помогает ли ограничение сложности модели. |
| 1.8 | Честная оценка качества. Как понять, хорошо ли работает модель. Какие ошибки важнее для задачи, как выбирать настройки и зачем отделять обучение от итоговой проверки. | Посчитать ошибки на небольшой таблице ответов. Проверить модель на нескольких разбиениях и сравнить результаты. Найти утечку, когда фотографии одного листа попали и в обучение, и в тест. Дополнительно: ROC-AUC. |
| 1.9 | Ансамбли и случайный лес. Почему несколько моделей вместе могут работать лучше одной. Объединим ответы разных деревьев и познакомимся со случайным лесом. | Сравнить дерево и лес на одних разбиениях. Усреднить прогнозы. Дополнительно: stacking с out-of-fold прогнозами. |
| 1.10 | Градиентный бустинг и табличная задача целиком. Строим модели по очереди: каждая следующая помогает исправить ошибки предыдущих. Применим бустинг к небольшой таблице и сравним его с уже знакомыми методами. | Проследить один шаг бустинга вручную и собрать библиотечное решение. Сравнить с линейной моделью и лесом, зафиксировать настройки и выполнить финальную проверку. |
2. Основы глубокого обучения
5 тем. Результат: понимание прямого прохода и шага обучения нейросети, основных способов обработки изображений и текста.
| № | Тема и содержание | Практика и проверяемый результат |
|---|---|---|
| 2.1 | От линейной модели к нейросети. Из чего состоит нейросеть: нейроны, связи и слои. На маленьком примере проследим путь от входных чисел до ответа и поймём, зачем сети несколько слоёв. | Выполнить прямой проход маленькой сети вручную и собрать MLP для нелинейной задачи. Проверить формы входа и выхода. |
| 2.2 | Первое обучение нейросети. Обучим небольшую сеть распознавать цифры. Проследим, как она делает предсказание, измеряет ошибку и меняет веса, чтобы постепенно отвечать точнее. | Обучить MLP на небольшом наборе цифр. Различить backward() и обновление весов, показать уменьшение ошибки и независимую оценку. |
| 2.3 | Свёртки и устройство CNN. Как сеть замечает края, линии и другие детали изображения. Вручную проведём маленький фильтр по картинке и разберём, как из таких фильтров собирается сеть. | Посчитать маленькую свёртку вручную, проследить формы слоёв и сравнить число параметров CNN и MLP. |
| 2.4 | Эмбеддинги и представление текста. Как представить слова в виде наборов чисел. Посмотрим, почему слова с похожим окружением получают похожие представления, и попробуем найти слова-соседи. | Построить соседей слов по векторам и показать, как контекст меняет представление. Крошечный опыт word2vec иллюстрирует механизм; для осмысленных соседей нужны подготовленные представления. |
| 2.5 | Внимание и трансформер. Как сеть учитывает связи между словами и выбирает важные части текста. На маленьком примере разберём внимание и увидим, как трансформер продолжает текст. | Посчитать взвешенную сумму для двух слов и показать, почему при продолжении текста нельзя подсматривать следующие слова. Несколько голов внимания — дополнительное чтение. |
3. Нейросети на практике
5 тем. Результат: умение загрузить готовую модель, подготовить свои данные, запустить инференс — получение ответа — и проверить результат. Используем готовые веса без дообучения.
| № | Тема и содержание | Практика и проверяемый результат |
|---|---|---|
| 3.1 | Распознаём изображения готовой моделью. Загрузим обученный классификатор, подготовим фотографию и прочитаем несколько самых вероятных ответов. Посмотрим, какие классы модель умеет различать и на каких снимках ошибается. | Запустить модель на своих фотографиях. Проверить влияние обрезки и освещения, разобрать несколько ошибок. Сохранить название модели и способ подготовки изображений. |
| 3.2 | Находим объекты на изображении. Запустим готовые модели для поиска объектов и выделения их областей. Научимся читать рамки, классы, оценки уверенности и маски. | Найти объекты на фотографии и выделить их маски. Изменить порог уверенности, сравнить пропуски и лишние обнаружения. |
| 3.3 | Работаем с текстом готовой моделью. Попробуем готовый классификатор и модель для получения эмбеддингов текста. Проверим, какие языки и виды текстов они поддерживают. | Определить тональность коротких русских текстов и найти близкие по смыслу фразы. Проверить отрицание и неоднозначные примеры; отдельно исследовать работу с белорусским текстом. |
| 3.4 | Генерируем текст языковой моделью. Загрузим небольшую готовую модель и получим продолжение текста. Посмотрим, как запрос, длина ответа и настройки генерации меняют результат. | Сравнить ответы на несколько запросов при одинаковых весах. Проверить факты в ответах, найти выдуманные сведения и повторить запуск с сохранёнными настройками. |
| 3.5 | Ищем изображения по описанию. Используем CLIP для поиска картинки по тексту и выбора класса из своих описаний. Посмотрим, как формулировка влияет на результат. | Собрать небольшой поиск по своей коллекции изображений. Сравнить несколько описаний, разобрать ошибки и оформить мини-проект с воспроизводимым запуском. |
4. Как учатся нейросети
5 тем. Результат: умение объяснить устройство моделей из главы 3 и задачи, на которых они обучались. Разбираем архитектуры на схемах и небольших опытах.
| № | Тема и содержание | Практика и проверяемый результат |
|---|---|---|
| 4.1 | Как CNN и ResNet распознают изображения. Проследим путь от картинки через карты признаков к классу. Разберём остаточную связь в ResNet и узнаем, как готовые признаки используют при переносе обучения. | Посмотреть карты признаков модели из 3.1 и нарисовать её основные блоки. Обучить только небольшой классификатор поверх готовых признаков; объяснить, какие веса менялись. |
| 4.2 | Как сеть предсказывает рамки и маски. Разберём, откуда у детектора берутся координаты объектов. На примере U-Net посмотрим, как сеть уменьшает изображение, собирает признаки и восстанавливает карту классов по пикселям. | Нарисовать пути данных в детекторе и U-Net, отметить их выходы и нужную разметку. На маленьком примере сопоставить рамку и маску с правильным ответом. |
| 4.3 | Как текстовый энкодер понимает контекст. Разберём токенизацию, внимание и блоки трансформера на примере BERT. Посмотрим, как восстановление скрытых слов помогает получить представления для разных текстовых задач. | Проследить формы данных от токенов до эмбеддинга и класса. Сравнить представление слова в двух фразах и запустить восстановление пропущенного слова. |
| 4.4 | Как языковая модель продолжает текст. Разберём трансформер-декодер, запрет подсматривать будущие токены и обучение предсказанию следующего токена. Свяжем эти шаги с генерацией из 3.4. | На короткой фразе подготовить входы и правильные следующие токены. Проследить генерацию по одному токену и объяснить, чем запуск готовой модели отличается от изменения её весов. |
| 4.5 | Как CLIP связывает изображения и текст. Разберём два энкодера и общее пространство эмбеддингов. Посмотрим, как обучение на парах «картинка — описание» сближает подходящие пары и отделяет неподходящие. | Построить таблицу сходства для нескольких картинок и подписей, отметить правильные пары. Объяснить поиск из 3.5 и проверить влияние неверных подписей на маленьком учебном примере. |
5. Математика ИИ
5 тем для углублённого изучения. Геометрия данных, матричные разложения и математические основы обучения. Каждая тема связывает вычисления с поведением знакомых моделей.
| № | Тема и содержание | Практика и проверяемый результат |
|---|---|---|
| 5.1 | SVD и низкоранговое приближение. Разложение матрицы на простые составляющие, сингулярные векторы и числа. Выбор числа составляющих и ошибка приближения. Сжатие изображений и скрытые факторы в рекомендациях. | Разложить небольшую матрицу и восстановить её. Сжать изображение, оставляя разное число составляющих, и сравнить ошибку восстановления с объёмом хранения. Дополнительно: факторизация таблицы пользовательских оценок с пропусками. |
| 5.2 | PCA через SVD: геометрия данных. Центрирование таблицы признаков и применение SVD из 5.1. Правые сингулярные векторы задают главные направления, а сингулярные числа связаны с дисперсией вдоль них. Проекция, объяснённая дисперсия и потеря информации. | Сжать двумерные данные до одной координаты через SVD, затем применить PCA к эмбеддингам. Сравнить объяснённую дисперсию и ошибку восстановления с библиотечным PCA. Объяснить, почему красивая проекция не доказывает качество классификации. |
| 5.3 | Геометрия больших размерностей. Проклятие размерности, влияние лишних признаков на расстояния, длина и направление векторов. Косинусная близость эмбеддингов. | Сравнить расстояния между случайными точками в 2, 20 и 200 измерениях. Добавить шумовые признаки в KNN и измерить изменение качества. Сравнить поиск по расстоянию и по углу между векторами. |
| 5.4 | Матричное дифференцирование и backpropagation. Градиент по вектору и матрице, якобиан, цепное правило для нескольких слоёв. Формы тензоров в формулах обучения. | Вывести матричный градиент ошибки линейной регрессии, затем градиенты небольшого полносвязного слоя. Проверить формы и сравнить результат с autograd. |
| 5.5 | Геометрия оптимизации. Линии уровня, выпуклость, локальные и глобальные минимумы. Кривизна, матрица Гессе и обусловленность: почему по оврагу спускаться труднее, чем по круглой чаше. | Сравнить траектории градиентного спуска для двух квадратичных функций. Найти допустимый размер шага и показать, как масштабирование координат меняет скорость сходимости. |
Необходимые знания
| Когда | Что нужно знать |
|---|---|
| Перед 1.1 | Функции Python, списки и словари, чтение CSV; среднее и доли. |
| Перед 1.2–1.3 | Массивы, индексация, векторы, расстояния и чтение графика прямой. |
| По ходу главы 1 | Таблицы, графики, fit/predict, конвейеры; логарифм и базовая вероятность к 1.6. |
| Перед главой 2 | Тензоры и формы, autograd, Dataset/DataLoader, режимы модели; композиция функций и смысл производной. |
| Перед главой 3 | Формы тензоров, загрузка данных и режим оценки; чтение предсказаний и простых метрик. |
| Перед главой 4 | Прямой проход и шаг обучения, свёртки, эмбеддинги и внимание из главы 2; опыт запуска готовых моделей из главы 3. |
| Перед 5.1 | Матричное произведение, ортогональность, проекции и ранг. |
| Перед 5.2 | SVD и приближение меньшего ранга из 5.1; среднее и дисперсия. |
| Перед 5.3 | Расстояния, скалярное произведение, норма вектора, среднее и разброс значений. |
| Перед 5.4–5.5 | Матричное произведение, производная, градиент и цепное правило. |