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

и

.)
2. Я принял такое допущение: нейросеть аппроксимирует функцию вида

, где

и

- это точки из обучающего датасета.
3. Обучение происходит путём попарного сопоставления точек из датасета. Итого образуется

пар точек при размере датасета

.
4. Если точка

попадает в окрестность модельной точки

, то функция близости выдаёт результат почти 1; если точка далеко от этой окрестности, то функция близости выдаёт результат почти 0. Функция близости

, где

- евклидово расстояние между точками

и

.
5. Если перебрать все точки из датасета в качестве

, за исключением исходной точки

, и найти наибольшее значение

, то результат вычисления будет по сути представлять
область определения функции (domain of the function).
![$domain[p_i] = \max\limits_{j, j \ne i}(c(f(p_i), p_j))$ $domain[p_i] = \max\limits_{j, j \ne i}(c(f(p_i), p_j))$](https://dxdy-04.korotkov.co.uk/f/3/5/7/35794f43bfba9d744243f5673bf22da582.png)
Чем выше

(максимум

), тем лучше функция подходит для точки (точка попала в область определения). При

точка

находится вне области определения функции.
6. Но область определения функции - это не единственная важная характеристика. Мне кажется, что гораздо важнее
область значений функции (range of the function).
![$range[p_j] = \max\limits_{i,i \ne j} (f(p_i), p_j)$ $range[p_j] = \max\limits_{i,i \ne j} (f(p_i), p_j)$](https://dxdy-01.korotkov.co.uk/f/c/e/c/cecc4776c8d8e24a7a33c02701290ee882.png)
.
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 \cdot range[p_j])}{n-1}$](https://dxdy-04.korotkov.co.uk/f/f/7/0/f70954753059b97dc5e134f4a2d0cc9382.png)
. Можно ещё взять вместо максимума усредненное значение функции близости

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

и

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