Здесь уже упоминалось, что первый искусственный нейрон был разработан Уорреном Мак-Каллоком и Уолтером Питтсом в первой половине XX века. Также в то время Фрэнком Розенблаттом была разработана первая архитектура искусственных нейронных сетей – перцептрон. Фактически это самые первые примеры математических моделей и программных систем, разработанных в духе коннективизма. И здесь необходимо отметить, что в процессе развития перцептронов появились некоторые расширения первоначальной модели, предложенной Ф. Розенблаттом. Самый простой классификатор основан на количестве слоёв в перцептроне: однослойный, с одним скрытым слоем (классический) и многослойный. Все эти типы были в своё время описаны самим Ф. Розенблаттом.
Другая классификация включает: элементарный перцептрон, простой перцептрон, перцептрон с последовательными связями, перцептрон с перекрёстными связями, перцептрон с обратными связями, перцептрон с переменными связями. Первые три класса были описаны Ф. Розенблаттом, а следующие три развиты в дальнейшем при детальной проработке модели искусственных нейронных сетей.
Итак, структурный подход основан на идее о том, что наиболее важной для эмерджентного проявления разума и других подобных функций вплоть до сознания является сетевая структура. Это значит, что моделирование должно затрагивать не только базовые элементы типа нейронов, но и их взаимосвязанные сети. При этом полагается, что сеть элементов как сложная система обладает нелинейными свойствами относительно базовых элементов, а потому при увеличении количества взаимосвязанных элементов сложность модели изменяется нелинейно и зачастую даже непредсказуемым образом, так что при переходе некоторого порога сложности как раз и начинают проявляться те самые эмерджентные эффекты, которых мы так ждём. До сегодняшнего дня главным и фактически единственным представителем структурного подхода являются искусственные нейронные сети.
Эволюционный подход реализует так называемую «искусственную эволюцию» и фактически решает оптимизационную задачу поиска значения целевой функции в заданном пространстве решений с установленными ограничениями. Этот подход содержит большое количество эвристических методов, некоторые из которых используются даже для гарантированного нахождения оптимума для мультимодальных недифференцируемых функций в пространствах высоких размерностей. Важным методом эволюционного подхода являются генетические алгоритмы, которые мы рассмотрим чуть позже. Но здесь также есть несколько других важных методов, в числе которых находятся эволюционное программирование и даже нейроэволюция, когда искусственному отбору подвергаются нейронные сети.
Итак, в рамках эволюционного подхода обычно выделяют следующие технологии и методы: эволюционное программирование, генетическое программирование, эволюционные стратегии, генетические алгоритмы, дифференциальная эволюция и нейроэволюция. Другими словами, а что, если вычислительные процессы могли бы эволюционировать так же, как это делают биологические виды в своей экологической среде? Возможно, получилось бы «выращивать» программы для оптимального решения поставленной задачи? Эволюционное программирование как раз и основано на этой идее.
Если же в качестве объектов отбора выступают сами программы, то получается уже генетическое программирование. Ведь, действительно, программы пишутся на определённом языке программирования и в конечном итоге представляют собой строки символов. Эти строки можно подвергнуть генетическим преобразованиям и отбору. Эта очень мощная идея получила своё развитие в том, что программы начали писать и оптимизировать другие программы, и уже исследователи, запустившие процесс, не могут разобрать и интерпретировать полученные исходные коды, которые работают правильно и часто очень эффективно.
Генетические алгоритмы – это наиболее яркий представитель эволюционного подхода. Сами по себе они опять являются одним из эвристических методов оптимизации для поиска оптимального решения (или, как минимум, субоптимального). Они работают с данными, которые могут быть представлены в виде «хромосом» – последовательностей генов, т. е. списков каких-либо значений, к которым можно применить генетические операции. Здесь главное – чтобы на генах были определены эти самые генетические операции, которые возвращали бы приемлемый результат, имеющий смысл.
Мы ещё детально ознакомимся с эволюционными алгоритмами и вообще эволюционным подходом во второй главе.