Хэй друзья недавно вы просили меня
рассказать как создать свою собственную
нейронную сеть 0
поэтому сегодня мы с вами этим и
займемся создадим простейшую нейронную
сеть а именно персептрон и на самом деле
это не так сложно как может показаться
на первый взгляд дело в том что
нейронные сети как таковые базируются на
определенных алгоритмах и математических
функциях здесь можно встретить 7 ду
линейную регрессию градиентный спуск и
много чего еще но как мы знаем чтобы
пользоваться формулами не обязательно
понимать как они работают именно поэтому
на начальных этапах в нейронных сетях
сможет разобраться каждый а в качестве
языка программирования для написания
нашей ней ранки мы будем использовать
python хая если ты хочешь с нуля
научиться нейронным сетям и стать в этом
деле профи и тогда обрати внимание на
специальный курс падает assign сад скилл
factory там тебя научат python для
анализа данных линейной алгебре
матанализу
основам статистики и всему что тебе
может пригодиться дальше большая часть
курса эта практика помещен lernen deep
learning ираном сетям и дайте дженни рен
учитывая насколько сильно сегодня
востребованы такие специалисты это может
стать для тебя отличным шансом войти в
эту сферу ну а ссылку на курс я оставлю
в описании там же будет и промо-код
хауди хо на 10 процентную скидку а
начнем с простого и распространенного
примера допустим у нас есть какая-то
проблема которую наша нейрон к должна
уметь решать во всех учебниках и уроках
по нейрон ком обычно можно встретить вот
эту таблицу здесь вы видите набор
входных и выходных данных можете
попробовать поставить видео на паузу и
вычислить самостоятельно связь между
этими данными хотя здесь нет ничего
сложного я думаю уже видно что в их
одном столбце оказываются значения из
первого столбца входного массива на
данном этапе ваш мозг при помощи своих
нейронных связей синапсов и и кое-чего
еще
уже смог решить данную проблему и
научиться как ее решать впоследствии все
что сейчас произошло у вас в мозгу мы
называем мышлением мозг принял входные
данные увидел выходные вычислил
взаимосвязь и впоследствии научился как
их распознавать причем уже без
необходимости в повторном вычисление
взаимосвязи входных и выходных данных ну
а нам осталось только воспроизвести этот
же процесс в коде чем мы сейчас и
займёмся но сначала давайте наглядно
увидим как будет выглядеть наш
перцептивных нас будут входные данные
будет сам нейрон конечно же результат и
синапсы как уже понятно синапсы это
некая связь между входными данными и тем
что попадет в нейрон соответственно у
нас есть какие-то входные данные
это будут нолики и единицы своего рода
аналог true и false в болевом типе
данных
затем нам понадобится vesa для синапсов
именно они будут выявлять взаимосвязь
между входными данными и результатом
сейчас просто запомните что именно vesa
будут оказывать наибольшую роль в
определении результата нейронам
и чуть позже в коде мы воспользуемся
популярным решением для инициализации
весов в частности веса будут
инициализироваться генератором случайных
чисел и
это довольно важно потому что если бы
был способ найти идеальные начальные
vesa то дальнейшее обучение сети просто
не требовалось бы
и позже я об этом еще покажу и расскажу
в ходе сам подход к обучению нейросети
то есть подразумевает старт с
неправильной позиции в поисках
правильный при этом довольно важен тот
факт что начальные виз они могут быть
полностью одинаковыми иначе они так
одинаковыми в процессе обучения и
останутся ну а раз мы всё равно не знаем
какие должны быть у леса и нельзя делать
их одинаковыми то идея взять случайные
viso в общем случае выглядит очень даже
хорошо и как я уже ранее сказал именно
благодаря весам нейрон будет определять
результат именно vesa синапса выявляют
взаимосвязь между входными данными и и
конечным результатом который будет
считаться решением сам же нейрон
определяет результат при помощи двух
простых действий во первых здесь мы
производим умножение входных данных на
их vesa с последующим сложением
получившихся чисел во вторых
получившийся результат мы скармливаем в
так называемую функцию активатор и
функции активаторов сейчас существует
довольно много учебных целях очень часто
применяют самую простейшую из них
линейную ее еще называют единичный
скачок или жесткая пороговая функция
выглядит в коде она следующим образом мы
еще будем применять более адекватную и
подходящую функцию активатора именно
сигма it
и теперь когда мы понимаем общий принцип
действия давайте перейдем к написанию
кода чтобы более наглядно увидеть
реализацию всего что я только что
рассказал но сначала в python нам нужно
установить модуль нам пай он нам
понадобится для легкой и
высокопроизводительной работы с
многомерными массивами в описании я
оставлю ссылку на репозиторий нам пай в
paypal устанавливается он как и любой
другой модуль в python без каких-либо
проблем теперь в коде начнем с импорта
numb оаэ
а затем объявим функцию сигмой для
реализации нашей функции активатора уже
здесь нам пригождается ну мпа и из него
мы используем метод я xp который нужен
для вычисления экспонента и всех или
мента входного массива но нам это в
принципе неважно как я ранее говорил это
просто формула которую мы применяем и не
обязательно быть математиком чтобы это
делать затем нам нужно объявить
тренировочные данные с этой целью мы
создадим две переменные первое это
тренинг input она будет хранить в себе
массив четыре на три соответствующими
входными данными которые я наглядно
показывал ранее на табличке вторая
переменная это тренинг outputs она
хранит в себе массив 1 на 4 и это наши
ожидаемые выходные данные
также не забываем транспонировать вторую
переменную чтобы ее содержание
поменялось и и было 4 на 1
дальше нам надо инициализировать vesa
ранее я уже говорил что мы будем это
делать при помощи генератора случайных
чисел чтобы и у вас и у меня получались
одинаковые случайные числа
давайте договоримся и укажем сид
генераторов значение 1 ну и сами vesa мы
инициализируем следующим образом у нас
получится массив три на один
именно так мы создадим рандомные виз а
потому что хотим получить из генератора
числа от -1 до 1
это и есть диапазон наших весов иными
словами вес синапса не может быть меньше
минус 1 и не может быть больше 1 на
текущем этапе вам важно понимать то что
весам ее грубо говоря взяли с потолка
это значит что столь важный для нас vesa
синапса выявляющее взаимосвязь между
входными данными и результатом сейчас не
пригодны к использованию а значит мы
должны эту ситуацию как-то исправить я
сейчас говорю о том чтобы провести нашу
нейрон q через так называемый процесс
обучения нейросети
это позволит нам приблизить висока более
верным значением а значит правильно
выявлять взаимосвязь в данное время
существует сразу несколько методов
обучения нейросети
например это знаменитый метод обратного
распространения на английском back pro
повешен
еще есть метод упругого распространения
или же эре silent pro по грешен и
конечно же не забудем про генетические
алгоритмы лежит женить калгари там тем
не менее основу основ обучения всех
нейронов сегодня составляет именно метод
обратного раз про
ранения именно им мы сейчас ее
воспользуемся в коде этот метод будет
выглядеть следующим образом
итак мы помним что верными решениями для
нас являются значения 0 1 1 0 конечно
после 7 до мы никогда не получим такие
значения но и результат после обучения
нашей ней рамки сложно назвать хоть
чем-то у хотя бы близко похожего на то
что нам нужно и происходит это потому
что метод обратного распространения
подразумевает многократное обучения
нейронной сети в ходе которого будет
производиться регулирование в
соответствии с уже известными
алгоритмами выравнивания весов и все это
нужно будет повторить например 20 тысяч
раз в коде этот алгоритм у нас будет
выглядеть следующим образом
если вы хотите более подробно на
математическом уровне узнать о том как
именно устроен данный алгоритм обучения
нейросетей то я в описании оставлю
ссылку на статью которая на русском
языке понятно объясняет как это все
работает но теперь мы запустим код и как
видите после запуска мы получаем
результат больше похожий на правду и по
сути уже сейчас наша нейронная сеть
обучена она сама научилась выявлять
взаимосвязь между входными и выходными
данными давайте проверим как она
справится в какой-то новый для себя
ситуации
допустим передадим ей значение 1 10 как
вы помните в обходных тренировочных
данных такого значения у нас не было в
коде задействовать нашу уже обученную
нейросеть можно также очень просто
запускаем получившееся код и видим
результат наша нейронная сеть прекрасно
справилась и и поняла что очень большая
вероятность того что на выходе должна
быть цифра 1 и то что мы сейчас с вами
запрограммировали
это простейшая нейронная сеть которая
называется персептрон
но даже с такой простой ней ромкой уже
можно решать какие-то более-менее
реальные задачи например в прошлом уроке
по нейрон ком мы с вами делали программу
которая распознавала какой смайлик
нарисовал человек грустной или радостной
и нашу текущую нейрон q можно
использовать чтобы заставить ту про
раму работать точно также правильно
просто как и в том случае входные данные
у нее рамки будут содержать не три
значения
а сразу 625 описывающих пикселей
нарисованного смайлика ссылку на тот
урок я оставлю в описании можете
посмотреть поиграться и попробовать
реализовать ту программу уже на python и
при помощи собственно ручно созданной
нейронной сети а если вам понравился
урок то обязательно поставьте свой
царский лайк не забывайте про подписку и
не забывайте включить колокольчик
уведомлений чтобы не пропускать новые
выпуски я надеюсь урок вам понравился удачи!