Нейрокомпьютерная техника обучение персептрона


Содержание

Нейрокомпьютерная техника обучение персептрона

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

Используя критерий линейной разделимости, можно решить, способна ли однослойная нейронная сеть реализовывать требуемую функцию. Даже в том случае, когда ответ положительный, это принесет мало пользы, если у нас нет способа найти нужные значения для весов и порогов. Чтобы сеть представляла практическую ценность, нужен систематический метод (алгоритм) для вычисления этих значений. Ф.Розенблатт создал такой метод в своем алгоритме обучения персептрона и доказал: персептрон может быть обучен всему, что он может реализовывать.

Обучение может быть с учителем или без него. Для обучения с учителем нужен «внешний» учитель, который оценивал бы поведение системы и управлял ее последующими модификациями. При обучении без учителя, которое будет рассмотрено на последующих лекциях, сеть путем самоорганизации делает требуемые изменения. Обучение персептрона является обучением с учителем.

Алгоритм обучения персептрона может быть реализован на цифровом компьютере или другом электронном устройстве, и сеть становится в определенном смысле самоподстраивающейся. По этой причине процедуру подстройки весов обычно называют «обучением» и говорят, что сеть «обучается». Доказательство Розенблатта стало основной вехой и дало мощный импульс исследованиям в этой области. Сегодня в той или иной форме элементы алгоритма обучения персептрона встречаются во многих сетевых парадигмах.

Алгоритм обучения однослойного персептрона

Персептрон должен решать задачу классификации по бинарным входным сигналам. Набор входных сигналов будем обозначать -мерным вектором . Все элементы вектора являются булевыми переменными (переменными, принимающими значения «Истина» или «Ложь»). Однако иногда полезно оперировать числовыми значениями. Будем считать, что значению «ложь» соответствует числовое значение 0, а значению «Истина» соответствует 1.

Персептроном будем называть устройство, вычисляющее следующую систему функций:

\theta\Bigr],\quad j=1,\ldots, n, » src=»http://algmet.simulacrum.me/tai/l3/a8ec638de3fbfca8166469ed534245a5.png» w > (1)

где — веса персептрона , — порог, — значения входных сигналов, скобки означают переход от булевых (логических) значений к числовым значениям по правилам, изложенным выше.

Обучение персептрона состоит в подстройке весовых коэффициентов. Пусть имеется набор пар векторов , , называемый обучающей выборкой . Будем называть нейронную сеть обученной на данной обучающей выборке, если при подаче на входы сети каждого вектора на выходах всякий раз получается соответствующий вектор .

Предложенный Ф.Розенблаттом метод обучения состоит в итерационной подстройке матрицы весов, последовательно уменьшающей ошибку в выходных векторах. Алгоритм включает несколько шагов:

Шаг 0 Начальные значения весов всех нейронов полагаются случайными
Шаг 1 Сети предъявляется входной образ , в результате формируется выходной образ .
Шаг 2 Вычисляется вектор ошибки , делаемой сетью на выходе. Дальнейшая идея состоит в том, что изменение вектора весовых коэффициентов в области малых ошибок должно быть пропорционально ошибке на выходе и равно нулю, если ошибка равна нулю.
Шаг 3 Вектор весов модифицируется по следующей формуле: . Здесь — темп обучения.
Шаг 4 Шаги 1—3 повторяются для всех обучающих векторов. Один цикл последовательного предъявления всей выборки называется эпохой . Обучение завершается по истечении нескольких эпох: а) когда итерации сойдутся, т.е. вектор весов перестает изменяться, или б) когда полная, просуммированная по всем векторам абсолютная ошибка станет меньше некоторого малого значения.

Объясним данный алгоритм более подробно. Подаем на вход персептрона такой вектор , для которого уже известен правильный ответ. Если выходной сигнал персептрона совпадает с правильным ответом, то никаких действий предпринимать не надо. В случае ошибки, необходимо обучить персептрон правильно решать данный пример. Ошибки могут быть двух типов. Рассмотрим каждый из них.

Первый тип ошибки: на выходе персептрона — 0, а правильный ответ — 1. Для того чтобы персептрон выдавал правильный ответ, необходимо, чтобы сумма в правой части (1) стала больше. Поскольку переменные принимают значения 0 или 1, увеличение суммы может быть достигнуто за счет увеличения весов . Однако нет смысла увеличивать веса при переменных , которые равны нулю. Таким образом, следует увеличить веса при тех переменных x i , которые равны 1.

Первое правило. Если на выходе персептрона получен 0, а правильный ответ равен 1, то необходимо увеличить веса связей между одновременно активными нейронами. При этом выходной персептрон считается активным. Второй тип ошибки: на выходе персептрона — 1, а правильный ответ равен нулю. Для обучения правильному решению данного примера следует уменьшить сумму в правой части (1). Следовательно, необходимо уменьшить веса связей при тех переменных, которые равны 1 (поскольку нет смысла уменьшать веса связей при равных нулю переменных

). Необходимо также провести эту процедуру для всех активных нейронов предыдущих слоев. В результате получаем второе правило.

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

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

Нерассмотренными остались два вопроса. Первый — о сходимости процедуры обучения. Второй — на сколько нужно увеличивать (уменьшать) веса связей при применении правил обучения.

Ответ на первый вопрос дают следующие теоремы.

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

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

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

Доказательства этих теорем в данное учебное пособие не включены.

Целочисленность весов персептронов

Для ответа на вопрос о количественных характеристиках вектора w рассмотрим следующую теорему.

Теорема. Любой персептрон можно заменить другим персептроном того же вида с целыми весами связей.

Доказательство. Обозначим множество примеров одного класса (правильный ответ равен 0) через , а другого (правильный ответ равен 1) — через . Вычислим максимальное и минимальное значения суммы в правой части (1):

Определим допуск как минимум из и . Положим , где — число слагаемых в (1). Поскольку персептрон (1) решает поставленную задачу классификации и множество примеров в обучающей выборке конечно, то 0″ src=»http://algmet.simulacrum.me/tai/l3/6340ec0d87e406c7c38e90704096a1a8.png» w >. Из теории чисел известна теорема о том, что любое действительное число можно сколь угодно точно приблизить рациональными числами. Заменим веса на рациональные числа так, чтобы выполнялись следующие неравенства: .

Из этих неравенств следует, что при использовании весов персептрон будет работать с теми же результатами, что и первоначальный персептрон . Действительно, если правильным ответом примера является 0, имеем .

Подставив новые веса, получим:

Откуда следует необходимое неравенство

Аналогично, в случае правильного ответа равного 1, имеем , откуда, подставив новые веса и порог, получим:

s-(m+1)\delta=0. » src=»http://algmet.simulacrum.me/tai/l3/361cc24037117081ee36781afa0870a1.png» w >

Отсюда следует выполнение неравенства

0. » src=»http://algmet.simulacrum.me/tai/l3/1d3a0650cc4e269d835d798d7f644726.png» w > (3)

Неравенства (2) и (3) доказывают возможность замены всех весов и порога любого персептрона рациональными числами. Очевидно также, что при умножении всех весов и порога на одно и то же ненулевое число персептрон не изменится. Поскольку любое рациональное число можно представить в виде отношения целого числа к натуральному числу, получим

0\Bigr]= \Bigl[\sum_^m w_i’ x_i>0\Bigr]= \Bigl[\sum_^m \frac x_i>0\Bigr], » src=»http://algmet.simulacrum.me/tai/l3/3eb30fa8804b38a58a788ba622b733f9.png» w > (4)

где — целые числа. Обозначим через произведение всех знаменателей: . Умножим все веса и порог на . Получим веса целочисленные . Из (2), (3) и (4) получаем

0\Bigr]= \Bigl[\sum_^m w_i’ x_i>0\Bigr]= \Bigl[\sum_^m \frac x_i>0\Bigr]= \Bigl[\sum_^m w_i»’ x_i>0\Bigr], » src=»http://algmet.simulacrum.me/tai/l3/876efdb6faf3edd3d060395a6230e05f.png» w >

что и завершает доказательство теоремы.

Поскольку из доказанной теоремы следует, что веса персептрона являются целыми числами, то вопрос о выборе шага при применении правил обучения решается просто: веса и порог следует увеличивать (уменьшать) на единицу.

Двуслойность персептрона

Как уже упоминалось в начале лекции, алгоритм обучения персептрона возможно использовать и для многослойных персептронов . Однако теоремы о сходимости и зацикливании персептрона , приведенные выше, верны только при обучении однослойного персептрона — или многослойного персептрона при условии, что обучаются только веса персептрона , стоящего в последнем слое сети. В случае произвольного многослойного персептрона они не работают. Следующий пример демонстрирует основную проблему, возникающую при обучении многослойных персептронов .

Пусть веса всех слоев персептрона в ходе обучения сформировались так, что все примеры обучающего множества, кроме первого, решаются правильно. При этом правильным ответом первого примера является 1. Все входные сигналы персептрона последнего слоя равны нулю. В этом случае первое правило не дает результата, поскольку все нейроны предпоследнего слоя не активны. Существует множество способов решать эту проблему. Однако все эти методы не являются регулярными и не гарантируют сходимость многослойного персептрона к решению, даже при условии, что такое решение существует.

В действительности, проблема настройки (обучения) многослойного персептрона решается следующей теоремой.

Теорема о двуслойности персептрона. Любой многослойный персептрон может быть представлен в виде двуслойного персептрона с необучаемыми весами первого слоя.

Для доказательства этой теоремы потребуется одна теорема из математической логики.

Теорема о дизъюнктивной нормальной форме. Любая булева функция булевых аргументов может быть представлена в виде дизъюнкции конъюнкций элементарных высказываний и отрицаний элементарных высказываний:

Напомним некоторые свойства дизъюнктивной нормальной формы.

Свойство 1. В каждый конъюнктивный член (слагаемое) входят все элементарные высказывания либо в виде самого высказывания, либо в виде его отрицания.

Свойство 2. При любых значениях элементарных высказываний в дизъюнктивной нормальной форме может быть истинным не более одного конъюнктивного члена (слагаемого).

Доказательство теоремы о двуслойности персептрона . Из теоремы о дизъюнктивной нормальной форме следует, что любой многослойный персептрон может быть представлен в следующем виде:

В силу второго свойства дизъюнктивной нормальной формы, равенство (5) можно переписать в виде

0\right]. » src=»http://algmet.simulacrum.me/tai/l3/7d6782b932b94b7cff6d148c958b3fb6.png» w > (6)

Переведем в арифметическую форму все слагаемые в выражении (6). Конъюнкцию заменяем на умножение, а отрицание на разность: . Произведя эту замену и приведя подобные члены, получим:

0\right], » src=»http://algmet.simulacrum.me/tai/l3/a359d1c3468b5701eea43f59ef563b5c.png» w > (7)

где — множество индексов сомножителей в -м слагаемом, — число, указывающее, сколько раз такое слагаемое встретилось в выражении (6) после замены и раскрытия скобок (число подобных слагаемых).

Заменим -е слагаемое в формуле (7) персептроном следующего вида:

|I_l|-1\right]. » src=»http://algmet.simulacrum.me/tai/l3/86eb903d6fa4d955a1ada791fbe0bd63.png» w > (8)

Подставив выражение (8) в формулу (7), получим равенство (1), то есть произвольный многослойный персептрон представлен в виде (1) с целочисленными коэффициентами. В качестве персептронов первого слоя используются персептроны вида (8) с необучаемыми весами. Теорема доказана.

Подводя итоги данной лекции, следует отметить следующие основные свойства персептронов :

  1. Любой персептрон может содержать один или два слоя. В случае двухслойного персептрона веса первого слоя не обучаются.
  2. Веса любого персептрона можно заменить на целочисленные.
  3. При обучении после конечного числа итераций возможны два исхода: персептрон обучится или вектор весов персептрона будет повторяться ( персептрон зациклится).

Знание этих свойств позволяет избежать «усовершенствований» типа модификации скорости обучения и других, столь же «эффективных» модернизаций.

Трудности с алгоритмом обучения персептрона

Иногда бывает сложно определить, выполнено ли условие разделимости для конкретного обучающего множества. Кроме того, во многих встречающихся на практике ситуациях входы часто меняются во времени и могут быть разделимы в один момент времени и неразделимы — в другой. В доказательстве алгоритма обучения персептрона ничего не говорится также о том, сколько шагов требуется для обучения сети. Мало утешительного знать, что обучение закончится за конечное число шагов, если необходимое для этого время сравнимо с геологической эпохой. Кроме того, не доказано, что персептронный алгоритм обучения более быстр по сравнению с простым перебором всех возможных значений весов, и в некоторых случаях этот примитивный подход может оказаться лучше.

На эти вопросы никогда не находилось удовлетворительного ответа, они относятся к природе обучающего материала. В различной форме они возникнут на последующих лекциях, где рассматриваются другие сетевые парадигмы. Ответы для современных сетей, как правило, не более удовлетворительны, чем для персептрона . Эти проблемы являются важной областью современных исследований.

Персептрон

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

Перце́птрон (Персептрон [1] , англ. perсeptron от лат. perсeptio — восприятие) — устройство МАРК-1 [1] , а также соответствующая ему математическая модель, созданная Фрэнком Розенблаттом с целью построения модели мозга. Под «моделью мозга» понимается любая теоретическая система, которая стремится объяснить физиологические функции мозга с помощью известных законов физики и математики, а также известных фактов нейроанатомии и нейрофизиологии. Перцептрон (строгое определение которого будет дано ниже) представляет собой передающую сеть, состоящую из генераторов сигнала трёх типов: сенсорных элементов, ассоциативных элементов и реагирующих элементов. Производящие функции этих элементов зависят от сигналов, возникающих либо где-то внутри передающей сети, либо, для внешних элементов, от сигналов, поступающих из внешней среды. Но, как правило, когда говорится «перцептрон Розенблатта», имеется в виду частный случай — т. н. элементарный перцептрон, который упрощён по сравнению с общим видом перцептрона по ряду параметров.

Содержание

Появление перцептрона

В середине 1958 года Фрэнк Розенблат предложил модель электронного устройства, названного им перцептроном, которое должно было бы имитировать процессы человеческого мышления. Перцептрон должен был передавать сигналы от «глаза», составленного из фотоэлементов, в блоки электромеханических ячеек памяти, которые оценивали относительную величину электрических сигналов. Эти ячейки соединялись между собой случайным образом в соответствии с принципами коннективизма. Два года спустя была продемонстрирована первая действующая машина «Марк-1», которая могла научится распознавать некоторые из букв, написанных на карточках, которые подносили к его «глазам», напоминающие кинокамеры.

Чтобы «научить» перцептрон способности строить догадки на основе исходных предпосылок, в нем предусматривалась некая элементарная разновидность автономной работы или «самопрограммирования». При распознавании той или иной буквы одни её элементы или группы элементов оказываются гораздо более существенными, чем другие. Перцептрон мог «научаться» выделять такие характерные особенности буквы полуавтоматически, своего рода методом проб и ошибок, напоминающим процесс обучения. Однако возможности перцептрона были ограниченными: машина не могла надежно распознавать частично закрытые буквы, а также буквы иного размера или рисунка, нежели те, которые использовались на этапе ее обучения.

Ведущие представители так называемого «нисходящего метода» специализировались, в отличие от представителей «восходящего метода», в составлении для цифровых компьютеров общего назначения программ решения задач, требующих от людей значительного интеллекта, например для игры в шахматы или поиска математических доказательств. К числу защитников «нисходящего метода» относились сотрудники Массачусетского технологического института Марвин Минский и Сеймур Пейперт. Минский начал свою карьеру исследователя ИИ сторонником «восходящего метода» и в 1951 году построил обучающуюся сеть на вакуумных электронных лампах. Однако вскоре к моменту создания перцептрона он перешел в противоположный лагерь.

В соавторстве с южно-африканским математиком Пейпертом он опубликовал в 1969 году книгу «Перцептроны», где математически доказывалось, что перцептроны, подобные розенблатовским, принципиально не в состоянии выполнять многие из тех функций, которые приписывал перцептронам Розенблат. Минский утверждал, что, не говоря уже о роли работающих под диктовку машинисток, подвижных роботов или машин, способных читать, слушать и понимать прочитанное или услышанное, перцептроны никогда не обретут даже умения распознавать предмет частично заслоненный другим. Глядя на торчащий из-за кресла кошачий хвост, подобная машина никогда не сможет понять, что она видит. Эта книга существенно повлияла на пути развития науки об искусственном интеллекте, т.к. переместила научный интерес и субсидии правительственных организаций США, традиционно финансирующих исследования по ИИ, на другое направление исследований — «нисходящий метод».

В 80-х гг. интерес к кибернетике возродился, так как сторонники «нисходящего метода» столкнулись со столь же неодолимыми трудностями. Сам Минский публично выразил сожаление, что его выступление нанесло урон концепции перцептронов, заявив, что, согласно его нынешним представлениям, для реального прорыва вперед в создании разумных машин потребуется устройство, во многом похожее на перцептрон. Но в основном ИИ стал синонимом нисходящего подхода, который выражался в составлении все более сложных программ для компьютеров, моделирующих сложную деятельность человеческого мозга.

Определения, данные Ф. Розенблаттом

Серьезное ознакомленние с теорией перцептронов требует знания базовых определений и теорем, совокупность которых и представляет собой базовую основу для всех последующих видов искусственных нейронных сетей

Виды элементов (нейронов) в перцептроне

  • Определение 7. Простым S-элементом (Сенсорным элементом) является чувствительный элемент, который от воздействия какого-либо из видов энергии (например, света, звука, давления, тепла и т. п.) вырабатывает сигнал. Если входной сигнал превышает некоторый порог , то элемент выдаёт выходной сигнал , в противном случае выходной сигнал равен нулю.
  • Определение 9. Простым A-элементом (Ассоциативным элементом) называется логический решающий элемент, который выдаёт выходной сигнал, когда алгебраическая сумма его входных сигналов равна или превышает некоторую пороговую величину 0″ alt= «\theta_>0″ />. Выходной сигнал равен +1, если была превышена пороговая величина ; в противном случае он равен нулю. Если , то говорят, что A-элемент является активным.
  • Определение 11. Простым R-элементом (Реагирующим элементом) называется элемент, который выдаёт выходной сигнал , если сумма его входных сигналов является строго положительной, и сигнал , если сумма его входных сигналов является строго отрицательной. Если сумма входных сигналов равна нулю, выход можно считать либо равным нулю, либо неопределённым.

Определения и классификация перцептронов

  • Определение 17.Перцептрон представляет собой сеть, состоящую из S, A, R — элементов, с переменной матрицей взаимодействия V (элементы которой — весовые коэффициенты), определяемой последовательностью прошлых состояний активности сети.
  • Определение 18. Логическое расстояние от элемента к элементу равно числу слоёв между ними.
  • Определение 19.Перцептроном с последовательными связями называется система, в которой все связи, начинающиеся от элементов с логическим расстоянием d от ближайшего S-элемента, оканчиваются на элементах с логическим расстоянием d+1 от ближайшего S-элемента.
  • Определение 20.Перцептроном с перекрестными связями называется система, в которой некоторые связи соединяют друг с другом элементы одного типа (S, A или R), находящиеся на одинаковом логическом расстоянии от S-элементов, причем все остальные связи — последовательного типа.
  • Определение 21.Перцептроном с обратной связью называется система, в которой по крайней мере один элемент A или R, находящийся на расстоянии от ближайшего S-элемента, является исходным в цепи обратной связи к S-элементу или A-элементу, расстояние которого до ближайшего S-элемента ; другими словами, это система с обратными связями от элементов, расположенных ближе к выходу, к элементам, расположенным ближе к входу системы.
  • Определение 22.Простым перцептроном называется любая система, удовлетворяющая следующим пяти условиям:
    • В системе имеется только один R-элемент, который связан со всеми A-элементами.
    • Система представляет собой перцептрон с последовательными связями, идущими только от S-элементов к A-элементам и от A-элементов к R-элементам.
    • Веса всех связей от S-элементов к A-элементам являются фиксированными (не изменяются во времени).
    • Время передачи каждой связи равно либо нулю, либо фиксированной постоянной t.
    • Все активирующие функции S,A,R – элементов имеют вид : ,

где – алгебраическая сумма всех сигналов, поступающих одновременно на вход элемента .

  • Определение 23.Элементарным перцептроном называется простой перцептрон с простыми R и A элементами, активизирующая функция которого имеет вид:

.

Определения, данные М. Минским

Минский изучал свойства параллельных вычислений, частным случаем которых на то время был перцептрон. Для анализа его свойств ему пришлось переизложить теорию перцептронов на язык предикатов . Хотя такой математический аппарат позволил применить анализ только к элементарному перцептрону Розенблатта, зато он вскрыл много принципиальных ограничений для параллельных вычислений, от которых не свободен не один вид современных искусственных нейронных сетей .

Определения и классификация перцептронов на языке предикатов

Определение. Перцептроном называется устройство, способное вычислять все предикаты, линейные относительно некоторого заданного множества Ф частных предикатов.

С этой позиции перцептроны можно классифицировать следующим образом:

  • 1. Перцептроны, ограниченные по диаметру. Для каждого предиката F из Ф диаметр множества точек плоскости, от которых зависит F, не превосходит некоторой фиксированной величины.
  • 2. Перцептроны ограниченного порядка. Мы будем говорить, что перцептрон имеет порядок Описание элементарного перцептрона

Перцепторон состоит из элементов 3-х типов: S — элементов, A — элементов и R — элемента. S — элементы это — слой рецепторов. Эти рецепторы соединены с A — элементами с помощью тормозных или возбуждающих связей. Каждый рецептор может находиться в одном из двух состояний — покоя или возбуждения. A — элементы представляют собой сумматоры с порогом (то есть формальные нейроны ). Это означает, что A — элемент возбуждается, если алгебраическая сумма возбуждений, приходящих к нему от рецепторов, превышает определенную величину — его порог. При этом сигнал от рецептора, приходящий по возбуждающей связи, считается положительным, а приходящий по тормозной связи — отрицательным. Сигналы от возбудившихся A — элементов передаются в сумматор R, причем сигнал от i-го ассоциативного элемента передается с коэффициентом ki .

А- или R- элементы (который является пороговыми) подсчитывают некоторую линейную форму (как правило сумму весовых коэффициентов) от своих входов и сравнивает ее с заданным значением — порогом. Если у А-элемента входов, то в нем должны быть заданы весов и порог . Перцептрон выдает , если линейная форма от входов с коэффициентами превышает и иначе.

С помощью одного порогового элемента можно реализовать 14 булевых функций, кроме эквиваленции (знак равно) и исключающего или (XOR). Любая булева функция представима в виде построенной из пороговых элементов нейронной сети глубины 2.

Система связей между рецепторами S и A — элементами, так же как и пороги A — элементов выбираются некоторым случайным, но фиксированным образом, а обучение состоит лишь в изменении коэффициентов . Считаем, что мы хотим научить перцептрон разделять два класса объектов, и потребуем, чтобы при предъявлении объектов первого класса выход перцептрона был положителен, а при предъявлении объектов второго класса — отрицательным. Начальные коэффициенты полагаем равными нулю. Далее предъявляем обучающую выборку: объекты (например, круги либо квадраты) с указанием класса, к которым они принадлежат. Показываем перцетрону объект первого класса. При этом некоторые A — элементы возбудятся. Коэффициенты , соответствующие этим возбужденным элементам, увеличиваем на 1. Затем предъявляем объект второго класса и коэффициенты тех A — элементов, которые возбудятся при этом показе, уменьшаем на 1. Этот процесс продолжим для всей обучающей выборки. В результате обучения сформируются значения весов связей .

После обучения перцептрон готов работать в режиме распознавания или обобщения В этом режиме перцептрону предъявляются «не знакомые» перцептрону объекты, и перцептрон должен установить, к какому классу они принадлежат. Работа перцептрона состоит в следующем: при предъявлении объекта возбудившиеся A — элементы передают сигнал R — элементу, равный сумме соответствующих коэффициентов . Если эта сумма положительна, то принимается решение, что данный объект принадлежит к первому классу, а если она отрицательна — то второму.

Алгоритмы обучения

Классический метод обучения перцептрона — это обучение с коррекцией ошибки. Представляет собой такой метод обучения, при котором вес связи не изменяется до тех пор, пока текущая реакция перцептрона остается правильной. При появлении неправильной реакции вес изменяется на единицу, а знак (+/-) определяется противоположным от знака ошибки.

Кроме того, Розенблатт пытался классифицировать различные алгоритмы обучения, называя их системами подкрепления. В результате он различал следующие виды:

  • Положительное подкрепление — представляет собой такой процесс подкрепления, при котором вес связи, начинающийся на активном элементе и оканчивающийся на элементе , изменяется на величину r, знак которой совпадает со знаком сигнала .
  • Отрицательное подкрепление — представляет собой такой процесс подкрепления, при котором вес связи, начинающийся на активном элементе и оканчивающийся на элементе , изменяется на величину r, знак которой противоположен знаку сигнала .

Кроме, классического метода обучения перцептрона Розенблатт также ввел понятие об обучении без учителя, предложив следующий способ обучения:

  • Альфа — системой подкрепления называется система подкрепления, при которой веса всех активных связей , которые оканчиваются на некотором элементе , изменяются на одинаковую величину r, а веса не активных связей за это время не изменяются.

Описывая эти системы подкрепления Розенблатт основывался на идеях Хебба об обучении, уточняя различные возможные виды. Затем с появлением многослойного перцептрона оно было модифицировано и его стали называть дельта-правило . Модификация была проведена с целью сделать функцию обучения дифферинцированной, что в свою очередь нужно для применения метода градиентного спуска, благодаря которому и возможно обучение более одного слоя. При этом пришлось отказаться от бинарного сигнала, и пользоваться на входе вещественными числами.

Возможности и ограничения модели

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

Первые успехи исследований перцептронов и других нейросетей вызвал взрыв активности и энтузиазма. М. Минский, Ф.Розенблат, Б. Уидроу и другие разработали ряд искусственных нейронных сетей. В течение некоторого времени казалось, что ключ к интеллекту найден, и воспроизведение человеческого мозга является лишь вопросом конструирования достаточно большой сети.

Но эта иллюзия вскоре рассеялась. Возможности перцептронов оказались довольно ограниченными. Серьезный математический анализ перцептронов был проведен М.Минским и С. Пейпертом (подробнее см. ниже). В последствии работа Вассермана, вызвала новый всплеск активности в области искуственных нейронных сетей, и применение идей теории перцептронов на новый лад с образованием собственной новой терминологии и становлением науки о нейросетях, но с точки зрения технического приложения в противовес построению моделей мозга. Но к сожалению некоторые неточности в его работе привели к ряду недоразумений. Так, например, Вассерманом была предложена классификация искусственных нейроных сетей на основе подсчета числа обучаемых слоев связей, а не по числу структурных элементов сети. Но такая классификация проблематична, так как не позволяет говорить об особенностях определенного вида нейросетей. Это вызвало ряд недоразумений в последующие годы при определении перцептрона, так как сам автор всегда говорил о нем, как о трехслойном, а классификация по числу обучаемых слоев предполагала называть его однослойным. Но к сожалению, это сказалось не только на терминологии, но и не верном представлении о перцептроне как простейшем пороговом элементе. Так как была не учтена роль первого необучаемого слоя.

Структура, состоящая из нескольких соединенных слоев пороговых элементов называется многослойным перцептроном. Такой термин появился когда был предложен алгоритм обратного распространения, с помощью которого стали обучать (настраивать коэффициенты) более одного слоя. Но такую структуру не стоит прямо сравнивать с перцептроном Розенблатта. Это достаточно разные модели нейросетей, но которые во многом эквивалентны друг другу в общем случае, и специфичны для разного рода задач.

Традиционные заблуждения

В результате популяризации искуственных нейронных сетей журналистами и маркетологами был допущен ряд неточностей, которые, при недостаточном изучении оригинальных работ по этой тематике, неверно истолковывались молодыми (на то время) учеными. В результате по сей день можно встретиться с недостаточно глубокой трактовкой функциональных возможностей перцептрона по сравнению с другими ИНС, разработаными в последующие годы.

Терминологические неточности

Неточность № 1. Перцептрон — нейронная сеть без скрытых слоев.

Вассерманом была сделана попытка определенным образом классифицировать различные виды нейронных сетей:

«Как видно из публикаций, нет общепринятого способа подсчета числа слоев в сети. Многослойная сеть состоит из чередующихся множеств нейронов и весов. Входной слой не выполняет суммирования. Эти нейроны служат лишь в качестве разветвлений для первого множества весов и не влияют на вычислительные возможности сети. По этой причине первый слой не принимается во внимание при подсчете слоев, и сеть считается двухслойной, так как только два слоя выполняют вычисления. Далее, веса слоя считаются связанными со следующими за ними нейронами. Следовательно, слой состоит из множества весов со следующими за ними нейронами, суммирующими взвешенные сигналы.»

В результате такого представления перцептрон попал под определение однослойная нейроная сеть. При этом когда говорят, что перцептрон не имеет скрытых слоев, имеют в виду, что у него нет скрытых слоев обучающихся нейронов (веса которых адаптируются к задаче). Поэтому всю совокупность тех выходов системы из S и A элементов, которые достигают R-элемента (единственного обучающегося) просто логически заменяют набором (модифицированных по жесткому правилу) новых входов.

Но обычное игнорирование необучаемых слоев с фиксированными связми (который имеется в элементарном перцептроне между S и А — элементами) позволяет делать неправильные выводы о возможностях ИНС, так например, Минский поступил очень корректно переформулировав А-элемент как предикат, а например Вассермен уже потерял такое представление и у него А-элемент просто вход (почти эквивалентный S-элементу). Поэтому при такой терминалогической неточности упускается из виду тот факт, что в перцептроне происходит отображение рецепторного поля S — элементов на ассоциативное поле А-элементов, в результате чего и происходит преобразование любой нелинейной разделимой задачи в линейно разделимую.

Функциональные заблуждения

Большенство функциональных заблуждений сводятся к якобы невозможности решения перцептроном нелинейно разделяемой задачи. Но вариаций на это тему достаточно много, рассмотрим главные их них.

№ 1. Перцептрон не способен решить задачу XOR.

Самое несерьезное заявление. На изображении показанно решение и ниже дана таблица поиска соответствующих весов при алгоритме обучения с коррекцией ошибки. Как правило, данное заблуждение возникает из-за того, что неправильно интерпретируют определение перцептрона, данного Минским (см. выше), а именно, предикаты приравнивают входам (параметрам), хотя это разные вещи. Предикат эквивалентен входу только если предикат зависит от одного аргумента. Другая причина возникает из-за того, что перцептрон путают с пороговым элементом Маккалока-Питса.

№ 2. Выбором случайных весов можно достигнуть обучения и линейно неразделимым (вообще, любым) задачам, но только если повезет, и в новых переменных (выходах A-нейронов) задача окажется линейно разделимой. Но может и не повезти.

Теорема сходимости Розенблатта ОДНОЗНАЧНО доказывает, что не может быть ни какого «может и не повезти», при равенстве А-элементов числу стимулов и не особенной SA матрице — вероятность решения 100 %. То есть при отображении рецепторного поля на ассоциативное поле большей на одну размерность случайным (нелинейным) оператором нелинейная задача превращается в линейно разделимую. А следующий обучаемый слой уже находит линейное решение в другом пространстве входов.

№ 3. Если у Вас в задаче размерность входов довольно высока, а обучающих примеров мало, то в таком «слабозаполненном» пространстве число удач может и не оказаться малым. Это свидетельствует лишь о частном случае пригодности перцептрона, а не его универсальности.

Данный аргумент легко проверить на тестовой задаче под названием «шахматная доска» или «губка с водой»:

Дана цепочка из 2N единиц или 0. Если эта цепочка является зеркально симметричной относительно центра, то есть x[1:1:N] = x[2N:-1:N+1] то на выходе 1. Иначе 0.» Обучающие примеры _все_ (это важно) 2²N цепочек. Могут быть вариации данной задачи: Имеем изображение 256х256 пикселей изображение из 2 цветов. Обучаем перцептрон всем возможным состояниям, то есть на вход подаем последовательно координаты x, y и требуем на выходе соответствующий цвет точки. В итоге имеем 65536 различных пар стимул-реакция. Берем изображение такого типа — Если либо x нечетное (0..255), либо y нечетное (но не одновременно), то цвет 1. Иначе — цвет 0. Обучить без ошибок.

Если данный аргумент справедлив, то перцептрон не сможет ни при каких условиях обучится не делая ни одной ошибки. Иначе перцептрон не ошибется ни разу.

На практике оказывается, что данная задача очень проста для перцептрона: чтобы ее решить, перцептрону достаточно 1500 А-элементов (вместо полных 65536, необходимых для любой задачи). При этом число итерациий порядка 1000. При 1000 А-элементов перцептрон не сходится за 10000 итераций. Если же увеличить число А-элементов до 40000, то схождения можно ожидать за 30-80 итераций.

№ 4. В перцептроне Розенблатта столько А-элементов, сколько входов. И сходимость по Розенблатту, это стабилизация весов.

Нет. Это следует из следствия теоремы сходимости.

Следствие 2. Если число стимулов в пространстве Ф равно n>N (то есть больше числа А-элементов элементарного перцептрона), то существует некоторая классификация С(Ф), для которой решения не существует.

Отсюда должно быть ясно, что:

  • 1. у Розенблатта число А-элементов равно числу стимулов (обучающих примеров), а не числу входов.
  • 2. Сходимость по Розенблатту, это не стабилизация весов, а наличие всех требуемых классификаций, то есть по сути отсутствие ошибок.

Ограничения перцептрона, описанные Минским

Действительно Минским после серьезных экспериментов с перцептроном и его всестороннего анализа была предпринята его критика. Здесь нужно отметить тот факт, что на то время все известные ИНС назывались перцептроном, и Минский критиковал именно весь класс искусственных нейронных сетей, а перцептрон Розенблатта был наиболее детально проработан теоритически и имел физическое воплощение в устройстве под названием МАРК-1. В то время была слабо развита теория о параллельных вычислениях, а перцептрон полностью соответствовал принципам таких вычислений. По большому счету Минский показал преймущество последовательных вычислений перед параллельным в определенных классах задач связанных с инвариантным представлением. Ниже мы рассмотрим некоторые следствия анализа Минского. Критику Минского можно разделить на три взаимосвязаные темы:

Ограничения, связанные с инвариантным представлением

Минский описывал специальные задачи такие как «четность» и «один в блоке», которые показывают ограничения перцептрона в том, что он не может распознавать инвариантные входные данные (изображения) бесконечного порядка. А в частности, при распознавании четности конечного порядка первый слой перцептрона вынужден становиться полносвязным. В связи с эти есть ограничения на следующие практические типовые задачи.

Типовая задача № 1. Если требуется построить машину для чтения печатных букв или цифр, то возникает естественное желание, чтобы эта машина могла распознавать их независимо от положения на странице, то есть чтобы на решение машины не оказывали влияния элементы группы переносов. Иными словами, восприятие машины должно быть «инвариантно относительно группы переносов», то есть ее решение должно быть одним и тем же для каждого представителя какого-либо класса эквивалентности относительно группы переносов. Итак, более точно первую задачу можно определить как — нахождение геометрического свойства. Вот как описывает Минский понятие геометрического свойства:

«Когда мы говорим геометрическое свойство, мы имеем в виду что-то инвариантное относительно переноса, или вращения, или растяжения. Сочетание первых инвариантностей определяет конгруэнтную группу преобразований, а наличие всех трех дает фигуры подобные в эвклидовой геометрии».

Типовая задача № 2. Ряд подзадач могут формулироваться различно, как (1) определить, одна или более фигур находятся в видимом пространстве, (2) плотная ли видимая фигура или же в ней находится отдельная фигура, (3) … . Независимо от этого они имеют общую суть — нахождение признака, связана ли фигура, то есть предиката связанность.

Типовая задача № 3. Распознавание фигур в контексте, то есть, например, содержит ли данная фигура прямоугольник и, быть может, что-то еще.

Так вот, приведенные здесь три типа задач распознавания не рекомендуется решать с помощью параллельных способов вычислений, в том числе и с помощью перцептрона. Более того, проблема не в конкретной архитектуре перцептрона, а в необходимости знания всего глобального контекста. Поэтому как перцептрон, так и любые другие виды нейронных сетей неспособны полноценно решить представленные здесь задачи. Мы не приводим здесь довольно сложные доказательства Минского, важно лишь, что они основываются на том, что перцептрон (равно как и любая другая нейронная сеть) не справляется с распознаванием инвариантных входных данных.

Ограничения, связаные с возможностью прогнозирования

Способности ИНС и в частности перцептрона, не столь велики как рекламируется. И это связано даже не с устройством, или алгоритмом, осуществляющим прогноз, а с самим происходящим явлением. Только в том случае когда во внимание берутся существенные параметры на основании которых будет строится прогноз будет иметь место некоторый успех. Выбором этих параметров занимаются эксперты в определенной области на основании своего опыта и интуиции, и к прогнозирующим машинам это не имеет ни какого отношения. Как только, такие параметры определенны можно начать статистическую обработку данных и построить модель явления. Но данная модель будет лишь показывать зависимость (корреляцию) выбранных входных параметров от выходных, которые имели место в прошлом.

Минский пытался показать, что перцептрон не имеет в этом отношении серьезных преймуществ по сравнению с другими статистическими методами прогноза. И если рассматривать конечный результат он полностью прав. Единственно, разницу составляет то, что классические статистические методы требуют расчета многих сложных уравнений, а перцептрон более естественно решает требуемые уравнения, что связано с его устройством. Если на перцептрон посмотреть глазами математика, то окажется, что перцептрон это по сути способ решения систем уравнений с большим числом неизвестных коэффициентов. Алгоритм поиска этих коэффициетов технически более быстрый чем у аналогичных классических способов решения уравнений.

Построив систему уравнений, охватывающую наиболее значимые параметры (если нам повезет их найти), можно говорит о том, что мы нашли закон, по статусу близкий к законам физики, но только оперирующий большим числом переменных. Именно такие модели позволяют описывать системы с больщим числом состояний — биологические, социальные и т. п. Именно в этом смысле мы и можем говорить о прогнозе.

Качественость сделанного прогноза или точность построенной модели зависит от числа знаний, используемых при построении модели. Если мы хотим, чтобы на основании половины всех необходимых знаний модель была способна достроить (спрогнозировать) вторую половину неизвестных нам знаний, то желательно иметь информацию равномерно распределенную по всему пространству возможных состояний. В таком случае перцептрон способен спрогнозировать неизвестные, но близкие к известным результаты с определенной верояностью правильности. В противном же случае, мы имеем как раз ситуацию с необходимость прогнозировать результат задачи «шахматной доски», которая рассматривалась выше. Но тут главное, что выше вопрос был связан с возможностью обучения этой задаче, теперь же идет речь о необходимости достроить по имеющейся информации — недостающую, то есть спрогнозировать. Человек с такой задачей справляется быстро, так как находит определенную аналогию. Для перцептрона (а так-же для ряда других ИНС) данная задача в полной мере слишком сложна. Это связанно с основным ограничением ИНС — невозможность найти инвариант (см. выше), в следствии этого перцептрон работает только как статистическая машина, но не способен самостоятеьно находить инварианты, которые были бы основой для принятия решений.

Технические ограничения по скорости и объему используемой памяти

Минский показал, что задачи, которые в принципе могут быть решены перцептроном, могут потребовать нереально больших времен или нереально большой памяти. Например, для различения некоторых классов объектов коэффициенты части ассоциативных элементов должны быть столь велики, что для хранения их в вычислительной машине потребовался бы больший объем памяти, чем для того, чтобы просто запомнить все конкретные объекты этих двух классов.

Нейронные сети, перцептрон

Искусственная нейронная сеть (ИНС) (англ. Artificial neural network (ANN)) — упрощенная модель биологической нейронной сети, представляющая собой совокупность искусственных нейронов, взаимодействующих между собой.

Основные принципы работы нейронных сетей были описаны еще в 1943 году Уорреном Мак-Каллоком и Уолтером Питтсом [1] . В 1957 году нейрофизиолог Фрэнк Розенблатт разработал первую нейронную сеть [2] , а в 2010 году большие объемы данных для обучения открыли возможность использовать нейронные сети для машинного обучения.

На данный момент нейронные сети используются в многочисленных областях машинного обучения и решают проблемы различной сложности.

Содержание

Структура нейронной сети [ править ]

Хорошим примером биологической нейронной сети является человеческий мозг. Наш мозг — сложнейшая биологическая нейронная сеть, которая принимает информацию от органов чувств и каким-то образом ее обрабатывает (узнавание лиц, возникновение ощущений и т.д.). Мозг же, в свою очередь, состоит из нейронов, взаимодействующих между собой.

Для построения искусственной нейронной сети будем использовать ту же структуру. Как и биологическая нейронная сеть, искусственная состоит из нейронов, взаимодействующих между собой, однако представляет собой упрощенную модель. Так, например, искусственный нейрон, из которых состоит ИНС, имеет намного более простую структуру: у него есть несколько входов, на которых он принимает различные сигналы, преобразует их и передает другим нейронам. Другими словами, искусственный нейрон — это такая функция [math]\mathbb^n \rightarrow \mathbb[/math] , которая преобразует несколько входных параметров в один выходной.

Как видно на рисунке справа, у нейрона есть [math]n[/math] входов [math]x_i[/math] , у каждого из которого есть вес [math]w_i[/math] , на который умножается сигнал, проходящий по связи. После этого взвешенные сигналы [math]x_i \cdot w_i[/math] направляются в сумматор, который аггрегирует все сигналы во взвешенную сумму. Эту сумму также называют [math]net[/math] . Таким образом, [math]net = \sum_^ w_i \cdot x_i = w^T \cdot x[/math] .

Просто так передавать взвешенную сумму [math]net[/math] на выход достаточно бессмысленно — нейрон должен ее как-то обработать и сформировать адекватный выходной сигнал. Для этих целей используют функцию активации, которая преобразует взвешенную сумму в какое-то число, которое и будет являться выходом нейрона. Функция активации обозначается [math]\phi(net)[/math] . Таким образом, выходов искусственного нейрона является [math]\phi(net)[/math] .

Для разных типов нейронов используют самые разные функции активации, но одними из самых популярных являются:

Виды нейронных сетей [ править ]

Разобравшись с тем, как устроен нейрон в нейронной сети, осталось понять, как их в этой сети располагать и соединять.

Как правило, в большинстве нейронных сетей есть так называемый входной слой, который выполняет только одну задачу — распределение входных сигналов остальным нейронам. Нейроны этого слоя не производят никаких вычислений. В остальном нейронные сети делятся на основные категории, представленные ниже.

Однослойные нейронные сети [ править ]

Однослойная нейронная сеть (англ. Single-layer neural network) — сеть, в которой сигналы от входного слоя сразу подаются на выходной слой, который и преобразует сигнал и сразу же выдает ответ.

Как видно из схемы однослойной нейронной сети, представленной справа, сигналы [math]x_1, x_2, \ldots x_n[/math] поступают на входной слой (который не считается за слой нейронной сети), а затем сигналы распределяются на выходной слой обычных нейронов. На каждом ребре от нейрона входного слоя к нейрону выходного слоя написано число — вес соответствующей связи.

Многослойные нейронные сети [ править ]

Многослойная нейронная сеть (англ. Multilayer neural network) — нейронная сеть, состоящая из входного, выходного и расположенного(ых) между ними одного (нескольких) скрытых слоев нейронов.

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

Работу скрытых слоев нейронов можно сравнить с работой большого завода. Продукт (выходной сигнал) на заводе собирается по стадиям на станках. После каждого станка получается какой-то промежуточный результат. Скрытые слои тоже преобразуют входные сигналы в некоторые промежуточные результаты.

Сети прямого распространения [ править ]

Сети прямого распространения (англ. Feedforward neural network) (feedforward сети) — искусственные нейронные сети, в которых сигнал распространяется строго от входного слоя к выходному. В обратном направлении сигнал не распространяется.

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

Однако сигнал в нейронных сетях может идти и в обратную сторону.

Сети с обратными связями [ править ]

Сети с обратными связями (англ. Recurrent neural network) — искусственные нейронные сети, в которых выход нейрона может вновь подаваться на его вход. В более общем случае это означает возможность распространения сигнала от выходов к входам.

В сетях прямого распространения выход сети определяется входным сигналом и весовыми коэффициентами при искусственных нейронах. В сетях с обратными связями выходы нейронов могут возвращаться на входы. Это означает, что выход какого-нибудь нейрона определяется не только его весами и входным сигналом, но еще и предыдущими выходами (так как они снова вернулись на входы).

Обучение нейронной сети [ править ]

Обучение нейронной сети — поиск такого набора весовых коэффициентов, при котором входной сигнал после прохода по сети преобразуется в нужный нам выходной.

Это определение «обучения нейронной сети» соответствует и биологическим нейросетям. Наш мозг состоит из огромного количества связанных друг с другом нейросетей, каждая из которых в отдельности состоит из нейронов одного типа (с одинаковой функцией активации). Наш мозг обучается благодаря изменению синапсов — элементов, которые усиливают или ослабляют входной сигнал.

Если обучать сеть, используя только один входной сигнал, то сеть просто «запомнит правильный ответ», а как только мы подадим немного измененный сигнал, вместо правильного ответа получим бессмыслицу. Мы ждем от сети способности обобщать какие-то признаки и решать задачу на различных входных данных. Именно с этой целью и создаются обучающие выборки.

Обучающая выборка — конечный набор входных сигналов (иногда вместе с правильными выходными сигналами), по которым происходит обучение сети.

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

Тестовая выборка — конечный набор входных сигналов (иногда вместе с правильными выходными сигналами), по которым происходит оценка качества работы сети.

Само обучение нейронной сети можно разделить на два подхода: обучение с учителем [на 28.01.19 не создан] и обучение без учителя [на 28.01.19 не создан] . В первом случае веса меняются так, чтобы ответы сети минимально отличались от уже готовых правильных ответов, а во втором случае сеть самостоятельно классифицирует входные сигналы.

Перцептрон [ править ]

Перцептрон (англ. Perceptron) — простейший вид нейронных сетей. В основе лежит математическая модель восприятия информации мозгом, состоящая из сенсоров, ассоциативных и реагирующих элементов.

История [ править ]

Идею перцептрона предложил нейрофизиолог Фрэнк Розенблатт. Он предложил схему устройства, моделирующего процесс человеческого восприятия, и назвал его «перцептроном» (от латинского perceptio — восприятие). В 1960 году Розенблатт представил первый нейрокомпьютер — «Марк-1», который был способен распознавать некоторые буквы английского алфавита.

Таким образом перцептрон является одной из первых моделей нейросетей, а «Марк-1» — первым в мире нейрокомпьютером.

Описание [ править ]

В основе перцептрона лежит математическая модель восприятия информации мозгом. Разные исследователи по-разному его определяют. В самом общем своем виде (как его описывал Розенблатт) он представляет систему из элементов трех разных типов: сенсоров, ассоциативных элементов и реагирующих элементов.

Принцип работы перцептрона следующий:

  1. Первыми в работу включаются S-элементы. Они могут находиться либо в состоянии покоя (сигнал равен ), либо в состоянии возбуждения (сигнал равен 1);
  2. Далее сигналы от S-элементов передаются A-элементам по так называемым S-A связям. Эти связи могут иметь веса, равные только -1, или 1;
  3. Затем сигналы от сенсорных элементов, прошедших по S-A связям, попадают в A-элементы, которые еще называют ассоциативными элементами;
    • Одному A-элементу может соответствовать несколько S-элементов;
    • Если сигналы, поступившие на A-элемент, в совокупности превышают некоторый его порог ​ [math]\theta[/math] ​, то этот A-элемент возбуждается и выдает сигнал, равный 1;
    • В противном случае (сигнал от S-элементов не превысил порога A-элемента), генерируется нулевой сигнал;
  4. Далее сигналы, которые произвели возбужденные A-элементы, направляются к сумматору (R-элемент), действие которого нам уже известно. Однако, чтобы добраться до R-элемента, они проходят по A-R связям, у которых тоже есть веса (которые уже могут принимать любые значения, в отличие от S-A связей);
  5. R-элемент складывает друг с другом взвешенные сигналы от A-элементов, а затем
    • если превышен определенный порог, генерирует выходной сигнал, равный 1;
    • eсли порог не превышен, то выход перцептрона равен -1.

Для элементов перцептрона используют следующие названия:

  • S-элементы называют сенсорами;
  • A-элементы называют ассоциативными;
  • R-элементы называют реагирующими.

Классификация перцептронов [ править ]

Перцептрон с одним скрытым слоем (элементарный перцептрон, англ. elementary perceptron) — перцептрон, у которого имеется только по одному слою S, A и R элементов.

Однослойный персептрон (англ. Single-layer perceptron) — перцептрон, каждый S-элемент которого однозначно соответствует одному А-элементу, S-A связи всегда имеют вес 1, а порог любого А-элемента равен 1. Часть однослойного персептрона соответствует модели искусственного нейрона.

Его ключевая особенность состоит в том, что каждый S-элемент однозначно соответствует одному A-элементу, все S-A связи имеют вес, равный +1, а порог A элементов равен 1. Часть однослойного перцептрона, не содержащая входы, соответствует искусственному нейрону, как показано на картинке. Таким образом, однослойный перцептрон — это искусственный нейрон, который на вход принимает только и 1.

Однослойный персептрон также может быть и элементарным персептроном, у которого только по одному слою S,A,R-элементов.

Многослойный перцептрон по Розенблатту (англ. Rosenblatt multilayer perceptron) — перцептрон, который содержит более 1 слоя А-элементов.

Многослойный перцептрон по Румельхарту (англ. Rumelhart multilater perceptron) — частный случай многослойного персептрона по Розенблатту, с двумя особенностями:

  • S-A связи могут иметь произвольные веса и обучаться наравне с A-R связями;
  • Обучение производится по специальному алгоритму, который называется обучением по методу обратного распространения ошибки.

Обучение перцептрона [ править ]

Задача обучения перцептрона — подобрать такие [math]w_0, w_1, w_2, \ldots, w_n[/math] , чтобы [math]sign(\sigma(w_0 + w_1 \cdot x_1 + w_2 \cdot x_2 + \ldots + w_n \cdot x_n))[/math] как можно чаще совпадал с [math]y(x)[/math] — значением в обучающей выборке (здесь [math]\sigma[/math] — функция активации). Для удобства, чтобы не тащить за собой свободный член [math]w_0[/math] , добавим в вектор $x$ лишнюю «виртуальную размерность» и будем считать, что [math]x = (1, x_1, x_2, \ldots, x_n)[/math] . Тогда [math]w_0 + w_1 \cdot x_1 + w_2 \cdot x_2 + \ldots + w_n \cdot x_n[/math] можно заменить на [math]w^T \cdot x[/math] .

Чтобы обучать эту функцию, сначала надо выбрать функцию ошибки, которую потом можно оптимизировать градиентным спуском. Число неверно классифицированных примеров не подходит на эту кандидатуру, потому что эта функция кусочно-гладкая, с массой разрывов: она будет принимать только целые значения и резко меняться при переходе от одного числа неверно классифицированных примеров к другому. Поэтому использовать будем другую функцию, так называемый критерий перцептрона: [math]E_P(w) = -\sum_ y(x)(\sigma(w^T \cdot x))[/math] , где [math]M[/math] — множество примеров, которые перцептрон с весами [math]w[/math] классифицирует неправильно.

Иначе говоря, мы минимизируем суммарное отклонение наших ответов от правильных, но только в неправильную сторону; верный ответ ничего не вносит в функцию ошибки. Умножение на [math]y(x)[/math] здесь нужно для того, чтобы знак произведения всегда получался отрицательным: если правильный ответ −1, значит, перцептрон выдал положительное число (иначе бы ответ был верным), и наоборот. В результате у нас получилась кусочно-линейная функция, дифференцируемая почти везде, а этого вполне достаточно.

Теперь [math]E_P(w)[/math] можно оптимизировать градиентным спуском. На очередном шаге получаем: [math]w^ <(\tau+1)>= w^ <(\tau)>− \eta\triangledown_w E_P(w)[/math] .

Алгоритм такой — мы последовательно проходим примеры [math]x_1, x_2, \ldots[/math] из обучающего множества, и для каждого [math]x_n[/math] :

  • если он классифицирован правильно, не меняем ничего;
  • а если неправильно, прибавляем [math]\eta \triangledown_w E_P(w)[/math] .

Ошибка на примере [math]x_n[/math] при этом, очевидно, уменьшается, но, конечно, совершенно никто не гарантирует, что вместе с тем не увеличится ошибка от других примеров. Это правило обновления весов так и называется — правило обучения перцептрона, и это было основной математической идеей работы Розенблатта.

Применение [ править ]

  • Решение задач классификации, если объекты классификации обладают свойством линейной разделимости;
  • Прогнозирование и распознавание образов;
  • Управление агентами [3] .

Примеры кода [ править ]

Пример использования с помощью scikit-learn [4] [ править ]

Будем классифицировать с помощью перцептрона датасет MNIST [5] .

Нейронные сети, обучение персептрона

05.01.2010, 03:58

Стохастическое обучение персептрона
Всем привет! У меня тема курсовой работы «стохастическое обучение персептрона определения четности.

Нейронные сети
Написать програму в среде С++ Builder которая моделирует работу нейронной сети прямого.

Нейронные сети
Написать програму в среде С++ Builder которая моделирует работу нейронной сети прямого.

Нейронные сети. Ошибка в программе
Всем привет! Подскажите, не могу разобраться в коде программы распознавания. Ошибка №1 .

Нейронные сети. Алгоритм обратного распространения
Ребят помогите мне срочно нужно реализовать на C++ алгоритма обратного распространения. Кто с таким.

05.01.2010, 10:10 2 05.01.2010, 12:04 3 05.01.2010, 18:04 [ТС] 4
05.01.2010, 18:04
05.01.2010, 19:31 5

Решение

В принципе, для этой задачи хватило бы и 2 нейронов, ну да ладно.
Заметь, в задаче у тебя написано «обучение перцептрона», а это по моему однослойная нейронная сеть, и она не может обучится функции XOR которая дана в примере. Этот пример может обучится этой функции, так как там есть еще один промежуточный слой.
Состояние сети можно запоминать в файл, а потом его загружать, чтобы не обучать сеть заново.

Распознавание изображений(если простеньких), то не так уж и сложно. У меня есть распознавалка каптчи на MegaUpload. Дает где-то 40%(когда как) верности. Работает на этой же библиотеке. Такое слабое качество распознавания, потому что я при обучении отобрал всего лишь около сотни каптчей и на их основе и учил.

Вложения

NeuroNetwork.rar (229.2 Кб, 1300 просмотров)
06.01.2010, 12:26 [ТС] 6

Otaka, спасибо тебе большое за помошь, только у меня проблемка, я не могу поставить fann библиотеку накачала с инета литературу, на английском языке, честно сказать не сильно в нем шарю. Если тебе не трудно помоги

Добавлено через 25 минут
Скачала с того сайта, что ты посоветовал, файл fann-2.1.0beta, так внутри папочки разные, файлы из папки BorlandC++Builder6.0 я скопировала в папку по адресу C:\Program Files\Borland\CBuilder6\Lib\Obj, Чувствую себя как-то глупо наверно все неправильно сделала.

07.01.2010, 03:21 7

это про Персептрон из Ф. Уоссермен Нейрокомпьютерная техника

а в примере используеться xor, я не разбирался, но уже сомневаюсь что это персептрон

07.01.2010, 13:11 8

Наверное, если сделать сеть однослойной, то она не сможет научиться XOR функции. Вот тебе и будет перцептрон. Сделать её однослойной можно сделать в параметрах инициализации.

Нейрокомпьютерная техника: Теория и практика

Читайте также:

  1. I. Практика выслеживания себя
  2. II. Материалистическая теория
  3. II. О двух особенностях Октябрьской революции, или Октябрь и теория “перманентной” революции Троцкого
  4. II. Теория “самотека” в социалистическом строительстве
  5. III. Теория
  6. III. ТЕОРИЯ ИМПЕРИАЛИЗМА Р. ЛЮКСЕМБУРГ
  7. III. Теория “устойчивости” мелкого крестьянского хозяйства
  8. V. ПСИХОАНАЛИТИЧЕСКАЯ ТЕОРИЯ ЛИЧНОСТИ 1 страница
  9. V. ПСИХОАНАЛИТИЧЕСКАЯ ТЕОРИЯ ЛИЧНОСТИ 2 страница
  10. V. ПСИХОАНАЛИТИЧЕСКАЯ ТЕОРИЯ ЛИЧНОСТИ 3 страница
  11. V. ПСИХОАНАЛИТИЧЕСКАЯ ТЕОРИЯ ЛИЧНОСТИ 4 страница
  12. VI. ТЕОРИЯ РЕАЛИЗАЦИИ МАРКСА

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

Для специалистов в области вычислительной техники, а также студентов соответствующих специальностей вузов.

Перевод на русский язык, Ю. А. Зуев, В. А. Точенов, 1992.

ОГЛАВЛЕНИЕ

ПОЧЕМУ ИМЕННО ИСКУССТВЕННЫЕ НЕЙРОННЫЕ СЕТИ. 5

СВОЙСТВА ИСКУССТВЕННЫХ НЕЙРОННЫХ СЕТЕЙ. 5

ИСТОРИЧЕСКИЙ АСПЕКТ. 7

ИСКУССТВЕННЫЕ НЕЙРОННЫЕ СЕТИ СЕГОДНЯ. 10

ПЕРСПЕКТИВЫ НА БУДУЩЕЕ. 11

Глава 1. Основы искусственных нейронных сетей. 14

БИОЛОГИЧЕСКИЙ ПРОТОТИП. 14

ИСКУССТВЕННЫЙ НЕЙРОН. 16

ОДНОСЛОЙНЫЕ ИСКУССТВЕННЫЕ НЕЙРОННЫЕ СЕТИ. 19

МНОГОСЛОЙНЫЕ ИСКУССТВЕННЫЕ НЕЙРОННЫЕ СЕТИ. 20

ТЕРМИНОЛОГИЯ, ОБОЗНАЧЕНИЯ И СХЕМАТИЧЕСКОЕ ИЗОБРАЖЕНИЕ ИСКУССТВЕННЫХ НЕЙРОННЫХ СЕТЕЙ. 22

Глава 2. Персептроны. 26

ПЕРСЕПТРОНЫ И ЗАРОЖДЕНИЕ ИСКУССТВЕННЫХ НЕЙРОННЫХ СЕТЕЙ. 26

ПЕРСЕПТРОННАЯ ПРЕДСТАВЛЯЕМОСТЬ. 28

ОБУЧЕНИЕ ПЕРСЕПТРОНА. 36

АЛГОРИТМ ОБУЧЕНИЯ ПЕРСЕПТРОНА. 37

Глава 3. Процедура обратного распространения. 41

ВВЕДЕНИЕ В ПРОЦЕДУРУ ОБРАТНОГО РАСПРОСТРАНЕНИЯ. 41

ОБУЧАЮЩИЙ АЛГОРИТМ ОБРАТНОГО РАСПРОСТРАНЕНИЯ. 42

Обзор обучения. 44

ДАЛЬНЕЙШИЕ АЛГОРИТМИЧЕСКИЕ РАЗРАБОТКИ. 51

Глава 4. Сети встречного распространения. 55

ВВЕДЕНИЕ В СЕТИ ВСТРЕЧНОГО РАСПРОСТРАНЕНИЯ. 55

СТРУКТУРА СЕТИ. 55

НОРМАЛЬНОЕ ФУНКЦИОНИРОВАНИЕ. 56

ОБУЧЕНИЕ СЛОЯ КОХОНЕНА. 58

ОБУЧЕНИЕ СЛОЯ ГРОССБЕРГА. 64

СЕТЬ ВСТРЕЧНОГО РАСПРОСТРАНЕНИЯ ПОЛНОСТЬЮ. 64

ПРИЛОЖЕНИЕ: СЖАТИЕ ДАННЫХ. 66

Глава 5. Стохастические методы. 68

ИСПОЛЬЗОВАНИЕ ОБУЧЕНИЯ. 68

ПРИЛОЖЕНИЯ К ОБЩИМ НЕЛИНЕЙНЫМ ЗАДАЧАМ ОПТИМИЗАЦИИ. 75

ОБРАТНОЕ РАСПРОСТРАНЕНИЕ И ОБУЧЕНИЕ КОШИ. 76

Глава 6. Сети Хопфилда. 81

КОНФИГУРАЦИИ СЕТЕЙ С ОБРАТНЫМИ СВЯЗЯМИ. 82

Глава 7. Двунаправленная ассоциативная память. 98

СТРУКТУРА ДАП. 99

ВОССТАНОВЛЕНИЕ ЗАПОМНЕННЫХ АССОЦИАЦИЙ. 100

КОДИРОВАНИЕ АССОЦИАЦИЙ. 102

ЕМКОСТЬ ПАМЯТИ. 102

НЕПРЕРЫВНАЯ ДАП. 102

АДАПТИВНАЯ ДАП. 102

КОНКУРИРУЮЩАЯ ДАП. 102

Глава 8. Адаптивная резонансная теория. 102

АРХИТЕКТУРА APT. 102

РЕАЛИЗАЦИЯ APT. 102

ПРИМЕР ОБУЧЕНИЯ СЕТИ APT. 102

ХАРАКТЕРИСТИКИ APT. 102

Глава 9. Оптические нейронные сети. 102

ВЕКТОРНО-МАТРИЧНЫЕ УМНОЖИТЕЛИ. 102

ГОЛОГРАФИЧЕСКИЕ КОРРЕЛЯТОРЫ. 102

Глава 10. Когнитрон и неокогнитрон. 102

Приложение А. Биологические нейронные сети. 102

ЧЕЛОВЕЧЕСКИЙ МОЗГ: БИОЛОГИЧЕСКАЯ МОДЕЛЬ ДЛЯ ИСКУССТВЕННЫХ НЕЙРОННЫХ СЕТЕЙ 102

ОРГАНИЗАЦИЯ ЧЕЛОВЕЧЕСКОГО МОЗГА. 102

КОМПЬЮТЕРЫ И ЧЕЛОВЕЧЕСКИЙ МОЗГ. 102

Приложение Б. Алгоритмы обучения. 102

ОБУЧЕНИЕ С УЧИТЕЛЕМ И БЕЗ УЧИТЕЛЯ. 102

МЕТОД ОБУЧЕНИЯ ХЭББА. 102

ВХОДНЫЕ И ВЫХОДНЫЕ ЗВЕЗДЫ. 102

ОБУЧЕНИЕ ПЕРСЕПТРОНА. 102

МЕТОД ОБУЧЕНИЯ УИДРОУ-ХОФФА. 102

МЕТОДЫ СТАТИСТИЧЕСКОГО ОБУЧЕНИЯ. 102

Предисловие

Что такое искусственные нейронные сети? Что они могут делать? Как они работают? Как их можно использовать? Эти и множество подобных вопросов задают специалисты из разных областей. Найти вразумительный ответ нелегко. Университетских курсов мало, семинары слишком дороги, а соответствующая литература слишком обширна и специализированна. Готовящиеся к печати превосходные книги могут обескуражить начинающих. Часто написанные на техническом жаргоне, многие из них предполагают свободное владение разделами высшей математики, редко используемыми в других областях.

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

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

Книгу не обязательно читать от начала до конца. Каждая глава предполагается замкнутой, поэтому для понимания достаточно лишь знакомства с содержанием гл. 1 и 2. Хотя некоторое повторение материала неизбежно, большинству читателей это не будет обременительно.

Книга имеет практическую направленность. Если главы внимательно изучены, то большую часть сетей оказывается возможным реализовать на обычном компьютере общего назначения. Читателю настоятельно рекомендуется так и поступать. Никакой другой метод не позволит добиться столь же глубокого понимания.

Дата добавления: 2015-06-04 ; Просмотров: 173 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Персептроны. Обучение персептрона

Алгоритм обучения однослойного персептрона

Персептрон должен решать задачу классификации по бинарным входным сигналам. Набор входных сигналов будем обозначать -мерным вектором Все элементы вектора являются булевыми переменными (переменными, принимающими значения » Истина » или » Ложь «). Однако иногда полезно оперировать числовыми значениями. Будем считать, что значению » ложь » соответствует числовое значение 0, а значению » Истина » соответствует 1.

Персептроном будем называть устройство, вычисляющее следующую систему функций:

\theta\Bigr],\quad «> ( 1)

где — веса персептрона , — порог, — значения входных сигналов, скобки означают переход от булевых (логических) значений к числовым значениям по правилам, изложенным выше.

Обучение персептрона состоит в подстройке весовых коэффициентов. Пусть имеется набор пар векторов , , называемый обучающей выборкой. Будем называть нейронную сеть обученной на данной обучающей выборке , если при подаче на входы сети каждого вектора на выходах всякий раз получается соответствующий вектор

Предложенный Ф.Розенблаттом метод обучения состоит в итерационной подстройке матрицы весов , последовательно уменьшающей ошибку в выходных векторах. Алгоритм включает несколько шагов:

Шаг 0 Начальные значения весов всех нейронов полагаются случайными
Шаг 1 Сети предъявляется входной образ , в результате формируется выходной образ
Шаг 2 Вычисляется вектор ошибки , делаемой сетью на выходе. Дальнейшая идея состоит в том, что изменение вектора весовых коэффициентов в области малых ошибок должно быть пропорционально ошибке на выходе и равно нулю, если ошибка равна нулю.
Шаг 3 Вектор весов модифицируется по следующей формуле: Здесь — темп обучения.
Шаг 4 Шаги 1—3 повторяются для всех обучающих векторов. Один цикл последовательного предъявления всей выборки называется эпохой. Обучение завершается по истечении нескольких эпох: а) когда итерации сойдутся, т.е. вектор весов перестает изменяться, или б) когда полная, просуммированная по всем векторам абсолютная ошибка станет меньше некоторого малого значения.

Объясним данный алгоритм более подробно. Подаем на вход персептрона такой вектор , для которого уже известен правильный ответ. Если выходной сигнал персептрона совпадает с правильным ответом, то никаких действий предпринимать не надо. В случае ошибки, необходимо обучить персептрон правильно решать данный пример. Ошибки могут быть двух типов. Рассмотрим каждый из них.

Первый тип ошибки: на выходе персептрона — 0, а правильный ответ — 1. Для того чтобы персептрон выдавал правильный ответ , необходимо, чтобы сумма в правой части (1) стала больше. Поскольку переменные принимают значения 0 или 1, увеличение суммы может быть достигнуто за счет увеличения весов Однако нет смысла увеличивать веса при переменных , которые равны нулю. Таким образом, следует увеличить веса при тех переменных xi , которые равны 1.

Первое правило. Если на выходе персептрона получен 0, а правильный ответ равен 1, то необходимо увеличить веса связей между одновременно активными нейронами. При этом выходной персептрон считается активным. Второй тип ошибки: на выходе персептрона — 1, а правильный ответ равен нулю. Для обучения правильному решению данного примера следует уменьшить сумму в правой части (1). Следовательно, необходимо уменьшить веса связей при тех переменных, которые равны 1 (поскольку нет смысла уменьшать веса связей при равных нулю переменных ). Необходимо также провести эту процедуру для всех активных нейронов предыдущих слоев. В результате получаем второе правило.

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

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

Нерассмотренными остались два вопроса. Первый — о сходимости процедуры обучения. Второй — на сколько нужно увеличивать (уменьшать) веса связей при применении правил обучения.

Ответ на первый вопрос дают следующие теоремы.

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

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

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

Доказательства этих теорем в данное учебное пособие не включены.

Нейросети

Трейдинг на основе нейросетей

Рубрики блога

Как проводится обучение персептрона

Персептрон – это одна из самых первых и довольно примитивных моделей нейросети. Сразу стоит сказать, что персептроны сегодня почти не применяются в практических целях. Технологии шагнули далеко вперёд, поэтому для решения реальных задач в основном используются многослойные сети.

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

Одним из самых главных свойств нейросетей является обучаемость. Как проводится обучение персептрона?

Начать с того, что персептрон всегда обучается «с учителем». Проще говоря, его работа тестируется и корректируется до тех пор, пока на заданные входные сигналы он не будет давать заранее известные выходные сигналы. Высшие нейронные сети, например мозг, в большинстве случаев обходятся без «учителя», то есть способны саморегулироваться. Но для персептрона это невозможно.

Базовые принципы настройки персептрона

Персептрон предполагает, что принимаются на вход и отправляются на выход исключительно сигналы в двоичном коде: 0 или 1. Поэтому задача настройщика такой системы достаточно проста: убедиться, что в случаях, когда на выходе должна быть единица, мы получаем единицу, а когда ноль – ноль.

Если результат проверки на определённом примере (конкретном значении) именно таков, то всё хорошо, и можно вводить следующее значение.

Если результат отличается от требуемого, то нужно проводить настройку веса, присваиваемого значениям на разных этапах прохождения персептрона.

Когда должна быть единица, а получаем ноль – значит, веса где-то теряются, и нужно увеличивать коэффициент.

Когда должен быть ноль, а получаем единицу – всё наоборот, коэффициент присваиваемых весов нужно уменьшать.

При этом каждое изменение весов, которое дало положительный результат для этого примера, может дать искажение для последующих примеров. Поэтому в идеале после каждого изменения настроек полезно ещё раз «прогнать» через персептрон все те примеры, которые уже были ранее. Настройка может считаться выполненной, когда по всем значениям будут близкие к норме результаты.

Главный недостаток персептрона состоит именно в том, что он почти не подстраивается под новые условия, и сильно отличные от «учебных» значения с большой вероятностью дадут неверный результат. И это одна из причин того, что персептроны всё больше уступают сегодня другим типам нейросетей

Нейрокомпьютерная техника обучение персептрона

В предыдущей главе вы усвоили необходимые общие теоретические сведения по ИНС: устройство искусственного нейрона и нейронных сетей, общие подходы к их обучению.

Тема данной главы – простейший вид искусственных нейронных сетей – персептроны. Вы узнаете об их устройстве, научитесь их создавать и обучать.

История персептрона

Понятия искусственного нейрона и искусственной нейронной сети появились достаточно давно, еще в 1943 году. Эта была чуть ли не первая статья, в которой предпринимались попытки смоделировать работу мозга. Ее автором был Уоррен Мак-Каллок.

Эти идеи продолжил нейрофизиолог Фрэнк Розенблатт. Он предложил схему устройства, моделирующего процесс человеческого восприятия, и назвал его «персептроном» (от латинского perceptio – восприятие) . В 1960 году Розенблатт представил первый нейрокомпьютер – «Марк-1», который был способен распознавать некоторые буквы английского алфавита.

Таким образом персептрон является одной из первых моделей нейросетей, а «Марк-1» – первым в мире нейрокомпьютером.

Персептроны стали очень активно исследовать. На них возлагали большие надежды. Однако, как оказалось, они имели серьезные ограничения. Был такой ученый Минский, который был сокурсником Розенблатта. Видимо, ему не очень понравилось, как все вокруг боготворили персептроны, и он написал целую книгу (1971 год), в которой провел детальнейший их анализ, попутно показав, что они не так уж много и умеют, да и вообще сильно ограничены.

Розенблатт не успел написать ответ Минскому, так как погиб в свой 43 день рождения при крушении лодки.

С тех пор энтузиазм ученых в исследовании персептронов и искусственных сетей поутих. Хотя Минский позднее говорил, что сожалеет, что его книга нанесла такой удар по концепции персептронов. Стали перспективными другие области. Про нейросети забыли. Но потом были открыты новые виды сетей, а также алгоритмы их обучения, что вновь возродило интерес к этой области.

Теперь подробно разберем, что из себя представляет персептрон.

Персептрон

В основе персептрона лежит математическая модель восприятия информации мозгом. Разные исследователи по-разному его определяют. В самом общем своем виде (как его описывал Розенблатт) он представляет систему из элементов трех разных типов: сенсоров, ассоциативных элементов и реагирующих элементов.

Рассмотрим принцип работы персептрона.

Первыми в работу включаются S-элементы. Они могут находиться либо в состоянии покоя (сигнал равен 0), либо в состоянии возбуждения (сигнал равен 1).

Далее сигналы от S-элементов передаются A-элементам по так называемым S-A связям. Эти связи могут иметь веса, равные только -1, 0 или 1.

Затем сигналы от сенсорных элементов, прошедших по S-A связям попадают в A-элементы, которые еще называют ассоциативными элементами. Стоит заметить, что одному A-элементу может соответствовать несколько S-элементов. Если сигналы, поступившие на A-элемент, в совокупности превышают некоторый его порог ​ \( \theta \) ​, то этот A-элемент возбуждается и выдает сигнал, равный 1. В противном случае (сигнал от S-элементов не превысил порога A-элемента), генерируется нулевой сигнал.

Почему A-элементы назвали ассоциативными? Дело в том, что A-элементы являются агрегаторами сигналов от сенсорных элементов. Например, у нас есть группа сенсоров, каждый из которых распознает кусок буквы «Д» на исследуемой картинке. Однако только их совокупность (то есть когда несколько сенсоров выдали сигнал, равный 1) может возбудить A-элемент целиком. На другие буквы А-элемент не реагирует, только на букву «Д». То есть он ассоциируется с буквой «Д». Отсюда и такое название.

Можно привести и другой пример. На самом деле ваши глаза состоят из невероятного количества S-элементов (сенсоров), улавливающих падающий свет (около 140 000 000). И у вас какой-то A-элемент, который распознает конкретную часть лица. И вот вы увидели на улице человека. Некоторые A-элементы, которые распознали конкретные части лица, возбуждаются.

Далее сигналы, которые произвели возбужденные A-элементы, направляются к сумматору (R-элемент), действие которого вам уже известно. Однако, чтобы добраться до R-элемента, они проходят по A-R связям, у которых тоже есть веса. Однако здесь они уже могут принимать любые значения (в отличие от S-A связей).

Финальный аккорд. R-элемент складывает друг с другом взвешенные сигналы от A-элементов и, если превышен определенный порог, генерирует выходной сигнал, равный 1. Это означает, что в общем потоке информации от глаз мы распознали лицо человека.

Если порог не превышен, то выход персептрона равен -1. То есть мы не выделили лицо из общего потока информации.

Так как R-элемент определяет выход персептрона в целом, его назвали реагирующим.

Теперь вы знаете, что такое персептрон и как он работает. Сформулируем теперь его точное определение:

Выше я рассказал о персептроне в самом общем виде. Есть несколько подвидов персептронов, на некоторых из которых мы и сконцентрируем все внимание.

Классификация персептронов

Исторически сложилось несколько типов персептронов. Их часто путают, так как разные авторы, писавшие статьи на эту тему, зачастую понимали под персептроном похожие, но все же разные математические модели. Именно поэтому человеку, который только начинает изучение ИНС бывает трудно разобраться, что такое персептрон, ведь в разных книгах на эту тему его определяют по-разному. Я постараюсь разъяснить все так, что вы не будете путаться в терминологии, читая другие книги.

Персептрон с одним скрытым слоем

Я уже приводил общее определение персептрона выше. Теперь рассмотрим его подвид – персептрон с одним скрытым слоем (или элементарный персептрон). Именно этот тип персептронов часто подразумевают, когда говорят о персептронах вообще.

Почему слой именно скрытый? Потому что слой А-элементов расположен между слоями S-элементов и R-элементов.

Обе картинки выше изображают именно персептрон с одним скрытым слоем.

Однослойный персептрон

Названия похожие. Но это не тоже самое, что и персептрон с одним скрытым слоем, хотя так может показаться. Именно этот тип персептронов мы и будем изучать подробнее всего. Этот тип персептронов, как и элементарные персептроны, тоже часто подразумевают, когда говорят о персептронах вообще.

Его ключевая особенность состоит в том, что каждый S-элемент однозначно соответствует одному A-элементу, все S-A связи имеют вес, равный +1, а порог A элементов равен 1.

Объясню подробнее. Возьмем картинку персептрона в общем смысле и преобразуем ее в картинку однослойного персептрона.

Изначально персептрон в общем смысле выглядит так:

Исходя из ключевой особенности однослойного персептрона сенсор может быть однозначно связан только с одним ассоциативным элементом. Посмотрим на белый сенсор на картинке (левый верхний угол). Он передает сигнал салатовому (первому) и серому (четвертому) ассоциативным элементам. Непорядок. Сенсор может передавать сигнал только одному А-элементу. Убираем лишнюю связь. Ту же операцию проводим и с другими сенсорами.

Обязательно убедитесь, что поняли фразу «каждый S-элемент однозначно соответствует одному A-элементу». Это означает, что каждый сенсор может передавать сигнал только одному А-элементу. Однако это утверждение вовсе не запрещает ситуации, когда несколько сенсоров передают сигнал на один А-элемент, что и продемонстрировано на картинке выше (1, 2 и 3 А-элементы).

Далее, S-A связи всегда имеют вес, равный единице, а порог А-элементов всегда равен +1. С другой стороны нам известно, что сенсоры могут подавать сигнал равный только 0 или 1.

Рассмотрим первый S-элемент на последней картинке. Пусть он генерирует сигнал, равный единице. Сигнал проходит по S-A связи и не изменяется, так как любое число, умноженное на 1 равно самому себе. Порог любого А-элемента равен 1. Так как сенсор произвел сигнал, равный 1, то А-элемент однозначно возбудился. Это означает, что он выдал сигнал, равный 1 (так как он тоже может генерировать только 1 или 0 на своем выходе). Далее этот единичный сигнал умножается на произвольный вес A-R связи и попадает в соответствующий R-элемент, который суммирует все поступившие на него взвешенные сигналы, и если они превышают его порог, выдает +1. В противном случае выход данного R-элемента равен -1.

Ничего на напоминает? Правильно, не считая сенсорных элементов и S-A связей, мы только что описали схему работы искусственного нейрона. И это неслучайно. Однослойный персептрон действительно представляет собой искусственный нейрон с небольшим отличием. В отличие от искусственного нейрона, у однослойного персептрона входные сигналы могут принимать фиксированные значения: 0 или 1. У искусственного нейрона на вход можно подавать любые значения.

В персептроне R-элементы суммируют взвешенные входные сигналы и, если взвешенная сумма выше некоторого порога, выдают 1. Иначе выходы R-элементов были бы равны -1.

Нетрудно догадаться, что такое поведение легко задается функцией активации под названием функция единичного скачка, которую мы уже рассматривали во 2 главе. Отличие заключается в том, что функция единичного скачка выдает 0, если порог не превышен, а здесь выдает -1, но это не существенно.

Таким образом становится ясно, что часть однослойного персептрона (выделена черным прямоугольником на картинке выше) можно представить в виде искусственного нейрона, но ни в коем случае не путайте два этих понятия. Во-первых, никто не отменял S-элементы, которых в искусственном нейроне просто нет. Во-вторых, в однослойном персептроне S-элементы и A-элементы могут принимать только фиксированные значения 0 и 1, тогда как в искусственном нейроне таких ограничений нет.

Часть однослойного персептрона соответствует модели искусственного нейрона.

Однослойный персептрон может быть и элементарным персептроном, у которого только по одному слою S,A,R-элементов.

Многослойный персептрон

Под многослойным персептроном понимают два разных вида: многослойный персептрон по Розенблатту и многослойный персептрон по Румельхарту.

Многослойный персептрон по Розенблатту содержит более 1 слоя А-элементов.

Многослойный персептрон по Румельхарту является частным случаем многослойного персептрона по Розенблатту, с двумя особенностями:

  1. S-A связи могут иметь произвольные веса и обучаться наравне с A-R связями.
  2. Обучение производится по специальному алгоритму, который называется обучением по методу обратного распространения ошибки.

Этот метод является краеугольным камнем обучения всех многослойных ИНС. Во многом благодаря ему возобновился интерес к нейронным сетям. Но обсуждать мы его будем в других главах.

Многослойный персептрон по Румельхарту — многослойный персептрон по Розенблатту, у которого обучению подлежат еще и S-A связи, а также само обучение производится по методу обратного распространения ошибки.

Опорная схема

Скорее всего, ваша голова уже кипит от приведенной выше классификации. Соглашусь, она не самая удобная и, наверное, можно было бы придумать что-нибудь более простое и лаконичное, однако так уж сложилась история искусственных нейросетей. Для облегчения запоминания классификации (а ее обязательно надо помнить, чтобы ориентироваться в материале) я приведу опорную схему.

Мы разобрались с видами персептронов. Далее в этой главе рассмотрим только однослойный персептрон с одним скрытым слоем.

Говоря про персептрон я буду иметь ввиду именно его.

Какие задачи решает персептрон?

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

Персептроны очень хорошо решают задачи классификации. Что это означает? Если у вас есть группы объектов (например, кошки и собаки), то персептрон после обучения сможет указывать к какой группе относится объект (к кошкам или собакам).

«Очень хорошо» – понятие растяжимое. Насколько хорошо? Розенблатт доказал несколько теорем, суть которых я попытаюсь донести максимально понятным образом.

Объясняю на пальцах. Под полем сенсоров понимается множество всех S-элементов. Под классификацией – придуманные нами классы (те же кошки и собаки). Под «непустым множеством элементарных персептронов, проводящих успешную классификацию» понимается, что найдется хотя бы один перспетрон, справившийся с классификацией объектов.

Рассмотрим на примере.

Я хочу, чтобы персептрон научился различать кошек и собак. Это задача довольно трудная, но мы ее существенно упростим.

У нас будет 3 сенсора: длина лап, окрас и форма морды. Так как S-элементы могут принимать значения 0 или 1, то условимся, что значения 1 будут соответствовать коротким лапам, смешанному окрасу и округлая морда соответственно. Значения 0 будут означать признак собаки на данном S-элементе (длинные лапы, однотонный окрас и вытянутая морда). Вот мы и получили сенсорное поле. Если хотите, его можно представить в виде множества возможных значений 0 и 1 у каждого S-элемента. Например, абсолютная кошка должна вызвать срабатывание всех S-элементов ​ \( \ <1,1,1\>\) ​.

Идеальной же собаке соответствует следующий набор выходов S-элементов: ​ \( \ <0,0,0\>\) ​.

Сами по себе сенсоры не играют роли. Но добавив к набору выходов сенсоров смысл: кошка или собака, мы тем самым задали некоторую классификацию. Математически это означает, что мы задали некоторую функцию, которая принимает набор выходов S-элементов, а ее значением является 0 или 1 (кошка или собака).

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

Но ведь можно выбрать любой набор S-элементов и любую классификацию. И множество «решений» все равно не будет пустым!

Это означает, что теоретически персептроны способны решать любую задачу на классификацию.

Важное замечание!
1. Речь идет об элементарных персептронах.
2. Объекты классификации должны обладать свойством линейной разделимости (подробнее о ней ниже).

Но есть и вторая теорема, доказанная Розенблаттом:

Под произвольным исходным состоянием тут понимается персептрон с произвольными S-A и A-R весами связей. Под решением в теореме понимается персептрон с определенными весами, успешно решающий нашу задачу на классификацию.

Эта теорема не оставляет задачам на классификацию никаких шансов. Теперь нам известно, что мы всегда сможем решить нашу задачу за конечный промежуток времени. Единственный нюанс заключается в том, что никто не говорит о длительности «конечного промежутка времени». Секунда, минута, час, год, 1 000 лет?

Обе теоремы имеют доказательства, но здесь мы их рассматривать не будем.

Метод коррекции ошибок – один из алгоритмов изменения весов. В этой главе мы его также разберем.

Итак, элементарные персептроны гарантировано решают задачи на классификацию линейно разделимых объектов. Может показаться, что это мало. Но это не так. Существует очень много задач на классификацию, а многие можно к ним свести.

Линейная разделимость

Давайте, для понятности, визуализируем классификацию линейно разделимых объектов на примере кошек и собак. Чтобы их различать (классифицировать) введем для простоты всего два параметра: размер и прирученность. По сочетанию размера и прирученности нейронная сеть должна будет принять решение: кошка это или собака. Не может быть одновременно кошка и собака для одинаковых показателей размера и прирученности.

В этом случае потребуется всего два S-элемента, определяющие размер и прирученность. Так как размер животного и степень его прирученности могут быть разными и иметь промежуточные значения, то давайте немного отойдем от принятого определения S-элемента. Представим, что он может выдавать не только 0 (маленький размер, совсем дикий) или 1 (большой, полностью ручной), но и другие значения.

Так как у нас есть два сенсорных элемента, то их значения можно расположить вдоль двух координатных осей. На получившейся координатной плоскости можно размещать точки, каждая из которых характеризует какой-то вид кошки или собаки. Как вы знаете, у каждой точки есть координаты. В нашем случае их две: размер и прирученность. Так вот, задачей персептрона в данном случае (основанного на двух S-элементах) – провести некоторую прямую, которая максимально точно разделит два множества точек (кошек и собак). На рисунке ниже видно 4 этапа обучения сети на все более большой обучающей выборке.

Естественно, что у нас может быть больше признаков, а значит, и больше сенсорных элементов. В случае трех признаков будет три S-элемента, то есть имеем уже трехмерное пространство. В таком случае, между точками, каждая из которых соответствует определенным значениям всех трех S-элементов, проводилась бы плоскость. И так далее. В общем случае для ​ \( n \) ​ S-элементов в ​ \( n \) ​-мерном пространстве строится так называемая гиперплоскость с размерностью ​ \( n-1 \) ​.

Вы заметили, что в картинках выше в качестве разделителя используется прямая? А ведь мы могли бы в качестве разделителя использовать и любую другую кривую. Но прямая – проще. Именно поэтому в этой главе я рассматриваю задачи на классификацию линейно (от слова линия) разделимых объектов. Именно такие задачи способны решать элементарные персептроны.

Конечно, бывают и такие множества объектов, которые невозможно разделить линией (плоскостью/гиперплоскостью). В общем случае, такие множества называют линейно неразделимыми и в этой главе мы не будем их рассматривать. Теоремы о сходимости элементарных пересептронов на них не распространяются.

Задача на классификацию

Можно ли классифицировать логические функции? Да, и к тому же эта задача отлично проиллюстрирует такую классификацию.

На случай, если вы не знакомы с логическими функциями, ознакомьтесь с математической справкой.

Что такое логические функции? Это функции от какого-то числа переменных. Причем как сами переменные, так и значения логических функций могут принимать только фиксированные (дискретные) значения: 0 или 1.

Начнем с логического «И». Вы отправили Сашу в магазин за продуктами. Ему надо купить хлеб и квас. Если он ничего не купил, вы не пускаете его домой. Если он купил только хлеб или только квас, вы не пускаете его домой. Другими словами, Саша может войти в дом только когда он купил хлеб И квас. Также работает и логическое «И». У нас есть две бинарные переменные (то есть они могут быть равны только 0 или 1). Значением функции логического «И» будет 1 только тогда, когда значения обеих переменных тоже равны 1. Во всех остальных случаях значение этой логической функции равно 0.

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

Вот, например, таблица истинности для логического И.

X1 X2 Значение функции
1
1
1 1 1

А есть еще логическое «ИЛИ». Снова посылаем Сашу в магазин за продуктами. Ему надо купить хлеб и квас. Если он ничего не купил, вы не пускаете его домой. Если он купил только хлеб или только квас, или оба продукта – вы пускаете его домой. Также работает и логическое «ИЛИ». Значением функции логического «ИЛИ» будет 0 только тогда, когда значения обеих переменных тоже равны 0. Во всех остальных случаях значение этой логической функции равно 1.

Таблица истинности для логического ИЛИ выглядит следующим образом.

X1 X2 Значение функции
1 1
1 1
1 1 1

Логические функции очень красиво иллюстрируют идею классификации. Любая такая функция принимает на вход два аргумента. По счастливой случайности точки на плоскости задаются двумя числами (x и y)! Но логические функции могут принимать только дискретные аргументы (0 или 1). В итоге получаем, что для изображения любой логической функции на плоскости достаточно 4 точки (с координатами ​ \( (0,0) \) ​ ​ \( (1,0) \) ​ ​ \( (0,1) \) ​ ​ \( (1,1) \) ​). Вот так это выглядит:

Рассмотрим логическую функцию И. Она равна нулю для любого набора входных аргументов, кроме набора ​ \( (1,1) \) ​.

X1 X2 Логическое И
1
1
1 1 1

Налицо задача классификации: у нас есть 4 точки. Мы должны провести прямую так, чтобы по одну сторону у нас оказались точки, для которых значения логического И равно 1, а по другую, для которых это значение равно 0.

В случае с логическим И эту прямую, например, можно провести так, как показано на рисунке ниже. Все точки, находящиеся под этой прямой, приводят к 0 значению этой функции. Единственная точка над этой прямой приводит к значению логического И, равному 1.

Похожим образом ведет себя логическое ИЛИ, имеющее следующую таблицу истинности:

X1 X2 Логическое ИЛИ
1 1
1 1
1 1 1

Для такой функции графическое представление будет выглядеть так:

Нетрудно заметить, что данная картинка представляет собой графическое представление логического И, но наоборот (тоже одна точка, но для которой значение функции равно 0 и уже под прямой).

На этом мы завершаем рассмотрение задач классификации. Я думаю, теперь вы вполне представляете, что многие проблемы можно решить, если суметь переформулировать их в виде задач на классификацию.

Теперь мы переходим к краеугольному камню нейронных сетей — их обучению. Ведь без этого свойства они не имеют никакого смысла.

Обучение персептронов

Я рассказал практически все, что нужно знать про персептроны. Вы знаете, что они представляют собой и какие задачи способны решать. Настала пора поговорить и об их обучении. Как вы помните, под обучением нейронной сети имеется ввиду процесс корректировки весовых коэффициентов связи таким образом, чтобы в результате при поступлении на вход сети определенного сигнала она выдавала нам правильный ответ.

Упрощаем до предела

Начнем обучение наших нейронных сетей с самого простого случая. Для этого мы сильно упростим и без того простой однослойный персептрон с одним скрытым слоем:
1. Будем считать, что его A-R связи могут принимать только целые значения (…, -2, -1, 0, 1, 2, …).
2. Более того, у каждого А-элемента может быть только один S-элемент.
3. И у нас будет только 1 R-элемент.

На словах такое большое количество упрощений может выглядеть сложно. Поясним сказанное на схеме. Возьмем уже использовавшуюся картинку однослойного персептрона с одним скрытым слоем и преобразуем ее.

Изначально мы имеем следующий персептрон.

Мы должны упростить его. Теперь A-элементы могут быть соединены только с одним S-элементом. Убираем все лишние связи.

На картинке выше 3 R-элемента. Оставляем только один.

S-A веса и пороги A элементов у нас теперь равны +1. Отмечаем это на рисунке.

В итоге получаем следующую картину.

Однако получается, что у нас слой A-элементов не выполняет никакие функции. Он эквивалентен S-слою. Поэтому мы проводим следующее упрощение. Выбрасываем слой сенсоров. Теперь роль сенсоров у нас будут выполнять ассоциативные элементы (или наоборот, без разницы).

Итак, мы только что ну очень упростили однослойный персептрон с одним скрытым слоем.

Вы не поверите! Даже в таком кастрированном виде нейронная сеть будет работать и даже решать задачи на классификацию. И не только…

Сначала попробуем научить такую простую модель (к тому же полностью копирующую модель искусственного нейрона) решать простейшую задачу на классификацию. Например, распознавание цифр.

Практика: распознавание цифр

Картинка, как всем известно, состоит из пикселей. Так вот, очень удобно на каждый пиксель выделять один сенсор (для его распознавания).

Сейчас мы запрограммируем простейшую нейросеть, которая будет распознавать цифры. На самом деле это трудная задача, поэтому мы ее в очередной раз упростим:

  1. Будем распознавать только черно-белые цифры от 0 до 9.
  2. Цифры будут состоять из черных квадратиков в табличке 3×5 квадратов.
  3. Нейросеть будет распознавать только одну цифру.

Вот как выглядят наши цифры.

В нашей сети будет по 1 S-элементу (он же А-элемент) на каждый квадратик из таблички. Поэтому для распознавания цифры нам потребуется 15 сенсоров. Черный цвет квадрата соответствует возбуждению S-элемента (значение передаваемого сигнала равно 1). Белый цвет – выход соответствующего S-элемента равен 0.

Цифры в строковом формате

Чтобы работать с нейросетью, мы должны на ее входы подавать сигналы в виде чисел (0 или 1). Таким образом изображение цифры мы должны перевести в последовательность сигналов в виде чисел. Это легко сделать, если представить цифры в строковом формате.

Каждая цифра представляет собой всего пятнадцать квадратиков, причем только двух возможных цветов. Как и говорилось в предыдущем разделе, за белый квадратик отвечает 0, а черный квадратик – 1. Поэтому наши десять цифр от 0 до 9 в строковом формате будут выглядеть вот так:

Для записи каждой цифры у нас используется по 5 строк с 3 символами в каждой. Теперь уберем все переносы строк, чтобы получить для каждой цифры от 0 до 9 одну длинную строку длиной в 15 символов.

Цифры в таком строковом формате уже можно использовать для работы с нейросетью.

Еще раз поясню, почему мы не используем картинки, а перешли к строчкам символов. Взгляните на картинку ниже.

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

Такой простой пример не стоит таких больших усилий. Поэтому мы пропустим первые два этапа, указанные на картинке, и будем сразу подавать на вход нейросети цифры в строковом формате.

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

Мы хотим создать программу, которая из всех 10 цифр будет распознавать нужную нам цифру. Например, пусть это будет цифра 5 (можно и любую другую). Только и всего.

Нашей обучающей выборкой будут все цифры от 0 до 9. Когда нейросеть обучится безошибочно распознавать нужную нам цифру (5), тогда мы проверим ее «интеллект» уже на тестовой выборке. Она будет уже похитрее: на вход будут подаваться уже искаженные изображения пятерки.

Посмотрим, сможет ли обученная нейросеть с высокой точностью распознавать пятерку?

Понятно, что ряд искаженных изображений пятерки мы тоже должны преобразовать в строковый формат. А это мы уже делали выше, поэтому не будем здесь расписывать.

Алгоритм обучения

Наконец-то мы дошли до главного: как обучать сеть. В общих чертах процесс понятен. Мы будем случайным образом выбирать цифру и прогонять ее через сеть, модифицируя ее веса. Но как их модифицировать?

Мы знаем, что важность тем или иным входам (в нашем случае – S-элементам) придают веса, связывающие их с R-элементом. Таким образом, чем сильнее повлиял какой-то вес связи на результат, тем сильнее надо его изменить.

Следовательно, мы должны учесть следующие важные моменты:

  • Если наша нейросеть правильно распознала/отвергла цифру 5, то мы ничего не предпринимаем (все ведь замечательно!).
  • Если нейросеть ошиблась ираспозналаневерную цифру как 5, то мы должны ее наказать – мы уменьшаем веса тех связей, через которые прошел сигнал. Другими словами веса, связанные с возбудившимися входами, уменьшаются.
  • Если нейросеть ошиблась и не распознала цифру 5, то мы должны увеличить все веса, через которые прошел сигнал. Таким образом мы как бы говорим сети, что такие связи, а значит и связанные с ними входы – правильные.

Теперь запишем непосредственно алгоритм обучения, который мы будем реализовывать в программе:

  1. Подать на входы нейросети цифру в строковом формате.
  2. Если цифра распознана/отвергнута верно, то перейти к шагу 1.
  3. Если сеть ошиблась и распознала неверную цифру как 5, то вычесть из всех связей, связанных с возбудившимися S-элементами единицу.
  4. Если сеть ошиблась и отвергла цифру 5, то добавить единицу ко всем связям, связанным с возбудившимися S-элементами.

Почему в алгоритме мы прибавляем или отнимаем именно 1. На самом деле эту величину можно задать любой. Понятно, что эта величина влияет на эффективность обучения. Какой шаг обучения выбрать – это отдельный вопрос, который мы рассмотрим позднее.

Программа

Если вы не знакомы с языком программирования Python и/или не знаете, как приступить к работе, то рекомендую ознакомиться (можно бегло) с самым популярным самоучителем по Python.

Совершенно не обязательно писать нейросети на Python! Искусственные нейросети – математическая модель, и их можно запрограммировать с помощью любого языка. Так что если вам больше по душе Java, C, C#… то можете реализовывать сети на них. Никаких принципиальных различий нет. Алгоритм один и тот же. Реализация на разных языках разная.

Для начала импортируем модуль для работы со случайными числами.

Теперь давайте запишем все цифры от 0 до 9. Просто записывайте цифру в 5 строк по 3 символа, а затем удаляйте переносы строк (выше мы это уже рассматривали).

Функция list(*) позволяет нам создать список (массив), состоящий из отдельных символов, на которые разбивается длинная строка.

Далее, для простоты добавим все эти 10 цифр в список (для быстрого доступа к ним).

Теперь запишем 6 видов искаженной пятерки в строковом формате.

Теперь нам необходимо создать список весов. Помните теоремы об обучении персептронов? Там сказано, что сеть из любого состояния может обучиться правильно отвечать. Так что, чтобы не загадывать, пусть все веса вначале у нас будут равны 0. Так как у нас 15 входов и все они сразу соединены с одним R-элементом, то нам потребуется 15 связей.

Здесь я упростил запись, использовав генератор списков. Вместо этой записи вполне правомерно использовать обычный цикл, повторяющийся 15 раз и присваивающий всем элементам нашего списка весов 0:

Так как мы используем пороговую функцию активации, то нам необходимо установить какое-то число (порог). Если взвешенная сумма будет больше или равна ему, то сеть выдаст 1 (что означает, что она считает предоставленную цифру пятеркой). Порог можно выбрать любой. Пусть будет равен 7.

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

Результатом работы выражения return net >= bias этой функции может быть True (Правда/Да), что означает 1 или False (Ложь/Нет), что означает 0.

Теперь определим еще две вспомогательные функции.

Первая функция вызывается, когда сеть считает за 5 неверную цифру (выход равен 1 при демонстрации не 5) и уменьшает на единицу все веса, связанные с возбужденным входами. Напомню, что мы считаем вход возбужденным, если он получил черный пиксель (то есть 1).

Я использовал функцию int(number[i]) для преобразования символа ‘1’ в цифру 1. Если бы я этого не сделал, то возникла бы ошибка здесь if int(number[i]) == 1: , так как Python не умеет сравнивать символы (текст) с цифрами.

Вторая функция вызывается, если сеть не смогла распознать цифру пять (выход равен 0 при демонстрации 5) и увеличивает на единицу все веса, связанные с возбужденными входами.

Теперь начнем обучать нашу нейронную сеть. Делать мы это будем в цикле, который будет повторятся достаточно большое количество раз. Для примера возьмем 10 000 раз. Действия за каждый этап повторения мы описали выше в алгоритме обучения.

Осталось только вывести результаты обучения. Выводить их мы будем следующим образом. Сначала выведем результирующие значения весов. Героев надо знать в лицо. После этого еще раз прогоним сеть по всем цифрам от 0 до 9, но уже без обучения. Просто чтобы удостоверится, что она обучилась. А в конце опробуем сеть на нашей тестовой выборке.

Если у вас отображаются какие-то ошибки или вы просто запутались в структуре, то вот полный код программы:

Готовы? Запускайте! Пробуйте! Должно сработать.

Мои результаты — сеть стала распознавать пятерку во все случаях только
с 3 попытки. Картинка кликабельна.

Не обязательно сеть научится распознавать пятерки из тестовой выборки с первой попытки. Если результат программы вас не устраивает (не вся тестовая выборка успешно прошла проверку), то просто запустите программу снова. Все будет сброшено и начнется с чистого листа.

Но почему сеть не обучается с первого раза?

При любом запуске программы 10 тысяч обучающих цифр генерятся случайным образом. Таким образом при каждом запуске программы процесс обучения сети уникален.

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

Чтобы сеть гарантированно научилась распознавать нужную нам цифру надо соблюсти два условия:

  1. Добиться равномерности показа всех обучающих цифр.
  2. Увеличить общее количество шагов обучения (50 тысяч или 100 тысяч).

Давайте поближе рассмотрим созданного нами монстра!
Что еще за Скайнет?

Рассмотрим мой результат. Начнем с первой строчки (это веса сети):

[1, 1, 1, 3, 0, -8, 1, 2, 1, -8, 0, 1, 1, 1, 1]

Теперь расположим эти цифры в виде «цифры».

1 1 1
3 0 -8
1 2 1
-8 0 1
1 1 1

Если приглядеться, то можно заметить цифру пять. Важно то, что все квадраты, составляющие силуэт пятерки положительные. Некоторые даже больше 1 (3 и 2). Мы получили как бы слепок весов нашей сети, наложенной на цифру пять.

Давайте предположим, что цифра указывает яркость конкретного квадрата. Получим следующую картинку.

Более темные квадраты уверяют нашу суеверную нейросеть, что предлагаемая цифра несомненно является пятеркой и вносят большой вклад в взвешенную сумму (3 и 2). Соответственно если в предлагаемой сети картинке эти квадраты черные, то взвешенная сумма наверняка будет больше порога. Серые области вносят обычный вклад (по 1) в взвешенную сумму. Красные квадратики вызывают отвращение у сети и их появление на входах приводит аж к отрицательным значениям (-8), что сильно снизит взвешенную сумму и она будет гарантированно ниже порога.

Получается, что сеть сама выделила хорошие/противные области, нужные ей для распознавания. Невероятно, да?

Но это еще не все. Дальше идет 9 строк обучающей выборки.

0 это 5? False
1 это 5? False
2 это 5? False
3 это 5? False
4 это 5? False
6 это 5? False
7 это 5? False
8 это 5? False
9 это 5? False

Все предложенные цифры наша нейросеть смело отвергает, клеймя их False.

Наконец, итоговый и самый желанный результат программы – тестовая выборка. Как вы видите, сеть прекрасно распознала и цифру 5, и шесть ее искаженных вариаций.

Узнал 5? True
Узнал 5 — 1? True
Узнал 5 — 2? True
Узнал 5 — 3? True
Узнал 5 — 4? True
Узнал 5 — 5? True
Узнал 5 — 6? True

Тем самым, даже на предельно упрощенном однослойном персептроне с одним скрытым слоем, который, кстати, представляет собой фактически один искусственный нейрон, мы смогли программно добиться эффекта обобщения. Сеть никогда не видела искаженные пятерки. Но она их узнала.

Напомню, что мы рассматривали очень упрощенный вариант сети, связи и входы которой могли быть только целыми числами. Название алгоритма обучения, который мы использовали: правила Хебба. Всего этих правил два и они соответствуют двум пунктам уже описанного выше алгоритма обучения.

1 Правило. Если сигнал персептрона неверен и равен 0, то необходимо увеличить веса тех входов, на которые была подана единица.

2 Правило. Если сигнал персептрона неверен и равен 1, то необходимо уменьшить веса тех входов, на которые была подана единица.

Правила Хебба часто встречается в литературе, как обучение с коррекцией ошибки.

Дельта-правило

Теперь попробуем обобщить правила Хебба на произвольные (не только 0/1) входы и связи (не только целые числа).

Пусть мы заранее знаем правильный выход нашей сети. Обозначим его за ​ \( d \) ​. Однако в процессе обучения сеть ошибается. Обозначим ответ сети за ​ \( y \) ​. Тогда мы можем получить ошибку/погрешность сети как разницу правильного и реального ответов:

Мы знаем, что решающую роль в преобразовании сигнала играют связи. Значит необходимо каким-то образом их изменять. Классический алгоритм изменения связей: дельта-правило.

\[ w_i(t+1)=w_i(t)+\delta x_i \eta \]

Разберем эту формулу. Сначала в общих чертах.

Для отображения количества шагов обучения сети я использую переменную ​ \( t \) ​. Очевидно, что наша цель – получить из старого значения веса связи ​ \( w_i(t) \) ​ новое значение ​ \( w_i(t+1) \) ​.

Для этого мы, как и в правилах Хебба, должны прибавить какое-то число к весу связи. Как раз эта добавка вычисляется по формуле ​ \( \delta x_i \eta \) ​. Разберем эту формулу.

Переменная ​ \( \delta \) ​ есть ошибка нейросети. Заметим сходство с правилами Хебба. Если нейросеть ответила правильно, то ожидаемый и реальный результаты равны и ​ \( \delta = 0 \) ​, а значит и вся добавка к весу связи равна ​ \( 0 \) ​. Вес не изменился.

В случае, если ​ \( \delta > 0 \) ​, а значит ​ \( d > y \) ​, то значение добавки к весу будет положительное. Вес связи увеличится (1 правило Хебба). Это соответствует случаю, когда сеть получила на вход 5, но не узнала ее.

В случае, если ​ \( \delta ​, а значит ​ \( d ​, то значение добавки к весу будет отрицательное. Вес связи уменьшится (2 правило Хебба). Это соответствует случаю, когда сеть неверно посчитала данное число за 5.

С ​ \( \delta \) ​ разобрались. Теперь перейдем к ​ \( x_i \) ​. Это значение, которое пришло на ​ \( i \) ​-ый вход сети. Опять же, чем более сильный сигнал поступил на вход, тем сильнее изменится вес, с этим входом связанный. Это логично. Ведь если на вход вообще не поступило сигнала (​ \( x_i = 0 \) ​), то и соответствующий вес не должен изменится (добавка будет равна нулю).

А теперь самое интересное: Скорость обучения ​ \( \eta \) ​.

Скорость обучения

Если с первыми двумя членами формулы добавки к весу ​ \( \delta x_i \eta \) ​ все просто и понятно, то постоянный коэффициент ​ \( \eta \) ​, называемый коэффициентом скорости обучения, вызывает вопросы. Зачем он нужен?

Результат сети зависит от ее весов. Но раз зависит результат сети, то от весов зависит и ее ошибка (как разность постоянного «правильного» значения и результата сети). Представим, что погрешность нашей сети ​ \( \delta \) ​ зависит от какого-то веса сети ​ \( w_i \) ​ следующим образом.

Положение кенгуру означает конкретный вес связи. Так в чем же фишка? А фишка в том, что кенгуру надо попасть в низину, так как именно в ней ошибка сети будет минимальна. Однако наш кенгуру может только прыгать. И именно за «длину прыжка» и отвечает коэффициент ​ \( \eta \) ​ в формуле добавки к весу.

Пусть коэффициент ​ \( \eta \) ​ маленький. Тогда наш кенгуру будет маленькими прыжками продвигаться к низине. Это будет очень доооооолго…

Ок, сделаем коэффициент ​ \( \eta \) ​ большим. Ведь большими прыжками мы быстрее доскачем до низины? Нет. При большом значении скорости обучения есть опасность так и не доскакать до самого низа из-за того, что вы постоянно будете прыгать вправо-влево оставаясь на одной и той же высоте.

Поэтому подбирать коэффициент скорости обучения надо с умом. Иногда его представляют в виде некоторой функции, которая постепенно уменьшается. То есть ​ \( \eta \) ​ уменьшается (а значит уменьшается и длина прыжка) по мере приближения к низине.

Вот мы и разобрались в предназначении коэффициента скорости обучения. Мы можем изменять вес связи только скачками. Этот коэффициент определяет величину скачков.

Практика: линейная аппроксимация

А теперь снова займемся практикой. На этот раз возьмем нестандартную задачу, которая относится не к классификации (как в примере с распознаванием цифр выше), а к аппроксимации, то есть поиску промежуточных значений при заданном наборе конкретных значений. И тут нам как раз и пригодится дельта-правило.

Пусть у нас имеется какой-то набор точек на плоскости.

X Y
1 2
2 4.2
2.5 5
3.8 7.9
4 9
6 10.2
6.6 13
7.2 15.3
8 17.1
8.5 19.5

Теперь давайте представим эти данные в виде картинки:

Мы видим, что полученные данные подозрительно напоминают прямую линию. Наша задача состоит в том, чтобы как можно более точно провести прямую, которая будет повторять заданный набор точек. В этом и состоит принцип аппроксимации.

Например, у нас нет данных о Y координате точки с X = 3. Задача аппроксимации – с наибольшей вероятностью предсказать, какой будет Y для этой точки.

Вы можете предположить, что для этого можно использовать метод наименьших квадратов. Его действительно используют очень часто. Однако, он не единственный.

Сейчас для нас важно то, что эту задачу мы можем решить и с помощью нейронной сети. Сделать это можно достаточно хитрым образом.

Нам нужна прямая. Из алгебры мы помним, что любая прямая в декартовых координатах задается уравнением:

Коэффициент ​ \( k \) ​ отвечает за крутизну наклона прямой, а ​ \( c \) ​ указывает точку на оси Y, через которую проходит эта прямая.

Почему ​ \( k \) ​ отвечает за крутизну наклона?

Крутизну наклона прямой мы определяем по величине угла ​ \( \phi \) ​ между прямой и осью X. Пусть для простоты наша прямая проходит через начало координат. Возьмем любую точку на этой прямой. Ее координаты равны ​ \( (x_0, y_0) \) ​. Теперь возьмем произвольную точку на прямой. Ее координаты нам неизвестны ​ \( (x,y) \) ​. Наша цель – получить зависимость ​ \( y \) ​ от ​ \( x \) ​.

Можно заметить, что мы имеем два подобных прямоугольных треугольника. Они подобны по двум углам (по углу ​ \( \phi \) ​ и по прямому углу из точки на прямой к оси X).

В подобных треугольниках отношение сходственных сторон равно между собой. Следовательно можно составить следующую пропорцию:

Видим, что отношение ​ \( \frac \) ​ равно тангенсу угла ​ \( \phi \) ​, как отношение противолежащего катета (​ \( y_0 \) ​) к прилежащему (​ \( x_0 \) ​). А чем больше угол ​ \( \phi \) ​, тем больше и его тангенс. Обозначим тангенс за ​ \( k \) ​.

А значит, коэффициент при ​ \( x \) ​ отвечает за крутизну наклона прямой к оси X.

Почему ​ \( c \) ​ отвечает за точку пересечения оси Y и прямой?

Пусть ​ \( x=0 \) ​. В этом случае прямая пересекает ось Y. При ​ \( x=0 \) ​ имеем ​ \( y=0 \) ​. Подставляем ​ \( x=0 \) ​ в общее уравнение прямой:

Получаем, что ​ \( y=c \) ​. Это означает, что прямая пересекает ось Y «на высоте» ​ \( с \) ​.

Мы ищем уравнение прямой, аппроксимирующее наши данные. Значит ​ \( y \) ​ у нас будет выходом сети. Теперь определимся со входами. Совершенно точно, что одним входом будет являться переменная ​ \( x \) ​. Однако в уравнении прямой фигурирует еще одно слагаемое: ​ \( c \) ​. О нем тоже нельзя забывать. ​ \( c \) ​ – постоянная величина. Поэтому мы добавим в нашу сеть второй вход, на который всегда будет подаваться единица. Таким образом произведение этого входа на вес всегда будет равно только этому весу, вне зависимости от входа (он всегда равен 1).

Функции активации у нас не будет. Взвешенная сумма и будет являться выходом нашей сети.

Вот так графически выглядит наш персептрон:

Давайте определим математически, чему равен выход нашей сети. Я уже рассказывал об этом во 2 главе, когда описывал математическую модель искусственного нейрона. Наш персептрон по факту является искусственным нейроном.

Это была запись в общем виде. А для нашего случая имеем:

Ничего эта запись вам не напоминает? Да это же уравнение прямой линии, где ​ \( out=y, \ w_2=k, \ w_1=c \) ​! Мы построили персептрон так, что в процессе обучения его весовые коэффициенты станут коэффициентами прямой, которую мы ищем!

Программа

Для начала вновь импортируем модуль для работы со случайными числами.

Далее мы создаем переменную, являющуюся весом связи при входе x (а по совместительству и коэффициентом крутизны наклона прямой).

Функция uniform(from, to) генерирует случайное вещественное число от from и до to включительно. Заметьте, что мы уже не работаем с целыми числами.

Далее создаем переменную, являющуюся весом связи при всегда единичном входе (а по совместительству отвечающую за свободный член в уравнении прямой).

Его значение опять же выбирается случайным образом.

Задав эти два члена, мы определили прямую. Так как оба члена заданы случайным образом, мы определили случайную прямую. Этим фактом я хочу показать, что изначальное положение прямой абсолютно несущественно. Она может быть какой угодно. Прямо как и в предыдущем примере с цифрами. Там сеть приходила к правильной конфигурации независимо от начальных значений весов.

Далее мы должны вывести в консоль созданные переменные.

Теперь задаем данные о наборе точек.

Здесь я использую не список, а словарь. Это практически тоже самое, что и список, только используются не числовые индексы, а собственноручно заданные имена – ключи. В данном словаре ключи это X, а соответствующие им значения это Y.

Теперь нам необходимо задать коэффициент скорости обучения. Я определил ее экспериментально. Сначала начал с 0.1, но при этом сеть не обучалась. По мере роста шагов ошибка сети только увеличивалась. Этот случай соответствует картинке с кенгуру, делающей слишком большие прыжки.

После ряда понижений коэффициента скорости обучения я пришел к значению 0.0001. При нем сеть начала обучаться, то есть ошибка сети по мере выполнения шагов стабильно уменьшалась.

Теперь нужно создать функцию, высчитывающую ответ нашего персептрона:

Как видите, никакой функции активации тут нет. Ответ нашей сети есть взвешенная сумма, где ​ \( k \) ​ – вес связи при x, а ​ \( c \) ​ – вес связи при входе, всегда равном единице.

Теперь надо обучить нашу сеть. Чем больше шагов заложим, тем лучше. Возьмем, например, 100 000 шагов обучения. Хотя, возможно, для получения результата подошло бы и меньшее количество шагов. Тут есть простор для экспериментирования.

На протяжении 100 000 раз мы выбираем из нашего словаря случайный ключ (так как ключ у меня это и есть значение X).

После этого создается переменная true_result , в которой хранится правильный Y для соответствующего X.

Далее, в переменную out мы помещаем ответ нашей сети для данного X.

После этого мы высчитываем ошибку, и, используя дельта-правило, меняем оба веса связи.

Осталось только вывести данные о новой прямой.

Привожу полный код программы:

Можно запускать! Корректные результаты должны получиться уже с первого раза. Как понять, что ваши результаты корректные? Значение ​ \( k \) ​ у вас должно быть в районе 2, а значение ​ \( c \) ​ — чем ближе к 0, тем лучше.

Вот, что получилось у меня.

а самом деле я намеренно задал уравнение вида ​ \( y=2x \) ​ и, как видно по результатам, сеть практически полностью повторила его.

Цифры это конечно хорошо, но на графиках выглядит еще лучше.

Здесь синие точки – это набор исходных данных. Коричневая прямая – это случайно полученная в начале программы прямая. Она может проходить как угодно и где угодно.

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

Если вы построите свою готовую прямую по данным, выведенным в консоли, то она должна практически идеально совпасть с моей.

И ваша, и моя прямые, в свою очередь, практически идеально совпадают с первоначальной прямой (​ \( y=2x \) ​), из которой я намеренным искажением получил точки набора.

На данном примере хорошо видно, что иногда персептроны могут выполнять не только задачи на классификацию.

Выводы

Это одна из самых информативных глав в учебнике. Более того, здесь впервые встречаются примеры программирования нейронных сетей, а именно – простейших видов персептронов.

В первой половине главы я разъяснил используемую терминологию. Ввел понятия персептронов и их видов. Помните, что чаще всего под персептронами понимают именно элементарные и однослойные песептроны.

Далее вы узнали, что такое задачи классификации и ознакомились с теоремами о сходимости персептрона. Не обязательно наизусть помнить их формулировки. Достаточно понимать, что они означают.

Затем вы ознакомились с правилами Хебба и создали первую искусственную нейросеть, которая не только умеет отличать цифру 5 от всех остальных, но еще и умудряется распознавать ее в искаженных картинках. Это был пример использования персептрона как классификатора.

Последние разделы главы посвящены дельта-правилу, как обобщению правил Хебба, и созданию персептрона, реализующего линейную аппроксимацию.

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

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

Другие языки программирования

Здесь приведены исходные коды программ для различных языков программирования. (Код для C# и PHP предоставлен пользователем под ником Geograph, код для Java написал poslannik).

Илон Маск рекомендует:  Что такое код asp netlogonworkstation
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL