Читаю про генетические алгооритмы - как и нейронные сети, это перспективный метод искусственного интеллекта.
Как и в случае нейронных сетей, биологи преувеличивают свою значимость в появлении метода. Основная идея эволюционных алгоритмов появилась давным-давно: при решении задачи оптимизации вести поиск оптимума параллельно в нескольких направлениях, оставлять удачные направления поиска и отсеивать неудачные. На этой же идее основан, например, придуманный математиками метод ветвей и границ (хотя биологи и тут могут примазаться - мол, веточки и всё такое...).
Генетические алгоритмы просто добавили к этому идею скрещивания, чтобы в многомерной задаче оптимизации комбинировать удачные решения между собой, и идею случайных мутаций (см. далее).
Кстати, скрещивание - операция непростая, подходить к ней надо индивидуально. Неоднократно читал, как на полном серьёзе предлагают, например, представлять целые числа в виде наборов бит и скрещивать между собой биты. Причём авторы даже не осознают, что в подавляющем большинстве задач такой подход ничем не отличается от полностью случайного выбора числа. Блин, генераторы псевдослучайных чисел так можно делать! Разумеется, все преимущества наследственности при этом теряются. В общем, это пример того, как тиражирование стандартных методов приводит к неэффективным решениям, что в задачах ИИ встречается сплошь и рядом.
Что ещё общего у генетических алгоритмов и нейронных сетей - проблема преждевременной сходимости к неоптимальной точке. Если выбирать начальную популяцию полностью случайно (как и в случае нейронных сетей), она вполне может остановиться в локальном минимуме. Более того, генетические алгоритмы могут остановиться в точке, которая даже не является локальным минимумом! Нейронные сети всё-таки, обычно, обучают методами первого порядка, основанными на градиентах, и там подобное невозможно. Впрочем, и генетические алгоритмы можно загонять в заведомо локальный минимум, если выбирать не случайные точки, а случайные направления, а затем в выбранном направлении решать задачу одномерной минимизации.
Чтобы избежать преждевременной сходимости, используются случайные мутации (в нейронных сетях тоже - там случайно меняют отдельные веса). Опять же, мутировать надо с умом - некоторые на полном серьёзе случайно меняют в числе отдельные биты, не понимая, что это чаще всего эквивалентно случайному изменению числа в целом.
Но, если мутировать слишком часто, могут погибнуть все хорошие значения, близкие к оптимальным, и оптимизацию придётся начинать сначала. Если мутировать слишком редко, мутации при скрещивании поглощаются консервативными решениями и исчезают. Похоже, при росте сложности задачи зазор между "слишком часто" и "слишком редко" уменьшается и в какой-то момент становится нулевым, так что генетические алгоритмы перестают работать. И у нейронных сетей есть та же проблема. В этом случае приходится разбивать сложную задачу на простые подзадачи.
В общем, всё больше понимаю, что есть проблемы, общие для всех направлений ИИ:
- выбор мощности распараллеливания (размер популяции, размер нейросети)
- как комбинировать удачные решения между собой (алгоритм скрещивания, выбор архитектуры сети);
- как часто использовать случайные решения для избежания преждевременной сходимости;
- сколько времени мучаться прежде, чем что-нибудь получится;
- в какой момент сложную задачу нужно разбивать на простые подзадачи.