Автоматизированная программа построения нейронных сетей. Изучаем нейронные сети за четыре шага. Что такое нейронные сети


Проголосовали за программу: 91 средняя оценка: 1098903,2
Опубликована в сборнике программ: 17.07.2010 г.

Операционная система: Windows ALL
Размер программы (дистрибутива): 20 KB
Тип лицензии: Shareware


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

# 2. количество нейронов в выходном слое

# 3. количество скрытых слоев и количество нейронов в каждом из них.

# 4. вид активационной функции

# 5. скорость обучение

# 6. крутизна сигмоида

# 7. количество эпох

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

При добавление программы, в каталог нашего сайта, ссылка на Нейронная сеть 2.4.2, проверялась антивирусом, но так как файл находится на сервере разработчика или издателя софта, он может быть изменён, мы рекомендуем перед загрузкой программного обеспечения к себе на компьютер, проверять файлы в режиме On-Line антивирусом - откроется в новом окне и будет проверена!

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

Что такое нейронные сети

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

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

Как они устроены и зачем нужны

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

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

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

7 самых забавных применений нейронных сетей

Норвежский программист Ларс Эйднес решил добавить компьютеру творческую искру. Для начала он нейронную сеть писать броские интернет-заголовки в духе «Семь секретов долголетия, о которых молчат тибетские ламы». Для этого он загрузил примерно 2 млн примеров с сайтов - корифеев жанра: BuzzFeed, Gawker, Jezebel, The Huffington Post и Upworthy. После тренировки сеть стала выдавать заголовки, в большинстве из которых была верная грамматика, а кое-где даже мелькал смысл. Потом Эйднес запустил , целиком написанный нейронными сетями. Новые заметки на нем выходят раз в 20 минут, а главная страница формируется исходя из просмотров статей и голосов читателей. Сегодня Click-o-Tron передает, что Джеймс Кэмерон защищает возможные проблемы с геями, Майли Сайрус исполнилось 13 лет, и вдобавок предлагает почитать о 16 самых подходящих городах для ресторана на кухне.

Что-то подобное проделал и журналист технологического сайта Engadget Аарон Суппурис. Он бота на основе той же нейронной сети, что была у Эйднеса, и загрузил туда тексты Engadget. К третьей версии бот научился копировать стилистику авторов сайта и выдавал более-менее вразумительные заметки. Правда, Суппурис полагает, что без чудесных инноваций нейронные сети никогда не заменят живого журналиста, зато пригодятся как удобный вспомогательный инструмент.

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

Нейроэпигон Егора Летова

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

Сначала Тихонов придумал бота-подражателя, сочинявшего в духе Хармса и Пушкина, - друзьям захотелось что-нибудь сделать с этим творчеством, и они загрузили в сеть поэзию любимого певца, Егора Летова, получили стилистически выверенные куплеты, а потом спели их под гитару и драм-машину. Альбом под названием «404» , . Судя по оценкам, поклонники остались довольны.


Если нейронная сеть может писать, то ей не обязательно быть журналистом, Э.Л.Джеймс или Уильямом Шекспиром. Так рассудил аспирант из университета Алабамы и в сеть все известные карты из настольной игры Magic: The Gathering. Компьютер их обработал и принялся выдумывать собственные. Многие из карт получились бесполезными, другие - незаконченными (например, указано действие, но без условий применения). Впрочем, со временем сеть наловчилась и немного исправилась.

Вскоре о проекте узнал пользователь Reddit под псевдонимом Scfdivine. Он повторил эксперимент, но с картами из похожей . Карт в результате получилось меньше, и большинство из них нарушало баланс игры. Хотя некоторые эксперты сошлись во мнении, что у сети была слишком маленькая выборка (Hearthstone появилась сравнительно недавно), а компьютеру недоставало мощности - иначе опыт был бы удачнее.


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

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


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

Видео-Prisma

Еще недавно соцсети наводняли однотипные фотографии, стилизованные под картины великих художников с помощью приложения Prisma. Обработанные кадры выглядели свежо, но сама идея . Еще прошлым летом ученые из Тюбингенского университета опубликовали работу «Нейроалгоритм художественного стиля», в которой изложили свой метод преобразования изображения в стилистике другой картинки. Упомянутый выше норвежец Эйднес технологию к видео. Для этого ему пришлось обхитрить нейросеть, чтобы та обрабатывала соседние кадры не по отдельности и произвольно, а похожим образом. Эйднес написал код для измерения оптического потока между кадрами - ему удалось определить, как движутся снятые объекты, а нейросеть учитывала смещение при перерисовке. Для теста был выбран клип группы The xx на песню Islands: теперь в нем угадываются и Поллок, и Матисс, и роспись с античных амфор. Правда, поиграться с программой получится не скоро: даже на мощном железе один кадр обрабатывается целых три минуты.

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

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

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

Иерархия классов

Существует три базовых класса TNeuron, TLayer, TNeuralNet. Все остальные являются производными от них. На рис.1 приведена иерархия классов, сплошными линиями показано наследование (стрелкой указан потомок), пунктирными в каких классах они используются.

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

TNeuronHopf , потомок TNeuron, реализует нейрон используемый в нейронной сети Хопфилда, единственным отличием от базового класса, является использования активационной функции в перекрытом методе ComputeOut.

Следующим порожденным классом, является TNeuronBP служащий для программной реализации многослойных нейронных сетей. Аббревиатура BP в имени класса не должна вводить вас в заблуждение, что нейрон этого типа используется исключительно в сетях обучаемых по алгоритму обратного распространения, этим, мы лишний раз хотели подчеркнуть, что в нашем случае нейронная сеть обучается по этому алгоритму.
Переписан метод ComputeOut, использующий теперь нелинейную активационную функцию, которая реализована в виде индексированного свойства процедурного типа OnActivationF. Кроме того, добавлены два важных свойства, Delta – содержащая локальную ошибку и индексированное свойство PrevUpdate – содержащее величину коррекции весовых коэффициентов на предыдущем шаге обучения сети.

Основным назначением базового класса TLayer и его потомков TLayerHopf и TLayerBP является объединение нейронов в слой, для упрощения работы с нейронами.

Компонент TNeuralNet базовый компонент для всех видов нейронных сетей. TNeuralNet обеспечивает необходимую функциональность производных компонентов. Этот компонент поддерживает методы для работы со слоями сети (AddLayer, DeleteLayer) и методы для манипуляций с исходными данными (AddPattern, DeletePattern, ResetPatterns). Метод Init служит для построения нейронной сети. Большинство методов объявленных в разделе public в базовом компоненте и его потомках – виртуальные, что позволяет легко перекрывать их.
Компонент TNeuralNetHopf реализует нейронную сеть Хопфилда.

Дополнительно включены следующие методы: InitWeights – запоминает предъявленные образцы в матрице образов и метод Calc – вычисляет выход сети Хопфилда.

Компонент TNeuralNetBP реализует многослойную нейронную сеть обучаемую по алгоритму обратного распространения ошибки.

Дополнительно включены следующие методы: Compute – вычисляет выход нейронной сети, используется после обучения сети; TeachOffLine – обучает нейронную сеть. Компонент позволяет в режиме design-time, в окне Object Inspector, конструировать нейронную сеть добавляя или удаляя слои и нейроны в сети. Для этого используется редактор свойств NeuronsInLayer, имеющий следующий вид:

Совместимость с Neural Network Wizard

Следующим компонентом является TNeuralNetExtented порожденный от TNeuralNetBP, который обеспечивает полную совместимость с Neural Network Wizard. Дополнительно включены следующие методы: для записи (LoadPhase1, LoadPhase2, LoadPhase4, LoadNetwork) и чтения (SavePhase1, SavePhase2, SavePhase4, SaveNetwork) обученной нейронной сети в формате *.nnw; LoadDataFrom – загружает данные из текстового файла, а также метод NormalizeData нормализации входных и выходных данных; Train – для обучения нейронной сети; ComputeUnPrepData – для вычисления выхода сети, используется в том случае, если у вас входные значения ненормализованы.

Компонент позволяет в режиме design-time, в окне Object Inspector, выбирать нужные поля, а также задавать тип нормализации полей. Для этих целей используется редактор свойств, имеющий следующий вид:

Компонент TNeuralNetExtented один из самых мощных в библиотеке NeuralBase. Используя этот компонент, практически за считанные минуты можете получить готовое полнофункциональное приложение.

Демонстрационные программы

В качестве демонстрационных примеров приведены три программы, показывающие возможности предложенных компонентов.

Программа Recognition используя компонент TNeuralNetHopf , реализует нейронную сеть Хопфилда. Программа решает задачу распознавания образов. На вход сети подается некий образ, возможно искаженный или неполный и нейронная сеть восстанавливает образ, т.е. относит предъявляемый образ к одному из хранимых сетью образов, либо в случае неудачи, выдает новый образ, иногда называемый "химерой".

Программа XOR_Problem , реализует функцию "исключающее или", которая является стандартным тестом, после знаменитой работы Минского и Пейперта "Перцептроны". В основе программы лежит компонент TNeuralNetBP.

Программа EasyNNW , использующая компонент TNeuralNetExtented представляет собой аналог программы , единственным отличием от NNW является несколько "облегченный" интерфейс. Данный пример показывает, насколько легко и быстро, создаются программы реализующие нейронные сети с достаточно хорошей функциональностью на основе библиотеки компонентов NeuralBase.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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