Эта книга является первой в полном курсе по нейронным сетям. Ее целью является раскрытие основных понятий и изучение основных моделей нейронных сетей с глубиной, достаточной для того, чтобы опытный программист мог реализовать такую сеть на том языке программирования, который покажется ему предпочтительнее. В книге рассматриваются основные модели нейронных сетей, важные для понимания основ изучаемого предмета, и обсуждаются связи между нейронными сетями и традиционными понятиями из области искусственного интеллекта.
Предисловие
Задумайтесь над некоторыми ежедневно выполняемыми задачами. Вы сидите за столом в офисе, а в это время в комнату входит в новой шляпе ваш коллега - мужчина, выглядящий немного помолодевшим от того, что он сбрил бороду. Узнаете ли вы его? Несомненно, поскольку маскировка его целью не является. Он спрашивает вас: "Где книга, которую вы взяли у меня вчера?". Вы помните о книге и интерпретируете вопрос как просьбу вернуть книгу. Вы переводите взгляд на свой стол и видите на ящике с дискетами стопку деловых бумаг, среди которых лежит и та книга, о которой идет речь. Вы протягиваете руку к книге, не задумываясь о движениях, которые при этом должна выполнить ваша рука, извлекаете книгу из стопки с документами и отдаете ее своему коллеге.
Эти ежедневно выполняемые задачи не требуют особых усилий, но каждая из них включает множество точно рассчитанных шагов. Мы должны были бы с благоговением взирать на машину, работающую так же совершенно. Масштабы проблемы создания такой машины можно почувствовать, пытаясь программировать компьютерную систему для распознавания объектов по внешнему виду или другим признакам, в зависимости от контекста, когда приходится анализировать выполняемые действия, планировать движения робота и т.п. Пытаясь решить такие сложные задачи, многие ученые обратили внимание на машины, сходные по принципу работы с нашим собственным компьютером - человеческим мозгом. Такие машины, использующие сети, состоящие из простых обрабатывающих элементов и легко адаптируемые к выполнению совершенно разных задач, называются нейронными сетями. Нейронные сети не программируются, а обучаются тому, как правильно реализовать конкретную задачу.
Нейронные сети оказались очень полезными при решении задач распознавания образов типа идентификации подводных объектов по сигналам гидролокатора или выявления фальшивых кредитных карточек. Число коммерческих приложений, использующих нейронные сети, постоянно растет. Развивается и теоретическая база применения нейронных сетей в так называемых когнитивных задачах типа задач понимания обычного разговорного языка или задач управления движением автономного транспортного средства. Такие задачи высокого уровня сложности долгие годы были предметом изучения дисциплины, областью интересов которой является искусственный интеллект. Теперь выделяют новую область искусственного интеллекта, в рамках которой предпринимаются попытки объединить идеи "традиционного искусственного интеллекта" и идеи теории нейронных сетей. Этот "новый искусственный интеллект" несет в себе большие потенциальные возможности для перехода компьютерных систем на следующий уровень развития.
Данная книга предлагается в качестве первой книги по теории нейронных сетей для студентов старших курсов. Большинство книг по данной тематике предполагает наличие у читателя хорошей математической подготовки. Полностью избежать использования математики при изучении нейронных сетей невозможно, но в данной книге сделана попытка свести использование математического аппарата к минимуму - здесь, в основном, математика используется для сжатого представления алгоритмов. Причем если используемые в книге математические выкладки для кого-то окажутся слишком сложными, читателю предоставлена возможность разобрать имеющиеся примеры, чтобы увидеть, как соответствующие обозначения используются в примерах. Главной целью книги является объяснение базовых концепций теории нейронных сетей, но в ней достаточно подробно рассматриваются и наиболее важные модели нейронных сетей, чтобы опытный программист мог реализовать такую сеть на том языке программирования, который окажется для него предпочтительнее.
В первых шести главах описываются наиболее важные модели нейронных сетей, что должно обеспечить понимание основ изучаемого предмета. Эти шесть глав занимают чуть более двух третей книги. У нас возникало искушение расширить использование математического аппарата и алгоритмов в этих главах, но это могло бы сузить круг читателей книги. Поэтому представление материала в некоторых частях книги было сознательно сжато, а объем разделов с примерами - увеличен. Например, алгоритм обратного распространения ошибок, о котором идет речь в главе 2, из представленных в книге алгоритмов является, вероятно, наиболее трудным для понимания, но вместе с тем этот алгоритм оказывается очень простым, если рассмотреть примеры его реализации на практике. По этой причине в дополнение к некоторым простым примерам в конце глав предлагаются более сложные. Читатель может также обратиться к приложению A, где в краткой форме излагаются необходимые сведения из области линейной алгебры, а также разъясняются некоторые обозначения, используе
В дополнение к материалу данной книги предлагается Web-страница, размещенная по адресу http://www.solent.ac.uk/syseng/faculty/html/staff/rcallan/essnn, где можно найти и программное обеспечение по нейронным сетям, которое читатель может использовать на своем компьютере.
Р. Каллан.
Благодарности
Я хотел бы поблагодарить Доминик Палмер-Браун (Dominic Palmer-Brown) за ряд полезных замечаний, касающихся глав 7 и 8. Благодарю за помощь Джона Флакетта (John Flackett), особенно за предложенную им схему рекурсивной автоассоциативной памяти, представленную в главе 8. Благодарю Дейва Парсонса (Dave Parsons) за его полезные комментарии к первым двум главам. Я также благодарю за поддержку Хешама Аззама (Hesham Azzam), с которым я работаю уже много лет. Наконец, я хотел бы поблагодарить рецензентов за их ценные рекомендации, позволившие улучшить окончательный вариант текста книги по сравнению с исходным, и Джеки Харбор (Jackie Harbor) из Prentice Hall за помощь и поддержку.
Введение
Искусственные нейронные сети представляют собой устройства параллельных вычислений, состоящие из множества взаимодействующих простых процессоров. Такие процессоры обычно исключительно просты, особенно в сравнении с процессорами, используемыми в персональных компьютерах. Каждый процессор подобной сети имеет дело только с сигналами, которые он периодически получает, и сигналами, которые он периодически посылает другим процессорам, и, тем не менее, будучи соединенными в достаточно большую сеть с управляемым взаимодействием, такие локально простые процессоры вместе способны выполнять довольно сложные задачи.
Разработка искусственных нейронных сетей началась еще на заре ХХ столетия, но только в 90-х годах, когда были преодолены некоторые теоретические барьеры, а вычислительные системы стали достаточно мощными, нейронные сети получили широкое признание. Слово "искусственные" в данном контексте иногда используется для того, чтобы подчеркнуть, что речь идет об искусственном устройстве, а не о реальных биологических нейронных системах типа той, которую имеет человек. Создание искусственных нейронных сетей было инспирировано попытками понять принципы работы человеческого мозга и, без сомнения, это будет влиять и на дальнейшее их развитие. Однако, в сравнении с человеческим мозгом, искусственные нейронные сети сегодня представляют собой весьма упрощенные абстракции. Когда ясно, в каком контексте обсуждаются эти сети, слово "искусственный" обычно опускают. Кроме того, когда требуется подчеркнуть вычислительные возможности, а не биологическое соответствие, искусственные нейронные сети называют коннекциями. При этом цел
Хотя нейронные сети могут быть реализованы в виде быстрых аппаратных устройств (и такие реализации действительно существуют), большинство исследований выполняется с использованием программного моделирования на обычных компьютерах. Программное моделирование обеспечивает достаточно дешевую и гибкую среду для поиска и проверки исследовательских идей, а для многих реальных приложений такое моделирование оказывается вполне адекватным и достаточным. Например, программная реализация нейронной сети может использоваться для составления плана кредитных выплат индивидуума, обращающегося в банк за займом. Хотя решение на основе нейронной сети может выглядеть и вести себя как обычное программное обеспечение, они различны в принципе, поскольку большинство реализаций на основе нейронных сетей "обучается", а не программируется: сеть учится выполнять задачу, а не программируется непосредственно. На самом деле в большинстве случаев нейронные сети используются тогда, когда невозможно написать подходящую программу, или по при
Решения на основе нейронных сетей становятся все более совершенными и, несомненно, в будущем наши возможности по разработке соответствующих устройств возрастут за счет лучшего понимания их основополагающих принципов. Но уже сегодня имеется немало впечатляющих разработок. База приложений нейронных сетей просто огромна: выявление фальшивых кредитных карточек, прогнозирование изменений на фондовой бирже, составление кредитных планов, оптическое распознавание символов, профилактика и диагностика заболеваний человека, наблюдение за техническим состоянием машин и механизмов, автоматическое управление движением автомобиля, принятие решений при посадке поврежденного летательного аппарата и т.д. Дальнейшие успехи в разработке искусственных нейронных сетей будут зависеть от дальнейшего понимания принципов работы человеческого мозга, но здесь имеется и обратная связь: искусственные нейронные сети являются одним из средств, с помощью которых совершенствуется наше представление о процессах, происходящих в нервной систе
Будущее нейронных сетей кажется вполне ясным, и сегодня это та область знаний, о которой должны иметь определенное представление все научные специалисты, работающие в области компьютерных технологий, равно как и многие инженеры и научные работники смежных специальностей.