2014 dxdy logo

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

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




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


12/07/15
3455
г. Чехов
Я пытаюсь разработать алгоритм обучения без учителя. Общий смысл такой: ищем закономерности в обучающих данных как функцию 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
3455
г. Чехов
Можно каждую точку представить как вершину графа. Тогда дуги, соединяющие точки в двух направлениях, можно взвесить функцией близости.
Идеальной является функция $f()$, которая образует граф-путь без циклов между всеми точками последовательно с весом дуг $1.0$.

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


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

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

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

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


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

Я ничего нового не придумал, полный процесс классически состоит из двух этапов:
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
3455
г. Чехов
Я хотел рассмотреть такой простой датасет, как у 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
9480
Цюрих
Вы тут не автоэнкодер изобретаете?

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


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

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

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



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

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


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

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