Создано нейросетью что значит

Нейронные сети для начинающих. Часть 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%.

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

Источник

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

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

Содержание

Содержание

Человеческий мозг — восхитительное устройство. Он вдохновляет современных исследователей, которые создают искусственные нейроны, словно ученики скульптора, копирующие бюст Сократа. И результат тому — искусственная нейронная сеть (ИНС), одно из самых обсуждаемых явлений современности.

Почему нейронная, почему сеть

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

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

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

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

Кому это выгодно

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

Нейросети для развлечений

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

Нейросети знают многое о человеческих лицах: по фотографии они могут определить возраст, пол, настроение, спрогнозировать, как лицо будет выглядеть в старости, анимировать статическое изображение, заставив Барака Обаму говорить то, что он не говорил, и оживить знаменитую Мону Лизу. По фотографии теперь можно найти человека, а китайские нейросети Megvii даже ищут собак по изображению носа. Причем ИНС работает не только с изображениями, но и со звуком. Массачусетский технологический институт недавно представил нейросеть (Speech2Face), определяющую национальность, пол и возраст человека по голосу.

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

Нейросети на службе правительства

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

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

Уже есть несколько примеров проектов внедрения искусственных нейронных сетей в России. В ГИБДД хотят научить нейросеть обнаруживать факт кражи автомобильных номеров. По изображению автомобиля ИНС сможет установить, соответствует ли машина своему номеру. Это поможет своевременно выявлять подделку или кражу номеров. Руководитель Департамента транспорта Москвы Максим Ликсутов подтвердил, что данная программа сейчас проходит тестирование.

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

Нейросети и бизнес

Нейросети — настоящий подарок для бизнеса и горе для работников. Мы живем в эпоху, когда данные имеют огромную ценность. Поверьте, мировые корпорации уже проанализировали ваш профиль в соцсетях и предоставляют вам персонализированную рекламу. Только представьте, что способности сетей искусственных нейронов к анализу и обобщению можно использовать для получения еще большего массива знаний о потребителях. Например, в 2019 году компания McDonald’s наняла специалистов по разработке нейросетей для создания индивидуальной рекламы. Потом не удивляйтесь, откуда бизнес знает о том, какую еду, одежду и косметику вы предпочитаете.

В банковской сфере нейросети уже применяются для анализа кредитной истории клиентов и принятия решений о выдаче кредита. Так, в 2018 году «Сбербанк» уволил 14 тысяч сотрудников, которых заменила «Интеллектуальная система управления» на основе нейросети. Вместо людей рутинные операции теперь выполняет обучаемый искусственный интеллект. По словам Германа Грефа, подготовку исковых заявлений нейросети проводят лучше штатных юристов. Также финансисты обращаются к прогностическим способностям искусственного интеллекта для работы с плохо предсказуемыми биржевыми индексами.

Нейросети в сфере искусства

Что будет, если нейросеть познакомить с шедеврами мировой живописи и предложить написать картину? Будет новое произведение искусства. Предложите нейросети сочинения Баха, и она придумает похожую мелодию, книги Джоан Роулинг – она напишет книгу «Гарри Поттер и портрет того, что похоже на большую кучу золы». Книга «День, когда Компьютер написал роман», созданная японской нейросетью, даже получила премию HoshiShinichiLiteraryAward.

Специалисты компании OpenAI заявляют, что их программа по созданию текстов пишет любые тексты без человеческого вмешательства. Тексты за авторством нейросети не отличаются от тех, что написаны человеком. Однако в общественный доступ программа не попала, авторы опасаются, что ее будут использовать для создания фейк-ньюс.

В 2018 году на аукционе «Сотбис» за полмиллиона долларов был продан необыкновенный лот: «Эдмонд де Белами, из семьи де Белами. Состязательная нейронная сеть, печать на холсте, 2018. Подписана функцией потерь модели GAN чернилами издателем, из серии одиннадцати уникальных изображений, опубликованных Obvious Art, Париж, в оригинальной позолоченной деревянной раме». Робби Баррат, художник и программист, научил нейросети живописи настолько, что теперь она уходит с молотка как шедевры искусства.

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

Появились нейросети-композиторы и даже сценаристы. Уже снят короткометражный фильм по сценарию, написанному искусственным интеллектом («Sunspring») — вышло бессмысленно и беспощадно, как заправский артхаус. Тем временем нейросеть от Яндекса произвела на свет пьесу для симфонического оркестра с альтом и альбом «Нейронная оборона» в стиле группы «Гражданская оборона», а позже начала писать музыку в стиле известных исполнителей, например группы Nirvana. А нейросеть под названием Dadabots имеет свой канал на YouTube, где генерируется deathmetal музыка.

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

Нейросети в медицине

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

В открытом доступе появились даже приложения для диагностики на основе нейросетей, например SkinVision, которое работает с фотографиями родинок и определяет доброкачественность или злокачественность вашего невуса. Точность приложения — 83 %.

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

Скайнет готовится к атаке?

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

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

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

Выводы и прогнозы

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

Так как искусственный интеллект уже начал выполнять человеческие задачи, миллионы квалифицированных специалистов могут постепенно лишаться рабочих мест. Работодателю будет проще запустить нейросеть, чем нанимать человека. По тонкому замечанию Антона Балакирева, руководителя интернет-портала Robo-sapiens.ru, нейросети не уходят на пенсию, не страдают алкоголизмом и депрессией. Идеальный работник.

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

Источник

Пишем свою нейросеть: пошаговое руководство

Отличный гайд про нейросеть от теории к практике. Вы узнаете из каких элементов состоит ИНС, как она работает и как ее создать самому.

Создано нейросетью что значит. Смотреть фото Создано нейросетью что значит. Смотреть картинку Создано нейросетью что значит. Картинка про Создано нейросетью что значит. Фото Создано нейросетью что значит
В этой статье будут представлены некоторые понятия, а также немного кода и математики, с помощью которых вы сможете построить и понять простые нейронные сети. Для ознакомления с материалом нужно иметь базовые знания о матрицах и дифференциалах. Код будет написан на языке программирования Python с использованием библиотеки numpy. Вы построите ИНС, используя Python, которая с высокой точностью классифицировать числа на картинках.

1 Что такое искусственная нейросеть?

Неконтролируемое обучение в ИНС пытается «заставить» ИНС «понять» структуру передаваемой входной информации «самостоятельно». Мы не будем рассматривать это в данном посте.

2 Структура ИНС

2.1 Искусственный нейрон

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

Которая выглядит следующим образом:

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

2.2 Узлы

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

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

Круг на картинке изображает узел. Узел является «местоположением» активационной функции, он принимает взвешенные входы, складывает их, а затем вводит их в активационную функцию. Вывод активационной функции представлен через h. Примечание: в некоторых источниках узел также называют перцептроном.

Что такое «вес»? По весу берутся числа (не бинарные), которые затем умножаются на входе и суммируются в узле. Иными словами, взвешенный вход в узел имеет вид:

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

где wi— числовые значения веса ( b мы будем обсудим позже). Весы нам нужны, они являются значениями, которые будут меняться в течение процесса обучения. b является весом элемента смещения на 1, включение веса b делает узел гибким. Проще это понять на примере.

2.3 Смещение

Рассмотрим простой узел, в котором есть по одному входу и выходу:

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

Ввод для активационной функции в этом узле просто x1w1. На что влияет изменение в w1 в этой простой сети?

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

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

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

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

Из графика можно увидеть, что меняя «вес» смещения b, мы можем изменять время запуска узла. Смещение очень важно в случаях, когда нужно имитировать условные отношения.

2.4 Составленная структура

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

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

2.5 Обозначение

3 Процесс прямого распространения

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

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

3.1 Пример прямого распространения

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

Представим эту матрицу через массивы библиотеки numpy.

Мы просто присвоили некоторые рандомные числовые значения весу каждой связи с Ш1. Аналогично можно сделать и с Ш2:

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

Мы можем присвоить некоторые значения весу смещения в Ш1 и Ш2:

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

3.2 Первая попытка реализовать процесс прямого распространения

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

Функция сначала проверяет, чем является входной массив для соответствующего слоя с узлами / весами. Если рассматривается первый слой, то входом для второго слоя является входной массив xx, Умноженный на соответствующие веса. Если слой не первый, то входом для последующего будет выход предыдущего.
Вызов функции:

возвращает результат 0.8354. Можно проверить правильность, вставив те же значения в систему уравнений:

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

3.3 Более эффективная реализация

В данном случае процесс прямого распространения с циклами занимает около 40 микросекунд. Это довольно быстро, но не для больших нейронных сетей с > 100 узлами на каждом слое, особенно при их обучении. Если мы запустим этот алгоритм на нейронной сети с четырьмя слоями, то получим результат 70 микросекунд. Эта разница является достаточно значительной.

3.4 Векторизация в нейронных сетях

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

, где n- количество узлов в Ш1. Используя это обозначение, систему уравнений можно сократить:

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

Обратите внимание на W, что означает матричную форму представления весов. Помните, что теперь все элементы в уравнении сверху являются матрицами / векторами. Но на этом упрощение не заканчивается. Данные уравнения можно свести к еще более краткому виду:

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

3.5 Умножение матриц

Распишем z (l+1) =W (l) h (l) +b (l) на выражение из матрицы и векторов входного слоя ( h (l) =x):

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

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

Каждая строка полученного вектора соответствует аргументу активационной функции в оригинальной НЕ матричной системе уравнений выше. Это означает, что в Python мы можем реализовать все, не используя медленные циклы. К счастью, библиотека numpy дает возможность сделать это достаточно быстро, благодаря функциям-операторам над матрицами. Рассмотрим код простой и быстрой версии функции simple_looped_nn_calc:

Обратите внимание на строку 7, в которой происходит перемножение матрицы и вектора. Если вместо функции умножения a.dot (b) вы используете символ *, то получится нечто похожее на поэлементное умножение вместо настоящего произведения матриц.

Если сравнить время работы этой функции с предыдущей на простой сети с четырьмя слоями, то мы получим результат лишь на 24 микросекунды меньше. Но если увеличить количество узлов в каждом слое до 100-100-50-10, то мы получим гораздо большую разницу. Функция с циклами в этом случае дает результат 41 миллисекунду, когда у функции с векторизацией это занимает лишь 84 микросекунды. Также существуют еще более эффективные реализации операций над матрицами, которые используют пакеты глубинного обучения, такие как TensorFlow и Theano.

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

4 Градиентный спуск и оптимизация

Расчеты значений весов, которые соединяют слои в сети, это как раз то, что мы называем обучением системы. В контролируемом обучении идея заключается в том, чтобы уменьшить погрешность между входом и нужным выходом. Если у нас есть нейросеть с одним выходным слоем и некоторой вход xx и мы хотим, чтобы на выходе было число 2, но сеть выдает 5, то нахождение погрешности выглядит как abs(2-5)=3. Говоря языком математики, мы нашли норму ошибки L 1 (Это будет рассмотрено позже).

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

y (1) в этом случае может представлять собой единое скалярное значение, например, 1 или 0, обозначающий, было сообщение спамом или нет. В других приложениях это также может быть вектор с K измерениями. Например, мы имеем вход xx, Который является вектором черно-белых пикселей, считанных с фотографии. При этом y может быть вектором с 26 элементами со значениями 1 или 0, обозначающие, какая буква была изображена на фото, например (1,0. 0)для буквы а, (0,1. 0) для буквы б и т. д.

В обучении сети, используя (x,y), целью является улучшение нахождения правильного y при известном x. Это делается через изменение значений весов, чтобы минимизировать погрешность. Как тогда менять их значение? Для этого нам и понадобится градиентный спуск. Рассмотрим следующий график:

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

На этом графике изображено погрешность, зависящую от скалярного значения веса, w. Минимально возможная погрешность обозначена черным крестиком, но мы не знаем какое именно значение w дает нам это минимальное значение. Подсчет начинается с рандомного значения переменной w, которая дает погрешность, обозначенную красной точкой под номером «1» на кривой. Нам нужно изменить w таким образом, чтобы достичь минимальной погрешности, черного крестика. Одним из самых распространенных способов является градиентный спуск.

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

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

, где wн означает новое значение w, wст— текущее или «старое» значение w, ∇error является градиентом погрешности на wст и α является шагом. Шаг α также будет означать, как быстро ответ приближается к минимальной погрешности. При каждой итерации в таком алгоритме градиент должен уменьшаться. Из графика выше можно заметить, что с каждым шагом градиент «стихает». Как только ответ достигнет минимального значения, мы уходим из итеративного процесса. Выход можно реализовать способом условия «если погрешность меньше некоторого числа». Это число называют точностью.

4.1 Простой пример на коде

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

4.2 Функция оценки

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

Выражение является функцией оценки учебного экземпляра zth, где h (nl) является выходом последнего слоя, то есть выход нейронной сети. h (nl) можно представить как yпyп, Что означает полученный результат, когда нам известен вход xz. Две вертикальные линии означают норму L 2 погрешности или сумму квадратов ошибок. Сумма квадратов погрешностей является довольно распространенным способом представления погрешностей в системе машинного обучения. Вместо того, чтобы брать абсолютную погрешность abs(ypred(x z )-y z ), мы берем квадрат погрешности. Мы не будем обсуждать причину этого в данной статье. 1/2 в начале просто константой, которая нормализует ответ после того, как мы продифференцируем функцию оценки во время обратного распространения.

Обратите внимание, что приведенная ранее функция оценки работает только с одной парой (x,y). Мы хотим минимизировать функцию оценки со всеми mm парами вход-выход:

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

Тогда как же мы будем использовать функцию J для обучения наших сетей? Конечно, используя градиентный спуск и обратное распространение ошибок. Сначала рассмотрим градиентный спуск в нейронных сетях более детально.

4.3 Градиентный спуск в нейронных сетях

Градиентный спуск для каждого веса w(ij) (l) и смещение bi(l) в нейронной сети выглядит следующим образом:

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

Значения ∂/∂wij (l) и ∂/∂bi (l) являются частными производными функции оценки, основываясь на значениях веса. Что это значит? Вспомните простой пример градиентного спуска ранее, каждый шаг зависит от наклона погрешности / оценки по отношению к весу. Производная также имеет значение наклона / градиента. Конечно, производная обозначается как d/dx. x в нашем случае является вектором, а это значит, что наша производная тоже будет вектором, который является градиент каждого измерения x.

4.4 Пример двумерного градиентного спуска

Рассмотрим пример стандартного двумерного градиентного спуска. Ниже представлены диаграмму работы двух итеративных двумерных градиентных спусков:

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

Синим обозначены контуры функции оценки, они обозначают области, в которых значение погрешности примерно одинаковы. Каждый шаг (p1→p2→p3) В градиентном спуске используют градиент или производную, которые обозначаются стрелкой / вектором. Этот вектор проходит через два пространства [x1, x2][x1,x2]и показывает направление, в котором находится минимум. Например, производная, исчисленная в p1 может быть d/dx=[2.1,0.7], Где производная является вектором с двумя значениями. Частичная производная ∂/∂x1 в этом случае равна скаляру →[2.1]- иными словами, это значение градиента только в одном измерении поискового пространства (x1).

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

4.5 Углубляемся в обратное распространение

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

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

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

Выход этой нейронной сети находится по формуле:

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

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

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

Если присмотреться, то правая часть полностью сокращается (по принципу 2552=22=1). ∂J∂w12(2) были разбиты на три множителя, два из которых можно прекрасно заменить. Начнем с ∂z1 (2) /∂w12 (2) :

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

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

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

здесь y1 является ожидаемым выходом для выходного узла. Опять используем правило дифференцирования сложной функции:

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

Мы выяснили, как находить ∂J/∂w12 (2) по крайней мере для весов связей с исходным слоем. Перед тем, как перейти к одному из скрытых слоев, введем некоторые новые значения δ, чтобы немного сократить наши выражения:

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

, где i является номером узла в выходном слое. В нашем примере есть только один узел, поэтому i=1. Напишем полный вид производной функции оценки:

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

, где выходной слой, в нашем случае, l=2, а i соответствует номеру узла.

4.6 Распространение в скрытых слоях

Что делать с весами в скрытых слоях (в нашем случае в слое 2)? Для весов, которые соединены с выходным слоем, производная ∂J/∂h=-(yi-hi (nl) )имела смысл, т.к. функция оценки может быть сразу найдена через сравнение выходного слоя с существующими данными. Но выходы скрытых узлов не имеют подобных уже существующих данных для проверки, они связаны с функцией оценки только через другие слои узлов. Как мы можем найти изменения в функции оценки из-за изменений весов, которые находятся глубоко в нейронной сети? Как уже было сказано, мы используем метод обратного распространения.

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

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

, где j номер узла в слое l. Но что будет, если в исходном слое находится много выходных узлов? В этом случае δj (l) находится по взвешенной сумме всех связанных между собой погрешностей, как показано на диаграмме ниже:

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

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

Отлично, теперь мы знаем, как реализовать градиентный спуск в нейронных сетях:

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

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

4.7 Векторизация обратного распространения

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

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

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

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

Еще одно трансформирование нужно сделать с суммой погрешностей в обратном распространении:

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

символ (∙) в предыдущем выражении означает поэлементное умножение (произведение Адамара), не является умножением матриц. Обратите внимание, что произведение матриц (((W (l) ) T δ(l+1))требует еще одного сложения весов и значений δ.

4.8 Реализация этапа градиентного спуска

Как тогда интегрировать векторизацию в этапы градиентного спуска нашего алгоритма? Во-первых, вспомним полный вид нашей функции оценки, который нам нужно сократить:

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

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

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

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

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

4.9 Конечный алгоритм градиентного спуска

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

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

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

5 Имплементация нейросети языке Python

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

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

01. Масштабировать данные.
02. Разделить данные на тесты и учебные тесты.

5.1 Масштабирование данных

Почему нам нужно масштабировать данные? Во-первых, рассмотрим представление пикселей одного из сетов данных:

Заметили ли вы, что входные данные меняются в интервале от 0 до 15? Достаточно распространенной практикой является масштабирование входных данных так, чтобы они были только в интервале от [0, 1], или [1, 1]. Это делается для более легкого сравнения различных типов данных в нейронной сети. Масштабирование данных можно легко сделать через библиотеку машинного обучения scikit learn:

5.2 Создание тестов и учебных наборов данных

Опять же, scikit learn легко разбивает данные на учебные и тестовые наборы:

5.3 Настройка выходного слоя

В данных MNIST нужны результаты от изображений записаны как отдельное число. Нам нужно конвертировать это единственное число в вектор, чтобы его можно было сравнивать с исходным слоем с 10 узлами. Иными словами, если результат в MNIST обозначается как «1», то нам нужно его конвертировать в вектор: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]. Такую конвертацию осуществляет следующий код:

Этот код конвертирует «1» в вектор [0, 1, 0, 0, 0, 0, 0, 0, 0, 0].

5.4 Создаем нейросеть

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

Сейчас мы не имеем никакого представления, как выглядит наша нейросеть. Как мы будем ее учить? Вспомним наш алгоритм из предыдущих разделов:
Рандомно инициализируем веса для каждого слоя W (l) Когда итерация (l) б. Найдите значение δ ( nl) выходного слоя. Обновите ΔW (l) и Δb ( l ) для каждого слоя.
03. Запустите процесс градиентного спуска, используя:

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

Значит первым этапом является инициализация весов для каждого слоя. Для этого мы используем словари в языке программирования Python (обозначается через <>). Рандомные значения предоставляются весам для того, чтобы убедиться, что нейросеть будет работать правильно во время обучения. Для рандомизации мы используем random_sample из библиотеки numpy. Код выглядит следующим образом:

Следующим шагом является присвоение двум переменным ΔW и Δb нулевых начальных значений (они должны иметь такой же размер, что и матрицы весов и смещений)

Далее запустим процесс прямого распространения через нейронную сеть:

И наконец, найдем выходной слой δ (nl) и значение δ (l) в скрытых слоях для запуска обратного распространения:

Теперь мы можем соединить все этапы в одну функцию:

И наконец, после того, как мы прошлись по всем учебным экземплярам, накапливая значение tri_W и tri_b, мы запускаем градиентный спуск и меняем значения весов и смещений:

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

Мы можем увидеть, как функция средней оценки уменьшилась после итерационной работы градиентного спуска:

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

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

5.5 Оценка точности модели

Теперь, наконец, мы можем оценить точность результата (процент раз, когда сеть выдала правильный результат), используя функцию accuracy_score из библиотеки scikit learn:

Мы получили результат 86% точности. Звучит довольно неплохо? На самом деле, нет, это довольно низкая точностью. В наше время точность алгоритмов глубинного обучения достигает 99.7%, мы немного отстали.

Источник

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

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