Нейросеть что может делать
Нейронные сети для начинающих. Часть 1
Привет всем читателям Habrahabr, в этой статье я хочу поделиться с Вами моим опытом в изучении нейронных сетей и, как следствие, их реализации, с помощью языка программирования Java, на платформе Android. Мое знакомство с нейронными сетями произошло, когда вышло приложение Prisma. Оно обрабатывает любую фотографию, с помощью нейронных сетей, и воспроизводит ее с нуля, используя выбранный стиль. Заинтересовавшись этим, я бросился искать статьи и «туториалы», в первую очередь, на Хабре. И к моему великому удивлению, я не нашел ни одну статью, которая четко и поэтапно расписывала алгоритм работы нейронных сетей. Информация была разрознена и в ней отсутствовали ключевые моменты. Также, большинство авторов бросается показывать код на том или ином языке программирования, не прибегая к детальным объяснениям.
Поэтому сейчас, когда я достаточно хорошо освоил нейронные сети и нашел огромное количество информации с разных иностранных порталов, я хотел бы поделиться этим с людьми в серии публикаций, где я соберу всю информацию, которая потребуется вам, если вы только начинаете знакомство с нейронными сетями. В этой статье, я не буду делать сильный акцент на Java и буду объяснять все на примерах, чтобы вы сами смогли перенести это на любой, нужный вам язык программирования. В последующих статьях, я расскажу о своем приложении, написанном под андроид, которое предсказывает движение акций или валюты. Иными словами, всех желающих окунуться в мир нейронных сетей и жаждущих простого и доступного изложения информации или просто тех, кто что-то не понял и хочет подтянуть, добро пожаловать под кат.
Первым и самым важным моим открытием был плейлист американского программиста Джеффа Хитона, в котором он подробно и наглядно разбирает принципы работы нейронных сетей и их классификации. После просмотра этого плейлиста, я решил создать свою нейронную сеть, начав с самого простого примера. Вам наверняка известно, что когда ты только начинаешь учить новый язык, первой твоей программой будет Hello World. Это своего рода традиция. В мире машинного обучения тоже есть свой Hello world и это нейросеть решающая проблему исключающего или(XOR). Таблица исключающего или выглядит следующим образом:
a | b | c |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Соответственно, нейронная сеть берет на вход два числа и должна на выходе дать другое число — ответ. Теперь о самих нейронных сетях.
Что такое нейронная сеть?
Нейронная сеть — это последовательность нейронов, соединенных между собой синапсами. Структура нейронной сети пришла в мир программирования прямиком из биологии. Благодаря такой структуре, машина обретает способность анализировать и даже запоминать различную информацию. Нейронные сети также способны не только анализировать входящую информацию, но и воспроизводить ее из своей памяти. Заинтересовавшимся обязательно к просмотру 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%.
Большое спасибо за внимание! Надеюсь, что данная статья смогла помочь вам в изучении нейронных сетей. В следующей статье, я расскажу о нейронах смещения и о том, как тренировать нейронную сеть, используя метод обратного распространения и градиентного спуска.
Что умеют нейросети? 35 проектов, созданных искусственных интеллектом
Содержание
Содержание
В 2017 году Илон Маск заявил, что искусственный интеллект — угроза для всего человечества. А уже спустя два года он с гордостью сообщил, что разрабатывает систему Neuralink — имплантирование компьютерных чипов прямо в мозг людям. Кажется, сторонники конспирологических теорий в качестве жертвы выбрали не того человека. В чем-то Маск все-таки был прав: искусственный интеллект уже сейчас может делать очень много — снимать видео, писать картины и тексты и даже создавать новых людей.
Нео-Рембрандт и кибер-сюрреализм
Нейросети, обрабатывающие изображения, стали уже нормой. Фоторедакторы, добавляющие макияж и прически на сэлфи; креативная обработка снимков а-ля классическая живопись или абстракция в духе Ван Гога — всем этим уже не удивить. Последний тренд — нейросеть Selfie 2 Waifu, которая превращает ваше лицо в аниме-персонажа. Работает кривовато, но забавно.
А вот искусственный интеллект, создающий картины с нуля — это уже посерьезнее. Правда, станковым художникам вздрагивать пока рано — чтобы нейросеть выдала что-то более-менее логичное и приятное глазу, ее нужно обучить тысячами примеров.
Например, китайская художница Сугвен Чунг сначала научила искусственный интеллект на примере своих собственных рисунков, а потом начала устраивать арт-перфомансы, где машина рисует картины вместе с ней. На своем выступлении на конференции TEDx она сказала, что ИИ в искусстве — это «слияние технологии и философии».
И таких примеров масса. Например, Дэвид Янг учит ИИ рисовать цветы (тоже по своим собственным работам), Даниэль Амброси — абстрактную природу, Софи Креспо — несуществующие биологические микроорганизмы.
Самым громким событием в мире «искусственного искусства» стал портрет Эдмонда де Белами, созданный нейросетью в 2018 году. Картина оказалась настолько интересной, что была продана на аукционе Christie’s за 432 500 долларов. Французская арт-группа Obvious тренировала свою нейросеть по данным WikiArt. Прежде чем создать коллекцию полотен «La Famille de Belamy», ИИ обработал более 15 000 классических картин в период с 14 по 19 век.
Искусственный интеллект под руководством Марио Клингеманн создал серию картин, обогнавших по проработке и красоте средневековую семейку Беллами. Коллекция «Воспоминания прохожих» не стала такой же золотой птичкой на аукционах, но была оценена Sotheby’s в 40 000 евро. Выглядит творение машины и Клингеманна очень впечатляюще.
Одним из самых невероятных событий в мире кибер-искусства стала выставка картин, на которой присутствовал сам их автор — робот. ИИ в виде гуманоиодного — и весьма миловидного — робота по имениAI-Da явился на свою собственную экспозицию в Оксфорде.
Основное отличие «Аиды» от всего, что было раньше — она рисует в реальном пространстве прямо на бумаге. С помощью встроенной камеры она анализирует предметы, считывает координаты реального пространства и создает алгоритмы виртуальной модели, которую затем переносит на настоящий холст. «Аида» умеет рисовать красками, карандашами и даже лепить из глины.
«Выставка ставит под сомнение наши отношения с технологиями и миром природы. Искусственный интеллект и новые технологии могут быть одновременно прогрессивной и разрушительной силой для нашего общества. Кроме того, Ai-Da сама по себе предмет искусства. Ее существование поднимает вопросы, связанные с биотехнологией и трансгуманизмом», — прокомментировали это событие оксфордские галеристы.
«Возьми, умри. А потом живи как бегун» — тексты от нейросетей
ИИ все увереннее входит в современную журналистику. Уже сейчас информационное агентство Bloomberg News создает примерно треть своего контента с помощью нейросети Cyborg, которая быстро обрабатывает отчеты и составляет новости. А вот статья The Guardian, также написанная искусственным интеллектом. В The Washington Post «работает» робот-журналист Heliograf, в агентстве Associated Press статьями о финансовых отчетах тоже занимается ИИ.
Мировая журналистика видит в искусственном интеллекте огромный потенциал для автоматизации механических процессов. При этом крупнейшие издания не считают, что ИИ вытеснит людей из профессии, так как журналистика — профессия творческая, ориентированная на любопытство, дедукцию и поиск фактов.
В это же время нейросети потихоньку учатся не только обрабатывать данные для сухих новостных статей, но и писать художественные книги и сочинять стихи. Долго считалось, что поэзия — это вообще нереально для нейросетей. Пока в 2013 году у «Яндекса» в соавторстве с Google не появился «Автопоэт», который сочиняет стихи из поисковых запросов. Получается у него, конечно, полная бессмыслица, но иногда от нее веет таким холодком безысходности, что, как ни крути, а проникаешься.
В 2016 году Google решили научить нейросеть писать стихи по книжкам — ИИ обработал около 11 тысяч книг и начал выдавать декадентскую поэзию, которая вполне себе может поспорить с некоторыми творениями людей:
«Он надолго замолчал.
Он смолк на мгновение.
На секунду стало тихо.
Было темно и холодно.
Возникла пауза.
Теперь мой черед».
Годом позже за дело взялись Facebook AI Research — дочернее подразделение одноименной компании по разработке ПО для искусственного интеллекта. Они поставили нейросети задачу не только считывать стихотворные размеры и рифмовать слова, но и вкладывать в это все хоть какой-то смысл. Нейросеть учили уже не по поисковым запросам и прозе, а по настоящим стихам. По итогам обучения исследователи организовали опрос, предлагая людям выборку из стихов, написанных реальными людьми и искусственными интеллектом. В половине случаев респонденты ошиблись, не отличив кибер-поэзию от реальной. Вот, например, что-то в духе Оскара Уайльда в стихах:
«The frozen waters that are dead are now
black as the rain to freeze a boundless sky,
and frozen ode of our terrors with
the grisly lady shall be free to cry».
Илон Маск тоже не тормозит — его компания OpenAI уже не первый год совершенствует программу по генерации текстов, и буквально весной 2020 года вышло уже третье обновление текстовых алгоритмов GPT-3. Эта нейросеть «знает» более 570 гигабайт текста и 175 миллиардов примеров, чтобы выдавать не просто пару осмысленных предложений, но писать целые статьи и эссе. Разработчики говорят, что их детище настолько крутое, что они не хотят выпускать нейросеть в свет, опасаясь вредоносного применения. В массовом доступе есть только упрощенный вариант предыдущей версии генератора GPT-2, который даже можно скачать вот здесь.
Российские разработчики тоже включаются в дело. В ответ на многомиллиардные разработки Илона Маска московский разработчик Михаил Гранкин создал «Порфирьевича» — текстовую нейросеть, которая создает немного текста на основе пары фраз или предложений. По сути «Порфирьевич» — это тот же GPT-2, которого Гранкин адаптировал на русский язык.
При этом получается у «Порфирьевича» не только весьма убедительно, но и частенько с чувством юмора. Еще бы, он ведь учился на творчестве Достоевского, Булгакова, Гоголя и немного Пелевина.
Михаил Гранкин пошел чуть дальше и решил поучаствовать в гонке за звание лучшей кибер-поэзии. Так появился телеграм-бот «Нейропоэт», которому нужно дать пару строчек, а дальше он сам сгенерирует стихотворное продолжение.
Кроме текстов, нейросети начали писать сценарии. В 2019 году ИИ создал концептуальный ролик для Nike, обучившись на рекламных слоганах компании за последние 8 лет. Получилось очень в духе бренда, стильно и симпатично. Правда, если поймать стиль у нейросети точно получилось, то с содержанием все не так неоднозначно. Вроде бы ИИ пропагандирует крутую идею про преодоление: «Жизнь несправедлива. Если бы у тебя была всего одна рука, то не просто смотри на марафон. Сначала — марафон», но потом почему-то советует вот это: «Будь не просто миром. Возьми, умри. А потом живи как бегун».
А вот у искусственного интеллекта IBM Watson получилось куда круче. Эта нейросеть написала сценарий для рекламы седана Lexus E. И она училась не по рекламным кампаниям бренда, а вообще по всем самым крутым роликам про автомобили, получившим Каннскую награду за 15 лет. Британский кинорежиссер Кевин Макдональд в соавторстве с креативным агентством The&Partnership London сняли ролик по сценарию нейросети и получилось… да круто получилось!
От Шостаковича до Егора Летова
В 2016 году разработчики «Яндекса» Иван Ямщиков и Алексей Тихонов выпустили музыкальный альбом. В его создании принимал участие Егор Летов и нейросеть. Получилась «Нейронная оборона» — искусственные тексты в духе Гражданской Обороны. На самом деле этот первый резонансный опыт нельзя полностью записать на счет ИИ. Ямщиков и Тихонов сами сочиняли музыку, сами пели, да и выборку строчек из песенных текстов для алгоритма нейросети тоже собирали сами.
Вслед за «Нейронной обороной» эти же разработчики научили нейросеть сочинять в духе Курта Кобейна, а затем написали целую пьесу «Цифровой восход», которую впоследствии исполнил оркестр Юрия Башмета. Но даже здесь, несмотря на то, что нейросеть училась у Баха и Шостаковича, пришлось поработать человеку. Композитор Кузьма Бодров вручную обрабатывал кучу аудиодорожек, созданных ИИ, дописывал и развивал выбранные фрагменты и собирал их в одну композицию.
В 2017 году состоялся еще один музыкальный эксперимент от классики. На сей раз Ямщиков и Тихонов взяли за основу стиль Александра Скрябина, а аранжировкой и сборкой получившихся аудиодорожек занималась композитор Мария Чернова.
Конечно, «Яндекс» — не единственный, кто учит нейросети сочинять музыку. В том же 2017 году вышел альбом Hello World, написанный ИИ и доведенный до ума группой композиторов и музыкантов. Вышло несколько футуристично, но очень даже интересно.
А вот песня от проекта Flow Machines, которая очень напоминает творчество The Beatles.
OpenAI тоже работает над тем, чтобы научить свои нейросети музыке. Так появился проект Jukebox, который создает и тексты, и музыку, и уже нагенерировал больше семи тысяч композиций. Пока журналисты и композиторы признают Jukebox самым интересным музыкальным алгоритмом из всех существующих. Jukebox действительно очень неплохо имитирует жанры и повторяет стиль известных исполнителей и групп, у которых учится. Ключевое отличие Jukebox от всего, что было раньше — она выдает готовый продукт автоматически. То есть и играет, и поет нейросеть сама без участия человека. Послушать творчество
OpenAI можно здесь.
Все же, в музыке нейросети еще не настолько самостоятельны, как в живописи и текстах. Пока в большинстве случаев ИИ выдает набор звуков, не связанных ни ритмом, ни композицией, из которых композиторы уже вручную отбирают интересные сочетания и созвучия.
Новые люди и…котики!
Не то чтобы нейросети научились создавать реальных людей, которые ходили бы рядом с нами. Но вот генерировать фотографии несуществующих людей — вполне и весьма качественно. В прошлом году Филипп Ванг на базе алгоритма StyleGAN от Nvidia запустил сайт, который может бесконечно создавать человеческие портреты.
Алгоритм работает в комбинации двух нейросетей: одна генерирует изображение, а вторая проверяет его на реалистичность. Адаптация происходит настолько ошеломляюще реалистичной, что отличить фейк от настоящего лица нереально.
На этом Nvidia не остановились, запустив аналогичные сервисы по созданию лошадей, молекул, картин и, конечно, котиков!
Кстати, создать своего собственного несуществующего котика можно и с помощью сервиса Affinelayer. В одном окошке вы рисуете кота, в другом нейросеть генерирует что-то по вашему рисунку. Получается далеко не так реалистично, как у предыдущего алгоритма, но так и первоисточник в виде ручного рисунка — так себе.
Многие разработчики, стоящие за созданием алгоритмов нейросетей, по-прежнему не считают, что искусственный интеллект — во всяком случае пока что — сможет всецело заменить какие-то профессии. Работа нейросетей все равно основана на считывании уже существующих данных и примеров, созданных живыми людьми. Чтобы сгенерировать пару строчек более-менее осмысленного текста, нейросеть обрабатывает сотни тысяч уже написанных книг, а чтобы нарисовать котика, похожего на настоящего — миллионы фотографий настоящих котов. Человеческое воображение и творчество по-прежнему остаются источником данных для машинных алгоритмов. Так что если вы художник, писатель, поэт или музыкант, то беспокоиться пока рано. Но кто его знает, что случится в будущие годы…