- Нейросеть с нуля своими руками. Часть 1. Теория
- Для чего нужны нейросети
- Устройство нейрона
- Нейросети в IT
- Добавим немного математики.
- Профит-тур по СНГ
- 👍 Нейросети для работы с картинками и фото 2021: 8 инструментов для разных целей
- Нейросети для удаления фона
- Remove.bg
- Unscreen
- ObstructionRemoval
- Нейросети для создания фото людей и аватарок
- Generated.photos
- ThisPersonDoesnotExist
- RoundDF
- Нейросети для работы с логотипами
- Looka.com
- BrandFetch.io
- Заключение
Нейросеть с нуля своими руками. Часть 1. Теория
Здравствуйте. Меня зовут Андрей, я frontend-разработчик и я хочу поговорить с вами на такую тему как нейросети. Дело в том, что ML технологии все глубже проникают в нашу жизнь, и о нейросетях сказано и написано уже очень много, но когда я захотел разобраться в этом вопросе, я понял что в интернете есть множество гайдов о том как создать нейросеть и выглядят они примерно следующим образом:
Более подробная информация разбросана кусками по всему интернету. Поэтому я постарался собрать ее воедино и изложить в этой статье. Сразу оговорюсь, что я не являюсь специалистом в области ML или биологии, поэтому местами могу быть не точным. В таком случае буду рад вашим комментариям.
Пока я писал эту статью я понял, что у меня получается довольно объемный лонгрид, поэтому решил разбить ее на несколько частей. В первой части мы поговорим о теории, во второй напишем собственную нейросеть с нуля без использования каких-либо библиотек, в третьей попробуем применить ее на практике.
Так как это моя первая публикация, появляться они будут по мере прохождения модерации, после чего я добавлю ссылки на все части. Итак, приступим.
Для чего нужны нейросети
Нейросети встречаются везде. Основная их функция — это управление различными частями организма в зависимости от изменения окружающих условий. В качестве примера можно рассмотреть механизм сужения и расширения зрачка в зависимости от уровня освещения.
В нашем глазу есть сенсоры, которые улавливают количество света попадающего через зрачок на заднюю поверхность глаза. Они преобразуют эту информацию в электрические импульсы и передают на прикрепленные к ним нервные окончания. Далее это сигнал проходит по всей нейронной сети, которая принимает решение о том, не опасно ли такое количество света для глаза, достаточно ли оно для того, чтобы четко распознавать визуальную информацию, и нужно ли, исходя из этих факторов, уменьшить или увеличить количество света.
На выходе этой сети находятся мышцы, отвечающие за расширение или сужение зрачка, и приводят эти механизмы в действие в зависимости от сигнала, полученного из нейросети. И таких механизмов огромное количество в теле любого живого существа, обладающего нервной системой.
Устройство нейрона
Нейросети встречаются в природе в виде нервной системы того или иного существа. В зависимости от выполняемой функции и расположения, они делятся на различные отделы и органы, такие как головной мозг, спинной мозг, различные проводящие структуры. Но все их объединяет одно — они состоят из связанных между собой структурно-функциональных единиц — клеток нейронов.
Нейрон условно можно разделить на три части: тело нейрона, и его отростки — дендриты и аксон.
Дендриты нейрона создают дендритное дерево, размер которого зависит от числа контактов с другими нейронами. Это своего рода входные каналы нервной клетки. Именно с их помощью нейрон получает сигналы от других нейронов.
Тело нейрона в природе, достаточно сложная штука, но именно в нем все сигналы, поступившие через дендриты объединяются, обрабатываются, и принимается решение о том передавать ли сигнал далее, и какой силы он должен быть.
Аксон — это выходной интерфейс нейрона. Он крепится так называемыми синапсами к дендриту другого нейрона, и по нему сигнал, выходящий из тела нейрона, поступает к следующей клетке нашей нейросети.
Нейросети в IT
Что же, раз механизм нам понятен, почему бы нам не попробовать воспроизвести его с помощью информационных технологий?
Итак, у нас есть входной слои нейронов, которые, по сути, являются сенсорами нашей системы. Они нужны для того, чтобы получить информацию из окружающей среды и передать ее дальше в нейросеть.
Также у нас есть несколько слоев нейронов, каждый из которых получает информацию от всех нейронов предыдущего слоя, каким-то образом ее обрабатывают, и передают на следующий слой.
И, наконец, у нас есть выходные нейроны. Исходя из сигналов, поступающих от них, мы можем судить о принятом нейросетью решении.
Такой простейший вариант нейронной сети называется перцептрон, и именно его мы с вами и попробуем воссоздать.
Все нейроны по сути одинаковы, и принимают решение о том, какой силы сигнал передать далее с помощью одного и того же алгоритма. Это алгоритм называется активационной функцией. На вход она получает сумму значений входных сигналов, а на выход передает значение выходного сигнала.
Но в таком случае, получается, что все нейроны любого слоя будут получать одинаковый сигнал, и отдавать одинаковое значение. Таким образом мы могли бы заменить всю нашу сеть на один нейрон. Чтобы устранить эту проблему, мы присвоим входу каждого нейрона определенный вес. Этот вес будет обозначать насколько важен для каждого конкретного нейрона сигнал, получаемый от другого нейрона. И тут мы подходим к самому интересному.
Обучение нейронной сети — это процесс подбора входных весов для каждого нейрона таким образом, чтобы на выходе получить сигнал максимально соответствующий ожиданиям.
То есть мы подаем на вход нейросети определенные данные, для которых мы знаем, каким должен быть результат. Далее мы сравниваем результат, который нам выдала нейросеть с ожидаемым результатом, вычисляем ошибку, и корректируем веса нейронов таким образом, чтобы эту ошибку минимизировать. И повторяем это действие большое количество раз для большого количества наборов входных и выходных данных, чтобы сеть поняла какие сигналы на каком нейроне ей важны больше, а какие меньше. Чем больше и разнообразнее будет набор данных для обучения, тем лучше нейросеть сможет обучиться и впоследствии давать правильный результат. Этот процесс называется обучением с учителем.
Добавим немного математики.
В качестве активационной функции нейрона может выступать любая функция, существующая на всем отрезке значений, получающихся на выходе нейрона и входных данных. Для нашего примера мы возьмем сигмоиду. Она существует на отрезке от минус бесконечности до бесконечности, плавно меняется от 0 до 1 и имеет значение 0,5 в точке 0. Идеальный кандидат. Выглядит она следующим образом:
Таким образом наш нейрон сможет принимать любую сумму значений всех входящих сигналов и на выходе будет выдавать значение от 0 до 1. Это хорошо подходит для принятия бинарных решений, и мы условимся, что если число на выходе нейросети > 0.5, мы будем расценивать его как истину, иначе — как ложь.
Итак, давайте рассмотрим пример с топологией сети рассмотренной выше. У нас есть три входных нейрона со значениями ИСТИНА, ЛОЖЬ и ИСТИНА соответственно, два нейрона в среднем слое нейросети (эти слои также называют скрытыми), и один выходной нейрон, который сообщит нам о решении, принятом нейросетью. Так как наша сеть еще не обучена, поэтому значения весов на входах нейронов мы возьмем случайными в диапазоне от -0,5 до 0,5.
Таким образом сумма входных значений первого нейрона скрытого слоя будет равна
1 * 0,43 + 0 * 0,18 + 1 * -0,21 = 0,22
Передав это значение в активационную функцию, мы получим значение, которое наш нейрон передаст далее по сети в следующий слой.
sigmoid(0,22) = 1 / (1 + e^-0,22) = 0,55
Аналогичные операции произведём для второго нейрона скрытого слоя и получим значение 0,60.
И, наконец, повторим эти операции для единственного нейрона в выходном слое нашей нейросети и получим значение 0,60, что мы условились считать как истину.
Пока что это абсолютно случайное значение, так как веса мы выбирали случайно. Но, предположим, что мы знаем ожидаемое значение для такого набора входных данных и наша сеть ошиблась. В таком случае нам нужно вычислить ошибку и изменить параметры весов, таким образом немного обучив нашу нейросеть.
Первым делом рассчитаем ошибку на выходе сети. Делается это довольно просто, нам просто нужно получить разницу полученного значения и ожидаемого.
error = 0.60 — 0 = 0.60
Чтобы узнать насколько нам надо изменить веса нашего нейрона, нам нужно величину ошибки умножить на производную от нашей активационной функции в этой точке. К счастью, производная от сигмоиды довольно проста.
Таким образом наша дельта весов будет равна
delta = 0.60 * (1 — 0.60) = 0.24
Новый вес для входа нейрона рассчитывается по формуле
weight = weight — output * delta * learning rate
Где weight — текущий вес, output — значение на выходе предыдущего нейрона, delta — дельта весов, которую мы рассчитали ранее и learning rate — значение, подбираемое экспериментально, от которого зависит скорость обучения нейросети. Если оно будет слишком маленьким — нейросеть будет более чувствительна к деталям, но будет обучаться слишком медленно и наоборот. Для примера возьмем learning rate равным 0,3. Итак новый вес для первого входа выходного нейрона будет равен:
w = 0,22 — 0,55 * 0,24 * 0,3 = 0,18
Аналогичным образом рассчитаем новый вес для второго входа выходного нейрона:
w = 0.47 — 0.60 * 0.24 * 0.3 = 0.43
Итак, мы скорректировали веса для входов выходного нейрона, но чтобы рассчитать остальные, нам нужно знать ошибку для каждого из нейронов нашей нейросети. Это делается не так очевидно как для выходного нейрона, но тоже довольно просто. Чтобы получить ошибку каждого нейрона нам нужно новый вес нейронной связи умножить на дельту. Таким образом ошибка первого нейрона скрытого слоя равна:
error = 0.18 * 0.24 = 0.04
Теперь, зная ошибку для нейрона, мы можем произвести все те же самые операции, что провели ранее, и скорректировать его веса. Этот процесс называется обратным распространением ошибки.
Итак, мы знаем как работает нейрон, что такое нейронные связи в нейросети и как происходит процесс обучения. Этих знаний достаточно чтобы применить их на практике и написать простейшую нейросеть, чем мы и займемся в следующей части статьи.
Источник
Профит-тур по СНГ
👍 Нейросети для работы с картинками и фото 2021: 8 инструментов для разных целей
Привет, читатель! На связи искусственный интеллект ProTraffic. Сегодня я познакомлю тебя с незаменимыми инструментами, которые сильно облегчат работу с картинками и фото.
Речь пойдет о нейросетях — умных сервисах с суперспособностями. Они получили их в результате самообучения и выполняют определенные действия лучше, чем бы кто бы то ни был. Нейросети из этой подборки умеют убирать фон с фото и видео, генерировать логотипы или вытаскивать их с чужих сайтов и даже оживлять человека на фотографии.
► Кейсы и фишки по заработку в интернете, партнеркам и арбитражу трафика — в нашем ProTraffic-чате. Вступайте в коммьюнити — у нас палят темы и обмениваются опытом! 🔥
Нейросети для удаления фона
Начнем с простых задач. Далеко не у всех есть фотошоп, и тем более — желание его осваивать. В 2020-м есть выход — это обработка фото нейросетью. Причем не только фото! Но обо всем по порядку.
Remove.bg
Сервис Remove Background быстро стал популярным среди SMM-щиков и дизайнеров. Нейросеть убирает фон практически на любой фотографии в считанные секунды. Не нужно обводить объект инструментом “лассо”, как в фотошопе, или платить деньги. Remove.bg быстрый и бесплатный.
Посмотрите, как нейросеть удаляет фон:
Ссылка для использования: remove.bg
Unscreen
На удалении фона изображений разработчики не остановились. Спустя несколько месяцев создатели Remove.bg выпускают еще один незаменимый продукт — Unscreen.bg. Эта нейросеть научилась удалять фон с любого видео. Результат фантастический, при этом неважно, использовался хромакей или нет.
Посмотрите, как нейросеть убирает фон:
Круто, правда? Unscreen тоже полностью бесплатный, не требует регистрации и обрабатывает видео в течение нескольких секунд. Результат — огонь!
Ссылка для использования: Unscreen.com
ObstructionRemoval
Если о сервисах выше вы могли где-то слышать, то эта нейросеть для фотографий точно вам не встречалась. ObstructionRemoval — уникальный ИИ, который научили удалять преграды на изображениях. Например, решетку в зоопарке, стекло с бликами, грязь и прочее. Фото с помощью нейросети становятся чище. Вот как все работает:
Сервис бесплатный, заходите на гитхаб, чтобы скачать и пользоваться: ObstructionRemoval
Нейросети для создания фото людей и аватарок
Следующие сервисы способны сгенерировать лицо человека или аватарку для соцсетей. Результат выглядит естественно и отличить работу нейросети от настоящего фото практически невозможно.
Generated.photos
Еще год назад сервис пребывал в зачаточном состоянии и выдавал достаточно сырые результаты. Однако разработчики не забросили свою идею — и вот, на 2020 год в архиве нейросети более миллиона сгенерированных лиц живых людей. Самое то для аватарок в соцсетях. Например, чтобы пофармить аккаунты Facebook, а?
Посмотрите, как работает нейросеть для фотографий:
В Generated.photos есть удобный фильтр — можно сгенерировать лицо конкретного пола и возраста, выбрать цвет глаз и волос, длину прически и даже эмоцию на лице. Нейросеть работает безупречно.
Ссылка для использования: generated.photos
ThisPersonDoesnotExist
Более простой по функционалу, но от этого не менее прекрасный сервис по созданию лиц несуществующих людей. Чтобы нейросеть сгенерировала онлайн фото, достаточно зайти на сайт и обновлять страничку. Варианты, которые подходят под ваши цели, сохраняются в формате jpg. Изображения получаются натуральными — можно использовать в отзывах, соцсетях и пр. Посмотрите, как работает нейросеть для фотографий:
ThisPersonDoesnotExist обработала миллионы человеческих лиц и создает новые на основе собирательных образов. Начинка сервиса — генеративная нейросеть StyleGAN от Nvidia.
Ссылка для использования: ThisPersonDoesnotExist
RoundDF
А вот и один из самых интересных экземпляров нашей подборки. Нейросеть для создания дипфейк-видео из обычных картинок. Фото с помощью нейросети превращаются в анимацию. Для этого используется технология First Order Motion Model. Изначально код был опубликован на гитхабе, но энтузиасты уже перенесли все в Telegram-бота. Ребята даже анимировали жуткую голову из рекламы телекомпании “ВИД”:
На обработку 1 секунды видео требуется примерно 7 секунд времени, поэтому иногда в боте образовываются очереди. Подобную махинацию можно провернуть с любой фотографией, результат вас приятно удивит.
Telegram бот для создания дипфейк-видео: RoundDFbot
Нейросети для работы с логотипами
Следующие нейросети в нашей подборке способны создать несколько вариантов логотипов в считанные секунды или даже вытащить чужой логотип с сайта в формате png.
Looka.com
Сервис собирает информацию о вашей компании и, исходя из введенных данных, предлагает несколько итераций логотипов. В основе нейросети лежит технология Tensor Flow, разработанная Google.
Чтобы получить готовый логотип, нужно ввести название компании, выбрать референсы, которые больше всего подходят вам, указать цветовое сочетание, слоган и иконки, которые нейросеть использует в лого. После заполнения анкеты Looka генерирует 12 вариантов логотипов, после регистрации можно скачать любой из них. Вот что Looka предложила для нашего сайта:
После того, как поработала нейросеть, логотип свободно редактируется: юзер вправе поставить любую иконку, поменять шрифт или цветовые сочетания вручную.
Ссылка для использования: Looka.com
BrandFetch.io
Настоящая находка для шпиона — расширение BrandFetch.io для браузера Google Chrome. Вебмастера часто сталкиваются с ситуацией, когда что-то приглянулось на чужом сайте: шрифты, цветовые гаммы, картинка или логотип. Расширение способно вытащить всю эту информацию. Вот что может BrandFetch:
- Скачать логотип в png;
- Скачать любую картинку в оригинальном разрешении;
- Скачать все коды цветов;
- Узнать название шрифта, который используется на сайте.
Универсальное расширение — мастхэв для вебмастера. Берите на вооружение и не забывайте: кради, как художник!
Ссылка для установки расширения: BrandFetch.io
Заключение
Нейросети — отличное подспорье в ежедневной рутинной работе вебмастера, дизайнера или SMM-щика. Наша подборка существенно облегчит решение некоторых задач, на которые раньше уходило много времени. Используйте с умом и пишите в комментариях, если хотите увидеть вторую часть этой подборки!
Источник