Освоение глубокого обучения Искусство приближать нелинейности с помощью точечных оценок Часть 2

Искусство приближения нелинейностей с помощью точечных оценок Освоение глубокого обучения - Часть 2

Приветствую всех! Добро пожаловать на вторую часть моей серии Овладение глубоким обучением. В этой статье я продолжу разговор, начатый в первой части с названием Искусство аппроксимации нелинейностей с помощью покусочных приближений. Часть 1. В первой статье мы увидели, что нейронные сети комбинируют несколько линейных функций входного значения x для оценки выходного значения y, изучая отображение f(x,ϕ), которое отображает пространство входных значений в выходное пространство. Мы заметили, что эти отображения являются линейными, и вводят нелинейность именно активационные функции. Мы видим, что мы можем приблизить нелинейную функцию с помощью нескольких покусочно-линейных функций, комбинируя их линейно. Создание таких покусочно-линейных функций является особенным свойством функций, которые либо ограничивают, либо обрезают входное значение в одной или нескольких точках (например, ReLU). По мере того, как число линейных областей стремится к бесконечности, длина этих областей становится бесконечно малой, тем самым превращая отображение. То, что ранее была структура покусочной линейности, теперь превращается в нелинейную функцию. Универсальная теорема аппроксимации доказывает, что для любой непрерывной функции существует неглубокая сеть, которая может приближать эту функцию с любой заданной точностью.

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

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

Теперь давайте обучим эту сеть для оценки функции y = sin(2x)+cos(x)+x с использованием изображенной выше глубокой нейронной сети и поймем, как она работает.

функция f(x), которую необходимо оценить при помощи глубокой сети
функция f(x), оцененная сетью

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

выходы нейронов из первой сети
y’ это линейная комбинация h1,h2 и h3 (y’ = ReLU[θ₁h₁ + θ₂h₂ + θ₃h₃ + β])
выходы нейронов из второй сети
y’ является линейной комбинацией h1, h2 и h3 (y’ = θ’₁h’₁ + θ’₂h’₂ + θ’₃h’₃ + β’)

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

y = θ’₁h’₁ + θ’₂h’₂ + θ’₃h’₃ + β’

здесь y описывает трехмерную гиперплоскость h’₁, h’₂ и h’₃. К сожалению, мы не можем визуализировать эту гиперплоскость, но если мы присмотримся, мы можем переписать отношение следующим образом:

y = θ’₁ReLU[ϕ₁y’ + β₁] + θ’₂ReLU[ϕ₂y’ + β₂] + θ’₃ReLU[ϕ₃y’ + β₃] + β’.

Вышеуказанное отношение описывает разделенную линейную одномерную гиперплоскость в y’. Здесь мы взяли трехмерную гиперплоскость и развернули ее в одномерную гиперплоскость, перейдя от y к y’. Глубокие нейронные сети выполняют точно такое же действие, но наоборот. Глубокие нейронные сети берут поверхность меньшей размерности и сворачивают ее в более высокие размерности, чтобы создать сложные представления. Более высокомерное пространство, возникающее в результате этого сворачивания, часто называется латентным пространством, а оцененная более высокомерная поверхность известна как латентное представление входного значения. В нашем примере отображение между x и y достигается через следующие латентные представления: x и y’ и y’

y’ = ReLU[θ₁h₁ + θ₂h₂ + θ₃h₃ + β]

y = θ’₁h’₁ + θ’₂h’₂ + θ’₃h’₃ + β’

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

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

Образец глубокой нейронной сети с двумя скрытыми слоями

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

Отрезок оценки y с помощью глубокой сети

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

  1. Изменение диапазона значений: Мы обнаружим изменения в диапазоне значений, которые функция представляет вдоль оси x, оси y или обеих, в зависимости от того, как глубокая сеть выполняет операцию сворачивания.
  2. Перекрытие или петли: В некоторых случаях мы можем наблюдать, как функция перекрывается саму себя, образуя петлеобразные структуры.
7 различных скрытых представлений x в виде y' каждым нейроном
Свернутое пространство ввода

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

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

Давайте создадим набор данных, используя более сложную функцию, f(x) = sin(x) + sin(2x)cos(3x) + 0.2sin(5x)cos(7x) + 0.1sin(10x), в сочетании с гауссовским шумом. Нашей целью является оценка того, насколько глубокие нейронные сети могут эффективно оценить скрытое распределение в присутствии этого шума.

1000 равномерно выбранных точек из распределения данных
Оценка модели распределения шума

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

Этот блог в значительной степени основан на книге “Understanding Deep Learning” Саймона Дж.Д. Принса (udlbook.github.io/udlbook/). В заключительной части мы рассмотрим, как эти сети осуществляют оценки для многомерных входных и выходных данных. Код, который я использовал для генерации графиков, можно найти ниже. Если вам понравился этот блог, я буду очень благодарен за вашу поддержку в виде лайка.

Understanding-Deep-Learning/Mastering_Deep_Learning_The_Art_of_Approximating_Non_Linearities_with_Pi…

Присоединяйтесь к разработке Understanding-Deep-Learning, создавая учетную запись на GitHub.

github.com