Прореживание двухслойной нейронной сети (пример)
Материал из MachineLearning.
 (→Пример 2: выборка линейно неразделима)  | 
				 (→Исходный код)  | 
			||
| Строка 56: | Строка 56: | ||
== Исходный код ==  | == Исходный код ==  | ||
Скачать листинги алгоритмов можно здесь: [https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/OptimalBrainDamage/ComputeHessianAndConvexity.m ComputeHessianAndConvexity.m], [https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/OptimalBrainDamage/ComputeResult.m ComputeResult.m], [https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/OptimalBrainDamage/PlotErrors.m PlotErrors.m],[https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/OptimalBrainDamage/PlotHessian.m PlotHessian.m], [https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/OptimalBrainDamage/PlotOBD.m PlotOBD.m], [https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/OptimalBrainDamage/TuneNet.m TuneNet.m], [https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/OptimalBrainDamage/mainNet.m mainNet.m]  | Скачать листинги алгоритмов можно здесь: [https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/OptimalBrainDamage/ComputeHessianAndConvexity.m ComputeHessianAndConvexity.m], [https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/OptimalBrainDamage/ComputeResult.m ComputeResult.m], [https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/OptimalBrainDamage/PlotErrors.m PlotErrors.m],[https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/OptimalBrainDamage/PlotHessian.m PlotHessian.m], [https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/OptimalBrainDamage/PlotOBD.m PlotOBD.m], [https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/OptimalBrainDamage/TuneNet.m TuneNet.m], [https://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/OptimalBrainDamage/mainNet.m mainNet.m]  | ||
| + | |||
| + | == См. также ==  | ||
| + | [http://www.machinelearning.ru/wiki/index.php?title=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D1%80%D0%B5%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D1%85_%D1%81%D0%B5%D1%82%D0%B5%D0%B9 Оптимальное прореживание нейронных сетей] <br />[http://www.machinelearning.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7 Регрессионный анализ]  | ||
Версия 09:15, 18 апреля 2010
Прореживание двухслойной нейронной сети (optimal brain damage) - метод упрощения структуры нейронной сети. Идея прореживания состоит в том, что из сети удаляются параметры, оказывающие малое влияние на ошибку аппроксимации. Таким образом, модель упрощается, а ошибка аппроксимации возрастает незначительно.
Содержание | 
Постановка задачи
Задана обучающая выборка . Требуется решить задачу классификации с использованием двухслойной нейронной сети; затем упростить сеть, выбросив из нее параметры, соответствующие наименьшей степени выпуклости; среднеквадратичная ошибка классификации при этом не должна сильно возрасти.
Настройка нейронной сети
Двухслойная нейронная сеть состоит из одного скрытого слоя и выходного слоя. Каждый нейрон сети имеет сигмоидальную функции активации . Значения признаков 
 поступают на вход первому (скрытому) слою сети с весовой матрицей 
, выходы первого слоя поступают на вход второму с весовой матрицей 
.На выходе второго слоя вычисляется вектор-функция 
, где 
 - количество нейронов на втором слое. Необходимо настроить параметры сети, используя алгоритм обратного распространения (back propagation). 
 - нормированная среднеквадратичная ошибка. Пусть 
 - вес, соединяющий нейрон 
 с нейроном 
 следующего слоя. Тогда коррекция веса, применяемая к 
, определяется согласно правилу 
, где 
 - локальный градиент нейрона j. Здесь 
 - выход i-го нейрона, 
 - значение, которое получает на вход функция активации, соответствующая j-му нейрону (m - количество его входов), 
 - темп обучения. Поскольку ошибка представляется в виде 
, то для выходного слоя 
, и для него справедливо 
.
Соответственно, для первого, скрытого, слоя справедлива формула обратного распространения 
.
Алгоритм оптимального прореживания
Описание метода второго порядка приводится в статье "Оптимальное прореживание нейронных сетей". Основное отличие данного метода состоит в допущении, что матрица Гессе является диагональной. Таким образом, алгоритм немного видоизменяется:
Задана выборка , модель 
, функция ошибки 
. Для упрощения структуры сети выполняем следующие шаги: 
1. настраиваем модель, получаем параметры . 
2. пока значение ошибки не превосходит заранее заданного (3-5): 
3. вычисляем гессиан согласно формуле 
обозначим за  аргумент функции активации нейрона 
 на слое 
. Тогда частные производные на втором слое: 
 при 
 = 
 и равны 0 при 
 != 
,
а на первом слое 
 и 
4. вычисляем функцию выпуклости , находим 
, соответствующее наименьшей степени выпуклости. 
5. вес  удаляется из сети 
Примеры на модельных данных
Пример 1: выборка линейно разделима
На графике показаны результаты классификации. На первом и втором слое сети - по 5 нейронов, количество признаков - 4. Итого получается 45 весов. Видно, что алгоритм сработал без ошибок.
 
Ниже приведены графики функции выпуклости (одная кривая - зависимость функции выпуклости от одного параметра) и график зависимости ошибки от количества удаленных параметров.
![]()
Видно, что из сети с 45 параметрами можно удалить 18, практически не проиграв в качестве.
Пример 2: выборка линейно неразделима
Те же самые 45 весов. Алгоритм допустил 3 ошибки при классификации:
![]()
Графики функции выпуклости и количества ошибок: 
![]()
Результат прореживания здесь более наглядный: можно удалить 35 из 45 параметров без потери качества.
Приведем график зависимости ошибки от количества удаленных параметров для тех же данных и 50 нейронов на каждом из слоев.
Исходный код
Скачать листинги алгоритмов можно здесь: ComputeHessianAndConvexity.m, ComputeResult.m, PlotErrors.m,PlotHessian.m, PlotOBD.m, TuneNet.m, mainNet.m
См. также
Оптимальное прореживание нейронных сетей 
Регрессионный анализ

