Обучение - первые результаты
Подводим итоги
Итак, после массы исправлений, так что по логам процесс обучения стал по крайней мере выглядить очень и очень прилично, была проведена серия запусков для тренировки нейросети. В сумме мы вызвали функцию trainNetworkOnCurrentPosition почти 40000 раз. На плохом железе (процессор без поддержки AVX2, критичной для Lib Torch) весь процесс занимает всего несколько часов.
По игровым метрикам наблюдается устойчивый прогресс:
- Начальный winrate: ~0–5% (Указывает, как часто нейронке удавалось обыграть legacy supervisor tree)
- После первых исправлений: ~15–20%
- Текущее состояние: ~30–35% против legacy-алгоритма
Это означает, что нейросеть уже не играет случайно, а демонстрирует осмысленную стратегию, хотя пока уступает более детерминированному алгоритму.
Текущая фаза обучения
Судя по логам, сеть находится в фазе:
🟢 Стабилизация и дообучение (mid-training / refinement stage)
На это указывают следующие параметры:
- Стабилизация loss: среднее значение ~1.6–2.0
- Малый delta (ошибка value): часто 0.01–0.1
- Высокий spread: 1–4 (есть различие между ходами)
- Рост winrate замедляется
Это типичная стадия, когда сеть уже выучила базовые закономерности и начинает улучшать качество решений.
Вывод
На текущий момент обучение идёт корректно и находится в зрелой стадии:
- Value head почти полностью обучена
- Policy head продолжает улучшаться
- Общие слои адаптируются под задачи выбора хода
- Игра становится всё более осмысленной
Дальнейший прогресс будет происходить медленнее и зависеть в первую очередь от:
- качества обучающих данных (дерева)
- разнообразия позиций
- точности policy
И снова об архитектуре
Для лучшего понимания, поговорим о наиболее часто встречающихся вопросах.
Архитектура нейросети
Нейросеть состоит из трёх частей:
- Общие слои (conv1–conv3)
- Policy head
- Value head
Общие слои — это единый "экстрактор признаков", на котором работают обе головы.
Общие слои (feature extractor)
- Вход: 2 канала (текущий игрок / противник)
- Размер: 15 × 15
- Conv1: 2 → 64
- Conv2: 64 → 64
- Conv3: 64 → 128
Эти слои извлекают признаки игрового поля.
Policy head
- Conv: 128 → 2
- FC: 2 × 15 × 15 → 225
- Выход: 225 значений (по одному на клетку)
Это распределение вероятностей ходов.
Value head
- Conv: 128 → 1
- FC1: 225 → 64
- FC2: 64 → 1
- Выход: одно число (оценка позиции)
Как две головы совместно обучаются и принимают решение, и что происходит на данной фазе?
На ранних этапах сеть учится распознавать базовые паттерны. Сейчас же:
- Value head уже хорошо предсказывает оценку позиции
- Policy head продолжает учиться выбирать лучшие ходы
- Обучение становится менее хаотичным и более точечным
Как понять, что value head уже обучилась
По логам можно увидеть:
- Значения value ≈ target
- Очень маленькая ошибка (delta ≈ 0.01–0.1)
- Стабильные предсказания
Как понять, что policy head ещё обучается
- Policy loss остаётся относительно высоким (1–4)
- Иногда сеть ошибается в выборе хода
- Winrate растёт медленно
Таким образом:
- Value head — почти обучена
- Policy head — основной источник дальнейшего прогресса
Как нейросеть принимает решение (какую голову использует)
При выборе хода используется policy head.
Алгоритм:
- Сеть делает forward pass → получает (policy_logits, value)
- Policy преобразуется через softmax → вероятности ходов
- Недопустимые ходы обнуляются
- Выбирается argmax — лучший ход
Таким образом:
- Policy head отвечает за выбор действия
- Value head не участвует напрямую в выборе хода
Но value всё равно важен
Value head участвует в обучении policy:
- Она формирует оценки позиций
- На основе этих оценок строится target для policy
То есть:
Value → обучает Policy → Policy делает ход
Что происходит, если одна голова обучилась раньше
Это ключевой момент.
Если value head уже обучилась, а policy — нет:
- Value почти не даёт градиентов
- Policy продолжает обучаться
- Общие слои всё равно обновляются
Почему?
Потому что градиенты от policy проходят через общие слои.
Это означает:
- Feature extractor продолжает адаптироваться
- Он начинает лучше обслуживать policy
Следствие
Общие слои становятся:
- менее универсальными
- более специализированными под выбор ходов
Это нормальный и ожидаемый процесс.
Почему Value Head обучается быстрее Policy Head в нейросети для Гомоку
При обучении нейросети с двумя головами (Value и Policy) практически всегда наблюдается одна и та же картина: Value head обучается быстрее, чем Policy head. Это не ошибка и не проблема — это нормальное и ожидаемое поведение. Разберёмся, почему так происходит и что это означает для обучения.
1. Разная сложность задач
Value head
Решает задачу регрессии — предсказывает одно число:
- Оценка позиции
- Диапазон: от проигрыша до выигрыша
Policy head
Решает задачу выбора действия:
- 225 возможных ходов (на поле 15×15)
- Нужно распределить вероятности
👉 Это ключевое различие:
- Value → простая задача (1 выход)
- Policy → сложная задача (много выходов)
2. Качество обучающего сигнала
Value target
- Одно число
- Стабильное
- Плавно изменяется
✔ Чистый и надёжный сигнал обучения
Policy target
- Распределение вероятностей
- Зависит от top-K ходов
- Зависит от температуры (T)
- Зависит от spread
❌ Более шумный и нестабильный сигнал
👉 В результате: Value обучается быстрее, потому что получает более “чистые” данные.
3. Размер пространства решений
- Value: 1 выход
- Policy: 225 выходов
👉 Policy должна распределить вероятности по большому количеству вариантов, что значительно усложняет обучение.
4. Различие в градиентах
Value
Использует MSE (среднеквадратичную ошибку):
- Стабильный градиент
- Предсказуемое поведение
Policy
Использует softmax + log:
- Более сложная поверхность ошибки
- Чувствительность к масштабу
- Влияние температуры
👉 Это делает обучение policy менее стабильным.
5. Как это проявляется на практике
Типичная картина логов:
- Value: быстро сходится (ошибка → 0.01–0.1)
- Policy: продолжает обучаться (loss остаётся выше)
👉 Это означает:
- Value head уже хорошо понимает позиции
- Policy head ещё учится выбирать лучшие ходы
6. Это проблема или норма?
Это абсолютно нормально и даже желательно.
Почему это хорошо:
- Value формирует качественную оценку позиций
- Policy использует эту оценку для обучения
- Обучение становится стабильным
👉 Связь выглядит так:
Value → формирует target → обучает Policy
7. Что происходит внутри сети
Сеть состоит из трёх частей:
- Общие слои (conv1–conv3)
- Policy head
- Value head
Общие слои обучаются от обеих голов одновременно.
Если Value уже обучена:
- Она даёт меньше градиентов
- Policy начинает доминировать
- Общие слои адаптируются под выбор ходов
👉 Это нормальный переход фокуса обучения.
8. Типичная динамика обучения
Процесс обычно проходит через следующие стадии:
- Value быстро обучается
- Policy начинает учиться
- Value стабилизируется
- Policy догоняет
- Медленное улучшение игры
👉 В большинстве случаев сеть проводит значительную часть времени именно в фазе обучения policy.
9. Когда это может быть проблемой
Редкие случаи, когда value НЕ обучается быстрее:
- Плохие или шумные данные из дерева
- Неправильный знак или масштаб value
- Сильный перекос loss в сторону policy
В таких случаях обучение может замедлиться или стать нестабильным.
10. Вывод
- ✔ Value head почти всегда обучается быстрее
- ✔ Это нормальное поведение
- ✔ Это делает обучение более стабильным
- ✔ Основной рост качества игры происходит через policy
👉 Практический вывод:
Если value уже обучилась, а policy — нет, значит обучение идёт правильно, и дальнейший прогресс будет зависеть от улучшения выбора ходов.
