В этой статье я кратко изложу абстрактную идею того, что такое внутренняя размерность геометрической фигуры, попутно введя один из вариантов размерности Минковского, а затем расскажу про другой, приблизительный способ оценки внутренней размерности, который применим к реальным (то есть, конечным) облакам точек и называется Two Nearest Neighbours (TwoNN). В конце статьи для интересующихся будут оставлены ссылки на несколько научных статей, в которых второй способ используется для анализов эмбеддингов нейросетей.

Итак, давайте разбираться!

Размерность Минковского

Допустим, у нас есть геометрическая фигура - например, круг. Как определить его размерность? Вопрос может показаться тривиальным - ведь минимальная размерность пространства, в которое можно вложить круг - два (плоскость - это двумерное пространство). Значит, размерность круга тоже два. Однако, такое наивное определение размерности геометрической фигуры (по минимальной размерности объемлющего пространства - в данном случае, двумерного) обладает очевидным недостатком: оно меняется даже при небольших деформациях нашей фигуры. Например, мы можем вложить круг в трехмерное пространство и слегка согнуть его - так, чтобы он перестал быть плоским. Тогда по нашему определению его размерность станет равна 3, что показывает большую ограниченность и условность такого наивного определения. Поэтому давайте рассмотрим другой, более тонкий способ оценить размерность фигуры, описанный в замечательном видео от 3blue1brown про фракталы (Рис. 1-3 ниже я тоже взяла оттуда).

Для этого мы поместим наш круг радиуса x на "клетчатую бумагу" с квадратиками со стороной a (пока что будем снова считать круг идеально плоским в целях упрощения изложения). А потом посчитаем, каким минимальным количеством квадратиков можно полностью его покрыть. Это количество, очевидно, будет зависеть от x и a, в данном примере оно равно 69:

Рис. 1 (3blue1brown)
Рис. 1 (3blue1brown)

Далее, если радиус x увеличить, то количество квадратиков, покрывающих круг тоже увеличится - например, при увеличении радиуса в два раза оно увеличивается до 234:

Рис. 2 (3blue1brown)
Рис. 2 (3blue1brown)

Пробуя разные радиусы x, можно увидеть, по какой именно закономерности растет минимальное количество квадратиков, покрывающих круг. Можно установить, что это количество, которое мы обозначим f(x), растет квадратично, то есть, пропорционально квадрату радиуса круга:

Рис. 3 (3blue1brown)
Рис. 3 (3blue1brown)

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

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

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

Таким образом, показатель степени в формуле на рис. 3 (напомню, формула выражает количество квадратиков/кубиков/многомерных кубиков, покрывающих ту фигуру, размерность которой мы хотим измерить), вполне неплохо совпадает с нашим интуитивным пониманием размерности.

Но что будет, если мы попробуем таким же образом исследовать не круг или шар, а нечто более сложное, например, треугольник Серпинского (рис. 4-5)?

Рис. 4 (3blue1brown)
Рис. 4 (3blue1brown)
Рис. 5 (3blue1brown)
Рис. 5 (3blue1brown)

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

\frac{\ln3}{\ln2} \approx 1.585.

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


Итак, мы сейчас рассмотрели первое определение внутренней размерности геометрической фигуры. Она называется размерностью Минковского. Также конкретно для приведенного выше варианта определения размерности Минковского с квадратиками и кубиками, можно встретить название upper-box dimension или просто box-counting dimension.

Примечание. Если вы не до конца поняли идею, я рекомендую просмотреть оригинальное видео от 3blue1brown и только потом вернуться к данной статье; ну, а если все хорошо, то давайте двигаться дальше.

Теперь у читателя может возникнуть вопрос: а почему статья называется "Размерность Минковского и Two Nearest Neighbours", а не просто "Размерность Минковского"? Зачем нам вводить определения каких-то других внутренних размерностей? Дело в том, что размерность Минковского корректно определена только если наша геометрическая фигура содержит бесконечное число точек. Если же мы поместим фигуру, составленную из конечного числа точек, на клетчатую плоскость и начнем ее растягивать так же, как делали это с кругом, то мы увидим следующее. Начиная с какого-то момента, количество квадратиков, покрывающих нашу фигуру, прекратит увеличиваться и станет константой и перестанет увеличиваться, потому что каждая точка будет покрыта ровно одним квадратиком. А если это количество равно константе, то показатель степени в формуле на Рис. 3 равен нулю.

Таким образом, размерность Минковского любой фигуры, состоящей из конечного числа точек, тоже будет равна нулю. Но ведь все реальные данные, которые мы встречаем в Data Science, как раз и состоят из конечного числа точек, в отличие от абстрактных геометрических фигур вроде кругов или фракталов из примеров выше. Конечно, можно попробовать приспособить размерность Минковского под конечные множества, но на практике это выходит не очень хорошо и эффективно. Поэтому и пришлось разработать для оценки внутренней размерности таких множеств новые, приблизительные, методы. При этом каждый такой метод имеет свою область применимости, так как рассчитан на множества определенного размера и основан на определенных предположениях о распределении, из которого пришли точки множества.

Two Nearest Neighbours

Один из таких методов - Two Nearest Neighbours или, кратко, TwoNN.

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

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

\mathbb{E}[dist] = \frac{n}{n+1}r

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

Рис. 6 (colab)
Рис. 6 (colab)

Теперь можно перейти к тому, что делает метод TwoNN для оценки внутренней размерности облака точек. Для произвольной точки датасета (назовем ее точка A), он находит ее самого ближайшего соседа (точку B) и следующего ближайшего соседа (точку C). Предполагается, что на маленьких масштабах облако точек, полученных из естественных данных, должно быть распределено более-менее равномерно, и поэтому считается, что точка B сэмплирована из равномерного распределения внутри шара с центром A и радиусом |AC|:

Рис. 7. Воображаемый шар, величаво выплывший нам навстречу из глубин приложения Microsoft Paint.
Рис. 7. Воображаемый шар, величаво выплывший нам навстречу из глубин приложения Microsoft Paint.

При этом размерность шара неизвестна - мы ведь можем в пространство большой размерности поместить и двумерный круг, и трехмерный шар, и сколько-угодно-мерный шар, если только его размерность не превышает размерность объемлющего пространства. Поэтому делается такой трюк: размерность шара n, из которого мы, по нашему предположению, сэмплировали точку B, выясняется из соотношения величин |AC| и |AB| (здесь и далее предполагаем, что |AB| строго меньше |AC| и для простоты не рассматриваем случай их равенства). Подставляя их вместо r и E(dist) в формулу выше, получаем:

|AB| = \frac{n}{n+1}|AC|,n = \frac{|AB|}{|AC| - |AB|}

Таким образом для каждой точки из нашего облака получатся некоторая очень-очень грубая оценка n. Кажется, что эта оценка взята с потолка; однако, если точек много, и мы посчитаем такую оценку для каждой из них, то случайности сгладятся, и по совокупному результату можно получить определенное представление о внутренней размерности всего облака точек как целого.

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

Объясняется это тем, что ключевое предположение о "равномерности" облака точек на малых масштабах - из которого, напомню, мы вывели нашу оценку на n, - в реальности выполняется в лучшем случае приблизительно. И чем дальше реальное распределение от этого предположения, тем хуже метод работает. Поэтому всегда нужно проверять, насколько оценка стабильна при изменении размера датасета, если она сильно меняется, это значит, что предположение о равномерности генерирующего распределения на малых масштабах было неверным. Более подробно про теоретическое обоснование и ограничения метода TwoNN написано в статье на Nature Scientific Reports под названием Estimating the intrinsic dimension of datasets by a minimal neighborhood information.

Two Nearest Neighbours реализован в библиотеке skdim и является одним из инструментов, который используется для анализа эмбеддингов нейросетей и встречается в различных научных статьях, например:

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

К сожалению, пока что я не видела более прикладных применений TwoNN. Если вы их знаете, поделитесь в комментариях! Также дайте знать, если заметили какую-либо неточность в изложении и вообще расскажите о своих впечатлениях. А я в следующий раз постараюсь рассказать вам о двух других способах, более сложных, но и более стабильных способах на практике оценки внутренней размерности - PHD (Persistent Homology Dimension) и MLE (Maximum Likelihood Estimation).

Комментарии (23)


  1. lazy_mathematician
    10.09.2024 21:00
    +2

    А можно где-то подчерпнуть полный перечень существующих на данный момент размерностей? Неплохо бы рассмотреть все! (но это уже на усмотрение))


    1. tech_priestess Автор
      10.09.2024 21:00

      На самом деле, придумали очень много вариантов, а используют всего несколько. Я собираюсь написать про те, про которые мне известно, что их кто-то использует)


      1. lazy_mathematician
        10.09.2024 21:00

        У меня есть интересное обобщение на отрицательные и комплексные мерности - напишите в лс, я дам ссылку. Очень хочу обсудить, но писать о этом открыто пока не готов. Написал вам об этом в вашем тг, но вы не ответили...


    1. belch84
      10.09.2024 21:00
      +7

      Здесь краткий обзор различных размерностей в популярном виде

      Вот табличка оттуда


  1. muxa_ru
    10.09.2024 21:00
    +1

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

    То есть, если свернуть к трубочку листок с нарисованным кругом, то нарисованный круг перестанет быть двухмерным?


    1. Imaginarium
      10.09.2024 21:00
      +2

      Нет, просто он начнет вкладываться в трехмерное пространство, это контрпример для наивного определения, не более


      1. muxa_ru
        10.09.2024 21:00

        для наивного определения

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

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

        И этих размерностей не одна, как можно было бы подумать из формулировки.

        Итак, мы сейчас рассмотрели первое определение внутренней размерности геометрической фигуры. Она называется размерностью Минковского.

        И не две, если учитывать "наивный" вариант.

        Их больше и все они являются равноправными выдумками.


  1. excoder
    10.09.2024 21:00
    +1

    @tech_priestessвопрос!

    for i in range(dims):
        point[i] = np.random.uniform(-1, 1)
    if np.sum(np.square(point)) <= 1:
        points.append(point)

    А является ли это корректной генерацией именно равномерно в сфере распределённых точек? Изотропии же не получается, казалось бы для чистоты эксперимента нужно семплировать rejection-free способом: https://baezortega.github.io/2018/10/14/hypersphere-sampling/


    1. tech_priestess Автор
      10.09.2024 21:00

      Я не вижу проблемы с изотропией. В n-кубе, внутри которого находится n-шар, точки ведь распределены равномерно. Я не вижу, как можно потерять равномерность, когда мы просто ограничиваем равномерное распределение на носитель поменьше.

      Другое дело, что приведенный в колабе наивный алгоритм, конечно, очень вычислительно неэффективен для шаров большой размерности. Автор приведенной статьи критикует именно этот аспект и этим мотивирует необходимость вводить rejection-free способ.

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


      1. janatem
        10.09.2024 21:00

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


        1. MapleBloom
          10.09.2024 21:00

          Статистика не мой конек, но что-то мне подсказывает - так не получится равномерное распределение в пространстве.
          Т.е выпадение 0 и 0,5 по первой координате равновероятно, но уже выпадение 0 по второй координате будет иметь разные вероятности в первом и втором случае.
          Где я ошибаюсь?


  1. Imaginarium
    10.09.2024 21:00
    +2

    Спасибо за статью, классно, интересно и полезно, но кровь из глаз от обозначения натурального логарифма в ТеХ: надо использовать \ln, чтобы отображался \ln .


    1. tech_priestess Автор
      10.09.2024 21:00
      +2

      Поправила значки логарифма и мат.ожидания


      1. Imaginarium
        10.09.2024 21:00

        Спасибо, так гораздо лучше


  1. bigcrush
    10.09.2024 21:00

    При этом размерность шара неизвестна

    Что-то совсем не понятное. Нам не известна размерность пространства, но мы как-то знаем расстояние между точками. Что такое расстояние м/у точками в этом случае?


    1. belch84
      10.09.2024 21:00

      Что такое расстояние м/у точками в этом случае?

      Метрическое пространство

      С таким определением можно задавать метрику (способ вычисления расстояния между элементами множества) для чего угодно, например, для функций. Кроме того, в обычном эвклидовом пространстве можно задать расстояние способом, отличным от традиционного, при этом в двумерном пространстве окружность может иметь форму квадрата


      1. bigcrush
        10.09.2024 21:00

        Я себе почему-то представил точки именно в евклидовом. С произвольным метрическим понятно. Спасибо за статью.


  1. zumrus
    10.09.2024 21:00

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

    Разве мы не должны говорить, что в этом случае измеряется лишь размерность многообразия в данной малой окрестности, а не всего пространства признаков (или чего там у нас)?


  1. zumrus
    10.09.2024 21:00
    +2

    К сожалению, пока что я не видела более прикладных применений TwoNN. Если вы их знаете, поделитесь в комментариях! 

    Извольте. Очень изящная методика по определению ИИ-сгенерированности текстов
    https://openreview.net/forum?id=8uOZ0kNji6


    1. zumrus
      10.09.2024 21:00

      там, правда, не TwoNN, а другой метод определения размерности, но идея в общем понятная


      1. tech_priestess Автор
        10.09.2024 21:00
        +4

        А, так я одна из авторов этой статьи. Приятно слышать, что вам понравилось)
        В самом деле, TwoNN не очень хорошо работал в контексте той статьи, поэтому мы в итоге от него отказались и в конце остановились на PH-dimension (альтернативно MLE тоже работал в том контексте, но несколько хуже).


      1. tech_priestess Автор
        10.09.2024 21:00
        +2

        Вот, а мне было бы интересно, где для решения прикладной задачи пригождается именно TwoNN.


  1. LinkToOS
    10.09.2024 21:00

    Например, мы можем вложить круг в трехмерное пространство и слегка согнуть его - так, чтобы он перестал быть плоским.

    В каком смысле "согнуть"? Это не физический объект. Круг можно отобразить на цилиндрической поверхности в трехмерном пространстве. Но это уже не будет круг на плоскости.

    Тогда по нашему определению его размерность станет равна 3, что показывает большую ограниченность и условность такого наивного определения.

    Если вы помещаете круг в трехмерное пространство, у него увеличивается количество степеней свободы. У него появляется проекция на плоскость, которая может быть овалом или линией. (при этом сам круг остается кругом). Тогда для описания состояния круга нужно вводить новый параметр, в дополнение к размеру и координатам. Например наклон.

    Далее, если радиус x увеличить, то количество квадратиков, покрывающих круг тоже увеличится

    Да, оно увеличится пропорционально увеличению площади. То есть вы всего-лишь показали зависимость площади от радиуса. При чем здесь размерность?

    коэффициент c на картинке выше равен числу пи, а количество квадратиков, покрывающих круг, при x >> a приблизительно равно его площади; но мы не будем на этом останавливаться.

    Нужно остановиться, и объяснить почему выбрана зависимость числа квадратиков именно от радиуса.
    Вы не объяснили почему в качестве переменной выбрали радиус, а не длину окружности или площадь. У треугольника например нет радиуса. Как вы будете обобщать понятие размерности на другие фигуры?
    Так же непонятно, почему меняется радиус круга, и не размер квадратиков.
    Непонятно почему выбран круг, а не квадрат. В квадрат можно вписать целое число квадратов, а в круг нельзя. (к слову, целое число кругов в круг тоже не впишешь)
    И еще к слову, для круга, квадрата, и равностороннего треугольника, достаточно использовать один параметр, для определения размера (радиус для круга, длину стороны для квадрата и треугольника). Для ромба одного параметра уже недостаточно.
    Отсюда вопрос - какой изменяемый параметр, вместо радиуса, вы будете использовать в случае, например, трапеции, для ее масштабирования?

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

    А если мы будем вращать круг в трехмерном пространстве по оси диаметра, и кубики перестанут "лежать" на поверхности, а круг будет пересекать кубики по их диагонали? Как это повлияет на число кубиков "покрывающих" круг?

    Но что будет, если мы попробуем таким же образом исследовать не круг или шар, а нечто более сложное, например, треугольник Серпинского
    Оказывается, в этом случае количество квадратов растет быстрее, чем по линейной закономерности, но медленнее, чем по квадратичной.

    Расти относительно чего? Что вы используете вместо радиуса (которого нет у треугольника)? Число итераций? Построение треугольника Серпинского производится по алгоритму, а не по формуле в которой можно менять одно значение и получать треугольник большего размера.

    Итак, мы сейчас рассмотрели первое определение внутренней размерности геометрической фигуры. Она называется размерностью Минковского.

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

    Таким образом, размерность Минковского любой фигуры, состоящей из конечного числа точек, тоже будет равна нулю.

    Это совершенно непонятно. Фигуру можно представить как в виде конечного множества точек, так и в виде бесконечного множества. (За исключением круга. Круг представленный в виде конечного множества точек является многоугольником.)