Прореживание двухслойной нейронной сети (пример)

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
(Алгоритм оптимального прореживания)
(Алгоритм оптимального прореживания)
Строка 11: Строка 11:
== Алгоритм оптимального прореживания ==
== Алгоритм оптимального прореживания ==
-
Описание метода второго порядка приводится в статье<ref name="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">в данной статье</ref>. Основное отличие состоит в допущении, что матрица Гессе является диагональной. Таким образом, алгоритм немного видоизменяется:
+
Описание метода второго порядка приводится в статье<ref name="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">в данной статье</ref>. Основное отличие данного метода состоит в допущении, что матрица Гессе является диагональной. Таким образом, алгоритм немного видоизменяется:
Задана выборка <tex>X</tex>, модель <tex>f(w)</tex>, функция ошибки <tex>E_X</tex>. Для упрощения структуры сети выполняем следующие шаги: <br />
Задана выборка <tex>X</tex>, модель <tex>f(w)</tex>, функция ошибки <tex>E_X</tex>. Для упрощения структуры сети выполняем следующие шаги: <br />
Строка 17: Строка 17:
2. пока значение ошибки не превосходит заранее заданного(3-5) <br />
2. пока значение ошибки не превосходит заранее заданного(3-5) <br />
3. вычисляем гессиан <tex>H</tex>согласно формуле <br />
3. вычисляем гессиан <tex>H</tex>согласно формуле <br />
-
4. вычисляем функцию выпуклости <tex>S_i = \frac{w_i^2 H_i}{2}</tex>, находим i, соответствующее наименьшей степени выпуклости. <br />
+
4. вычисляем функцию выпуклости <tex>S_i = \frac{w_i^2 H_i}{2}</tex>, находим <tex>i</tex>, соответствующее наименьшей степени выпуклости. <br />
5. вес <tex>w_i</tex> удаляется из сети <br />
5. вес <tex>w_i</tex> удаляется из сети <br />
{{UnderConstruction|[[Участник:Mikethehuman|Mikethehuman]] 00:42, 15 апреля 2010 (MSD)}}
{{UnderConstruction|[[Участник:Mikethehuman|Mikethehuman]] 00:42, 15 апреля 2010 (MSD)}}

Версия 20:50, 14 апреля 2010

Прореживание двухслойной нейронной сети (optimal brain damage) - метод упрощения структуры нейронной сети. Идея прореживания состоит в том, что из сети удаляются параметры, оказывающие малое влияние на ошибку аппроксимации. Таким образом, модель упрощается, а ошибка аппроксимации возрастает незначительно.


Постановка задачи

Задана обучающая выборка X^l, Y^l. Требуется решить задачу классификации с использованием двухслойной нейронной сети; затем упростить сеть, выбросив из нее параметры, соответствующие наименьшей степени выпуклости; среднеквадратичная ошибка классификации при этом не должна сильно возрасти.

Настройка нейронной сети

Двухслойная нейронная сеть состоит из одного скрытого слоя и выходного слоя. Каждый нейрон сети имеет сигмоидальную функции активации \phi(z) = 1 / (1 + e^{-z}). Значения признаков x^i поступают на вход первому (скрытому) слою сети с весовой матрицей W_1, выходы первого слоя поступают на вход второму с весовой матрицей W_2.На выходе второго слоя вычисляется вектор-функция \bf{F} = (F_1(x),...,F_P(x)), где P - количество нейронов на втором слое. Необходимо настроить параметры сети, используя алгоритм обратного распространения (back propagation). \bf{E}(\bf{w}) = \frac{1}{2N} \sum_{n = 1}^N \sum_{p = 1}^P(F_p(n) - Y_p(n))^2 - нормированная среднеквадратичная ошибка. Пусть w_{ji} - вес, соединяющий нейрон i с нейроном j следующего слоя. Тогда коррекция веса, применяемая к w_{ji}(n), определяется согласно правилу \Delta w_{ji} = \eta \bf{\delta}_j(n)y_i(n), где \bf{\delta}_j(n) = - \frac{\partial \bf{E}(n)}{\partial y_j(n)}\phi_j'(v_j(n)) - локальный градиент нейрона j. Здесь y_i(n) - выход i-го нейрона, v_j(n) = \sum_{i = 1}^m w_{ji}(n)y_i(n) - значение, которое получает на вход функция активации, соответствующая j-му нейрону (m - количество его входов), η - темп обучения. Поскольку ошибка представляется в виде \bf{E}(n) = \frac{1}{2}\sum_{p = 1}^P (F_p(n) - y_p(n))^2, то для выходного слоя \frac {\partial \bf{E}(n)}{\partial y_j(n)} = y_j(n) - F_j(n) =: e_j(n), и для него справедливо \Delta w_{ji} = - \eta e_j(n)\phi_j'(v_j(n))y_i(n). Соответственно, для первого, скрытого, слоя справедлива формула обратного распространения \delta_j(n) = \phi_j'(v_j(n)) \sum_{p = 1}^P \delta_p(n) w_{pj}(n) .

Алгоритм оптимального прореживания

Описание метода второго порядка приводится в статье[1]. Основное отличие данного метода состоит в допущении, что матрица Гессе является диагональной. Таким образом, алгоритм немного видоизменяется:

Задана выборка X, модель f(w), функция ошибки E_X. Для упрощения структуры сети выполняем следующие шаги:
1. настраиваем модель, получаем параметры \bf{w}.
2. пока значение ошибки не превосходит заранее заданного(3-5)
3. вычисляем гессиан Hсогласно формуле
4. вычисляем функцию выпуклости S_i = \frac{w_i^2 H_i}{2}, находим i, соответствующее наименьшей степени выпуклости.
5. вес w_i удаляется из сети


Статья в настоящий момент дорабатывается.
Mikethehuman 00:42, 15 апреля 2010 (MSD)


Личные инструменты