Первоначально я опубликовал этот пост в блоге на LinkedIn.

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

Резюме

  • Искусственные нейронные сети — это семейство алгоритмов машинного обучения, которые отчасти вдохновлены тем, как работает мозг.
  • Нейронные сети способны изучать сложные, нелинейные отношения (т. е. вещи, которые представляют собой нечто большее, чем сумма их частей) между входными переменными, что позволяет им достигать самых современных результатов в широкий спектр предсказательных задач.
  • Нейронные сети обучаются с использованием принципов исчисления и десятилетий исследований в области теории оптимизации.
  • Клиенты Red Hat, будучи сложными субъектами, нуждаются в сложных методах машинного обучения, чтобы предвидеть их потребности.

Введение

В этом сообщении я попытаюсь дать интуитивно понятное объяснение того, как работают модели нейронных сетей/«глубокого обучения». Материал, представленный в этом сообщении в блоге, собран из нескольких источников, в том числе:

Биологическое вдохновение

Нейронная сеть — это математическая модель, которая отчасти основана на том, как работает мозг. Если вы помните из курса Биология 101, у нейронов есть так называемый пороговый потенциал, который описывает, как нейрон должен достичь определенного уровня стимуляции, прежде чем активироваться (т. е. генерировать потенциал действия; см. >Рисунок 1а). Когда нейроны срабатывают, они сообщают другим нейронам, передавая сигнал через синаптические терминалы, где телодендрии одного нейрона встречаются с дендритами другого нейрона (Рисунок 1b). Координированное возбуждение нейронов контролирует все, от движения до памяти и решения проблем у животных.

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

Основная функция нейрона

Первоначальная модель нейронной сети (впервые описанная Фрэнком Розенблаттом в 1957 году и именуемая перцептроном) состоит из нескольких входных нейронов (кружки x на Рис. 2). ), каждый из которых связан с соответствующим весом (стрелки w на рис. 2). Входные нейроны (нейрон также может называться узлом) соответствуют функциям, которые будут использоваться для предсказания. Например, в случае модели потери активов клиента входные нейроны содержат такие данные, как: количество посещений клиентом страницы решений на портале клиентов, количество ошибок, обнаруженных клиентом за последний месяц, и количество Премиум-активов, на которые в настоящее время подписан клиент (фактическая модель имеет более 800 функций). Затем значения входных нейронов передаются в функциональный узел, который умножает входные значения на связанные с ними веса соединений. В случае модели потери активов клиента вычисление функционального узла будет выглядеть примерно так:

вывод = 5,2 (количество посещений страницы решений) + 0,7 (количество открытых ошибок) + 17,3 (количество премиальных активов)

В этом примере # посещений страницы решений, # открытых ошибок и # премиальных ресурсов соответствуют входным нейронам x1, x2 и x3 на рис. 2 соответственно, а 5,2, 0,7 и 17,3 соответствуют весам соединений w1, w2 и w3 соответственно.

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

Объединение нейронов

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

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

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

Обучение нейронной сети

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

Очевидно, что наша цель должна состоять в том, чтобы найти веса, минимизирующие общую ошибку для всех учетных записей (на практике минимизируемое значение обычно представляет собой среднее значение квадратов ошибок). К сожалению, поскольку мы можем присвоить любое число любому конкретному весу, существует бесконечное количество возможных комбинаций весов. Однако с каждой комбинацией весов связана общая ошибка, которая создает пейзаж ошибки. На рис. 4 показана картина ошибок для модели только с двумя весами, θ_0 и θ_1, значения которых могут варьироваться от 0 до 1. Регионы соответствующие высокой ошибке выделены красным цветом и находятся на высокой возвышенности, в то время как области, соответствующие низкой ошибке, выделены синим цветом и находятся на низкой возвышенности. Используя эту аналогию с ландшафтом, наша цель с моделью состоит в том, чтобы оказаться в самой низкой долине (что соответствует комбинации весов, обеспечивающей наименьшую ошибку).

Хотя на рис. 4 нам виден весь ландшафт ошибок, на самом деле у нас нет такой роскоши (в этом случае машинное обучение было бы очень простым!). Скорее, поиск оптимальных весов моделей больше похож на то, как если бы вас поместили в случайную начальную точку на горе посреди ночи, а затем попросили найти путь вниз. Как бы вы это сделали? Вы не можете полагаться на свои глаза, потому что слишком темно, чтобы видеть, поэтому вам придется полагаться на свое осязание. В этом случае очевидная стратегия может заключаться в том, чтобы ощупать гору ногой, а затем двигаться в направлении с самым крутым спуском.

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

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

Сила нейронных сетей

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

Пожалуй, одну из лучших наглядных демонстраций этого феномена представили победители конкурса ImageNet 2012. Соревнование ImageNet — это научное соревнование по компьютерному зрению, в котором команды разрабатывают алгоритмы для классификации объектов на изображениях (рис. 5a). Победители конкурса 2012 года использовали глубокую сверточную нейронную сеть для достижения беспрецедентной точности решения задачи. Но одной из самых увлекательных частей статьи была визуализация особенностей, которым научилась нейронная сеть. Рисунок 5b показывает функции, которые были изучены скрытыми единицами в первом скрытом слое сверточной нейронной сети. Как видите, нейронная сеть изучала такие вещи, как края, узоры и цветовые градиенты. Вы можете себе представить, как более поздние скрытые слои могут изучать более абстрактные функции, такие как глаза, колеса и т. д., комбинируя эти более простые функции, прежде чем в конечном итоге предсказать объект, такой как человек, автомобиль и т. д., на основе абстрактных функций. модель указана на изображении.

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

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

Почему Red Hat нуждается в машинном обучении

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