Учебное пособие по курсу «Нейроинформатика»
Шрифт:
Задачник должен быть организован по страницам. В начале каждой страницы в отдельной строке следует указать количество сначала «красных», потом «синих» примеров, расположенных на этой странице. Каждое из этих чисел должно быть не больше 20. После каждого примера в отдельной строке вводится буква R или L в зависимости от класса примера.
После составления задачника можно приступать к созданию нейросети и ее обучению.
Создание нейросети
В пакете CLAB имеется программа netgener, предназначенная для генерации нейросети.
SIZE — количество нейронов сети;
TIME — число тактов времени от получения входных сигналов до выдачи результата;
CH — параметр характеристической функции;
STEP — начальный шаг движения по антиградиенту;
HIGH и LOW — параметры, определяющие уровни начальных значений весов синапсов.
Относительно значений вводимых параметров можно дать следующие рекомендации.
Очевидно, что значение параметра SIZE должно быть не меньше числа входных сигналов. Кроме того, оно должно быть не больше 64. Опыт показывает, что лучше задавать его по возможности меньшим. Можно порекомендовать задавать значение параметра SIZE равным сумме числа входных и выходных нейронов (т. е. на 2 большим, чем число входных сигналов).
Значение параметра TIME также лучше задавать по возможности меньшим. Можно задать его равным 3, а в случае необходимости увеличить.
Для параметра CH мы рекомендуем значения от 0,1 до 0,8. Следует заметить, что большие значения этого параметра требуют, как правило, больше времени на обучение, но при этом улучшаются предсказательные возможности нейросети. Другими словами, при малых значениях характеристики нейросеть легко «натаскивается» выдавать правильные ответы для входных векторов, встречавшихся ей в процессе обучения, но способность к экстраполяции на область примеров не включенных в задачник при этом хуже.
Значение параметра STEP можно задавать равным 0,005. В процессе счета программа сама подберет для него нужное значение.
Начальные значения весов синапсов генерируются датчиком псевдослучайных чисел в диапазоне от LOW до HIGH. Рекомендуется задавать значение этих параметров близким к значению параметра CH.
Обучение нейросети
Для обучения нейросети в пакете CLAB содержится программа teacher. Вначале она предлагает пользователю указать имя файла, содержащего карту синапсов, имя ptn-файла и имя файла задачника. Затем программа переходит непосредственно к обучению нейросети на примерах задачника.
Выходные сигналы могут принимать значения в интервале (-1,1). Они интерпретируются как координаты точки внутри квадрата [-1,1]*[-1,1]. Как только программа Teacher приступает к обучению, этот квадрат высвечивается на левой половине экрана. На нем крестиками изображаются ответы нейросети. Для каждого примера координаты крестика соответствуют выходным сигналам нейросети. Цвет крестика (красный либо синий) показывает класс этого примера, указанный в задачнике.
На этом же квадрате указаны два курсора — красный и синий. Стандартное положение красного курсора — в левом нижнем углу, синего — в правом верхнем. В процессе обучения курсоры
В правой половине экрана высвечиваются две колонки. В левой колонке указываются веса и значения целевой функции для «красных» примеров, в правой колонке — для «синих».
После завершения каждого цикла накопления оценки по примерам с данной страницы в нижней части экрана высвечиваются значения средних оценок для «красных» и «синих» примеров, а также средняя оценка для всех примеров. Если пользователь сочтет эти оценки приемлемыми, то он может перейти к следующей странице задачника.
В пакете CLAB имеются средства, позволяющие вмешиваться в процесс обучения для его ускорения.
Как было сказано выше, пользователь может изменять положение курсоров. Это приводит к изменению вида целевой функции. Такое действие может оказаться полезным в случае, когда на протяжении нескольких циклов обучения подряд оценка существенно не меняется.
Опыт работы с пакетом показывает, что на конечном этапе обучения небольшое улучшение оценки на одной странице задачника может привести к ухудшению оценок на других страницах. Поэтому на этапе доучивания можно сблизить курсоры Это ослабит жесткость требований к разделенности классов.
Можно приблизить курсор к ближайшему крестику того же цвета, т. е. крестику, соответствующему примеру с наименьшей оценкой. Тогда вклад этого примера в суммарный градиент уменьшится, а вклад примеров с худшими оценками увеличится. В результате крестики этого цвета будут собираться более плотной группой.
Изменять относительный вклад градиентов от разных примеров можно также путем изменения их весов. Стандартные значения весов задаются для всех примеров равными 1. Их можно изменять в интервале от 0 (это соответствует полному исключению примера) до 9. Однако задавать большой разброс в значениях весов не рекомендуется. В этом случае при небольшом улучшении оценки примера с большим весом могут существенно ухудшиться оценки других примеров. Опыт показывает, что в большинстве случаев достаточно задать для двух-трех примеров с наихудшими оценками значения весов, равные 2.
В случаях, когда целевая функция достигает локального минимума, возникают тупиковые ситуации — на протяжении многих циклов подряд оценка практически не изменяется. Для выхода из таких ситуаций в пакете CLAB имеется процедура BUMP. Она вносит в карту синапсов случайный вклад, величина которого, называемая уровнем BUMP'а, задается при вызове процедуры.
Отметим интересный эффект, который наблюдался при обучении нейросети с частым применением процедуры BUMP. В этом случае сеть постепенно приобретала помехоустойчивость, т. е. со временем уровень BUMP'ов можно было повышать без существенного ухудшения оценки. Этот эффект можно легко объяснить. Представим целевую функцию как рельеф в многомерном пространстве карт синапсов. Понятно, что применение процедуры BUMP позволяет легко выходить из узких ям и оврагов, но для вывода из широких долин уровень BUMP'ов может оказаться недостаточным. В результате частого применения процедуры сеть закрепляется на широкой долине.