В этом блоге я стремлюсь дать простую интерпретацию того, как нейронная сеть выполняет двоичную и мультиклассовую классификацию. Я объясняю, что двоичная классификация - это просто трюк, выполняемый сетью, а мультиклассовая классификация - это просто поиск оптимальных функций.

Простой 2D-вариант

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

Зеленая область - G - это граница целевого решения, такая, что для всех точек (x, y), принадлежащих G, наша сеть выводит 0. И аналогично все точки (x, y) в R выводят 1.

Рассмотрим простую нейронную сеть с одним скрытым слоем и двумя скрытыми нейронами для сравнения. На выходе получается одна вероятность P (другая - 1-P, так как классов всего два). Вычисление P в последнем слое будет соответствовать предыдущим вычислениям C1 и C2, переданным через функцию активации, вместе с последними весами и смещениями:

Что сводится к

где сигма (C1), сигма (C2) и P - три переменные. Мы создали трехмерную поверхность, которая каким-то образом объединяет входные данные X, Y для вывода третьей переменной P. Эти три переменные могут быть визуализированы как некоторая сложная поверхность.

Теперь запомните нашу цель, мы хотим, чтобы эта поверхность была такой, чтобы для (x, y), принадлежащего R, мы получали класс 1 с высоким P, а для (x, y) в G класс 1 получил низкий P (и и наоборот, класс 0 автоматически становится высоким).

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

Этот график таков, что для точек X, Y в красной области мы получаем P как выше 0,5, а для значений в зеленом мы получаем P ниже 0,5.

Граница зеленого и красного на рис. 2 - это граница принятия решения, где оба класса равны точно 0,5 (для большей ясности см. Рис. 3). Вы можете визуализировать эту границу принятия решения как гиперплоскость, разрезающую наш график. Наше отображение проецирует X, Y (которые не являются линейно разделяемыми) в другое пространство, где они становятся линейно разделяемыми, а затем передают линейный классификатор или гиперплоскость в этом пространстве. (Причина, по которой это линейный классификатор, заключается в том, что если я выберу точку поверхности с P = 0,5 и соединю ее с окружающими точками P = 0,5, из-за непрерывности функции я получу плавную кривую вокруг границ через которую я могу затем пройти гиперплоскость. Снова см. рис. 3)

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

3 класса

Предположим, у нас есть 3 класса A, B и C, и пусть соответствующие области X, Y будут RegionA, RegionB, RegionC. В этом случае наша сеть выводит вектор из 3 чисел, которые представляют собой исходную оценку каждого из них.

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

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

По сути, у нас есть три функции S1, S2, S3, которые принимают входные данные (x, y) и вычисляют исходную оценку для каждого класса. Мы хотим, чтобы эти функции были такими, что S1 ›› S2, S3, когда (x, y) принадлежит RegionA, S2 ›› S1, S3, когда (x, y) принадлежит RegionB, и S3 ›› S2, S1, когда (x, y) принадлежит RegionC.

Теперь мы можем переформулировать нашу задачу классификации как поиск трех функций S1, S2, S3 со свойствами: S1 ›S2, S3, когда (x, y) принадлежит RegionA S2 ›› S1, S3, когда (x, y) принадлежит RegionB и S3 ›› S2, S1, когда (x, y) принадлежит RegionC. Таким образом, наш поиск классификации превратился в поиск функций, обладающих этим свойством.

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

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

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

Заключение:

Мы можем расширить интерпретацию 3 классов до N классов и увидеть, что мы, по сути, ищем N нелинейных функций, которые больше или меньше друг друга в соответствующих входных (x, y, z…) значениях в пространстве.

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

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

Это дает нам более глубокое понимание методов, которые сеть использует для достижения своей цели оптимизации по снижению затрат. Надеюсь тебе понравилось!

Использованная литература:

  1. Обязательно посмотрите визуализацию: https://cs.stanford.edu/people/karpathy/convnetjs/demo/classify2d.html