Вы когда-нибудь задумывались, как машины ездят сами по себе? Вы когда-нибудь задумывались, как Siri/Cortana иногда саркастически реагируют на ваши команды? Что ж, все эти тестовые приложения имеют базовый алгоритм, встроенный в их системы, которые обучаются на человеческом поведении. Те, кто знаком с термином «искусственный интеллект», скажут, что алгоритмы, управляющие этими эталонными приложениями, — это алгоритмы «машинного обучения» и, в частности, алгоритмы «глубокого обучения». Но всякий раз, когда я слышу термин «глубокое обучение», в моей голове всплывает образ нейронной сети. Но задумывались ли вы когда-нибудь, как эти умные сети учатся? Как строятся эти сети? Или, даже, как все это имеет смысл для любого из нас?

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

Оглавление:

· Персептрон и его сходство с человеческими нейронами

· Взгляд внутрь персептронов

· Основная ошибка персептронов (первая зима ИИ)

· Обратное распространение: алгоритм, управляющий изучением архитектуры многослойной нейронной сети.

· Сигмовидные нейроны

· Как работают многоуровневые архитектуры?

· Типы архитектур нейронных сетей

· Почему искусственные нейронные сети получили бум в последние годы?

· Последние достижения

Персептрон и его сходство с человеческими нейронами

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

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

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

Взгляд внутрь персептрона

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

Ученые-компьютерщики изо всех сил пытались имитировать этот нейрон, и Фрэнк Розенблатт придумал структуру персептрона, которая напоминала подобное поведение.

Этот персептрон представляет собой простую математическую функцию, которая принимает входные данные x1, x2 и x3 и возвращает результат y, равный 0 или 1, представляющий тот факт, что нейрон активен или нет (аналогично человеческим нейронам). Но на картинке мы видим w1, w2 и w3. Что это? Это веса персептрона. Но подождите, Весы? Для чего они нам нужны?

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

Многие люди пугаются и не интересуются, когда видят в рассказе математику, но, поверьте мне, расчет очень и очень прост.

Мы обсуждали, что персептрон — это просто математическая функция, чьи входы равны x1, x2 и x3 (в данном случае), а выход равен либо 0, либо 1, и он имеет некоторые веса.

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

Функция математически записывается как:

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

Ошибка в Perceptron

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

Это был душераздирающий момент для искусственного интеллекта, и его назвали «Первая зима ИИ». Интерес исследователей в области ИИ упал, и ИИ заснул на 10 лет.

Конечно, если бы несколько персептронов можно было объединить в многоуровневую архитектуру, они могли бы зафиксировать нелинейность. На самом деле, учитывая достаточное количество уровней в многослойной архитектуре персептрона, его можно обобщить на любую функцию. Это называется «Теорема универсального приближения». Но несколько слоев означали бы сотни весов, и настройка каждого из них для получения лучших результатов была головной болью **. Именно поэтому интерес исследователей к области ИИ снизился.

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

В 1986 году Джеффри Хинтон опубликовал статью «Изучение внутренних представлений путем распространения ошибок», которая стала важной вехой в области ИИ и ознаменовала конец «первой зимы ИИ». Его статья включала этот алгоритм под названием Обратное распространение.

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

Сигмовидные нейроны

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

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

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

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

Это было полезно, потому что каждый сигмовидный нейрон мог дать вам число, например 0,7, которое могло представлять вероятность вместо того, чтобы говорить 1 (ДА) или Ноль (НЕТ) (в случае персептронов).

Другие функции активации

Конечно, сигмовидная была не единственной функцией активации. Другие функции, такие как tanh() и relu(), также завоевали популярность.

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

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

Как работают многоуровневые архитектуры?

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

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

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

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

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

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

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

Типы архитектур нейронных сетей:

Плотная сеть

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

Сверточные нейронные сети (CNN)

Если мы хотим распознавать изображения, мы должны передавать значение каждого пикселя этого изображения в нашу сеть. Если бы мы использовали плотную сеть, нам потребовалось бы 2 073 600 входных нейронов для изображения с разрешением 1920x1080. Это огромно и очень дорого в вычислительном отношении для обучения такой плотной сети. Каково решение тогда?

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

Рекуррентные нейронные сети (RNN)

До сих пор мы использовали сети Feed Forward. Feed Forward означает, что информация будет передаваться от входного слоя к выходному слою. Но RNN работают немного по-другому. RNN — это такие сети, в которых информация может передаваться по петле.

Чем это полезно? Их можно использовать для сохранения контекста речи. Возьмите этот пример для помощи.

"Я живу во Франции. Я свободно говорю _______»

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

RNN в наши дни относятся к старой школе, а более новые варианты, такие как LSTM и GRU, в наши дни используются чаще.

Эти сети сохранения контекста широко используются в распознавании речи, генерации текста и во многих других областях. И эти сети ответственны за те саркастические ответы, которые вам дает Siri/Google Home.

Автокодировщики и декодеры

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

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

Подавление шума:

Раскрашивание черно-белых фильмов и так далее:

Общие состязательные сети (GAN)

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

Вы можете быть удивлены, узнав, что ни один из этих людей не существует в реальном мире. Это изображения, созданные GAN. Такая деталь, да! Как это работает?

Я не собираюсь углубляться в работу сети, но могу дать вам небольшой обзор.

Эта сеть состоит из двух частей:

1. Генератор и 2. Дискриминатор

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

Почему в последние годы произошел бум искусственных нейронных сетей?

Нейронные сети — старая технология. Старая технология в том смысле, что большинство архитектур были исследованы в 20-м веке, но в чем причина того, что они так сильно выросли за последнее десятилетие? Ну, есть много причин, но я дам вам 2 из них.

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

С появлением Интернета доступность увеличилась, и такие крупные гиганты, как Google и Facebook, производят достаточно размеченных данных для работы.

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

На самом деле, соревнование, которое подтолкнуло глубокое обучение к его нынешнему уровню, — это соревнование ImageNet 2012 года. Победитель соревнования использовал 2 графических процессора для обучения своей нейронной сети в течение 12 дней, чтобы получить коэффициент ошибок 16%, что стало важной вехой в области Нейронные сети. Угадайте, кто этот победитель! Джеффри Хинтон. Звучит знакомо? Это парень, который открыл обратное распространение в 1986 году, иначе глубокое обучение не было бы сегодня на такой высоте.

Последние достижения

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

Автомобили с автоматическим управлением

Google начал работать с беспилотными автомобилями с 2015 года, и другие компании, такие как Tesla, присоединились к ним, чтобы создавать собственные беспилотные автомобили. Сегодня почти каждая компания работает над этой технологией.

Обнаружение объектов в реальном времени

YOLO (You Only Look Once) — еще одна нейронная сеть, которая выполняет обнаружение объектов на изображении в реальном времени. Он может идентифицировать автомобили, людей и другие 1000 классов объектов.

Распознавание речи

В этом блоге я много раз упоминал Google Home, Siri, Cortana. Базовый алгоритм распознавания речи является еще одним эталоном в этой области. Эти системы распознавания становятся все лучше и лучше в наши дни. Он может распознать ваш голос, несмотря на фоновый шум, который так крут.

Синтез видео в видео

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

Обучение с подкреплением

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

В 2016 году Deepmind от Google создал ИИ под названием ALPHAGO, который мог играть в древнюю игру GO (популярную в Китае, Корее и Японии). Удивительная вещь в ALPHAGO заключается в том, что она победила чемпиона мира Ли Седоля из Кореи в 2016 году, что считается эталоном в области ИИ.

Итак, каково будущее?

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

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

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

Ссылки:

· При поддержке Campus{X} Mentorship Programme (руководитель программы: Нитиш Сингх)

· Книга Майкла Нейлсона «Нейронные сети и глубокое обучение»

· Youtube Playlist 3Blue1Brown на тему Нейронные сети