2014 dxdy logo

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

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




На страницу Пред.  1, 2
 
 Re: Структура RNN2D
Сообщение18.09.2024, 21:18 
mihaild в сообщении #1655180 писал(а):
Оно же реализуется как небольшая $1 \times n$ свертка и потом глобальный пулинг.
Отобразить всё от от $n$ до $n+1$ в единицу, остальное в ноль можно вроде бы тремя-четырьмя слоями ReLU. Применяем поэлементно, а потом global sum pooling.

Свертка - понятно, пулинг - понятен. А что значит "отобразить в ноль/единицу"?

-- 18.09.2024, 21:48 --

P.S. Продолжаю крутить гиперпараметры. Я сделал толстый слой RecurrentSoftOrdering. На выходе дохленький полносвязный слой. Но главное - в основе RSO использую BinarySoftOrdering, который отличается от обычного SoftOrdering тем, что количество бинов равно 1. Такой слой выродился в банальный сигмоидальный слой nn.Sigmoid(). Сигмоида работает как операция сравнения: если вход больше нуля, то такие данные "попадают в бин" и суммируются (счетчик приращивается); если вход меньше нуля, то попадание мимо бина - данные не суммируются - это тоже информативно.
На входе RSO (внутри RSO) также имеется однослойная полносвязная сеть, которая пространство входных данных + текущий стейт преобразует в необходимой толщины поток данных для построения гистограмм. Гистограммы стали сильно упрощенные (BSO), поэтому их надо побольше параллельных. Входной полносвязный слой обеспечивает разнообразие гистограмм, иначе вся нейросеть не смогла бы освоить сложность входных данных.
В общем такая структура пошла лучше и достигла все-таки пика ROC-AUC 0,88 за ~11,5 мин, выше не набирается, переобучение наступает. В общем у LSTM и у моей архитектуры близкие способности и временные затраты.
P.P.S. Кстати, данная задачка решается разными способами, достигаются результаты ROC-AUC 0,93+ и вплоть до 0,99+, но с помощью GPU и временными затратами 5, 8 и более часов, с помощью чистки-преобразования данных методами EDA.
Я же кормлю данные практически без адаптации, только сделал случайное перемешивание. Четырехлетний ноутбук с двухядерным CPU.
В общем задачка интересная в том смысле, что можно упереться по времени и попытаться улучшить пиковый ROC-AUC.

 
 
 
 Re: Структура RNN2D
Сообщение18.09.2024, 21:55 
Аватара пользователя
Mihaylo в сообщении #1655316 писал(а):
А что значит "отобразить в ноль/единицу"?
Имелось в виду, что функцию $f(x) = \begin{cases} 1, n \leq x < n + 1 \\ 0, |x| < 10^6 \wedge x \not \in [n, n + 1) \end{cases}$ можно точно выразить нейронкой небольшой глубины.

 
 
 
 Re: Структура RNN2D
Сообщение19.09.2024, 19:53 
Ну понятно, что нейронку можно научить всему. Но наверное все-таки лучше научить нейронку работать с готовыми инструментами аналитики, такая была у меня мысль. И вот пришла конкретная мысль - агрегация данных. Нейронке такой подход не совсем очевиден. Она только умеет аппроксимировать. А что если научить интерполировать, делать EDA?.. :|

 
 
 
 Re: Структура RNN2D
Сообщение20.09.2024, 14:59 
Аватара пользователя
Научить можно всему, но всё же разные архитектуры неявно содержат разные приоры, и одна архитектура для приближения некоторой функции может требовать сильно меньше параметров, чем другая. Просто Ваше утверждение
Mihaylo в сообщении #1655146 писал(а):
упорядочивание данных методом гистограммы даёт возможность работы с данными, с которыми не умеет работать никакая существующая базовая структура
неверно - имеющаяся структура позволяет с небольшим количеством весов реализовать Ваш подход точно.
Как оно будет работать на практике - надо проверять экспериментально. Но сравнение с описанной мной выше архитектурой (или чем-то похожим) - это один из первых вопросов, который возникает при знакомстве с Вашей идеей.

 
 
 
 Re: Структура RNN2D
Сообщение20.09.2024, 15:45 
Я бы не сказал, что нелинейная $f(x)$, которую вы привели ранее, является частью существующей структуры. У меня ведь тоже кроме суммирования, умножения на константу и сигмоид ничего принципиально нового нет.

P.S. Обнаружил, что в градиентом бустинге применяют Histogram-based-алгоритмы. Как я понял, что это по сути то же самое, только строится дерево.

 
 
 
 Re: Структура RNN2D
Сообщение20.09.2024, 16:07 
Аватара пользователя
Mihaylo в сообщении #1655405 писал(а):
Я бы не сказал, что нелинейная $f(x)$, которую вы привели ранее, является частью существующей структуры
Так я не предлагаю её напрямую пихать. Я предлагаю 1x1 convolution с последующим global pooling. С мотивацией, что эта структура при небольшом числе параметров может точно выучить предлагаемую Вами функцию.

 
 
 
 Re: Структура RNN2D
Сообщение20.09.2024, 17:45 
То есть нагенерировать синтетических данных и обучить нейронку этому же?
Ну да, это получится. Но это не будет означать, что эти же слои в составе, предназначенном для более комплексной задачи, додумаются принять вид гистограммы.
Одно дело - зашить в нейронку алгоритм на структурном уровне, совершенно другое - обучить ее этому специально.

 
 
 
 Re: Структура RNN2D
Сообщение20.09.2024, 18:17 
Аватара пользователя
Mihaylo в сообщении #1655416 писал(а):
То есть нагенерировать синтетических данных и обучить нейронку этому же?
Нет, просто на тех задачах, на которых Вы тестируете свою модель, протестировать и вот такую.
Mihaylo в сообщении #1655416 писал(а):
Но это не будет означать, что эти же слои в составе, предназначенном для более комплексной задачи, додумаются принять вид гистограммы
Не значит, и, скорее всего, не додумаются. Вопрос в том, будет ли полученный результат лучше или хуже.

 
 
 
 Re: Структура RNN2D
Сообщение20.09.2024, 18:24 
Теперь понял.

 
 
 
 Re: Структура RNN2D
Сообщение20.09.2024, 19:34 
Mihaylo в сообщении #1655214 писал(а):
Я беру стандартно диапазон (-1, +1), данные нормализованы.

В какой-то момент я верил в BinarySoftOrdering - простая реализация гистограммы, у которой нет гиперпараметров - range_min, range_max и количество бинов - ничего этого нет принципиально. Примерно на 50% быстрее вычисляется. Но её предел ROC-AUC 0,86, может чуть выше. И всё: гиперпараметр всего лишь один - количество гистограмм, я примерно нашёл оптимум 100 гистограмм, не продвигается дальше.
Немного поменял тактику для обычного SoftOrdering: я теперь поставил сигмоиду после входного линейного слоя перед построением гистограммы. Это был решающий удар. Пространство из $(-\infty, +\infty)$ преобразуется в $(0, 1)$ и теперь нет срывов из-за выхода за пределы диапазона. Фактически я сделал нелинейным распределение бинов: около нуля они плотные, а ближе к краям растягиваются вплоть до бесконечности.

Количество бинов равно 11, количество гистограмм равно 20, рекуррентный SoftOrdering. За 25 минут достиг результата ROC-AUC 0,899. Правда приходится активно подкручивать learning_rate. Начинаю с 0.1, заканчиваю на 0.001. Да-да, такой мощный разбег. Иначе долго процесс обучения идёт.

 
 
 
 Re: Структура RNN2D
Сообщение23.09.2024, 07:12 
Добавил batchnorm после суммирования (подсчета), результат улучшился. Теперь я получаю результат лучше и даже чуть быстрее, чем у LSTM. За 5 минут ROC AUC 0.904. Надеюсь нет утечки тренинговых данных в тестовые (проблема батчнорма).

 
 
 
 Re: Структура RNN2D
Сообщение23.09.2024, 21:22 
Ещё кое-что изменил, сделал довольно логичный шаг, снижающий переобучение. Теперь я могу за 15 минут дотянуться до ROC-AUC 0,919.

Для сравнения: есть один алгоритм решения на kaggle, который решает эту задачу с ROC-AUC 0,93+ на видеокарте NVidia P100 за 2,5+ часа. Применяется Double-stacked LSTM, BiDirectional=True, длина стейта 512.

Но простой LSTM точно побежден.

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


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