Понять поведение глубоких нейронных сетей в целом нетривиальная задача. Проще исследовать низкоразмерные глубокие нейронные сети — сети, в которых есть только несколько нейронов в каждом слое. Для низкоразмерных сетей можно создавать визуализацию, чтобы понять поведение и обучение таких сетей. Эта перспектива позволит получить более глубокое понимание о поведении нейронных сетей и наблюдать связь, объединяющую нейронные сети с областью математики, называемой топологией.
Из этого вытекает ряд интересных вещей, в том числе фундаментальные нижние границы сложности нейронной сети, способной классифицировать определенные наборы данных.
Рассмотрим принцип работы сети на примере
Начнем с простого набора данных — двух кривых на плоскости. Задача сети научится классифицировать принадлежность точек кривым.
Очевидный способ визуализировать поведение нейронной сети, посмотреть, как алгоритм классифицирует все возможные объекты (в нашем примере точки) из набора данных.
Начнем с простейшего класса нейронной сети, с одним входным и выходным слоем. Такая сеть пытается отделить два класса данных, разделив их линией.
Такая сеть не используется на практике. Современные нейронные сети обычно имеют несколько слоёв между их входом и выходом, называемыми «скрытыми» слоями.
Схема простой сети
Визуализируем поведение этой сети, наблюдая за тем, что она делает с разными точками в своей области. Сеть со скрытым слоем отделяет данные более сложной кривой, чем линия.
С каждым слоем сеть преобразует данные, создавая новое представление. Мы можем посмотреть данные в каждом из этих представлений и как их классифицирует сеть со скрытым слоем. Когда алгоритм дойдёт до окончательного представления, нейронная сеть проведет линию через данные (или в более высоких измерениях — гиперплоскость).
В предыдущей визуализации рассмотрены данные в «сыром» представлении. Вы можете представить это, посмотрев на входной слой. Теперь, рассмотрим его после того, как он будет преобразован первым слоем. Вы можете представить это, посмотрев на скрытый слой.
Каждое измерение соответствует активации нейрона в слое.
Скрытый слой обучается на представлении, так чтобы данные были линейно разделимы.
Непрерывная визуализация слоев
В подходе, описанном в предыдущем разделе, мы учимся понимать сети, просматривая представление, соответствующее каждому слою. Это дает нам дискретный список представлений.
Нетривиальная часть заключается в понимании того, как мы переходим от одного к другому. К счастью, уровни нейронной сети имеют свойства, которые делают это возможным.
Существует множество различных типов слоёв, используемых в нейронных сетях.
Рассмотрим слой tanh для конкретного примера. Tanh-слой tanh (Wx + b) состоит из:
- Линейного преобразование «весовой» матрицей W
- Перевод с помощью вектора b
- Точечное применение tanh.
Мы можем представить это как непрерывное преобразование следующим образом:
Этот принцип работы очень похож на другие стандартные слои, состоящие из аффинного преобразования, за которым следует поточечное применение монотонной функции активации.
Этот метод можно применить для понимания более сложных сетей. Так, следующая сеть классифицирует две спирали, которые слегка запутаны, используя четыре скрытых слоя. Со временем видно, что нейронная сеть переходит от «сырого» представления к более высокому уровню, который сеть изучила, чтобы классифицировать данные. В то время как спирали изначально запутаны, к концу они линейно отделимы.
С другой стороны, следующая сеть, также использующая несколько уровней, но не может классифицировать две спирали, которые более запутаны.
Следует отметить, что эти задачи имеют ограниченную сложность, потому что используются низкоразмерные нейронные сети. Если бы использовались более широкие сети, решение задач упростилось.
Топология слоев tang
Каждый слой растягивается и сжимает пространство, но он никогда не режет, не разбивает и не складывает его. Интуитивно мы видим, что топологические свойства сохраняются на каждом слое.
Такие преобразования, которые не влияют на топологию, называются гомоморфизмами (Wiki — Это отображение алгебраической системы А, сохраняющее основные операции и основные отношения). Формально они являются биекциями, которые являются непрерывными функциями в обоих направлениях. При биективном отображении каждому элементу одного множества соответствует ровно один элемент другого множества, при этом определено обратное отображение, которое обладает тем же свойством.
Теорема
Слои с N входами и N выводами являются гомоморфизмами, если весовая матрица W не является вырожденной. (Нужно быть осторожным в отношении домена и диапазона.)
2. Отображения — гомоморфизмы
3. tanh (и сигмоиды и softplus, но не ReLU) являются непрерывными функциями с непрерывными обратными. Они являются биекциями, если мы внимательно относимся к области и диапазону, который мы рассматриваем. Применение их поточечно, является гомоморфизмом.
Таким образом, если W имеет ненулевой детерминант, слой является гомеоморфным.
Топология и классификация
Рассмотрим двухмерный набор данных с двумя классами A, B?R2:
А = {х | d (х, 0) <1/3}
В = {х | 2/3 <d (х, 0) <1}
A красный, B синий
Требование: нейронная сеть не может классифицировать этот набор данных, не имея 3 или более скрытых слоя, независимо от ширины.
Как упоминалось ранее, классификация с сигмовидной функцией или слоем softmax эквивалентна попытке найти гиперплоскость (или в этом случае линию), которая разделяет A и B в конечном представлении. Имея только два скрытых слоя, сеть топологически неспособна разделять данные таким образом, и обречена на неудачу в этом наборе данных.
В следующей визуализации мы наблюдаем скрытое представление, пока сеть тренируется вместе с классификационной линией.
Для этой сети обучения недостаточно для достижения стопроцентного результата.
Алгоритм попадает в непроизводительный локальный минимум, но способен достичь ~ 80% точности классификации.
В этом примере был только один скрытый слой, но он не срабатывал.
Утверждение. Либо каждый слой является гомоморфизмом, либо весовая матрица слоя имеет определитель 0.
Если мы добавим третий скрытый элемент, проблема станет тривиальной. Нейронная сеть узнает следующее представление:
Представление даёт возможность разделить наборы данных гиперплоскостью.
Чтобы лучше понять, что происходит, давайте рассмотрим еще более простой набор данных, который является одномерным:
A=[?1/3,1/3]
B=[?1,?2/3]?[2/3,1]
Без использования слоя из двух или более скрытых элементов мы не можем классифицировать этот набор данных. Но, если мы используем сеть с двумя элементами, мы научимся представлять данные как хорошую кривую, которая позволяет нам разделять классы с помощью линии:
Что происходит? Один скрытый элемент учится срабатывать, когда x> -1/2, и один учится срабатывать, когда x> 1/2. Когда первый срабатывает, но не второй, мы знаем, что мы находимся в A.
Гипотеза многообразия
Это относится к наборам данных из реального мира, например, наборам изображений? Если вы серьезно относитесь к гипотезе многообразия, я думаю, что это имеет значение.
Многомерная гипотеза состоит в том, что естественные данные образуют низкоразмерные многообразия в пространстве имплантации. Есть и теоретические [1], и экспериментальные[2] причины полагать, что это правда. Если это так, то задача алгоритма классификации состоит в том, чтобы отделить пучок запутанных многообразий.
В предыдущих примерах один класс полностью окружал другой. Тем не менее маловероятно, что многообразие изображений собак полностью окружены коллекцией изображений кошек. Но есть и другие, более правдоподобные топологические ситуации, которые все еще могут возникнуть, как мы увидим в следующем разделе.
Связи и гомотопии
Еще один интересный набор данных — два связанных тора A и B.
Как и предыдущие наборы данных, которые мы рассмотрели, этот набор данных не может быть разделен без использования n + 1 измерений, а именно четвёртого измерения.
Связи изучаются в теории узлов, области топологии. Иногда, когда мы видим связь, не сразу понятно, является ли это бессвязность (множество вещей, которые запутались вместе, но могут быть разделены непрерывной деформацией) или нет.
Относительно простая бессвязность.
Если нейронная сеть, использующая слои только с тремя юнитами, может ее классифицировать, то она является бессвязной. (Вопрос: Может ли все бессвязности классифицироваться по сети только с тремя бессвязностями, теоретически?)
С точки зрения этого узла, непрерывная визуализация представлений, созданных нейронной сетью, это процедура распутывания связей. В топологии мы будем называть это эмбиентной изотопией между исходным звеном и разделенными.
Формально, изотопия окружающего пространства между многообразиями А и В является непрерывной функцией F: [0,1] ? X > Y такая, что каждый Ft является гомеоморфизмом из X в его диапазон, F0 является тождественной функцией, а F1 отображает A в B. Т.е. Ft непрерывно переходит из отображения A в себя, к отображению A в B.
Теорема: существует изотопия окружающего пространства между входом и представлением сетевого уровня, если: a) W не является вырожденной, b) мы готовы перенести нейроны в скрытый слой и c) имеется более 1 скрытого элемента.
2. Мы можем непрерывно переходить от функции тождества к b-отображению с помощью функции x > x + tb.
3. Мы можем непрерывно переходить от тождественной функции к поточечному использованию ? с функцией: x > (1-t) x + t? (x)
До сих пор такие связи, о которых мы говорили маловероятно появятся в реальных данных, но существуют обобщения более высокого уровня. Правдоподобно, что такие особенности могут существовать в реальных данных.
Связи и узлы являются одномерными многообразиями, но нам нужны 4 измерения, чтобы сети могли распутать все из них. Точно так же может потребоваться еще более высоко размерное пространство, чтобы иметь возможность разложить n-мерные многообразия. Все n-мерные многообразия могут быть разложены в 2n + 2 размерностях. [3]
Легкий выход
Простой путь, состоит в том, чтобы попытаться вытащить многообразия отдельно и растянуть части, которые запутаны настолько, насколько это возможно. Хотя это не будет близко к подлинному решению, такое решение может достичь относительно высокой точности классификации и быть приемлемым локальным минимумом.
Такие локальные минимумы абсолютно бесполезны с точки зрения попытки решения топологических проблем, но топологические проблемы могут обеспечить хорошую мотивацию для изучения этих проблем.
С другой стороны, если нас интересует исключительно достижение хороших результатов классификации, подход приемлем. Если крошечный бит многообразия данных зацепился за другое многообразие, является ли это проблемой? Вероятно, что удастся получить произвольно хорошие результаты классификации, несмотря на эту проблему.
Улучшенные слои для манипулирования многообразиями?
Трудно представить, что стандартные слои с аффинным преобразованием, действительно, хороши для манипулирования многообразиями.
Возможно, имеет смысл иметь совсем другой слой, который мы можем использовать в композиции с более традиционными?
Перспективным является изучение векторного поля с направлением, в котором мы хотим сдвинуть многообразие:
А затем деформируем пространство, основанное на векторном поле:
Можно было бы изучить векторное поле в неподвижных точках (просто взять некоторые фиксированные точки из набора тестовых данных для использования в качестве якорей) и каким-то образом интерполировать.
Где v0 и v1 — векторы, а f0 (x) и f1 (x) — n-мерные Гауссианы.
K-Nearest Neighbor Layers
Линейная разделимость может быть огромной и, возможно, необоснованной потребностью в нейронных сетях. Естественным является применение метода k-ближайших соседей (k-NN). Однако, успех k-NN в значительной степени зависит от представления, которое он классифицирует, поэтому требуется хорошее представление до того, как k-NN сможет работать хорошо.
k-NN дифференцируема по отношению к представлению, на которое оно действует. Таким образом, мы можем напрямую обучать сеть для классификации k-NN. Это можно рассматривать как своего рода слой «ближайшего соседа», который действует как альтернатива softmax.
Мы не хотим предуправлять всем нашим набором тренировок для каждой мини-партии, потому что это будет очень дорогостоящей процедурой. Адаптированный подход состоит в том, чтобы классифицировать каждый элемент мини-партии на основе классов других элементов мини-партии, давая каждому вес единицы делённой на расстояние от цели классификации.
К сожалению, даже при сложной архитектуре использование k-NN снижает вероятность ошибки — и использование более простых архитектур ухудшает результаты.
Заключение
Топологические свойства данных, такие как связи, могут сделать невозможным линейное разделение классов с использованием низкоразмерных сетей независимо от глубины. Даже в тех случаях, когда это технически возможно. Например, спирали, разделить которые это может быть очень сложно.
Для точной классификации данных, нейронным сетям необходимы широкие слои. Кроме того, традиционные слои нейронной сети, плохо подходят для представления важных манипуляций с многообразиями; даже, если бы мы установили весовые коэффициенты вручную, было бы сложным компактно представлять преобразования, которые мы хотим.
[2] Carlsson et al. found that local patches of images form a klein bottle.
[3] This result is mentioned in Wikipedia’s subsection on Isotopy versions.
Комментарии (23)
Praporshik_Zadov
03.07.2018 18:32Яснее принцип работы не стал…
molnij
04.07.2018 11:26если я правильно понял эту простыню — принцип работы сети на сигмоидальных активирующих функциях — биективно преобразовать пространство входных состояний в пространство выходных, где кластеры разных сигналов становятся разделимы гиперплоскостями.
Monnoroch
03.07.2018 19:27называются гомеоморфизмами (Wiki — Это отображение алгебраической системы А, сохраняющее основные операции и основные отношения).
Вы перепутали гомоморфизмы с гомеоморфизмами.kirillkosolapov Автор
03.07.2018 19:31Благодарю
Monnoroch
03.07.2018 19:35А еще вы неверно определили изотопию: каким-то образом F_0: X -> Y у вас стало отображением A «в себя», хотя явно видно, что это невозможно, ведь «X -> Y». Вам надо починить определение, сказав, что либо X \subset Y либо что-то получше, вроде F: [0, 1] x X -> Y_t X, Y_t \subset топологическое пространство \Omega.
molnij
04.07.2018 12:00Если можно, разобью комментарий на два.
Сначала по общим моментам
Извините, а русский для вас — родной язык? Просто меня очень смущают какие-то невероятно нагроможденные конструкции, которые я не могу разобрать и с десятого раза («Линейная разделимость может быть огромной и, возможно, необоснованной потребностью в нейронных сетях.» — я очень смутно понимаю о чем это может быть)
Также напрягает прям с самого старта заданный посыл, что сети не используются в медицине и оценке рисков из-за своей черноящечности. Я думаю быстрый гуглинг по использованию нейросетей в медицине может слегка изменить вашу позицию. Про риски ничего сказать не могу — оценка рисков, на мой вкус, вообще ближе к «консалтингу», чем к математике.
Ну и про некоторую несовместность с как-никак устоявшимися терминами глубины-размерности сетей вам уже указали.Phaker
04.07.2018 12:10+1Это же просто кривой перевод довольно известной статьи: http://colah.github.io/posts/2014-03-NN-Manifolds-Topology/ Хуже всего то, что переводчик не проставил ссылку на оригинал, выставив себя автором.
Phaker
04.07.2018 12:13Я не совсем прав, название статьи и автор упоминаются в первом абзаце. И всё же, учитывая, что это просто перевод, надо было как перевод и оформлять.
kirillkosolapov Автор
04.07.2018 12:39К сожалению, не увидел при создании возможности поменять на перевод, а при редактировании поменять нельзя. Выделил жирным ссылку, чтобы не путать читателей.
roryorangepants
04.07.2018 12:17Это фиаско.
Теперь, кстати, понятно, что на самом деле имелось в виду в тех строках, к которым я прицепился выше в комментариях. Ведь автор оригинала пишет:
It is impossible for a neural network to classify this dataset without having a layer that has 3 or more hidden units, regardless of depth.
Что означает «Невозможно классифицировать этот датасет, не имея слоя с 3 или более нейронами, независимо от глубины», во всяком случае, если под unit автор имеет в виду то же, что называют этим словом в Keras или sklearn — нейрон скрытого слоя.
А автору этого «перевода» двойка как за перевод, так и за то, что оригинальная статья указана лишь как референс, а на самом деле передраны и текст, и картинки.roryorangepants
04.07.2018 12:19И, кстати, теперь понятно, почему автор рассматривает в основном старые архитектуры и приемы. Ведь оригинальная статья была написана в 2014 году.
roryorangepants
04.07.2018 12:26И понятно, что же за такие таинственные «слои tang» упомянул автор. Имелись в виду, конечно же, слои с активацией tanh.
molnij
04.07.2018 12:03И второй — по теории
Я к сожалению не очень понял о чем в целом статья. Она подозрительно наукообразна, но выводы мягко говоря странные. Мы идем через топологию, гомеоморфизмы и изотопии, чтобы в конце сказать «существуют данные, которые неглубокие сети не смогут разрешить со стопроцентной гарантией». Но во-первых, вроде с этим никто особо и не спорит, а во-вторых такая задача (в области гарантии) обычно и не ставится перед сетями (да и ML в целом). Я думаю, можно даже переформулировать утверждение к виду «для любой заданной структуры сети можно найти набор данных, который сеть не сможет разрешить» и оно останется корректным (строго сходу доказать не возьмусь, но направление рассуждений вроде видно).
При этом обратите внимание, что вы пытаетесь идти от топологии данных, о которой чаще всего неизвестно ничего. А если известно — этим знанием пытаются пользоваться чтобы упростить задачу еще до обучения сети. Соответственно пытаться накладывать ограничения на сеть с помощью неизвестной топологии — ну так себе подход, на мой вкус. А еще надо помнить, что на практике сеть обучается на дискретном множестве и даже ваш пример с двумя вложенными кольцами вообще говоря разрешим с помощью узкого «клина» между двумя точками на внешнем кольце. Да, строго и аналитически получившийся результат не будет удовлетворять нужному множеству данных, но на практике — вполне уложится в всегда существующую ошибку.
А если вы хотите порассуждать об ограниченности сигмоидальных сетей — так зачем ограничиваться гомеоморфизмом? Ведь любая такая сеть — это по сути бесконечно дифференцируемая аналитическая функция на мой вкус — это куда более сильное утверждение, да и доказывать его практически не нужно — просто развернуть функцию из «послойного» представления и всё…
Ну и мне не встречалось пока специалистов, которые бы сомневались в том, что сети к сожалению пока работают «вопреки». Да, очевидно, что в общем виде пока нет способа как предложить структуру, решающую любую задачу (да и с структурой для любой заданной задачи не всё так хорошо, как хотелось бы). Да в конце концов, даже backprop работает только потому, что работает. Он вообще в теории не может находить глобальный минимум, но почему-то на практике иногда срабатывает достаточно хорошим образом.
FD4A
04.07.2018 12:35Например, спирали, разделить которые это может быть очень сложно.
Явно что-то не так.
Насколько понимаю сейчас в качестве нелинейности в основном используют ReLu так как считается быстро и в переделе его можно рассматривать как сумму бесконечного ряда сигмойдов, то есть выразительности ему хватает.
roryorangepants
Во-первых, «3 или более скрытых слоя» — это и есть глубина. Во-вторых, доказательства этому утверждению так и не увидел.
kirillkosolapov Автор
Благодарю за поправку. Это статья носит скорее характер размышления, чем строгого научного изложения и доказательства, я подумаю как лучше изложить обоснование.
roryorangepants
Даже с поправкой утверждение не особо корректное, так как стоит, конечно же, уточнить, что речь идёт только про сеть, где все скрытые слои имеют sigmoid-активацию (чего никто не делает последние лет шесть).
EvgenySgt
Интересное утверждение. Это для каких нс и задач?
roryorangepants
Для любых нерекуррентных сетей с глубиной больше 1-2 слоев сейчас повсеместно используют нелинейности семейства relu в качестве активации.
barkalov
В глубоком обучении термин «глубина», как это ни странно, имеет одинаково частое употребление в двух разных смыслах: глубина, как количество скрытых слоев (network depth); и глубина, как размерность слоя (layer depth).
roryorangepants
Пруфы можно? Потому что если где и говорят layer depth, то разве что в сверточных слоях, и имеют в виду там глубину тензора (т.к. он получается трёхмерным), соответствующую числу каналов. А вот в отношении количества нейронов в полносвязном слое как-то я и не слышал такого. А даже если бы и использовали, всё равно это «глубина слоя», а не «глубина сети».
BelBES
У вас какая-то своя терминология… сленгово обычно глубиной называют число слоев, в шириной число каналов...