Обратное распространение ошибки - не
единственный метод обучения нейронной сети, хотя
и наиболее часто используемый. Когда я только
начинал свое знакомство с нейронными сетями, то
не мог добиться, чтобы обратное распространение
работало. Поэтому я решил тогда воспользоваться
другим методом.
Это была идея, обсуждение которой я видел на
каком-то телеканале, и она показалась мне
достаточно разумной. В конце концов, эволюция
привела к появлению самой совершенной нейронной
сети - человеческого мозга, - так почему бы не
поработать с небольшой моделью такого рода
эволюции.
Метод состоит в том, что имеется некоторая "популяция"
сетей, все с различными случайными весовыми
коэффициентами и пороговыми уровнями. ВЫ
заставляете каждую из них обрабатывать
тренировочный набор данных. В результате
получаете полный хаос и неразбериху в выходных
наборах. Однако, часть нейронных сетей менее
неправильно вычисляет треубемые значения.
Для каждой сети существует счет - сумма общих
ошибок данной сети. Напрмиер, если сеть должна
выдавать на выходе два значения - 1 и 0, но
выдает 0.3 и 0.1, то общая ошибка будет равна (1-0.3) +
(0.1-0) = 0.8. Эти самые ошибки и складываются для всех
входных наборов данных.
В конце каждого цикла обучения ошибки сетей
сравниваются. Сети с наихудшими показателями (ошибки
максимальны) - уничтожаются, с наилучшими -
используются для "вскармливания" следующих
поколений. Вот пример:
Предположим, что имеется популяция из 8 сетей,
тестируемая на "словаре" из 10 наборов данных.
Общая ошибка для каждой сети представлена в
таблице
сеть |
общая ошибка |
1 |
1.00431 |
2 |
2.65520 |
3 |
1.35425 |
4 |
1.94233 |
5 |
1.35462 |
6 |
0.97766 |
7 |
1.38752 |
8 |
1.17584 |
Только часть этих сетей будет использоваться в
дальнейшем. В данном случае выберем две штуки (6 и
1) и копируем их в другие слоты (2, 3, 4 и т.д.), при
этом слегка их изменяя. Это и есть те "мутации",
которые должны улучшить качество расчетов.
Мутации, вызывающие увеличение ошибок, -
отбрасываются.
Работает ли эта идея. - Да, она действительно
работает, но очень медленно! Если вы думаете, что
метод обратного распространения медленный, то
сравните с этим монстром. То, что может быть
сделано с помощью обратного распространения за
полчаса, займет всю ночь.
Также этот метод требует большого количества
памяти. Вместо того, чтобы работать с одной сетью,
вам придется следить за целой популяцией, что
уменьшает размеры каждой сети. Чем больше сетей в
популяции, тем меньших размеров они должны быть,
с другой стороны, чем больше популяция, тем
больше количество положительных мутаций. Вот
почему в примере используются сети с небольшим
количеств узлов.
|