2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Поиск скрытых закономерностей (паттернов)
Сообщение04.03.2025, 23:11 


12/07/15
3494
г. Чехов
Я пытаюсь разработать алгоритм обучения без учителя. Общий смысл такой: ищем закономерности в обучающих данных как функцию f(), которая аппроксимируется нейросетью небольшой структуры.

Тезисами:
1. Обучающие данные - это набор точек. (Для простоты можно представлять точки на плоскости, т.е. точки - это объекты с двумя признаками $x_1$ и $x_2$.)
2. Я принял такое допущение: нейросеть аппроксимирует функцию вида $p_j = f(p_i)$, где $p_i$ и $p_j$ - это точки из обучающего датасета.
3. Обучение происходит путём попарного сопоставления точек из датасета. Итого образуется $n(n-1)$ пар точек при размере датасета $n$.
4. Если точка $p_j$ попадает в окрестность модельной точки $f(p_i)$, то функция близости выдаёт результат почти 1; если точка далеко от этой окрестности, то функция близости выдаёт результат почти 0. Функция близости $c(f(p_i), p_j) = \exp(-\alpha \cdot r)$, где $r$ - евклидово расстояние между точками $p_j$ и $f(p_i)$.
5. Если перебрать все точки из датасета в качестве $p_j$, за исключением исходной точки $p_i$, и найти наибольшее значение $c$, то результат вычисления будет по сути представлять область определения функции (domain of the function). $domain[p_i] = \max\limits_{j, j \ne i}(c(f(p_i), p_j))$ Чем выше $domain$ (максимум $1.0$), тем лучше функция подходит для точки (точка попала в область определения). При $domain \to 0.0$ точка $p_i$ находится вне области определения функции.
6. Но область определения функции - это не единственная важная характеристика. Мне кажется, что гораздо важнее область значений функции (range of the function). $range[p_j] = \max\limits_{i,i \ne j} (f(p_i), p_j)$.
7. В качестве функции потерь я взял сумму $1 - \frac{\sum\limits_{j,j \ne i} sigmoid(\gamma \cdot range[p_j])}{n-1}$. Можно ещё взять вместо максимума усредненное значение функции близости $1 - \frac{\sum\limits_{j,j \ne i} sigmoid(\gamma \frac{\sum\limits_{i,i \ne j} c(f(p_i), p_j)}{n-1})}{n-1}$, эта функция потерь позволяет в начале обучения меньше сваливаться в локальные минимумы.

Чисто теоретически алгоритм может обнаруживать закономерности типа симметрии, фрактальной схожести, но образуются очень глубокие локальные минимумы, выползать из которых позволяют коэффициенты $\alpha$ и $\gamma$, которые я с трудом подкручиваю вручную. В итоге нейросеть стремится аппроксимировать зависимости между соседними точками. Было бы неплохо, например, выучивать такую функцию, которая на вход получила первую точку и последовательными итерациями применения функции находила все остальные точки датасета или хотя бы существенную долю.

Короче теория на этот счёт у меня ещё пока сырая. Какова лучшая цель обучения? Если кто-то предложит идеи, я могу обкатать.

 Профиль  
                  
 
 Re: Поиск скрытых закономерностей (паттернов)
Сообщение05.03.2025, 18:54 


12/07/15
3494
г. Чехов
Можно каждую точку представить как вершину графа. Тогда дуги, соединяющие точки в двух направлениях, можно взвесить функцией близости.
Идеальной является функция $f()$, которая образует граф-путь без циклов между всеми точками последовательно с весом дуг $1.0$.

 Профиль  
                  
 
 Re: Поиск скрытых закономерностей (паттернов)
Сообщение12.03.2025, 07:29 


12/07/15
3494
г. Чехов
В общем, задачу поиска скрытых закономерностей я формулирую в общем виде так: нужно обучить одну или несколько простых нейросетевых структур, которые смогут генерировать объекты (точки) представленной выборки с некоторой точностью.

1. При этом можно выделить первый способ генерации - итеративный - это когда берётся одна или несколько стартовых точек, они пропускаются через нейросеть, получается набор вторых точек, вторые точки пропускаются через нейросеть, получаются третьи... И так далее. Для этого способа нужна дополнительная нейросеть, которая от 0 до 1 оценивает область определения функции (domain of the function) - это вес, который определяет, насколько точно нейросеть генерирует очередную точку. Если вес низкий, то нужно прекратить генерацию последовательности точек.

2. Второй способ - стартовые точки равномерно распределены в ограниченном $m-мерном пространстве. Нейросеть обучается переводить фиктивные стартовые точки в реальные точки из датасета.

 Профиль  
                  
 
 Re: Поиск скрытых закономерностей (паттернов)
Сообщение13.03.2025, 19:23 


12/07/15
3494
г. Чехов
Я до этого момента формулировал задачу поиска скрытых закономерностей. Но также важно понимать, как использовать найденные закономерности в дальнейшем.

Я ничего нового не придумал, полный процесс классически состоит из двух этапов:
1. Обучение нейроструктур (в нашем случае - это поиск скрытых закономерностей, который описан выше)
2. Эксплуатация нейроструктур на новом датасете

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

Два варианта:
а. Если на этапе эксплуатации (2) также нет учителя, то использование предобученных нейроструктур может заключаться в генерации новых точек, либо детекции аномалий.
б. Если на этапе эксплуатации (2) датасет содержит точки с метками (обучение с учителем), то эксплуатация потребует обучения дополнительной нейроструктуры (дообучаемые слои общей нейросети). Мы можем взять одну точку и найти для всех преобразующих латентное пространство нейроструктур максимальные значения функции сходства выбранной точки и выхода структуры. Либо в случае итеративных нейроструктур найти максимальные значения функции сходства между точкой и одной из точек датасета с той же меткой. Эти значения функции сходства могут быть изучены дообучаемыми слоями с обратным распространением ошибки от метки.

P.S. Строго говоря, в случае обучения с учителем процесс состоит из трёх этапов:
1. Поиск скрытых закономерностей
2. Дообучение под задачу
3. Инференс

Эксплуатация, в моём понимании, это дообучение + инференс.

-- 13.03.2025, 19:41 --

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

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

 Профиль  
                  
 
 Re: Поиск скрытых закономерностей (паттернов)
Сообщение14.03.2025, 19:03 


12/07/15
3494
г. Чехов
Я хотел рассмотреть такой простой датасет, как у XOR-задачи. Так как обучение первоначально без меток, то датасет содержит только точки (0, 0), (0, 1), (1, 0) и (1, 1). Скрытые закономерности, в данном случае - это то, что координату 0 можно оставить без изменений или увеличить на единицу, а координату 1 можно также оставить без изменения, либо уменьшить на единицу. Вполне запросто с изучением этих закономерностей справятся одиночные линейные слои. Пользуясь этими закономерностями, можно генерировать новые точки. Но в процессе обмозговывания я понял, что эти закономерности настолько просты и равномерно распределены между точками, что не дают никакого выигрыша в дальнейшем дообучении. Это просто особенность данного рода датасета. Но чисто теоретически можно проделать этот весь путь и на основе предообученных нейроструктур дообучить нейросеть задачам AND, OR, XOR и т.д.

Придётся всё-таки брать цифры MNIST. Как действовать? Мы берём один пример из датасета и изучаем закономерности внутри этого примера. Для этого мы в качестве точки берём пиксель - структуру вида $(i, j, value)$. Скрытые закономерности могут иметь вид:
$(i_2, j_2, value_2) = f(i_1, j_1, value_1)$
или
$(i, j, value) = f(LatentPoint)$

Ещё можно для рекурсивной формулы взять две точки из разных примеров. Например, обнаружить, что цифры часто похожи друг на друга полностью или частично, т.е. $(i_2, j_2, value_2) \sim (i_1, j_1, value_1)$

Перебор всех точек имеет сложность $O(n^2)$, это необходимо учитывать. Отдельный вопрос, как с этим комбинаторным взрывом бороться. Думаю может помочь область определения функции (domain), если точка не находится в области значения ($domain = 0$), то не брать её в рассмотрение.

 Профиль  
                  
 
 Re: Поиск скрытых закономерностей (паттернов)
Сообщение14.03.2025, 19:18 
Заслуженный участник
Аватара пользователя


16/07/14
9528
Цюрих
Вы тут не автоэнкодер изобретаете?

 Профиль  
                  
 
 Re: Поиск скрытых закономерностей (паттернов)
Сообщение14.03.2025, 21:41 


12/07/15
3494
г. Чехов
В принципе да. Автоэнкодер решает сильно похожие задачи. Мне даже требуется усилие, чтобы сообразить, в чём разница. Но разница, очевидно, имеется. Первое отличие - отсутствует энкодер и вообще предлагаемые структуры совсем не "авто", так как продуцируют новые точки, а не исходные. Естественно, вариационный автоэнкодер (VAE) напоминает нейроструктуры, преобразующие латентное пространство в моём случае. Если честно, мне непонятно, зачем нужен энкодер в автоэнкодере вообще, пустая трата вычислений. Хотя в моём случае "пустой тратой" является структура, вычисляющая область определения (domain)...

-- 14.03.2025, 22:08 --

Смотрите: я сформулировал простое объяснение - я просто предложил энкодер убрать, а в качестве латентного пространства автоэнкодера использовать пространство альтернативных точек, то есть генерировать точку $p_2$ по альтернативной точке из датасета $p_1$. В случае VAE я предложил также убрать энкодер, там может пригодиться domain-структура, которая обучается достаточно легко. Но эти все утверждения пока хз, надо демонстрировать.

-- 14.03.2025, 22:17 --

Mihaylo в сообщении #1678613 писал(а):
В случае VAE я предложил также убрать энкодер

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

 Профиль  
                  
 
 Re: Поиск скрытых закономерностей (паттернов)
Сообщение15.03.2025, 08:02 


12/07/15
3494
г. Чехов
Ещё какие отличия от автоэнкодеров? У автоэнкодеров нет такой проблемы как область определения функции (domain), эту проблему решает энкодер. Нейроструктура всегда отобразит точку в саму себя. По выходу энкодера можно обнаруживать аномалии, то есть когда входная точка (входной тензор) находится вне области определения. Я вместо простой функции потерь MSE, которая обычно применяется для автоэнкодеров, предложил функцию сходства - экспоненциальную (см. формулы выше), а ещё можно применять функцию косинусного сходства. Эти функции выдают значения от 0 до 1. Это позволяет ввести хорошо интерпретируемые понятия domain и range. Вместо энкодера требуется нейроструктура, предсказывающая domain. Она, кстати, обучается отдельно и гораздо легче, чем декодер.
Какие ещё отличия? Когда работают с датасетом MNIST, то автоэнкодеру скармливают изображение целиком (784-мерный тензор). Я же хочу, чтобы структуры работали с отдельными пикселями. Такую задачу автоэнкодеру можно поставить, но он будет бесполезен в этом деле, ибо закономерностей внутри пикселей нет. Закономерности имеются между пикселями.

 Профиль  
                  
 
 Re: Поиск скрытых закономерностей (паттернов)
Сообщение15.03.2025, 10:01 


12/07/15
3494
г. Чехов
mihaild
Ваше короткое сообщение было полезным. :D Я про автоэнкодеры был в курсе, но никогда не использовал на практике. Мне всегда было непонятно, зачем нужен энкодер в автоэнкодере, точнее, зачем нужны две огромные нейросети - энкодер и декодер, кто-то лишний... Короче, скорее всего, я под влиянием своей ознакомленности с автоэнкодерами и всякой теории, лежащей вокруг всего этого, изобретаю свой иной велосипед. :roll:

Теперь, когда связь с известной теорией обнаружена, можно использовать более "привычные" названия:
$(i_2, j_2, value_2) = f(i_1, j_1, value_1)$ - эту функцию реализует мутуоэнкодер. :facepalm:
$(i, j, value) = f(LatentPoint)$ - а это вариационный декодер (если получится избавиться от энкодера).

Недостатки моего подхода:
1. Мутуоэнкодеры требуют перебора $n (n - 1)$ пар точек. Нужно как-то сократить перебор. Это должны быть эвристики, которые должна открывать какая-то дополнительная нейросеть или же предопределённые эвристики?
2. Мутуоэнкодер далеко не всегда генерирует полезные данные, нужна оценка domain. Если мутуоэнкодер имеет низкий domain для входных данных, то нужно держать в запасе несколько других мутуоэнкодеров. Скорее всего, нужно придумать какую нейроструктуру, которая оценивает domain нескольких мутуэнкодеров и соответственно дирижирует их выходами.

Достоинства:
1. Интерпретируемость. То, что является недостатком, можно превратить в достоинство. Зачем производить вычисления, если domain явно низкий?..

 Профиль  
                  
 
 Re: Поиск скрытых закономерностей (паттернов)
Сообщение15.03.2025, 11:46 


12/07/15
3494
г. Чехов
Продолжаю галлюцинировать:
1. Про domain-evaluator уже высказывался - это специальная нейросеть-оценщик... Domain - это оценка, насколько хорошо мутуоэнкодер может сгенерировать новые данные.
2. Range-evaluator даёт оценку range, насколько хорошо имеющиеся данные объясняются тем или иным мутуоэнкодером.
3. Если мы возьмём две точки и для одной вычислим domain, а для второй - range, то произведение $domain \cdot range$ - общая оценка функции, насколько она удовлетворяет данным.

Мне хочется наступить на пятки трансформерам... Сходства:
1. Трансформеры также работают с позиционными векторами ($i$ и $j$ - позиции в задаче MNIST).
2. Перебираются пары токенов, сложность $O(n^2)$
3. Работа с последовательностями произвольной длины
4. Генерация и детекция аномалий

Отличия трансформеров:
1. Также как и у автоэнкодеров - всё отдано на откуп нейросети, непонятно, что творится в весах. Отсутствие интерпретируемости.
2. Как и у автоэнкодеров - вычисления производятся в полной мере единой структурой даже если закономерность элементарнейшая. Нельзя для низких domain-range отменять вычисления.

 Профиль  
                  
 
 Re: Поиск скрытых закономерностей (паттернов)
Сообщение16.03.2025, 10:38 


12/07/15
3494
г. Чехов
Mihaylo в сообщении #1678660 писал(а):
3. Если мы возьмём две точки и для одной вычислим domain, а для второй - range, то произведение $domain \cdot range$ - общая оценка функции, насколько она удовлетворяет данным.

Это действительно фантазия, стереть из памяти.

===========

В общем, я разобрался с вариационным автоэнкодером, там по-хитрому используется расстояние Кульбака - Лейблера и я понял, что это не то, что мне требуется. VAE - это по-настоящему генерация, в том числе генерация объектов, которых не было в обучающей выборке. Мне же нужно простое моделирование, а не генеративное моделирование. Поэтому название "вариационный декодер" для моей нейроструктуры нежизнеспособно. Пока ничего кроме LST-структуры в голову не приходит (latent space transformation), так и буду величать пока.

 Профиль  
                  
 
 Re: Поиск скрытых закономерностей (паттернов)
Сообщение17.03.2025, 18:49 


12/07/15
3494
г. Чехов
У автоэнкодеров нет проблемы вычислительной сложности $O(n^2)$, где $n$ - количество пикселей. Поэтому, чтобы мутуоэнкодеры показали свою жизнеспособность по сравнению с автоэнкодерами, они должны достичь сложности хотя бы $O(n)$. Единственный способ - это быстрый отбор пар точек (фильтрация), в результате которого рассматриваются только $O(n)$ пар точек, а остальные $O(n^2)$ пар должны быть отброшены. Это очень сильный фильтр.

Либо мы соглашаемся с имеющейся сложностью, просто принимаем, что мутуоэнкодеры имеют чуть более широкие сферы применения, а именно: способность анализировать отдельные пиксели, а не только всё изображение. В конце концов, трансформеры же популярны нынче, а у них тоже есть проблема сложности $O(n^2)$.

Я вижу такое решение: domain-эвалюатор и range-эвалюатор. Это такие две нейросети, которые скажут, каков потенциал той или иной структуры для правильного моделирования данных.
Два варианта:
1. Имеется единое пространство данных (например, набор точек на плоскости).
2. Имеется множество пространств частично зависимых данных (например, датасет MNIST с рукописными цифрами). Например, мы взяли некоторое изображение цифры 28х28, посмотрели несколько пар точек - эвалюаторы учитывают не только эти пары, но и пары точек в других изображениях цифр - сопоставляют.

Эвалюаторы дают оценку от 0 до 1, какой предсказательный потенциал имеет та или иная нейроструктура в текущих данных (в текущем изображении). Лишь только понятие "текущести" отличается. Но они не просто дают оценку, а делают это для конкретных точек.

Пока что, в моём понимании, эвалюаторы должны принять на вход набор проверенных (текущих) пар точек, то есть имеющих оценки близости $c(p_2, f(p_1))$ по всем нейроструктурам и запрашиваемые координаты точки $i$ и $j$ и выдать оценку потенциала точки от 0 до 1.

 Профиль  
                  
 
 Re: Поиск скрытых закономерностей (паттернов)
Сообщение21.03.2025, 19:38 


12/07/15
3494
г. Чехов
В первом своём сообщении я обозначил функцию потерь:
Mihaylo в сообщении #1677481 писал(а):
$1 - \frac{\sum\limits_{j,j \ne i} sigmoid(\gamma \cdot range[p_j])}{n-1}$

Mihaylo в сообщении #1677481 писал(а):
$range[p_j] = \max\limits_{i,i \ne j} (f(p_i), p_j)$

Ошибочка только в записи, вот так правильно: $range[p_j] = \max\limits_{i,i \ne j} (similarity(f(p_i), p_j))$, где $similarity(f(p_i), p_j) = \exp(-\alpha \cdot r)$ - функция сходства (близости), я её упоминал там же. Можно также взять известную функцию косинусного сходства, но у неё нет коэффициента, который возможно нужен для регуляризации.
Эту функцию потерь можно назвать Range Uncovery (непокрытие диапазона) - какова доля точек (данных) не имеет достаточного объяснения. Эту величину нужно уменьшать.
Эта функция потерь проверена на практике, работает. То есть можно взять несколько мутуоэнкодеров несложной структуры и с помощью их "объяснить" максимальное количество точек в датасете, обучив их, минимизируя Range Uncovery.
Для этого нужно в идеале перебрать $O(n^2)$ пар точек.

Теперь о том, что мутуоэнкодеры можно приспособить УСЛОВНО для исследования внешних закономерностей объектов в датасете и для исследования внутренних закономерностей. В датасете рукописных цифр MNIST объектами условно являются цифры. Можно сравнивать цифры между собой - это классическое исследование внешних закономерностей, широко известно и широко распространено. Но этого недостаточно, можно за объекты принять отдельные пиксели изображений. Я ранее постоянно употреблял слово "точки", но в более широком смысле - это объекты по терминологии машинного обучения. Если мы принимаем в качестве объектов пиксели изображений, то датасет обретает иерархическую структуру "датасет - изображение - пиксель". Изображение - это набор объектов (пикселей). Эта структура нужна для того, чтобы исключить применение мутуоэнкодеров между пикселями разных изображений.

Теперь о том, как уйти от квадратичной сложности. Для этого предназначается domain-эвалюатор. Мы берём изображение цифры и каким-то образом находим некоторое критическое количество пар пикселей, которые очень хорошо согласованы хотя бы одним из мутуоэнкодеров, т.е. функция сходства высокая ($similarity(f(p_1), p_2) > threshold$). Мы собираем статистику об этих парах пикселей с помощью полносвязного слоя и SoftOrdering-слоя.
О SoftOrdering начало тут: topic158638.html
Тут продолжение: topic158750.html
Особенность SoftOrdering в том, что он для любого количества точек (данных) строит уникальный тензор фиксированной длины, который очень удобно обрабатывать далее. В реальной жизни SoftOrdering соответствует построению гистограммы. Гистограмма - это как некоторая интерпретируемая "статистика" или "характеристика" набора произвольного количества точек. В случае же нейросетей вместо гистограммы применяется мягкий вариант - SoftOrdering, выход этого слоя - эмбеддинг (данные, которые понятны только нейросети, несмотря на наличие аналогии с гистограммой).
Итак, по нескольким точкам построена характеристика всего надобъекта - изображения. Распознаванию надобъекта обучается последующая структура, ей на вход подаётся эмбеддинг SoftOrdering и добавляются координаты нового пикселя $p_x$, для которого хотелось бы узнать, насколько он объясняет какие-то другие пиксели в изображении. Нужно найти хотя бы один мутуоэнкодер и точку $p_y$, когда $similarity(f(p_x), p_y) > threshold$. Эта структура оценивает насколько данный пиксель характерен для данного изображения и насколько подходит под каждый мутуоэнкодеров (domain от 0 до 1).
Для обучения этой штуки можно просто взять все мутуоэнкодеры и обработать ими пиксель $p_x$, найти наиболее сходные пиксели $p_y$. Это тяжкая часть обучения, но в какой-то момент, предполагается, обучение можно остановить и приступить к эксплуатации domain-эвалюатора, так как он способен более менее находить неплохие пары точек без полного перебора.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group