Однослойный персептрон (пример)
Материал из MachineLearning.
м |
|||
Строка 2: | Строка 2: | ||
'''Однослойный персептрон''' — это модель нейрона, простейший пример нейронной сети. Фактически представляет собой линейный пороговый классификатор. | '''Однослойный персептрон''' — это модель нейрона, простейший пример нейронной сети. Фактически представляет собой линейный пороговый классификатор. | ||
- | == Постановка задачи == | + | == Постановка задачи линейного разделения классов== |
- | Пусть <tex>X</tex> - пространство объектов; <tex>Y</tex> - множество допустимых ответов. Будем считать, что <tex>x = (x_0,x^1,\dots,x^n) \in \{-1\}\times\mathbb{R}^n</tex>, где <tex>x^j = f_j(x), j \geq 1</tex> - признаковое описание объекта, а <tex>x_0 = -1</tex> - дополнительный константный признак; <tex>Y = \{0,1\}</tex>. Задана выборка <tex>\{(\mathbf{x}_i,y_i)\}_{i=1}^\ell</tex>. Значения признаков <tex>x^j = f_j(x)</tex> рассматриваются как импульсы, поступающие на вход нейрона, которые складываются с весами <tex>w_1,\dots,w_n</tex>. Если суммарный импульс превышает порог активации <tex>w_0</tex>, то нейрон возбуждается | + | Пусть <tex>X</tex> - пространство объектов; <tex>Y</tex> - множество допустимых ответов. Будем считать, что <tex>x = (x_0,x^1,\dots,x^n) \in \{-1\}\times\mathbb{R}^n</tex>, где <tex>x^j = f_j(x), j \geq 1</tex> - признаковое описание объекта, а <tex>x_0 = -1</tex> - дополнительный константный признак; <tex>Y = \{0,1\}</tex>. Задана обучающая выборка <tex>\{(\mathbf{x}_i,y_i)\}_{i=1}^\ell</tex>. Значения признаков <tex>x^j = f_j(x)</tex> рассматриваются как импульсы, поступающие на вход нейрона, которые складываются с весами <tex>w_1,\dots,w_n</tex>. Если суммарный импульс превышает порог активации <tex>w_0</tex>, то нейрон возбуждается |
и выдаёт на выходе 1, иначе выдаётся 0. Таким образом, нейрон вычисляет <tex>n</tex>-арную булеву функцию вида | и выдаёт на выходе 1, иначе выдаётся 0. Таким образом, нейрон вычисляет <tex>n</tex>-арную булеву функцию вида | ||
<center><tex>a(x) = \varphi(\sum_{i=1}^{\ell}w_jx^j-w_0) = \varphi(\langle w,x \rangle)</tex>, где <tex>\varphi(z)=[z \geq 0]</tex></center> | <center><tex>a(x) = \varphi(\sum_{i=1}^{\ell}w_jx^j-w_0) = \varphi(\langle w,x \rangle)</tex>, где <tex>\varphi(z)=[z \geq 0]</tex></center> | ||
- | + | Требуется найти значения параметров, при которых алгоритм наилучшим образом аппроксимирует целевую зависимость, заданную на объектах обучающей выборки. | |
== Описание алгоритма == | == Описание алгоритма == | ||
Для настройки вектора весов воспользуемся методом стохастического градиента. Возьмем квадратичную функцию потерь: <tex>Q(w) = \sum_{i=1}^{\ell}(a(x_i)-y_i)^2</tex>, а в качестве функции активации возьмем сигмоидную функцию: <tex>\varphi(z) = \frac{1}{1+e^{-z}}</tex>. Согласно принципу минимизации эмпирического риска задача сводится к поиску вектора, доставляющего минимум функционалу <tex> Q(w) \rightarrow \min_w</tex>. Применим для минимизации метод градиентного спуска: | Для настройки вектора весов воспользуемся методом стохастического градиента. Возьмем квадратичную функцию потерь: <tex>Q(w) = \sum_{i=1}^{\ell}(a(x_i)-y_i)^2</tex>, а в качестве функции активации возьмем сигмоидную функцию: <tex>\varphi(z) = \frac{1}{1+e^{-z}}</tex>. Согласно принципу минимизации эмпирического риска задача сводится к поиску вектора, доставляющего минимум функционалу <tex> Q(w) \rightarrow \min_w</tex>. Применим для минимизации метод градиентного спуска: | ||
Строка 12: | Строка 12: | ||
где <tex>\eta > 0</tex> величина шага в направлении антиградиента, называемая также темпом обучения (learning rate). Будем выбирать прецеденты <tex>(x_i, y_i)</tex> по одному в случайном порядке, для каждого делать градиентный шаг и сразу обновлять вектор весов: | где <tex>\eta > 0</tex> величина шага в направлении антиградиента, называемая также темпом обучения (learning rate). Будем выбирать прецеденты <tex>(x_i, y_i)</tex> по одному в случайном порядке, для каждого делать градиентный шаг и сразу обновлять вектор весов: | ||
<center><tex>w:= w - \eta(a(x_i,w)-y_i)(1-\varphi(\langle w,x_i \rangle))\varphi(\langle w,x_i \rangle)x_i</tex>.</center> Значение функционала оцениваем: <center><tex>Q = (1-\lambda)Q+\lambda \eps_i</tex></center>, где <tex>\eps_i = (a(x_i,w)-y_i)^2</tex>. | <center><tex>w:= w - \eta(a(x_i,w)-y_i)(1-\varphi(\langle w,x_i \rangle))\varphi(\langle w,x_i \rangle)x_i</tex>.</center> Значение функционала оцениваем: <center><tex>Q = (1-\lambda)Q+\lambda \eps_i</tex></center>, где <tex>\eps_i = (a(x_i,w)-y_i)^2</tex>. | ||
- | |||
Процедура останавливается после того, как изменение значения функционала функционала <tex>Q</tex> становится меньше заданной константы: <center><tex>|Q_n - Q_{n-1}|< \delta</tex></center> | Процедура останавливается после того, как изменение значения функционала функционала <tex>Q</tex> становится меньше заданной константы: <center><tex>|Q_n - Q_{n-1}|< \delta</tex></center> | ||
== Вычислительный эксперимент == | == Вычислительный эксперимент == | ||
- | + | ||
== Исходный код == | == Исходный код == | ||
TODO | TODO |
Версия 15:53, 1 мая 2009
|
Однослойный персептрон — это модель нейрона, простейший пример нейронной сети. Фактически представляет собой линейный пороговый классификатор.
Постановка задачи линейного разделения классов
Пусть - пространство объектов; - множество допустимых ответов. Будем считать, что , где - признаковое описание объекта, а - дополнительный константный признак; . Задана обучающая выборка . Значения признаков рассматриваются как импульсы, поступающие на вход нейрона, которые складываются с весами . Если суммарный импульс превышает порог активации , то нейрон возбуждается и выдаёт на выходе 1, иначе выдаётся 0. Таким образом, нейрон вычисляет -арную булеву функцию вида
Требуется найти значения параметров, при которых алгоритм наилучшим образом аппроксимирует целевую зависимость, заданную на объектах обучающей выборки.
Описание алгоритма
Для настройки вектора весов воспользуемся методом стохастического градиента. Возьмем квадратичную функцию потерь: , а в качестве функции активации возьмем сигмоидную функцию: . Согласно принципу минимизации эмпирического риска задача сводится к поиску вектора, доставляющего минимум функционалу . Применим для минимизации метод градиентного спуска:
где величина шага в направлении антиградиента, называемая также темпом обучения (learning rate). Будем выбирать прецеденты по одному в случайном порядке, для каждого делать градиентный шаг и сразу обновлять вектор весов:
Вычислительный эксперимент
Исходный код
TODO
Смотри также
TODO
Литература
- К. В. Воронцов, Лекции по линейным алгоритмам классификации
- Bishop, C. Pattern Recognition And Machine Learning. Springer. 2006.
Данная статья является непроверенным учебным заданием.
До указанного срока статья не должна редактироваться другими участниками проекта MachineLearning.ru. По его окончании любой участник вправе исправить данную статью по своему усмотрению и удалить данное предупреждение, выводимое с помощью шаблона {{Задание}}. См. также методические указания по использованию Ресурса MachineLearning.ru в учебном процессе. |