🔴 Сложный ⏱️ 25 минут

Particle Swarm Optimization: стайный интеллект в действии

Particle Swarm Optimization: стайный интеллект в действии

🎯 Зачем это нужно?

Представь, что ты играешь в Pokemon GO и видишь стаю птиц, которая ищет еду 🐦. Каждая птица летит по своей траектории, но при этом:

  • следит за тем, где она сама нашла больше всего еды
  • смотрит, где вся стая находит лучшие места
  • корректирует свой полёт, учитывая оба фактора

Именно так работает Particle Swarm Optimization (PSO) - один из самых элегантных алгоритмов оптимизации!

💼 Где используется в реальности:

  • Netflix оптимизирует рекомендательную систему через PSO
  • Tesla настраивает параметры автопилота
  • Spotify подбирает идеальные плейлисты
  • Игровая индустрия - настройка ИИ противников в играх

📚 История вопроса

В 1995 году два исследователя - Джеймс Кеннеди (психолог) и Рассел Эберхарт (инженер) - наблюдали за стаей птиц. Они заметили удивительную вещь: птицы находят еду не случайно, а используя коллективный разум!

Каждая птица запоминает:

  • Личный рекорд - где она сама нашла лучшую еду
  • Глобальный рекорд - где вся стая нашла самое вкусное место

Комбинируя эти знания, стая эффективно исследует пространство. Так родился PSO! 🧠

💡 Интуиция

[МЕДИА: image_01] Описание: Визуализация стаи птиц в поиске еды с траекториями полёта и лучшими найденными позициями Промпт: “educational illustration showing flock of birds searching for food, flight trajectories, personal best positions marked with green dots, global best with gold star, clean scientific style, blue sky background”

Представь, что у тебя есть 20 дронов, которые ищут лучшее место для селфи на горе 📷. Каждый дрон:

  1. Летит со своей скоростью в определённом направлении
  2. Помнит лучшее место, которое он сам нашёл (личный рекорд)
  3. Знает о лучшем месте всей группы (глобальный рекорд)
  4. Корректирует траекторию, учитывая оба фактора

Дроны не просто летают хаотично - они учатся друг у друга и постепенно сходятся к оптимальному решению!

📐 Формальное определение

PSO работает с роем частиц, где каждая частица i характеризуется:

  • Позицией x_i(t) - текущее местоположение в пространстве поиска
  • Скоростью v_i(t) - направление и скорость движения
  • Личным рекордом p_i - лучшая позиция, найденная этой частицей
  • Глобальным рекордом g - лучшая позиция, найденная всем роем

Уравнения обновления:

Скорость: v_i(t+1) = w·v_i(t) + c₁·r₁·(p_i - x_i(t)) + c₂·r₂·(g - x_i(t))

Позиция: x_i(t+1) = x_i(t) + v_i(t+1)

Где:

  • w - инерционный вес (momentum)
  • c₁, c₂ - коэффициенты ускорения
  • r₁, r₂ - случайные числа от 0 до 1

🔍 Примеры с разбором

Пример 1: Поиск минимума функции f(x,y) = x² + y²

[МЕДИА: image_02] Описание: 3D график функции с частицами PSO, показывающими траектории движения к глобальному минимуму Промпт: “3D visualization of PSO optimization, paraboloid function surface, colorful particles with trails showing movement paths toward global minimum, mathematical coordinate system, modern scientific style”

Шаг 1: Инициализация

  • 10 частиц в случайных позициях: x₁=(-2,3), x₂=(1,-1), …
  • Начальные скорости: v₁=(0.5,-0.2), v₂=(-0.3,0.4), …
  • Параметры: w=0.7, c₁=c₂=2.0

Шаг 2: Первая итерация Частица 1: x₁=(-2,3), f(-2,3) = 4+9 = 13

  • Личный рекорд p₁ = (-2,3) с f=13
  • Глобальный рекорд g = (-2,3) с f=13 (пока лучший)

Шаг 3: Обновление скорости частицы 1 v₁(new) = 0.7·(0.5,-0.2) + 2·0.6·((-2,3)-(-2,3)) + 2·0.8·((-2,3)-(-2,3)) v₁(new) = (0.35, -0.14) + (0,0) + (0,0) = (0.35, -0.14)

Шаг 4: Новая позиция x₁(new) = (-2,3) + (0.35,-0.14) = (-1.65, 2.86)

После 50 итераций все частицы сходятся к (0,0) - глобальному минимуму! ✅

Пример 2: Настройка гиперпараметров нейросети

Допустим, мы оптимизируем learning_rate и batch_size для CNN:

# Particle Swarm для настройки гиперпараметров
def fitness_function(params):
    lr, batch_size = params[0], int(params[1])
    model = create_model(learning_rate=lr, batch_size=batch_size)
    accuracy = train_and_validate(model)
    return -accuracy  # минимизируем, поэтому отрицательная точность

# PSO находит: lr=0.001, batch_size=32 за 20 итераций
# Точность выросла с 85% до 94%! 🚀

🎮 Практика

Базовый уровень 🟢

Задание 1: Есть функция f(x) = x² - 4x + 7. Если частица находится в позиции x=5 со скоростью v=0.3, а её личный рекорд p=1, глобальный рекорд g=2, w=0.5, c₁=c₂=2, r₁=0.6, r₂=0.4. Найди новую скорость.

Задание 2: Почему в формуле скорости используются случайные числа r₁ и r₂?

Задание 3: Объясни, что будет, если w=0? А если w=1?

Продвинутый уровень 🟡

Задание 4: Реализуй PSO для функции Растригина: f(x,y) = 20 + x² + y² - 10(cos(2πx) + cos(2πy))

Задание 5: Сравни PSO с генетическим алгоритмом: в чём плюсы и минусы каждого?

Задание 6: Как выбрать размер роя для оптимизации функции 100 переменных?

Челлендж 🔴

Задание 7: Модифицируй PSO для дискретной оптимизации (когда переменные могут быть только целыми числами).

Задание 8: Придумай способ адаптивного изменения параметров w, c₁, c₂ в процессе оптимизации.

⚠️ Частые ошибки

Ошибка: Слишком большие коэффициенты c₁, c₂ (например, 5.0) ✅ Правильно: Обычно c₁ + c₂ ≈ 4, каждый около 2.0 💡 Почему: При больших коэффициентах частицы “перелетают” оптимум

Ошибка: Фиксированный инерционный вес w на всё время ✅ Правильно: Уменьшать w от 0.9 до 0.4 в процессе оптимизации
💡 Почему: Вначале нужно исследование (большое w), потом эксплуатация (малое w)

Ошибка: Слишком маленький рой (5-10 частиц) для сложных функций ✅ Правильно: 20-40 частиц для функций высокой размерности 💡 Почему: Мало частиц = плохое покрытие пространства поиска

🎓 Главное запомнить

Суть: PSO имитирует поведение стаи - каждая частица учится у себя и у группы ✅ Формула: v = w·v + c₁·r₁·(personal_best - x) + c₂·r₂·(global_best - x)
Применение: Оптимизация гиперпараметров, нейросетей, инженерных задач

🔗 Связь с другими темами

Назад: Из градиентного спуска (урок 296) мы знаем детерминированную оптимизацию. PSO добавляет стохастичность и роевое поведение.

Вперёд: PSO - основа для изучения других метаэвристик: муравьиные алгоритмы, дифференциальная эволюция, имитация отжига.

Связи: PSO часто комбинируют с глубоким обучением для AutoML - автоматического выбора архитектуры нейросетей.

Понял тему? Закрепи в боте! 🚀

Попрактикуйся на задачах и получи персональные рекомендации от AI

💪 Начать тренировку
💬 Есть вопрос? Спроси бота!