Часть 1

Введение


«Нейросеть» – понятие, известное достаточно давно. В начале двухтысячных, во время учёбы в ВУЗе, я столкнулся с этой любопытной штуковиной. Прочитав научно-популярную литературу по этой теме, я сделал вывод, что это, как минимум, «забавно» и у меня возникла симпатия. И, главным образом, потому, что нейросеть – это «младший брат» нашего человеческого разума.
До 2019 года эти штуковины представлялись мне не более чем просто забавными игрушками, но на фоне вновь возникшего огромного интереса к этой теме, я решил «приглядеться» к ним получше. Скажу сразу, тема распознавания образов никогда меня особо не занимала, да, есть набор «весёлых картинок», нужно что-то определить, или распознать буковки. — Ну и что?!

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

image

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

Задача


Да, но вопрос, какую задачу брать, чтобы она не оказалась слишком сложной в качестве учебной?! Думал я думал и надумал(!) – индекс массы тела (ИМТ). А что?! – Формула известна, она достаточно простая и данных для обучения можно сформировать кучу. – Решено!
В качестве первой нейросети я решил взять перцептрон – искусственный нейрон, на входы которого подаются рост и вес, а на выходе мы получаем предсказанный нейросетью ИМТ.

image

В качестве среды для работы я решил выбрать MS Excel — в нём очень удобно создавать таблицы и работать с ними, а в качестве средства разработки – язык VBA. Первое, что нужно создать – вкладку инициализации нейросети – вкладку весовых коэффициентов, я назвал её «Нейросеть». На этой вкладке будут отображаться весовые коэффициенты, а так же, здесь они будут сохраняться в процессе обучения нейросети (НС).

image

Вторая вкладка – на которой будут храниться эталонные данные. Я назвал её «Обучение». Здесь же мы будем контролировать процесс обучения нашей НС.

image

Ну и третья вкладка – «Данные», здесь, собственно, будет происходить всё полезное действо.

image

Процедуры


Для работы с НС нам понадобятся следующие процедуры (они оформелены в виде макрокоманд со своими горячими клавишами запуска):

Ctrl + I (Initialise) – инициализация весов W1 и W2 НС случайными значениями;
Ctrl + R (pRepare) – подготовка эталонных данных;
Ctrl + T (Teach) – обучение НС;
Ctrl + E (Execute) – выполнение оценки ИМТ у набора данных.

Инициализация нейросети


Сначала проинициализируем наши весовые коэффициенты случайными значениями в диапазоне от 0 до 1 (не включительно). Это делает простенькая процедура на VBA.

image

Формирование эталонных значений


Поскольку точная формула вычисления ИМТ известна, переходим к формированию эталонных данных.

image

Данные будут формироваться на вкладки «Данные» (я задал 100 значений). Позднее мы выберем часть этих данных в качестве обучающей выборки и скопируем на вкладку «Обучение». За формирование данных отвечает процедура prepare(). Теперь можно переходить к вкладке «Обучение», но об этом во второй части статьи.

image

Конец первой части.

P.S. Я не стал писать длинную статью, дабы информации не было слишком много и фокус внимания читателя не рассеивался.

Комментарии (8)


  1. vdem
    31.05.2019 18:10
    +9

    А все-таки следовало бы полную статью написать, так как в этой — почти ноль информации.


  1. Dim0v
    31.05.2019 19:04
    +9

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


  1. Ermit
    31.05.2019 22:16
    +1

    Полагаю, полученная нейросеть будет решать задачу линейной регрессии… )))


  1. YuraLia
    31.05.2019 22:36
    +2

    Я правильно понял, что автор хочет нелинейную функцию двух переменных f(x,y)=x/y^2, апроксимировать линейной g(x,y)=ax+by? Или как? Есть там какая то нелинейность в «нейроне»? Тангенс? Сигмоида?


  1. Vinchi
    01.06.2019 14:19
    +1

    Автор не пиши про то чего не понимаешь.


  1. GBK
    01.06.2019 16:46

    Я конечно извеняюсь, но намного удобнее Excel и VBA есть Python!


  1. Newton2
    01.06.2019 19:52

    Вот бы так доброжелательно относились ко всем авторам…


  1. Cnhedt
    03.06.2019 05:42

    Завидую автору в плане: Как здорово, столько перспектив… Когда то мне препод в далеком 1995-м предложил заняться нейросетями, ИИ и т.п. Было заманчиво, но потом, прикинул, стало страшно, когда представил себе последствия. Сейчас уже этим не удивишь особо, человечество, экспоненциально увеличивающее количество информации уже не способно ее переварить… Остается доверить ее обработку машинам и ИИ. К чему это приведет? А если сам ИИ начнет генерить информацию и пичкать ею нас? Что то понесло меня не туда, походу нельзя рано утром на Хабр лезть :)