Движущая сила Глубокого Обучения, его История и Вдохновение

$$\gdef \sam #1 {\mathrm{softargmax}(#1)}$$ $$\gdef \vect #1 {\boldsymbol{#1}} $$ $$\gdef \matr #1 {\boldsymbol{#1}} $$ $$\gdef \E {\mathbb{E}} $$ $$\gdef \V {\mathbb{V}} $$ $$\gdef \R {\mathbb{R}} $$ $$\gdef \N {\mathbb{N}} $$ $$\gdef \relu #1 {\texttt{ReLU}(#1)} $$ $$\gdef \D {\,\mathrm{d}} $$ $$\gdef \deriv #1 #2 {\frac{\D #1}{\D #2}}$$ $$\gdef \pd #1 #2 {\frac{\partial #1}{\partial #2}}$$ $$\gdef \set #1 {\left\lbrace #1 \right\rbrace} $$ % My colours $$\gdef \aqua #1 {\textcolor{8dd3c7}{#1}} $$ $$\gdef \yellow #1 {\textcolor{ffffb3}{#1}} $$ $$\gdef \lavender #1 {\textcolor{bebada}{#1}} $$ $$\gdef \red #1 {\textcolor{fb8072}{#1}} $$ $$\gdef \blue #1 {\textcolor{80b1d3}{#1}} $$ $$\gdef \orange #1 {\textcolor{fdb462}{#1}} $$ $$\gdef \green #1 {\textcolor{b3de69}{#1}} $$ $$\gdef \pink #1 {\textcolor{fccde5}{#1}} $$ $$\gdef \vgrey #1 {\textcolor{d9d9d9}{#1}} $$ $$\gdef \violet #1 {\textcolor{bc80bd}{#1}} $$ $$\gdef \unka #1 {\textcolor{ccebc5}{#1}} $$ $$\gdef \unkb #1 {\textcolor{ffed6f}{#1}} $$ % Vectors $$\gdef \vx {\pink{\vect{x }}} $$ $$\gdef \vy {\blue{\vect{y }}} $$ $$\gdef \vb {\vect{b}} $$ $$\gdef \vz {\orange{\vect{z }}} $$ $$\gdef \vtheta {\vect{\theta }} $$ $$\gdef \vh {\green{\vect{h }}} $$ $$\gdef \vq {\aqua{\vect{q }}} $$ $$\gdef \vk {\yellow{\vect{k }}} $$ $$\gdef \vv {\green{\vect{v }}} $$ $$\gdef \vytilde {\violet{\tilde{\vect{y}}}} $$ $$\gdef \vyhat {\red{\hat{\vect{y}}}} $$ $$\gdef \vycheck {\blue{\check{\vect{y}}}} $$ $$\gdef \vzcheck {\blue{\check{\vect{z}}}} $$ $$\gdef \vztilde {\green{\tilde{\vect{z}}}} $$ $$\gdef \vmu {\green{\vect{\mu}}} $$ $$\gdef \vu {\orange{\vect{u}}} $$ % Matrices $$\gdef \mW {\matr{W}} $$ $$\gdef \mA {\matr{A}} $$ $$\gdef \mX {\pink{\matr{X}}} $$ $$\gdef \mY {\blue{\matr{Y}}} $$ $$\gdef \mQ {\aqua{\matr{Q }}} $$ $$\gdef \mK {\yellow{\matr{K }}} $$ $$\gdef \mV {\lavender{\matr{V }}} $$ $$\gdef \mH {\green{\matr{H }}} $$ % Coloured math $$\gdef \cx {\pink{x}} $$ $$\gdef \ctheta {\orange{\theta}} $$ $$\gdef \cz {\orange{z}} $$ $$\gdef \Enc {\lavender{\text{Enc}}} $$ $$\gdef \Dec {\aqua{\text{Dec}}}$$
🎙️ Yann LeCun

План курса

  • Основы обучения с учителем, Нейронные сети, Глубокое обучение
  • Метод обратного распространения ошибки и архитектурные компоненты
  • Свёрточные нейронные сети и их применение
  • Больше архитектур глубокого обучения
  • Хитрости регуляризации / Хитрости оптимизации / Понимание того, как работает глубокое обучение
  • Энергетические модели
  • Самостоятельное обучение и дальше

Вдохновление Глубокого обучения и его история

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

История глубокого обучения берёт своё начало в области, которая ныне носит название “кибернетика”. Начало положили в 40-е годы 20-го века МакКаллох и Питтс. Они пришли к идее, что нейроны - это пороговые элементы с возможными состояниями: включён и выключен. Вы можете сконструировать Булеву схему, соединяя нейроны один с другим, и управлять логическим выводом нейронами. Головной мозг, в принципе, машина логического вывода, поскольку нейроны двоичны. Нейроны вычисляют взвешенную сумму входов и сравнивают её с их пороговым значением. Нейрон активируется, если значение больше порога и деактивируется, если значение ниже, что и является упрощённым представлением о работе нейронных сетей.

В 1947 у Дональда Хебба появилась идея, что нейроны в головном мозге обучаются, изменяя силу связей между нейронами. Это называется гиперобучением, если два нейрона активируются вместе, тогда связь между ними усиливается; если нет, - связь ослабевает.

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

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

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

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

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

Обучение с учителем

$90\%$ приложений глубокого обучения используют обучение с учителем. Обучение с учителем это процесс, в котором в котором вы собираете кучу пар входных и выходных данных, нейросеть получает входные данные и учится предсказывать правильные выходные данные. Когда выходные данные корректны, вы не делаете ничего. Если же выходные данные неверны, вы настраиваете параметры машины и корректируете выходные данные в направлении, которое пожелаете. Уловка здесь в том, как сильно и в каком направлении вы меняете параметры, и это возвращает нас к вычислению градиентов и методу обратного распространения ошибки.

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

История распознавания образов и введение в метод Градиентного Спуска

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

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

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

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

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

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

Вычисление градиентов методом обратного распространения ошибки

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

\[\begin{aligned} \frac{\partial C}{\partial \boldsymbol{x}_{i - 1}} &= \frac{\partial C}{\partial \boldsymbol{x}_i}\frac{\partial \boldsymbol{x}_i}{\partial \boldsymbol{x}_{i - 1}} \\ \frac{\partial C}{\partial \boldsymbol{x}_{i - 1}} &= \frac{\partial C}{\partial \boldsymbol{x}_i}\frac{\partial f_i(\boldsymbol{x}_{i - 1}, \boldsymbol{w}_i)}{\partial \boldsymbol{x}_{i - 1}} \end{aligned}\]

Уравнения метода обратного распространения ошибки для градиентов весов следующие:

\[\begin{aligned} \frac{\partial C}{\partial \boldsymbol{w}_{i}} &= \frac{\partial C}{\partial \boldsymbol{x}_i}\frac{\partial \boldsymbol{x}_i}{\partial \boldsymbol{w}_{i}} \\ \frac{\partial C}{\partial \boldsymbol{w}_{i}} &= \frac{\partial C}{\partial \boldsymbol{x}_i}\frac{\partial f_i(\boldsymbol{x}_{i - 1}, \boldsymbol{w}_i)}{\partial \boldsymbol{w}_{i}} \end{aligned}\]

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

Важно учитывать, как интерпретировать входы. Например, для изображения размерности $256{\times}256$ необходима матрица с 200,000 значений. Возможны огромные матрицы, с которыми слои нейронной сети вынуждены обращаться. Использовать такие матрицы было бы непрактично. Следовательно, важно выдвигать предположения о структуре матриц.

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

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

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


📝 Yunya Wang, SunJoo Park, Mark Estudillo, Justin Mae
Evgeniy Pak
27 Jan 2020