Алгоритмы сокращения (pruning algorithms)
Алгоритмы сокращения используются для минимизации структуры нейросети [4]. Т.е. если в ходе обучения сформировалась такая структура, в которой часть весовых коэффициентов близки к нулю и очень мало влияют на результат, вероятно, их можно безболезненно сократить, сделав таким образом сеть более "экономичной" (требующей меньшего объема вычислений и "непереобученной").
Алгоритмы сокращения используются, как правило, в случаях, когда емкость сети заранее выбрана избыточной. При этом в результате обучения сеть получается переобученной, а после этого применяются алгоритмы сокращения.
Метод штрафных функций
В целевую функцию алгоритма обучения вводятся штрафы за то, что значения синаптических весов отличны от нуля, например:
, |
(17) |
где L – количество нейронов текущего слоя; n – количество входных сигналов слоя.
Метод проекций
Синаптический вес обнуляется, если его значение попало в заданный диапазон:
. |
(18) |
Основные недостатки алгоритмов сокращения:
-
Отсутствие методики определения количества избыточных нейронов, подлежащих удалению.
-
Низкая скорость обучения как следствие избыточной мощности сети.
1.5.2. Конструктивные алгоритмы (constructive algorithms)
Конструктивные алгоритмы используют подход, обратный по отношению к алгоритмам сокращения. Т.е. число нейронов в сети при этом, наоборот, наращивается по необходимости в процессе обучения.
Основаны на методике обучения многослойных НС [4]:
Шаг 1. Выбор начального числа нейронов в скрытых слоях.
Шаг 2. Инициализация. Присвоение весам и смещениям случайных значений из заданного диапазона.
Шаг 3. Обучение сети по заданной выборке.
Шаг 4. В случае неудачного обучения увеличение количества нейронов и переход к шагу 2.
В конструктивных алгоритмах сохраняются навыки, приобретенные НС до увеличения числа нейронов (поскольку при увеличении числа нейронов старые обученные нейроны сохраняются).
Конструктивные алгоритмы различаются правилами задания значений параметров в новых добавленных в сеть нейронах:
а) значения параметров являются случайными числами из заданного диапазона;
б) значения синаптических весов нового нейрона получаются путем расщепления (splitting) одного из старых нейронов.
Расщеплению должны подвергаться в первую очередь нейроны, для которых характерна "раздвоенность" векторов изменений. Т.е. если в процессе обучения вес синапса колеблется от итерации к итерации в различных противоположных направлениях, то вероятно, этот синапс нагружен двойственной функциональностью, и расщепление его нейрона на два даст два полноценных классифицирующих механизма.
Расщеплять нейроны, векторы изменений которых имеют два преимущественных направления, необходимо потому, что наличие таких нейронов приводит к осцилляциям (колебаниям) при обучении методом обратного распространения. При обучении методом с интегральной функцией ошибки наличие таких нейронов приводит к попаданию в локальный минимум с большим значением ошибки.
Алгоритм расщепления использует ковариационную матрицу векторов изменений синаптических весов.
Основной недостаток алгоритма – экспоненциальный рост времени вычислений при увеличении размерности сети.
Для преодоления указанного недостатка предложен упрощенный алгоритм расщепления. Общее число нейронов в НС, построенной с помощью этого алгоритма, может быть несколько больше, чем у НС, построенной с помощью исходного алгоритма.
В упрощенном алгоритме для расщепления выбирается нейрон с наибольшим значением функционала:
, |
(19) |
где – вектор изменения синаптических весов i-го нейрона в результате использования k-го обучающего примера.
В качестве критерия выбора нейрона для расщепления используется отношение суммы длин векторов изменений синаптических весов нейрона, соответствующих различным обучающим примерам, к длине суммы этих векторов.
В результате расщепления вместо исходного нейрона в сеть вводятся два новых нейрона.
-
Значение каждого синаптического веса нового нейрона есть значение соответствующего веса старого нейрона плюс некоторый небольшой шум.
-
Величины весов связей выходов новых нейронов и нейронов следующего слоя равны половине величин весов связей исходного нейрона с соответствующими нейронами следующего слоя.
Упрощенный алгоритм, как и исходный, гарантирует, что функция ошибки после расщепления увеличиваться не будет.