Г Б О У Г им на з ия № 1 5 0 5 « Мо с ко вс ка я г о р о дс ка я пе да г о г и ч е с ка я г им на з и я л а б о р а т о р и я» Д и пл о м Н е й р о н н ые с е т и . Со з да н ие пе р ц е пт р о на в с р е д е D e l p h i . а вт ор : у ч е ни к 1 0 кл а с с а « А» Х а р л а м о в Да н ии л Р у ко во д ит е л ь: В е т ю ко в Д. А. Мо с к ва 2013-2014 Содержание Введение Глава 1. Нейрон. Нейронная сеть. Перцептрон: 1§Общие сведения об искусственных нейронных сетях и перцептроне в частности 2§ История изучения искусственных нейронных сетей 3§ Примеры использования искусственных нейронных сетей 4§ Классификация перцептронов 5§ Обучение перцептрона Глава 2. Описание программы. Результаты работы. Заключение Приложения Список литературы 2 Введение Актуальность: Искусственные нейронные сети – все больше распространяющийся в современном мире тип программ, являющийся не просто линейным алгоритмом действий, а имитацией биологической нейронной сети, имеющие возможность обучения и даже самообучения. Искусственные нейронные сети используются при создании как таких обыденных вещей, как поисковая программа, так и столь сложных программ как искусственный интеллект. Нейронные сети значительно более «гибкие» в отношении многообразия задач, которые можно решить с их помощью. Цель работы: Разработать и обучить нейронную сеть в виде перцептрона в среде Delphi. Задачи: Изучить теорию искусственных нейронных сетей; Изучить принцип обучения нейронных сетей; Изложить теорию нейронных сетей и обучения; Разработать алгоритм обучения программы; Написать программный код; Попытаться обучить получившуюся нейронную сеть; Сделать вывод на основе результатов работы программы. При написания дипломной работы мною использовались книги «Нейронные сети» и «Математические проблемы в биологии» Беркенблита, а также интернет ресурсы. Диплом состоит из двух частей: теоритической и экспериментальной, заключения, списка литературы и приложений. 3 1 Глава. Теория искусственных нейронных сетей 1§Общие сведения о искусственных нейронных сетях Искусственная нейронная сеть – это математическая или программная модель биологических нейронных сетей – наборов связанных нервных клеток живых существ. Перцептрон состоит из нейронов соединенных между собой. Нейроны делятся на три группы: сенсоры (в дальнейшем S), сумматоры (в дальнейшем A) и реакторы (в дальнейшем R). S элементы реагируют на внешние воздействие и, в зависимости от интенсивности, передают или не передают сигнал. А элементы суммируют приходящие на них сигналы с S элементов с учетом весов связей. Они имеют определенную пороговую величину, если получившаяся сумма превышает её, то далее проходит сигнал, если нет, то сигнал не идет, при этом идущий сигнал принимается за +1, а не идущий за -1. R элементы выдают сигнал +1, если сумма входящих сигналов больше нуля, -1, если сумма меньше нуля и не выдают ответ, если сумма равна нулю. Веса связям между элементами S и A присваиваются случайным образом и могут иметь значения -1, +1 и 0. Веса связей между элементами S и R изначально равны 1 и меняются в ходе обучения. Пример возможного строения нейронной сети показан на рисунке ниже 4 Основным преимуществом нейронной сети относительно классических алгоритмов является её возможность обучаться. При обучении сами нейроны никак не меняются, а изменяется вес связей между ними, подробнее процесс обучения рассмотрим в четвертом параграфе. 2§ История изучения искусственных нейронных сетей Впервые математическая модель нейронной сети была описана в статье У. Маккола и У. Питтса, написанной в 1943 году. А уже в 1949 году канадский психолог и физиолог Д.О. Хебб написал книгу «Организация поведения», в которой описал первый алгоритм обучения нейронных сетей. Им была сформулирована идея обучения за счет изменения силы синоптических связей. Впервые компьютерная модель нейронной сети, описанной Хаббом, была создана в Массачусетском институте в 1954 году Фарли и Кларком. В 1958 году Розенблатт описывает принцип восприятия информации мозгом на основе двухслойной нейронной сети. В 1958 он создает перцептрон, который сразу же набирает популярность, ведутся активные исследования в данной области. В 1969 году М. Минский публикует работу, в которой описаны основные обнаруженные им ограничения использования перцептрона – отсутствие возможности выполнения функции «исключающее ИЛИ» или «сложение по модулю 2» и слишком малые технические возможности компьютеров того времени для создания достаточно масштабных нейронных сетей. После этой публикации интерес к нейронным сетям спал и вновь возродился лишь в 1975 году благодаря созданию Вербосом метода обратного распространения ошибки, дававшего возможность обучения многослойных нейронных сетей и решавшего проблему «сложения по модулю 2». После переоткрытия и существенного развития метода обратного распространения ошибки Дэвидом И. Румельхартом, Дж. Е. Хинтоном и Рональдом Дж. Вильямсом в 1986 году произошел резкий всплеск интереса к обучающимся нейронным сетям, который также может быть обусловлен развитием техники и появлением 5 возможности создавать достаточно сложные нейронные сети на компьютере. В 2007 году британский информатик Джеффри Хинтон, работая в университете Торонто, создал алгоритм глубокого обучения нейронных сетей, основанный на использовании машины Больцмана. Этот метод широко используется в интернет поисковиках, также данный метод используют для распознавания лиц. 3§ Примеры использования искусственных нейронных сетей На данный момент существует множество примеров использования искусственных нейронных сетей. Рассмотрим наиболее распространенные случаи ее применения. Наиболее распространенный на данный момент случай прикладного применения искусственных нейронных сетей – это нейроуправление. Нейроуправление – это частный случай интеллектуального управления, в котором искусственные нейронные сети используются для управления динамическими объектами. Примерами использования нейронных сетей в нейроуправлении являются автопилоты летальных аппаратов, системы управления гибридными двигателями, системы управления роботами и многие другие. Также искусственные нейронные сети используются для предсказания финансовых временных рядов. Для использования нейронной сети таким образом необходимо в качестве входных данных во время обучения использовать курс за предыдущие 3 дня и курс за сегодня, после прохождения обучения программа на основании введенных в нее данных о курсе за предыдущие 2 дня и курсе за сегодня будет делать прогноз о курсе на завтра. Также могут быть добавлены другие вводные при дополнительном обучении. Помимо этого, нейронные хемоинформатике (использование сети активно используются в информатических методов для решения химических проблем). Они применяются для прогнозирования физико6 химических свойств вещества и для дизайна вещества по заданным свойствам. Широко применяется при создании новых лекарств. 4§ Классификация перцептронов Перцептроны делятся на несколько классов: перцептроны с одним скрытым слоем или классические перцептроны, однослойные (простейшие) перцептроны, многослойные перцептроны Розенблатта и многослойные перцептроны Румельхарта. Теперь подробнее о каждом. Перцептрон с одним скрытым слоем является первым описанным Розенблаттом перцептроном имеющим по одному S, A и R слою. Однослойный перцептрон является простейшей моделью перцептрона, где входные элементы соединены напрямую с выходом через синапсы. Таким перцептроном можно считать нейронную сеть, где каждому S элементу соответствует A элемент, все связи имеют вес +1 и все А элементы имеют порог 0. Многослойный перцептрон по Розенблатту - это общее описание перцептронов с более чем одним слоем А элементов, однако обучаемым может быть лишь один слой, у данного типа перцептрона невозможно использование для обучения метода обратного распространения ошибок Многослойный перцептрон по Румельхартру также как и по Розенблатту имеет более одного слоя А элементов, однако в отличии от Розенблатовского в перцептроне Румельхартра все слои обучаемые. Также есть некоторые отличия в архитектуре, так например перцептрон по Румельхартру может иметь произвольное строение. 5§ Обучение перцептрона Существует 3 алгоритма обучения перцептрона: Метод коррекции ошибок, Обучение без учителя и Метод обратного распространения ошибок. 7 Метод коррекции ошибок заключается в ручном обучении перцептрона. Пороги A элементов выбираются случайным образом, связи S-A устанавливаются и в дальнейшем не меняются, а веса связей A-R устанавливаются равными нулю. В ходе обучения представляем перцептрону некоторую информацию, например горизонтальные и вертикальные линии, при этом некоторые A элементы возбуждаются. Примем горизонтальные линии за +1, а вертикальные за -1, тогда веса A-R связей возбудившихся A элементов при показе горизонтальной линии увеличиваются на 1, а веса A-R связей возбудившихся A элементов при показе вертикальной линии уменьшаются на один. Таким образом, сформируется система весов связей. Обучение без учителя основывается на Альфа-системе подкреплений. При таком методе в ходе обучения, перцептрону предоставляется информация, как и в прошлом методе рассмотрим вертикальные и горизонтальные линии. В данном случае при правильном решении, принятом перцептроном, веса всех A-R связей активных A элементов будут меняться на некоторую константу, а веса неактивных не будут меняться. Метод обратного распространения ошибок не рассматривается подробно ввиду своей сложности и большого необходимого количества времени для его применения. 8 2 Глава. Практическая часть В этой главе я бы хотел рассказать о самом создании программы на подобии перцептрона в среде Delphi. Задача, которую должна была решать программа, заключалась в следующем: при запуске программы она получала изображение размером 100х100 пикселей с изображенной на нем горизонтальной или вертикальной линией, после прохождения обучения программа должна была безошибочно разделять линии на 2 класса. Первым шагом в написании программы было создание скелета перцептрона, то есть нейронов и связей между ними имеющих некоторый начальный вес. Для записи начальных весов связей использовались 2 массива размерами 10х10 – в первый записывался изменяющийся вес изначально равный у всех синапсов, изменяя который нейронная сеть обучается, а во второй записывались показатели направленности сигнала. Второй массив использовался для создания тормозящих сигналов, и если первый массив изначально заполнялся только 1, то второй ячейки второго массива заполнялись с помощью рандомизатора и имели значение либо -1, либо +1. Таким образом, часть сигналов имели тормозящий эффект. Также в этой части программы происходила расстановка рецепторов по форме случайным образом, координаты положения рецепторов записывались в 2 массива. Подробная блок-схема этой части программы находится в приложении 1.1. После задания начальных коэффициентов было необходимо создать сам рисунок. Так как для обучения перцептрона требуется большая выборка, я посчитал целесообразным создавать рисунок в ходе работы программы, так решалась еще и проблема передачи правильного ответа перцептрону для обучения. С помощью рандомизатора выбиралось число в промежутке [0;1], исходя из этого рисовалась прямая, проходящая через центр формы шириной в 2 пикселя, вертикальная или горизонтальная. части программы находится в приложении 1.2. 9 Подробная блок-схема этой После того как на форме появлялся рисунок было необходимо проанализировать его для подачи информации на А нейроны. С этой целью был создан еще один массив, в который записывались значения, полученные при анализе рисунка. Так как при общем количестве точек на форме равном десяти тысячам, сто рецепторов не могут дать полной картины, то данные брались не только с самих точек, на которых располагались рецепторы, но и с 3-х соседних с ними точек. Если хотя бы одна из 4-х анализирууемых точек оказывалась черной, в массив заносилась 1, если нет, то 0. Подробная блоксхема этой части программы находится в приложении 1.3. После сбора всех необходимых данных программа должна была суммировать их с учетом знака от второго массива и на основании полученного результата сделать вывод. При суммировании значения из каждой ячейки массива с данными о цвете точек помножались на значение таких же ячеек массива отвечающего за тормозящий или стимулирующий сигнал и складывались между собой. Исходя из полученных результатов программа принимала решение: если сумма оказывалась меньше 0, то программа делала вывод, что линия горизонтальная, если больше, то вертикальная. Если после суммирования в ответе получался ноль (чего ни разу не произошло), то программа сообщала о невозможности сделать вывод, при данных весах. Подробная блок-схема этой части программы находится в приложении 1.4. Когда программа давала ответ, он сравнивался с правильным. Если ответ был, что линия горизонтальная и был верным, то изменение весов рассчитывалось по формуле a[y,z]:=a[y,z]-e[y,z]*b[y,z], где а – массив, содержащий изменяющиеся веса, е – массив значений, полученных при анализе, b – массив, отвечающий за знак, а y и z – переменные указывающие на положение ячейки в массиве. Если же ответ был, что линия вертикальная и был при этом верным, то изменение весов рассчитывается по формуле a[y,z]:=a[y,z]+e[y,z]*b[y,z]. Подробная блоксхема этой части программы находится в приложении 1.5. 10 Общее описание программы отражено в приложении 1.6. Заключение В своей работе я изучил теорию создания перцептрона и основные принципы его обучения. Мною была создана модель перцептрона в среде Delphi, которая, несмотря на нестабильную работу (серьезные различия в длительности обучения), дает результат. 11 Приложения 1.1Блок заполнения массивов весов Начало U=0 I=1 J=1 I<=10 J<=10 A[I,J]=1 P=random(1) нет да P=1 B[I,J]=1 B[I,J]=-1 12 C[I,J]=random(100) D[I,J]=random(100) J=J+1 J=1 I=I+1 Конец 13 1.2Блок создания рисунка начало Image1.Canvas.Rectangle(-1,-1,101,101) R=random(2) нет R=1 Image1.Canvas.Rectangle(0,50,100,51) 14 да Image1.Canvas.Rectangle(50,0,51,100) 1.3Блок-анализатор Начало Y=1 Z=1 Y<=1 Z<=1 Image1.Canvas.Pixels[c[y,z],d[y,z]]=clBlack или Image1.Canvas.Pixels[c[y,z]+1,d[y,z]]=clBlack да или Image1.Canvas.Pixels[c[y,z],d[y,z]+1]=clBlack или Image1.Canvas.Pixels[c[y,z]+1,d[y,z]+1]=clBlack 15 нет E[Y,Z]=1 E[Y,Z]=0 Z=Z+1 Z=1 Y=Y+1 конец 16 1.4Блок суммирования и принятия решения Начало M=1 N=1 M<=10 N<=10 U=U+(E[M,N]*B[M,N]*A[M,N]) нет нет U<0 Label1.Caption=’Горизонтальная’ U>0 да да Label1.Caption=’Вертикальная’ Label1.Caption=’ Нельзя сделать вывод’ 17 1.5Обучающий блок начало Z=1 Y=1 нет да Label1.Caption='Горизонтальная' и R=1 да Z<=10 Label1.caption='Вертикальная' и R=0 Y<=10 Z<=10 a[y,z]:=a[y,z]-e[y,z]*b[y,z] Y<=10 a[y,z]:=a[y,z]+e[y,z]*b[y,z] Y=Y+1 Y=Y+1 Z=Z+1 18 Y=1 Z=Z+1 Y=1 конец 19 1.6Обобщающая блок-схема начало Блок заполнения массивов весов G<=100 Блок создания рисунка Блок-анализатор Блок принятия решения Обучающий блок G=G+1 конец 20 Список литературы 1. Нейронные сети М.Б. Беркинблит, (М.,1993). 2. Принципы нейродинамики. Перцептроны и теория механизмов мозга (М., 1965) 3. С. В. Фомин, М. Б. Беркинблит: Математические проблемы в биологии. (М.: Физматлит, 1973) 21