Прореживание двухслойной нейронной сети (пример)
Материал из MachineLearning.
(→Пример 1: выборка линейно разделима) |
(→Пример 2: выборка линейно неразделима) |
||
Строка 53: | Строка 53: | ||
[[Изображение:OBD1.png|400px]]<br /> | [[Изображение:OBD1.png|400px]]<br /> | ||
- | Результат прореживания здесь более наглядный: можно удалить 35 из 45 параметров без потери качества. | + | Результат прореживания здесь более наглядный: можно удалить 35 из 45 параметров без потери качества. <br /> |
+ | Для этого случая построим график функции ошибки (<tex>-ln E</tex>)в зависимости от параметров. На этом графике красным показаны параметры первого слоя, а синим - второго. В результате применения алгоритма OBD сначала удалялись те параметры, которые на графике видны плохо - именно они не оказывают большого значения на аппроксимацию.<br /> | ||
+ | |||
+ | [[Изображение:Errors.png|600px]]<br /> | ||
Приведем график зависимости ошибки от количества удаленных параметров для тех же данных и 50 нейронов на каждом из слоев. | Приведем график зависимости ошибки от количества удаленных параметров для тех же данных и 50 нейронов на каждом из слоев. | ||
- | [[Изображение: | + | [[Изображение:OBD3.png|400px]] |
== Исходный код == | == Исходный код == |
Версия 19:01, 28 апреля 2010
Прореживание двухслойной нейронной сети (optimal brain damage) — метод упрощения структуры нейронной сети. Идея прореживания состоит в том, что из сети удаляются параметры, оказывающие малое влияние на ошибку аппроксимации. Таким образом, модель упрощается, а ошибка аппроксимации возрастает незначительно.
Содержание |
Постановка задачи
Задана обучающая выборка . Требуется решить задачу классификации с использованием двухслойной нейронной сети, настроив параметры сети - весовые матрицы
и
, соответствующие соответственно первому и второму слою. Посчитать гессиан
, где
- вектор параметров,
- функция стоимости; посчитать функцию выпуклости и упростить сеть, выбросив из нее параметры, соответствующие наименьшей степени выпуклости. Среднеквадратичная ошибка классификации
при этом не должна сильно возрасти.
Настройка нейронной сети
Двухслойная нейронная сеть состоит из одного скрытого слоя и выходного слоя. Входной слой - это объект со своим признаковым описанием . Первый и второй слои сети состоят из так называемых нейронов, или персептронов. Каждый нейрон вычисляет
-арную функцию вида
. В нашем случае
- сигмоидальная функция активации
. Значения признаков
поступают на вход первому (скрытому) слою сети с весовой матрицей
, выходы первого слоя поступают на вход второму с весовой матрицей
.На выходе второго слоя вычисляется вектор-функция
, где
- количество нейронов на втором слое. Необходимо настроить параметры сети, используя алгоритм обратного распространения (back propagation).
Введем функции ошибок: - нормированная среднеквадратичная ошибка,
- ошибка на конкретном объекте. Пусть
- вес, соединяющий нейрон
с нейроном
следующего слоя. Тогда коррекция веса, применяемая к
, определяется согласно правилу
, где
- локальный градиент нейрона
. Здесь
- выход
-го нейрона,
- значение, которое получает на вход функция активации, соответствующая
-му нейрону (
- количество его входов),
- темп обучения. Для выходного слоя
, и для него справедливо
.
Соответственно, для первого, скрытого, слоя справедлива формула обратного распространения
.
Отметим, что эти формулы взяты из книги С. Хайкина "Нейронные сети. Полный курс".
Алгоритм оптимального прореживания
Описание метода второго порядка приводится в статье Оптимальное прореживание нейронных сетей.
Локальная аппроксимация функции ошибки в окрестности стационарного положения:
где
— возмущение вектора параметров
,
— градиент
,
и
— матрица вторых производных
.
Необходимо минимизировать квадратичную форму по отношению к
при ограничении
. Для решения этой условной задачи строится лагранжиан
. Получаем, что оптимальное приращение вектора весов
, а соответствующее ему оптимальное значение лагранжиана для элемента
:
Основное отличие данного метода состоит в допущении, что матрица Гессе является диагональной. Таким образом, алгоритм немного видоизменяется:
Задана выборка , модель
, функция ошибки
. Для упрощения структуры сети выполняем следующие шаги:
1. настраиваем модель, получаем параметры .
2. пока значение ошибки не превосходит заранее заданного (3-5):
3. вычисляем гессиан согласно формуле
обозначим за аргумент функции активации нейрона
на слое
. Тогда частные производные на втором слое:
при
=
и равны 0 при
,
а на первом слое
и
4. вычисляем функцию выпуклости , находим
, соответствующее наименьшей степени выпуклости.
5. вес удаляется из сети
Примеры на модельных данных
Пример 1: выборка линейно разделима
На графике показаны результаты классификации. На первом и втором слое сети - по 5 нейронов, количество признаков - 4. Итого получается 45 весов. Видно, что алгоритм сработал без ошибок.
Ниже приведены графики функции выпуклости (одная кривая - зависимость функции выпуклости от суммы модулей параметров) и график зависимости ошибки от количества удаленных параметров.
Видно, что из сети с 45 параметрами можно удалить 18, практически не проиграв в качестве.
Пример 2: выборка линейно неразделима
Те же самые 45 весов. Алгоритм допустил 4 ошибки при классификации:
Графики функции выпуклости и количества ошибок:
Результат прореживания здесь более наглядный: можно удалить 35 из 45 параметров без потери качества.
Для этого случая построим график функции ошибки ()в зависимости от параметров. На этом графике красным показаны параметры первого слоя, а синим - второго. В результате применения алгоритма OBD сначала удалялись те параметры, которые на графике видны плохо - именно они не оказывают большого значения на аппроксимацию.
Приведем график зависимости ошибки от количества удаленных параметров для тех же данных и 50 нейронов на каждом из слоев.
Исходный код
Скачать листинги алгоритмов можно здесь: ComputeHessianAndConvexity.m, ComputeResult.m, PlotErrors.m,PlotHessian.m, PlotOBD.m, TuneNet.m, mainNet.m
См. также
- Оптимальное прореживание нейронных сетей
- Регрессионный анализ
- Вычисление матриц Якоби и Гессе
- Оптимальное прореживание нейронных сетей (пример)
Литература
- Хайкин С. Нейронные сети, полный курс. 2е издание, испр.
- К. В. Воронцов, Лекции по линейным алгоритмам классификации
![]() | Данная статья была создана в рамках учебного задания.
См. также методические указания по использованию Ресурса MachineLearning.ru в учебном процессе. |