Разное

Нейронные сети с: распознавание образов и изображений c помощью ИИ

Содержание

Нейронные сети, или Как обучить искусственный интеллект — Интернет изнутри

Машинное обучение является не единственным, но одним из фундаментальных разделов искусственного интеллекта, занимающимся вопросами самостоятельного извлечения знаний интеллектуальной системой в процессе ее работы. Основу машинного обучения составляют так называемые искусственные нейронные сети, принцип работы которых напоминает работу биологических нейронов нервной системы животных и человека.
Технологии искусственного интеллекта все активнее используются в самых различных областях – от производственных процессов до финансовой деятельности. Популярные услуги техгигантов, такие как «Яндекс.Алиса», Google Translate, Google Photos и Google Image Search (AlexNet, GoogleNet) основаны на работе нейронных сетей.
Что такое нейронные сети и как они работают – об этом пойдет речь в статье.

Введение

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

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

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

Рис. 1. Основные типы нейронов.

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

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

Рис. 2. Модель искусственного нейрона.

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

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

Таблица 1. Популярные разновидности активационных функций искусственного нейрона

В таблице 1 представлены некоторые виды активационных функций нейрона. Простейшей разновидностью функции активации является пороговая. Как следует из названия, ее график представляет из себя ступеньку. Например, если поступивший в нейрон суммарный сигнал от предыдущих нейронов меньше 0, то в результате применения функции активации сигнал полностью «тормозится» и дальше не проходит, т.е. на выход данного нейрона (и, соответственно, входы последующих нейронов) подается 0. Если же сигнал >= 0, то на выход данного нейрона подается 1.

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

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

  1. Ввод и обработка информации. Распознавание текстов на фотографиях и различных документах, распознавание голосовых команд, голосовой ввод текста.
  2. Безопасность. Распознавание лиц и различных биометрических данных, анализ трафика в сети, обнаружение подделок.
  3. Интернет. Таргетинговая реклама, капча, составление новостных лент, блокировка спама, ассоциативный поиск информации.
  4. Связь. Маршрутизация пакетов, сжатие видеоинформации, увеличение скорости кодирования и декодирования информации.

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

Архитектуры нейронных сетей

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

Персептрон

Рис. 3. Пример архитектуры персептрона.

Персептрон – это простейшая модель нейросети, состоящая из одного нейрона. Нейрон может иметь произвольное количество входов (на рис. 3 изображен пример вида персептрона с четырьмя входами), а один из них обычно тождественно равен 1. Этот единичный вход называют смещением, его использование иногда бывает очень удобным. Каждый вход имеет свой собственный вес. При поступлении сигнала в нейрон, как и было описано выше, вычисляется взвешенная сумма сигналов, затем к сигналу применяется функция активации и сигнал передается на выход. Такая
простая на первый взгляд сеть, всего из одного-единственного нейрона, способна, тем не менее, решать ряд задач: выполнять простейший прогноз, регрессию данных и т.п., а также моделировать поведение несложных функций. Главное для эффективности работы этой сети – линейная разделимость данных.

Для читателей, немного знакомых с таким разделом как логика, будут знакомы логическое И (умножение) и логическое ИЛИ (сложение). Это булевы функции, принимающие значение, равное 0, всегда, кроме одного случая, для умножения, и, наоборот, значения, равные 1, всегда, кроме одного случая, для сложения. Для таких функций всегда можно провести прямую (или гиперплоскость в многомерном пространстве), отделяющие 0 значения от 1. Это и называют линейной разделимостью объектов. Тогда подобная модель сможет решить поставленную задачу классификации и сформировать базовый логический элемент. Если же объекты линейно неразделимы, то сеть из одного нейрона с ними не справится. Для этого существуют более сложные архитектуры нейронных сетей, в конечном счете, тем не менее, состоящие из множества таких персептронов, объединенных в слои.

Многослойный персептрон

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

Рис. 4. Архитектура многослойного персептрона.

Отличительные признаки многослойного персептрона:

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

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

Сверточная нейронная сеть (convolution neural network)

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

Рис. 5. Архитектура сверточной нейронной сети.

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

Сверточные нейронные сети решают следующие задачи:

  • Классификация. Пример: нейронная сеть определяет, что или кто находится на изображении.
  • Детекция. Пример: нейронная сеть определяет, что/кто и где находится на изображении.
  • Сегментация. Пример: нейронная сеть может определить каждый пиксель изображения и понять, к чему он относится.

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

Рекуррентная нейронная сеть

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

Рис. 6. Архитектура рекуррентной нейронной сети.

Характеристики сети:

  • Каждое соединение имеет свой вес, который также является приоритетом.
  • Узлы подразделяются на два типа: вводные (слева) и скрытые (1, 2, … K).
  • Информация, находящаяся в нейронной сети, может передаваться как по прямой, слой за слоем, так и между нейронами.

Такие сети еще называют «памятью» (в случае сети Хопфилда – автоассоциативной; бывают также гетероассоциативные (сеть Коско – развитие сети Хопфилда) и другие). Почему? Если подать данной сети на вход некие «образцы» – последовательности кодов (к примеру, 1000001, 0111110 и 0110110) — и обучить ее на запоминание этих образцов, настроив веса синапсов сети определенным образом при помощи правила Хебба3, то затем, в процессе функционирования, сеть сможет «узнавать» запомненные образы и выдавать их на выход, в том числе исправляя искаженные поданные на вход образы. К примеру, если после обучения такой сети я подам на вход 1001001, то сеть узнает и исправит запомненный образец, выдав на выходе 1000001. Правда, эта нейронная сеть не толерантна к поворотам и сдвигам образов, и все же для первой нейронной сети своего класса сеть весьма интересна.

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

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

Самоорганизующаяся нейронная сеть

Пример самоорганизующейся нейронной сети – сеть Кохонена. В процессе обучения осуществляется адаптация сети к поставленной задаче. В представленной сети (см. рис. 7) сигнал идет от входа к выходу в прямом направлении. Структура сети имеет один слой нейронов, которые не имеют коэффициентов смещения (тождественно единичных входов). Процесс обучения сети происходит при помощи метода последовательных приближений. Нейронная сеть подстраивается под закономерности входных данных, а не под лучшее значение на выходе. В результате обучения сеть находит окрестность, в которой находится лучший нейрон. Сеть функционирует по принципу «победитель получает все»: этот самый лучший нейрон в итоге на выходе будет иметь 1, а остальные нейроны, сигнал на которых получился меньше, 0. Визуализировать это можно так: представьте, что правый ряд нейронов, выходной, на
рис. 7 – это лампочки. Тогда после подачи на вход сети данных после их обработки на выходе «зажжется» только одна лампочка, указывающая, куда относится поданный объект. Именно поэтому такие сети часто используются в задачах кластеризации и классификации.

Рис. 7. Архитектура самоорганизующейся нейронной сети.

Алгоритмы обучения нейронных сетей

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

Рис. 8. Процесс обучения нейронной сети.

Алгоритмы обучения для нейронной сети бывают с
учителем и без.

  • С учителем: предоставление нейронной сети некоторой выборки обучающих примеров. Образец подается на вход, после происходит обработка внутри нейронной сети и рассчитывается выходной сигнал, сравнивающийся с соответствующим значением целевого вектора (известным нам «правильным ответом» для каждого из обучающих примеров). Если ответ сети не совпадает с требуемым, производится коррекция весов сети, напрямую зависящая от того, насколько отличается ответ сети от правильного (ошибка). Правило этой коррекции называется правилом Видроу-Хоффа и является прямой пропорциональностью коррекции каждого веса и размера ошибки, производной функции активации и входного сигнала нейрона. Именно после изобретения и доработок алгоритма распространения этой ошибки на все нейроны скрытых слоев глубоких нейронных сетей эта область искусственного интеллекта вернула к себе интерес.
  • Без учителя: алгоритм подготавливает веса сети таким образом, чтобы можно было получить согласованные выходные векторы, т.е. предоставление достаточно близких векторов будет давать похожие выходы. Одним из таких алгоритмов обучения является правило Хебба, по которому настраивается перед работой матрица весов, например, рекуррентной сети Хопфилда.

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

Рекуррентные сети на примерах Google и «Яндекса»

Уже упоминавшаяся выше рекуррентная нейронная сеть (RNN) – сеть, которая обладает кратковременной «памятью», из-за чего может быстро производить анализ последовательностей различной длины. RNN разбивает потоки данных на части и производит оценку связей между ними.

Сеть долговременной краткосрочной памяти (Long shortterm memory – LSTM) – сеть, которая появилась в результате развития RNN-сетей. Это интересная модификация RNN-сетей, позволяющая сети не просто «держать контекст», но и умеющая «видеть» долговременные зависимости. Поэтому LSTM подходит для прогнозирования различных изменений при помощи экстраполяции (выявление тенденции на основе данных), а также в любых задачах, где важно умение «держать контекст», особенно хорошо подвластное для данной нейросети.

Рис. 9. Модули рекуррентной нейронной сети.

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

Рис. 10. Модуль LSTM-сети.

LSTM также имеет цепочечную структуру. Отличие состоит в том, что сеть имеет четыре слоя, а не один (рис. 10). Главным отличием LSTM-сети является ее клеточное состояние (или состояние ячейки), которое обозначается горизонтальной линией в верхней части диаграммы и по которой проходит информация (рис. 11). Это самое состояние ячейки напоминает ленту конвейера: она проходит напрямую через всю цепочку, участвуя в некоторых преобразованиях. Информация может как «течь» по ней, не подвергаясь изменениям, так и быть подвергнута преобразованиям со стороны нейросети7. (Представьте себе линию контроля на конвейере: изделия продвигаются на ленте перед сотрудником контроля, который лишь наблюдает за ними, но если ему что-то покажется важным или подозрительным, он может вмешаться).

Рис. 11. Клеточное состояние LSTM-модуля.

LSTM имеет способность удалять или добавлять информацию к клеточному состоянию. Данная способность осуществляется при помощи вентилей, которые регулируют процессы взаимодействия с информацией. Вентиль – возможность выборочно пропускать информацию. Он состоит из сигмоидного слоя нейронной сети и операции поточечного умножения (рис. 12).

Рис. 12. Вентиль.

Сигмоидный слой (нейроны с сигмоидальной функцией активации) подает на выход числа между нулем и единицей, описывая таким образом, насколько каждый компонент должен быть пропущен сквозь вентиль. Ноль – «не пропускать вовсе», один – «пропустить все». Таких «фильтров» в LSTM-сети несколько. Для чего сети нужна эта способность: решать, что важно, а что нет? Представьте себе следующее: сеть переводит предложение и в какой-то момент ей предстоит перевести с английского языка на русский, скажем, местоимение, прилагательное или причастие. Для этого сети необходимо, как минимум, помнить род и/или число предыдущего существительного, к которому переводимое слово относится. Однако как только мы встретим новое существительное, род предыдущего можно забыть. Конечно, это очень упрощенный пример, тем не
менее, он позволяет понять трудность принятия решения: какая информация еще важна, а какую уже можно забыть. Иначе говоря, сети нужно решить, какая информация будет храниться в состоянии ячейки, а затем – что на выходе из нее будет выводить.

Примеры использования нейронных сетей

Мы рассмотрели основные типы нейронных систем и познакомились с принципами их работы. Остановимся теперь на их практическом применении в системах Google Translate, «Яндекс.Алиса», Google Photos и Google Image Search (AlexNet, GoogleNet).

LSTM в Google Translate

Google-переводчик в настоящее время основан на методах машинного обучения и использует принцип работы LSTM-сетей. Система производит вычисления, чтобы понять значение слова или фразы, основываясь на предыдущих значениях в последовательности (контексте). Такой алгоритм помогает системе понимать контекст предложения и верно подбирать перевод среди различных вариантов. Еще несколько лет назад Google Translate работал на основе статистического машинного перевода – это разновидность перевода, где перевод генерируется на основе статистических моделей (бывают: по словам, по фразам, по синтаксису и т.д.), а параметры этих моделей являются результатами анализа корпусов текстов двух выбранных для перевода языков. Эти статистические модели обладали большим быстродействием, однако их эффективность ниже. Общий прирост качества перевода после внедрения системы на основе нейросетей в Google-переводчик составил, казалось бы, не очень много – порядка 10%, однако для отдельных языковых пар эффективность перевода достигла 80-90%,
вплотную приблизившись к оценкам качества человеческого перевода. «Платой» за такое качество перевода является сложность построения, обучения и перенастройки системы на основе нейросети: она занимает недели. Вообще для современных глубоких нейронных сетей, использующихся в таких крупных проектах, в порядке вещей обучение, занимающее дни и недели.

Рис. 13. Рекуррентная двунаправленная нейронная сеть Google-переводчика.

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

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

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

LSTM в «Яндекс.Алисе»

Компания «Яндекс» также использует нейросеть типа LSTM в продукте «Яндекс.Алиса». На рисунке 14 изображено взаимодействие пользователя с системой. После вопроса пользователя информация передается на сервер распознавания, где она преобразуется в текст. Затем текст поступает в классификатор интентов (интент (от англ. intent) – намерение, цель пользователя, которое он вкладывает в запрос), где при помощи машинного обучения анализируется. После анализа интентов они поступают на семантический теггер (tagger) – модель, которая позволяет выделить полезную и требующуюся информацию из предложения. Затем полученные результаты структурируются и передаются в модуль dialog manager, где обрабатывается полученная информация и генерируется ответ.

Рис. 14. Процесс работы сервиса «Яндекс.Алиса».

LSTM-сети применяются в семантическом теггере. В этом модуле используются двунаправленные LSTM с attention. На этом этапе генерируется не только самая вероятная гипотеза, потому что в зависимости от диалога могут потребоваться и другие. От состояния диалога в dialog manager происходит повторное взвешивание гипотез. Сети с долговременной памятью помогают лучше вести диалог с пользователем, потому что могут помнить предыдущие сообщения и более точно генерировать ответы, а также они помогают разрешать много проблемных ситуаций. В ходе диалога нейронная сеть может убирать слова, которые не несут никакой важной информации, а остальные анализировать и предоставлять ответ9. Для примера на рис. 14 результат работы системы будет следующим. Сначала речь пользователя в звуковом формате будет передана на сервер распознавания, который выполнит лексический анализ (т.е. переведет сказанное в текст и разобьет его на слова – лексемы), затем классификатор интентов выполнит уже роль семантического анализа (понимание смысла того, что было сказано; в данном случае – пользователя интересует погода), а семантический теггер выделит полезные элементы информации: теггер выдал бы, что завтра – это дата, на которую нужен прогноз погоды. В итоге данного анализа запроса пользователя будет составлено внутреннее представление запроса – фрейм, в котором будет указано, что интент – погода, что погода нужна на +1 день от текущего дня, а где – неизвестно. Этот фрейм попадет в диалоговый менеджер, который хранит тот самый контекст беседы и будет принимать на основе хранящегося контекста решение, что делать с этим запросом. Например, если до этого беседа не происходила, а для станции с «Яндекс.Алисой» указана геолокация г. Москва, то менеджер получит через специальный интерфейс (API) погоду на завтра в Москве, отправит команду на генерацию текста с этим прогнозом, после чего тот будет передан в синтезатор речи помощника. Если же Алиса до этого вела беседу с пользователем о достопримечательностях Парижа, то наиболее вероятно, что менеджер учтет это и либо уточнит у пользователя информацию о месте, либо сразу сообщит о погоде в Париже. Сам диалоговый менеджер работает на основе скриптов (сценариев обработки запросов) и правил, именуемых form-filling. Вот такой непростой набор технических решений, методов, алгоритмов и систем кроется за фасадом, позволяющим пользователю спросить и узнать ответ на простой бытовой вопрос или команду.

Свёрточные нейронные сети, используемые для классификации изображений, на примере Google Photos и Google Image Search

Задача классификации изображений – это получение на вход начального изображения и вывод его класса (стол, шкаф, кошка, собака и т.д.) или группы вероятных классов, которая лучше всего характеризует изображение. Для людей это совершенно естественно и просто: это один из первых навыков, который мы осваиваем с рождения. Компьютер лишь «видит» перед собой пиксели изображения, имеющие различный цвет и интенсивность. На сегодня задача классификации объектов, расположенных на изображении, является основной для области компьютерного зрения. Данная область начала активно развиваться с 1970-х, когда компьютеры стали достаточно мощными, чтобы оперировать большими объёмами данных. До развития нейронных сетей задачу классификации изображений решали с помощью специализированных алгоритмов. Например, выделение границ изображения с помощью фильтра Собеля и фильтра Шарра или использование гистограмм градиентов10. С появлением более мощных GPU, позволяющих значительно эффективнее обучать нейросеть, применение нейросетей в сфере компьютерного зрения значительно возросло.

В 1988 году Ян Лекун предложил свёрточную архитектуру нейросети, нацеленную на классификацию изображений. А в 2012 году сеть AlexNet, построенная по данной архитектуре, заняла первое место в конкурсе по распознаванию изображений ImageNet, имея ошибку распознавания равную 15,3%12. Свёрточная архитектура нейросети использует некоторые особенности биологического распознавания образов, происходящих в мозгу человека. Например, в мозгу есть некоторые группы клеток, которые активируются, если в определённое поле зрения попадает горизонтальная или вертикальная граница объекта. Данное явление обнаружили Хьюбель и Визель в 1962 году. Поэтому, когда мы смотрим на изображение, скажем, собаки, мы можем отнести его к конкретному классу, если у изображения есть характерные особенности, которые можно идентифицировать, такие как лапы или четыре ноги. Аналогичным образом компьютер может выполнять классификацию изображений через поиск характеристик базового уровня, например, границ и искривлений, а затем — с помощью построения более абстрактных концепций через группы сверточных слоев.

Рис. 15. Архитектура свёрточной сети AlexNet.

Рассмотрим подробнее архитектуру и работу свёрточной нейросети (convolution neural network) на примере нейросети AlexNet (см. рис. 15). На вход подаётся изображение 227х227 пикселей (на рисунке изображено желтым), которое необходимо классифицировать (всего 1000 возможных классов). Изображение цветное, поэтому оно разбито по трём RGB-каналам. Наиболее важная операция – операция свёртки.

Операция свёртки (convolution) производится над двумя матрицами A и B размера [axb] и [cxd], результатом которой является матрица С размера

, где s – шаг, на который сдвигают матрицу B. Вычисляется результирующая матрица следующим образом:

см. рис. 16.

Рисунок 16. Операция свёртки15: Исходная матрица A обозначена голубым цветом (имеет большую размерность), ядро свертки – матрица B — обозначена темно-синим цветом и перемещается по матрице A; результирующая матрица изображена зеленым, при этом соответствующая каждому шагу свертки результирующая ячейка отмечена темно-зеленым.

Рис. 16. Операция свёртки.

Чем больше результирующий элемент ci,j,, тем более похожа область матрицы A на матрицу B. A называют изображением, а B – ядром или фильтром. Обычно шаг смещения B равен s = 1. Если увеличить шаг смещения, можно добиться уменьшения влияния соседних пикселей друг на друга в сумме (уменьшить рецептивное поле восприятия нейросети), в подавляющем большинстве случаев шаг оставляют равным 1. На рецептивное поле также влияет и размер ядра свёртки. Как видно из рис. 16, при свёртке результат теряет в размерности по сравнению с матрицей A. Поэтому, чтобы избежать данного явления, матрицу A дополняют ячейками (padding). Если этого не сделать, данные при переходе на следующие слои будут теряться слишком быстро, а информация о границах слоя будет неточной.

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

Данный пример свёртки (см. рис. 16) был одномерным и подходит, например, для черно-белого изображения. В случае цветного изображения операция свёртки происходит следующим образом: в один фильтр включены три ядра, для каждого канала RGB соответственно, над каждым каналом операция свёртки происходит идентично примеру выше, затем три результирующие матрицы поэлементно складываются — и получается результат работы одного
фильтра – карта признаков.

Эта на первый взгляд непростая с математической точки зрения процедура нужна для выделения тех самых границ и искривлений – контуров изображения, при помощи которых, по аналогии с мозгом человека, сеть должна понять, что же изображено на картинке. Т.е. на карте признаков будут содержаться выделенные характеристические очертания детектированных объектов. Эта карта признаков будет являться результатом работы чередующихся слоев свертки и пулинга (от англ. pooling, или иначе – subsampling layers). Помните, в разделе описания концепции архитектуры сверточных сетей мы говорили, что эти слои чередуются и их наборы могут повторяться несколько раз (см. рис. 5)? Для чего это нужно? После свертки, как мы знаем, выделяются и «заостряются» некие характеристические черты анализируемого изображения (матрицы пикселей) путем увеличения значений соответствующих ядру ячеек матрицы и «занулению» значений других. При операции субдискретизации, или пулинга, происходит уменьшение размерности сформированных отдельных карт признаков. Поскольку для сверточных нейросетей считается, что информация о факте наличия искомого признака важнее точного знания его координат на изображении, то из нескольких соседних нейронов карты признаков выбирается максимальный и принимается за один нейрон уплотнённой карты признаков меньшей размерности. За счёт данной операции, помимо ускорения дальнейших вычислений, сеть становится также более инвариантной к масштабу входного изображения, сдвигам и поворотам изображений. Данное чередование слоев мы видим и для данной сети AlexNet (см. рис. 15), где слои свертки (обозначены CONV) чередуются с пулингом (обозначены эти слои как POOL), при этом следует учитывать, что операции свертки тем ресурсозатратнее, чем больше размер ядра свертки (матрицы B на рис. 16), поэтому иногда, когда требуется свертка с ядром достаточно большой размерности, ее заменяют на две и более последовательных свертки с ядром меньших
размерностей. (Об этом мы поговорим далее.) Поэтому на рис. 15 мы можем увидеть участок архитектуры AlexNet, на котором три слоя CONV идут друг за другом.

Самая интересная часть в сети – полносвязный слой в конце. В этом слое по вводным данным (которые пришли с предыдущих слоев) строится и выводится вектор длины N, где N – число классов, по которым мы бы хотели классифицировать изображение, из них программа выбирает нужный. Например, если мы хотим построить сеть по распознаванию цифр, у N будет значение 10, потому что цифр всего 10. Каждое число в этом векторе представляет собой вероятность конкретного класса. Например, если результирующий вектор для распознавания цифр это [0 0.2 0 0.75 0 0 0 0 0.05], значит существует 20% вероятность, что на изображении «1», 75% вероятность – что «3», и 5% вероятность – что «9». Если мы хотим сеть по распознаванию букв латинского алфавита, то N должно быть равным 26 (без учета регистра), а если и буквы, и цифры вместе, то уже 36. И т.д. Конечно, это очень упрощенные примеры. В сети AlexNet конечная размерность выхода (изображена на рис. 15 зеленым) — 1000, а перед этим идут еще несколько полносвязных слоев с размерностями входа 9216 и выхода 4096 и обоими параметрами 4096 (изображены оранжевым и отмечены FC – full connected — на рисунке).

Способ, с помощью которого работает полносвязный слой, – это обращение к выходу предыдущего слоя (который, как мы помним, должен выводить высокоуровневые карты свойств) и определение свойств, которые больше связаны с определенным классом. Поэтому в результате работы окончания сверточной сети по поданному на вход изображению с лужайкой, на которой, скажем, собака гоняется за птичкой, упрощенно можно сказать, что результатом может являться следующий вывод:
[dog (0.6), bird (0.35), cloud (0.05)].

Свёрточная нейронная сеть GoogleNet

В 2014 году на том же соревновании ImageNet, где была представлена AlexNet, компания Google показала свою свёрточную нейросеть под названием GoogleNet. Отличительная особенность этой сети была в том, что она использовала в 12 раз меньше параметров (почувствуйте масштабы: 5 000 000 против 60 000 000) и её архитектура структурно была не похожа на архитектуру AlexNet, в которой было восемь слоёв, причём данная сеть давала более точный результат – 6,67% ошибки против 16,4%16.

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

Проанализируем приём, на который пошли разработчики компании Google для оптимизации скорости и использования памяти. В нейросети GoogleNet свёртка с размером фильтра 7×7 используется один раз в начале обработки изображения, далее максимальный размер – 5×5. Так как количество параметров при свёртке растёт квадратично с увеличением размерности ядра, нужно стараться заменять одну свёртку на несколько свёрток с меньшим размером фильтра, вместе с этим пропустить промежуточные результаты через ReLU (функция активации, возвращающая 0, если сигнал отрицателен, и само значение сигнала, если нет), чтобы внести дополнительную нелинейность. Например, свёртку с размером фильтра 5×5 можно заменить двумя последовательными операциями с размером ядра 3×3. Такая оптимизация позволяет строить более гибкие и глубокие сети. На хранение промежуточных свёрток тратится память, и использовать их более разумно в слоях, где размер карты признаков небольшой. Поэтому в начале сети GoogleNet вместо трёх свёрток 3×3 используется одна 7×7, чтобы избежать избыточного использования памяти.

Рис. 17. Первая реализация блока Inception.

Схему архитектуры сети целиком мы приводить здесь не будем, она слишком громоздка и на ней трудно что-либо разглядеть, кому это будет интересно, могут ознакомиться с ней на официальном ресурсе16. Отличительной особенностью нейросети от компании Google является использование специального модуля – Inception (см. рис. 17). Данный модуль, по своей сути, является небольшой локальной сетью. Идея данного блока состоит в том, что на одну карту признаков накладывается сразу несколько свёрток разного размера, вычисляющихся параллельно. В конце все свёртки объединяются в единый блок. Таким образом, можно из исходной карты признаков извлечь признаки разного размера, увеличив эффективность сети и точность обработки признаков. Однако при использовании данной реализации (см. рис. 17) нужно выполнить колоссальный объём вычислений, между тем, при включении данных модулей друг за другом размерность блока будет только расти. Поэтому разработчики во второй версии добавили свёртки, уменьшающие размерность (см. рис. 18).

Рис. 18. Вторая реализация блока Inception.

Жёлтые свёртки размера 1×1 введены для уменьшения глубины блоков, и благодаря им, значительно снижается нагрузка на память. GoogleNet содержит девять таких Inception-модулей и состоит из 22 слоёв.

Из-за большой глубины сети разработчики также столкнулись с проблемой затухания градиента при обучении (см. описание процедуры обучения нейросети: коррекция весов осуществляется в соответствии со значением ошибки, производной функции активации – градиента – и т.д.) и ввели два вспомогательных модуля классификатора (см. рис. 19). Данные модули представляют собой выходную часть малой свёрточной сети и уже частично классифицируют объект по внутренним характеристикам самой сети. При обучении нейронной сети данные модули не дают ошибке, распространяющиейся с конца, сильно уменьшиться, так как вводят в середину сети дополнительную ошибку.

Рис. 19. Вспомогательный модуль GoogleNet, использующийся при обучении сети.

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

В 2015 году разработчики из Google представили модифицированный модуль Inception v2, в котором свёртка 5×5 была заменена на две свёртки 3×3, по причинам, приведённым выше, вдобавок потери информации в картах признаков при таком действии происходят незначительные, так как соседние ячейки имеют между собой сильную корреляционную связь. Также, если заменить свёртку 3×3 на две последовательные свёртки 3×1 и 1×3, то это будет на 33% эффективнее, чем стандартная свёртка, а две свёртки 2×2 дадут выигрыш лишь в 11%17. Данная архитектура нейросети давала ошибку 5,6%, а потребляла ресурсов в 2,5 раза меньше.

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

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

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

К недостаткам данной архитектуры можно отнести следующие: состав сети (количество её слоёв, функция активации, размерность свёрток, размерность pooling-слоёв, очередность слоёв и т.п.) необходимо подбирать эмпирически к определённому размеру и виду
изображения; сложность обучения: нейросети с хорошим показателем ошибки должны тренироваться на мощных GPU долгое время; и, наверное, главный недостаток – атаки на данные нейросети. Инженеры Google в 2015 году показали, что к картинке можно подмешать невидимый для человеческого зрения градиент, который приведёт к неправильной классификации.

Нейронные сети — всё по этой теме для программистов

Тест: что реально, а что создала нейросеть?

Нейросеть искусно имитирует людей, котиков и даже картины. Проверьте, сможете ли вы отличить реальное от того, что создали нейросети.

Чего ждать в сфере ИИ и машинного обучения в 2021 году?

Нейросети становится умнее с каждым годом. Рассказываем о том, чего ждать в сфере ИИ и машинного обучения в 2021 году

hent-AI: нейросеть, которая убирает цензуру из аниме

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

Как работает нейронная сеть — простое объяснение на цветочках

В этом видео автор на простом примере объясняет принципы работы линейного слоя нейронной сети и базовые термины.

Правильный NLP: как работают и что умеют системы обработки естественного языка

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

Как с помощью нейросети стилизовать изображение под работу известного художника: разбираемся с нейронным переносом стиля

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

Какие из этих нейросетей мы выдумали? Тест-угадайка от Tproger и ABBYY

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

Что такое нейронная сеть и как она работает — основы простым языком

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

Проекты искусственного интеллекта, с которыми можно поиграться уже сегодня

Статья расскажет о применении искусственного интеллекта и машинного обучения на практике. Обучение осуществляется в игровой форме.

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

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

GPU — это не только про игры: четыре примера с NVIDIA GTC 2019

По итогам NVIDIA GTC 2019 собрали для вас четыре современных примера применения GPU: технологические тренды, за которые стоит зацепиться айтишникам.

Кто это нарисовал — нейросеть или художник? Тест-угадайка от Tproger и «Системный Блокъ»

Сможет ли робот превратить кусок холста в произведение искусства? А если это нейросеть, обученная на великих картинах? Почувствуйте всю силу современных технологий в тесте «Нейросеть или художник», который мы сделали…

«Умная» колонка, наушники с технологией открытого звука и мультиподписка на сервисы: итоги конференции YaC 2018

Приглашенные спикеры рассказали об использовании цифровых технологий в сферах торговли, маркетинга и информационных технологий.

Инструменты для работы с интернетом вещей и звонки в смешанной реальности: обзор конференции Microsoft Build 2018

7 мая 2018 года началась ежегодная конференция для разработчиков Microsoft Build 2018. Компания рассказала о наступлении эры «умных» устройств и представила новые продукты.

Как работает беспилотный транспорт

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

Пишем нейросеть на Go с нуля

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

Курс «Нейронные сети»

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

Курс «Введение в компьютерное зрение»

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

Обучение автопилота на Python в Grand Theft Auto V

Достаточно известный среди любителей языка Python разработчик по имени Гаррисон «Sentdex» Кинсли выпустил очередной курс, «Python Plays GTA V».

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

В статье подробно описывается пример создания нейронной сети для классификации текста при помощи TensorFlow. Материал понятен даже без спецподготовки.

Нейронная сеть помогает писать код для нейронных сетей: обзор инструмента Neural Complete

На GitHub появился интерфейс для автозаполнения Neural Complete. Это нейронная сеть, которая помогает писать код для создания нейронных сетей.

Машинное обучение и нейронные сети на PHP: библиотека PHP-ML

Согласно Википедии, машинное обучение (англ. Machine Learning) — обширный подраздел искусственного интеллекта, математическая дисциплина, использующая разделы математической статистики, численных методов оптимизации, теории вероятностей, дискретного анализа, и извлекающая знания из данных.

Подборка материалов для изучения машинного обучения

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

Разнообразие нейронных сетей. Часть вторая. Продвинутые конфигурации

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

Шпаргалка по разновидностям нейронных сетей. Часть первая. Элементарные конфигурации

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

10 полезных книг по машинному обучению

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

Первые шаги искусственного интеллекта

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

Изучаем нейронные сети за четыре шага

Рассказывает Per Harald Borgen  В этот раз я решил изучить нейронные сети. Базовые навыки в этом вопросе я смог получить за лето и осень 2015 года. Под базовыми навыками я…

Линус «Москвич» Торвальдс: какие автомобили распознает нейронная сеть в известных программистах

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

9 новых технологий, которые вы можете освоить за лето и стать ценнее на рынке труда

Сегодня IT развивается так быстро, как никогда. Многие вещи, бывшие общепринятыми ещё каких-то пару лет назад, сегодня уже не используется. И наоборот — появилась куча крутых штук, от которых фанатеют все программисты:…

Изучаем нейронные сети: с чего начать

В данной статье собраны материалы — в основном русскоязычные — для базового изучения искусственных нейронных сетей.

Сохранение нейронной сети в JSON и другое: обучаем нейронную сеть на JavaScript

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

Изучаем нейронные сети за четыре шага

Рассказывает Per Harald Borgen 


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

Шаг 1. Нейроны и метод прямого распространения

Так что же такое «нейронная сеть»? Давайте подождём с этим и сперва разберёмся с одним нейроном.

Нейрон похож на функцию: он принимает на вход несколько значений и возвращает одно.

Круг ниже обозначает искусственный нейрон. Он получает 5 и возвращает 1. Ввод — это сумма трёх соединённых с нейроном синапсов (три стрелки слева).

В левой части картинки мы видим 2 входных значения (зелёного цвета) и смещение (выделено коричневым цветом).

Входные данные могут быть численными представлениями двух разных свойств. Например, при создании спам-фильтра они могли бы означать наличие более чем одного слова, написанного ЗАГЛАВНЫМИ БУКВАМИ, и наличие слова «виагра».

Входные значения умножаются на свои так называемые «веса», 7 и 3 (выделено синим).

Теперь мы складываем полученные значения со смещением и получаем число, в нашем случае 5 (выделено красным). Это — ввод нашего искусственного нейрона.

Потом нейрон производит какое-то вычисление и выдает выходное значение. Мы получили 1, т.к. округлённое значение сигмоиды в точке 5 равно 1 (более подробно об этой функции поговорим позже).

Если бы это был спам-фильтр, факт вывода 1 означал бы то, что текст был помечен нейроном как спам.

Иллюстрация нейронной сети с Википедии.

Если вы объедините эти нейроны, то получите прямо распространяющуюся нейронную сеть — процесс идёт от ввода к выводу, через нейроны, соединённые синапсами, как на картинке слева.

Я очень рекомендую посмотреть серию видео от Welch Labs для улучшения понимания процесса.

Шаг 2. Сигмоида

После того, как вы посмотрели уроки от Welch Labs, хорошей идеей было бы ознакомиться с четвертой неделей курса по машинному обучению от Coursera, посвящённой нейронным сетям — она поможет разобраться в принципах их работы. Курс сильно углубляется в математику и основан на Octave, а я предпочитаю Python. Из-за этого я пропустил упражнения и почерпнул все необходимые знания из видео.

Сигмоида просто-напросто отображает ваше значение (по горизонтальной оси) на отрезок от 0 до 1.

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

Но на одних видео далеко не уедешь. Для полного понимания я решил закодить её самостоятельно. Поэтому я начал писать реализацию алгоритма логистической регрессии (который использует сигмоиду).

Это заняло целый день, и вряд ли результат получился удовлетворительным. Но это неважно, ведь я разобрался, как всё работает. Код можно увидеть здесь.

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

Шаг 3. Метод обратного распространения ошибки

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

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

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

Скриншот из руководства Мэтта Мазура по методу обратного распространения ошибки.

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

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

Шаг 4. Создание своей нейронной сети

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

Ещё одной полезной статьёй оказалась A Neural Network in 11 lines of Python от IAmTrask. В ней содержится удивительное количество знаний, сжатых до 11 строк кода.

Скриншот руководства от IAmTrask

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

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

После этого можно ознакомиться с руководством Wild ML от Denny Britz, в котором разбираются нейронные сети посложнее.

Скриншот из руководства WildML

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

Для поиска хороших наборов данных можете посетить мой сайт Datasets.co и выбрать там подходящий.

Так или иначе, теперь вам лучше начать свои эксперименты, чем слушать мои советы. Лично я сейчас изучаю Python-библиотеки для программирования нейронных сетей, такие как Theano, Lasagne и nolearn.

Удачи!

Перевод статьи «Learning How To Code Neural Networks»

Нейронная сеть (Neural network) · Loginom Wiki

Синонимы: Нейросеть, Искусственная нейронная сеть, Neural net

Разделы: Алгоритмы

Loginom: Нейросеть (классификация) (обработчик), Нейросеть (регрессия) (обработчик)

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

Нейронные сети могут реализоваться как программно, так и аппаратно (нейрочипы, нейрокомпьютеры).

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

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

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

Наиболее часто нейронные сети используются для решения следующих задач:

  • Аппроксимация функций — восстановление функциональных зависимостей из обучающих данных.
  • Классификация — определение принадлежности входного образа (объекта), представленного вектором признаков, к одному из предварительно заданных классов.
  • Кластеризация — группировка объектов на основе близости их свойств.
  • Прогнозирование — предсказание значения y(tn+1) при заданной последовательности y(t1),y(t2),…,y(tn).
  • Оптимизация — нахождение решения, удовлетворяющего системе ограничений и максимизирующим или минимизирующим целевую функцию.
  • Ассоциативная память — память, адресуемая по содержанию, используемая в системах сверхбыстрого поиска.
  • Управление — расчет такого входного воздействия на систему, при котором она следует по желаемой траектории.
  • Распознавание речи и машинный перевод.

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

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

Two-Class нейронная сеть: Справочник по модулям — Azure Machine Learning



  • Чтение занимает 4 мин

В этой статье

В этой статье описывается модуль в конструкторе Машинное обучение Azure.This article describes a module in Azure Machine Learning designer.

Этот модуль применяется для создания модели нейронной сети, которая может использоваться для прогнозирования цели, имеющей только два значения.Use this module to create a neural network model that can be used to predict a target that has only two values.

Классификация, использующая нейронные сети, является защищенным методом обучения и поэтому требует наличия набора данных с тегами , который включает столбец меток.Classification using neural networks is a supervised learning method, and therefore requires a tagged dataset , which includes a label column. Например, эту модель нейронной сети можно использовать для прогнозирования двоичных результатов, таких как наличие определенного болезни или отсутствия пациента, а также вероятность сбоя компьютера в течение заданного периода времени.For example, you could use this neural network model to predict binary outcomes such as whether or not a patient has a certain disease, or whether a machine is likely to fail within a specified window of time.

После определения модели обучить ее, предоставив набор данных с тегами и модель в качестве входных данных для обучения модели.After you define the model, train it by providing a tagged dataset and the model as an input to Train Model. Обученную модель затем можно использовать для прогнозирования значений новых входных данных.The trained model can then be used to predict values for new inputs.

Дополнительные сведения о нейронных сетяхMore about neural networks

Нейронная сеть — это набор взаимосвязанных слоев.A neural network is a set of interconnected layers. Входные данные являются первым слоем и подключены к выходному слою с помощью ациклический графа, состоящего из взвешенных ребер и узлов.The inputs are the first layer, and are connected to an output layer by an acyclic graph comprised of weighted edges and nodes.

Между входным и выходным слоями можно вставить несколько скрытых слоев.Between the input and output layers you can insert multiple hidden layers. Большинство задач прогнозирования можно легко выполнить только с одним или несколькими скрытыми слоями.Most predictive tasks can be accomplished easily with only one or a few hidden layers. Однако последние исследования показали, что глубокие нейронные сети (DNN) с множеством уровней могут быть эффективными в сложных задачах, таких как распознавание изображений или речи.However, recent research has shown that deep neural networks (DNN) with many layers can be effective in complex tasks such as image or speech recognition. Последовательные уровни используются для моделирования повышения глубины семантики.The successive layers are used to model increasing levels of semantic depth.

Связь между входными и выходными данными изучена при обучении нейронной сети входных данных.The relationship between inputs and outputs is learned from training the neural network on the input data. Направление графа продолжается с входных данных через скрытый слой и на выходной слой.The direction of the graph proceeds from the inputs through the hidden layer and to the output layer. Все узлы слоя соединены по взвешенным краям к узлам следующего слоя.All nodes in a layer are connected by the weighted edges to nodes in the next layer.

Чтобы вычислить выходные данные сети для определенных входных данных, значение вычисляется на каждом узле в скрытых слоях и на выходном слое.To compute the output of the network for a particular input, a value is calculated at each node in the hidden layers and in the output layer. Значение задается путем вычисления взвешенной суммы значений узлов из предыдущего слоя.The value is set by calculating the weighted sum of the values of the nodes from the previous layer. Затем функция активации применяется к этой взвешенной сумме.An activation function is then applied to that weighted sum.

Порядок настройкиHow to configure

  1. Добавьте модуль нейронной сети из двух классов в конвейер.Add the Two-Class Neural Network module to your pipeline. Этот модуль можно найти в разделе машинное обучение , Инициализация в категории классификация .You can find this module under Machine Learning , Initialize , in the Classification category.

  2. Укажите, как должна быть обучена модель, установив параметр » создать режим инструктора «.Specify how you want the model to be trained, by setting the Create trainer mode option.

    • Один параметр : Выберите этот параметр, если вы уже знакомы с тем, как вы хотите настроить модель.Single Parameter : Choose this option if you already know how you want to configure the model.

    • Диапазон параметров. Если вы не знаете наилучших параметров, оптимальные параметры можно найти с помощью модуля Настройка модели параметры .Parameter Range : If you are not sure of the best parameters, you can find the optimal parameters by using the Tune Model Hyperparameters module. Вы предоставляете некоторый диапазон значений, и преподаватель выполняет итерацию по нескольким сочетаниям параметров, чтобы определить сочетание значений, которое дает наилучший результат.You provide some range of values, and the trainer iterates over multiple combinations of the settings to determine the combination of values that produces the best result.

  3. В поле Спецификация скрытого слоя выберите тип создаваемой сетевой архитектуры.For Hidden layer specification , select the type of network architecture to create.

    • Полностью подключенное обращение. использует архитектуру нейронной сети по умолчанию, определенную для нейронных сетей двух классов следующим образом:Fully connected case : Uses the default neural network architecture, defined for two-class neural networks as follows:

      • Имеет один скрытый слой.Has one hidden layer.

      • Выходной слой полностью подключен к скрытому слою, а скрытый слой полностью подключен к входному слою.The output layer is fully connected to the hidden layer, and the hidden layer is fully connected to the input layer.

      • Количество узлов во входном слое равно числу характеристик в обучающих данных.The number of nodes in the input layer equals the number of features in the training data.

      • Число узлов в скрытом слое задается пользователем.The number of nodes in the hidden layer is set by the user. Значение по умолчанию — 100.The default value is 100.

      • Число узлов равно числу классов.The number of nodes equals the number of classes. Для нейронной сети с двумя классами это означает, что все входные данные должны сопоставляться с одним из двух узлов на выходном слое.For a two-class neural network, this means that all inputs must map to one of two nodes in the output layer.

  4. Для курса обучения Определите размер шага, выполняемого на каждой итерации, перед исправлением.For Learning rate , define the size of the step taken at each iteration, before correction. Более высокое значение скорости обучения может ускорить сходимость модели, однако возможны промахи на локальных минимумах.A larger value for learning rate can cause the model to converge faster, but it can overshoot local minima.

  5. Для количества итераций обучения укажите максимальное число раз, которое алгоритм должен обработать обучающие варианты.For Number of learning iterations , specify the maximum number of times the algorithm should process the training cases.

  6. В поле начальный диаметр веса для обучения укажите весовые коэффициенты узлов в начале процесса обучения.For The initial learning weights diameter , specify the node weights at the start of the learning process.

  7. Для этого укажите весовой коэффициент, применяемый при обучении узлов из предыдущих итераций.For The momentum , specify a weight to apply during learning to nodes from previous iterations

  8. Выберите вариант случайный выбор, чтобы перемешать варианты между итерациями.Select the Shuffle examples option to shuffle cases between iterations. Если снять этот флажок, варианты будут обрабатываться в точно таком же порядке при каждом запуске конвейера.If you deselect this option, cases are processed in exactly the same order each time you run the pipeline.

  9. В поле Начальное число случайных чисел введите значение, которое будет использоваться в качестве начального значения.For Random number seed , type a value to use as the seed.

    Указание начального значения полезно, если необходимо обеспечить повторяемость во время выполнения одного конвейера.Specifying a seed value is useful when you want to ensure repeatability across runs of the same pipeline. В противном случае в качестве начального значения используется системное значение системных часов, что может привести к слегка разным результатам при каждом запуске конвейера.Otherwise, a system clock value is used as the seed, which can cause slightly different results each time you run the pipeline.

  10. Добавьте в конвейер набор данных с меткой и обучить модель:Add a labeled dataset to the pipeline, and train the model:

    • Если присвоить параметру создать режим инструктора значение Single, подключить набор данных с тегами и модуль обучение модели .If you set Create trainer mode to Single Parameter , connect a tagged dataset and the Train Model module.

    • Если задать режим создания инструктора в диапазоне параметров , подключите набор данных с тегами и обучите модель с помощью параметров настройки модели.If you set Create trainer mode to Parameter Range , connect a tagged dataset and train the model by using Tune Model Hyperparameters.

    Примечание

    При передаче диапазона параметров для обучения моделииспользуется только значение по умолчанию в списке с одним параметром.If you pass a parameter range to Train Model, it uses only the default value in the single parameter list.

    Если передать один набор значений параметров в модуль Настройка модели настройки , когда он ожидает диапазон параметров для каждого параметра, он пропускает значения и использует значения по умолчанию для учений.If you pass a single set of parameter values to the Tune Model Hyperparameters module, when it expects a range of settings for each parameter, it ignores the values, and uses the default values for the learner.

    Если выбрать параметр диапазон параметров и ввести одно значение для любого параметра, это единственное заданное значение будет использоваться во время очистки, даже если другие параметры меняются в диапазоне значений.If you select the Parameter Range option and enter a single value for any parameter, that single value you specified is used throughout the sweep, even if other parameters change across a range of values.

  11. Отправьте конвейер.Submit the pipeline.

РезультатыResults

После завершения обучения:After training is complete:

  • Чтобы сохранить моментальный снимок обученной модели, выберите вкладку выходные данные в правой панели модуля обучение модели .To save a snapshot of the trained model, select the Outputs tab in the right panel of the Train model module. Щелкните значок зарегистрировать набор данных , чтобы сохранить модель как модуль для повторного использования.Select the Register dataset icon to save the model as a reusable module.

  • Чтобы использовать модель для оценки, добавьте модуль оценки модели в конвейер.To use the model for scoring, add the Score Model module to a pipeline.

Дальнейшие действияNext steps

Ознакомьтесь с набором доступных модулей в службе Машинного обучения Azure.See the set of modules available to Azure Machine Learning.



Сверточные нейронные сети с нуля. Используем NumPy для разработки… | by Bohdan Balov

Используем NumPy для разработки сверточной нейронной сети.

Внимание! Данная статья является переводом. Оригинал можно найти по этой ссылке.

Когда Ян ЛеКун опубликовал свою работу, посвященную новой нейросетевой архитектуре [1], получившей название CNN (Convolutional Neural Network), она не произвела достаточного впечатления на мир науки и техники и долгое время оставалась незамеченной. Потребовалось 14 лет и огромные усилия команды исследователей из Торонтского университета, чтобы донести до общества всю ценность открытий Яна ЛеКуна.

Все изменилось в 2012 году, когда состоялись соревнования по компьютерному зрению на основе базы данных ImageNet. Алекс Крижевский и его команда разработали сверточную нейронную сеть, которая способна классифицировать миллионы изображений из тысяч различных категорий с ошибкой всего в 15.8% [2].

В наше время сверточные сети развились до такого уровня, что они превосходят человеческие способности! [3] Взгляните на статистику на рис. 1.

Рис. 1. Статистика ошибок, совершенных в процессе анализа данных ImageNet за 2010—2015. Источник.

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

Ричард Фейнман как-то отметил: “Я не могу понять то, что не могу построить”. Вот я и “построил” с нуля сверточную нейронную сеть на Python, чтобы самостоятельно “прощупать” все интересующие меня моменты. Как только я закончил с программированием, стало ясно, что нейронные сети не настолько и сложные, как это кажется на первый взгляд. Вы сами в этом убедитесь, когда пройдете со мной этот путь от начала и до конца.

Весь код, который я буду приводить в этой статье, можно найти здесь.

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

Один из самых распространенных бенчмарков для оценки скорости работы алгоритма компьютерного зрения является его обучение на базе данных MNIST. Она представляет из себя коллекцию из 70 тыс. написанных от руки цифр (от 0 до 9). Задача заключается в разработке настолько точного алгоритма распознавания цифр, насколько это возможно.

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

Рис. 2. Образец цифр из базы данных MNIST. Источник.

Давайте по отдельности рассмотрим компоненты, формирующие сверточную нейронную сеть, и объединим эти знания, чтобы в конечном итоге понять, каким образом формируются предсказания. После рассмотрения каждого компонента мы запрограммируем нейронную сеть на Python с использованием библиотеки NumPy и обучим ее. (Готовый код можно найти тут.)

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

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

Если вы готовы, давайте двигаться дальше.

Свертки

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

Рис. 3. Операция свертки. Источник.

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

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

На рисунках 4 и 5 приведен пример, наглядно представляющий операцию свертки. Фильтр, ответственный за поиск левосторонних кривых, перемещается вдоль исходного изображения. Когда рассматриваемый в данный момент фрагмент содержит искомую кривую, результатом свертки будет большое число (6600 в нашем случае). Но когда фильтр перемещается на позицию, где нет левосторонней кривой, результатом свертки выступает маленькое число (в нашем случае — нуль).

Рис. 4. Фильтр “ищет” левосторонние кривые. Результат положительный. Источник.Рис. 5. Фильтр “ищет” левосторонние кривые. Результат отрицательный. Источник.

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

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

Следует обратить внимание на то, что количество каналов фильтра должно соответствовать количеству каналов исходного изображения; только тогда операция свертки будет производить должный эффект. Например, если исходная картинка состоит из трех каналов (RGB: Red, Green, Blue), фильтр также должен иметь три канала.

Рис. 6. Процесс свертки двумерной матрицы. Источник.

Фильтр может перемещаться вдоль матрицы входных сигналов с шагом, отличным от единицы. Шаг перемещения фильтра называется страйдом (stride). Страйд определяет, на какое количество пикселов должен сместиться фильтр за один присест.

Ф-ла 1. Позволяет рассчитать кол-во выходных значений после операции свертки.

Количество выходных значений после операции свертки может быть рассчитано по формуле 1. Где n_in — кол-во входных пикселов, f — кол-во пикселов в фильтре, s — страйд. Для примера на рис. 6 даную формулу следует применить таким образом: (25-9)/2+1=3.

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

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

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

Часто в качестве функции активации используют ReLU (Rectified Linear Unit). Ее график изображен на рис. 7.

Рис. 7. Функция ReLU. Источник.

Как вы можете видеть, эта функция довольно-таки проста. Входные значения, меньшие или равные нулю, превращаются в нуль; значения, превышающие нуль, не изменяются.

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

Программирование сверток

Благодаря библиотеке NumPy программирование сверток не составит большого труда.

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

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

Сниппет 1. Операция свертки.

Значение filt инициализировано с помощью нормального распределения. Смещение bias — вектор, заполненный нулями.

После одного или двух сверточных слоев обычно производится редуцирование промежуточного результата. Смотрите на редуцирование как на понижение количества данных с сохранением общего смысла. В машинном обучении для определения редукции часто применяют термин даунсемплинг (downsampling).

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

Операция максимального объединения заключается в том, что вдоль данных перемещается так называемое окно просеивания. Из пикселов, попадающих в его поле зрения, отбирается максимальный и перемещается в результирующую матрицу. Страйд для данного окна может быть отличным от единицы; все зависит от того, какого размера выходную матрицу нужно получить, и с какой степенью нужно “ужать” данные.

Посмотрите внимательно на рис. 8. На нем наглядно изображена операция максимального объединения: окно размерностью 2×2 перемещается вдоль матрицы; страйд имеет значение 2. Как вы помните, страйд определяет шаг, на который перемещается окно за один этап. На каждом этапе отбирается максимальное значение. Исходная матрица якобы просеивается через сито, которое выдает наружу только характерные пикселы.

Рис. 8.Операция максимального объединения. Источник.

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

Количество выходных пикселов после применения максимального объединения можно рассчитать по формуле 2. В этой формуле n_in — количество входных пикселов, f — количество пикселов просеивающего окна, s — величина страйда.

Формула 2. Позволяет рассчитать количество выходных пикселов после применения максимального объединения.

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

Программирование “максимального объединения”

Реализация операции максимального объединения сводится к применению цикла for на самом верхнем уровне, в рамках которого будут присутствовать два цикла while. Цикл for нужен для того, чтобы перебрать все каналы изображения. Задача же циклов while заключается в перемещении “просеивающего окна” вдоль изображения. На каждом этапе отбора пиксела захваченного фрагмента матрицы будет применена функция max, входящая в состав библиотеки NumPy с целью поиска максимального значения.

Сниппет 2. Функция для выполнения “максимального объединения”.

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

Полносвязный слой

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

Рис. 9. Развертывание двумерной матрицы в вектор. Источник.

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

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

Рис. 10. Взаимодействие сверточных слоев с многослойным перцептроном. Источник.

Стоит отметить, что Ян ЛеКун в этом посте на Фейсбуке сказал, что “в сверточных нейронных сетях нет такого понятия, как полносвязный слой”. И он совершенно прав! Если внимательно присмотреться, то станет совершенно очевидно, что принцип работы полносвязного слоя аналогичен тому, что имеет место в сверточном слое с кернелом размерностью 1×1. То есть, если в нашем распоряжении 128 фильтров размерностью n×n, которые будут взаимодействовать с изображением размерностью n×n, на выходе мы получим вектор, в котором будет 128 элементов.

Программирование полносвязного слоя

P.S. В оригинальной статье существуют попытки разделения понятий “fully connected layer” и “dense layer”. В действительности же данные понятия являются синонимами. Хорошее объяснения этих (и некоторых других) “скользких” понятий приведено на этом форуме. (Простите, но там все на английском.)

Благодаря NumPy программирование полносвязного слоя — задача чересчур простая. Как видно из нижеприведенного сниппета, будет достаточно всего нескольких строк кода. (Обратите внимание на метод reshape; он всегда облегчает жизнь программистам нейронных сетей.)

Сниппет 3. “Разворачивание” матрицы в вектор.

Развернутые матрицы далее пропускаются через полносвязный слой. Данная конструкция имеет огромное количество связей. Например, если в полносвязный слой, состоящий из 100 нейронов, входит 500 сигналов, количество связей будет равно 100×500=50000. В сниппете 4 перцептрон, являющийся полносвязной нейронной сетью, состоит из двух слоев.

Сниппет 4. Реализация полносвязного слоя.

Выходной слой

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

Рис. 11. Функции активации. Источник.Формула 3. Вычисление функции softmax.

Программирование функции активации

Как и всегда, благодаря NumPy задача будет решена в несколько строчек кода.

Сниппет 5. Активация сигналов с помощью функции softmax.

Вычисление потерь

Чтобы определить, насколько точно нейронная сеть определяет написанные от руки цифры, мы будем использовать функцию потерь. Ответом функции потерь является вещественное число, характеризующие качество ответа нейронной сети. Обычно для оценки качества классификаторов применяют категориальную крос-энтропийную функцию потерь (Categorical Cross-Entropy Loss Function, или CCELF).

Формула 4. Категориальная крос-энтропийная функция потерь.

В формуле 4 ŷ — фактический ответ нейронной сети, y — желаемый ответ нейронной сети. Ответом в нашем случае является некоторое число; в более широком смысле ответ представляет категорию. Для получения общего показателя потерь, характерного для всех категорий в целом, берут среднее от значений по каждой категории.

Программирование функции потерь

Код реализации CCELF невероятно прост.

Сниппет 6. Категориальная крос-энтропийная функция потерь.

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

что могут нейронные сети и как они изменят нашу жизнь?» – Hi-Tech – Коммерсантъ

19 декабря в рамках лекционного проекта Фонда Егора Гайдара состоялось выступление кандидата физико-математических наук, руководителя проекта iPavlov и заведующего лабораторией нейронных систем и глубокого обучения Московского физико-технического института (МФТИ) Михаила Бурцева, в рамках которого он рассказал о перспективах построения искусственного интеллекта, работающего по образцу человеческого мозга. Модератором мероприятия выступил экономический обозреватель Борис Грозовский. Подробности лекции эксперта — в видео “Ъ” и стенограмме доклада.

Фонд Егора Гайдара при информационной поддержке “Ъ” запустил курс лекционного проекта «Экономический факультет» «Экономика наступившего будущего». В курс вошли четыре лекции, посвященные высоким технологиям,— криптовалютам, блокчейну, искусственному интеллекту и нейронным сетям, большим данным.

Первая лекция цикла «Экономика наступившего будущего», посвященная криптовалютам, состоялась 21 ноября. Подробнее — в материале “Ъ” «Криптовалюты: новая экономика или новая пирамида?» .

Вторая лекция состоялась 5 декабря и была посвящена перспективам внедрения искусственного интеллекта. Подробнее — в материале “Ъ” «Человек и машина — выгодный союз или жесткая конкуренция?» .

Стенограмма лекции

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

Давайте начнем с того, что же такое искусственный интеллект. Попробуем определить предмет, про который мы говорим. Классическое определение искусственного интеллекта — это построение некоторых машин, которые будут обладать интеллектом, сопоставимым с интеллектом человека. Но возникает вопрос: зачем мы этим занимаемся? Зачем общество этим занимается? Здесь, мне кажется, есть две грани. Первая грань — это прикладная цель, которая в первую очередь приходит в голову, когда мы слышим об искусственном интеллекте. Мы хотим получить помощника, который, скажем так, дополнит наш естественный интеллект, позволив нам решать какие-то задачи. Как калькулятор сильно упростил нам жизнь, позволив сделать то, что еще сто лет назад считалось сильно интеллектуальным,— умножение, сложение, деление больших чисел. Это предок искусственного интеллекта. Вторая грань — если мы посмотрим на искусственный интеллект как на фундаментальную программу исследования, то на самом деле, так как мы хотим построить машину, сопоставимую по интеллекту с человеком, то мы неизбежно задаемся вопросом: что же представляет собой интеллект человека? Как говорил Ричард Фейнман: «Чтобы что-то понять, мне нужно знать, как это построить». Так и здесь. Строя искусственный интеллект, мы в каком-то смысле лучше разбираемся, как устроен естественный интеллект. И в этом смысле мы проникаем в область философии, то есть мы разбираемся с природой человека. Как устроен человек, какие у него мотивы, почему он ведет себя тем или иным образом. То есть это очень интересно именно с исследовательской точки зрения. Это, как мне кажется, основные причины, почему мы занимаемся искусственным интеллектом.

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

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

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

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

Начиная с конца 1990-х годов и до последнего времени в течение двадцати лет, мы наблюдали такую вялотекущую ситуацию, когда слово «искусственный интеллект» вышло из употребления нормальными учеными. Считалось, что если кто-то говорит, что он занимается искусственным интеллектом, это, наверное, не профессиональный ученый, а такой увлекающийся мыслитель-любитель, который пытается что-то сочинить. То есть человек не мог признаться, даже если он занимался искусственным интеллектом, что он занимается искусственным интеллектом. Поэтому это стали называть машинным обучением. Что значит машинное обучение? Это такой прагматический подход. Допустим, у нас есть набор методов — математическая статистика, методы оптимизации и так далее. Мы будем их использовать для решения практических задач и все это назовем машинным обучением. При этом удалось решить много интересных прикладных задач, и так продолжалось до 2012 года. А в 2012 году появился замечательный термин — «глубокое обучение».

Оказалось, что начиная с середины 2000-х годов нейросети снова стали набирать эффективность и показывать в лабораториях хорошие результаты. Есть задача категоризации изображений, когда имеется несколько миллионов изображений и тысяча категорий, и вам нужно по изображению определить, к какой категории оно относится. Соответственно, в 2010 году самый лучший алгоритм такой классификации давал ошибку около 27%. Но между 2010 и 2012 годом произошло очень сильное падение этой ошибки. То есть алгоритмы стали качественно лучше решать эту задачу. И если человек неправильно классифицирует изображения в конкретном наборе в 5% случаев, то алгоритм тогда делал 4,5% ошибок, а сейчас — уже 3%. Такой быстрый прогресс в данной области был связан с тем, что как раз здесь были впервые применены нейросетевые методы. А затем уже каждое решение, которое улучшало результат предыдущего года, было основано на нейросетях. Почему они называются глубокими, мы узнаем позже.

Так что же такое искусственные нейронные сети? Давайте попробуем разобраться. Начнем с того, что посмотрим, как устроены естественные нейронные сети. Обычно для этого изучается мозг лабораторных мышей С57black6 — такая линейка черных мышей. Одна из областей мозга называется гиппокамп. Чем она интересна? Тем, что это область, от которой очень сильно зависит эпизодическая память. В гиппокампе есть подобласть, которая называется «зубчатая фасция». Она позволяет распознавать очень близко лежащие друг к другу контексты, и, что самое интересное, в этой области происходит нейрогенез. То есть там на протяжении всей жизни у взрослого животного рождаются нейроны. Утверждение, что нейроны не восстанавливаются, на самом деле ошибочно — в мозге человека и других животных нейроны делятся и растут.

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

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

Теперь давайте попробуем смоделировать наш мозг. Как будет выглядеть простейшая, самая примитивная модель нервной клетки. Сверху у нас есть дендритное дерево, там же входы некоторого нашего алгоритма. На вход подаются значения Х1, Х2 Х3, Х4 и Х5. Число пропорционально тому объему нейромедиатора, который на нас выбросила другая клетка. Понятно, что какие-то клетки в момент времени могут этого вещества выбросить больше, какие-то — меньше. Соответственно, каждый раз эти Х1, Х2 Х3, Х4 и Х5 могут быть разными. Но чтобы почувствовать эти молекулы, нам нужен рецептор с другой стороны. Потому что если рецепторов ноль, то сколько бы на нас ни выбрасывали этого химического вещества, наша клетка ничего не почувствует. Чтобы смоделировать нашу чувствительность к этому веществу, мы ее описываем при помощи некоторого коэффициента W. Это называется — вес связи. Соответственно, если значение большое и вес большой, то мы их перемножаем и получаем большое влияние данного входа на нашу активность. Если же химический сигнал, который нам послали, нулевой, несмотря на то, что в другом месте может быть хороший синапс, то этот вход никак не повлияет на нашу активность. С другой стороны, при одинаковом объеме нейромедиатора тот вход, который имеет больший вес, сильнее повлияет на активность нашего нейрона.

То есть что мы делаем? Мы считаем, насколько каждый вход повлиял на нашу активность — просто берем, суммируем, перемножаем каждое значение на вес и подсчитываем их сумму. Затем мы должны определить Y. Обычно в машинном обучении то, что у нас поступает на вход нашей программы, называется Х, а то, что мы получаем на выходе — Y. Чтобы посчитать наш Y, делаем некоторое преобразование и рассчитываем функцию от суммы воздействия для того, чтобы смоделировать пороговое действие нейрона. То есть пока у нас порог воздействия не преодолен, наш нейрон не активен. Когда эта суммарная активность превышает порог, то в зависимости от функции — она называется функцией активации — мы можем регулировать порог, например, смещением, которое обычно называется W. При этом мы можем посчитать, какой выход будет у нашего нейрона. Обычно если у нас порог, про который я говорил, превышен, то значение Y будет большим, ну или стремиться к единице, а если маленьким, то будет либо минус единица, либо ноль, либо уходить в минус бесконечность, в зависимости от того, какую активационную функцию мы выберем.

Хорошо, мы поняли, что представляет собой отдельный нейрон. Но мозг состоит не из одного нейрона — у нас 80 миллиардов, а у мыши несколько сот миллионов. Теперь мы должны объединить эти нейроны в сеть. Что у нас происходит? Когда мы погружены в окружающий мир, то если мы посмотрим на зрительную систему, то у нас есть палочки, колбочки, фотоактивируемые клетки, которые в зависимости от того, сколько на них попало света, моделируют свою активность. Естественно, затем эти сигналы передаются по цепочке все глубже в мозг, и мозг пытается восстановить картину мира, который нас окружает. Соответственно, у нас есть входной слой нашей сети и есть некоторый скрытый слой. То есть вы идете по улице, переходите улицу, обернулись и вдруг увидели, что на вас мчится машина. У вас сигнал поступил, перешел в скрытый слой, ваша модель мира сработала и предсказала, что машина может в вас врезаться, если вы не ускорите шаг или не отскочите назад. И есть выходные элементы. Это мотонейроны, которые управляют вашим движением. Они приводят к изменению поведения — вы не идете спокойно, а пытаетесь отскочить в сторону или как-то грозите кулаком водителю, то есть предпринимаете какие-то действия. Таким образом, мы строим из наших нейронов многослойную нейронную сеть. Чем больше у нее слоев, тем она глубже. Поэтому глубокие сети — это те сети, в которых больше пяти, может быть, сотни слоев и очень много нейронов. Так мы принимаем решения.

Давайте немного упростим задачу, скажем, на примере классификации изображений. Как мы ее рассматриваем? У нас есть изображение. Что мы будем подавать на вход нашей нейросети? Мы будем подавать описание пикселей. То есть если у нас есть изображение 10х10, то там 100 пикселей. Предположим, у нас есть красный, зеленый и синий — соответственно, у нас есть 300 значений: Х1, Х2 — и до Х300. Предположим, мы решаем задачу: у нас есть много изображений, и нам для нашего бизнеса необходимо отличать кошек от Незнайки. Кошку мы пропускаем, а Незнайку не пропускаем. Потому что кошка должна ловить в подвале мышей, а Незнайка может сломать водопровод. Мы строим систему видеонаблюдения, где на вход подаем изображение, и есть два выхода — система должна выдать 1, если Незнайка, и 0, если кошка.

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

Как мы это будем делать? У нас есть некоторый набор примеров, это называется обучающая выборка, чем больше примеров, тем лучше. Например, у нас есть 10 тыс. изображений Незнайки и 10 тыс. изображений кошки, которых мы уже сфотографировали и для которых мы уже заранее знаем, где кошка, а где Незнайка. Теперь мы хотим на основе этих изображений подобрать веса таким образом, чтобы, когда у нас появятся новые изображения кошки и Незнайки, которых мы никогда не видели, система все равно могла их различить. Мы это делаем так. Сначала мы эти веса задаем случайным образом и начинаем подавать на вход изображения. Как вы думает, что будет на выходе, если мы зададим веса случайным образом? Можно назвать это бардаком. Система будет случайно называть ответ. И тут мы переходим к самой интересной части нейронных сетей — к так называемому алгоритму обратного распространения ошибки.

Как мы можем изменять веса? Мы их можем изменять следующим образом. Мы подали картинку, рассчитали все активности всех нейронов сначала в одном слое, потом в другом, и так во всех промежуточных слоях, пока не дойдем до выхода. На выходе мы имеем некоторый ответ, где Незнайка, а где кошка. Мы сравниваем тот ответ, который дала нейронная сеть, с тем ответом, который является у нас истинным. Потому что мы уже знаем все ответы для всех картинок в обучающей выборке. И рассчитываем ошибку. Если, например, у нас на выходе было 0,5, а нужно, чтобы была единица, следовательно, у нас ошибка минус 0,5. То есть мы как бы говорим о том, что нам не хватает минус 0,5 для того, чтобы дать правильный ответ по данному выходу. Или, наоборот, если у нас был слишком маленький выход, а мы его хотим увеличить, то у нас будет положительная ошибка. Затем нам нужно как-то учесть вклад весов в эту ошибку. Теперь нам надо узнать, как эти два нейрона и два веса повлияли на вклад в ошибку. Какие допущения мы можем сделать, чтобы посчитать разницу, насколько нам нужно каждый из весов изменить? На самом деле, мы видим, во-первых, активность этих нейронов, во-вторых, вес, и можем посчитать, какой из нейронов какой вклад в эту ошибку внес. Например, если этот нейрон не был активен, он был равен нулю, то он никакого вклада в эту ошибку не внес. С другой стороны, чем более активен нейрон, тем больший вклад он внес. Но если они были одинаково активны, то больший вклад в ошибку внес тот, у кого вес больше. Соответственно, изменение веса должно быть пропорционально ему самому, плюс пропорционально активности нейрона с предыдущего слоя и пропорционально производной нашей функции активации. Почему важна производная? Потому что мы можем вес как увеличить, так и уменьшить. И чтобы сместиться в правильную сторону, нам нужно учесть производную.

Значит, раньше у нас была ошибка только на выходе. Теперь мы посчитали ошибку для первого слоя нашей нейросети. Теперь вопрос в том, как мы посчитаем ошибку для следующего слоя? Мы применяем тот же самый метод, пока не дойдем до самых первых весов. Таким образом, у нас ошибка как бы растекается по нашей нейросети и веса корректируются. Этот алгоритм получил название метода обратного распространения ошибки, потому что ошибка распространяется как бы от выхода к началу. И это очень мощный алгоритм (метод обратного распространения ошибки.— “Ъ”), потому что его придумали в начале 1970-х годов, и с тех пор все нейросети только этим алгоритмом тренируются. То есть все, что я буду сегодня рассказывать, натренировано алгоритмом, который принципиально работает по такому же принципу. Как я говорил, нейросети возникли еще в 1950-х годах, но для того, чтобы изобрести этот алгоритм, потребовалось двадцать лет. А после понадобилось еще двадцать-тридцать лет, чтобы возникло глубокое обучение. Там были собственные проблемы. Все те архитектуры, которые вы сегодня увидите, очень сложные. Они все натренированы алгоритмом обратного распространения ошибки. Самые сложные пытаются даже смоделировать машину Тьюринга, то есть сделать универсальный компьютер на нейросетях.

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

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

В компьютерном зрении основным алгоритмом является так называемая сверточная нейросеть. Что представляет собой эта модификация нейросети? У вас есть две функции — f и g. Функция свертки этих двух функций заключается в том, что вы эти две функции просто сдвигаете относительно друг друга на определенную величину, перемножаете все значения и складываете их. Соответственно, если у вас есть ступенька и треугольник и они друг с другом не совпадают, то функция свертки будет равна нулю, потому что эти функции вне этой области равны нулю. Но есть некоторая область значений сдвигов, для которой у вас, когда они максимально совпадают, значение функции свертки будет максимальным. Отсюда понятно, как мы можем это использовать для анализа изображений. У вас есть картинка и есть некоторый паттерн, который вы хотите найти в этой картинке, то есть у вас есть, например, Незнайка или кошка и вы хотите найти, где у этой кошки глаз. Вы можете закодировать некоторый паттерн яркости, который похож на глаз, и потом этим паттерном просканировать все изображение. Фактически вы вычисляете свертку изображения с паттерном глаза. Соответственно, в том участке изображения, который будет наиболее похожим на тот паттерн, который вы ищете, у вас функция свертки будет максимальной. Там вы сможете построить карту изображения, на которой максимальное значение будет в тех областях, в которых как раз ваш паттерн и находится.

А теперь представьте, что вы хотите распознавать сложные изображения, которые состоят из многих признаков. Что вы делаете? Фактически это у вас как один нейрон. У нейрона есть девять входов, выход, веса. Ваш паттерн — это веса. Вход — это фактически ваше значение яркостей. Вы перемножаете веса на вход этого нейрона, складываете их и получаете некое значение. Это значение — выход вашего нейрона, то значение свертки, которое вы хотите получить. Соответственно, вы делаете много нейронов, случайно задаете им веса. То есть изначально, когда вы решаете задачу, вы не знаете, какие признаки позволят вам отличить кошку от Незнайки. В принципе вы знаете, что у кошки есть полоски, а у Незнайки — шляпа. Для какой-то другой задачи будут другие признаки. И вы хотите универсальный алгоритм, который будет находить те признаки, которые будут наиболее информативны для разделения двух категорий. Соответственно, вы строите такую сеть, в которой на вход подается задача распознавания, соответственно, у вас есть некоторое число входных сверточных нейронов. Каждый из них строит свою карту признаков. Затем происходит определенная операция сжатия этих карт признаков, а потом эти карты признаков подаются на другие сверточные нейроны, и они ищут признаки уже в этих картах признаков. И так мы эту операцию можем проводить несколько раз, постепенно выискивая признаки все более и более высоко уровня абстракции. А затем эти карты признаков подаются на нашу полносвязную сеть прямого распространения, в которой наш сигнал передается от входных к выходным нейронам, и в конце у нас стоит классификатор. Вот так, очень просто, устроены сверточные нейронные сети.

Что сегодня мы можем сделать при помощи самых интересных сверточных сетей? Во-первых, мы можем локализовать объекты. То есть нейросеть может определить, что находится в некоторой рамке. Во-вторых, можем разметить и сегментировать изображение. В-третьих, алгоритм может определить пол и возраст человека. То есть если у нас было много примеров людей разного пола и возраста и мы натренировали нашу нейросеть предсказывать возраст и пол людей, то она нам будет предсказывать возраст и пол людей по изображению. В-четвертых, она может определять эмоции человека, если у нас был размеченный набор обучающих данных, в котором мы знали, с какими эмоциями присутствовал человек. Вот такие классные приложения. Сейчас любой разработчик может подписаться на сервис «Облачный Microsoft», загрузить свои фотки, и сервис через две минуты выдаст вам все эмоции или возраст с полом. То есть это, фактически, технологии, которые сейчас любой человек может использовать в своих продуктах.

Можно делать другие интересные вещи. Наверняка вы все слышали о приложении Prisma. Что мы можем сделать с его помощью? Мы можем перенести стиль одного изображения на содержание другого. Это как раз позволяют сделать наши сверточные слои. Мы можем найти, как признаки скоррелированы друг с другом в одном изображении, а потом перенести эту корреляцию признаков на содержание другого изображения. Ну и есть примеры того, как мы можем Храм Василия Блаженного раскрасить под хохлому. Такой быстрый инструмент, при помощи которого дизайнеры, например, могут совмещать какие-то две разные идеи. Мы можем научить нейросеть читать по губам. Если у нас есть субтитры и видео с человеком, который говорит, то мы можем отобразить его речь в тексте и построить такую нейросеть, которая предсказывает текст. Если у вас есть видео без звука, но видно, как человек говорит, то вы можете восстановить текст автоматически.

Но, оказывается, можно сделать и более сумасшедшие вещи. Есть такой подход — генеративные соревновательные сети (generative adversarial network — GAN). Это такой тип нейросетей, который использует автоэнкодеры — когда мы сначала кодируем изображение, а потом его восстанавливаем. Мы можем их использовать для того, чтобы натренировать хитрые генераторы изображений. То есть мы сначала преобразуем изображение в некое скрытое представление из нашего внутреннего скрытого слоя — это называется энкодер-часть, а потом подаем наше скрытое представление на вход декодера, и оно выдает картинку. Мы можем взять три картинки с изображением лица мужчины в очках, для каждого из них у нас будет скрытое изображение внутри нашей нейросети. Это будет некий вектор в некоем пространстве изображений. Теперь мы сложим эти три вектора и усредним. Получится некое усредненное изображение мужчины в очках. Потом мы возьмем три изображения мужчин без очков, подадим их скрытые представления на вход нашей нейросети, усредним векторы — и получим усредненное изображение мужчины без очков. То же самое мы можем проделать для женщины без очков. Итого у нас получилось три вектора. Теперь мы можем взять вектор мужчины в очках, вычесть из него вектор мужчины без очков и прибавить вектор женщины без очков. Тот вектор, который у нас получился, мы подадим на декодер, и наша сеть сама сгенерирует изображение женщины в очках, хотя она этой картинки никогда не видела. Могут быть варианты — очки с разной яркостью, женщина слегка не та, что мы прибавляли, но в целом эффект может получаться очень интересный.

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

Следующая задача — рекуррентные нейронные сети. Они могут предсказывать последовательности. Чтобы предсказать последовательность, нам нужно знать некую историю. В стандартных нейросетях у нас есть Х на входе, есть некоторый слой нашей нейросети, есть выход, и информация распространяется все время прямо. Если же мы возьмем другой отсчет времени, то наша нейросеть забудет о том, что она знала в предыдущем отсчете. Но для того, чтобы иметь возможность предсказывать, нам как раз нужно, чтобы нейросеть помнила о многих отсчетах времени. Как это сделать? Обычно это решается так: мы берем выход нашей нейросети за предыдущий момент времени и подаем эти значения ей же на вход, на слой нейросети. Что-то пришло в момент времени T, но пришло не только то, что передал ей предыдущий момент Т, но и то, что она сама выдавала в момент времени Т-1. Таким образом, мы сразу подаем параллельно два вектора. И на основании этого вычисляем значение выхода для момента времени Т. Получается, что нейросеть может сама себе передавать то, что она «думала» в предыдущий момент времени. Это позволяет сохранить информацию о предыдущих входах. Такой тип нейросетей и называется рекуррентным, потому что они имеют рекуррентные связи. Если мы подойдем в лоб к решению этой задачи, то рекуррентные нейросети работают не очень хорошо, потому что когда мы разворачиваем эту обратную петлю, то фактически наращиваем слои нашей нейронной сети. От момента времени 0 наша нейросеть будет погружаться все глубже и глубже — в момент времени 100 нейросеть наша тоже будет глубиной 100. Поскольку ошибка в обратную сторону распространяется, она постоянно растекается по нашей сети и затухает. Поэтому наша нейросеть очень плохо учится, так как каждый раз происходит умножение на некоторые коэффициенты и наши ошибки затухают.

Чтобы избавиться от этого затухания градиентов, в 1997 году исследователь Юрген Шмидхубер предложил заменить один нейрон на подсеть из пяти нейронов. То есть теперь слой нейросети состоит из «юнитов». Смоделируем ячейку памяти. У нас есть некоторые значения, которые хранятся в этой ячейке. Есть нейроны, которые могут управлять тем, что мы можем что-то в эту ячейку памяти записать, что-то из нее считать и вывести наружу. При этом управление ячейкой осуществляется индивидуально своим набором нейронов. Веса этих нейронов тоже обучаются — и в этом вся красота полученной архитектуры. Когда мы из этих ячеек построим большую нейросеть, они все будут обучаться с помощью алгоритма обратного распространения ошибки. То есть алгоритм у нас остается тот же самый, даже несмотря на то, что сеть у нас значительно усложнилась.

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

Какого же эффекта мы можем достичь с помощью этих рекуррентных нейросетей? Я покажу вам результаты, которые поразили меня до глубины души. Если бы мне кто-то сказал за месяц до этого, что такое возможно, а это было летом 2015 года, я бы ответил, мол, ребята, я занимаюсь нейронными сетями десять лет, не надо мне рассказывать сказки. Но когда мы сами взяли нейросеть, провели ее обучение и увидели результат, который она выдает, то убедились, что это на самом деле так. Мы решали задачу моделирования языка. Формально это задача предсказания следующего символа. Например, у нас есть куча текстов Достоевского. Мы подаем на вход нашей нейросети 100 символов (букв, включая пробелы и знаки препинания) из произведений Достоевского, и ее задача — предсказать следующий символ. Этот символ мы можем снова подать на вход и предсказать следующий — и так далее. Но нам не хотелось экспериментировать на Достоевском, поэтому мы взяли субтитры к сериалу — примерно 10 млн слов из «Хроник вампиров» и еще чего-то. На этом материале сеть училась предсказывать следующие символы.

Итак, задача: есть 100 символов, нужно предсказать 101-й. Мы выложили в интернет интерфейс, где можно было забить какую-то начальную фразу, а нейросеть пыталась ее продолжить. Я отобрал наиболее интересные результаты. Человек пишет: «Ты глупый». То есть на вход нейросети подаются все эти буквы, пробел между «ы» и «г», а также перевод строки. И она предсказывает следующий символ: «К» большое. Мы подаем эту «К» ей на вход, она предсказывает следующий символ «а», подаем на вход «а» и т. д. — в результате получаем сгенерированную фразу: «Как насчет “привет”». Когда мы анализирует этот ответ, он выглядит абсолютно логично. Причем у него есть особенности: почему нейросеть сказала про привет? Если это начало диалога, то логично, что с фразы «ты глупый» не начинают. Поэтому нейросеть говорит: «Как насчет “привет”», причем слово «привет» закавычивает, давая понять, что это слово относится не к ней самой. Так что пусть у нашей нейросети и нет научной степени по филологии, но уж знания русского языка у нее глубокие.

Другой пример. Я попытался задать более сложный контекст, чтобы нейросети было непросто ответить. Вопрос: «Какой чудный вечер. Не правда ли?» Это довольно длинная последовательность символов, два предложения, много пробелов, знак вопроса. Вот ее ответ: «Ты действительно думаешь, что я буду помнить об этом?» Здесь ничего про вечер не сказано, ответ вопросом на вопрос. Но если мы попытаемся проинтерпретировать, то это вполне осмысленно. То есть если вечер чудесный, то подразумевается, что тот, кому про это сказали, захочет это запомнить. Отсюда такой ответ нейросети. И отдельно обратите внимание, что она (нейросеть.— “Ъ”) еще и знаки препинания правильно расставляет, и ошибок в словах не делает. И это при том, что мы в нее не закладывали правил русского языка, словаря слов, никаких грамматических основ — мы дали нейросети только последовательность символов. Мне кажется, что в таких условиях выдача подобных ответов — просто поразительный феномен. Я до сих пор удивляюсь: как она может это генерировать?

Еще один пример. Здесь вообще получился очень жизненный диалог. Человек: «Ты дура». Машина: «Так почему тебе не все равно?» Человек: «Потому что мне с тобой жить!» Машина: «Ты совсем не такой!» Человек: «Ты обиделась?» Машина: «Угу». Покажу еще пример ее работы. Человек: «Забавно, но ты всего лишь программа и никогда не сможешь мыслить». Машина: «Конечно, дело в том, что сейчас не лучшее время». Все логично, да? Но это ваша интерпретация, нам не известно, что на самом деле нейросеть имела в виду, это же все из сериалов.

А теперь — про разнообразие, которое порождала нейросеть. В принципе эта нейросеть является вероятностной моделью текста, она выдает вероятность следующего символа, но не точно, какой будет следующий символ. И мы можем пропорционально этой вероятности выбирать. Таким образом, мы можем генерировать разные последовательности. В одном случае на один и тот же вход мы выберем одну букву, в другом случае — другую. Мы подаем на вход предложение: «Алиса теперь счастлива». И просим нейросеть продолжить. Предсказать, как бы эта последовательность продолжалась. Везде продолжение начинается со слова «она». То есть нейросеть как бы улавливает, что здесь было про Алису и «счастлива», пол того субъекта, про который идет речь. В некоторых ответах есть нечто, что коррелирует с тем, что она счастлива. Например: «Она выглядит прекрасно». Или она была на концерте, поэтому она счастлива. Или она великолепна или влюблена, поэтому она счастлива. Или вот: «Она в опасности». Видимо, счастливые люди с большей вероятностью попадают в опасные ситуации, чем несчастливые. Можно сделать такой вывод. Или например: «Алиса попала в беду». Здесь мы видим, что тональность уже сменилась: «А она не знает кто ты», или «А она изменила свою жизнь», или «Она не собирается никого убивать». Раз она попала в беду, в ответах появляется что-то уже тревожное. А откуда появились эти нотки, мы не знаем. То есть нейросеть зачем-то вставила эти нотки. Из субтитров. Там были знаки ноток.

Но, видимо, в субтитрах все-таки больше про женщин, потому что на женские затравки она отвечает более осмысленно, а на мужские, наверное, не хватает статистики. «Джон теперь счастлив». — «Да, на дворе 800 фунтов на каждом месте», «Преступление в тысячу тысяч градусов по матче», «В самом деле собирался позволить себе просто бросить все на свои места». То есть осмысленность ответов сильно пострадала, хотя предложения изначально схожие. А вот «Джон попал в беду» — совсем тяжело: «Свиньи собираются в Старлинк-сити», «И когда он вернулся, я выбросил его в офис», «Он был не таким как был в прошлом году», «Сверхъестественное, ваша честь, это был не мы».

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

Давайте я еще быстренько расскажу о том, о чем все волнуются в последнее время. Нейросетевое обучение с подкреплением. Это такой подход, который необходим для того, чтобы выучить некоторые действия у агента. Каждые действия агента как-то при этом меняют среду. В предыдущих задачах мы прогнозировали, но не влияли на саму задачу. Мы не влияли никак на изображения, которые классифицируем, не влияли никак на последовательность, которую мы генерируем. А здесь наша задача ставится так: мы хотим повлиять на тот вход, который у нас есть, чтобы привести в то целевое состояние, которое нам необходимо. Агент — это некоторый субъект, который может воздействовать на окружающую среду. Мы не знаем, как решать эту задачу по обучению агента. Но мы знаем, что такое хорошо и что такое плохо. Поэтому мы можем в те моменты, когда агент достигает той цели, которую мы перед ним поставили, давать ему некую величину, которую мы называем наградой или подкреплением. Таким образом, нам необходимо получить алгоритм, который будет по последовательности и по наградам выучивать такие действия, которые в данной ситуации будут максимизировать награду.

В 2016 году в журнале Nature вышла статья, где был описан достаточно универсальный алгоритм, который научили играть в игры Atari. И он попал на обложку журнала Nature. Если вы знаете, журнал Nature — это один из наиболее авторитетных и престижных еженедельников в мире науки, где публикуются действительно научные статьи. Если ты напечатал статью в Nature, то твой авторитет среди ученых очень сильно возрастает. Бывают, конечно, исключения, но в основном там действительно публикуются очень важные с точки зрения науки работы. Как ставится задача? У нас есть 49 игр Atari, мы подаем на вход нашей нейросети картинки из этих игр, но никак не объясняем правила. Мы будем одну и ту же нейросеть учить на разных играх и хотим, чтобы она на всех играх училась хорошо. Но нейросеть одна, и под конкретную игру она подстраивается только в процессе обучения. Заранее мы ничего не закладываем.

Соответственно, у нас есть картинки, которые попадают на вход нашей нейросети, но вы все знаете, что такое сверточные сети — я рассказывал полчаса назад. Сверточные нейросети преобразуют картинки, выделяют признаки, и на выходе нейросети она выдает действие, которое управляет джойстиком. Соответственно, команды от джойстика передаются в симулятор игры, и он управляет поведением игры. Когда вы набираете очки, ваш агент получает подкрепление, и задача агента — увеличить эти очки. То есть здесь мы не говорим ему напрямую, какие действия выбирать, а просто в тот момент, когда он увеличил очки, говорим, что это хорошо. И задача — обучить этот алгоритм. Например, нейросеть управляет подводной лодкой. Задача: рыб — уничтожать, водолазов — подбирать и время от времени, когда кислород заканчивается, всплывать и заряжаться кислородом. Нейросети это удается не всегда, иногда она погибает. Но оказывается, что этот результат нашел не только научное признание и попал на обложку журнала Nature, а был получен некоторым стартапом, и за пару месяцев до того, как это было опубликовано, этот стартап купила компания Google. При этом из результатов у этого стартапа были только те, которые они публиковали в журнале Nature. Как вы думаете, за сколько компания Google купила этот стартап? За 600 миллионов.

Следующий вопрос. Что связывает Гарри Каспарова и Ли Седоль, чемпиона по го (игра.— “Ъ”)? Правильно. Их обоих победил искусственный интеллект. В 1997 году DeepBlue обыграл Каспарова, а чемпиона го обыграли в прошлом году. Почему так? До последнего времени считалось, что го — очень сложная игра. Это связано с количеством вариантов, которые нужно перебрать, чтобы рассчитать все возможные исходы игры, и описывается так называемым коэффициентом ветвления. То есть во сколько возможных состояний игры мы можем перейти из текущего состояния игры, совершая разрешенные в игре действия. Для шахмат средний коэффициент ветвления — около 35. А в го этот коэффициент ветвления — 250. Соответственно, вы понимаете, что когда мы идем вглубь, то каждый раз мы умножаем на это число. И понятно, что для го мы очень быстро получаем такое количество вариантов, которое превышает число частиц в наблюдаемой вселенной, и перебрать их не представляется возможным. Нужен какой-то другой вариант решения этой задачи. Если в шахматах мы можем в лоб рассчитать варианты для очень большого числа позиций и тупо знать те ходы, которые нужно сделать, чтобы выиграть или не проиграть, то в го это гораздо сложнее. Многие люди говорили, чтобы распознавать все ситуации, нужна интуиция.

Тот же самый стартап, который купили за 600 миллионов, через год снова появился на обложке журнала Nature. Теперь он предложил алгоритм, который, глядя на доску, мог выдавать оценку того, насколько эта позиция хороша, то есть достаточно быстро предсказывать. Вы можете скомбинировать это предсказание с алгоритмом поиска по дереву и при помощи нейросети оценивать позиции и раскрывать только те, которые являются наиболее выигрышными. Таким образом, вы делаете не полный перебор, а только под дерево, которое является наиболее перспективным в данный момент. Этот алгоритм — версия AlphaGo (в статья была опубликована версия AlphaGo Fan) — и обыграл Ли Седоля в Го. Тогда программы в го играли на уровне хорошего любителя, но не профессионала. Чтобы обучить эту версию, нужно было 176 графических процессоров на распределенном кластере. И она выиграла у чемпиона Европы со счетом 5:0.

Затем появилась адаптированная версия программы — AlphaGoLee. Она использовала 48 Tensor Processing Unit — это типа TPU, но специально адаптированных под нейросети. У Ли Седоля она выиграла со счетом 4:1. Потом была AlphaGoMaster на 4 TPU, которая выигрывала у профессиональных игроков со счетом 60:0. Буквально месяц назад появилась программа AlphaGoZero, которая на 4 TPU на одном компьютере (уже не на кластере) обыграла со счетом 100:0 ту версию программы, которая обыграла Ли Седоля, и со счетом 89:11 — версию AlphaGoMaster. Следующую версию опубликовали несколько дней назад — AlphaZero. Она, опять же, на четырех TPU со счетом 60:40 сыграла против AlphaGoZero. Первая версия программы AlphaGoLee сначала тренировалась на реальных играх. То есть была взята база данных игр, и на ней программа училась играть, как человек. А вот программы AlphaGoZero и AlphaZero — почему Zero? Потому что они вообще не использовали никакой информации от человека. Как они училась? Просто играли сами с собой и обучались на своих играх. И вот так хорошо обучились.

Теперь вопрос. Зачем компания Google купила эту штуку? Она взяла этот алгоритм, который использовался для игр, и приложили к задаче управления охлаждением дата-центра. Теперь в момент, когда включается нейросетевое управление, потребление падает, когда выключается — возвращается к старому уровню. В среднем экономия около 40%. Google поддерживает огромное количество дата-центров, чтобы обеспечить качество сервиса, и для них экономить по 40% на электроэнергии, а для дата-центров электроэнергия — вообще основная затратная статья, это очень существенно. Не знаю, окупилось ли, но, по крайней мере, существенную часть, возможно, возместило.

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

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

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

Таким образом, цель этого проекта — как раз создать такую открытую платформу, которая могла бы быть использована компаниями для создания продуктов в этой области. То есть мы создаем технологию, отдаем ее компаниям и говорим: «Мы вас будем поддерживать, мы будем вам помогать эту технологию внедрять, а вы, пожалуйста, делайте свои бизнесы и вносите свой вклад в экономику». Каковы стейкхолдеры нашего проекта? С точки зрения NTI, это компании на высокотехнологичных рынках. Например, Сбербанк, который хочет, имея эту технологию в качестве основы, создать решения для автоматизации каких-то сервисов, например, колл-центров или служб поддержки. Это Физтех, которому интересно развивать внутри себя компетенцию по искусственному интеллекту. Это исследователи и разработчики, которым нужны инструменты для того, чтобы быстро создавать таких интеллектуальных диалоговых агентов.

Этот проект мы начали летом этого года и назвали его iPavlov в честь Ивана Петровича Павлова, знаменитого русского нейрофизиолога, который занимался исследованием условных рефлексов. То есть мозгом. Соответственно, два основных результата нашей деятельности с точки зрения технологии — это открытая библиотека, которую мы назвали DeepPavlov, и это как раз набор инструментов для создания диалоговых систем, а также набор сервисов Сбербанка, который они будут встраивать в свои продукты, например, каких-то финансовых помощников. У нас есть исследования, есть разработка нашей библиотеки, есть приложения этой библиотеки для каких-то конкретных бизнес-кейсов. Что мы хотим сделать? Мы хотим сделать набор некоторых нейросетевых блоков, из которых мы можем собрать разных агентов под разные задачи. Например, агентов, которые могут решать конкретные задачи типа бронирования билетов, или агентов, которые могут отвечать на вопросы по какой-то тематике, или агентов, которые могут просто поддерживать беседу. И потом эти агенты могут комбинироваться для каждой конкретной области, чтобы оптимально решать поставленную задачу. Это то, как мы планируем реализовывать архитектуру с точки зрения ее нейросетевого и исследовательского содержания. И, с одной стороны, наша библиотека состоит из компонентов для создания этих ботов. С другой стороны, у нас есть некоторый инструмент Bildert, при помощи которого мы можем собирать из этих ботов разговорных агентов, есть коннекторы, которые соединяют нас с мессенджерами, и есть данные, на которых мы тренируем. То есть это некоторый набор инструментов, при помощи которых можно разрабатывать и внедрять такие решения.

Наверное, на этом можно закончить. Спасибо всем.

Евгения Чернышева

Понимание нейронных сетей. Мы исследуем, как функционируют нейронные сети… | Тони Ю

Это будет длинный пост, так что не стесняйтесь сделать перерыв на кофе. Все еще со мной? Потрясающие! Теперь, когда мы знаем, как рассчитываются выходные значения нейронной сети, пора ее обучить.

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

Сначала давайте подумаем, какие рычаги можно использовать, чтобы минимизировать функцию затрат. В традиционной линейной или логистической регрессии мы ищем бета-коэффициенты (B0, B1, B2 и т. Д.), Которые минимизируют функцию затрат. Для нейронной сети мы делаем то же самое, но в гораздо большем и более сложном масштабе.

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

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

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

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

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

Функция затрат

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

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

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

MSE = Sum [(Prediction — Actual) ²] * (1 / num_observations)

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

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

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

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

Быстрый просмотр градиентного спуска

Градиент функции — это вектор, элементы которого являются его частными производными по каждому параметру. Например, если бы мы пытались минимизировать функцию стоимости, C (B0, B1), всего с двумя изменяемыми параметрами, B0 и B1, градиент был бы:

Градиент C (B0, B1) = [[[ dC / dB0], [dC / dB1]]

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

Иллюстрация градиентного спуска

  1. Вычислите градиент нашего «текущего местоположения» (вычислите градиент, используя наши текущие значения параметров).
  2. Измените каждый параметр на величину, пропорциональную его элементу градиента и в направлении, противоположном его элементу градиента. Например, если частная производная нашей функции затрат по B0 положительна, но крошечна, а частная производная по B1 отрицательна и велика, то мы хотим уменьшить B0 на крошечную величину и увеличить B1 на большую величину до снизить нашу функцию затрат.
  3. Пересчитайте градиент, используя наши новые измененные значения параметров, и повторяйте предыдущие шаги, пока мы не дойдем до минимума.

Страница не найдена

  • Образование

    • Общий

      • Словарь

      • Экономика

      • Корпоративные финансы

      • Рот ИРА

      • Акции

      • Паевые инвестиционные фонды

      • ETFs

      • 401 (к)

    • Инвестирование / Торговля

      • Основы инвестирования

      • Фундаментальный анализ

      • Управление портфелем

      • Основы трейдинга

      • Технический анализ

      • Управление рисками

  • Рынки

    • Новости

      • Новости компании

      • Новости рынков

      • Торговые новости

      • Политические новости

      • Тенденции

    • Популярные акции

      • Яблоко (AAPL)

      • Тесла (TSLA)

      • Amazon (AMZN)

      • AMD (AMD)

      • Facebook (FB)

      • Netflix (NFLX)

  • Симулятор

    • Симулятор

      • Завести аккаунт

      • Присоединяйтесь к игре

    • Мой симулятор

      • Моя игра

      • Создать игру

  • Твои деньги

    • Личные финансы

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

      • Бюджетирование / экономия

      • Банковское дело

      • Кредитные карты

      • Домовладение

      • Пенсионное планирование

      • Налоги

      • Страхование

    • Обзоры и рейтинги

      • Лучшие онлайн-брокеры

      • Лучшие сберегательные счета

      • Лучшие домашние гарантии

      • Лучшие кредитные карты

      • Лучшие личные займы

      • Лучшие студенческие ссуды

      • Лучшее страхование жизни

      • Лучшее автострахование

  • Советники

    • Ваша практика

      • Управление практикой

      • Продолжая образование

      • Карьера финансового консультанта

      • Инвестопедия 100

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

      • Портфолио Строительство

      • Финансовое планирование

  • Академия

    • Популярные курсы

      • Инвестирование для начинающих

      • Станьте дневным трейдером

      • Торговля для начинающих

      • Технический анализ

    • Курсы по темам

      • Все курсы

      • Курсы трейдинга

      • Курсы инвестирования

      • Финансовые профессиональные курсы

Представлять на рассмотрение

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

дома

  • О нас

  • Условия эксплуатации

  • Словарь

  • Редакционная политика

  • Рекламировать

  • Новости

  • Политика конфиденциальности

  • Связаться с нами

  • Карьера

  • Уведомление о конфиденциальности Калифорнии

  • #
  • А
  • B
  • C
  • D
  • E
  • F
  • грамм
  • ЧАС
  • я
  • J
  • K
  • L
  • M
  • N
  • О
  • п
  • Q
  • р
  • S
  • Т
  • U
  • V
  • W
  • Икс
  • Y
  • Z

Investopedia является частью издательской семьи Dotdash.

Нейронные сети

中文
испанский
한국어
Français
日本語

Почти за столетие до появления нейронных сетей Ада Лавлейс описала стремление построить «расчет нервной системы». Хотя умозрительные аналогии между мозгом и машинами так же стары, как и сама философия вычислений, так было до тех пор, пока учитель Ады Чарльз Бэббидж не предложил аналитическую машину, которую мы придумали для «калькуляторов», обладающих когнитивными способностями, подобными человеческим.Ада не дожила бы до воплощения своей мечты о создании двигателя, поскольку инженеры того времени не могли создать сложные схемы, необходимые для ее схем. Тем не менее, идея была передана в следующее столетие, когда Алан Тьюринг назвал ее вдохновением для игры в имитацию, которую вскоре стали называть «тестом Тьюринга». Его размышления о крайних пределах вычислений спровоцировали первый бум искусственного интеллекта, подготовив почву для первого золотого века нейронных сетей.

Рождение и возрождение нейронных сетей

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

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

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

Нейронные сети сделали большой шаг вперед, когда в конце 1950-х Фрэнк Розенблатт изобрел перцептрон, тип линейного классификатора, который мы видели в предыдущей главе. Персептрон Mark 1, финансируемый ВМС США, был разработан для распознавания изображений с помощью множества фотоэлементов, потенциометров и электродвигателей. Его эффективность в создании сложных электрических цепей привела к тому, что New York Times в 1958 году предсказала, что машина скоро будет «ходить, говорить, видеть, писать, воспроизводить себя и осознавать свое существование».

Ранний ажиотаж вдохновлял писателей-фантастов на десятилетия вперед, но в академическом сообществе волнение было гораздо более умеренным. Книга Марвина Мински и Сеймура Паперта 1969 года «Персептроны» продемонстрировала различные — даже тривиальные — ограничения, непреднамеренно приведшие к снижению интереса как среди академических кругов, так и среди широкой публики, которая ошибочно полагала, что компьютеры просто не отстают от головокружительной вычислительной мощности. . Даже сам Тьюринг сказал, что машины будут обладать интеллектом человеческого уровня к 2000 году — году, когда мы испугались проблемы 2000 года.

Несмотря на ряд незначительных, но значительных улучшений нейронных сетей в 80-х и 90-х годах [1] [2] [3], они оставались в стороне в течение 2000-х годов, когда большинство коммерческих и промышленных приложений машинного обучения отдавали предпочтение машинам с векторной поддержкой различные другие подходы. Начиная с 2009 года и особенно с 2012 года, нейронные сети снова стали доминирующей разновидностью алгоритмов машинного обучения. Их возрождение в значительной степени было вызвано появлением сверточных и рекуррентных нейронных сетей, которые превзошли (иногда значительно) предыдущие современные методы решения ключевых проблем в аудиовизуальной области.Но что еще более интересно, у них есть ряд новых приложений и свойств, которых раньше не было, особенно таких, которые вызвали интерес у художников и других людей, не относящихся к области искусственного интеллекта. В этой книге будут более подробно рассмотрены сверточные нейронные сети, в частности, через несколько глав.

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

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

От линейных классификаторов к нейронам

Напомним из предыдущей главы, что входные данные для 2-мерного линейного классификатора или регрессора имеют вид:

\ [\ begin {eqnarray}
f (x_1, x_2) = b + w_1 x_1 + w_2 x_2
\ end {eqnarray} \]

В общем, в любом количестве измерений это может быть выражено как

\ [\ begin {eqnarray}
е (Х) = Ь + \ сумма_i w_i x_i
\ end {eqnarray} \]

В случае регрессии \ (f (X) \) дает нам наш прогнозируемый результат с учетом входного вектора \ (X \).В случае классификации наш прогнозируемый класс равен

.

\ [\ begin {eqnarray}
\ mbox {классификация} & = & \ left \ {\ begin {array} {ll}
1 & \ mbox {если} f (X) \ gt 0 \\
0 & \ mbox {если} f (X) \ leq 0
\ end {array} \ right.
\ tag {1} \ end {eqnarray} \]

Каждый вес, \ (w_i \), можно интерпретировать как обозначающий относительное влияние входных данных, на которые он умножается, \ (x_i \). Член \ (b \) в уравнении часто называют смещением, потому что он контролирует, насколько нейрон предрасположен к запуску 1 или 0, независимо от весов.Большое смещение заставляет нейрон требовать большего входного сигнала для вывода 1, а меньшее делает его проще.

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

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

И в искусственных, и в биологических нейронных сетях нейрон не просто выводит голый входной сигнал, который он получает. Вместо этого есть еще один шаг, называемый функцией активации, аналогичный скорости срабатывания потенциала действия в мозгу. Функция активации принимает ту же взвешенную сумму, введенную ранее, \ (z = b + \ sum_i w_i x_i \), а затем преобразует ее еще раз, прежде чем окончательно вывести ее.

Было предложено много функций активации, но сейчас мы подробно опишем две: сигмоид и ReLU.\ prime (z) = \ sigma (z) (1- \ sigma (z)) \). Это важно, потому что мы должны использовать вычисления для обучения нейронных сетей, но пока не беспокойтесь об этом.

сигмовидных нейронов были основой большинства нейронных сетей в течение десятилетий, но в последние годы они вышли из моды. Причина этого будет объяснена более подробно позже, но вкратце, они затрудняют обучение нейронных сетей с большим количеством слоев из-за проблемы исчезающего градиента. Вместо этого большинство перешло на использование другого типа функции активации, выпрямленного линейного блока, или для краткости ReLU.Несмотря на тупое название, он просто определяется как \ (R (z) = max (0, z) \).

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

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

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

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

На приведенной выше диаграмме показан нейрон с тремя входами и выводит одно значение \ (y \). Как и раньше, мы сначала вычисляем взвешенную сумму его входных данных, а затем передаем ее через функцию активации \ (\ sigma \).

\ [z = b + w_1 x_1 + w_2 x_2 + w_3 x_3 \\
y = \ sigma (z) \]

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

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

Двухслойная нейронная сеть

Обратите внимание, что когда мы подсчитываем количество слоев в нейронной сети, мы учитываем только слои с текущими в них соединениями (без нашего первого или входного слоя). Итак, на рисунке выше изображена двухслойная нейронная сеть с 1 скрытым слоем. Он содержит 3 входных нейрона, 2 нейрона в скрытом слое и 1 выходной нейрон.

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

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

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

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

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

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

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

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

Давайте теперь рассмотрим реальный пример классификации с использованием нейронных сетей, задачу распознавания и маркировки изображений рукописных цифр. Мы собираемся использовать набор данных MNIST, который содержит 60000 помеченных изображений рукописных цифр размером 28×28 пикселей, точность классификации которых служит общим эталоном в исследованиях машинного обучения. Ниже представлена ​​случайная выборка изображений, найденных в наборе данных.

Случайная выборка рукописных цифр MNIST

Мы настраиваем нейронную сеть для классификации этих изображений, используя необработанные значения пикселей в качестве входных данных первого слоя и имея 10 выходных классов, по одному для каждого из наших цифровых классов от 0 до 9.Поскольку это изображения в градациях серого, каждый пиксель имеет значение яркости от 0 (черный) до 255 (белый). Все изображения MNIST имеют размер 28×28, поэтому они содержат 784 пикселя. Мы можем развернуть их в единый массив входных данных, как показано на следующем рисунке.

Как ввести изображение в нейронную сеть

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

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

Следующая глава

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

11.3 Модели нейронных сетей | Прогнозирование: принципы и практика (2-е изд)

Модели нейронных сетей

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

Архитектура нейронной сети

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

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

Рисунок 11.11: Простая нейронная сеть, эквивалентная линейной регрессии.

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

Рисунок 11.12: Нейронная сеть с четырьмя входами и одним скрытым слоем с тремя скрытыми нейронами.

Это известно как многослойная сеть с прямой связью , где каждый уровень узлов получает входные данные от предыдущих уровней.{-z}},
\]
чтобы дать вход для следующего слоя. Это имеет тенденцию уменьшать влияние экстремальных входных значений, таким образом делая сеть в некоторой степени устойчивой к выбросам.

Параметры \ (b_1, b_2, b_3 \) и \ (w_ {1,1}, \ dots, w_ {4,3} \) «извлекаются» из данных. Значения весов часто ограничиваются, чтобы они не становились слишком большими. Параметр, ограничивающий веса, известен как «параметр затухания» и часто устанавливается равным 0,1.

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

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

Авторегрессия нейронной сети

Для данных временных рядов запаздывающие значения временного ряда можно использовать в качестве входных данных для нейронной сети, точно так же, как мы использовали запаздывающие значения в модели линейной авторегрессии (глава 8).Мы называем это авторегрессией нейронной сети или моделью NNAR.

В этой книге мы рассматриваем только сети с прямой связью с одним скрытым слоем, и мы используем обозначение NNAR (\ (p, k \)), чтобы указать, что есть \ (p \) запаздывающие входы и \ (k \) узлы. в скрытом слое. Например, модель NNAR (9,5) — это нейронная сеть с использованием последних девяти наблюдений \ ((y_ {t-1}, y_ {t-2}, \ dots, y_ {t-9} \)) в качестве входных данных для прогнозирования выхода \ (y_t \) и с пятью нейронами в скрытом слое. Модель NNAR (\ (p, 0 \)) эквивалентна модели ARIMA (\ (p, 0,0 \)), но без ограничений на параметры для обеспечения стационарности.

Для сезонных данных полезно также добавить последние наблюдаемые значения того же сезона в качестве входных данных. Например, модель NNAR (3,1,2) \ (_ {12} \) имеет входы \ (y_ {t-1} \), \ (y_ {t-2} \), \ (y_ {t -3} \) и \ (y_ {t-12} \), а также два нейрона в скрытом слое. В более общем смысле, модель NNAR (\ (p, P, k \)) \ (_ m \) имеет входы \ ((y_ {t-1}, y_ {t-2}, \ dots, y_ {tp}, y_ {tm}, y_ {t-2m}, y_ {t-Pm}) \) и \ (k \) нейроны в скрытом слое. Модель NNAR (\ (p, P, 0 \)) \ (_ m \) эквивалентна модели ARIMA (\ (p, 0,0 \)) (\ (P \), 0,0) \ (_ m \ ), но без ограничений на параметры, обеспечивающие стационарность.

Функция nnetar () соответствует модели NNAR (\ (p, P, k \)) \ (_ m \). Если значения \ (p \) и \ (P \) не указаны, они выбираются автоматически. Для несезонных временных рядов по умолчанию используется оптимальное количество лагов (согласно AIC) для линейной модели AR (\ (p \)). Для сезонных временных рядов значения по умолчанию равны \ (P = 1 \), а \ (p \) выбирается из оптимальной линейной модели, подобранной к данным, скорректированным с учетом сезонных колебаний. Если \ (k \) не указан, он устанавливается в \ (k = (p + P + 1) / 2 \) (округляется до ближайшего целого числа).

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

Пример: солнечные пятна

Поверхность Солнца содержит магнитные области, которые появляются
в виде темных пятен. Они влияют на распространение радиоволн, и поэтому
телекоммуникационные компании любят прогнозировать активность солнечных пятен, чтобы спланировать любые будущие трудности.Солнечные пятна следуют циклу продолжительностью от 9 до 14 лет. На рисунке 11.13 показаны прогнозы от NNAR (10,6) на следующие 30 лет. Мы установили преобразование Бокса-Кокса с лямбда = 0 , чтобы прогнозы оставались положительными.

  fit <- nnetar (sunspotarea, lambda = 0)
автоплот (прогноз (fit, h = 30))  

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

Здесь последние 10 наблюдений используются в качестве предикторов, а в скрытом слое 6 нейронов.Цикличность данных хорошо смоделирована. Мы также можем видеть асимметрию циклов, зафиксированную моделью, где возрастающая часть цикла круче, чем убывающая часть цикла. Это одно из различий между моделью NNAR и линейной моделью AR - в то время как линейные модели AR могут моделировать цикличность, моделируемые циклы всегда симметричны.

Интервалы прогнозов

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

Нейронная сеть, адаптированная к данным о солнечных пятнах, может быть записана как
\ [
y_t = f (\ boldsymbol {y} _ {t-1}) + \ varepsilon_t
\]
где \ (\ boldsymbol {y} _ {t-1} = (y_ {t-1}, y_ {t-2}, \ dots, y_ {t-10}) '\) - вектор, содержащий запаздывающие значения серии, а \ (f \) - нейронная сеть с 6 скрытыми узлами в одном слое. Предполагается, что последовательность ошибок \ (\ {\ varepsilon_t \} \) гомоскедастична (и, возможно, также нормально распределена).* _ {T + 2}.
\]
Таким образом, мы можем итеративно моделировать будущий путь выборки. Повторно моделируя выборочные пути, мы накапливаем знания о распределении для всех будущих значений на основе подобранной нейронной сети.

Вот моделирование 9 возможных будущих траекторий для данных о солнечных пятнах. Каждый путь выборки охватывает следующие 30 лет после данных наблюдений.

  sim <- ts (матрица (0, nrow = 30L, ncol = 9L),
  начало = конец (солнечное пятно) [1L] + 1L)
для (i в seq (9))
  sim [, i] <- simulate (fit, nsim = 30L)
автоплот (sunspotarea) + автослой (sim)  

Рисунок 11.14: Будущие выборочные траектории для годовых данных о солнечных пятнах.

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

  fcast <- прогноз (соответствует, PI = TRUE, h = 30)
автоплот (fcast)  

Рисунок 11.15: Прогнозы с интервалами прогноза для годовых данных о солнечных пятнах. Интервалы прогнозирования вычисляются с использованием смоделированных путей будущих выборок.

Поскольку это немного медленно, PI = FALSE является значением по умолчанию, поэтому интервалы прогнозирования не вычисляются, если не запрашивается. Аргумент npaths в прогнозе () управляет количеством выполненных симуляций (по умолчанию 1000). По умолчанию ошибки берутся из нормального распределения. Аргумент bootstrap позволяет «самозагрузить» ошибки (т. Е. Случайным образом извлекать их из исторических ошибок).

Глубокое обучение и нейронные сети - AI для чайников (3/4)

Объяснение глубокого обучения и нейронных сетей.В этой статье мы также рассмотрим контролируемое обучение и сверточные нейронные сети.

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

Как работают нейроны

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

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

Метод градиентного спуска

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

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

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

Пустошь ученого, работающего с данными

Теперь у нас есть все, чтобы построить и обучить алгоритм глубокого обучения. Успех вашего обучения зависит от того, насколько хорошо ваш алгоритм может обобщать. Обобщение означает, может ли оно дать правильный ответ на невидимых примерах.Вы можете управлять поведением алгоритма, играя с его ингредиентами, так называемыми гиперпараметрами . С одной стороны, у вас есть количество кирпичей, которое вы можете сложить. Это количество скрытых слоев и нейронов в каждом скрытом слое. Вы также должны тщательно выбрать тип функции активации для каждого нейрона, чтобы изучить сложные функции. Наконец, вы также можете влиять на сам процесс обучения, замедляя или ускоряя его. Будь осторожен! Если алгоритм обучается слишком быстро, он может упустить минимум функции потерь и, следовательно, будет менее точным.И наоборот, если он учится слишком медленно, он может никогда не найти оптимальные веса.

Настройка алгоритма глубокого обучения

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

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

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

Подгонка

После обучения модели вы можете сравнить ошибку набора обучающих данных с чистой случайностью и производительностью человека, чтобы понять, правильно ли алгоритм усвоил задачу. Предположим, мы обучили алгоритм классификации кошек и собак. Предположим также, что он ошибочно классифицировал 15% обучающего набора данных. Здесь алгоритм, похоже, не научился правильно отличать кошек от собак. По сравнению с человеком с коэффициентом ошибок 0%, не соответствует данным.Если это произойдет, вы можете попробовать сеть большего размера, то есть добавить больше скрытых слоев и / или нейронов в каждый слой. Увеличение количества слоев и, следовательно, нейронов позволяет вашему алгоритму улавливать большую сложность. Иногда проблема заключается просто в том, что вы не дали алгоритму достаточно времени, чтобы правильно изучить функции. Так что, увеличивая количество эпох, вам может повезти!

Обтяжка

Если ваша ошибка обучения достаточно мала, вы можете сравнить ее с ошибкой из набора проверки, чтобы увидеть, является ли ваш алгоритм жертвой , переоснащения .Алгоритм изучил каждую причуду и шум из набора обучающих данных и стал сверхспециализированным. Предположим, что алгоритм имеет ошибку всего 1% в наборе обучающих данных. И наоборот, набор данных проверки имеет ошибку 10%. Это большое несоответствие, скорее всего, связано с чрезмерной специализацией алгоритма. Поэтому, когда алгоритм видит неизвестные примеры из набора данных проверки, он сбивается с толку и неправильно классифицирует изображения. В этом случае вы можете попытаться увеличить, разнообразить и очистить свой набор тренировочных данных.Это позволяет вашему алгоритму изучать более общие функции вместо того, чтобы становиться слишком специализированным для выбросов. Другой вариант - уменьшить количество используемых нейронов и / или упорядочить функцию потерь.

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

Искусственные нейронные сети и методы глубокого обучения существуют уже давно. Так почему же сейчас так много неясностей о глубоком обучении? Ответ - сверточные нейронные сети! Глубокие нейронные сети с полносвязными слоями требуют больших вычислительных ресурсов.В случае проблем, связанных с изображением, это проблема HUGE . Представьте, что вы хотите ввести цветные изображения размером 200 x 200 пикселей. Тогда каждого отдельного нейрона должны иметь 120 000 весов!

Сверточная нейронная сеть с трехмерными слоями. Каждый слой преобразует 3D-вход в 3D-выход. Источник: http://cs231n.github.io/convolutional-networks/.

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

Пример входного объема красного цвета (например, изображение 32x32x3) и примерный объем нейронов в первом сверточном слое. Каждый нейрон в сверточном слое связан только с локальной областью во входном объеме пространственно, но на всю глубину (т.е. все цветовые каналы). Обратите внимание, что есть несколько нейронов (5 в этом примере) вместе с глубиной, все они смотрят на одну и ту же область входных данных. Источник: http://cs231n.github.io/convolutional-networks/.

Карта характеристик

Следовательно, сверточный слой уменьшает количество свободных параметров, позволяя сети быть более глубокой с меньшим количеством параметров. Например, , независимо от размера изображения , мозаичные области 5 x 5 пикселей, каждая с одинаковыми общими весами - , фильтр -, требует только 25 обучаемых параметров.Результатом сверточного слоя является так называемая карта характеристик . Объединение большого количества таких слоев вместе приводит к сети, которая сначала создает представления небольших частей входных данных, а затем из них собирает представления более крупных областей.

Фильтр (красный) скользит по входному изображению (операция свертки) для создания карты признаков (3D-выход). Свертка другого фильтра (зеленого цвета) над тем же изображением дает другую карту характеристик. Различные фильтры создают разные карты функций из одного и того же исходного изображения.

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

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

Хотите пролить свет на черный ящик глубокого обучения? Тогда взгляните на инструмент визуализации Адама Харли.

Заключение

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


Эта статья была Часть 3 нашей серии из 4 частей, посвященных последним тенденциям и приложениям компьютерного зрения. Если вы пропустили предыдущие серии, нажмите здесь, чтобы перейти к части 1 и части 2!

Изучите нейронные сети с помощью онлайн-курсов и занятий

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

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

Изучение нейронных сетей

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

Курсы и сертификаты по нейронным сетям

Курсы, которые помогут вам освоить основы построения структуры нейронных сетей, включают степень магистра компьютерных наук Техасского университета в Остине. Он содержит 30 зачетных часов обучения, основанных на программе обучения университетского городка, постоянно входящей в десятку лучших по информатике. Если у вас уже есть основы информатики, курсы машинного обучения и глубокого обучения могут помочь вам начать карьеру в качестве специалиста по данным или разработчика.Курс IBM по глубокому обучению с использованием Tensorflow может помочь вам понять принципы глубокого обучения и развить свои навыки за пределами сетей прямого распространения и отдельных скрытых слоев. IBM также предлагает профессиональную сертификацию по глубокому обучению. Вы поймете основы глубокого обучения (например, сигмовидные функции, обучающие примеры, обучение с подкреплением) и освоите библиотеки глубокого обучения, такие как Tensorflow, Keras и Pytorch. Вы сможете применить глубокое обучение к реальным вариантам использования с помощью распознавания объектов, текстовой аналитики и рекомендательных систем.Курс MIT по науке о данных учит применять глубокое обучение к входным данным и строить визуализации на их основе.

Изучите карьеру в области глубокого обучения

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

Нейронная сеть | вычисления | Britannica

Нейронная сеть , компьютерная программа, которая работает по принципу естественной нейронной сети в мозгу. Задача таких искусственных нейронных сетей - выполнять такие когнитивные функции, как решение проблем и машинное обучение. Теоретические основы нейронных сетей были разработаны в 1943 году нейрофизиологом Уорреном Маккалоком из Университета Иллинойса и математиком Уолтером Питтсом из Университета Чикаго.В 1954 году Белмонту Фарли и Уэсли Кларку из Массачусетского технологического института удалось запустить первую простую нейронную сеть. Основная привлекательность нейронных сетей - их способность имитировать умение мозга распознавать образы. Среди коммерческих приложений этой способности нейронные сети использовались для принятия инвестиционных решений, распознавания почерка и даже обнаружения бомб.

Британская викторина

Компьютеры и технологии. Викторина

Компьютеры размещают веб-сайты, состоящие из HTML, и отправляют текстовые сообщения так же просто, как...РЖУНИМАГУ. Примите участие в этой викторине и позвольте некоторым технологиям подсчитать ваш результат и раскрыть вам содержание.

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

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

Encyclopædia Britannica, Inc.

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

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

Получите подписку Britannica Premium и получите доступ к эксклюзивному контенту.
Подпишись сейчас

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

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

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

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