2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Структура RNN2D
Сообщение09.09.2024, 19:37 


12/07/15
01/11/24
3276
г. Чехов
Может кто-то идею подкинет?

Но для начала пояснение. Существуют нейросети структуры RNN, которые способны поглотить одномерную последовательность. А я захотел разобраться с двумерной матрицей $(m \times n)$. Если я возьму $m$ строчек и закатаю их под одну и ту же RNN $m$ раз и получу $m$ эмбеддингов. А потом возьму другую RNN и закатаю под неё $m$ предыдущих эмбеддингов и получу некий общий вектор, который характеризует всю двумерную матрицу.
Но меня смущает несимметрия обработки матрицы: столбцы опережают строки или наоборот.

Как быть?

 Профиль  
                  
 
 Re: Структура RNN2D
Сообщение09.09.2024, 19:44 
Заслуженный участник
Аватара пользователя


15/10/08
12393
Mihaylo в сообщении #1654016 писал(а):
меня смущает несимметрия обработки матрицы: столбцы опережают строки или наоборот
Обойдите её "змейкой" Кантора.

 Профиль  
                  
 
 Re: Структура RNN2D
Сообщение09.09.2024, 19:54 


12/07/15
01/11/24
3276
г. Чехов
Если я буду обходить змейкой, то я скорее возьму одну и ту же RNN и попру ею по данным. Но она не поймет, почему это индексы скачут не то, чтобы даже линейно, сначала растут, потом убывают и опять как-то несимметрично (нам-то понятно)... Хотелось бы чтобы структура понимала смещения по осям.

Грубо говоря, диагональный обход ничем не лучше горизонтально-возвратно-вертикального.

 Профиль  
                  
 
 Re: Структура RNN2D
Сообщение09.09.2024, 20:08 
Заслуженный участник
Аватара пользователя


16/07/14
9066
Цюрих
Mihaylo в сообщении #1654016 писал(а):
А я захотел разобраться с двумерной матрицей $(m \times n)$.
А зачем?
RNN предполагают, что у Вас на элементах входной последовательности есть естественный порядок. Если Вы хотите просто эмбединг матрицы произвольного размера, то Fully Convolutional Network Вам в руки.

 Профиль  
                  
 
 Re: Структура RNN2D
Сообщение09.09.2024, 20:28 


12/07/15
01/11/24
3276
г. Чехов
mihaild в сообщении #1654027 писал(а):
А зачем?

Долго объяснять. Хотя чего долго? Допустим $m$ и $n$ переменные.

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

-- 09.09.2024, 20:36 --

Естественный порядок - горизонтально и вертикально. Но есть еще самый естественный порядок - это движение вдоль "производящего" вектора данных, который неизвестен в каждом случае. Если бы это направление было известным, то распознавание цифр MNIST (например) было бы идеальным. То есть, если бы нейросеть распознавала цифры, понимая, как ее рисовали, то было бы всё намного проще. Не с точки зрения структуры проще, но с точки зрения решения задачи со 100% аккуратностью.

 Профиль  
                  
 
 Re: Структура RNN2D
Сообщение09.09.2024, 21:07 
Заслуженный участник
Аватара пользователя


16/07/14
9066
Цюрих
Mihaylo в сообщении #1654040 писал(а):
Допустим $m$ и $n$ переменные
mihaild в сообщении #1654027 писал(а):
Если Вы хотите просто эмбединг матрицы произвольного размера, то Fully Convolutional Network Вам в руки

Архитекутра нейросети подбирается исходя из задачи. Если у Вас есть естественный порядок - то RNN. Если при этом еще недавние значения важнее более давних - то трансформер. Если порядка нет, а важно взаимное расположение на близких участках - то CNN.
Можете ли Вы сказать, $(666, 42)$ должно идти раньше или позже $(42, 666)$? Если не можете, то зачем мучать модель лишней информацией?
Mihaylo в сообщении #1654040 писал(а):
То есть, если бы нейросеть распознавала цифры, понимая, как ее рисовали, то было бы всё намного проще
Если передавать пиксели в порядке росчерка пера, то это будет примерно последовательность единиц, слабо связанная с написанной цифрой.

 Профиль  
                  
 
 Re: Структура RNN2D
Сообщение10.09.2024, 17:44 


12/07/15
01/11/24
3276
г. Чехов
mihaild в сообщении #1654051 писал(а):
Архитекутра нейросети подбирается исходя из задачи.

У меня обратная задача - найти задачи под архитектуру. За RNN2D я взялся, чтобы попытаться расширить кругозор. Я гуглю и вижу упоминания об LSTM2D и гипотезы вопрошающих про RNN2D.
mihaild в сообщении #1654051 писал(а):
Если передавать пиксели в порядке росчерка пера, то это будет примерно последовательность единиц, слабо связанная с написанной цифрой.

Конечно же, в потоке данных передаваться должны не только пиксели, которые на 95% равны 1.0 (255), но и их координаты.

-- 10.09.2024, 18:32 --

Если точнее выражаться, существуют Multi-Dimensional LSTM и Grid LSTM (вторые не просто обрабатывают дополнительные измерения, но и ищут связь между данными в них).

Multi-Dimensional Recurrent Neural Networks
https://arxiv.org/pdf/0705.2011

Короче, идея такая: алгоритм рекурсивно принимает $N$ предыдущих состояний, а не одно состояние как в обычной RNN (1D RNN). При этом последовательностью называют не одномерную, а многомерную цепочку вычислений.

В точке $(i, j)$ должно быть использовано состояние точек $(i-1, j)$ и $(i, j-1)$.

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

 Профиль  
                  
 
 Re: Структура RNN2D
Сообщение10.09.2024, 19:14 


12/07/15
01/11/24
3276
г. Чехов
Короче, я изобрел новую структуру SoftOrdering, которая встает где-то наряду с CNN и LSTM.
1. CNN ограничена размером ядра, SoftOrdering не ограничена совсем (это, конечно, не для всех данных хорошо).
2. LSTM является рекуррентной, а SoftOrdering - нет, но при этом может обрабатывать тензоры переменной длины.

На данный момент я написал на PyTorch слои SoftOrdering (стандартный слой), RaggingSoftOrdering (для работы с тензорами переменной длины), RecurrentSoftOrdering(рекуррентная одномерная версия) обкатал на нескольких задачах, но пока CNN и LSTM победить не удалось по причине иной специализации. А специализация заключается в способности обрабатывать облака точек (points cloud), до этой задачи еще не добрался, там придётся тряхнуть архитектуры PointNet и PointNet++ (GPU не помешал бы).

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

-- 10.09.2024, 19:39 --

А я что сюда вывалил это всё?
Хочу-таки разобраться, как лучше всего подойти к задаче распознавания цифр MNIST. Сама задача-то некорректно обычно решается: типа "вот тебе 784 пикселя в один ряд - распознавай". Правильнее всего нейросети видеть то, как эти цифры пишутся в процессе. Но, к сожалению, стандартный датасет не содержит такой информации.

А что если пиксели превратить в аппроксимирующие ломаные, а потом точки этой ломаной обработать? Уж облака точек-то я могу... Как эти ломаные строить эффективно?

 Профиль  
                  
 
 Re: Структура RNN2D
Сообщение11.09.2024, 13:11 
Заслуженный участник
Аватара пользователя


16/07/14
9066
Цюрих
Mihaylo в сообщении #1654153 писал(а):
CNN ограничена размером ядра
Global Pooling это решает.
Mihaylo в сообщении #1654153 писал(а):
Сама задача-то некорректно обычно решается: типа "вот тебе 784 пикселя в один ряд - распознавай".
Это только один из подходов. Собственно CNN так не делают.

Вы говорите про вообще задачу распознавания текста, или конкретно про датасет MNIST? На нём самом уже идет борьба за единичные примеры, он все еще хорош в качестве sanity check, но бороться за SotA на нем странно.
Mihaylo в сообщении #1654153 писал(а):
Правильнее всего нейросети видеть то, как эти цифры пишутся в процессе. Но, к сожалению, стандартный датасет не содержит такой информации
Это уже другая задача.

 Профиль  
                  
 
 Re: Структура RNN2D
Сообщение11.09.2024, 15:47 


12/07/15
01/11/24
3276
г. Чехов
mihaild в сообщении #1654250 писал(а):
Global Pooling это решает.

Я смотрел архитектуру Fully-CNN, но не понял пока, почему простое усреднение работает. Как даунсэмплинг - да, мощно. Видимо классификации, как правило, много не надо.

mihaild в сообщении #1654250 писал(а):
конкретно про датасет MNIST?

Да

mihaild в сообщении #1654250 писал(а):
хорош в качестве sanity check, но бороться за SotA на нем странно

check выживания, поэтому. Селекция.

 Профиль  
                  
 
 Re: Структура RNN2D
Сообщение17.09.2024, 18:09 


12/07/15
01/11/24
3276
г. Чехов
Выложу-ка я здесь теорию, может кого-нибудь заинтересует.

Если вообще "в двух словах" описать, то так:

Слой SoftOrdering - это "мягкая" реализация гистограммы; если бы входными данными были категориальные, то операция почти соответствовала бы группировке данных (group by).

Как работает группировка данных? Есть неупорядоченная последовательность чисел, берём первое число записываем в список, напротив числа записываем "1", это означает, что число встречалось в последовательности один раз. Если это число встретится второй раз, то вместо "1" будет записано "2". Таким образом пробегаемся по всей последовательности, в итоге имеем два столбца: числа и их количество повторений. Это группировка данных.
Вход: [2, 5, 6, 3, 2, 9, 5, 5, 9]
Выход: [(2, 2), (5, 3), (6, 1), (3, 1), (9, 2)]

Упорядочивание данных в общем виде - это когда сгруппированные данные дополнительно сортируются по возрастанию.
Вход: [2, 5, 6, 3, 2, 9, 5, 5, 9]
Выход: [(2, 2), (3, 1), (5, 3), (6, 1), (9, 2)]

Гистограмма - это когда числа записываются в заранее подготовленные "пулы" - диапазоны значений.
Вход: [2.0, 5.2, 6.9, 3.0, 2.0, 9.5, 5.5, 5.7, 9.1]
Выход: [(2.0-2.9, 2), (3.0-3.9, 1), (4.0-4.9, 0), (5.0-5.9, 3), (6.0-6.9, 1), (7.0-7.9, 0), (8.0-8.9, 0), (9.0-9.9, 2)]
(Здесь в примере учитывается только один знак после запятой - это для простоты. В реальности в нейронных сетях тип данных будет что ни есть с плавающей запятой.)

Тут надо отметить, что:
1. В приведенных примерах группировки и упорядочивания данных информация не теряется, то есть по выходу можно восстановить вход. (Порядок входных чисел не имеет значения.)
2. Гистограмма теряет часть информации о входной последовательности. Чем меньше размер пула (=чем больше количество пулов), тем меньше потеря информации. Потеря информации может быть равна нулю при размере пулов, стремящемся к нулю.

В контексте нейронных сетей свойства гистограммы очень полезны:
1. Мы можем сжимать информацию и степень сжатия определяется гиперпараметром - количество пулов (или как принято для гистограмм - количество бинов).
2. На вход гистограммы может подаваться любое количество неупорядоченных чисел, но на выходе будет фиксированное упорядоченное множество.

Итак, упорядочивание данных методом гистограммы даёт возможность работы с данными, с которыми не умеет работать никакая существующая базовая структура (полносвязная, свёрточная и др.). К тому же упорядочивание данных - это новый вид пулинга, в котором есть гиперпараметр, плавно регулирующий даунсэмплинг (сжатие данных) от 0 до 100%.

Я написал слой SoftOrdering для PyTorch, который реализует "мягкую" гистограмму: вместо нелинейной операции сравнения используется сигмоида. Это даёт слою свойство дифференцируемости.

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

 Профиль  
                  
 
 Re: Структура RNN2D
Сообщение17.09.2024, 21:03 
Заслуженный участник
Аватара пользователя


16/07/14
9066
Цюрих
Mihaylo в сообщении #1655146 писал(а):
На вход гистограммы может подаваться любое количество неупорядоченных чисел, но на выходе будет фиксированное упорядоченное множество
Для этого надо еще минимальное и максимальное значения зафиксировать.
Mihaylo в сообщении #1655146 писал(а):
Итак, упорядочивание данных методом гистограммы даёт возможность работы с данными, с которыми не умеет работать никакая существующая базовая структура (полносвязная, свёрточная и др.).
Оно же реализуется как небольшая $1 \times n$ свертка и потом глобальный пулинг.
Отобразить всё от от $n$ до $n+1$ в единицу, остальное в ноль можно вроде бы тремя-четырьмя слоями ReLU. Применяем поэлементно, а потом global sum pooling.

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

 Профиль  
                  
 
 Re: Структура RNN2D
Сообщение18.09.2024, 07:02 


12/07/15
01/11/24
3276
г. Чехов
mihaild в сообщении #1655180 писал(а):
Для этого надо еще минимальное и максимальное значения зафиксировать.

Я беру стандартно диапазон (-1, +1), данные нормализованы. Но иногда обучение "срывается", особенно если лёрнинг рейт большой. Метрики и функция потерь сваливаются на дно. Думаю, это из-за массового выхода из диапазона.

 Профиль  
                  
 
 Re: Структура RNN2D
Сообщение18.09.2024, 19:51 


12/07/15
01/11/24
3276
г. Чехов
mihaild в сообщении #1655180 писал(а):
Оно же реализуется как небольшая $1 \times n$ свертка и потом глобальный пулинг.

В одном месте читал, что глобальный пулинг имел популярность лет 10 назад, когда его предложили.
Я вообще LSTM/GRU рассматривал как лучшую альтернативу. LSTM у меня решает одну задачу с временными рядами за ~5 мин, достигая максимального значения ROC-AUC 0,88+. Рекуррентный SoftOrdering помедленнее работает, так как написан на Python/C, но в принципе сопоставимо и достигаю максимума 0,85+. Если сильно растянуться по времени, то лучший результат 0,875.

LSTM имеет компонент forget gate - шлюз забывания. При достижении определенного внутреннего состояния и получении некоторых входных данных в эмбеддинге обнуляются некоторые части.

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

Пока не придумал как сделать "мягкую" и эффективную реализацию сдвига временного окна...

 Профиль  
                  
 
 Re: Структура RNN2D
Сообщение18.09.2024, 20:19 
Заслуженный участник
Аватара пользователя


16/07/14
9066
Цюрих
Mihaylo в сообщении #1655304 писал(а):
В одном месте читал, что глобальный пулинг имел популярность лет 10 назад, когда его предложили
Вполне используется. Но я больше про то, что Ваш подход явно стоит сравнить вот с такой стандартной архитектурой.

А так в общем-то популярность всех рекуррентных моделей сильно уменьшилась с приходом attention.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.

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



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

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


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

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