69
правок
Изменения
м
Added perceptron without code
Хорошим примером биологической нейронной сети является человеческий мозг. Наш мозг {{---}} сложнейшая биологическая нейронная сеть, которая принимает информацию от органов чувств и каким-то образом ее обрабатывает (узнавание лиц, возникновение ощущений и т.д.). Мозг же, в свою очередь, состоит из нейронов, взаимодействующих между собой.
Для построения искусственной нейронной сети будем использовать ту же структуру. Как и биологическая нейронная сеть, искусственная состоит из нейронов, взаимодействующих между собой, однако представляет собой упрощенную модель. Так, например, искусственный нейрон, из которых состоит ИНС, имеет намного более простую структуру: у него есть несколько входов, на которых он принимает различные сигналы, преобразует их и передает другим нейронам. Другими словами, искусственный нейрон {{---}} это такая функция<tex>\mathbb{R}^n \rightarrow \mathbb{R}</tex>, которая преобразует несколько входных параметров в один выходной.
Как видно на рисунке справа, у нейрона есть несколько <tex>n</tex> входов <tex>x_i</tex>, у каждого из которого есть вес <tex>w_i</tex>, на который умножается сигнал, проходящий по связи. После этого взвешенные сигналы <tex>x_i \cdot w_i</tex> направляются в сумматор, который аггрегирует все сигналы во взвешенную сумму. Эту сумму также называют <tex>net</tex>. Таким образом, <tex>net = \sum_{i=1}^{i=n} x_i \cdot w_i= w^T \cdot x</tex>.
Просто так передавать взвешенную сумму <tex>net</tex> на выход достаточно бессмысленно {{---}} нейрон должен ее как-то обработать и сформировать адекватный выходной сигнал. Для этих целей используют функцию активации (activation function), которая преобразует взвешенную сумму в какое-то число, которое и будет являться выходом нейрона. Функция активации обозначается <tex>\phi(net)</tex>, а выход {{---}} out. Таким образом, <tex>out = \phi(net)</tex>.
* Функция единичного скачка. Если <tex>net > threshold</tex>, <tex>\phi(net) = 1</tex>, а иначе <tex>0</tex>;
* Сигмоидальная функция. <tex>\phi(net) = \frac{1}{1 + exp(-a \cdot net)}</tex>, где параметр <tex>a</tex> характеризует степень крутизны функции;
* Гиперболический тангенс. <tex>\phi(net) = tanh(\frac{net}{a})</tex>, где параметр <tex>a</tex> также определяет степень крутизны графика функции;* Rectified linear units (ReLU). <tex>ReLU(x) = \begin{cases} x & x \geq 0 \\ 0 & x < 0 \end{cases} = \max(x, 0)</tex>.
==Виды нейронных сетей==
'''Тестовая выборка''' (англ. ''Testing set'') {{---}} конечный набор входных сигналов (иногда вместе с правильными выходными сигналами), по которым происходит оценка качества работы сети.
Само обучение нейронной сети можно разделить на два подхода: '''[[Обучение с учителем|обучение с учителем''' ]]<sup>[на 16.01.19 не создан]</sup> и '''[[Обучение без учителя|обучение без учителя''']]<sup>[на 16.01.19 не создан]</sup>. В первом случае веса меняются так, чтобы ответы сети минимально отличались от уже готовых правильных ответов, а во втором случае сеть самостоятельно классифицирует входные сигналы.
==Перцептрон==
[[File:Перцептрон.png|350px|thumb|Схема перцептрона]]
'''ПерсептронПерцептрон''' (англ. ''Perceptron'') {{---}} простейший вид нейронных сетей. В основе лежит математическая модель восприятия информации мозгом, состоящая из сенсоров, ассоциативных и реагирующих элементов.
===История===
Идею перцептрона предложил нейрофизиолог Фрэнк Розенблатт. Он предложил схему устройства, моделирующего процесс человеческого восприятия, и назвал его ''«персептроном»«перцептроном»'' (от латинского ''perceptio'' {{---}} восприятие). В 1960 году Розенблатт представил первый нейрокомпьютер {{---}} «Марк-1», который был способен распознавать некоторые буквы английского алфавита.
Таким образом персептрон перцептрон является одной из первых '''моделей нейросетей''', а «Марк-1» {{---}} первым в мире '''нейрокомпьютером'''.
===Описание===
В основе персептрона перцептрона лежит математическая модель восприятия информации мозгом. Разные исследователи по-разному его определяют. В самом общем своем виде (как его описывал Розенблатт) он представляет систему из элементов трех разных типов: сенсоров, ассоциативных элементов и реагирующих элементов.
Принцип работы перцептрона следующий:
# R-элемент складывает друг с другом взвешенные сигналы от A-элементов, а затем
#* если превышен определенный порог, генерирует выходной сигнал, равный ''1'';
#* eсли порог не превышен, то выход персептрона перцептрона равен ''-1''.
Для элементов перцептрона используют следующие названия:
* A-элементы называют ассоциативными;
* R-элементы называют реагирующими.
===Классификация перцептронов===
[[File:Однслойный_перцептрон.png|300px|thumb|Схема однослойного перцептрона]]
'''Перцептрон с одним скрытым слоем''' ('''элементарный перцептрон''', англ. ''elementary perceptron'') {{---}} перцептрон, у которого имеется только по одному слою S, A и R элементов.
'''Однослойный персептрон''' (англ. ''Single-layer perceptron'') {{---}} перцептрон, каждый S-элемент которого однозначно соответствует одному А-элементу, S-A связи всегда имеют вес ''1'', а порог любого А-элемента равен ''1''. Часть однослойного персептрона соответствует модели искусственного нейрона.
Его ключевая особенность состоит в том, что каждый S-элемент однозначно соответствует одному A-элементу, все S-A связи имеют вес, равный ''+1'', а порог A элементов равен ''1''. Часть однослойного перцептрона, не содержащая входы, соответствует искусственному нейрону, как показано на картинке. Таким образом, однослойный перцептрон {{---}} это искусственный нейрон, который на вход принимает только ''0'' и ''1''.
Однослойный персептрон также может быть и элементарным персептроном, у которого только по одному слою S,A,R-элементов.
'''Многослойный перцептрон по Розенблатту''' (англ. ''Rosenblatt multilayer perceptron'') {{---}} перцептрон, который содержит более 1 слоя А-элементов.
'''Многослойный перцепртрон по Румельхарту''' (англ. ''Rumelhart multilater perceptron'') {{---}} частный случай многослойного персептрона по Розенблатту, с двумя особенностями:
* S-A связи могут иметь произвольные веса и обучаться наравне с A-R связями;
* Обучение производится по специальному алгоритму, который называется обучением по методу обратного распространения ошибки.
===Обучение перцептрона===
Задача обучения перцептрона {{---}} подобрать такие <tex>w_0, w_1, w_2, \ldots, w_n</tex>, чтобы <tex>sign(\sigma(w_0 + w_1 \cdot x_1 + w_2 \cdot x_2 + \ldots + w_n \cdot x_n))</tex> как можно чаще совпадал с <tex>y(x)</tex> {{---}} значением в обучающей выборке (здесь <tex>\sigma</tex> {{---}} функция активации). Для удобства, чтобы не тащить за собой свободный член <tex>w_0</tex>, добавим в вектор $x$ лишнюю <<виртуальную размерность>> и будем считать, что <tex>x = (1, x_1, x_2, \ldots, x_n)</tex>. Тогда <tex>w_0 + w_1 \cdot x_1 + w_2 \cdot x_2 + \ldots + w_n \cdot x_n</tex> можно заменить на <tex>w^T \cdot x</tex>.
Чтобы обучать эту функцию, сначала надо выбрать функцию ошибки, которую потом можно оптимизировать [[Стохастический градиентный спуск|градиентным спуском]]<sup>[на 16.01.19 не создан]</sup>. Число неверно классифицированных примеров не подходит на эту кандидатуру, потому что эта функция кусочно-гладкая, с массой разрывов: она будет принимать только целые значения и резко меняться при переходе от одного числа неверно классифицированных примеров к другому. Поэтому использовать будем другую функцию, так называемый ''критерий перцептрона'': <tex>E_P(w) = -\sum_{x \in M} y(x)(\sigma(w^T \cdot x))</tex>, где <tex>M</tex> {{---}} множество примеров, которые перцептрон с весами <tex>w</tex> классифицирует неправильно.
Иначе говоря, мы минимизируем суммарное отклонение наших ответов от правильных, но только в неправильную сторону; верный ответ ничего не вносит в функцию ошибки. Умножение на <tex>y(x)</tex> здесь нужно для того, чтобы знак произведения всегда получался отрицательным: если правильный ответ ''−1'', значит, перцептрон выдал положительное число (иначе бы ответ был верным), и наоборот. В результате у нас получилась кусочно-линейная функция, дифференцируемая почти везде, а этого вполне достаточно.
Теперь <tex>E_P(w)</tex> можно оптимизировать градиентным спуском. На очередном шаге получаем: <tex>w^{(\tau+1)} = w^{(\tau)} − \eta\triangledown_w E_P(w)</tex>.
Алгоритм такой {{---}} мы последовательно проходим примеры <tex>x_1, x_2, \ldots</tex> из обучающего множества, и для каждого <tex>x_n</tex>:
* если он классифицирован правильно, не меняем ничего;
* а если неправильно, прибавляем <tex>\eta \triangledown_w E_P(w)</tex>.
Ошибка на примере <tex>x_n</tex> при этом, очевидно, уменьшается, но, конечно, совершенно никто не гарантирует, что вместе с тем не увеличится ошибка от других примеров. Это правило обновления весов так и называется {{---}} правило обучения перцептрона, и это было основной математической идеей работы Розенблатта.
===Применение===
* Решение задач классификации, если объекты классификации обладают свойством линейной разделимости
* Прогнозирование и распознавание образов<ref>
* Управление агентами[https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D1%86%D0%B5%D0%BF%D1%82%D1%80%D0%BE%D0%BD#%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%B5%D1%80%D1%86%D0%B5%D0%BF%D1%82%D1%80%D0%BE%D0%BD%D0%BE%D0%B2 Применения перцептрона, Wikipedia]</ref>
==См. также==