Сайт о телевидении

Сайт о телевидении

» » Нейронные сети: виды, принцип работы и области применения. Простыми словами о сложном: что такое нейронные сети

Нейронные сети: виды, принцип работы и области применения. Простыми словами о сложном: что такое нейронные сети

  • Мозг
  • Когда, за бутылкой пива, я заводил разговор о нейронных сетях - люди обычно начинали боязливо на меня смотреть, грустнели, иногда у них начинал дёргаться глаз, а в крайних случаях они залезали под стол. Но, на самом деле, эти сети просты и интуитивны. Да-да, именно так! И, позвольте, я вам это докажу!

    Допустим, я знаю о девушке две вещи - симпатична она мне или нет, а также, есть ли о чём мне с ней поговорить. Если есть, то будем считать это единицей, если нет, то - нулём. Аналогичный принцип возьмем и для внешности. Вопрос: “В какую девушку я влюблюсь и почему?”


    Можно подумать просто и бескомпромиссно: “Если симпатична и есть о чём поговорить, то влюблюсь. Если ни то и ни другое, то - увольте.”



    Но что если дама мне симпатична, но с ней не о чем разговаривать? Или наоборот?


    Понятно, что для каждого из нас что-то одно будет важнее. Точнее, у каждого параметра есть его уровень важности, или вернее сказать - вес. Если помножить параметр на его вес, то получится соответственно “влияние внешности” и “влияние болтливости разговора”.


    И вот теперь я с чистой совестью могу ответить на свой вопрос:


    “Если влияние харизмы и влияние болтливости в сумме больше значения “влюбчивость” то влюблюсь…”



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



    Собственно, это правило и есть нейрон.


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


    Сделаем ещё несколько выводов:

    • Если оба веса будут малыми, то мне будет сложно влюбиться в кого бы-то ни было.
    • Если же оба веса будут чересчур большими, то я влюблюсь хоть в столб.
    • Заставить меня влюбиться в столб можно также, понизив порог влюбчивости, но прошу - не делайте со мной этого! Лучше давайте пока забудем про него, ок?

    Кстати о пороге

    Смешно, но параметр “влюбчивости” называется “порогом возбуждения”. Но, дабы эта статья не получила рейтинг “18+”, давайте договоримся говорить просто “порог”, ок?

    Нейронная сеть

    Не бывает однозначно симпатичных и однозначно общительных дам. Да и влюблённость влюблённости рознь, кто бы что ни говорил. Потому давайте вместо брутальных и бескомпромиссных “0” и “1”, будем использовать проценты. Тогда можно сказать - “я сильно влюблён (80%), или “эта дама не особо разговорчива (20%)”.


    Наш примитивный “нейрон-максималист” из первой части уже нам не подходит. Ему на смену приходит “нейрон-мудрец”, результатом работы которого будет число от 0 до 1, в зависимости от входных данных.



    “Нейрон-мудрец” может нам сказать: “эта дама достаточно красива, но я не знаю о чём с ней говорить, поэтому я не очень-то ей и восхищён”



    Немного терминологии

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


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


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


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


    В работе мне абсолютно всё равно, сколько денег у девушки, поэтому вес сделаю равным нулю.



    Оценивать девушку только для работы и влюблённости - очень глупо. Давайте добавим, насколько с ней будет приятно путешествовать:

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

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



    Ладно, конечно же, не всё так просто (в плане женщин). Привнесём немного драматизма и реальности в наш простой и радужный мир. Во-первых, сделаем нейрон "женюсь - не женюсь" - мудрым. Сомнения же присущи всем, так или иначе. И ещё - добавим нейрон "хочу от неё детей" и, чтобы совсем по правде, нейрон “держись от неё подальше".


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


    Входные суждения называются “входной слой”, итоговые - “выходной слой”, а тот, что скрывается посередине, называется "скрытым". Скрытый слой - это мои суждения, полуфабрикаты, мысли, о которых никто не знает. Скрытых слоёв может быть несколько, а может быть и ни одного.

    Долой максимализм.

    Помните, я говорил об отрицательном влияние денег на моё желание путешествовать с человеком? Так вот - я слукавил. Для путешествий лучше всего подходит персона, у которой денег не мало, и не много. Мне так интереснее и не буду объяснять почему.


    Но тут я сталкиваюсь с проблемой:


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


    Не получается мне вот так, одним весом, заставить нейрон распознать ситуацию “ни много -ни мало”!


    Чтобы это обойти, я сделаю два нейрона - “денег много” и “денег мало”, и подам им на вход денежный поток от нашей дамы.


    Теперь у меня есть два суждения: “много” и “мало”. Если оба вывода незначительны, то буквально получится “ни много - ни мало”. То есть, добавим на выход ещё один нейрон, с отрицательными весами:



    “Нимногонимало”. Красные стрелки - положительные связи, синие - отрицательные


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



    Или-или. Красные стрелки - положительные связи, синие – отрицательные




    можно заменить “мудрые” нейроны на “максималистов” и тогда получим логический оператор XOR. Главное - не забыть настроить пороги возбуждения.


    В отличие от транзисторов и бескомпромиссной логики типичного программиста “если - то”, нейронная сеть умеет принимать взвешенные решения. Их результаты будут плавно меняться, при плавном изменение входных параметров. Вот она мудрость!


    Обращу ваше внимание, что добавление слоя из двух нейронов, позволило нейрону “ни много - ни мало” делать более сложное и взвешенное суждение, перейти на новый уровень логики. От “много” или “мало” - к компромиссному решению, к более глубокому, с философской точки зрения, суждению. А что если добавить скрытых слоёв ещё? Мы способны охватить разумом ту простую сеть, но как насчёт сети, у которой есть 7 слоёв? Способны ли мы осознать глубину её суждений? А если в каждом из них, включая входной, около тысячи нейронов? Как вы думаете, на что она способна?


    Представьте, что я и дальше усложнял свой пример с женитьбой и влюблённостью, и пришёл к такой сети. Где-то там в ней скрыты все наши девять нейрончиков, и это уже больше похоже на правду. При всём желании, понять все зависимости и глубину суждений такой сети - попросту невозможно. Для меня переход от сети 3х3 к 7х1000 - сравним с осознанием масштабов, если не вселенной, то галактики - относительно моего роста. Попросту говоря, у меня это не получится. Решение такой сети, загоревшийся выход одного из её нейронов - будет необъясним логикой. Это то, что в быту мы можем назвать “интуицией” (по крайней мере – “одно из..”). Непонятное желание системы или её подсказка.


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

    Обучение.

    Несколькими строчками ранее я обмолвился о хорошо настроенной сети, чем вероятно спровоцировал немой вопрос: “А как мы можем настроить сеть, состоящую из нескольких тысяч нейронов? Сколько “человеколет” и погубленных жизней нужно на это?.. Боюсь предположить ответ на последний вопрос. Куда лучше автоматизировать такой процесс настройки - заставить сеть саму настраивать себя. Такой процесс автоматизации называется обучением. И чтобы дать поверхностное о нём представление, я вернусь к изначальной метафоре об “очень важном вопросе”:


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


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


    2) Обучение без учителя (для отчаянных экспериментаторов). Попробовать методом “тыка” жениться на десятке-другом женщин. После каждой женитьбы, в недоумение чесать репу. Повторять, пока не поймёшь, что надоело, и ты “уже знаешь, как это бывает”.


    3) Обучение без учителя, вариант 2 (путь отчаянных оптимистов). Забить на всё, что-то делать по жизни, и однажды обнаружить себя женатым. После этого, перенастроить свою сеть в соответствие с текущей реальностью, дабы всё устраивало.



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


    Хороших вам весов и отличных обучающих выборок! Ну а если это уже и не нужно, то расскажите об этом кому-нибудь ещё.



    Веса моей нейронной сети не настроены, и я никак не могу понять к какому ресурсу должна относится эта статья.

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

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

    Шаг 1. Нейроны и метод прямого распространения

    Так что же такое «нейронная сеть»? Давайте подождём с этим и сперва разберёмся с одним нейроном.

    Нейрон похож на функцию: он принимает на вход несколько значений и возвращает одно.

    Круг ниже обозначает искусственный нейрон. Он получает 5 и возвращает 1. Ввод - это сумма трёх соединённых с нейроном синапсов (три стрелки слева).

    В левой части картинки мы видим 2 входных значения (зелёного цвета) и смещение (выделено коричневым цветом).

    Входные данные могут быть численными представлениями двух разных свойств. Например, при создании спам-фильтра они могли бы означать наличие более чем одного слова, написанного ЗАГЛАВНЫМИ БУКВАМИ, и наличие слова «виагра».

    Входные значения умножаются на свои так называемые «веса», 7 и 3 (выделено синим).

    Теперь мы складываем полученные значения со смещением и получаем число, в нашем случае 5 (выделено красным). Это - ввод нашего искусственного нейрона.

    Потом нейрон производит какое-то вычисление и выдает выходное значение. Мы получили 1, т.к. округлённое значение сигмоиды в точке 5 равно 1 (более подробно об этой функции поговорим позже).

    Если бы это был спам-фильтр, факт вывода 1 означал бы то, что текст был помечен нейроном как спам.

    Иллюстрация нейронной сети с Википедии.

    Если вы объедините эти нейроны, то получите прямо распространяющуюся нейронную сеть - процесс идёт от ввода к выводу, через нейроны, соединённые синапсами, как на картинке слева.

    Шаг 2. Сигмоида

    После того, как вы посмотрели уроки от Welch Labs, хорошей идеей было бы ознакомиться с четвертой неделей курса по машинному обучению от Coursera , посвящённой нейронным сетям - она поможет разобраться в принципах их работы. Курс сильно углубляется в математику и основан на Octave, а я предпочитаю Python. Из-за этого я пропустил упражнения и почерпнул все необходимые знания из видео.

    Сигмоида просто-напросто отображает ваше значение (по горизонтальной оси) на отрезок от 0 до 1.

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

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

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

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

    Шаг 3. Метод обратного распространения ошибки

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

    Нейросети

    Схема простой нейросети. Зелёным обозначены входные элементы, жёлтым - выходной элемент

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

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

    Хронология

    Известные применения

    Кластеризация

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

    Экспериментальный подбор характеристик сети

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

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

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

    Собственно обучение сети

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

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

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

    Классификация по типу входной информации

    • Аналоговые нейронные сети (используют информацию в форме действительных чисел);
    • Двоичные нейронные сети (оперируют с информацией, представленной в двоичном виде).

    Классификация по характеру обучения

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

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

    Классификация по времени передачи сигнала

    В ряде нейронных сетей активирующая функция может зависеть не только от весовых коэффициентов связей w i j , но и от времени передачи импульса (сигнала) по каналам связи τ i j . По этому в общем виде активирующая (передающая) функция связи c i j от элемента u i к элементу u j имеет вид: . Тогда синхронной сетью i j каждой связи равна либо нулю, либо фиксированной постоянной τ . Асинхронной называют такую сеть у которой время передачи τ i j для каждой связи между элементами u i и u j свое, но тоже постоянное.

    Классификация по характеру связей

    Сети прямого распространения (Feedforward)

    Все связи направлены строго от входных нейронов к выходным. Примерами таких сетей являются перцептрон Розенблатта , многослойный перцептрон , сети Ворда .

    Рекуррентные нейронные сети‎

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

    Радиально-базисные функции

    Искусственные нейронные сети, использующие в качестве активационных функций радиально-базисные (такие сети сокращённо называются RBF-сетями). Общий вид радиально-базисной функции:

    , например,

    где x - вектор входных сигналов нейрона, σ - ширина окна функции, φ(y ) - убывающая функция (чаще всего, равная нулю вне некоторого отрезка).

    Радиально-базисная сеть характеризуется тремя особенностями:

    1. Единственный скрытый слой

    2. Только нейроны скрытого слоя имеют нелинейную активационную функцию

    3. Синаптические веса связей входного и скрытого слоев равны единице

    Про процедуру обучения - см. литературу

    Самоорганизующиеся карты

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

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

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

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

    1. Случайным образом выбирается точка данных x .
    2. Определяется ближайший к x узел карты (BMU - Best Matching Unit).
    3. Этот узел перемещается на заданный шаг по направлению к x. Однако, он перемещается не один, а увлекает за собой определенное количество ближайших узлов из некоторой окрестности на карте. Из всех двигающихся узлов наиболее сильно смещается центральный - ближайший к точке данных - узел, а остальные испытывают тем меньшие смещения, чем дальше они от BMU. В настройке карты различают два этапа - этап грубой (ordering) и этап тонкой (fine-tuning) настройки. На первом этапе выбираются большие значения окрестностей и движение узлов носит коллективный характер - в результате карта «расправляется» и грубым образом отражает структуру данных; на этапе тонкой настройки радиус окрестности равен 1-2 и настраиваются уже индивидуальные положения узлов. Кроме этого, величина смещения равномерно затухает со временем, то есть она велика в начале каждого из этапов обучения и близка к нулю в конце.
    4. Алгоритм повторяется определенное число эпох (понятно, что число шагов может сильно изменяться в зависимости от задачи).

    Известные типы сетей

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

    Отличия от машин с архитектурой фон Неймана

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

    • Массовый параллелизм;
    • Распределённое представление информации и вычисления;
    • Способность к обучению и обобщению;
    • Адаптивность;
    • Свойство контекстуальной обработки информации;
    • Толерантность к ошибкам;
    • Низкое энергопотребление.

    Нейронные сети - универсальные аппроксиматоры

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

    Примеры приложений

    Предсказание финансовых временных рядов

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

    Психодиагностика

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

    Хемоинформатика

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

    Примечания

    1. Мак-Каллок У. С., Питтс В. ,Логическое исчисление идей, относящихся к нервной активности // В сб.: «Автоматы» под ред. К. Э. Шеннона и Дж. Маккарти. - М.: Изд-во иностр. лит., 1956. - с.363-384. (Перевод английской статьи 1943 г.)
    2. Pattern Recognition and Adaptive Control. BERNARD WIDROW
    3. Уидроу Б., Стирнс С. , Адаптивная обработка сигналов. - М.: Радио и связь, 1989. - 440 c.
    4. Werbos P. J. , Beyond regression: New tools for prediction and analysis in the behavioral sciences. Ph.D. thesis, Harvard University, Cambridge, MA, 1974.
    5. Галушкин А. И. Синтез многослойных систем распознавания образов. - М.: «Энергия», 1974.
    6. Rumelhart D.E., Hinton G.E., Williams R.J. , Learning Internal Representations by Error Propagation. In: Parallel Distributed Processing, vol. 1, pp. 318-362. Cambridge, MA, MIT Press. 1986.
    7. Барцев С. И., Охонин В. А. Адаптивные сети обработки информации. Красноярск: Ин-т физики СО АН СССР, 1986. Препринт N 59Б. - 20 с.
    8. BaseGroup Labs - Практическое применение нейросетей в задачах классификации
    9. Такой вид кодирования иногда называют кодом «1 из N»
    10. Открытые системы - введение в нейросети
    11. Миркес Е. М. ,Логически прозрачные нейронные сети и производство явных знаний из данных , В кн.: Нейроинформатика / А. Н. Горбань, В. Л. Дунин-Барковский, А. Н. Кирдин и др. - Новосибирск: Наука. Сибирское предприятие РАН, 1998. - 296 с ISBN 5020314102
    12. Упоминание этой истории в журнале «Популярная механика»
    13. http://www.intuit.ru/department/expert/neuro/10/ INTUIT.ru - Рекуррентные сети как ассоциативные запоминающие устройства]
    14. Kohonen, T. (1989/1997/2001), Self-Organizing Maps, Berlin - New York: Springer-Verlag. First edition 1989, second edition 1997, third extended edition 2001, ISBN 0-387-51387-6, ISBN 3-540-67921-9
    15. Зиновьев А. Ю. Визуализация многомерных данных . - Красноярск: Изд. Красноярского государственного технического университета, 2000. - 180 с.
    16. Горбань А. Н. , Обобщенная аппроксимационная теорема и вычислительные возможности нейронных сетей , Сибирский журнал вычислительной математики, 1998. Т.1, № 1. С. 12-24.
    17. Gorban A.N., Rossiyev D.A., Dorrer M.G. , MultiNeuron - Neural Networks Simulator For Medical, Physiological, and Psychological Applications , Wcnn’95, Washington, D.C.: World Congress on Neural Networks 1995 International Neural Network Society Annual Meeting: Renaissance Hotel, Washington, D.C., USA, July 17-21, 1995.
    18. Доррер М. Г. , Психологическая интуиция искусственных нейронных сетей , Дисс. ... 1998. Другие копии онлайн: ,
    19. Баскин И. И., Палюлин В. А., Зефиров Н. С., Применение искусственных нейронных сетей в химических и биохимических исследованиях, Вестн. Моск. Ун-Та. Сер. 2. Химия. 1999. Т.40. № 5.
    20. Гальберштам Н. М., Баскин И. И., Палюлин В. А., Зефиров Н. С. Нейронные сети как метод поиска зависимостей структура – свойство органических соединений // Успехи химии . - 2003. - Т. 72. - № 7. - С. 706-727.
    21. Баскин И. И., Палюлин В. А., Зефиров Н. С. Многослойные персептроны в исследовании зависимостей «структура-свойство» для органических соединений // Российский химический журнал (Журнал Российского химического общества им. Д.И.Менделеева) . - 2006. - Т. 50. - С. 86-96.

    Ссылки

    • Artificial Neural Network for PHP 5.x - Серьезный проект по разработке нейронных сетей на языке программирования PHP 5.X
    • Форум, посвященный Нейронным Сетям и Генетическим Алгоритмам
    • Миркес Е. М. , Нейроинформатика: Учеб. пособие для студентов с программами для выполнения лабораторных работ.
    • Пошаговые примеры реализации наиболее известных типов нейронных сетей на MATLAB, Neural Network Toolbox
    • Подборка материалов по нейронным сетям и интеллектуальному анализу
    • противника применения нейронных сетей в прогнозировании цен на акции

    Доброго времени вам суток, уважаемое Хабрасообщество.

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

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

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

    Биологический прототип нейрона

    Первой попыткой создания и исследования искусственных нейронных сетей считается работа Дж. Маккалока (J. McCulloch) и У. Питтса (W. Pitts) «Логическое исчисление идей, относящихся к нервной деятельности» (1943 г.), в которой были сформулированы основные принципы построения искусственных нейронов и нейронных сетей. И хотя эта работа была лишь первым этапом, многие идеи, описанные в ней, остаются актуальными и на сегодняшний день.

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

    Центральная нервная система имеет клеточное строение. Единица - нервная клетка, нейрон. Он состоит из тела и отростков, которые соединяют его с внешним миром (рис. 1.1). Отростки, по которым нейрон получает возбуждение, называются дендритами. Отросток, по которому нейрон передает возбуждение, называется аксоном, причем аксон у каждого нейрона один. Дендриты и аксон имеют довольно сложную ветвистую структуру. Место соединения аксона нейрона - источника возбуждения с дендритом называется синапсом. Основная функция нейрона состоит в передаче возбуждения из дендритов в аксон. Но сигналы, которые поступают из разных дендритов, могут влиять на сигнал в аксоне. Нейрон выдаст сигнал, если суммарное возбуждение превысит некоторое предельное значение, которое в общем случае меняется в некоторых границах. В противном случае на аксон сигнал выдан не будет: нейрон не ответит на возбуждение. У этой основной схемы много осложнений и исключений, однако большинство нейронных сетей моделируют именно эти простые свойства.

    (рисунок 1.1) - Модель биологического нейрона

    Нейрон имеет следующие основные свойства:

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

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

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

    Искуственный нейрон

    Искусственный нейрон имитирует в первом приближении свойства биологического нейрона. На вход искусственного нейрона поступает некоторое множество сигналов, каждый с которых является выходом другого нейрона. Каждый вход множится на соответствующий вес, аналогичный синаптической силе, и все произведения суммируются, определяя уровень активации нейрона. На рисунке 1.2 представлена модель, которая реализует эту идею. Хотя сети бывают довольно разные, в основе почти всех их лежит эта конфигурация. Здесь множество входных сигналов, обозначенных x1, x2, ..., xn, поступают на искусственный нейрон. Эти входные сигналы отвечают сигналам, которые приходят в синапсы биологического нейрона. Каждый сигнал множится на соответствующий вес w1, w2,..., wn, и поступает на суммирующий блок, обозначенный ∑. Каждый вес отвечает «силе» одной биологической синаптической связи. Суммирующий блок, который соответствует телу биологического элемента, алгебраически объединяет взвешенные входы, создавая выход NET:


    (рисунок 1.2) - Искусственный нейрон в первом приближении

    Данное описание можно представить следующей формулой

    где w0 - биас;
    wі - вес i- го нейрона;
    xі - выход i- го нейрона;
    n - количество нейронов, которые входят в обрабатываемый нейрон

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

    Полученный сигнал NET как правило обрабатывается функцией активации и дает выходной нейронный сигнал OUT (рис. 1.3)


    (рисунок 1.3) - Искусственный нейрон с функцией активации

    Если функция активации суживает диапазон изменения величины NET так, что при каждом значении NET значения OUT принадлежат некоторому диапазону - конечному интервалу, то функция F называется функцией, которая суживает. В качестве этой функции часто используются логистическая или «сигмоидальная» функция. Эта функция математически выражается следующим образом:

    Основное преимущество такой функции - то, что она имеет простую производную и дифференцируется по всей оси абсцисс. График функции имеет следующий вид (рис. 1.4)


    (рисунок 1.4) - Вид сигмоидальной функции активации

    Функция усиливает слабые сигналы и предотвращает насыщение от больших сигналов.

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

    Как и логистическая функция, гиперболический тангенс имеет S-образный вид, но он является симметричным относительно начала координат, и в точке NET=0 значение выходного сигнала OUT=0 (рис. 1.5). На графике можно увидеть, что эта функция, в отличии от логистической, принимает значение разных знаков, что является очень выгодным свойством для некоторых типов сетей.


    (рисунок 1.5) - Вид функции активации - гиперболический тангенс

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

    ссылки на литературу:
    1. Ф. Уоссермен. Нейрокомпьютерная техника: теория и практика. Перевод на русский язык Ю. А. Зуев, В. А. Точенов, 1992
    2. И. В. Заенцев. Нейронные сети: основные модели. Учебное пособие к курсу “Нейронные сети”

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

    Итак, распознавать мы будем цифры, написанные белым по черному, такие как эти:

    Картинки 45 на 45 пикселей, а значит входов в нашу нейронную сеть будет 45 * 45.
    Для простоты, распознаем только цифры от 0 до 5, поэтому нейронов у нас будет 6 - по одному на каждый ответ.

    Cтруктура нашей нейросети:

    Каждая связь входа сети с нейроном имеет свой вес. Импульс, проходя через связь, меняется: импульс = импульс * вес_связи.
    Нейрон получает импульсы от всех входов и просто суммирует их. Нейрон набравший больший суммарный импульс побеждает. Все просто, реализуем!

    Классы для представления элементов сети (C#):
    // Вход
    public class Input
    {
    // Связи с нейронами
    public Link OutgoingLinks;
    }

    // Связь входа с нейроном
    public class Link
    {
    // Нейрон
    public Neuron Neuron;
    // Вес связи
    public double Weight;
    }

    public class Neuron
    {
    //Все входы нейрона
    public Link IncomingLinks;
    // Накопленный нейроном заряд
    public double Power { get; set; }
    }

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

    Состояние класса KohonenNetwork это массив Input и массив Neuron:
    public class KohonenNetwork
    {
    private readonly Input _inputs;
    private readonly Neuron _neurons;
    ...
    }

    Предположим, что наша сеть уже обучена. Тогда, чтобы узнать что изображено на картинке мы вызовем метод Handle, там все перемножится, сложится и найдется максимум:
    // Пропустить вектор через нейронную сеть
    public int Handle(int input)
    {
    for (var i = 0; i < _inputs.Length; i++)
    {
    var inputNeuron = _inputs[i];
    foreach (var outgoingLink in inputNeuron.OutgoingLinks)
    {
    outgoingLink.Neuron.Power += outgoingLink.Weight * input[i];
    }
    }
    var maxIndex = 0;
    for (var i = 1; i < _neurons.Length; i++)
    {
    if (_neurons[i].Power > _neurons.Power)
    maxIndex = i;
    }
    //снять импульс со всех нейронов:
    foreach (var outputNeuron in _neurons)
    {
    outputNeuron.Power = 0;
    }
    return maxIndex;
    }

    Но перед тем как спрашивать у сети что-либо, её надо обучить. Для обучения предъявляем картинки и указываем что на них нарисовано:


    Обучение - это изменение весов связей:
    public void Study(int input, int correctAnswer)
    {
    var neuron = _neurons;
    for (var i = 0; i < neuron.IncomingLinks.Length; i++)
    {
    var incomingLink = neuron.IncomingLinks[i];
    incomingLink.Weight = incomingLink.Weight + 0.5 * (input[i] - incomingLink.Weight);
    }
    }

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