Освоение глубокого обучения Искусство приближать нелинейности с помощью точечных оценок Часть 2
Искусство приближения нелинейностей с помощью точечных оценок Освоение глубокого обучения - Часть 2
Приветствую всех! Добро пожаловать на вторую часть моей серии Овладение глубоким обучением. В этой статье я продолжу разговор, начатый в первой части с названием Искусство аппроксимации нелинейностей с помощью покусочных приближений. Часть 1. В первой статье мы увидели, что нейронные сети комбинируют несколько линейных функций входного значения x для оценки выходного значения y, изучая отображение f(x,ϕ), которое отображает пространство входных значений в выходное пространство. Мы заметили, что эти отображения являются линейными, и вводят нелинейность именно активационные функции. Мы видим, что мы можем приблизить нелинейную функцию с помощью нескольких покусочно-линейных функций, комбинируя их линейно. Создание таких покусочно-линейных функций является особенным свойством функций, которые либо ограничивают, либо обрезают входное значение в одной или нескольких точках (например, ReLU). По мере того, как число линейных областей стремится к бесконечности, длина этих областей становится бесконечно малой, тем самым превращая отображение. То, что ранее была структура покусочной линейности, теперь превращается в нелинейную функцию. Универсальная теорема аппроксимации доказывает, что для любой непрерывной функции существует неглубокая сеть, которая может приближать эту функцию с любой заданной точностью.
Существуют функции, для оценки которых требуются чрезмерно большое количество скрытых единиц для достижения необходимой точности. Это привело к открытию Глубоких Нейронных Сетей. Глубокие Нейронные Сети могут оценивать намного больше линейных областей, чем неглубокие нейронные сети при заданном количестве параметров. Давайте разберемся с тем, как работают Глубокие Нейронные Сети, рассмотрев две неглубокие нейронные сети с 3 скрытыми единицами, при этом выход сети-1 будет передан в качестве входа во вторую сеть.
![Глубокая нейронная сеть, созданная путем объединения двух неглубоких нейронных сетей по 3 скрытым единицы каждая](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*tcuMEpVuLWeml-f8bqgiZg.png)
Теперь давайте обучим эту сеть для оценки функции y = sin(2x)+cos(x)+x с использованием изображенной выше глубокой нейронной сети и поймем, как она работает.
![функция f(x), которую необходимо оценить при помощи глубокой сети](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*wbZ_a3HFXhVLN1LxzTuvSQ.png)
![функция f(x), оцененная сетью](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*jCONlSt9sUObls--gKqpSA.png)
Выше приведен график функции, оцененной глубокой сетью. Разобравшись с этим, разберем приближение слой за слоем, чтобы понять динамику.
- Овладение искусством очистки данных в Python
- Единая точка для логистической регрессии
- 5 бесплатных книг для освоения науки о данных
![выходы нейронов из первой сети](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*cAtIovKK0ibn5N1hy4XWZg.png)
![y’ это линейная комбинация h1,h2 и h3 (y’ = ReLU[θ₁h₁ + θ₂h₂ + θ₃h₃ + β])](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*kzt_sTG6dXwk90yYZA7ggg.png)
![выходы нейронов из второй сети](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*sDCuAyVYWFwi_3sQ6Vbxow.png)
![y’ является линейной комбинацией h1, h2 и h3 (y’ = θ’₁h’₁ + θ’₂h’₂ + θ’₃h’₃ + β’)](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*x8OKEkaFXQpZ9WJRWkXzwg.png)
Графики не имеют смысла на данном этапе, поскольку вместимость сети недостаточна. Но давайте постепенно попробуем понять, что у нас есть, давайте рассмотрим отношение
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. Таким образом, мы можем рассматривать глубокие нейронные сети как сворачивание пространства ввода. Если математика и размерности вас запутывают, просто представьте себе пространство ввода как бумагу, чтобы свернуть вашу бумагу, вам нужно двигаться в третьем измерении, глубокая нейронная сеть делает то же самое, но в гораздо более высоких размерностях.
До сих пор мы рассматривали простой пример, где мы представляли глубокую сеть в качестве состава двух неглубоких сетей, теперь давайте рассмотрим более практичные глубокие сети, используемые на практике:
![Образец глубокой нейронной сети с двумя скрытыми слоями](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*RoWzK0bDBUd-Az7ptsxYSg.png)
Давайте обучим вышеприведенную сеть, чтобы увидеть, как новая сеть оценивает. Давайте попытаемся определить, удалось ли нам захватить сворачивание. На этот раз давайте использовать по 7 нейронов в каждом слое вместо 3. Функция, оцененная сетью отрезков, визуализируется ниже:
![Отрезок оценки y с помощью глубокой сети](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*3xdqUIVffnJhhRelHL5TKg.png)
Мы видим, что сеть хорошо выполнила оценку функции. Теперь давайте исследуем, есть ли какие-либо признаки сворачивания путем визуализации латентных представлений. Если сворачивание произошло, как ранее обсуждалось, мы можем наблюдать один или несколько из следующих признаков:
- Изменение диапазона значений: Мы обнаружим изменения в диапазоне значений, которые функция представляет вдоль оси x, оси y или обеих, в зависимости от того, как глубокая сеть выполняет операцию сворачивания.
- Перекрытие или петли: В некоторых случаях мы можем наблюдать, как функция перекрывается саму себя, образуя петлеобразные структуры.
![7 различных скрытых представлений x в виде y' каждым нейроном](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*OYalW0-HgfjGWPV4kxw0oQ.png)
![Свернутое пространство ввода](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*PFyJHk2NAX42gmABNlupuw.png)
Как и ожидалось, сеть сворачивает пространство ввода для создания скрытых представлений, что явно видно из графика выше. Например, если мы рассмотрим розовую линию, мы увидим, что ее диапазоны по x и y были обменены из-за этого преобразования. Точно так же синяя линия претерпела преобразование, приводящее к образованию петли, а также уменьшению диапазона по оси x. Эти преобразования могут быть настолько простыми, как обмен координатными осями, или, в более сложных случаях, приводить к сложным петлеобразным структурам.
Концепция сворачивания в глубоких нейронных сетях можно сравнить с простой и интуитивной аналогией. Представьте, что у вас есть лист бумаги с нарисованной на нем кривой. Когда вы сгибаете бумагу вдоль кривой и делаете разрезы, вы заметите, что эти разрезы эффективно удваиваются, когда вы раскладываете бумагу. Глубокие нейронные сети используют аналогичный принцип, хотя с важным отличием. Вместо ручного создания разрезов эти сети используют изученный процесс во время процедуры обучения. Они изменяют скрытые представления, эффективно “обрезая” или преобразуя их, с целью создания более линейных областей в данных. Этот изученный процесс сворачивания позволяет сети лучше соответствовать распределению данных, адаптируя преобразования как можно более точно.
Давайте создадим набор данных, используя более сложную функцию, f(x) = sin(x) + sin(2x)cos(3x) + 0.2sin(5x)cos(7x) + 0.1sin(10x), в сочетании с гауссовским шумом. Нашей целью является оценка того, насколько глубокие нейронные сети могут эффективно оценить скрытое распределение в присутствии этого шума.
![1000 равномерно выбранных точек из распределения данных](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*GHg27vJwdxzPVncUZTT8hg.png)
![Оценка модели распределения шума](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*JmFJq-vCC7Qn70_-_cYMTw.png)
Очевидно, что модель успешно улавливает скрытое распределение в определенной степени. Если бы мы увеличили емкость модели, вероятно, наша оценка улучшилась бы еще больше. Это демонстрирует значительный потенциал глубоких нейронных сетей в качестве мощных оценщиков, что принесло им значимое место в современном мире машинного обучения.
Этот блог в значительной степени основан на книге “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