Data-Centric AI
Подход к ИИ с фокусом на данных улучшает модели благодаря систематическому исправлению меток, охвата и качества обучающих данных при неизменной архитектуре модели.
ИИ, ориентированный на данные, — это систематическое улучшение ИИ-системы за счёт работы с данными, включая согласованность меток, охват реальных условий, баланс классов и чистоту данных, при этом модель и код обучения остаются практически неизменными. Термин популяризировал Эндрю Ын в 2021 году: по его мнению, архитектуры, такие как свёрточные нейронные сети и трансформеры, уже достаточно развиты, поэтому большинство приложений выигрывают от улучшения данных больше, чем от улучшения модели. Противоположный подход — ИИ, ориентированный на модель: в нём эталонный набор данных остаётся неизменным, а специалисты экспериментируют с архитектурами, функциями потерь и настройкой гиперпараметров, как это обычно происходит в академических рейтингах.
Самый известный пример Ына связан с проверкой стальных листов: детектор дефектов, застрявший на точности 76,2%, не улучшался при работе над моделью, а исправление несогласованных меток повысило точность до 93,1%. Позже в том же году DeepLearning.AI и Landing AI провели конкурс Data-Centric AI Competition: модель была зафиксирована, а участники могли улучшать только зашумлённый набор данных для классификации изображений рукописных римских цифр размером не более 10 000 изображений.
Основные практики#
- Согласованная разметка данных: аннотаторы следуют письменным правилам для неоднозначных случаев, например решают, должна ли рамка включать боковое зеркало автомобиля и как размечать частично скрытого человека. Если два аннотатора по-разному решают такие случаи, возникает шум в метках, который модель не сможет компенсировать при обучении.
- Поиск ошибок в метках: расхождения между предсказаниями модели и заданными метками указывают на вероятные ошибки. В исследовании 2021 года Норткатта, Атали и Мюллера ошибки в метках обнаружились в среднем как минимум у 3,3% тестовых примеров в 10 популярных наборах данных и как минимум у 6% примеров в проверочной выборке ImageNet.
- Целевой сбор и синтетические данные: анализ ошибок по классам, сценам, освещению или размеру объектов показывает, где модель ошибается; новые примеры именно для этих срезов полезнее случайных добавлений.
- Очистка данных: удаление повреждённых файлов, нерелевантных изображений и дубликатов, особенно почти идентичных изображений, попавших одновременно в обучающую и тестовую выборки.
- Аугментация данных: расширение диапазона освещения, масштаба и ракурсов, которые видит модель, без сбора новых изображений.
Дубликаты между выборками приводят к утечке данных, завышающей результаты на тесте, а дисбаланс классов позволяет модели достичь высокой точности, пропуская при этом редкий, но важный класс. Так бывает при обнаружении производственных дефектов, когда бракованные детали встречаются редко. В анализе медицинских изображений наборы данных невелики, а экспертная разметка дорога, поэтому согласованность и проверка меток важнее объёма.
Цикл работы с данными#
Команда, использующая подход с опорой на данные, не меняет модель, изучает её ошибки с помощью таких инструментов, как матрица ошибок, и в ответ корректирует данные. Так поступают в уроке «Первое дообучение и цикл итераций», превращая самый слабый класс модели YOLO26 в следующую задачу по исправлению набора данных:
В этом примере в 20% меток набора рукописных цифр из scikit-learn вносятся ошибки, затем отмечаются примеры, в которых предсказание вне фолда не совпадает с меткой, и та же модель обучается заново без них:
import numpy as np
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_predict, train_test_split
X, y = load_digits(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
# Replace 20% of the training labels with random digits to mimic annotation errors
rng = np.random.default_rng(0)
noisy = y_train.copy()
flip = rng.random(len(noisy)) < 0.2
noisy[flip] = rng.integers(0, 10, flip.sum())
wrong = noisy != y_train # some random digits match the true label
# The model stays fixed; only the training data changes
model = LogisticRegression(max_iter=5000)
print(f"noisy labels: {model.fit(X_train, noisy).score(X_test, y_test):.1%} test accuracy")
# Flag examples whose out-of-fold prediction disagrees with their label, then drop them
keep = cross_val_predict(model, X_train, noisy, cv=5) == noisy
print(f"flagged {(~keep).sum()} examples, {(~keep & wrong).sum()} of {wrong.sum()} wrong labels")
print(f"cleaned labels: {model.fit(X_train[keep], noisy[keep]).score(X_test, y_test):.1%} test accuracy")Точность на тестовой выборке повышается с 87,0% до 94,1% без изменения модели. Фильтр отмечает 354 примера: 211 из 213 примеров с неверными метками и 143 правильных, но необычных примера. Поэтому из очищенного набора удаляются и некоторые корректные примеры, хотя почти все ошибки удаётся убрать.
Чтобы сравнивать изменения в данных, нужно точно знать, какие данные использовались для обучения каждой модели. Ultralytics Platform хранит неизменяемые версии наборов данных: параметр Save Dataset Version в облачном обучении связывает каждую модель со снимком данных, на котором она обучалась; раздел Compare Versions показывает изменившиеся между двумя снимками изображения, аннотации и классы; а на вкладке Models набора данных указана версия данных для каждой модели рядом с основными метриками, такими как mAP50-95.
ИИ, ориентированный на данные, и смежные понятия#
- Активное обучение: выбирает, какие неразмеченные примеры размечать следующими, обычно те, в которых модель наименее уверена. Это один из методов ИИ, ориентированного на данные.
- Маховик данных: цикл промышленной эксплуатации, в котором входные данные и ошибки развёрнутой модели становятся новыми обучающими данными, поэтому работа с данными повторяется при каждом выпуске.
- Операционная деятельность в машинном обучении (MLOps): инженерные практики версионирования, обучения, развёртывания и мониторинга моделей, благодаря которым изменения данных можно воспроизводить и сравнивать.










