Что такое нейросеть и как ее создать

Знакомство с простейшей нейронной сетью и ее пошаговая реализация

Однажды я наткнулся на книгу под названием «Создай свою нейросеть», под авторством Тарика Рашида. В отличие от многих других книг по нейронным сетям, в этой все подавалось простым языком, c достаточным количеством примеров и советов

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

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Теории по машинному обучению и нейронным сетям на хабре и так достаточно. Но если кому-то это необходимо, некоторые ссылки я оставлю в конце статьи. А сейчас, приступаем непосредственно к написанию кода, причем писать мы будем на Python, при написании кода рекомендую использовать Jupyter-Notebook

Шаг 1. Инициализация сети

Сначала нам, конечно же, надо инициализировать все действующие компоненты нашей сети

Сигмоида

Эта функция относится к классу непрерывных функций, принимает на вход произвольное вещественное(т.е не обязательно целое) число и на выходе дает вещественное число в интервале от 0 до 1.

В частности, большие (по модулю) отрицательные числа превращаются в ноль, а большие положительные – в единицу.

Выход ее хорошо интерпретируется, как уровень активации нейрона: от отсутствия активации (0) до полностью насыщенной активации (1).

Сигмоида выражается формулой:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

График сигмоидальной функции в соответствии с рисунком ниже:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Сигмоидальная функция является:

Немного о том, как выглядит узел в нейронной сети

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

На картинке изображен самый, что ни на есть узел, только представлен он обычно в виде круга, а не прямоугольника. Как мы видим, внутри прямоугольника(ну или круга) — это все абстрактно, находятся 2 функции:

1-я Функция занимается тем, что получает все входные, с учетом весов, данные, и иногда даже с учетом нейрона смещения(специальный нейрон, который просто позволяет графикам подвинуться, а не смешиваться в одну некрасивую кучу, вот и все)

Часть 2. Тренировка Нейронной Сети

И вот мы приближаемся к концу

Часть 3. Опрос нейронной сети

Доводим дело до конца

Выше была представлена способная на вычисления, простейшая модель нейронной сети. Но какого-то конкретного применения показано не было.

Ниже вы найдете полезные ссылки:

Источник

Нейронные сети для начинающих. Часть 1

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Привет всем читателям Habrahabr, в этой статье я хочу поделиться с Вами моим опытом в изучении нейронных сетей и, как следствие, их реализации, с помощью языка программирования Java, на платформе Android. Мое знакомство с нейронными сетями произошло, когда вышло приложение Prisma. Оно обрабатывает любую фотографию, с помощью нейронных сетей, и воспроизводит ее с нуля, используя выбранный стиль. Заинтересовавшись этим, я бросился искать статьи и «туториалы», в первую очередь, на Хабре. И к моему великому удивлению, я не нашел ни одну статью, которая четко и поэтапно расписывала алгоритм работы нейронных сетей. Информация была разрознена и в ней отсутствовали ключевые моменты. Также, большинство авторов бросается показывать код на том или ином языке программирования, не прибегая к детальным объяснениям.

Поэтому сейчас, когда я достаточно хорошо освоил нейронные сети и нашел огромное количество информации с разных иностранных порталов, я хотел бы поделиться этим с людьми в серии публикаций, где я соберу всю информацию, которая потребуется вам, если вы только начинаете знакомство с нейронными сетями. В этой статье, я не буду делать сильный акцент на Java и буду объяснять все на примерах, чтобы вы сами смогли перенести это на любой, нужный вам язык программирования. В последующих статьях, я расскажу о своем приложении, написанном под андроид, которое предсказывает движение акций или валюты. Иными словами, всех желающих окунуться в мир нейронных сетей и жаждущих простого и доступного изложения информации или просто тех, кто что-то не понял и хочет подтянуть, добро пожаловать под кат.

Первым и самым важным моим открытием был плейлист американского программиста Джеффа Хитона, в котором он подробно и наглядно разбирает принципы работы нейронных сетей и их классификации. После просмотра этого плейлиста, я решил создать свою нейронную сеть, начав с самого простого примера. Вам наверняка известно, что когда ты только начинаешь учить новый язык, первой твоей программой будет Hello World. Это своего рода традиция. В мире машинного обучения тоже есть свой Hello world и это нейросеть решающая проблему исключающего или(XOR). Таблица исключающего или выглядит следующим образом:

abc
000
011
101
110

Соответственно, нейронная сеть берет на вход два числа и должна на выходе дать другое число — ответ. Теперь о самих нейронных сетях.

Что такое нейронная сеть?

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Нейронная сеть — это последовательность нейронов, соединенных между собой синапсами. Структура нейронной сети пришла в мир программирования прямиком из биологии. Благодаря такой структуре, машина обретает способность анализировать и даже запоминать различную информацию. Нейронные сети также способны не только анализировать входящую информацию, но и воспроизводить ее из своей памяти. Заинтересовавшимся обязательно к просмотру 2 видео из TED Talks: Видео 1, Видео 2). Другими словами, нейросеть это машинная интерпретация мозга человека, в котором находятся миллионы нейронов передающих информацию в виде электрических импульсов.

Какие бывают нейронные сети?

Пока что мы будем рассматривать примеры на самом базовом типе нейронных сетей — это сеть прямого распространения (далее СПР). Также в последующих статьях я введу больше понятий и расскажу вам о рекуррентных нейронных сетях. СПР как вытекает из названия это сеть с последовательным соединением нейронных слоев, в ней информация всегда идет только в одном направлении.

Для чего нужны нейронные сети?

Нейронные сети используются для решения сложных задач, которые требуют аналитических вычислений подобных тем, что делает человеческий мозг. Самыми распространенными применениями нейронных сетей является:

Классификация — распределение данных по параметрам. Например, на вход дается набор людей и нужно решить, кому из них давать кредит, а кому нет. Эту работу может сделать нейронная сеть, анализируя такую информацию как: возраст, платежеспособность, кредитная история и тд.

Предсказание — возможность предсказывать следующий шаг. Например, рост или падение акций, основываясь на ситуации на фондовом рынке.

Распознавание — в настоящее время, самое широкое применение нейронных сетей. Используется в Google, когда вы ищете фото или в камерах телефонов, когда оно определяет положение вашего лица и выделяет его и многое другое.

Теперь, чтобы понять, как же работают нейронные сети, давайте взглянем на ее составляющие и их параметры.

Что такое нейрон?

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Нейрон — это вычислительная единица, которая получает информацию, производит над ней простые вычисления и передает ее дальше. Они делятся на три основных типа: входной (синий), скрытый (красный) и выходной (зеленый). Также есть нейрон смещения и контекстный нейрон о которых мы поговорим в следующей статье. В том случае, когда нейросеть состоит из большого количества нейронов, вводят термин слоя. Соответственно, есть входной слой, который получает информацию, n скрытых слоев (обычно их не больше 3), которые ее обрабатывают и выходной слой, который выводит результат. У каждого из нейронов есть 2 основных параметра: входные данные (input data) и выходные данные (output data). В случае входного нейрона: input=output. В остальных, в поле input попадает суммарная информация всех нейронов с предыдущего слоя, после чего, она нормализуется, с помощью функции активации (пока что просто представим ее f(x)) и попадает в поле output.

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Важно помнить, что нейроны оперируют числами в диапазоне [0,1] или [-1,1]. А как же, вы спросите, тогда обрабатывать числа, которые выходят из данного диапазона? На данном этапе, самый простой ответ — это разделить 1 на это число. Этот процесс называется нормализацией, и он очень часто используется в нейронных сетях. Подробнее об этом чуть позже.

Что такое синапс?

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Синапс это связь между двумя нейронами. У синапсов есть 1 параметр — вес. Благодаря ему, входная информация изменяется, когда передается от одного нейрона к другому. Допустим, есть 3 нейрона, которые передают информацию следующему. Тогда у нас есть 3 веса, соответствующие каждому из этих нейронов. У того нейрона, у которого вес будет больше, та информация и будет доминирующей в следующем нейроне (пример — смешение цветов). На самом деле, совокупность весов нейронной сети или матрица весов — это своеобразный мозг всей системы. Именно благодаря этим весам, входная информация обрабатывается и превращается в результат.

Важно помнить, что во время инициализации нейронной сети, веса расставляются в случайном порядке.

Как работает нейронная сеть?

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

В данном примере изображена часть нейронной сети, где буквами I обозначены входные нейроны, буквой H — скрытый нейрон, а буквой w — веса. Из формулы видно, что входная информация — это сумма всех входных данных, умноженных на соответствующие им веса. Тогда дадим на вход 1 и 0. Пусть w1=0.4 и w2 = 0.7 Входные данные нейрона Н1 будут следующими: 1*0.4+0*0.7=0.4. Теперь когда у нас есть входные данные, мы можем получить выходные данные, подставив входное значение в функцию активации (подробнее о ней далее). Теперь, когда у нас есть выходные данные, мы передаем их дальше. И так, мы повторяем для всех слоев, пока не дойдем до выходного нейрона. Запустив такую сеть в первый раз мы увидим, что ответ далек от правильно, потому что сеть не натренирована. Чтобы улучшить результаты мы будем ее тренировать. Но прежде чем узнать как это делать, давайте введем несколько терминов и свойств нейронной сети.

Функция активации

Функция активации — это способ нормализации входных данных (мы уже говорили об этом ранее). То есть, если на входе у вас будет большое число, пропустив его через функцию активации, вы получите выход в нужном вам диапазоне. Функций активации достаточно много поэтому мы рассмотрим самые основные: Линейная, Сигмоид (Логистическая) и Гиперболический тангенс. Главные их отличия — это диапазон значений.

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Эта функция почти никогда не используется, за исключением случаев, когда нужно протестировать нейронную сеть или передать значение без преобразований.

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Это самая распространенная функция активации, ее диапазон значений [0,1]. Именно на ней показано большинство примеров в сети, также ее иногда называют логистической функцией. Соответственно, если в вашем случае присутствуют отрицательные значения (например, акции могут идти не только вверх, но и вниз), то вам понадобиться функция которая захватывает и отрицательные значения.

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Имеет смысл использовать гиперболический тангенс, только тогда, когда ваши значения могут быть и отрицательными, и положительными, так как диапазон функции [-1,1]. Использовать эту функцию только с положительными значениями нецелесообразно так как это значительно ухудшит результаты вашей нейросети.

Тренировочный сет

Тренировочный сет — это последовательность данных, которыми оперирует нейронная сеть. В нашем случае исключающего или (xor) у нас всего 4 разных исхода то есть у нас будет 4 тренировочных сета: 0xor0=0, 0xor1=1, 1xor0=1,1xor1=0.

Итерация

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

Эпоха

При инициализации нейронной сети эта величина устанавливается в 0 и имеет потолок, задаваемый вручную. Чем больше эпоха, тем лучше натренирована сеть и соответственно, ее результат. Эпоха увеличивается каждый раз, когда мы проходим весь набор тренировочных сетов, в нашем случае, 4 сетов или 4 итераций.

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Важно не путать итерацию с эпохой и понимать последовательность их инкремента. Сначала n
раз увеличивается итерация, а потом уже эпоха и никак не наоборот. Другими словами, нельзя сначала тренировать нейросеть только на одном сете, потом на другом и тд. Нужно тренировать каждый сет один раз за эпоху. Так, вы сможете избежать ошибок в вычислениях.

Ошибка

Ошибка — это процентная величина, отражающая расхождение между ожидаемым и полученным ответами. Ошибка формируется каждую эпоху и должна идти на спад. Если этого не происходит, значит, вы что-то делаете не так. Ошибку можно вычислить разными путями, но мы рассмотрим лишь три основных способа: Mean Squared Error (далее MSE), Root MSE и Arctan. Здесь нет какого-либо ограничения на использование, как в функции активации, и вы вольны выбрать любой метод, который будет приносить вам наилучший результат. Стоит лишь учитывать, что каждый метод считает ошибки по разному. У Arctan, ошибка, почти всегда, будет больше, так как он работает по принципу: чем больше разница, тем больше ошибка. У Root MSE будет наименьшая ошибка, поэтому, чаще всего, используют MSE, которая сохраняет баланс в вычислении ошибки.

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Принцип подсчета ошибки во всех случаях одинаков. За каждый сет, мы считаем ошибку, отняв от идеального ответа, полученный. Далее, либо возводим в квадрат, либо вычисляем квадратный тангенс из этой разности, после чего полученное число делим на количество сетов.

Задача

Теперь, чтобы проверить себя, подсчитайте результат, данной нейронной сети, используя сигмоид, и ее ошибку, используя MSE.

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

H1input = 1*0.45+0*-0.12=0.45
H1output = sigmoid(0.45)=0.61

H2input = 1*0.78+0*0.13=0.78
H2output = sigmoid(0.78)=0.69

O1input = 0.61*1.5+0.69*-2.3=-0.672
O1output = sigmoid(-0.672)=0.33

Результат — 0.33, ошибка — 45%.

Большое спасибо за внимание! Надеюсь, что данная статья смогла помочь вам в изучении нейронных сетей. В следующей статье, я расскажу о нейронах смещения и о том, как тренировать нейронную сеть, используя метод обратного распространения и градиентного спуска.

Источник

Создаём простую нейросеть

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Что мы будем делать? Мы попробуем создать простую и совсем маленькую нейронную сеть, которую мы объясним и научим что-нибудь различать. При этом не будем вдаваться в историю и математические дебри (такую информацию найти очень легко) — вместо этого постараемся объяснить задачу (не факт, что удастся) вам и самим себе рисунками и кодом.

Многие из терминов в нейронных сетях связаны с биологией, поэтому давайте начнем с самого начала:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать
Мозг — штука сложная, но и его можно разделить на несколько основных частей и операций:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Возбудитель может быть и внутренним (например, образ или идея):

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

А теперь взглянем на основные и упрощенные части мозга:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать
Мозг вообще похож на кабельную сеть.

Нейрон — основная единица исчислений в мозге, он получает и обрабатывает химические сигналы других нейронов, и, в зависимости от ряда факторов, либо не делает ничего, либо генерирует электрический импульс, или Потенциал Действия, который затем через синапсы подает сигналы соседним связанным нейронам:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Сны, воспоминания, саморегулируемые движения, рефлексы да и вообще все, что вы думаете или делаете — все происходит благодаря этому процессу: миллионы, или даже миллиарды нейронов работают на разных уровнях и создают связи, которые создают различные параллельные подсистемы и представляют собой биологическую нейронную сеть.

Разумеется, это всё упрощения и обобщения, но благодаря им мы можем описать простую
нейронную сеть:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

И описать её формализовано с помощью графа:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Тут требуются некоторые пояснения. Кружки — это нейроны, а линии — это связи между ними,
и, чтобы не усложнять на этом этапе, взаимосвязи представляют собой прямое передвижение информации слева направо. Первый нейрон в данный момент активен и выделен серым. Также мы присвоили ему число (1 — если он работает, 0 — если нет). Числа между нейронами показывают вес связи.

Графы выше показывают момент времени сети, для более точного отображения, нужно разделить его на временные отрезки:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Для создания своей нейронной сети нужно понимать, как веса влияют на нейроны и как нейроны обучаются. В качестве примера возьмем кролика (тестового кролика) и поставим его в условия классического эксперимента.

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Когда на них направляют безопасную струю воздуха, кролики, как и люди, моргают:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Эту модель поведения можно нарисовать графами:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Как и в предыдущей схеме, эти графы показывают только тот момент, когда кролик чувствует дуновение, и мы таким образом кодируем дуновение как логическое значение. Помимо этого мы вычисляем, срабатывает ли второй нейрон, основываясь на значении веса. Если он равен 1, то сенсорный нейрон срабатывает, мы моргаем; если вес меньше 1, мы не моргаем: у второго нейрона предел — 1.

Введем еще один элемент — безопасный звуковой сигнал:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Мы можем смоделировать заинтересованность кролика так:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Основное отличие в том, что сейчас вес равен нулю, поэтому моргающего кролика мы не получили, ну, пока, по крайней мере. Теперь научим кролика моргать по команде, смешивая
раздражители (звуковой сигнал и дуновение):

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Важно, что эти события происходят в разные временные эпохи, в графах это будет выглядеть так:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Сам по себе звук ничего не делает, но воздушный поток по-прежнему заставляет кролика моргать, и мы показываем это через веса, умноженные на раздражители (красным).

Обучение сложному поведению можно упрощённо выразить как постепенное изменение веса между связанными нейронами с течением времени.

Чтобы обучить кролика, повторим действия:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Для первых трех попыток схемы будут выглядеть так:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Обратите внимание, что вес для звукового раздражителя растет после каждого повтора (выделено красным), это значение сейчас произвольное — мы выбрали 0.30, но число может быть каким угодно, даже отрицательным. После третьего повтора вы не заметите изменения в поведении кролика, но после четвертого повтора произойдет нечто удивительное — поведение изменится.

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Мы убрали воздействие воздухом, но кролик все еще моргает, услышав звуковой сигнал! Объяснить это поведение может наша последняя схемка:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Мы обучили кролика реагировать на звук морганием.

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать
В условиях реального эксперимента такого рода может потребоваться более 60 повторений для достижения результата.

Теперь мы оставим биологический мир мозга и кроликов и попробуем адаптировать всё, что
узнали, для создания искусственной нейросети. Для начала попробуем сделать простую задачу.

Допустим, у нас есть машина с четырьмя кнопками, которая выдает еду при нажатии правильной
кнопки (ну, или энергию, если вы робот). Задача — узнать, какая кнопка выдает вознаграждение:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Мы можем изобразить (схематично), что делает кнопка при нажатии следующим образом:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Такую задачу лучше решать целиком, поэтому давайте посмотрим на все возможные результаты, включая правильный:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать
Нажмите на 3-ю кнопку, чтобы получить свой ужин.

Чтобы воспроизвести нейронную сеть в коде, нам для начала нужно сделать модель или график, с которым можно сопоставить сеть. Вот один подходящий под задачу график, к тому же он хорошо отображает свой биологический аналог:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Эта нейронная сеть просто получает входящую информацию — в данном случае это будет восприятие того, какую кнопку нажали. Далее сеть заменяет входящую информацию на веса и делает вывод на основе добавления слоя. Звучит немного запутанно, но давайте посмотрим, как в нашей модели представлена кнопка:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать
Обратите внимание, что все веса равны 0, поэтому нейронная сеть, как младенец, совершенно пуста, но полностью взаимосвязана.

Таким образом мы сопоставляем внешнее событие с входным слоем нейронной сети и вычисляем значение на ее выходе. Оно может совпадать или не совпадать с реальностью, но это мы пока проигнорируем и начнем описывать задачу понятным компьютеру способом. Начнем с ввода весов (будем использовать JavaScript):

Следующий шаг — создание функции, которая собирает входные значения и веса и рассчитывает значение на выходе:

Как и ожидалось, если мы запустим этот код, то получим такой же результат, как в нашей модели или графике…

Следующим шагом в усовершенствовании нашей нейросети будет способ проверки её собственных выходных или результирующих значений сопоставимо реальной ситуации,
давайте сначала закодируем эту конкретную реальность в переменную:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Чтобы обнаружить несоответствия (и сколько их), мы добавим функцию ошибки:

С ней мы можем оценивать работу нашей нейронной сети:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Но что более важно — как насчет ситуаций, когда реальность дает положительный результат?

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Теперь мы знаем, что наша модель нейронной сети не работает (и знаем, насколько), здорово! А здорово это потому, что теперь мы можем использовать функцию ошибки для управления нашим обучением. Но всё это обретет смысл в том случае, если мы переопределим функцию ошибок следующим образом:

Неуловимое, но такое важное расхождение, молчаливо показывающее, что мы будем
использовать ранее полученные результаты для сопоставления с будущими действиями
(и для обучения, как мы потом увидим). Это существует и в реальной жизни, полной
повторяющихся паттернов, поэтому оно может стать эволюционной стратегией (ну, в
большинстве случаев).

Далее в наш пример кода мы добавим новую переменную:

Подведем промежуточный итог. Мы начали с задачи, сделали её простую модель в виде биологической нейронной сети и получили способ измерения её производительности по сравнению с реальностью или желаемым результатом. Теперь нам нужно найти способ исправления несоответствия — процесс, который как и для компьютеров, так и для людей можно рассматривать как обучение.

Как обучать нейронную сеть?

Основа обучения как биологической, так и искусственной нейронной сети — это повторение
и алгоритмы обучения, поэтому мы будем работать с ними по отдельности. Начнем с
обучающих алгоритмов.

В природе под алгоритмами обучения понимаются изменения физических или химических
характеристик нейронов после проведения экспериментов:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Драматическая иллюстрация того, как два нейрона меняются по прошествии времени в коде и нашей модели «алгоритм обучения» означает, что мы просто будем что-то менять в течение какого-то времени, чтобы облегчить свою жизнь. Поэтому давайте добавим переменную для обозначения степени облегчения жизни:

Это изменит веса (прям как у кролика!), особенно вес вывода, который мы хотим получить:

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Как кодировать такой алгоритм — ваш выбор, я для простоты добавляю коэффициент обучения к весу, вот он в виде функции:

При использовании эта обучающая функция просто добавит наш коэффициент обучения к вектору веса активного нейрона, до и после круга обучения (или повтора) результаты будут такими:

Окей, теперь, когда мы движемся в верном направлении, последней деталью этой головоломки будет внедрение повторов.

Это не так уж и сложно, в природе мы просто делаем одно и то же снова и снова, а в коде мы просто указываем количество повторов:

И внедрение в нашу обучающую нейросеть функции количества повторов будет выглядеть так:

Ну и наш окончательный отчет:

Теперь у нас есть вектор веса, который даст только один результат (курицу на ужин), если входной вектор соответствует реальности (нажатие на третью кнопку).

Так что же такое классное мы только что сделали?

В этом конкретном случае наша нейронная сеть (после обучения) может распознавать входные данные и говорить, что приведет к желаемому результату (нам всё равно нужно будет программировать конкретные ситуации):

Что такое нейросеть и как ее создать. Смотреть фото Что такое нейросеть и как ее создать. Смотреть картинку Что такое нейросеть и как ее создать. Картинка про Что такое нейросеть и как ее создать. Фото Что такое нейросеть и как ее создать

Кроме того, это масштабируемая модель, игрушка и инструмент для нашего с вами обучения. Мы смогли узнать что-то новое о машинном обучении, нейронных сетях и искусственном интеллекте.

Заметки и список литературы для дальнейшего чтения

Я пытался избежать математики и строгих терминов, но если вам интересно, то мы построили перцептрон, который определяется как алгоритм контролируемого обучения (обучение с учителем) двойных классификаторов — тяжелая штука.

Биологическое строение мозга — тема не простая, отчасти из-за неточности, отчасти из-за его сложности. Лучше начинать с Neuroscience (Purves) и Cognitive Neuroscience (Gazzaniga). Я изменил и адаптировал пример с кроликом из Gateway to Memory (Gluck), которая также является прекрасным проводником в мир графов.

Еще один шикарный ресурс An Introduction to Neural Networks (Gurney), подойдет для всех ваших нужд, связанных с ИИ.

А теперь на Python! Спасибо Илье Андшмидту за предоставленную версию на Python:

А теперь на GO! За эту версию благодарю Кирана Мэхера.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *