Однослойный персептрон (пример)

Материал из 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
TODO

Версия 15:53, 1 мая 2009

Содержание

Однослойный персептрон — это модель нейрона, простейший пример нейронной сети. Фактически представляет собой линейный пороговый классификатор.

Постановка задачи линейного разделения классов

Пусть X - пространство объектов; Y - множество допустимых ответов. Будем считать, что x = (x_0,x^1,\dots,x^n) \in \{-1\}\times\mathbb{R}^n, где x^j = f_j(x), j \geq 1 - признаковое описание объекта, а x_0 = -1 - дополнительный константный признак; Y = \{0,1\}. Задана обучающая выборка \{(\mathbf{x}_i,y_i)\}_{i=1}^\ell. Значения признаков x^j = f_j(x) рассматриваются как импульсы, поступающие на вход нейрона, которые складываются с весами w_1,\dots,w_n. Если суммарный импульс превышает порог активации w_0, то нейрон возбуждается и выдаёт на выходе 1, иначе выдаётся 0. Таким образом, нейрон вычисляет n-арную булеву функцию вида

a(x) = \varphi(\sum_{i=1}^{\ell}w_jx^j-w_0) = \varphi(\langle w,x \rangle), где \varphi(z)=[z \geq 0]

Требуется найти значения параметров, при которых алгоритм наилучшим образом аппроксимирует целевую зависимость, заданную на объектах обучающей выборки.

Описание алгоритма

Для настройки вектора весов воспользуемся методом стохастического градиента. Возьмем квадратичную функцию потерь: Q(w) = \sum_{i=1}^{\ell}(a(x_i)-y_i)^2, а в качестве функции активации возьмем сигмоидную функцию: \varphi(z) = \frac{1}{1+e^{-z}}. Согласно принципу минимизации эмпирического риска задача сводится к поиску вектора, доставляющего минимум функционалу  Q(w) \rightarrow \min_w. Применим для минимизации метод градиентного спуска:

w:=w - \eta \nabla Q(w),

где \eta > 0 величина шага в направлении антиградиента, называемая также темпом обучения (learning rate). Будем выбирать прецеденты (x_i, y_i) по одному в случайном порядке, для каждого делать градиентный шаг и сразу обновлять вектор весов:

w:= w - \eta(a(x_i,w)-y_i)(1-\varphi(\langle w,x_i \rangle))\varphi(\langle w,x_i \rangle)x_i.
Значение функционала оцениваем:
Q = (1-\lambda)Q+\lambda \eps_i
, где \eps_i = (a(x_i,w)-y_i)^2. Процедура останавливается после того, как изменение значения функционала функционала Q становится меньше заданной константы:
|Q_n - Q_{n-1}|< \delta

Вычислительный эксперимент

Исходный код

TODO

Смотри также

TODO

Литература

  • К. В. Воронцов, Лекции по линейным алгоритмам классификации
  • Bishop, C. Pattern Recognition And Machine Learning. Springer. 2006.
Данная статья является непроверенным учебным заданием.
Студент: Участник:Максим Панов
Преподаватель: Участник:В.В. Стрижов
Срок: 28 мая 2009

До указанного срока статья не должна редактироваться другими участниками проекта MachineLearning.ru. По его окончании любой участник вправе исправить данную статью по своему усмотрению и удалить данное предупреждение, выводимое с помощью шаблона {{Задание}}.

См. также методические указания по использованию Ресурса MachineLearning.ru в учебном процессе.

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