Перейти к содержанию

Искусственный интеллект. Машинное обучение — книга №2 серии «Искусственный интеллект»

Автор:

5,0 230+ оценок читателей Рунета
Категория
книги о компьютерах
Год издания
Издательство
Автор
Возрастное ограничение
12+
Обновлено
25.09.2026

Аннотация

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

Читать «Искусственный интеллект. Машинное обучение» — Джейд Картер онлайн

Страница 12 из 15

x = torch.relu(self.fc1(x))

x = torch.relu(self.fc2(x))

x = self.fc3(x)

return x

# Функция для выбора действия с использованием эпсилон-жадной стратегии

def select_action(state, epsilon):

if random.random() < epsilon:

return env.action_space.sample()

else:

with torch.no_grad():

return np.argmax(model(state).numpy())

# Параметры обучения

epsilon = 1.0

epsilon_min = 0.01

epsilon_decay = 0.995

gamma = 0.99

lr = 0.001

batch_size = 64

memory = []

memory_capacity = 10000

target_update = 10

num_episodes = 1000

# Инициализация среды и модели

env = gym.make('Pong-v0')

input_dim = env.observation_space.shape[0]

output_dim = env.action_space.n

model = DQN(input_dim, output_dim)

target_model = DQN(input_dim, output_dim)

target_model.load_state_dict(model.state_dict())

target_model.eval()

optimizer = optim.Adam(model.parameters(), lr=lr)

criterion = nn.MSELoss()

# Обучение

for episode in range(num_episodes):

state = env.reset()

total_reward = 0

done = False

while not done:

action = select_action(torch.tensor(state).float(), epsilon)

next_state, reward, done, _ = env.step(action)

memory.append((state, action, reward, next_state, done))

state = next_state

total_reward += reward

if len(memory) >= batch_size:

batch = random.sample(memory, batch_size)

states, actions, rewards, next_states, dones = zip(*batch)

states = torch.tensor(states).float()

actions = torch.tensor(actions)

rewards = torch.tensor(rewards).float()

next_states = torch.tensor(next_states).float()

dones = torch.tensor(dones)

Q_targets = rewards + gamma * torch.max(target_model(next_states), dim=1)[0] * (1 – dones)

Q_preds = model(states).gather(1, actions.unsqueeze(1))

loss = criterion(Q_preds, Q_targets.unsqueeze(1))

optimizer.zero_grad()

loss.backward()

optimizer.step()

if epsilon > epsilon_min:

epsilon *= epsilon_decay

if episode % target_update == 0:

target_model.load_state_dict(model.state_dict())

print(f"Episode {episode}, Total Reward: {total_reward}")

# Сохранение обученной модели

torch.save(model.state_dict(), 'pong_dqn_model.pth')

```

Представленный код решает задачу обучения агента в среде Atari "Pong" с использованием алгоритма Deep Q-Networks (DQN) и библиотеки PyTorch. В этой задаче агент должен научиться играть в пинг-понг с оптимальной стратегией, минимизируя количество пропущенных мячей и максимизируя количество выигранных очков. Для этого агенту необходимо выбирать оптимальные действия в зависимости от текущего состояния среды.

Основная идея алгоритма DQN заключается в использовании глубокой нейронной сети для аппроксимации функции Q, которая оценивает значение каждого действия в данном состоянии. Агент использует эпсилон-жадную стратегию для выбора действий, что позволяет ему исследовать среду и принимать оптимальные решения в процессе обучения.

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

После обучения обученная модель сохраняется для дальнейшего использования, что позволяет использовать ее для принятия решений в реальном времени без необходимости повторного обучения. Таким образом, данный подход позволяет агенту обучаться в условиях среды Atari "Pong" и достигать высокой производительности в этой задаче игрового обучения с подкреплением.

5. Задачи обнаружения аномалий

Задачи обнаружения аномалий направлены на поиск аномальных или необычных объектов в наборе данных, которые существенно отличаются от остальных. Некоторые методы решения задач обнаружения аномалий включают в себя:

– Методы на основе статистических показателей (например, Z-оценка)

– Методы на основе машинного обучения (например, метод опорных векторов, методы кластеризации)

Задачи обнаружения аномалий имеют важное значение в различных областях, таких как финансы, кибербезопасность, здравоохранение и производство, где выявление необычных событий или объектов может быть ключевым для предотвращения проблем или обеспечения безопасности системы. Методы обнаружения аномалий направлены на поиск аномальных точек данных, которые не соответствуют обычному поведению или стандартам.

Методы на основе статистических показателей, такие как Z-оценка, представляют собой простой и интуитивно понятный подход к обнаружению аномалий. Основная идея заключается в том, чтобы вычислить стандартное отклонение от среднего значения для каждого признака в наборе данных. Затем для каждой точки данных вычисляется Z-оценка, которая показывает, насколько далеко данная точка отклоняется от среднего значения в единицах стандартного отклонения. Если значение Z-оценки превышает определенный порог, то точка классифицируется как аномалия.

Например, если у нас есть набор данных о температуре в разные дни года, мы можем вычислить среднюю температуру и стандартное отклонение. Затем мы можем вычислить Z-оценку для каждого дня и определить, является ли температура в этот день аномальной, основываясь на пороговом значении Z-оценки.

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

Пример

Давайте рассмотрим пример использования Z-оценки для обнаружения аномалий в наборе данных о росте людей. Предположим, у нас есть данные о росте людей в определенной популяции, и мы хотим выявить аномальные значения роста.

1. Подготовка данных: Первым шагом является загрузка и предварительная обработка данных. Мы вычисляем среднее значение и стандартное отклонение роста в нашем наборе данных.

2. Вычисление Z-оценки: Для каждого индивидуального значения роста мы вычисляем Z-оценку, используя формулу Z = (X – μ) / σ, где X – это значение роста, μ – среднее значение роста, а σ – стандартное отклонение роста.

3. Установка порога: Затем мы устанавливаем пороговое значение Z-оценки. Чаще всего используется значение Z = 3, что означает, что любое значение роста, которое отклоняется от среднего более чем на 3 стандартных отклонения, считается аномальным.

4. Обнаружение аномалий: После вычисления Z-оценок мы просматриваем каждое значение роста и определяем, превышает ли его Z-оценка наш установленный порог. Если да, то это значение роста считается аномалией.

Например, если средний рост в нашем наборе данных составляет 170 см, а стандартное отклонение равно 5 см, то любое значение роста менее 155 см или более 185 см будет считаться аномальным при использовании порогового значения Z = 3.

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

```python

import numpy as np

# Предположим, у нас есть данные о росте людей (в сантиметрах)

heights = np.array([170, 172, 175, 168, 160, 165, 180, 185, 190, 155, 200])

# Вычисляем среднее значение и стандартное отклонение роста

mean_height = np.mean(heights)

std_dev_height = np.std(heights)

# Устанавливаем пороговое значение Z-оценки

threshold = 3

# Вычисляем Z-оценки для каждого значения роста

z_scores = (heights – mean_height) / std_dev_height

# Обнаруживаем аномальные значения роста

anomalies = heights[np.abs(z_scores) > threshold]

print("Аномальные значения роста:", anomalies)

```