Нейронные сети

Ранее  было показано, как построить простую нейронную сеть для изменения ранга результатов в зависимости от того, по каким ссылкам пользователи переходили в прошлом. Эта нейронная сеть смогла обучиться тому, какие слова и в каких сочетаниях важны, а какие вовсе несущественны для конкретного запроса. можно применять к задачам классификации и прогнозирования числовых результатов.

Нейронная сеть применялась в качестве классификатора – она возвращала числовое значение для каждой ссылки и прогнозировала, что пользователь скорее всего перейдет по ссылке с максимальным значением. Поскольку значение возвращалось для каждой ссылки, то их совокупность можно было использовать для ранжирования результатов поиска.

Существует много видов нейронных сетей. Та, что рассмотрена в настоящей книге, называется многоуровневым перцептроном. Своим названием она обязана тому, что имеется входной уровень нейронов, который передают сигналы на один или несколько скрытых уровней. Принципиальная структура сети изображена на рис. 12.3. В этой сети есть два уровня нейронов. Нейроны из разных уровней связаны между собой синапсами, каждому из которых приписан вес. Выходные сигналы от нейронов на одном уровне передаются нейронам

Рис. 12.3. Принципиальная структура нейронной сети

следующего уровня по синапсам. Чем выше вес синапса, исходящего из некоторого нейрона, тем большее влияние он оказывает на выходной сигнал от этого нейрона.

В качестве простого примера снова рассмотрим задачу о фильтрации спама, описанную в разделе «Байесовский классификатор». В нашем упрощенном мире почтовое сообщение может содержать слова online и pharmacy (аптека) по отдельности или вместе. Чтобы определить, какие сообщения являются спамом, необходима нейронная сеть, показанная на рис. 12.4.

Рис. 12.4. Нейронная сеть для классификации спама

Здесь веса синапсов уже установлены для решения данной задачи. (Как это делается, вы увидите в следующем разделе.) Нейроны первого уровня реагируют на слова, выступающие в роли входных сигналов, – если слово присутствует в сообщении, то активируются нейроны, сильно связанные с этим словом. Второй уровень получает сигналы от первого, то есть реагирует на словосочетания.

И наконец нейроны скрытого уровня передают результаты на выходной уровень, а конкретные словосочетания могут быть сильно или слабо связаны с возможными результатами. Окончательное решение принимается исходя из того, какой нейрон выходного уровня получил самый сильный сигнал. На рис. 12.5 показано, как сеть реагирует на слово online, когда оно не сопровождается словом pharmacy (аптека).

Рис. 12.5. Реакция сети на слово online

 

Рис. 12.6. Реакция нейронной сети на словосочетание online pharmacy (онлайновая аптека)

Один из нейронов на первом уровне реагирует на слово online и посылает сигнал на второй уровень, где определенный нейрон обучился распознавать сообщения, содержащие лишь слово online. Синапс этого нейрона, ведущий на нейрон «Не спам» имеет гораздо больший вес, чем синапс, идущий к нейрону «Спам», поэтому сообщение классифицируется как «Не спам». На рис. 12.6 показано, что происходит, когда слова online и pharmacy (аптека) подаются на вход сети вместе. Так как нейроны первого уровня реагируют на отдельные слова, то активируются оба. На втором уровне картина интереснее. Наличие слова pharmacy (аптека) отрицательно влияет на нейрон только online, но оба нейрона первого уровня активируют средний нейрон, который был обучен реагировать на словосочетание online pharmacy (онлайновая аптека). Этот нейрон посылает очень сильный сигнал в категорию «Спам», поэтому документ классифицируется как спам. На этом примере продемонстрировано, как многоуровневая нейронная сеть легко справляется с признаками, которые в разных сочетаниях должны интерпретироваться по-разному.

Обучение нейронной сети

В рассмотренной выше нейронной сети веса синапсов уже были проставлены. Но истинная мощь нейронных сетей состоит в том, что они могут начать работу со случайного набора весов, а затем обучаться на предъявляемых примерах. Наиболее распространенным методом обучения многоуровневых перцептронов является метод обратного распространения .

Чтобы обучить сеть методом обратного распространения, вы начинаете с примера, содержащего только слово online и правильный ответ – в данном случае «Не спам». Этот пример передается нейронной сети, чтобы посмотреть, как она на него прореагирует.

В начальный момент сеть может решить, что ответ «Спам» несколько вероятнее, чем «Не спам»; это неправильно. Чтобы исправить ситуацию, сети сообщают, что результат для категории «Спам» должен быть ближе к 0, а для «Не спам» – ближе к 1. Веса синапсов, ведущих к нейрону «Спам», слегка уменьшаются пропорционально вкладу каждого, а ведущих к нейрону «Не спам» – увеличиваются. Веса синапсов между входным и скрытым уровнем также корректируются в соответствии с тем, какой вклад они вносят в важные узлы выходного уровня. Формулы корректировки приведены ранее. Чтобы предотвратить перекомпенсацию в случае обучения на зашумленных или недостоверных данных, сеть обучают медленно; чем чаще она видела конкретный образец, тем лучше будет его классифицировать в будущем.

Использование ранее написанного кода

Единственная хитрость заключается в том, что в этом коде вместо слов используются числовые идентификаторы, поэтому предварительно всем возможным входным сигналам надо будет сопоставить числа. Обучающие данные хранятся в базе, поэтому просто запускайте программу и начинайте обучение: >>> import nn >>> online,pharmacy=1,2 >>> spam,notspam=1,2 >>> possible=[spam,notspam] >>> neuralnet=nn.searchnet(‘nntest.db’) >>> neuralnet.maketables( )

>>> neuralnet.trainquery([online],possible,notspam) >>> neuralnet.trainquery([online,pharmacy],possible,spam) >>> neuralnet.trainquery([pharmacy],possible,notspam) >>> neuralnet.getresult([online,pharmacy],possible)

[0.7763, 0.2890]

>>> neuralnet.getresult([online],possible) [0.4351, 0.1826]

>>> neuralnet.trainquery([online],possible,notspam) >>> neuralnet.getresult([online],possible)

[0.3219, 0.5329]

>>> neuralnet.trainquery([online],possible,notspam) >>> neuralnet.getresult([online],possible)

[0.2206, 0.6453]

Как видите, чем дольше сеть обучается, тем увереннее она выдает ответы. Она даже может пропустить случайный неправильный пример, сохранив хорошую способность к прогнозированию.

Сильные и слабые стороны

Главный плюс нейронных сетей заключается в том, что они способны справляться со сложными нелинейными функциями и вскрывать зависимости между различными входными данными. Хотя в примере мы подавали на вход только сигналы 1 или 0 (присутствует либо отсутствует), в принципе, годится любое число, и сеть может выдавать числовые оценки на выходе.

также допускают инкрементное обучение и обычно не требуют много места для хранения обученных моделей, так как модель является просто списком чисел, представляющих веса синапсов. Хранить исходные данные для последующего обучения не нужно, а следовательно, нейронные сети пригодны для приложений с непрерывным потоком обучающих данных.

Основной недостаток нейронных сетей в том, что они являются «черным ящиком». Для рассмотренного примера была взята искусственно упрощенная ситуация, когда следить за процессом принятия решения было очень легко, но в реальных сетях имеются сотни нейронов и тысячи синапсов, поэтому понять, как сеть выработала ответ, невозможно. Невозможность ознакомиться с процессом рассуждения для некоторых приложений неприемлема.

Еще один недостаток – отсутствие твердых правил по выбору скорости обучения и размера сети для решения конкретной задачи. Тут необходимо экспериментировать. Если скорость обучения слишком высока, то сеть станет делать излишне общие выводы на основе зашумленных данных, а если слишком мала, то сеть может вообще никогда не обучиться на предъявляемых данных.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100