Базовые методы искусственного интеллекта в физических исследованиях
О себе
Меня зовут Федоров Вячеслав Васильевич, я разработчик программного обеспечения с глубокими знаниями в области физики и вычислительной математики. На протяжении нескольких лет я работаю в Институте ядерной физики им. Будкера, где занимаюсь разработкой наукоемкого прикладного программного обеспечения на языках высокого уровня Python и C++ для решения различных задач. Моя основная работа сосредоточена на моделировании динамики заряженных частиц в сложных электромагнитных полях, а также на внедрении алгоритмов машинного обучения для оптимизации и настройки ускорительных комплексов.
Мой опыт также включает работу в международной компании по разработке ПО и веб-приложений SIBERS, где я руководил командой разработчиков в создании ПО на основе микросервисной архитектуры для государственной организации, оказывающей финансовые услуги. Я активно участвовал в разработке дополнительных модулей для статического анализа кода для различных сред разработки, а также был ведущим разработчиком приложения для врачей, предназначенного для распознавания и присвоения кодов болезней в медицинских картах пациентов с использованием бессерверных вычислений и алгоритмов машинного обучения. Я внедрял процессы автоматизированного тестирования, непрерывной интеграции и доставки кода, проводил обзор и оценку кода, а также подготовил и прочитал полугодовой обучающий курс «Микросервисные масштабируемые веб-сайты» для команды.
Ранее я принимал участие в проектах Роскосмоса, в том числе в разработке ПО на языке C++ для инфракрасного датчика горизонта с использованием платформы Arduino для сверхмалого космического аппарата НГУ «Норби», успешный запуск которого состоялся в 2020 году.
У меня есть диплом бакалавра НГУ в области физики пучков заряженных частиц и физики ускорителей. Я прошёл курсы повышения квалификации по разработке и эксплуатации ПО на Python и C++, алгоритмам и структурам данных, системному администрированию и обеспечению надёжности информационных систем от «Образовательных технологий Яндекса», а также основы искусственного интеллекта и машинного обучения от НГУ.
Мои технические навыки включают: отличное владение языками программирования Python и C++, разнообразными фреймворками; работу с асинхронным и параллельным кодом; проектирование ПО, веб-приложений и микросервисов; создание документации; работу с реляционными базами данных и NoSQL-хранилищами; управление очередями сообщений и задач; владение методологиями непрерывной интеграции и доставки кода, автоматизации процессов сборки, настройки и развёртывания ПО. Мой опыт позволяет ускорять процессы производства IT-продуктов за счёт поиска и устранения «узких» мест, автоматизировать процесс разработки и развёртывания приложений, контейнеризировать приложения и размещать их в облачных сервисах. Я использую актуальные инструменты для обеспечения качества, скорости и стабильности приложений, управляю инфраструктурой в парадигме Infrastructure as Code, сокращая время команды на развёртывание и масштабирование, а также налаживаю коммуникацию между участниками процесса разработки продукта: службой эксплуатации, разработчиками, заказчиками от бизнеса и многими другими.
Больше обо мне можно узнать здесь
Введение
Цели курса
Этот курс станет вашим стартом в мир Data Science и Machine Learning. По его окончании вы сможете претендовать на позиции Junior Machine Learning Engineer или Junior Data Scientist.
Для вас этот курс — это:
- Практическое применение знаний из математического анализа, статистики и линейной алгебры.
- Фундамент для будущего перехода на руководящие должности в технической сфере.
Для нас этот курс — это:
- Развитие профессионального сообщества.
- Возможность найти будущих коллег.
- Интересный и важный процесс поддержания знаний в актуальном состоянии.
Основные термины
Давайте договоримся о терминах, которые будут использоваться на протяжении всего курса:
- Искусственный интеллект (AI) — система, способная принимать решения на основе восприятия окружающего мира.
- Машинное обучение (ML) — подраздел AI; система, принимающая решения на основе накопленного опыта (данных) и текущего состояния мира.
- Глубокое обучение (DL) — подраздел ML, основанный на использовании глубоких нейронных сетей (Neural Networks, NN).
- Data Science — дисциплина, включающая сбор, обработку, анализ и извлечение знаний из данных.
- Big Data — обработка и анализ данных, масштаб которых не позволяет работать с ними в стандартных инструментах (например, в Excel).
Термины, связанные с данными
- Датасет / Выборка (Dataset) — набор данных, с которым работает алгоритм.
- Признак / Фича (Feature, X) — характеристика или измеряемый параметр объекта.
- Целевая переменная / Метка / Класс (Label, Target, y) — значение, которое мы хотим предсказать по признакам объекта.
- Закон природы (в контексте ML) — скрытая взаимосвязь между признаками и целевой переменной, которую стремится восстановить модель. Формально: отображение из пространства признаков
Xв пространство метокy.
Типы задач машинного обучения
Задачи ML классифицируются по наличию и типу разметки (метки y).
1. Обучение с учителем (Supervised Learning)
Есть размеченная обучающая выборка, где каждому объекту сопоставлена правильная метка y. Цель — восстановить закон природы X -> y.
Пример: Классификация электронных писем (спам / не спам), где человек вручную разметил исторические данные.
2. Обучение без учителя (Unsupervised Learning)
Разметки y нет или она не используется. Алгоритм ищет внутренние структуры, закономерности и связи в данных.
Пример: Кластеризация пользователей поисковой системы по их запросам для выявления групп интересов.
Основные типы задач
В рамках двух парадигм выделяют несколько ключевых типов задач.
Классификация (Classification)
- Цель: Восстановить закон природы.
- Особенность: Множество меток
y— конечное (часто небольшое). - Подвиды: Бинарная (2 класса) и многоклассовая (>2 классов).
- Пример: Определение болезни по симптомам (болен/здоров), распознавание цифр на изображении.
Регрессия (Regression)
- Цель: Предсказать непрерывную числовую величину.
- Особенность: Метка
y— вещественное число. - Пример: Прогнозирование стоимости квартиры по её характеристикам, прогноз температуры на завтра.
Кластеризация (Clustering)
- Цель: Разбить данные на группы (кластеры) так, чтобы объекты внутри одной группы были похожи, а объекты из разных групп — отличались.
- Особенность: Отсутствие заранее известных меток (без учителя).
- Пример: Сегментация клиентов для маркетинга, группировка новостей по темам.
Снижение размерности (Dimensionality Reduction)
- Цель: Уменьшить количество признаков, перейдя в пространство меньшей размерности, сохранив при этом важные структуры данных (близкие объекты должны остаться близкими).
- Применение: Визуализация данных (например, 3D -> 2D), борьба с "проклятием размерности", сжатие данных.
Ранжирование (Ranking)
- Цель: Упорядочить объекты (например, документы или товары) согласно их релевантности запросу или предпочтениям пользователя.
- Пример: Выдача результатов поиска, рекомендательные системы.
Генерация (Generation)
- Цель: Создавать новые объекты (изображения, текст, музыку), похожие на объекты из обучающей выборки.
- Пример: Генерация реалистичных лиц, написание текстов в стиле определённого автора.
Типы признаков (Features)
Признаки могут быть разных типов, что влияет на выбор модели и методов предобработки:
- Бинарные: Выбор из двух вариантов (Да/Нет, Кот/Не кот).
- Номинальные (категориальные): Конечное множество без порядка (цвета, марки машин).
- Порядковые (ординальные): Конечное упорядоченное множество (оценки: плохо/удовлетворительно/хорошо/отлично).
- Числовые (вещественные): Непрерывные величины (рост, цена, расстояние).
Важно: Типы признаков можно преобразовывать (например, разбить числовой на интервалы и получить порядковый).
Что такое модель?
Модель машинного обучения — это параметрическая функция (или "чёрный ящик"), которая отображает пространство признаков X в пространство ответов y: Model: X -> y.
- У модели есть параметры (внутренние настройки), которые настраиваются в процессе обучения на данных.
- Обучение — это процесс подбора параметров модели таким образом, чтобы её предсказания на обучающих данных максимально соответствовали известным меткам (или выявляли скрытые структуры).
- На работу модели влияют: качество данных, выбор алгоритма, его гиперпараметры и правильность процесса обучения.
Метрические методы
Основная идея
Метрические методы основаны на гипотезе компактности: объекты одного класса находятся близко, объекты разных классов — далеко.
Ближайший центроид (Nearest Centroid)
Алгоритм:
Для каждого класса вычисляется центроид (среднее значение признаков).
Новый объект относится к классу, чей центроид ближе.
Плюсы:
- Простота реализации.
- Мало параметров.
- Быстрая классификация.
Минусы:
- Чувствителен к выбросам.
- Подходит только для “колоколообразных” распределений.
Метод k ближайших соседей (kNN)
Алгоритм:
- Храним всю обучающую выборку.
- Для нового объекта находим ( k ) ближайших соседей.
- Класс — наиболее частый среди соседей.
Гиперпараметры:
- ( k ) — число соседей.
- Метрика расстояния.
- Весовая функция.
Особенности:
- Ленивое обучение: модель не обучается заранее, все вычисления происходят при классификации.
- Требует хранения всей выборки.
- Медленный на больших данных.
Весовые обобщения kNN
Можно учитывать не только количество соседей, но и их расстояние до объекта:
[ a(x) = \arg \max \sum_{t=1}^{k} w_t \cdot I[y(x_t) = a] ]
где ( w_t ) — вес, зависящий от расстояния.
Примеры весовых схем:
- Обратное расстояние: ( w_t = \frac{1}{\rho(x, x_t)} )
- Ядерные веса: ( w_t = K\left(\frac{\rho(x, x_t)}{h}\right) )
Регрессия Надарая–Ватсона
Обобщение kNN для регрессии:
[ a(x) = \frac{\sum_{i=1}^{m} w_i(x) y_i}{\sum_{i=1}^{m} w_i(x)} ]
где ( w_i(x) ) — вес, зависящий от расстояния до объекта обучения.
Проблемы метрических методов
-
Зависимость от масштаба признаков
Решение: нормировка (например, StandardScaler). -
Проклятие размерности
В больших размерностях все объекты становятся “одинаково далекими”.
Но на реальных данных есть низкоразмерная структура. -
Медленная классификация
Решение: эффективные структуры данных (KD-tree, Ball tree, HNSW).
Метрики расстояния
- Евклидова: ( \sqrt{\sum (x_i - z_i)^2} )
- Манхэттенская: ( \sum |x_i - z_i| )
- Минковского: ( \left( \sum |x_i - z_i|^p \right)^{1/p} )
- Махаланобиса: учитывает ковариацию признаков.
- Косинусная мера: для текстов и векторов.
- Джаккарда: для множеств.
- DTW (Dynamic Time Warping): для временных рядов.
- Левенштейна: для строк.
Пример: kNN на Python (scikit-learn)
from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier(n_neighbors=5, metric='euclidean')
model.fit(X_train, y_train)
predictions = model.predict(X_test)
Итог
Метрические методы — простые, интерпретируемые и мощные инструменты, особенно когда:
- Нет явных признаковых описаний.
- Данные имеют геометрическую структуру.
- Нужна быстрая прототипизация.
Главный недостаток — вычислительная сложность на больших данных, но это решается выбором эффективных метрик и структур данных.
Задача: Реализация KNN-классификатора "с нуля"
Напишите собственный класс, который реализует алгоритм k ближайших соседей для классификации.
Класс должен поддерживать:
- Две метрики расстояния: евклидову и манхэттенскую
- Два режима голосования: равномерный (
uniform) и взвешенный по расстоянию (distance) - Методы
fit()иpredict()
Протестируйте реализацию на датасете Iris и Digits, сравните точность с KNeighborsClassifier.
В отчете проанализируйте, как выбор метрики и режима голосования влияет на качество классификации.