ПРОСТОЕ ОБЪЯСНЕНИЕ ПОЧЕМУ НЕГАТИВНОГО МАЙНИНГА

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

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

Во время обучения модели предъявляется набор помеченных примеров, некоторые из которых являются положительными, а некоторые — отрицательными. Модель использует эти примеры для изучения набора признаков, которые можно использовать для различения положительных и отрицательных примеров. Однако модель не всегда может правильно классифицировать все примеры и может ошибаться в некоторых отрицательных примерах, которые известны как ложноотрицательные.

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

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

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

ПРИМЕРЫ ЖЕСТКОГО НЕГАТИВНОГО МАЙНИНГА, ИСПОЛЬЗУЕМОГО В СЦЕНАРИЯХ РЕАЛЬНОГО ВРЕМЕНИ

  1. Жесткий отрицательный майнинг может быть особенно полезен в сценариях, где отрицательные примеры нечетко определены или их трудно идентифицировать. Например, в задаче обнаружения спама в электронной почте отрицательные примеры (т. е. не спамовые электронные письма) могут быть очень разнообразными и их трудно охарактеризовать. Выборочно добавляя жесткие отрицательные примеры, модель может научиться лучше различать спам и не спам и улучшить свою общую производительность.
  2. В классификации изображений можно использовать жесткий отрицательный анализ для выявления сложных примеров, которые часто неправильно классифицируются моделью. Например, если модель обучена распознавать разные породы собак, можно использовать жесткий отрицательный анализ для идентификации изображений собак, внешне похожих на целевую породу, но принадлежащих к другой породе. Добавляя эти сложные примеры в тренировочный набор, модель может научиться лучше различать похожие породы собак и повышать свою точность.
  3. При обнаружении объектов можно использовать жесткий отрицательный анализ для определения областей изображения, которые часто ошибочно принимают за объекты. Например, если модель обучена обнаруживать автомобили на изображении, то можно использовать жесткий отрицательный анализ для выявления областей изображения, которые содержат элементы, похожие на автомобили, но на самом деле не содержат автомобили, такие как дорожные знаки или деревья. Добавляя эти области в качестве жестких отрицательных примеров, модель может научиться лучше различать настоящие автомобили и не-автомобили.
  4. При обнаружении аномалий можно использовать жесткий отрицательный майнинг для выявления сложных примеров, которые часто ошибочно классифицируются как нормальные. Например, если модель обучена обнаруживать мошеннические транзакции в наборе финансовых данных, можно использовать жесткий отрицательный анализ для выявления транзакций, которые похожи на мошеннические, но на самом деле являются законными. Добавляя эти сложные примеры в обучающий набор, модель может научиться лучше различать нормальные и аномальные транзакции и повысить свою точность.
  5. В обучении с подкреплением жесткий отрицательный анализ можно использовать для выявления неудачных действий или стратегий, которые приводят к низким вознаграждениям. Например, если модель обучена играть в игру, можно использовать жесткий отрицательный анализ для выявления неудачных состояний игры или действий, которые приводят к низкой оценке. Добавляя эти примеры в тренировочный набор, модель может научиться избегать подобных действий или стратегий в будущем и улучшать свою производительность.
  6. При обнаружении объектов для беспилотных автомобилей интеллектуальный анализ с отрицательным анализом можно использовать для выявления областей на изображении, которые похожи на объекты, такие как пешеходы или велосипеды, но на самом деле не являются объектами. Это может помочь системе лучше различать объекты и необъекты и избегать ложных срабатываний, которые могут привести к несчастным случаям.

ЗДЕСЬ ПРОСТОЕ ПОНИМАНИЕ ЖЕСТКИХ ОТРИЦАТЕЛЬНЫХ ПРИМЕРОВ

Вот простой и понятный пример того, как можно использовать хард-негативный майнинг:

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

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

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

ДРУГОЙ ПРОСТОЙ ПРИМЕР ИСПОЛЬЗОВАНИЯ:

  • Представьте, что вы хотите построить модель для обнаружения спама. Вы начинаете со сбора набора данных электронных писем, помеченных как "спам" или "не спам". Затем вы обучаете свою модель на этом наборе данных, чтобы классифицировать новые электронные письма как "спам" или "не спам". Однако вы замечаете, что модель допускает ошибки и иногда неправильно классифицирует электронные письма.

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

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

РЕАЛИЗАЦИЯ ИЛИ ПРАКТИЧЕСКАЯ ЧАСТЬ ДЛЯ ЖЕСТКОГО НЕГАТИВНОГО МАЙНИНГА:

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

  1. Обучите исходную модель на наборе данных положительных и отрицательных примеров.
  2. Оцените производительность модели на проверочном или тестовом наборе, чтобы определить области, в которых модель допускает ошибки.
  3. Определите неправильно классифицированные примеры, которые трудно классифицировать и которые могут быть полезны в качестве жестких отрицательных примеров.
  4. Добавьте эти жесткие отрицательные примеры в обучающий набор и переобучите модель.
  5. Повторяйте шаги 2–4, пока производительность модели не достигнет приемлемого уровня.

Вот пример кода, показывающий, как реализовать жесткий отрицательный анализ данных в Python с помощью библиотеки scikit-learn:

from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# Load the dataset of positive and negative examples
X, y = load_dataset()

# Split the dataset into training and validation sets
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2)

# Train an initial SVM model on the training set
svm = SVC()
svm.fit(X_train, y_train)

# Evaluate the performance of the model on the validation set
y_pred = svm.predict(X_val)
acc = accuracy_score(y_val, y_pred)
print(f"Initial accuracy: {acc:.2f}")

# Iterate over the validation set to identify hard negative examples
hard_negatives = []
for i in range(len(X_val)):
    if y_pred[i] == 1 and y_val[i] == 0:
        # This example is a false positive (classified as positive but is actually negative)
        # Add it to the hard negative examples list
        hard_negatives.append(X_val[i])

# Add the hard negative examples to the training set and retrain the model
X_train = np.concatenate((X_train, hard_negatives), axis=0)
y_train = np.concatenate((y_train, np.zeros(len(hard_negatives))), axis=0)
svm.fit(X_train, y_train)

# Evaluate the performance of the model on the validation set again
y_pred = svm.predict(X_val)
acc = accuracy_score(y_val, y_pred)
print(f"Final accuracy: {acc:.2f}")

Конечно, вот еще один пример кода для жесткого отрицательного майнинга, на этот раз с использованием PyTorch:

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader

# Define a simple CNN model
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 16, kernel_size=3)
        self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2)
        self.conv2 = nn.Conv2d(16, 32, kernel_size=3)
        self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2)
        self.fc1 = nn.Linear(32 * 6 * 6, 64)
        self.fc2 = nn.Linear(64, 10)

    def forward(self, x):
        x = self.pool1(torch.relu(self.conv1(x)))
        x = self.pool2(torch.relu(self.conv2(x)))
        x = x.view(-1, 32 * 6 * 6)
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

# Load the CIFAR-10 dataset
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
                                        download=True, transform=transforms.ToTensor())
testset = torchvision.datasets.CIFAR10(root='./data', train=False,
                                       download=True, transform=transforms.ToTensor())

# Define the data loader and loss function
trainloader = DataLoader(trainset, batch_size=32, shuffle=True)
testloader = DataLoader(testset, batch_size=32, shuffle=False)
criterion = nn.CrossEntropyLoss()

# Train the initial model
net = Net()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
for epoch in range(10):
    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data
        optimizer.zero_grad()
        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
    print(f"Epoch {epoch+1}, loss: {running_loss/len(trainloader):.3f}")

# Evaluate the performance of the initial model
correct = 0
total = 0
with torch.no_grad():
    for data in testloader:
        images, labels = data
        outputs = net(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()
print(f"Initial accuracy: {100 * correct / total:.2f}%")

# Iterate over the validation set to identify hard negative examples
hard_negatives = []
with torch.no_grad():
    for data in testloader:
        images, labels = data
        outputs = net(images)
        predicted = torch.max(outputs.data, 1)[1]
        for i in range(len(predicted)):
            if predicted[i] == 1 and labels[i] == 0:

ЗДЕСЬ ССЫЛКА ДЛЯ ПОЛУЧЕНИЯ ИССЛЕДОВАТЕЛЬСКИХ ДОКУМЕНТОВ:

  1. «Обучение детекторов объектов с жестким негативным майнингом» Felzenszwalb et al. (2009):

https://www.cs.unc.edu/~lazebnik/publications/cvpr09-objdetect.pdf

2. «Fast R-CNN» Гиршика (2015): https://arxiv.org/pdf/1504.08083.pdf

3. Сквозное обнаружение объектов с помощью полностью сверточных сетей Лю и др. (2016): https://arxiv.org/pdf/1605.06409.pdf

4. «SSD: однократный многоблочный детектор» Liu et al. (2016 г.): https://arxiv.org/pdf/1512.02325.pdf

5 . Быстрее R-CNN: на пути к обнаружению объектов в реальном времени с помощью сетей региональных предложений, Рен и др. (2015): https://arxiv.org/pdf/1506.01497.pdf