Перцептрон Розенблатта — что забыто и придумано историей?
На хабре — уже есть несколько статей про искусственные нейронные сети. Но чаще говорят о т.н. многослойном перцептроне и алгоритме обратного распространения ошибки. А знаете те ли Вы что эта вариация ничем не лучше элементарного перцептрона Розенблатта?
Например, вот в этом переводе Что такое искусственные нейронные сети? мы можем увидеть, что о перцептроне Розенблатта пишут такое:
Демонстрация персептона Розенблатта показала, что простые сети из таких нейронов могут обучаться на примерах, известных в определенных областях. Позже, Минский и Паперт доказали, что простые пресептоны могут решать только очень узкий класс линейно сепарабельных задач, после чего активность изучения ИНС уменьшилась. Тем не менее, метод обратного распространения ошибки обучения, который может облегчить задачу обучения сложных нейронных сетей на примерах, показал, что эти проблемы могут быть и не сепарабельными.
Причем это встречается на разный лад в различных статьях, книгах и даже учебниках.
Но это, наверно, самая великая реклама в области ИИ. А в науке это называется фальсификация.
Что придумано?
На самом деле все серьезные ученные знают, что такое представление о перцептроне Розенблатта несерьезно. Но они предпочитают об этом писать достаточно мягко. Но когда история нам представляется в существенно искаженном виде, хотя и в столь узкой сфере науки — это не хорошо. Я не хочу сказать, что это было фальсифицировано намерено. Как раз нет, это хороший пример того, как молодые люди не читают оригиналов, или читают их по диагонали, потом делаю вид, что поняли в чем проблема. И решают эту проблему. Затем становятся докторами и получают известность. А уже следующие поколение им верит. Всегда, если серьезно чем то занимаетесь, перепроверяйте классиков по оригиналам. Не верьте перепостам в статьях.
Итак, давайте откроем оригинал, описывающий перцептрон Розенблатта: Розенблатт, Ф. Принципы нейродинамики: Перцептроны и теория механизмов мозга, 1965. Вы там не найдете т.н. однослойного перцептрона — его в природе не существует, как минимум на 1965 год. Его выдумали много позднее.
Там вы сразу увидите элементарный перцептрон, у которого есть скрытый слой А-элементов.
Иногда это объясняют тем, что поменялась терминология. Увы, как слова не меняй — а нужный слой у перцептрона есть и ВСЕГДА был. Более того, сам Розенблатт пишет о том, что рассматривать перцептроны без скрытого слоя нет ни какого смысла. Это на 1965 год было элементарно, и всем известно.
Дальше сюда хотят присовокупить авторитет Минского. Но и он прекрасно знал, что такое перцептрон. И никогда он не доказывал, что перцептрон не может решить линейно не сепарабельные задачи. Он доказывал совершенно другое, связанное с проблемой инвариантности. И эту проблему сейчас не решает ни одна известная ИНС. (но это статья не об этом, если будут желающие — делайте заказ попробую написать об этом. )
В этом отношении разница между перцептроном Розенблатта и многослойным перцептроном по Румельхарту (MLP) только в следующем:
1. Перцептрон Румельхарта обучается алгоритмом обратного распространения ошибки, при этом обучаются веса между входным и скрытым слоем и веса между скрытым и выходным слоем.
2. Перцептрон Розенблатта обучается алгоритмом коррекции ошибки. Этим алгоритмом обучаются только веса между скрытым и выходным слоем. Что же касается весов между входным и скрытым слоем — то он не обучается осознано. Его нет смысла обучать, т.к. этот слой выполняет совсем другую задачу чем второй. Весовые коэффициенты первого слоя, а точнее возбуждающие и тормозящие связи создаются в перцептроне случайно — моделируя тут природу. Задача этого слоя как раз и заключается в том, чтобы не сепарабельную проблему трансформировать к сепарабельной. И входные импульсы проходя через связи первого слоя отображаются на пространство А-элементов. Вот эта случайная матрица и обеспечивает трансформацию в сепарабельную проблему.
Второй же слой как в перцептроне Розенблатта, так и в MLP уже только разделяет полученную после трансформации линейную задачу.
Теперь надеюсь понятно зачем первый слой — он обеспечивает трансформацию из не сепарабельной (линейно не неразделимой) в сепарабельное представление задачи. Это же и делается и в MLP, выбранный алгоритм обратного распространения этого не меняет.
Но если перцептрон Розенблатта использует случайность, то MLP путем своего обучения создает эту случайность. Вот и вся разница.
Есть ряд других отличий, следствий — но эта статья все же не для новичков, а тех кто хотя бы немного в теме. Тут я лишь хотел заметить, что новичкам перцептрон Розенблатта надо изучать по оригиналам.
А что же было забыто?
Совершенно не заслужено фамилию Розенблатта вспоминают теперь чаще в исторических обзорах. Надо отметить, что Розенблатт разработал не какой-то один вид искусственной нейронной сети. Он разработал полную классификацию всевозможных нейронных сетей. Под общие название перцептрон — попадает ЛЮБАЯ ныне существующая ИНС. Есть у Розенблатта и многослойные перцептроны, которые по его терминологии начинаются с двух внутренних слоев, и рекуррентные перцептроны, и много других подтипов. Причем в отличии от современно разрабатываемых их характеристики Розенблаттом просчитаны более тщательно. Именно поэтому просто необходимо вновь разрабатываемую ИНС сравнивать вначале с соответствующим по классификации перцептронов от Розенблатта — если такого сравнения нет, то и эффективность новой ИНС совершенно не ясна. А многие разработчики ИНС — не удосуживаются этого сделать, и как следствие много званых, и не одного призванного.
P.S. Я часто встречался со скептизмом, когда я это рассказывал. Но если вдруг не верите мне, почитайте статью Kussul E., Baidyk T., Kasatkina L., Lukovich V., Перцептроны Розенблатта для распознавания рукописных цифр, 2001.
В заключение даю ссылку, где я помогу изучить перцептрон Розенблатта не по мифам, а по оригиналам: Здесь мы изучаем возможности перцептрона Розенблатта
upd. Тем кто еще находится в плену заблуждений — посвящается — решение перцептроном Розенблатта задачи XOR
upd2. Спасибо все, обучение не знающих и не читающих оригиналы — не входило в мою тут задачу. Захотите нормально поговорить, пишите в личку. На вызывающие комментарии больше не отвечаю, рекомендую взять и прочитать основы.
- Перцептрон
- искусственные нейронные сети
Многослойный перцептрон Розенблатта
Многослойный перцептрон Розенблатта — перцептрон с дополнительными слоями А — элементов, расположенными между S и R элементами. Определение Розенблатта отличается от многослойного перцептрона Румельхарта, и является более общим случаем по отношению к нему. Так как элементарный перцептрон уже обладал двумя слоями связей и тремя слоями элементов (нейронов), то такой перцептрон не считался многослойным, и многослойность подразумевалась только при наличии минимум четырех слоев элементов. Другое важное отличие состояло в том, что у Розенблатта не обязательно все связи были обучаемые, часть из них могла быть случайно выбрана и фиксирована. Румельхард же предполагал, что все связи многослойного перцептрона обучаемы. Поэтому полным эквивалентом многослойного перцептрона Румельхарта, у Розенблатта является перцептрон с переменными S-A связями.
Метод обратного распространения ошибок не подходит к обучению перцептронов, так как пороговый элемент перцептрона не гладкий (не дифференцируется). Кроме того, метод обратного распространения ошибок имеет экспоненциальную вычислительную сложность по отношению к числу входов нейронной сети, числу связей в слое и числу слоев в нейронной сети. Очень быстро обучение зацикливается само на себя и этот алгоритм начинает работать минимизируя многомерную поверхность собственных ошибок.
Двухслойные перцептроны следует обучать алгоритмом по ГОСТ Р 52633.5-2011 «Защита информации. Техника защиты информации. Автоматическое обучение нейросетевых преобразователей биометрия-код доступа». Это первый алгоритм, который очень устойчив и практически не накапливает собственные ошибки. Важно так же то, что он имеет линейную вычислительную сложность, что позволяет обучать нейронные сети с большим числом входов и выходов, а также с любым числом слов нейронов в сети. Как недостаток алгоритма, следует рассматривать то, что он построен на искусственном ухудшении нейросетевых решений. Так каждый обученный нейрон по этому алгоритму должен хорошо узнавать «Своего» и очень плохо узнавать «Чужого». ГОСТ Р 52633.5-2011 требует, чтобы вероятность ошибок второго рода (ошибочное признание «Чужого» за «Своего») составляла ровно 0.5 на выходе каждого нейрона. Это требование информационной безопасности, продиктованное защитой от атаки поиска биометрических «близнецов». Получается, что каждый нейрон работает очень плохо, а все вместе нейроны «Чужой» обмануть не может. Для «Чужих» примерно половина нейронов дает неверный код, для «Своего» практически все нейроны дают верное состояние заданного при обучении кода.
Недостатки алгоритма ГОСТ Р 52633.5-2011 компенсируют выбором большого числа входов и выходов нейросети. Так при обработке 416 коэффициентов двухмерного преобразования Фурье двухслойной нейронной сетью с 256 нейронами в каждом слое, вероятность ошибок второго рода удается снизить примерно в миллиард раз по сравнению другими нейросетевыми решениями анализа рукописного почерка.
См. также
- Перцептроны с перекрестными связями
- Перцептроны с обратной связью
Литература
- Розенблатт, Ф.Принципы нейродинамики: Перцептроны и теория механизмов мозга = Principles of Neurodynamic: Perceptrons and the Theory of Brain Mechanisms. — М .: Мир, 1965. — 480 с.
- Перцептрон
Wikimedia Foundation . 2010 .
- Многопролётная балка
- Многослойный перцептрон Румельхарта
Полезное
Смотреть что такое «Многослойный перцептрон Розенблатта» в других словарях:
- Многослойный перцептрон — Розенблатта перцептрон с дополнительными слоями А элементов, расположенными между S и R элементами. Многослойный перцептрон Румельхарта частный случай перцептрона Розенблатта, в котором один алгоритм обратного распространения ошибки… … Википедия
- Многослойный перцептрон Румельхарта — У этого термина существуют и другие значения, см. Многослойный перцептрон. Архитектура многослойного перцептрона Многослойный перцептрон частный случай перцептрона Розенблатта, в котором один алгоритм обратного распространения … Википедия
- Перцептрон — Логическая схема перцептрона с тремя выходами Перцептрон, или персептрон[nb 1] (англ. perceptron от … Википедия
- Персептрон — Логическая схема перцептрона с тремя выходами Перцептрон, или персептрон[nb 1] (англ. perceptron от лат. perceptio восприятие; нем. perzeptron) математическая и компьютерная модель восприятия информации мозгом (кибернетическая модель мозга),… … Википедия
- Возможности и ограничения перцептронов — Логическая схема перцептрона с тремя выходами Основная статья: Перцептрон Перцептрон является одной из первых моделей искусстве … Википедия
- Искусственная нейронная сеть — У этого термина существуют и другие значения, см. Нейронная сеть (значения). Схема простой нейросети. Зелёным цветом обозначены входные нейроны, голубым скрытые нейроны, жёлтым выходной нейрон … Википедия
- Искусственная нейросеть — Запрос «Нейронная сеть» перенаправляется сюда. Cм. также другие значения. Схема простой нейросети. Зелёным обозначены входные элементы, жёлтым выходной элемент Искусственные нейронные сети (ИНС) математические модели, а также их программные или… … Википедия
- Нейронные сети — Запрос «Нейронная сеть» перенаправляется сюда. Cм. также другие значения. Схема простой нейросети. Зелёным обозначены входные элементы, жёлтым выходной элемент Искусственные нейронные сети (ИНС) математические модели, а также их программные или… … Википедия
- Нейросети — Запрос «Нейронная сеть» перенаправляется сюда. Cм. также другие значения. Схема простой нейросети. Зелёным обозначены входные элементы, жёлтым выходной элемент Искусственные нейронные сети (ИНС) математические модели, а также их программные или… … Википедия
- Нейросеть — Запрос «Нейронная сеть» перенаправляется сюда. Cм. также другие значения. Схема простой нейросети. Зелёным обозначены входные элементы, жёлтым выходной элемент Искусственные нейронные сети (ИНС) математические модели, а также их программные или… … Википедия
- Обратная связь: Техподдержка, Реклама на сайте
- Путешествия
Экспорт словарей на сайты, сделанные на PHP,
WordPress, MODx.
- Пометить текст и поделитьсяИскать в этом же словареИскать синонимы
- Искать во всех словарях
- Искать в переводах
- Искать в ИнтернетеИскать в этой же категории
Всё, что вы хотели знать о перцептронах Розенблатта, но боялись спросить
Вы, наверно, знаете, что перцептрон Розенблатта, изобретённый в середине XX-го века, стал прообразом современных нейронных сетей. Однако многое из того, что известно нам о нём и его создателе, не соответствует действительности. В продолжение серии статей об историческом развитии искусственного интеллекта попробуем разобраться, что является искажением фактов в рассказах об одном из основоположников машинного обучения, и почему он — действительно важная фигура в истории ИИ.
Фрэнк Розенблатт. Источник фото
Начнём издалека: в 1943-м году появилась модель Мак-Каллока-Питтса, и это стало поворотной точкой в истории искусственных нейронных сетей. Уже на заре развития этого направления в нём выделились два подхода — монотипический и генотипический (так окрестил их герой нашего поста, Фрэнк Розенблатт). В монотипическом подходе параметры нейронов задаются изначально и топология сети полностью фиксирована, а в генотипическом они задаются только частично. Таким образом, при использовании генотипического подхода мы проектируем не одну конкретную сеть, а задаём множество возможных сетей. Отсюда следует важное отличие генотипического подхода — наличие механизма обучения, предназначенного для выбора конкретных параметров сети. На первых порах генотипистам мешало сильное влияние символьной логики. Так вышло из-за того, что изучение сознания 30-40-е проходило в рамках этой парадигмы. Данные нейрофизиологии свидетельствовали в пользу того, что информация в мозге передаётся с помощью коротких импульсов (спайков), поэтому для Мак-Каллока с Питтсом было естественно считать мозг цифровой машиной, оперирующей нулями и единицами. Кроме того, Питтс как ученик Рассела и Карнапа, ещё до того, как стал заниматься нейронными сетями, был поклонником символьной логики. Об этом можно узнать больше из нашей предыдущей статьи.
В работах Мак-Каллока и Питтса вы не найдёте исследований методов обучения нейросетей. Им удалось лишь сформулировать концепцию нейронных сетей и доказать её право на существование (по-английски это называется «proof-of-concept»). Более того, они даже не потрудились формально доказать, что их модель тьюринг-полная: в их кругу это считалось само собой разумеющимся. Но проблема обучения сетей активно обсуждалась в кибернетических кругах, и первый подход к ней совершили ученики Мак-Каллока. В полной же мере она была проанализирована именно нашим героем.
На чьих плечах стоял Розенблатт
Конечно, нейросеть вполне можно использовать и без обучения, «сконструировав» её вручную. Однако человеческий мозг способен к самообучению, и соблазн получить машины, обладающие тем же свойством, был весьма велик. Поэтому неудивительно, что сразу после появления сетей Мак-Каллока и Питтса начались первые «подходы к снаряду». В 1948 году два ученика Мак-Каллока, Анатоль Рапопорт и Альфонсо Шимбел из Чикагского университета, описали семейство статистически организованных сетей. Они рассматривали различные параметры нейрона и его компонентов в качестве случайных величин с некоторыми вероятностными распределениями. Из них они вывели общее уравнение для расчёта вероятности того, что нейрон в указанном месте сработает в определённое время.
В 1949 вышла работа Дональда Хебба, в которой сформулирован известный сегодня под названием «хеббовского обучения» принцип: «Когда аксон клетки A находится достаточно близко, чтобы возбудить клетку B, и многократно или постоянно принимает участие в её срабатывании, в одной или обеих клетках происходит некоторый процесс роста или метаболические изменения, таким образом, что эффективность A, как одной из клеток, возбуждающих B, растёт». Вопреки распространённому заблуждению, Хебб не был первооткрывателем этой идеи, в той или иной мере она встречается у Торндайка и Павлова, однако именно Хебб сформулировал её в явном виде и познакомил с ней исследователей в области искусственных нейронных сетей. Часто этот принцип афористично формулируют как «нейроны, которые возбуждаются вместе, связываются вместе» [Neurons that fire together, wire together]. Хеббовский принцип оказался пригодным для того, чтобы на базе его сформировать практический алгоритм обучения нейросетей, что и не преминули сделать Бельмонт Фарли и Уэсли Кларк. Они начали учить хеббовские сети на цифровой машине MTC (Memory Test Computer). Но их работы остались не замечены научным сообществом.
Марвин Минский тоже работал в этом направлении. В 1951 году он, вместе с Джорджем Миллером и Дином Эдмондсом, осуществил проект под названием SNARС (стохастический нейронный аналоговый калькулятор с подкреплением), в рамках которого «электронная крыса» бегала по электронному лабиринту и пыталась отыскать выход. Машина, моделирующая поведение крысы, представляла собой случайное соединение 40 искусственных нейронов, каждый на базе шести электроламп и двигателя. Кстати, их машина была, вероятно, первой самообучающейся электронной системой. Первую электромеханическую самообучающуюся машину годом раньше создал Клод Шеннон в рамках проекта «Тесей»; также при рассмотрении самообучающихся систем часто забывают о «Гомеостате» У. Росса Эшби. В основе этой системы лежали жидкостные реостаты.
Розенблатт вслед за этими учёными собрал и систематизировал разрозненные усилия по разработке архитектур и алгоритмов обучения.
Перцептрон Розенблатта во всей красе
Свою исследовательскую работу Розенблатт вёл в Авиационной лаборатории Корнельского университета. В январе 1957-го года секция Розенблатта опубликовала первый отчёт по проекту «Перцептрон: воспринимающий и распознающий автомат», где впервые введено определение этой штуковины. При этом подчеркивается, что система основана на вероятностных, а не на детерминистских принципах.
Что конкретно представляет собой описанный там перцептрон? Это система, состоящая из трёх слоёв элементов: S (сенсорного), A (ассоциативного) и R (реагирующего). При этом обучаемые веса есть только между двумя последними слоями нейронов (A → R) подвергаются коррекции в процессе обучения. Слой синаптических связей S → A также содержит веса, но они не меняются в процессе обучения, их можно только конфигурировать вручную. Их значения могут быть равны либо «1», либо «−1», что соответствует возбуждающему синапсу и тормозящему синапсам. Также могли существовать абсолютно тормозящие синапсы, то есть такие, веса которых можно было принять равными минус бесконечности. По всей видимости, это рудимент модели Мак-Каллока и Питтса.
Нейрон перцептрона отличается от нейрона Мак-Каллока и Питтса тем, что у него появились веса синапсов — числовые значения.
Перцептрон Розенблатта. Входной (сенсорный), скрытый (ассоциативный) и выходной (реагирующий) слои нейронов.
Небольшое отступление: любую задачу классификации с произвольным числом классов можно свести к решению одной или нескольких задач, в которых число классов равно двум. Например, если у нас есть задача распознавания на картинке котиков, собак и енотов, то мы можем представить её в виде совокупности двух задач: задачи по отличению котиков от всех прочих животных и задачи по отличению собак от енотов. В свою очередь, задачу с двумя классами можно легко представить в графической форме. Для этого нужно взять n-мерное евклидово пространство, где n — количество факторов, задействованных в задаче (то есть при одном факторе это будет числовая прямая, при двух факторах — плоскость, при трёх — трёхмерное пространство и т.д.), и отобразить в нём известные нам прецеденты (элементы обучающей выборки) в виде точек двух цветов (скажем, голубых и зелёных). В случае задачи с двумя факторами мы получим множество голубых и зелёных точек на плоскости. Если зелёные точки можно отделить от голубых, проведя на плоскости некоторую прямую (для большего числа факторов — проведя в пространстве некую гиперплоскость), то множества голубых и зелёных точек называют линейно разделимыми.
Так вот, линейный классификатор — это способ решения задач классификации, когда решение принимается на основании линейного оператора над входными данными. Линейный классификатор способен решать задачи с линейно разделимыми прецедентами.
Важной заслугой Розенблатта было то, что он доказал сходимость перцептрона. Метод коррекции ошибки, предложенный учёным, гарантировал, что параметры перцептрона, необходимые для решения задачи, будут найдены за конечное количество шагов обучения, независимо от начального значения синаптических весов и последовательности поступления элементов обучающей выборки.
Первая версия перцептрона была смоделирована при помощи компьютера IBM 704.
Обучившись, программа Розенблатта была способна успешно распознавать различные геометрические фигуры (круги, квадраты, треугольники). Затем была создана и аппаратная версия перцептрона — первый в мире нейрокомпьютер «Mark I Perceptron». (кстати, эта работа дала начало новому направлению в вычислительной технике — нейроморфной инженерии). Это была здоровенная махина, состоящая из множества элементов, издававших треск. Каждый элемент представлял собой соединение электромотора и потенциометра. Электромоторы были нужны для поворота ручек потенциометров (переменных резисторов). Поворот ручки приводил к изменению электрического сопротивления потенциометра. По воспоминаниям Бернарда Уидроу (это профессор Стэнфордского университета, занимавшийся нейронными сетями в 1960-х), ездившего к Розенблатту в гости, всё работало довольно плохо. Впрочем, поскольку сам Уидроу был разработчиком альтернативной аппаратной реализации искусственной нейронной сети, основанной на принципах электрохимии (ADALINE), его можно заподозрить в необъективности. Так или иначе, Розенблатт смог на таких «дурацких» элементах построить работающее устройство. Он и команда его коллег из SRI (Stanford Research Institute) опробовали перцептрон на некоторых прикладных задачах, например на задаче распознавания написанных от руки печатных букв, условных обозначений на картах, а также танков на данных аэрофотосъемки.
«Mark I Perceptron» был оснащён коммутационной панелью. Соединяя гнёзда панели проводами, можно было программировать входной слой перцептрона. Входные данные поступали в машину при помощи модуля ввода, для этого входное изображение подсвечивалось мощным источником света и проецировалось на матрицу размером 20×20, состоящую из фотоэлементов на основе сульфида кадмия. Несложно заметить, что перцептрон Mark I был фотоперцептроном, то есть, перцептроном, предназначенным для работы с визуальными данными.
Вопреки распространённому мнению, «Mark I Perceptron» не был в строгом смысле однослойной сетью, хотя не был и вполне многослойной. Под однослойным перцептроном обычно понимают такой, у которого два слоя нейронов — входной и выходной, и нет промежуточного ассоциативного слоя (А-слоя). Иными словами, у него один слой синаптических связей с настраиваемыми коэффициентами — между нейронами входного слоя и нейронами выходного слоя. А у «Mark I Perceptron» было два конфигурируемых слоя коэффициентов. Хотя один из них и конфигурировался вручную.
В литературе иногда допускают неточность, употребляя словосочетание «альфа-перцептрон» в значении «Mark I Perceptron». В действительности же альфа-перцептроном назывался такой перцептрон, обучение которого выполнялось по так называемой альфа-стратегии. «Mark I» в этом смысле действительно был альфа-перцептроном, но отнюдь не синонимичен ему.
В 1963 году у Розенблатта появилась ещё одна аппаратная разработка — устройство «Тобермори», названное в честь литературного персонажа — кота, который научился говорить. Бытуют слухи, что у Розенблатта был и кот с таким именем. Технически «Тобермори» представлял собой фоноперцептрон, то есть такой, который работает со звуковыми данными. Информация поступала с магнитной ленты, микрофона и некоторых других устройств. Вообще Розенблатт рассматривал перцептрон как систему, которая потенциально может анализировать любые данные. Он, например, задумывался и о радиоперцептронах. Розенблатт мечтал, что когда-нибудь его машина сможет и опознать предмет, и назвать его вслух.
Розенблатт не изучал многослойные сети?
Бытует заблуждение, что, якобы, Розенблатт не изучал многослойные сети, и что все рассмотренные им перцептроны были однослойными. Но это не так, Розенблатт активно изучал многослойные сети. В книге «Принципы нейродинамики: Перцептроны и теория механизмов мозга», выпущенной в 1961-м году, он сначала описывает «трёхслойные системы с переменными S—A связями», прежде чем перейти к описанию многослойных перцептронов и перцептронов с перекрёстными связями. Он рассмотрел и перцептроны без А-слоя, и перцептроны с одним ассоциативным слоем, и с двумя, и так далее, и даже придумал свой алгоритм обучения глубоких нейронных сетей, не похожий на метод градиентного спуска, хотя и названный методом обратного распространения ошибки.
Перцептроны Розенблатта отличались лишь в некоторых деталях от нейронных сетей, предложенных ранее Фарли и Кларком, а также рядом британских исследователей, таких как Реймонд Бёрл, Уилфред Тейлор и Альберт Аттли. Вклад Розенблатта заключался в развитии математического аппарата теории нейронных сетей, а также в обширных экспериментальных исследованиях в этой области. Именно Розенблатт, стремясь подчеркнуть особую важность связей между нейронами, изобрёл термин «коннекционизм», используемый сегодня для обозначения подхода в области искусственного интеллекта (а также когнитивистики, нейробиологии, психологии и философии сознания), в рамках которого мыслительные или поведенческие явления моделируются при помощи процессов, происходящих в сетях, состоящих из связанных между собой простых элементов (введённое позже более общее понятие «параллельная распределённая обработка» отражает тот факт, что в искусственных нейронных сетях и подобных им моделях большое количество относительно простых процессоров работает параллельно, и то, что сети хранят информацию распределённым образом).
Розенблатт разделил нейронные сети на простые двухслойные (один слой для ввода, а второй для вывода) и многослойные сети (с одним или несколькими промежуточными слоями). Он обобщил тип обучающей процедуры, использованной Фарли и Кларком при обучении двухслойных сетей, таким образом, чтобы её можно было применять и к многослойным сетям.
Эта процедура была позаимствована из работ Бельмонта Фарли и Уэсли Кларка и модифицирована так, чтобы её можно было применять и к многослойным сетям. Кроме того, Розенблатт показывает, что многослойные сети не обязательно сходятся при использовании детерминистских алгоритмов обучения, поэтому при обучении таких систем необходимо задействовать стохастические, то есть включающие в себя элемент случайности, алгоритмы.
Заблуждение, что Розенблатт не рассматривал многослойные сети, закралось в литературу после того, как Дэвид Эверетт Румельхарт, человек, который «переоткрыл» перцептроны, описав их в своих трудах, каким-то образом умудрился не заметить, что у перцептрона «Mark I» в рецептивном слое есть веса, и что Розенблатт изучал многослойные сети. Судя по тому, что он также утверждал, что многие описанные в «Принципах нейродинамики» вещи он изобрел самостоятельно, он толком не читал поздние работы Розенблатта, ограничившись лишь ранними статьями.
С именем Румельхарта связан ренессанс нейронных сетей. Со своим коллегой Доном Норманом он издал серию книг «Explorations in Cognition»; из его с Джеймсом Макклелландом, не без влияния Джеффри Хинтона, работ выросло всё современное глубокое обучение. Поэтому его заблуждение в отношении исследований Розенблатта были воспроизведены многократно.
Критика Минского и Пейперта
Минский и Пейперт в ответ на исследования Розенблатта написали целую книгу под названием «Перцептроны». Как мы уже знаем, для Минского тема была отнюдь не нова, нейросетевым моделям была посвящена его диссертация. Однако ограничения, о которых он и Пейперт пишут в своей книге, относятся лишь к отдельным архитектурам, и то только в применении к некоторым классам задач. В книге авторы показывают, что перцептрон с единственным ассоциативным слоем не может вычислять некоторые предикаты, если по крайней мере один из нейронов в А-слое не связан ненулевым весом с каждым из входных нейронов.
Тут необходимо пояснение: Розенблатт был хорошо знаком с работами Дэвида Хьюбела и Торстена Визеля, которые описывают исследования зрительной коры кошек. Эти исследования показали, что сигнал из зрительного нерва на первом шаге поступает строго в первичную зрительную кору, и только через неё попадает в остальные части мозга. Под впечатлением от этой работы, Розенблатт решил, что для решения многих задач можно создавать локально связанные искусственные нейронные сети, где в первых слоях нейроны будут связаны друг с другом только внутри небольших групп. Выходы этих локальных групп будут объединяться в следующих слоях сетки. В таких архитектурах должно быть значительно меньше параметров, чем в полносвязных сетях, и за счет этого их можно будет эффективнее обучать, считал он.
В будущем развитие этого подхода привело к появлению свёрточных нейронных сетей. Но Минский подвергал сомнению целесообразность такого подхода. Он изобрёл два примера, которые, как ему казалось, ставят под сомнение жизнеспособность идеи локально связанных сетей. Этими примерами стало вычисление предикатов чётности и замкнутости. Минский считал свои аргументы настолько удачными, что решил вынести их визуализацию на обложку своей книги.
Издательство «MIT Press», год издания 2017
Если присмотреться, можно заметить, что сверху на обложке спираль состоит из одной «загогулины», а снизу — из двух.
В приведённом им примере задачи для фотоперцептрона — две спирали (см. ниже). Если посмотреть на них внимательно, то окажется, что одна из них замкнутая, а вторая состоит из двух сегментов. Он утверждал, что локально связанный перцептрон не может научиться отличать единый контур от состоящего из двух частей. Для этого, говорил он, нужно, чтобы хотя бы один нейрон второго слоя был связан абсолютно со всеми нейронами первого слоя.
Вторая задача, с которой не справляется локально связанный перцептрон, касается чётности (дано изображение, на котором размещено множество точек, и нужно определить, чётное их количество или нечётное). На основании этих двух примеров Минский сделал вывод, что если нейронные сети всё равно нужно делать полносвязными, то они ничем не лучше, чем другие распознающие модели того времени.
Один из членов команды Розенблатта, математик Артур Блок, дал остроумный ответ на «Перцептроны». «А вы сами-то, когда смотрите на этот контур, можете с одного взгляда сказать, он замкнутый или нет?» — так можно передать его посыл, адресованный авторам критики. Конечно нет, человек не способен за несколько секунд увидеть различия у этих двух спиралей. Розенблатт бы обрадовался такому ответу, так как всегда считал, что его модели должны быть максимально приближены к своим биологическим прототипам. Точно также и с предикатом чётности: если на листе бумаги изображено достаточно много точек, человек не сможет с первого взгляда определить, чётное их количество или нет. Для этого точки придётся пересчитать. «То, что перцептронисты брали как временную опору, Минский и Пейперт интерпретируют как конечную структуру», — продолжает Блок. К сожалению, этот ответ был опубликован уже после смерти Розенблатта, в 70-ых.
Некоторым читавшим Минского и Пейперта кажется, что эти двое критиковали не столько целый перцептрон, сколько отдельный нейрон. «Я думаю, что большая часть сказанного в книге относится к единичному нейрону», — вспоминает Бернард Уидроу. И это похоже на правду: единичный искусственный нейрон может вычислять только небольшое число логических предикатов, и среди них нет предиката чётности или замкнутости. Минскому и Пейперту часто приписывают утверждение, что нейронные сети не способны выполнять операцию XOR («исключающее или», частный случай предиката чётности), хотя они такого никогда не утверждали. Действительно, один нейрон в принципе не может выполнить операцию XOR, да и однослойная сеть этого не может.
Есть мнение, что книга Минского и Пейперта каким-то образом поколебала научные позиции Розенблатта. Миф заходит дальше и повествует, что из-за неё Розенблатт потерял финансирование и в некоторых интерпретациях чуть ли не утопился от горя (такая шекспировская драма!). На самом деле это не так: книга вовсе не ставит крест на перцептронах. Такой цели не преследовали ни Минский, ни Пейперт. В книге обсуждаются и анализируется некоторые ограничения перцептронов, но не более.
Урезание бюджета также никак не связано с книгой «Перцептроны», а связано с конкретными изменениями в американском законодательстве. Дело в том, что в 1957-ом году, после того, как Советский союз запустил первый искусственный спутник Земли, у американских учёных начался «праздник»: военные деньги стали вкладывать в перспективные исследования. Для курирования проектов была даже создана специальная организация, которая потом превратилась в DARPA. В это время проекты Розенблатта получили финансирование от Управления военно-морских исследований.
«Пир духа» продолжался до второй половины 60-ых годов, пока не вызвал тревогу у бюджетного комитета: «Как так, военные деньги тратятся на фундаментальные исследования, которые не имеют четко определенных прикладных результатов для военной области!». С подачи Майкла Мэнсфилда, сенатора-демократа от штата Монтана и лидера сенатского большинства в 1957—1961 была принята «Поправка Мэнсфилда 1969 года», которая привела к резкому сокращению расходов на фундаментальные исследования. Именно она ударила по Розенблатту и его команде: фоноперцептрон «Тобермори», над которым он в то время трудился, не имел прямых военных применений в обозримом горизонте планирования. При этом, Розенблатт продолжал получать финансирование от университета, которое позволяло ему продолжать работу, хотя и не такими быстрыми темпами.
Книга Минского и Пейперта стала важна потом, во время второй весны искусственного интеллекта, а тогда, в начале 60-х, книга не сделала никакого шума. Уидроу так описал свои впечатления от прочтения книги:
«Боже мой, какой пасквиль! <. >Я чувствовал, что они достаточно узко определили, что такое перцептрон, что они смогли доказать, что он практически ничего не мог сделать. <. >Мы уже перестали работать над нейронными сетями. Насколько я знал, никто не работал над нейронными сетями, когда вышла эта книга. Я не мог понять, в чём смысл этого, какого чёрта они это сделали. Но я знаю, сколько нужно времени, чтобы написать книгу. Я подумал, что они, должно быть, решили написать эту книгу очень давно, чтобы нанести удар по данной области, сделать всё возможное, чтобы понатыкать булавок в воздушный шар. Но к тому времени, когда книга вышла, эта область уже ушла. Никто не занимался этим».
Пикантные подробности судьбы Розенблатта
Если бы биография Розенблатта была заурядной, мы бы, наверно, не стали о ней писать. Однако она была далеко не такой! И это важно: известный социолог науки Бруно Латур писал, что открытия не делаются сами по себе, в вакууме, а научная деятельность тесно переплетена с теми случайностями, которые сопровождают учёного в повседневной жизни. И вот что это за случайности в судьбе Розенблатта. Во-первых, возможно, при жизни его родственники были более известны, чем сам Фрэнк Розенблатт младший. Его отец, Фрэнк Фердинанд Розенблатт, который не дожил несколько месяцев до рождения сына, в начале XX века был одним из руководителей еврейской благотворительной организации Joint.
Фрэнк Фердинанд был очень примечательной личностью. Он участвовал в революционном движении Российской империи, затем эмигрировал и возглавил комитет помощи евреям-беженцам Гражданской войны. Розенблатт старший собственноручно доставлял гуманитарную помощь во Владивосток, и во времена правления Колчака и Уфимской директории пытался добиться от Колчака прекращения еврейских погромов.
Брат Розенблатта был консультантом известных политиков, и благодаря его советам удалось прервать эпоху маккартизма. Сам же Розенблатт, по воспоминаниям Хелла Седжвика, одного из его аспирантов, был довольно тихим человеком, но, как ни странно, виртуозно водил спортивный автомобиль. Подобно Мак-Каллоку, он поддерживал дружеские отношения со своими учениками. Группа аспирантов и аспиранток жила в доме своего научного руководителя. По воспоминаниям одного из них, Хела Седжвика, они проводили время вместе, читали вслух стихи и прозу, вели интеллектуальные беседы. Помимо математики и психологии, Розенблатт интересовался другими направлениями науки, например он выстроил обсерваторию рядом с домом и открыл один из первых способов обнаружения экзопланет. Так же, как и Алан Тьюринг, Розенблатт был скрытым геем. Когда ему предложили вступить в «Лигу гомофилов» (Cornell Student Homophile League, основана в 1968-м), он сказал, что общество пока не готово к открытому обсуждению этой темы, видимо, помня, что случилось с его предшественником.
Академическая карьера Розенблатта была незамысловатой: после окончания Высшей школы наук в Бронксе (среднее учебное заведение с высоким уровнем преподавания) в 1946 году, Фрэнк поступил в Корнельский университет, где в 1950 году получил степень бакалавра наук, а через шесть лет — степень доктора философии с темой диссертации «Расчёт K-коэффициента и пробное применение новой техники многомерного анализа». Но на его счету были исследования, которые сегодня кажутся курьёзными. В 1966-м он присоединился к группе исследования нейробиологии и поведения, где занимался тем, что обучали крыс определённому поведению, затем умервщляли их, размалывали мозг в кашицу, вводили её в мозг других крыс и смотрели, передастся ли им выученное поведение. До этого, в 1964 году, он участвовал в исследовании, посвящённом влиянию LSD на процессы связывания серотонина в крысином мозге.
Умер Розенблатт в результате несчастного случая на водах (в английском это звучит как «boating accident»). Иными словами, он утонул. Именно этот инцидент некоторые склонны трактовать как самоубийство, хотя поводов к тому не было, и друзья учёного убеждены, что он был «не из таких».
Получается, что обе части мифа о перцептроне и его создателе не проходят проверку фактами. Коннекционизм не был убит Минским и Пейпертом. Денег из-за них Розенблатта не лишали. Многослойные сети Розенблатт вполне себе рассматривал. Румельхарт, от которого мы знаем о работах Розенблатта, не читал основные его работы (поздние), а читал только ранние.
Модели, созданные Розенблаттом сильно опередили время, и даже сегодня они способны эффективно решать некоторые задачи из области машинного обучения. Например, в 2001 году группа исследователей под руководством Эрнста Куссуля провела эксперименты по обучению на MNIST трёхслойных розенблаттовских перцептронов с различным количеством элементов в А-слое. Во времена Розенблатта технические возможности позволяли работать с перцептронами, содержащими в A-слое лишь до нескольких сотен элементов, а в работе Куссуля их число удалось довести до 512 000. И что вы думаете — была достигнута точность распознавания в 99,2%, что сопоставимо с лучшими моделями начала XXI века!
Заслуга Розенблатта в том, что он создал систематическую науку о нейросетях. Он вплотную приблизился к идее создания свёрточных нейронных сетей, активно искал механизмы, которые потенциально могли бы синхронизировать веса в различной части зрительного анализатора. Несмотря на некоторые установки, проистекавшие из символьного происхождения его моделей (вероятно, именно это не позволило Розенблатту открыть градиентные методы обучения нейронных сетей), наш герой сформулировал множество интересных идей, некоторые из которых не теряют актуальности и в наши дни.
Розенблатт продолжал исследования нейронных сетей до последних дней своей жизни. Из-за его внезапной кончины, работа над перцептронами продлилась всего 15 лет, но этот период стал целой эпохой в истории коннекционизма.
«Принципы нейродинамики» стали одной из основополагающих работ по теории искусственных нейронных сетей, и чтение этой книги может быть полезно всем современным исследователям в этой области.
- Блог компании SberDevices
- Научно-популярное
- Искусственный интеллект
Нейронные сети, перцептрон
Искусственная нейронная сеть (ИНС) (англ. Artificial neural network (ANN)) — упрощенная модель биологической нейронной сети, представляющая собой совокупность искусственных нейронов, взаимодействующих между собой.
Основные принципы работы нейронных сетей были описаны еще в 1943 году Уорреном Мак-Каллоком и Уолтером Питтсом [1] . В 1957 году нейрофизиолог Фрэнк Розенблатт разработал первую нейронную сеть [2] , а в 2010 году большие объемы данных для обучения открыли возможность использовать нейронные сети для машинного обучения.
На данный момент нейронные сети используются в многочисленных областях машинного обучения и решают проблемы различной сложности.
Структура нейронной сети
Рисунок 2. Схема искусственного нейрона
Хорошим примером биологической нейронной сети является человеческий мозг. Наш мозг — сложнейшая биологическая нейронная сеть, которая принимает информацию от органов чувств и каким-то образом ее обрабатывает (узнавание лиц, возникновение ощущений и т.д.). Мозг же, в свою очередь, состоит из нейронов, взаимодействующих между собой.
Для построения искусственной нейронной сети будем использовать ту же структуру. Как и биологическая нейронная сеть, искусственная состоит из нейронов, взаимодействующих между собой, однако представляет собой упрощенную модель. Так, например, искусственный нейрон, из которых состоит ИНС, имеет намного более простую структуру: у него есть несколько входов, на которых он принимает различные сигналы, преобразует их и передает другим нейронам. Другими словами, искусственный нейрон — это такая функция [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] .
Для разных типов нейронов используют самые разные функции активации, но одними из самых популярных являются:
- Функция единичного скачка. Если [math]net \gt threshold[/math] , [math]\phi(net) = 1[/math] , а иначе [math]0[/math] ;
- Сигмоидальная функция. [math]\phi(net) = \frac[/math] , где параметр [math]a[/math] характеризует степень крутизны функции;
- Гиперболический тангенс. [math]\phi(net) = tanh(\frac)[/math] , где параметр [math]a[/math] также определяет степень крутизны графика функции;
- Rectified linear units (ReLU). [math]ReLU(x) = \begin x & x \geq 0 \\ 0 & x \lt 0 \end = \max(x, 0)[/math] .
Виды нейронных сетей
Разобравшись с тем, как устроен нейрон в нейронной сети, осталось понять, как их в этой сети располагать и соединять.
Как правило, в большинстве нейронных сетей есть так называемый входной слой, который выполняет только одну задачу — распределение входных сигналов остальным нейронам. Нейроны этого слоя не производят никаких вычислений. В остальном нейронные сети делятся на основные категории, представленные ниже.
Однослойные нейронные сети
Рисунок 3. Схема однослойной нейронной сети
Однослойная нейронная сеть (англ. Single-layer neural network) — сеть, в которой сигналы от входного слоя сразу подаются на выходной слой, который и преобразует сигнал и сразу же выдает ответ.
Как видно из схемы однослойной нейронной сети, представленной справа, сигналы [math]x_1, x_2, \ldots x_n[/math] поступают на входной слой (который не считается за слой нейронной сети), а затем сигналы распределяются на выходной слой обычных нейронов. На каждом ребре от нейрона входного слоя к нейрону выходного слоя написано число — вес соответствующей связи.
Многослойные нейронные сети
Рисунок 4. Схема многослойной нейронной сети
Многослойная нейронная сеть (англ. Multilayer neural network) — нейронная сеть, состоящая из входного, выходного и расположенного(ых) между ними одного (нескольких) скрытых слоев нейронов.
Помимо входного и выходного слоев эти нейронные сети содержат промежуточные, скрытые слои. Такие сети обладают гораздо большими возможностями, чем однослойные нейронные сети, однако методы обучения нейронов скрытого слоя были разработаны относительно недавно.
Работу скрытых слоев нейронов можно сравнить с работой большого завода. Продукт (выходной сигнал) на заводе собирается по стадиям на станках. После каждого станка получается какой-то промежуточный результат. Скрытые слои тоже преобразуют входные сигналы в некоторые промежуточные результаты.
Сети прямого распространения
Сети прямого распространения (англ. Feedforward neural network) (feedforward сети) — искусственные нейронные сети, в которых сигнал распространяется строго от входного слоя к выходному. В обратном направлении сигнал не распространяется.
Все сети, описанные выше, являлись сетями прямого распространения, как следует из определения. Такие сети широко используются и вполне успешно решают определенный класс задач: прогнозирование, кластеризация и распознавание.
Однако сигнал в нейронных сетях может идти и в обратную сторону.
Сети с обратными связями
Рисунок 5. Схема сети с обратными связями
Сети с обратными связями (англ. Recurrent neural network) — искусственные нейронные сети, в которых выход нейрона может вновь подаваться на его вход. В более общем случае это означает возможность распространения сигнала от выходов к входам.
В сетях прямого распространения выход сети определяется входным сигналом и весовыми коэффициентами при искусственных нейронах. В сетях с обратными связями выходы нейронов могут возвращаться на входы. Это означает, что выход какого-нибудь нейрона определяется не только его весами и входным сигналом, но еще и предыдущими выходами (так как они снова вернулись на входы).
Обучение нейронной сети
Обучение нейронной сети — поиск такого набора весовых коэффициентов, при котором входной сигнал после прохода по сети преобразуется в нужный нам выходной.
Это определение «обучения нейронной сети» соответствует и биологическим нейросетям. Наш мозг состоит из огромного количества связанных друг с другом нейросетей, каждая из которых в отдельности состоит из нейронов одного типа (с одинаковой функцией активации). Наш мозг обучается благодаря изменению синапсов — элементов, которые усиливают или ослабляют входной сигнал.
Если обучать сеть, используя только один входной сигнал, то сеть просто «запомнит правильный ответ», а как только мы подадим немного измененный сигнал, вместо правильного ответа получим бессмыслицу. Мы ждем от сети способности обобщать какие-то признаки и решать задачу на различных входных данных. Именно с этой целью и создаются обучающие выборки.
Обучающая выборка — конечный набор входных сигналов (иногда вместе с правильными выходными сигналами), по которым происходит обучение сети.
После обучения сети, то есть когда сеть выдает корректные результаты для всех входных сигналов из обучающей выборки, ее можно использовать на практике. Однако прежде чем сразу использовать нейронную сеть, обычно производят оценку качества ее работы на так называемой тестовой выборке.
Тестовая выборка — конечный набор входных сигналов (иногда вместе с правильными выходными сигналами), по которым происходит оценка качества работы сети.
Само обучение нейронной сети можно разделить на два подхода: обучение с учителем [на 28.01.19 не создан] и обучение без учителя [на 28.01.19 не создан] . В первом случае веса меняются так, чтобы ответы сети минимально отличались от уже готовых правильных ответов, а во втором случае сеть самостоятельно классифицирует входные сигналы.
Перцептрон
Рисунок 6. Схема перцептрона
Перцептрон (англ. Perceptron) — простейший вид нейронных сетей. В основе лежит математическая модель восприятия информации мозгом, состоящая из сенсоров, ассоциативных и реагирующих элементов.
История
Идею перцептрона предложил нейрофизиолог Фрэнк Розенблатт. Он предложил схему устройства, моделирующего процесс человеческого восприятия, и назвал его «перцептроном» (от латинского perceptio — восприятие). В 1960 году Розенблатт представил первый нейрокомпьютер — «Марк-1», который был способен распознавать некоторые буквы английского алфавита.
Таким образом перцептрон является одной из первых моделей нейросетей, а «Марк-1» — первым в мире нейрокомпьютером.
Описание
В основе перцептрона лежит математическая модель восприятия информации мозгом. Разные исследователи по-разному его определяют. В самом общем своем виде (как его описывал Розенблатт) он представляет систему из элементов трех разных типов: сенсоров, ассоциативных элементов и реагирующих элементов.
Принцип работы перцептрона следующий:
- Первыми в работу включаются S-элементы. Они могут находиться либо в состоянии покоя (сигнал равен 0), либо в состоянии возбуждения (сигнал равен 1);
- Далее сигналы от S-элементов передаются A-элементам по так называемым S-A связям. Эти связи могут иметь веса, равные только -1, 0 или 1;
- Затем сигналы от сенсорных элементов, прошедших по S-A связям, попадают в A-элементы, которые еще называют ассоциативными элементами;
- Одному A-элементу может соответствовать несколько S-элементов;
- Если сигналы, поступившие на A-элемент, в совокупности превышают некоторый его порог [math]\theta[/math] , то этот A-элемент возбуждается и выдает сигнал, равный 1;
- В противном случае (сигнал от S-элементов не превысил порога A-элемента), генерируется нулевой сигнал;
- Далее сигналы, которые произвели возбужденные A-элементы, направляются к сумматору (R-элемент), действие которого нам уже известно. Однако, чтобы добраться до R-элемента, они проходят по A-R связям, у которых тоже есть веса (которые уже могут принимать любые значения, в отличие от S-A связей);
- R-элемент складывает друг с другом взвешенные сигналы от A-элементов, а затем
- если превышен определенный порог, генерирует выходной сигнал, равный 1;
- eсли порог не превышен, то выход перцептрона равен -1.
Для элементов перцептрона используют следующие названия:
- S-элементы называют сенсорами;
- A-элементы называют ассоциативными;
- R-элементы называют реагирующими.
Классификация перцептронов
Рисунок 7. Схема однослойного перцептрона
Перцептрон с одним скрытым слоем (элементарный перцептрон, англ. elementary perceptron) — перцептрон, у которого имеется только по одному слою S, A и R элементов.
Однослойный персептрон (англ. Single-layer perceptron) — перцептрон, каждый S-элемент которого однозначно соответствует одному А-элементу, S-A связи всегда имеют вес 1, а порог любого А-элемента равен 1. Часть однослойного персептрона соответствует модели искусственного нейрона.
Его ключевая особенность состоит в том, что каждый S-элемент однозначно соответствует одному A-элементу, все S-A связи имеют вес, равный +1, а порог A элементов равен 1. Часть однослойного перцептрона, не содержащая входы, соответствует искусственному нейрону, как показано на картинке. Таким образом, однослойный перцептрон — это искусственный нейрон, который на вход принимает только 0 и 1.
Однослойный персептрон также может быть и элементарным персептроном, у которого только по одному слою S,A,R-элементов.
Многослойный перцептрон по Розенблатту (англ. Rosenblatt multilayer perceptron) — перцептрон, который содержит более 1 слоя А-элементов.
Многослойный перцептрон по Румельхарту (англ. Rumelhart multilater perceptron) — частный случай многослойного персептрона по Розенблатту, с двумя особенностями:
- S-A связи могут иметь произвольные веса и обучаться наравне с A-R связями;
- Обучение производится по специальному алгоритму, который называется обучением по методу обратного распространения ошибки.
Обучение перцептрона
Задача обучения перцептрона — подобрать такие [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^ = w^ − \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] .
# Load required libraries from sklearn import datasets from sklearn.preprocessing import StandardScaler from sklearn.linear_model import Perceptron #Single-layer perceptron from sklearn.neural_network import MLPClassifier #Multilayer perceptron from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score import numpy as np
# Load the mnist dataset mnist = datasets.load_digits()
# Create our X and y data n_samples = len(mnist.images) X = mnist.images.reshape((n_samples, -1)) y = mnist.target
# Split the data into 70% training data and 30% test data X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
# Train the scaler, which standarizes all the features to have mean=0 and unit variance sc = StandardScaler() sc.fit(X_train)
# Apply the scaler to the X training data X_train_std = sc.transform(X_train)
# Apply the SAME scaler to the X test data X_test_std = sc.transform(X_test)
# Create a single-layer perceptron object with the parameters: 40 iterations (epochs) over the data, and a learning rate of 0.1 ppn = Perceptron(n_iter=40, eta0=0.1, random_state=0) # Create a multilayer perceptron object mppn = MLPClassifier(solver='lbfgs', alpha=1e-5, hidden_layer_sizes=(256, 512, 128), random_state=1)
# Train the perceptrons ppn.fit(X_train_std, y_train) mppn.fit(X_train_std, y_train)
# Apply the trained perceptrons on the X data to make predicts for the y test data y_pred = ppn.predict(X_test_std) multi_y_pred = mppn.predict(X_test_std)
# View the accuracies of the model, which is: 1 - (observations predicted wrong / total observations) print('Single-layer perceptron accuracy: %.4f' % accuracy_score(y_test, y_pred)) print('Multilayer perceptron accuracy: %.4f' % accuracy_score(y_test, multi_y_pred))
Single-layer perceptron accuracy: 0.9574 Multilayer perceptron accuracy: 0.9759
Пример использования с помощью tensorflow [6]
Будем классифицировать цифры из того же датасета MNIST.
# Load required libraries import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data
#Load MNIST dataset mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
#placeholder for test data x = tf.placeholder(tf.float32, [None, 784]) #placeholder for weights and bias W = tf.Variable(tf.zeros([784, 10])) b = tf.Variable(tf.zeros([10])) #tensorflow model y = tf.nn.softmax(tf.matmul(x, W) + b) #loss function y_ = tf.placeholder(tf.float32, [None, 10]) cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
#gradient descent step train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
init = tf.initialize_all_variables() sess = tf.Session() sess.run(init) for i in range(1000): batch_xs, batch_ys = mnist.train.next_batch(100) sess.run(train_step, feed_dict=) correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) print("Accuracy: %s" % sess.run(accuracy, feed_dict=))
Рисунок 8.
Правильные метки — 5, 4, 9, 7.
Результат классификации — 6, 6, 4, 4.
Accuracy: 0.9164
На рисунке справа показаны четыре типичных изображения, на которых классификаторы ошибаются. Согласитесь, случаи действительно тяжелые.
Пример на языке Java
Пример классификации с применением weka.classifiers.functions.MultilayerPerceptron [7]
nz.ac.waikato.cms.weka weka-stable 3.8.0
import weka.classifiers.functions.MultilayerPerceptron; import weka.core.converters.CSVLoader; import java.io.File;
// read train & test datasets and build MLP classifier var trainds = new DataSource("etc/train.csv"); var train = trainds.getDataSet(); train.setClassIndex(train.numAttributes() - 1); var testds = new DataSource("etc/test.csv"); var test = testds.getDataSet(); test.setClassIndex(test.numAttributes() - 1); var mlp = new MultilayerPerceptron(); mlp.buildClassifier(train); // Test the model var eTest = new Evaluation(train); eTest.evaluateModel(mlp, test); // Print the result à la Weka explorer: var strSummary = eTest.toSummaryString(); System.out.println(strSummary);
См. также
- Сверточные нейронные сети
- Рекуррентные нейронные сети
- Рекурсивные нейронные сети [на 28.01.19 не создан]
Примечания
- ↑Artificial neuron, Wikipedia
- ↑Perceptron, Wikipedia
- ↑Применения перцептрона, Wikipedia
- ↑Библиотека scikit-learn для Python
- ↑Датасет MNIST
- ↑Библиотека tensorflow для Python
- ↑Weka, MLP
Источники информации
- Сергей Николенко, Артур Кадурин, Екатерина Архангельская. Глубокое обучение. Погружение в мир нейронных сетей. — «Питер», 2018. — С. 93-123.
- Нейронные сети — учебник