2014 dxdy logo

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

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




На страницу Пред.  1, 2, 3, 4, 5  След.
 
 Re: Куда шагать в ML
Сообщение26.11.2025, 22:40 
Цифры перемешаны на картинках, порядок не соответствует индексу.

 
 
 
 Re: Куда шагать в ML
Сообщение27.11.2025, 07:23 
Mihaylo в сообщении #1710745 писал(а):
Цифры перемешаны на картинках, порядок не соответствует индексу.


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

 
 
 
 Re: Куда шагать в ML
Сообщение28.11.2025, 04:33 
Вы можете использовать индексы, чтобы убедиться, что цифры действительно искажены. Но порядок изображений на моей картинке не соответствует возрастающему порядку индексов из-за shuffle=true.

 
 
 
 Re: Куда шагать в ML
Сообщение28.11.2025, 14:15 
Mihaylo в сообщении #1710861 писал(а):
Вы можете использовать индексы, чтобы убедиться, что цифры действительно искажены. Но порядок изображений на моей картинке не соответствует возрастающему порядку индексов из-за shuffle=true.


Теперь понятнее. Но у меня не сходится. Может это конечно не важно, или ошибка у меня, но в любом случае лучше бы разобраться. Может баг и у вас. Индекс у вас с нуля или с единицы начинается? Но в любом случае у меня изображения не совпадают. Можете показать какие изображения соответствуют вашим индексам 4154, 7255, 7640, 8121 (это обучающая выборка) (думаю для проверки вполне хватит).

 
 
 
 Re: Куда шагать в ML
Сообщение28.11.2025, 19:28 
У меня тоже не бьются по этим индексам. Позже разберусь. Н я нашёл одну цифру, её индекс 4476, а стоит она на картинке третья с конца. Индексы с 0.

 
 
 
 Re: Куда шагать в ML
Сообщение28.11.2025, 19:37 
Mihaylo в сообщении #1710953 писал(а):
я нашёл одну цифру, её индекс 4476, а стоит она на картинке третья с конца.

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

 
 
 
 Re: Куда шагать в ML
Сообщение29.11.2025, 08:11 
На самом деле эту тему я создавал не как очередную флудилку. "Куда шагать в ML" - это про то, как изобретать новые алгоритмы для ML. Итак, время бионического подхода, ИМХО, прошло - нейрон изобрели, нейросеть тоже, бэкпроп к ним разработали.
Я сделал те самые картинки MNIST, чтобы понять, действительно, куда шагать дальше. Применяю умозрительный подход - "а как решал бы я сам?". И тут у меня на сегодняшний день выработался целый пласт направлений:

1. Генерация датасета как основа понимания
2. Типы данных в ML и их поддержка
3. Методы аналитики и их "мягкие" (soft) реализации
4. Анализ внутренней структуры данных


Эти направления не связаны друг с другом почти, просто набор идей.

1. Генерация датасета как основа понимания
Об этом я уже написал выше. Конечно, в идеале нужно научиться генерировать сэмплы датасета по-настоящему, но годны и синтетические датасеты. Тут можно выделить контрастивное обучение (обучение на основе контрастных примеров).

2. Типы данных в ML и их поддержка
Что такое вектор/тензор в ML? Это набор чисел double (если не оговаривать, что в библиотеках типа Tensorflow и видеокартах Nvidia числа могут принимать несколько другие интерпретации, специализированные для ML). Это универсальный тип данных, который может переваривать в том числе целые числа, булевый тип. Известны также методы перевода категориальных типов в числовые... Но я не об этом.

Известно при этом, что ML-разработчик же должен вложить в каждый признак объекта природу данных. Звучит как магия, но я просто предлагаю понимать это как необходимость ввода типов данных в ML. Природа данных = тип данных. Основное правило типов данных: никогда не подсовывай число одного типа вместо другого. Некоторые начинающие ML-щики думают: "да какая там разница, нейросеть всё пережуёт и выдаст правильный ответ". Нет, это так не работает. Точнее, как-то работает, но плохо. Стандартные алгоритмы нейросетей являются типозависимыми. Возьмём, например, линейный слой и свёрточный - это два родственника. Свёрточный слой тоже является линейным, только линия немного ломаная. :lol:
Так вот, вес каждого синапса линейного/свёрточного слоя лучше обучается на какой-то одной определённой природе данных. В самом общем случае типичный тензор, который подаётся на вход линейного слоя, имеет тип списка (list). Тип списка - это тензор, у которого каждый признак имеет свой индивидуальный тип. Так как линейный слой есть практически в каждой нейросети, то вы вынуждены соблюдать минимальное требование ML-типизации - соблюдать типы данных списка. Иначе нейросеть плохо обучается.
Есть ещё популярный частный случай - тип данных массив (array). Это когда набор признаков имеет одинаковый тип, а каждый признак имеет индекс. Очень распространённое направление - временные (или пространственные) ряды. В этом случае признаки можно подменять. Отсюда родились рекуррентные нейросети и их современные аналоги типа LSTM, GRU, в которых всё также применяются линейные/свёрточные слои, но есть хитрости с перемещением признаков. Перемещение признаков делается путём какого-либо изменения индексов. Кстати говоря, в свёрточном слое тоже производится работа с индексом массива, он не вправе работать со списком.

По ML-типизации выделяю несколько направлений:
2.1. Тип индекса массива, слои для работы с индексами (positional encoding и др.)
2.2. Поддержка массивов переменной длины
2.3. Поддержка смешанных типов (распознавание типа?)

-- 29.11.2025, 08:50 --

3. Методы аналитики и их "мягкие" (soft) реализации
Пункт 3 немного связан с пунктом 2. Но сейчас речь не про нейросети, а про анализ данных человеком. В процессе своего обучения я заметил, что независимо от природы данных, всегда требуется проделывать вполне определённые действия по анализу. Самое главное - берём признаки, определяем их тип (булевый, целый, вещественный, строковый, дата, время, категориальный и т.д.). По каждому признаку смотрим распределение, выделяем отбросы, определяем минимум, максимум, среднее, медиану, моду. Не говорю про коэффициент Пирсона. Подход ко всем данным одинаков, но в некоторых примерах некоторые действия могут вырождаться и процесс анализа выглядит очень разнообразным.

А чем нейросети хуже? Они тоже должны анализировать методами человека. Но главное отличие - функции этих методов должны быть дифференцируемыми для реализации в бэкпропе.
Я проработал слой SoftOrdering - он как раз из этой темы - он строит мягкое распределение признаков массива (хочу переименовать в SoftBinning). Это только первая моя разработка. Мне кажется, тут непаханное поле. Очень важные аналитические max/min имеют мягкие реализации, argmax/argmin не имеют, интересно туда заглянуть. Выходом argmax/argmin, кстати, является индекс массива.

 
 
 
 Re: Куда шагать в ML
Сообщение29.11.2025, 09:23 
4. Анализ внутренней структуры данных
Датасеты обладают избыточным количеством информации, это факт. Этот пункт, видимо, немного связан с пунктом 1. Если данных много, то зачем их генерировать.

Избыточность даёт возможность для обучения без учителя. Грубо говоря, если один факт принять как опорный (учитель), то последующие избыточные факты можно использовать как подтверждающие или опровергающие. Правда всё сильно зависит от степени избыточности данных в окрестности.

Мутуоэнкодеры

 
 
 
 Re: Куда шагать в ML
Сообщение29.11.2025, 14:15 
Mihaylo в сообщении #1710996 писал(а):
Итак, время бионического подхода, ИМХО, прошло - нейрон изобрели, нейросеть тоже, бэкпроп к ним разработали.

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

 
 
 
 Re: Куда шагать в ML
Сообщение29.11.2025, 18:03 
tac в сообщении #1711023 писал(а):
в том числи изобретя бэкпроп, и не находя ему адекватной замены

Смотрите, в чём суть. Нейросеть решает сложную задачу, ответ на который неизвестен и не может быть получен аналитически. Поэтому делается пробный шаг, получается неверный ответ (forward). Это единственный вариант, так как опора только на учителя - она находится в метках. Мы вынуждены сделать forward, чтобы максимально быстро получить опору. Далее, мы получили ошибку и единственный вариант быстро применить её ко всем весам - это обратно её распространить (backward).

Всё, что вы там выдумываете, это в прошлом. А так пожалуйста, оптимизируйте не с помощью SGD, а с помощью метода Ньютона или других градиентных методов, известных со времён царя гороха.

-- 29.11.2025, 18:59 --

2. Типы данных в ML и их поддержка
Отмечу, что перед началом обучения каждый синапс линейного слоя является нетипизированным (untyped). Но по мере обучения этот вес типизируется. В начале процесса обучения имеет смысл подобрать наилучший тип из нескольких, если это нужно и если такие алгоритмы будут изобретены.

2.1. Тип индекса массива, слои для работы с индексами
Обычный индекс массива принимает целые значения 0, 1, 2, 3, ..., а ML-тип индекса - вещественный - может принимать значение, например, $0.104$. С ML-индексами оперирует не библиотека типа PyTorch на своём низком уровне, а сама нейросеть на уровне своих скрытых слоёв.

Самый простой пример: мы можем найти максимум среди 11 однородных однотипных признаков и определить argmax, допустимые значения argmax: 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0. Argmax - это индекс максимума.

На сегодняшний момент я не вижу широкого набора слоёв работы с индексами массива. Могу лишь отметить довольно широкий ряд алгоритмов типа Positional Encoding, применяемых в трансформерах. Это важные алгоритмы типа array-to-softindex. Однако нет обратных алгоритмов типа array[softindex] или подобных.

 
 
 
 Re: Куда шагать в ML
Сообщение29.11.2025, 19:11 
P.S. Я наверное не прав про array[softindex]. В трансформерах реализовано "чтение записей из БД", что больше похоже на чтение словаря dict[key]. Я хочу словарь заменить на массив. Словарь имеет разнотипные данные и индексы тоже разнотипные, надо сделать однотипные и то, и другое.

 
 
 
 Re: Куда шагать в ML
Сообщение30.11.2025, 09:19 
Mihaylo в сообщении #1711067 писал(а):
Нейросеть решает сложную задачу, ответ на который неизвестен и не может быть получен аналитически. Поэтому делается пробный шаг, получается неверный ответ (forward). Это единственный вариант, так как опора только на учителя - она находится в метках. Мы вынуждены сделать forward, чтобы максимально быстро получить опору. Далее, мы получили ошибку и единственный вариант быстро применить её ко всем весам - это обратно её распространить (backward).


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

 
 
 
 Re: Куда шагать в ML
Сообщение30.11.2025, 13:00 
tac в сообщении #1711106 писал(а):
Можно обучить и без учителя просто будет дольше.

Не только дольше, но и гораздо хуже. Убрать учителя = убрать метки. С чего вдруг качество не упадёт?

 
 
 
 Re: Куда шагать в ML
Сообщение01.12.2025, 00:06 
Mihaylo в сообщении #1711156 писал(а):
Убрать учителя = убрать метки. С чего вдруг качество не упадёт?

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

 
 
 
 Re: Куда шагать в ML
Сообщение01.12.2025, 17:47 
tac в сообщении #1711276 писал(а):
Не правильно поставленный эксперимент и не более того.

А можно считать, что это не эксперимент, а реальная полезная задача.

Ещё раз просмотрите те изображения, метки правильные, просто писульки кривые. Это не ошибки в датасете, а реальные случаи.

-- 01.12.2025, 17:57 --

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

Если интересно, такую задачу решали. https://habr.com/ru/articles/206116/ (смотрите практические результаты в конце)
ESOINN, если я не ошибаюсь, один из лучших методов кластеризации.

 
 
 [ Сообщений: 61 ]  На страницу Пред.  1, 2, 3, 4, 5  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group