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

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

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

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

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

Следующим важным шагом стала разработка Дональдом Хеббом первого алгоритма вычисления ИНС в 1949 году, который стал основополагающем на несколько последующих десятилетий. В 1958 году Фрэнком Розенблаттом был разработан парцептрон - система, имитирующая процессы головного мозга. В свое время технология не имела аналогов и до сих пор является основополагающей в нейронных сетях. В 1986 году практически одновременно, независимо друг от друга американскими и советскими учеными был существенно доработан основополагающий метод обучения многослойного перцептрона . В 2007 году нейронные сети перенесли второе рождение. Британский информатик Джеффри Хинтоном впервые разработал алгоритм глубокого обучения многослойных нейронных сетей, который сейчас, например, используется для работы беспилотных автомобилей.

Коротко о главном

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

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

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

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

Сегодняшнее положение

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

На сегодняшний день рынок нейронных сетей огромен - это миллиарды и миллиарды долларов. Как показывает практика, большинство технологий нейросетей по всему миру мало отличаются друг от друга. Однако применение нейросетей - это очень затратное занятие, которое в большинстве случаев могут позволить себе только крупные компании. Для разработки, обучения и тестирования нейронных сетей требуются большие вычислительные мощности, очевидно, что этого в достатке имеется у крупных игроков на рынке ИТ. Среди основных компаний, ведущих разработки в этой области можно отметить подразделение Google DeepMind, подразделение Microsoft Research, компании IBM, Facebook и Baidu.

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

Почему нейросети еще далеки до человеческого мозга?

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

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

Итог

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

Для тех, кто хочет знать больше

  • Большая нейронная война: что на самом деле затевает Google
  • Как когнитивные компьютеры могут изменить наше будущее

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

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

Картинки 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);
}
}

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

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

Чтобы разобраться в проблеме, нужно узнать первопричину, которая кроется совсем на поверхности. Вспоминая Сару Коннор, с содроганием сердца понимаем, что некогда пионеры компьютерных разработок Уоррен Мак-Каллок и Уолтер Питтс преследовали корыстную цель создания первого Искусственного Интеллекта.

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

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

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

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

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

При написании первичного кода объяснять свои действия нужно буквально по пальцам. Если мы работаем, например, с изображениями, то на первом этапе значение для нас будет иметь её размер и класс. Если первая характеристика подскажет нам количество входов, то вторая поможет самой нейросети разобраться с информацией. В идеале, загрузив первичные данные и сопоставив топологию классов, нейросеть далее уже сама сможет классифицировать новую информацию. Допустим, мы решили загрузить изображение 3х5 пикселей. Простая арифметика нам подскажет, что входов будет: 3*5=15. А сама классификация определит общее количество выходов, т.е. нейронов. Другой пример: нейросети необходимо распознать букву “С”. Заданный порог – полное соответствие букве, для этого потребуется один нейрон с количеством входов, равных размеру изображения.

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

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


Бывают и более сложные варианты работы нейросетей с возвратом неверных данных, их анализом и логическими выводами самой сети. Например, онлайн-предсказатель будущего вполне себе запрограммированная нейросеть. Такие проги способны обучаться как с учителем, так и без него, и носят название адаптивного резонанса. Их суть заключается в том, что у нейронов уже есть свои представления об ожидании о том, какую именно информацию они хотят получить и в каком виде. Между ожиданием и реальностью проходит тонкий порог так называемой бдительности нейронов, которая и помогает сети правильно классифицировать поступающую информацию и не упускать ни пикселя. Фишка АР нейросети в том, что учится она самостоятельно с самого начала, самостоятельно определяет порог бдительности нейронов. Что, в свою очередь, играет роль при классифицировании информации: чем бдительнее сеть, тем она дотошнее.

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

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

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

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

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

Хронология

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В ряде нейронных сетей активирующая функция может зависеть не только от весовых коэффициентов связей 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
  • Подборка материалов по нейронным сетям и интеллектуальному анализу
  • противника применения нейронных сетей в прогнозировании цен на акции

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

Что такое нейронная сеть?


Нейронная сеть - это последовательность нейронов, соединенных между собой синапсами. Структура нейронной сети пришла в мир программирования прямиком из биологии. Благодаря такой структуре, машина обретает способность анализировать и даже запоминать различную информацию. Нейронные сети также способны не только анализировать входящую информацию, но и воспроизводить ее из своей памяти. Заинтересовавшимся обязательно к просмотру 2 видео из TED Talks: Видео 1 , Видео 2). Другими словами, нейросеть это машинная интерпретация мозга человека, в котором находятся миллионы нейронов передающих информацию в виде электрических импульсов.

Какие бывают нейронные сети?

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

Для чего нужны нейронные сети?

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

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

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

Распознавание - в настоящее время, самое широкое применение нейронных сетей. Используется в Google, когда вы ищете фото или в камерах телефонов, когда оно определяет положение вашего лица и выделяет его и многое другое.

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

Что такое нейрон?

Нейрон - это вычислительная единица, которая получает информацию, производит над ней простые вычисления и передает ее дальше. Они делятся на три основных типа: входной (синий), скрытый (красный) и выходной (зеленый). Также есть нейрон смещения и контекстный нейрон о которых мы поговорим в следующей статье. В том случае, когда нейросеть состоит из большого количества нейронов, вводят термин слоя. Соответственно, есть входной слой, который получает информацию, n скрытых слоев (обычно их не больше 3), которые ее обрабатывают и выходной слой, который выводит результат. У каждого из нейронов есть 2 основных параметра: входные данные (input data) и выходные данные (output data). В случае входного нейрона: input=output. В остальных, в поле input попадает суммарная информация всех нейронов с предыдущего слоя, после чего, она нормализуется, с помощью функции активации (пока что просто представим ее f(x)) и попадает в поле output.


Важно помнить , что нейроны оперируют числами в диапазоне или [-1,1]. А как же, вы спросите, тогда обрабатывать числа, которые выходят из данного диапазона? На данном этапе, самый простой ответ - это разделить 1 на это число. Этот процесс называется нормализацией, и он очень часто используется в нейронных сетях. Подробнее об этом чуть позже.

Что такое синапс?


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

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

Как работает нейронная сеть?


В данном примере изображена часть нейронной сети, где буквами I обозначены входные нейроны, буквой H - скрытый нейрон, а буквой w - веса. Из формулы видно, что входная информация - это сумма всех входных данных, умноженных на соответствующие им веса. Тогда дадим на вход 1 и 0. Пусть w1=0.4 и w2 = 0.7 Входные данные нейрона Н1 будут следующими: 1*0.4+0*0.7=0.4. Теперь когда у нас есть входные данные, мы можем получить выходные данные, подставив входное значение в функцию активации (подробнее о ней далее). Теперь, когда у нас есть выходные данные, мы передаем их дальше. И так, мы повторяем для всех слоев, пока не дойдем до выходного нейрона. Запустив такую сеть в первый раз мы увидим, что ответ далек от правильно, потому что сеть не натренирована. Чтобы улучшить результаты мы будем ее тренировать. Но прежде чем узнать как это делать, давайте введем несколько терминов и свойств нейронной сети.

Функция активации

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

Линейная функция


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

Сигмоид


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

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


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

Тренировочный сет

Тренировочный сет - это последовательность данных, которыми оперирует нейронная сеть. В нашем случае исключительного или (xor) у нас всего 4 разных исхода то есть у нас будет 4 тренировочных сета: 0xor0=0, 0xor1=1, 1xor0=1,1xor1=0.

Итерация

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

Эпоха

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


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

Ошибка

Ошибка - это процентная величина, отражающая расхождение между ожидаемым и полученным ответами. Ошибка формируется каждую эпоху и должна идти на спад. Если этого не происходит, значит, вы что-то делаете не так. Ошибку можно вычислить разными путями, но мы рассмотрим лишь три основных способа: Mean Squared Error (далее MSE), Root MSE и Arctan. Здесь нет какого-либо ограничения на использование, как в функции активации, и вы вольны выбрать любой метод, который будет приносить вам наилучший результат. Стоит лишь учитывать, что каждый метод считает ошибки по разному. У Arctan, ошибка, почти всегда, будет больше, так как он работает по принципу: чем больше разница, тем больше ошибка. У Root MSE будет наименьшая ошибка, поэтому, чаще всего, используют MSE, которая сохраняет баланс в вычислении ошибки.


Root MSE



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

Задача

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

Данные: I1=1, I2=0, w1=0.45, w2=0.78 ,w3=-0.12 ,w4=0.13 ,w5=1.5 ,w6=-2.3.



Понравилась статья? Поделиться с друзьями: