Содержание статьи
Нейронные сети на Python: как всё устроено
Принцип работы машинного обучения
Рассмотрим пример создания спам-детектора. Вы можете создать его, основываясь на интуиции и вручную подбирая правила его работы. Например, «содержит слово подарок» или «имеет слово деньги». Такая система может функционировать. Однако подобрать верные шаблоны и создать успешно работающий детектор, основываясь лишь на интуиции, очень сложно.
Все, что сейчас произошло у вас в мозгу, мы называем мышлением. Мозг принял входные данные, увидел выходные, вычислил взаимосвязь и впоследствии научился контролировать как их распознавать? Причем уже без необходимости в повторном вычислении взаимосвязи входных и выходных данных. Ну а нам осталось только воспроизвести этот же процесс в коде, чем мы сейчас и займемся. Но сначала давайте наглядно увидим, как будет выглядеть наш перцептрон. У нас будут входные данные, будет сам нейрон, конечно же результат и синапсы. Как уже понятно, синапсы это некая связь между . входными данными и тем, что попадет в нейрон. Соответственно, у нас есть какие-то входные данные, это будут нолики и единицы, своего рода аналог true и false в булевом типе данных.
Одна из разновидностей машинного обучения – обучение с учителем. Его суть заключается в том, что систему «тренируют». На первом этапе ей предлагают множество примеров определенной проблемы и желаемый вывод, таким образом, ее учат понимать прошлые данные. На втором этапе, когда система натренирована, ей предоставляют новые входные данные с целью самостоятельного предсказания выводов.
Никто не запрещает писать на других языках, но это будет дольше, сложнее, потребуется куда больше знаний, что, порой, нецелесообразно. И все же, даже используя Python, нужно иметь хотя бы базовое представление о том, как устроены нейросети. Из нашего материала вы узнаете, как это работает, почему именно Python и где можно обучиться этому языку.
Из него мы используем метод exp, который нужен для вычисления экспонента и всех элементов входного массива. Но нам это в принципе не важно. Как я ранее говорил, это просто формула, которую мы применяем. И не обязательно быть математиком, чтобы это делать. Затем нам нужно объявить тренировочные данные. С этой целью мы создадим две переменные. Первая это training inputs. Она будет хранить в себе массив 4 на 3 с соответствующими входными данными, которые я наглядно . показывал ранее на табличке.
Человеческий мозг состоит из более ста миллиардов клеток-нейронов. Место контакта двух нейронов – синапс. Он служит для передачи нервных импульсов от одной клетки к другой. Когда через него к нейрону придет достаточное количество импульсов, тогда нейрон передаст их дальше. Так строится наше мышление.
Причины выбора Python для программирования нейронных сетей
Гибкость. Нейросети – преимущественно небольшие программы, но при этом существует необходимость часто изменять их, подбирая наилучшую архитектуру, предобработку данных и другие параметры. Поэтому трудности с легаси-кодом практически отсутствуют, но есть потребность в быстрой разработке. Создание и построение нейронных сетей на Python – вариант, удовлетворяющий этим требованиям лучше, чем использование C++ или Java. Фреймворки для машинного обучения – это фронтенд на Python или Torch и бэкендом на C++, чаще всего.
В учебных целях очень часто применяют самую простейшую из них, линейную. Ее еще называют единичный скачок или жесткая пороговая функция. Выглядит в коде она следующим образом. Мы же будем применять более адекватную и подходящую функцию активатора, а именно сигмоид.
Вторая переменная это Training Outputs. Она хранит в себе массив 1 на 4, и это наши ожидаемые выходные данные. Также не забываем транспонировать вторую переменную, чтобы ее содержание поменялось и было 4 на 1. Дальше нам надо инициализировать веса. Ранее я уже говорил, что мы будем это делать при помощи генератора случайных чисел. Чтобы и у вас, и у меня получались одинаковые случайные числа, давайте договоримся и укажем сид генератора в значении 1.
Затем нам понадобится веса для синапсов. Именно они будут выявлять взаимосвязь между входными данными и результатом. Сейчас просто запомните, что именно веса будут оказывать наибольшую роль в определении результата и чуть позже в коде мы воспользуемся популярным решением для инициализации весов. В частности, веса будут инициализироваться генератором случайных чисел. Это довольно важно, потому что если бы был способ найти идеальные начальные веса, то дальнейшее обучение сети просто не требовалось бы.
Иными словами, вес синопса не может быть меньше минус 1 и не может быть больше 1. На текущем этапе вам важно понимать то, что веса мы, грубо говоря, взяли с потолка. Это значит, что столь важные для нас веса синапса, выявляющие взаимосвязь между входными данными и результатом, сейчас непригодны к использованию. А значит, мы должны эту ситуацию как-то исправить. Я сейчас говорю о том, чтобы провести нашу нейронку через так называемый процесс обучения нейросети. Это позволит нам приблизить веса к более верным значениям, а значит, правильно выявлять взаимосвязь. В данное время существуется сразу несколько методов обучения нейросети. Например, это знаменитый метод обратного распространения, на английском Backpropagation. Еще есть метод упругого распространения, или же Resilient Propagation.
Наиболее распространенным языком программирования для искусственных нейросетей является Python. Почему именно нейронные сети на Python получили такую популярность, несмотря на наличие множества других языков программирования? IT-специалисты часто сходятся во мнении, отвечая на этот вопрос, и выделают несколько причин.