Этот пост является частью 12-месячного проекта ускоренного обучения Month to Master. На октябрь моя цель - победить чемпиона мира Магнуса Карлсена в шахматной партии.

Вчера я столкнулся с небольшой проблемой: моя шахматная программа в том виде, в котором она существует сейчас, не поможет мне стать гроссмейстером. Напротив, это поможет мне правильно определять шахматные ходы как хорошие или плохие только в 70% случаев, что хуже, чем у меня, как у шахматиста-любителя.

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

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

Фактически, я был бы чрезвычайно удачлив (или умен…?), Если бы первый алгоритм (или класс алгоритмов), который я попробовал, был функциональным. Чаще всего, пытаясь создать новые технические решения, требуется несколько или больше итераций, чтобы найти работоспособное решение.

Конечно, это не случайные итерации. Мне все еще нужно хорошо продумать, что я попробую дальше…

Итак, что мне попробовать дальше?

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

1. Постройте лучшую модель

Используйте тот же набор данных, но постройте более надежную модель, используя сверточные нейронные сети. Начните с очень сложной модели, даже если она неприемлема для исполнения человеком, просто чтобы посмотреть, можно ли вообще создать высокопроизводительный алгоритм. Если это возможно, то постепенно уменьшайте сложность модели до тех пор, пока она не будет работать на уровне Магнуса Карлсена, и надейтесь, что эту (или некоторую ее оптимизированную версию) сможет изучить и исполнить человек. Если нет, значит, мой набор данных некачественный, и мне нужно попробовать вариант №2.

2. Создайте лучший набор данных.

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

Вот мой план продвижения вперед:

  1. Создайте сверточную нейронную сеть и пропустите через нее мой текущий набор данных.
  2. Таким образом, подтвердите или аннулируйте совершенство моего набора данных.
  3. Предполагая (очень сильно), что проблема в моем наборе данных, создайте новый набор данных и прогоните его через сверточную нейронную сеть.
  4. Продолжайте этот процесс, пока я не найду хороший набор данных.
  5. Затем начните отбрасывать модель (то есть сверточную нейронную сеть), пытаясь сохранить производительность.
  6. Если модель может быть уменьшена так, чтобы ее мог выполнять человек, без чрезмерного ущерба для производительности, уезжайте в закат (и под этим я имею в виду ... потратьте нелепое количество времени и умственных способностей на изучение и отработку полученного алгоритма) .
  7. Если модель не может быть уменьшена без ущерба для производительности, попробуйте найти другой хороший набор данных.

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

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

Прочтите следующий пост. Прочтите предыдущий пост.

Макс Дойч - одержимый ученик, создатель продукта, подопытный кролик в Месяце до мастера и основатель Openmind.

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