NeuroPro | нейронные сети |
|
Главная Новости Услуги Нейронные сети Программы Статьи Заметки Ссылки Вопросы и ответы Об авторе / контакты |
Синтез двухслойного перцептрона с пороговыми нейронамиЭто продолжение заметки о существовании алгоритмов обучения всех слоёв многослойной нейронной сети с пороговыми нейронами. Для знакомых с алгоритмом AdaBoost (алгоритмом построения высокоточного решателя в виде коллектива менее точных решателей) или знакомых с алгоритмом каскадной корреляции (и прочими подобными конструктивными алгоритмами построения многослойных нейронных сетей) излагаемая далее идея будет очевидна и понятна. Итак, нужно построить двухслойный перцептрон, состоящий из одного выходного порогового R-нейрона (т.е. перцептрон решает задачу классификации на 2 класса) и из некоторого числа пороговых A-нейронов в скрытом слое. Как и в классическом простом перцептроне Ф.Розенблатта, каждый A-нейрон получает сигналы только от некоторого подмножества сенсорных элементов сети (от некоторого числа пикселов сетчатки в случае распознавания двумерных изображений). Но в отличии от простого перцептрона, дадим возможность A-нейрону иметь непрерывнозначные веса синапсов. Начнём синтез нейронной сети с обучения одного A-нейрона решению поставленной перед нейросетью задачи классификации (обучаем нейрон стандартным алгоритмом обучения перцептрона). Возможно, придётся несколько раз рестартовать задачу обучения, каждый раз выбирая для нейрона новое множество связанных с ним сенсорных элементов - необходимо добиться, чтобы нейрон обучился решать задачу классификации с точностью как минимум >50% правильных ответов. Т.о., каждый новый выбор связанного с нейроном некоторого множества сенсорных элементов является аналогом построения нового нейрона-кандидата в алгоритме каскадной корреляции. Если проводится полный поиск среди возможных наборов соединений сенсорных элементов с нейроном, то выбирается нейрон (вернее, множество сенсорных элементов, с которых он получает сигналы) с наилучшей точностью решения, иначе первый кандидат, превысивший минимально необходимое требование к качеству решения, и становится первым A-нейроном сети. Далее начинаем обучать второй A-нейрон. Множество связанных с ним сенсорных элементов надо выбрать отличным от множества для первого нейрона, требуемая точность обучения - тоже не менее 50% правильных ответов. Если есть желание полностью воспроизвести алгоритм AdaBoost - то обучающая выборка для второго нейрона должна отличаться от исходной обучающей выборки (в ней надо повысить "вес" примеров, на которых первый нейрон ошибался). Аналогичным образом обучаем третий и последующие A-нейроны. После обучения нескольких A-нейронов можно пытаться добавлять к сети R-нейрон. Его обучают или всё тем же алгоритмом обучения перцептрона, или, если алгоритм AdaBoost воспроизводился досконально, веса этого нейрона можно определить явно, исходя из ранее полученных и "запомненных" ошибок обучения A-нейронов. Когда обучение R-нейрона даёт приемлемую точность решения задачи (или когда ошибка обучения перестаёт улучшаться с ростом числа A-нейронов) - синтез нейросети можно считать завершённым (т.е. добавление новых A-нейронов в сеть прекращаем, а обученный R-нейрон окончательно встраиваем в нейросеть), иначе про текущий R-нейрон-"кандидат" можно забыть и продолжить наращивание числа A-нейронов нейросети. Таким образом, можно повторить тезис предыдущей заметки. Пусть квазиоптимальные (обучающие не всю сеть целиком, а обучающие её послойно или понейронно), алгоритмы обучения всех слоев нейросети с пороговыми нейронами существуют. Здесь мы рассмотрели вариант для классического двухслойного перцептрона, в прошлой заметке был упомянут вариант, пригодный для перцептрона с несколькими выходными нейронами, а ещё есть и другие алгоритмы, для этих же или других вариантов искусственных нейронных сетей. |