Я давно интересовался нейросетями, но только с позиции зрителя – следил за новыми возможностями, которые они дают по сравнению с обычным программированием. Но никогда не лез ни в теорию, ни в практику. И вдруг (после сенсационной новости о AlphaZero) мне захотелось сделать свою нейросеть. Посмотрев несколько уроков по этой теме на YouTube, я немного врубился в теорию и перешёл к практике. В итоге я сделал даже лучше, чем свою нейросеть. Получился конструктор нейросетей и наглядное пособие по ним (то есть можно смотреть, что творится внутри нейросети). Вот как это выглядит:
А теперь немного подробнее. С помощью этого конструктора можно создавать сети прямого распространения (Feedforward neural network) до 8 скрытых слоёв (плюс слой входов и слой выходов, итого 10 слоёв) в каждом слое до 30 нейронов (ограничение связано с тем, что всё это одновременно отображается на экране, если будут просьбы в комментариях выпущу версию без ограничений и визуализации). Функция активации всех нейронов – сигмоид на основе логистической функции. Также можно обучать получившиеся сети методом обратного распространения ошибки градиентным спуском по заданным примерам. И, самое главное, можно посмотреть на каждый нейрон в каждом отдельном случае (какое значение он передаёт дальше, его смещение (поправку, bias) – нейроны с отрицательным смещением белые, с положительным – ярко-зелёные), связи нейронов в зависимости от их веса помечены красным – положительные, синим – отрицательные, а также отличаются по толщине – чем больше модуль веса, тем толще. А если навести мышку на нейрон, то можно ещё посмотреть какой сигнал на него приходит, и какое конкретно у него смещение. Это полезно, чтобы понять, как работает конкретная сеть или показать студентам принцип работы сетей прямого распространения. Но самое главное – свою сеть можно сохранить в файл и поделиться с миром.
Далее будут инструкции по пользованию программой, встраиванию созданных сетей в свои проекты, а также разбор нескольких сетей, идущих в комплекте.
Как пользоваться конструктором
Для начала скачайте архив отсюда.
Распакуйте в корень диска
D:\
Запустите
NeuroNet.exe
Можете попробовать «Загрузить» какую-нибудь сеть, посмотреть на неё, нажать «Обучение», увидеть её точность, потыкать стрелки влево, вправо (по бокам), чтобы посмотреть различные варианты входных (левый столбец нейронов) и выходных (правый) данных, нажать «Стоп» и попробовать ввести свои входные данные (разрешены любые значения от 0 до 1, учитывайте это при создании своих сетей и нормализуйте входные и выходные данные).
Теперь как строить свои сети. Первым делом необходимо задать архитектуру сети (количество нейронов в каждом слое через запятую), нажать «Построить» (или сначала «Снести», затем построить, если у Вас на экране уже отображается другая сеть), нажать «Обучающая выборка», «Удалить всё» и ввести свои обучающие примеры, согласно инструкции на экране. Также можно указать на вход и на выход маленькие квадратные картинки (максимум 5х5 пикселей), из которых будут определены нормализованные значения яркости пикселей (не учитывая их цвет), для чего нужно нажать на «in» и «out» соответственно. Нажать «Добавить пример», повторить процедуру нужное количество раз. Нажать «Готово», «Обучение» и как точность станет удовлетворительной (обычно 98%), нажать «Стоп», иконку в виде дискеты (сохранить), дать сети имя и радоваться, что Вы сами создали нейросеть. Дополнительно можете устанавливать скорость обучения ползунком «Точнее/Быстрее», а также визуализировать не каждый 50й шаг, а каждый 10й или 300й, как Вам угодно.
Интеграция созданных сетей в свои проекты
Чтобы использовать свои нейросети в собственных проектах, я создал отдельное приложение
doNet.exe
, которое нужно запускать с параметрами: «D:\NeuroNet\doNet.exe <название сети> <входные данные через пробел>
», дождаться завершения работы приложения, после чего считать выходные данные из D:\NeuroNet\temp.txt
Для примера создано приложение 4-5.exe, использующее сеть «4-5» (об этой и других сетях ниже). В этом приложении подробно расписано как правильно запускать doNet.exe
Разбор сетей, идущих в комплекте
Начнём с классики – «XOR(Полусумматор)». Среди прочих, в частности, эту задачу – сложение по модулю 2 – в 1969 году приводили в качестве примера ограниченности нейросетей (а именно однослойных перцептронов). В общем, имеется два входа (со значениями либо 0, либо 1 у каждого), наша же задача — ответить 1, если значения входов разные, 0 – если одинаковые.
Далее «Количество-единиц». Три входа (0 либо 1 на каждом). Требуется посчитать, сколько было подано единиц. Реализовано как задача классификации – четыре выхода на каждый вариант ответа (0,1,2,3 единицы). На каком выходе максимальное значение, соответственно таков и ответ.
«Умножение» – Два входа (вещественные от 0 до 1), на выход их произведение.
«4-5» – На вход подаются нормализованные значения яркости пикселей картинки 4х4, на выходе имеем нормализованные значения яркости пикселей картинки 5х5.
Сеть задумывалась, как увеличение качества большой картинки на 25%, вышел же интересный фильтр для фото:
Вот собственно и всё, жду комментариев.
P.S. Если вылезает ошибка, попробуйте зарегистрировать от администратора с помощью regsvr32 файлы comdlg32, которые также есть в архиве.
Комментарии (24)
Kirhgoff
24.03.2018 20:42+1Если вылезает ошибка, попробуйте зарегистрировать от администратора с помощью regsvr32 файлы comdlg32, которые также есть в архиве.
Забавное дежавю. Помню лет 15 назад (а то и больше) читал книжку про COM и там те же манипуляции были, чтобы зарегистрировать компоненты.
smile_artem Автор
24.03.2018 20:44У всех работает? Кто что создал?
spiiin
25.03.2018 00:10+1Если оно для обучения и «пощупать», то выложили бы заодно и исходники. Хотя… оно у вас на Visual Basic?
smile_artem Автор
25.03.2018 09:08да, на 6.0
spiiin
25.03.2018 10:44+1Ну вот смотрите — вы выбрали интересную тему, но судя по вопросам от меня и выше, отбили интерес к программе, тем что:
— нет версии под линукс
— нет версии под веб-браузер
— не запускается под современные ОС без шаманстве (возможно, потому, что vb6.0 вышел в 1998 году, 20 лет назад).
— нет исходников (не каждый захочет запускать чужой exe-файл на своей машине).
Если бы вы использовали, например, python, то ваша программа была бы кросс-платформенной, потенциально запускалась бы в браузере (с помощью jupyter notebook), её можно было бы прочитать перед запуском и выполнить на любой современной ос, кроме того, из-за более популярного языка её вероятнее могли бы покритиковать или улучшить. А так большинство читателей посмотрят картинки, возможно запустят программу на ваших тестовых данных, и закроют навсегда.
Заодно насчёт тестовых данных – одному вам известно, как составлять обучающие выборки и прочие текстовые файлы для программы.smile_artem Автор
25.03.2018 11:41Всё верно, но я в питон не умею. Исходники могу выложить если надо. Насчёт обучающей выборки — в программе написано: Пример верных входных и выходных данных, например, если входные {0.25,0}, а выходные {1,0.01} — пишется как «0.25,0,1,0.01» Каждый такой пример с новой строки в txt-файл или вручную по одному через прогу
gedd
25.03.2018 09:23Можно ли открыть текстбокс для вставки обучающей выборки из буфера обмена и добавить загрузку из тестового файла?
smile_artem Автор
25.03.2018 09:25текстбокс открыт для вставки, снизу же лист бокс (там вставка невозможна), добавил загрузку из текстового файла (*.txt), скачайте архив заново
ev3658
25.03.2018 13:22Ну вот, опять опередили )))))
Кстати, это отличный гуманный вариант для тех, кто хочет сделать революцию во власти!!!
Если этот проект подхватить, то всех чиновников можно превратить в проверщиков связей всех решений нейронного правительства, то-есть создать в стране мощную вычислительную систему на специализированных процессорах военной разработки, всех чиновников послать на переквалификацию и мы избавимся сразу от античеловечности в законе и каждое решение можно будет отследить до самой мелочи, то-есть если повышение пенсии будет нужда, но этому мешает дефицит средств из-за закупки миллиона лампочек для освещения 1 туалета мэрии Москвы, то это будет ясно каждому и тот, кто это внедрил в нейронную сеть (параметр, условие), того накажут и понизят в доступе для модерации этой сети.
Даешь нейронное правительство в XXI веке!!! )))) — сразу решаем несколько проблем:
— передача знаний от одних к другим (достаточно 1 раз обучить и следить за процессами мышления);
— избавляемся от постоянных социальных экспериментов при смене задниц на стульях;
— причину любого отказа или одобрения можно отследить полностью (как в этой теме);
— власть не только для народа, который сейчас не иначе как цифры в статистике, а сбор потребностей индивидуально от и для каждого;
— главная цель нейронной сети: благополучие граждан федерации и бобров и синиц тоже!
— полное отсутствие коррупции;
Ну и тем, кто не сможет перейти из чиновников в нейропрограммистов, те будут заниматься внешней политикой, не давать ей лезть в нашу ))).
Товарищи!!! Да здравствует нейронный социализм!!! Ура!!!
P:S: Автор статьи, догоняй тему!!! Если чего, на PureBasice подсобим )))))smile_artem Автор
25.03.2018 13:29За предложение помощи спасибо, можете перевести исходники на vb6 в PureBasic, чтобы можно было запускать на линухе? А идея нейронного социализма выглядит прекрасно на страницах научной фантастики, но не в реальности 21 века. Может лет через 200 где-то такое и будет. А если Вы серьезно, то это похоже на бред реформаторства — нелепые социальные реформы для блага человечества, недалеко до шизофрении, осторожно.
dim2r
25.03.2018 13:54Есть еще подобный конструктор Neuroph studio.
Я даже делал для своих коллег пошаговую инструкцию, как распознавать пиктограммы 10х10.
goo.gl/dRkzfLsmile_artem Автор
25.03.2018 16:37Огромное спасибо, находка этого конструктора пока-что самое главное чего я достиг после публикации этой статьи
dim2r
26.03.2018 10:16Эта студия с открытыми исходниками. Иногда глючит. Было бы интересно дописать API для этой неё, чтобы можно было и сети строить программно и диалоги вызывать.
smile_artem Автор
27.03.2018 11:29в справке там всё это указано как делать на джаве, только вручную(не программно) созданные сети в Neuroph почему-то из джавы не подгружаются
yzoz
25.03.2018 23:16Присоединяюсь к некоторым предыдущим высказываниям. Это действительно крутая работа! Но мало применима на практике. Людям, интересующимся NN, хочется не только посмотреть их в деле, но и изнутри. И в этом плане Python — золотой стандарт в мире NN. Мне, повезло — я его как раз год потихоньку учил, когда дорвался до NN. Попробуйте TensorFlow — в принципе, там чистое ООП и Питона практически нет, если на несложных примерах. А если Keras, то вообще легкотня. С вашим уже достигнутым пониманием разберётесь на ура быстро. Потом уже сможете попробовать и с нуля что-то написать.
babylon
Для веб браузера есть порт?
Pavlov_dog
Есть что-то похожее — playground.tensorflow.org
smile_artem Автор
для веб нет и не будет, в браузере можете поиграться тут: primat.org/demo/network/network.html#3