Базовые методы искусственного интеллекта в физических исследованиях

О себе

Меня зовут Федоров Вячеслав Васильевич, я разработчик программного обеспечения с глубокими знаниями в области физики и вычислительной математики. На протяжении нескольких лет я работаю в Институте ядерной физики им. Будкера, где занимаюсь разработкой наукоемкого прикладного программного обеспечения на языках высокого уровня 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)

Алгоритм:

  1. Храним всю обучающую выборку.
  2. Для нового объекта находим ( k ) ближайших соседей.
  3. Класс — наиболее частый среди соседей.

Гиперпараметры:

  • ( 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) ) — вес, зависящий от расстояния до объекта обучения.


Проблемы метрических методов

  1. Зависимость от масштаба признаков
    Решение: нормировка (например, StandardScaler).

  2. Проклятие размерности
    В больших размерностях все объекты становятся “одинаково далекими”.
    Но на реальных данных есть низкоразмерная структура.

  3. Медленная классификация
    Решение: эффективные структуры данных (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 ближайших соседей для классификации.

Класс должен поддерживать:

  1. Две метрики расстояния: евклидову и манхэттенскую
  2. Два режима голосования: равномерный (uniform) и взвешенный по расстоянию (distance)
  3. Методы fit() и predict()

Протестируйте реализацию на датасете Iris и Digits, сравните точность с KNeighborsClassifier. В отчете проанализируйте, как выбор метрики и режима голосования влияет на качество классификации.

Ссылка на репозиторий