Чему обучается машина? Понятие
«Рекомендации» от Amazon — гиганта сетевой торговли — используют алгоритм машинного обучения, известный как анализ парных предпочтений (affinity analysis). Это стратегия, цель которой — сделать так, чтобы вы купили еще что-нибудь похожее (перекрестные продажи), что-нибудь более дорогое, или хотя бы сделать вас объектом дальнейших рекламных акций. Работает все это очень просто. Для любого товара, информацию о котором вы ищете (назовем его А), существуют другие товары, которые часто покупают люди, купившие А, — это товары В, С и D. Запрашивая товар А, вы активируете алгоритм анализа парных предпочтений. Он ныряет в море данных о совершенных покупках и появляется оттуда с перечнем парных товаров. Таким образом, он использует свой постоянно пополняющийся банк данных и с каждым разом работает все лучше.
Кому выгодна самосовершенствующаяся часть этой программы? Amazon, разумеется, но и вам тоже. Анализ парных предпочтений — своеобразный помощник покупателя, позволяющий всякий раз при совершении покупок пользоваться обширной статистикой. Amazon ничего не забывает — он постоянно дополняет ваш покупательский профиль и раз от разу все лучше подбирает для вас товары.
Что происходит, когда вы поднимаетесь на ступеньку от программы, способной обучаться, к программе, которая на самом деле развивается, чтобы находить ответы на сложные задачи и даже создавать новые программы? Это еще не осознание себя и не самосовершенствование, но это еще один шаг в этом направлении — программы, которые создают программы.
Генетическое программирование — алгоритм машинного обучения, использующий возможности естественного отбора для поиска ответов на вопросы, на решение которых у человека ушло бы длительное время — возможно, годы. Этот алгоритм используется для написания новаторских, мощных программ.
Такой алгоритм во многих отношениях отличается от более распространенных методик программирования, которые я буду называть
Напротив, программисты, применяющие алгоритм генетического программирования, описывают задачу, которую необходимо решить, и позволяют естественному отбору сделать все остальное. Результаты могут быть поразительными.
Генетическая программа создает кусочки кода, как бы представляющие очередное поколение. Самые перспективные скрещиваются — случайным образом обмениваются блоками кода, давая новое поколение. Пригодность программы определяется тем, насколько близко она подходит к решению поставленной программистом задачи. Непригодные отбрасываются, а лучшие скрещиваются вновь. На протяжении всего процесса программа проводит случайные изменения в отдельных командах и переменных — мутации. Однажды начав, генетическая программа работает сама по себе и не нуждается в человеческом вмешательстве.
Джон Коза из Стэнфордского университета в 1986 г. одним из первых начал заниматься генетическим программированием. Он использовал генетические алгоритмы при проектировании антенны для NASA, разработке программ распознавания белков и конструировании электрических контроллеров общего назначения. Двадцать три раза генетические алгоритмы Козы самостоятельно изобрели электронные компоненты, уже запатентованные людьми; программы работали просто по целевым инженерным спецификациям готовых устройств — это был критерий пригодности. К примеру, алгоритмы Козы изобрели преобразователь напряжения (устройство, используемое при испытаниях электронного оборудования), работавший точнее, чем схема, изобретенная человеком по тем же заданным спецификациям. Однако есть тут одна загадка: никто не может объяснить, как именно схема работает и почему она работает лучше; на первый взгляд, в ней есть лишние и даже ненужные детали.