Нейронные сети Perceptron

Розенблатт [Rose61] создал много изменений perceptron. Один из самых простых был одноуровневой сетью, веса которой и смещения могли быть обучены дать правильный целевой вектор, когда подарено соответствующий входной вектор. Учебный используемый метод называется perceptron изучением правила. perceptron вызвал большой интерес из-за его способности сделать вывод из его учебных векторов и извлечь уроки из первоначально случайным образом распределенных связей. Perceptrons особенно подходят для простых проблем в классификации шаблонов. Они - быстрые и надежные сети для задач, которые они могут решить. Кроме того, понимание операций perceptron обеспечивает хорошую основу для понимания более комплексных сетей.

Обсуждение perceptrons в этом разделе обязательно кратко. Для более полного обсуждения см. Главу 4, “Perceptron Изучение Правила”, из [HDB1996], который обсуждает использование нескольких слоев perceptrons, чтобы решить более трудные задачи вне возможности одного слоя.

Модель нейрона

perceptron нейрон, который использует передаточную функцию жесткого предела hardlim, показан ниже.

Каждый внешний вход взвешивается с соответствующим весом w 1j, и сумма взвешенных входных параметров отправляется в передаточную функцию жесткого предела, которая также имеет вход 1 переданного к нему посредством смещения. Передаточную функцию жесткого предела, которая возвращает 0 или 1, показывают ниже.

perceptron нейрон производит 1, если сетевой вход в передаточную функцию равен или больше, чем 0; в противном случае это производит 0.

Передаточная функция жесткого предела дает perceptron способность классифицировать входные векторы путем деления входного пробела на две области. А именно, выходные параметры будут 0, если сетевой вход n будет меньше 0, или 1, если сетевой вход n 0 или больше. Следующий рисунок показывает входной пробел 2D входного нейрона жесткого предела с весами w 1,1 = −1, w 1,2 = 1 и смещение b = 1.

Две области классификации формируются границей решения L в
Wp + b = 0. Эта линия перпендикулярна матрице W веса и переключенная согласно смещению b. Входные векторы выше и слева от линии L приведут к сетевому входу, больше, чем 0 и, поэтому, заставят нейрон жесткого предела выводить 1. Входные векторы ниже и справа от линии L заставляют нейрон выводить 0. Можно выбрать вес и сместить значения, чтобы ориентировать и переместить разделительную линию, чтобы классифицировать входной пробел, как желаемый.

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

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

Архитектура Perceptron

perceptron сеть состоит из единственного слоя S нейроны perceptron, соединенные с R, вводят через набор весов wi,j, как показано ниже в двух формах. Как прежде, сетевые индексы i и j указывают, что wi,j является силой связи от j th вход к i th нейрон.

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

Создайте Perceptron

Можно создать perceptron со следующим:

net = perceptron;
net = configure(net,P,T);

где входные параметры следующие:

  • P R-by-Q матрица входных векторов Q элементов R каждый.

  • T S-by-Q матрица целевых векторов Q элементов S каждый.

Обычно, hardlim функция используется в perceptrons, таким образом, это - значение по умолчанию.

Следующие команды создают perceptron сеть с одним входным вектором с одним элементом со значениями 0 и 2, и один нейрон с выходными параметрами, которые могут быть или 0 или 1:

P = [0 2];
T = [0 1];
net = perceptron;
net = configure(net,P,T);

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

inputweights = net.inputweights{1,1}

который уступает

inputweights = 
        delays: 0
       initFcn: 'initzero'
         learn: true
      learnFcn: 'learnp'
    learnParam: (none)
          size: [1 1]
     weightFcn: 'dotprod'
   weightParam: (none)
      userdata: (your custom info)

Функцией изучения значения по умолчанию является learnp, который обсужден в Perceptron Изучение Правила (learnp). Сетевой вход к hardlim передаточной функцией является dotprod, который генерирует продукт входного вектора и матрицы веса и добавляет смещение, чтобы вычислить сетевой вход.

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

Точно так же

biases = net.biases{1}

дает

biases = 
       initFcn: 'initzero'
         learn: 1
      learnFcn: 'learnp'
    learnParam: []
          size: 1
      userdata: [1x1 struct]

Вы видите, что инициализация по умолчанию для смещения также 0.

Perceptron изучение правила (learnp)

Perceptrons обучены на примерах желаемого поведения. Желаемое поведение может быть получено в итоге набором входа, выведите пары

p1t1,p2t1,,pQtQ

где p является входом к сети, и t является соответствующий правильный (целевой) выход. Цель состоит в том, чтобы уменьшать ошибку e, который является различием tмежду ответом нейрона a и целевым вектором t. perceptron изучение правила learnp вычисляет желаемые изменения в весах и смещениях perceptron, учитывая входной вектор p и связанную ошибку e. Целевой вектор t должен содержать значения или 0 или 1, потому что perceptrons (с hardlim передаточные функции), может только вывести эти значения.

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

Если смещение не используется, learnp работает, чтобы найти решение путем изменения только вектора веса w, чтобы указать на входные векторы, которые будут классифицированы как 1 и далеко от векторов, которые будут классифицированы как 0. Это приводит к контуру решения, который перпендикулярен w, и это правильно классифицирует входные векторы.

Существует три условия, которые могут произойти для одного нейрона, если входной вектор p представлен и ответ сети расчетного:

СЛУЧАЙ 1. Если входной вектор представлен, и выход нейрона правилен (= t и e = t= 0), то вектор веса w не изменен.

СЛУЧАЙ 2. Если нейрон вывел, 0 и должен был быть 1 (= 0 и t = 1, и e = t= 1), входной вектор p добавляется к вектору веса w. Это высказывает мнение вектора веса ближе к входному вектору, увеличивая шанс, что входной вектор будет классифицирован как 1 в будущем.

СЛУЧАЙ 3. Если нейрон вывел, 1 и должен был быть 0 (= 1 и t = 0, и e = t= –1), входной вектор p вычтен из вектора веса w. Это высказывает мнение вектора веса дальше от входного вектора, увеличивая шанс, что входной вектор будет классифицирован как 0 в будущем.

perceptron изучение правила может быть записан более кратко в терминах ошибки e = ta и изменение, которое будет сделано к вектору веса Δw:

СЛУЧАЙ 1. Если e = 0, то делайте изменение Δw равным 0.

СЛУЧАЙ 2. Если e = 1, то делайте изменение Δw равным pT.

СЛУЧАЙ 3. Если e = –1, то делайте изменение Δw равным –pT.

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

Δw=(tα)pT=epT

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

Δb=(tα)(1)=e

Для случая слоя нейронов вы имеете

ΔW=(ta)(p)T=e(p)T

и

Δb=(ta)=e

perceptron изучение правила может быть получен в итоге можно следующим образом:

Wnew=Wold+epT

и

bnew=bold+e

где e = ta.

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

net = perceptron;
net = configure(net,[0;0],0);

Для упрощения установите смещение, равное 0 и веса к 1 и-0.8:

net.b{1} =  [0];
w = [1 -0.8];
net.IW{1,1} = w;

Входной целевой парой дают

p = [1; 2];
t = [1];

Можно вычислить выход и ошибку с

a = net(p)
a =
     0
e = t-a
e =
     1

и используйте функциональный learnp найти изменение в весах.

dw = learnp(w,p,[],[],[],[],e,[],[],[],[],[])
dw =
     1     2

Новые веса, затем, получены как

w = w + dw
w =
    2.0000    1.2000

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

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

Обучение (обучается)

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

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

Обратите внимание на то, что train не гарантирует, что получившаяся сеть делает свое задание. Необходимо проверять новые значения W и b путем вычисления сетевого выхода для каждого входного вектора, чтобы видеть, достигнуты ли все цели. Если сеть не выполняет успешно, можно обучить ее далее путем вызова train снова с новыми весами и смещениями для большего количества учебных передач, или можно анализировать проблему видеть, является ли это подходящая проблема для perceptron. Задачи, которые не могут быть решены perceptron сетью, обсуждены в Ограничениях и Предостережениях.

Чтобы проиллюстрировать метод обучения, работайте через простую проблему. Рассмотрите один нейрон perceptron с одним векторным входом, имеющим два элемента:

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

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

{p1=[22],t1=0}{p2=[12],t2=1}{p3=[22],t3=0}{p4=[11],t4=1}

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

W(0)=[00]b(0)=0

Запустите путем вычисления выхода a perceptron для первого входного вектора p1, использования начальных весов и смещения.

α=hardlim(W(0)p1+b(0))=hardlim([00][22]+0)=hardlim(0)=1

Выход a не равняется целевому значению t 1, поэтому использует perceptron правило, чтобы найти инкрементные изменения в весах и смещениях на основе ошибки.

e=t1α=01=1ΔW=ep1T=(1)[22]=[22]Δb=e=(1)=1

Можно вычислить новые веса и смещение, использующее правила обновления perceptron.

Wnew=Wold+epT=[00]+[22]=[22]=W(1)bnew=bold+e=0+(1)=1=b(1)

Теперь представьте следующий входной вектор, p2. Выход вычисляется ниже.

α=hardlim(W(1)p2+b(1))=hardlim([22][12]1)=hardlim(1)=1

В этом случае цель равняется 1, таким образом, ошибка является нулем. Таким образом нет никаких изменений в весах или смещении, таким образом, W (2) = W (1) = [−2 −2] и b (2) = b (1) = −1.

Можно продолжить этим способом, представив p3 затем, вычислив выход и ошибку, и внеся изменения в весах и смещении, и т.д. После создания одной передачи через все четыре входных параметров вы получаете значения W (4) = [−3 −1] и b (4) = 0. Чтобы определить, получено ли удовлетворительное решение, сделайте одну передачу через все входные векторы, чтобы видеть, производят ли они все желаемые целевые значения. Это не верно для четвертого входа, но алгоритм действительно сходится на шестом представлении входа. Окончательные значения

W (6) = [−2 −3] и b (6) = 1.

Это завершает ручное вычисление. Теперь, как можно сделать это использование train функция?

Следующий код задает perceptron.

net = perceptron;

Рассмотрите заявление одного входа

p = [2; 2];

наличие цели

t = [0];

Установите epochs к 1, так, чтобы train проходит входные векторы (только один здесь) всего одно время.

net.trainParam.epochs = 1;
net = train(net,p,t);

Новые веса и смещение

w = net.iw{1,1}, b = net.b{1}
w =
    -2    -2
b =
    -1

Таким образом начальные веса и смещение 0, и после обучения только на первом векторе, у них есть значения [−2 −2] и −1, так же, как вы вручаете вычисленный.

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

Примените train в течение одной эпохи, одной передачи через последовательность всех четырех входных векторов. Начните с сетевого определения.

net = perceptron;
net.trainParam.epochs = 1;

Входные векторы и цели

p = [[2;2] [1;-2] [-2;2] [-1;1]]
t = [0 1 0 1]

Теперь обучите сеть с

net = train(net,p,t);

Новые веса и смещение

w = net.iw{1,1}, b = net.b{1}
w =
    -3    -1
b =
     0

Это - тот же результат, как вы добрались ранее вручную.

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

a = net(p)
a = 
      0     0     1     1

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

net.trainParam.epochs = 1000;
net = train(net,p,t);

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

w = net.iw{1,1}, b = net.b{1}
w =
    -2    -3
b =
     1

Симулированный выход и ошибки для различных входных параметров

a = net(p)
a =
             0             1             0             1
error = a-t
error =
             0             0             0             0

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

Учебная функция по умолчанию для сетей создается с perceptron trainc. (Можно найти это путем выполнения net.trainFcn.) Эта учебная функция применяет perceptron изучение правила в его чистой форме, в тот, отдельные входные векторы применяются индивидуально в последовательности, и коррекции к весам и смещение сделаны после каждого представления входного вектора. Таким образом, perceptron обучение с train будет сходиться в конечном числе шагов, если представленная задача не может быть решена с простым perceptron.

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

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

Ограничения и предостережения

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

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

Сети Perceptron имеют несколько ограничений. Во-первых, выходные значения perceptron могут взять только одно из двух значений (0 или 1) из-за передаточной функции жесткого предела. Во-вторых, perceptrons может только классифицировать линейно отделимые наборы векторов. Если прямая линия или плоскость могут чертиться, чтобы разделить входные векторы на их правильные категории, входные векторы линейно отделимы. Если векторы не будут линейно отделимы, изучение никогда не будет достигать точки, где все векторы классифицируются правильно. Однако было доказано, что, если векторы линейно отделимы, perceptrons обученный адаптивно, будет всегда находить решение в конечный промежуток времени. Вы можете хотеть попробовать Линейно Неотделимые Векторы. Это показывает трудность попытки классифицировать входные векторы, которые не линейно отделимы.

Только справедливо, однако, указать, что сети больше чем с одним perceptron могут использоваться, чтобы решить более трудные задачи. Например, предположите, что у вас есть набор четырех векторов, которые требуется классифицировать в отличные группы, и что две линии могут быть проведены, чтобы разделить их. Сеть 2D нейрона может быть найдена такой, что ее два контура решения классифицируют входные параметры в четыре категории. Для дополнительной дискуссии о perceptrons и исследовать более комплексные perceptron проблемы, см. [HDB1996].

Выбросы и нормированное правило Perceptron

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

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

Вот исходное правило для обновления весов:

Δw=(tα)pT=epT

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

Решение состоит в том, чтобы нормировать правило так, чтобы эффект каждого входного вектора на весах имел ту же величину:

Δw=(tα)pTp=epTp

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