Я давно интересовался нейросетями, но только с позиции зрителя – следил за новыми возможностями, которые они дают по сравнению с обычным программированием. Но никогда не лез ни в теорию, ни в практику. И вдруг (после сенсационной новости о 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)


  1. babylon
    24.03.2018 16:18

    Для веб браузера есть порт?


    1. Pavlov_dog
      24.03.2018 18:11
      +1

      Есть что-то похожее — playground.tensorflow.org


    1. smile_artem Автор
      24.03.2018 19:09

      для веб нет и не будет, в браузере можете поиграться тут: primat.org/demo/network/network.html#3


  1. SlavikMIPT
    24.03.2018 20:20

    Красава, как раз не хватало объяснять новичкам


  1. DrAndyHunter
    24.03.2018 20:41

    А для linux не будет приложения?


    1. smile_artem Автор
      24.03.2018 20:42

      юзайте wine


  1. Kirhgoff
    24.03.2018 20:42
    +1

    Если вылезает ошибка, попробуйте зарегистрировать от администратора с помощью regsvr32 файлы comdlg32, которые также есть в архиве.

    Забавное дежавю. Помню лет 15 назад (а то и больше) читал книжку про COM и там те же манипуляции были, чтобы зарегистрировать компоненты.


  1. smile_artem Автор
    24.03.2018 20:44

    У всех работает? Кто что создал?


    1. Zam_dev
      26.03.2018 16:29

      У меня одного пишет Trojan:Win32/Fuerboos.C!cl? (win10 defender)


      1. smile_artem Автор
        27.03.2018 11:33
        -1

        хз, image, вредоносным кодом не увлекаюсь


  1. spiiin
    25.03.2018 00:10
    +1

    Если оно для обучения и «пощупать», то выложили бы заодно и исходники. Хотя… оно у вас на Visual Basic?


    1. smile_artem Автор
      25.03.2018 09:08

      да, на 6.0


      1. spiiin
        25.03.2018 10:44
        +1

        Ну вот смотрите — вы выбрали интересную тему, но судя по вопросам от меня и выше, отбили интерес к программе, тем что:
        — нет версии под линукс
        — нет версии под веб-браузер
        — не запускается под современные ОС без шаманстве (возможно, потому, что vb6.0 вышел в 1998 году, 20 лет назад).
        — нет исходников (не каждый захочет запускать чужой exe-файл на своей машине).

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

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


        1. smile_artem Автор
          25.03.2018 11:41

          Всё верно, но я в питон не умею. Исходники могу выложить если надо. Насчёт обучающей выборки — в программе написано: Пример верных входных и выходных данных, например, если входные {0.25,0}, а выходные {1,0.01} — пишется как «0.25,0,1,0.01» Каждый такой пример с новой строки в txt-файл или вручную по одному через прогу


          1. smile_artem Автор
            25.03.2018 12:06

            Кто готов перевести исходники на питон отписывайтесь


  1. gedd
    25.03.2018 09:23

    Можно ли открыть текстбокс для вставки обучающей выборки из буфера обмена и добавить загрузку из тестового файла?


    1. smile_artem Автор
      25.03.2018 09:25

      текстбокс открыт для вставки, снизу же лист бокс (там вставка невозможна), добавил загрузку из текстового файла (*.txt), скачайте архив заново


  1. ev3658
    25.03.2018 13:22

    Ну вот, опять опередили )))))
    Кстати, это отличный гуманный вариант для тех, кто хочет сделать революцию во власти!!!
    Если этот проект подхватить, то всех чиновников можно превратить в проверщиков связей всех решений нейронного правительства, то-есть создать в стране мощную вычислительную систему на специализированных процессорах военной разработки, всех чиновников послать на переквалификацию и мы избавимся сразу от античеловечности в законе и каждое решение можно будет отследить до самой мелочи, то-есть если повышение пенсии будет нужда, но этому мешает дефицит средств из-за закупки миллиона лампочек для освещения 1 туалета мэрии Москвы, то это будет ясно каждому и тот, кто это внедрил в нейронную сеть (параметр, условие), того накажут и понизят в доступе для модерации этой сети.
    Даешь нейронное правительство в XXI веке!!! )))) — сразу решаем несколько проблем:
    — передача знаний от одних к другим (достаточно 1 раз обучить и следить за процессами мышления);
    — избавляемся от постоянных социальных экспериментов при смене задниц на стульях;
    — причину любого отказа или одобрения можно отследить полностью (как в этой теме);
    — власть не только для народа, который сейчас не иначе как цифры в статистике, а сбор потребностей индивидуально от и для каждого;
    — главная цель нейронной сети: благополучие граждан федерации и бобров и синиц тоже!
    — полное отсутствие коррупции;
    Ну и тем, кто не сможет перейти из чиновников в нейропрограммистов, те будут заниматься внешней политикой, не давать ей лезть в нашу ))).
    Товарищи!!! Да здравствует нейронный социализм!!! Ура!!!
    P:S: Автор статьи, догоняй тему!!! Если чего, на PureBasice подсобим )))))


    1. smile_artem Автор
      25.03.2018 13:29

      За предложение помощи спасибо, можете перевести исходники на vb6 в PureBasic, чтобы можно было запускать на линухе? А идея нейронного социализма выглядит прекрасно на страницах научной фантастики, но не в реальности 21 века. Может лет через 200 где-то такое и будет. А если Вы серьезно, то это похоже на бред реформаторства — нелепые социальные реформы для блага человечества, недалеко до шизофрении, осторожно.


  1. dim2r
    25.03.2018 13:54

    Есть еще подобный конструктор Neuroph studio.
    Я даже делал для своих коллег пошаговую инструкцию, как распознавать пиктограммы 10х10.
    goo.gl/dRkzfL


    1. smile_artem Автор
      25.03.2018 16:37

      Огромное спасибо, находка этого конструктора пока-что самое главное чего я достиг после публикации этой статьи


      1. dim2r
        26.03.2018 10:16

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


        1. smile_artem Автор
          27.03.2018 11:29

          в справке там всё это указано как делать на джаве, только вручную(не программно) созданные сети в Neuroph почему-то из джавы не подгружаются


  1. yzoz
    25.03.2018 23:16

    Присоединяюсь к некоторым предыдущим высказываниям. Это действительно крутая работа! Но мало применима на практике. Людям, интересующимся NN, хочется не только посмотреть их в деле, но и изнутри. И в этом плане Python — золотой стандарт в мире NN. Мне, повезло — я его как раз год потихоньку учил, когда дорвался до NN. Попробуйте TensorFlow — в принципе, там чистое ООП и Питона практически нет, если на несложных примерах. А если Keras, то вообще легкотня. С вашим уже достигнутым пониманием разберётесь на ура быстро. Потом уже сможете попробовать и с нуля что-то написать.