Последний раз редактировалось Mihaylo 17.09.2024, 18:14, всего редактировалось 2 раз(а).
Выложу-ка я здесь теорию, может кого-нибудь заинтересует.
Если вообще "в двух словах" описать, то так:
Слой 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 идеальной записной книжкой нейросети. Выход этого слоя хорош в качестве эмбеддингов и стэйтов. Пока я научился только записывать, но не научился удалять "записи". Хотя мысль гуляет...
|