В последние годы глубокое обучение захватило мир. В то время как компьютерные алгоритмы уже были в состоянии победить ведущих шахматистов мира в конце 80-х, самой известной историей успеха была победа Deep Blue над тогдашним чемпионом мира по шахматам Гарри Каспаровым в 1997 году, другие игры, такие как го, считались неразрешимыми. пространства поиска - другими словами, считалось, что компьютеры не смогут вычислить следующий выигрышный ход за разумное время, учитывая наши текущие вычислительные ресурсы. Тем не менее, в 2016 году разработанная Google DeepMind компьютерная программа под названием AphaGo победила 18-кратного чемпиона мира Ли Седола со счетом 4: 1. Было ли это сокрушительным поражением или ошеломляющей победой человечества, решать вам.

От победы над людьми в таких играх, как Go или Jeopardy, до обнаружения спама в электронных письмах, до самоуправляемых транспортных средств, до прогнозирования цен на акции, до распознавания изображений на картинке и даже диагностики заболеваний, машинного обучения и, в частности, его подполя, Глубокое обучение, скорее всего, одна из величайших революций нашего времени. После прохождения Nanodegree по глубокому обучению от Udacity я понял, что, возможно, мы не просто наткнулись на мощный инструмент, но, возможно, также открыли окно в механику нашего собственного разума. Хотя я не гуру в этой области, учитывая его невероятную важность, я хотел бы посвятить некоторое время объяснению внутренней работы его строительных блоков самым простым из возможных способов, чтобы его мог понять даже кот с дороги.

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

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

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

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

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

Основы

Предположим, мы хотим предсказать, поступит ли студентка в университет или нет, на основе ее оценок и результатов тестов.

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

Мы можем определить это, построив линию 2x₁ + x₂ -18 = 0

Если учащийся набрал больше 0 баллов, они принимаются. Если меньше 0, они отклоняются.

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

Теперь мы вычислим w₁x₁ + w₂x₂ + w₃x₃ + b = 0 (вес результатов теста, вес оценок и вес ранга класса плюс некоторая систематическая ошибка). Это уравнение можно упростить до Wx + b = 0

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

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

Итак, как мы можем выполнить это в нейронной сети?

Персептроны

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

Шаг Функция

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

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

Уловка персептрона

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

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

Градиентный спуск

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

Одним предложением Gradient Descent - это итерационный алгоритм, который позволяет нам перемещать наши параметры (или коэффициенты) к оптимальным значениям.

Ошибка потери журнала

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

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

Если ошибка нашей функции задается E, то градиент (∇) E определяется векторной суммой частных производных E по w₁ и w₂. Проще говоря, деривативы - это не что иное, как способ показать скорость изменения в данной точке. В нашем случае вы можете думать о них как о склонах. Градиент сообщает нам направление, в котором мы хотим двигаться, если мы хотим максимально увеличить нашу функцию ошибок. Итак, если мы возьмем отрицательное значение градиента, это подскажет нам, как максимально уменьшить функцию ошибок.

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

Обратите внимание, что результат, который мы пытались получить ранее, был либо Да, либо Нет (прошел или не прошел). Чтобы получить этот результат, мы использовали так называемую пошаговую функцию. Если вместо пошаговой функции мы использовали сигмовидную функцию, то мы получим числа, близкие к 1 для больших положительных чисел и числа, близкие к 0 для больших отрицательных чисел. Разве это не похоже на вероятность?

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

Нелинейные области

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

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

Именно это и происходит в нейронной сети.

Что, если мы объединим вход с двумя узлами со скрытым слоем с тремя узлами?

У нас просто получится выходной слой треугольной формы.

А что, если у нас есть 3 входных узла? Это просто означает, что наш результат будет трехмерным. Вообще говоря, если у нас есть n-узлы на входе, наш вывод будет в n-мерном пространстве.

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

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

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

Прямая связь

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

Обратное распространение

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

Почему это работает? Потому что, в то время как шаг прямого распространения сообщал нам направление и величину, которую перцептрон должен изменить в следующий раз, шаг обратного распространения говорит: «Если вы хотите, чтобы этот перцептрон был на x величину выше, то я собираюсь необходимо изменить эти предыдущие перцептроны на y величину выше / ниже, потому что их веса полностью соответствовали окончательному прогнозу в n раз ».

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

В заключение

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

Многие методы, используемые Deep Learning, существуют уже несколько десятилетий, например, алгоритмы распознавания рукописных почтовых индексов в 90-х годах. Использование глубокого обучения резко возросло за последние пять лет благодаря 3 факторам:

  1. Методы глубокого обучения получили более высокую точность классификации изображений, чем люди.
  2. Современные графические процессоры позволяют нам обучать сложные сети быстрее, чем когда-либо прежде.
  3. Огромные объемы данных, необходимые для глубокого обучения, становятся все более доступными.

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

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

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

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

Класс глубоких нейронных сетей, позволяющий демонстрировать динамическое поведение во времени. В отличие от стандартных нейронных сетей прямого распространения, RNN могут использовать свое внутреннее состояние (память) для обработки последовательностей входных данных. Этот метод особенно хорош для аудио (например, Siri от Apple или Alexa от Amazon).

Генеративные неблагоприятные сети

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

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

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

эта область представляет собой скорее интеллектуальное новшество, чем механическое. […] Deep Learning стремится автоматизировать интеллект по крупицам ».