С сегодняшнего дня учу автомобили ехать в светлое бедущее без человеков. Не сорева. Кажется.
А вот соревнование на каггле: играем в шахматы. 64кб сабмит, 5мб памяти, один проц. Удивительно, что в первый день на первом месте бот, который играет не совсем ужасно, даже мат ставит двумя ладьями
Интересный дискашн про Jane Street от чувака, который очень плох в математике, но выиграл belka и тут тоже в топе, так что не стоит игнорировать. Я с ним согласен, что онлайн обучение - ключ, но на практике обучение только на свежих данных приводит к сильной деградации модели. А если не только свежие, то непонятно какие использовать. Hard samples? Outliers? Случайные старые? Узнаем в конце соревы, который ой как не скоро, но интересно.
Прочитал решение прошлой соревы от Jane Street. Интересно, что автор сейчас quant в JS, а его сокомандник занимает в новой сореве первое место 🧐
1 место удалось оторваться от деревянных преследователей на бустах за счет использования автоэнкодера к анонимизированным фичам. Идея понятна: нейронка лучше разберется, а если пережать bottleneck'ом, то уменьшим количество фичей, уберем лишний шум, получим более гладкие фичи. Автоэнкодер обучался не классическим unsupervised методом, а по фолдам, параллельно с mlp моделью. Суть в том, что автор тренировал дополнительную голову на таргеты, что позволило ему получить более подходящие фичи для его сети.
Если автоэнкодер можно считать аналогом PCA в мире DL, то такой подход с обучением на таргеты... это аналог LDA в каком-то смысле?
В новой сореве автоэнкодер не заводится у меня.
1 место удалось оторваться от деревянных преследователей на бустах за счет использования автоэнкодера к анонимизированным фичам. Идея понятна: нейронка лучше разберется, а если пережать bottleneck'ом, то уменьшим количество фичей, уберем лишний шум, получим более гладкие фичи. Автоэнкодер обучался не классическим unsupervised методом, а по фолдам, параллельно с mlp моделью. Суть в том, что автор тренировал дополнительную голову на таргеты, что позволило ему получить более подходящие фичи для его сети.
Если автоэнкодер можно считать аналогом PCA в мире DL, то такой подход с обучением на таргеты... это аналог LDA в каком-то смысле?
В новой сореве автоэнкодер не заводится у меня.
Please open Telegram to view this post
VIEW IN TELEGRAM
Kaggle
Jane Street Market Prediction
Test your model against future real market data
Игра: угадай сетку по сообщениям от топов. Выглядит как Multidimensional RNN (есть такое в Tensorflow?) обученный по тикерам и времени причем максимальный тикер ограничен тем, что есть в трейне - удачи тебе на привате, чувак. Учится скорее всего на все 9 таргетов, а не только целевой.
* Вся инфа может оказаться стратегической дезинформацией, но я бы поленился делать картинки и писать такой код ради этого.
* Вся инфа может оказаться стратегической дезинформацией, но я бы поленился делать картинки и писать такой код ради этого.
https://arxiv.org/abs/2412.04529
Саша с Антоном опубликовали классную статью про CAFA5! А я в соавторах. Много умных слов и понятных картинок. Год назад мы участвовали в соревновании на kaggle, в котором надо было определить функции белка по его аминокислотному составу и таксономии. Соревнование отличалось высоким порогом входа, поскольку таргеты, коих было десятки тысяч, были организованы иерархически и метрика расчитывалась пропагацией по этому дереву. Отдельно стоит отметить разметку, где 1 означала наличие функции у белка, но 0 не означал, что функции нет, она просто еще не была обнаружена, возможно.
Мы заняли 2 место 🎉, уступив профессионалам в области, которые в том числе парсили выходящие во время соревнования статьи про новые экспериментально обнаруженные функции белков. Последующее тестирование решений на еще более свежих данных подтвердило, что распределение мест не было случайностью. Организаторы соревнования настоящие ученые, измерили множество метрик и провели полноценное исследование полученных решений.
В статье показываем подход ProtBoost, в основе которого Py-Boost, линейки и mlp, а так же графовые нейросетки в качестве умного ансамбля (помните про иерархические таргеты?). В качестве признаков эмбединги последовательностей и мета-информация о происхождении белка. Обнаружили, что не все эмбединги одинаково полезно и хайпово не значит лучше.
Соревнования шло 3 месяца, а статья выходит спустя год. Это вам не бустинги стекать 🙈
Из каггл-выводов:
* pyboost хорош, особо хорош, когда таргетов много и бустинги в принципе можно успешно применять на эмбедингах.
* GCN стекер можно применять не только здесь.
* иногда ошибки приводят к интересным открытиям, перепутав айдишники моделей, получили интересную аугментацию.
* если соревнование про науку, то где-то в интернете хранятся разные полезные датасеты и код, но коду организаторов слепо верить не стоить
Саша с Антоном опубликовали классную статью про CAFA5! А я в соавторах. Много умных слов и понятных картинок. Год назад мы участвовали в соревновании на kaggle, в котором надо было определить функции белка по его аминокислотному составу и таксономии. Соревнование отличалось высоким порогом входа, поскольку таргеты, коих было десятки тысяч, были организованы иерархически и метрика расчитывалась пропагацией по этому дереву. Отдельно стоит отметить разметку, где 1 означала наличие функции у белка, но 0 не означал, что функции нет, она просто еще не была обнаружена, возможно.
Мы заняли 2 место 🎉, уступив профессионалам в области, которые в том числе парсили выходящие во время соревнования статьи про новые экспериментально обнаруженные функции белков. Последующее тестирование решений на еще более свежих данных подтвердило, что распределение мест не было случайностью. Организаторы соревнования настоящие ученые, измерили множество метрик и провели полноценное исследование полученных решений.
В статье показываем подход ProtBoost, в основе которого Py-Boost, линейки и mlp, а так же графовые нейросетки в качестве умного ансамбля (помните про иерархические таргеты?). В качестве признаков эмбединги последовательностей и мета-информация о происхождении белка. Обнаружили, что не все эмбединги одинаково полезно и хайпово не значит лучше.
Соревнования шло 3 месяца, а статья выходит спустя год. Это вам не бустинги стекать 🙈
Из каггл-выводов:
* pyboost хорош, особо хорош, когда таргетов много и бустинги в принципе можно успешно применять на эмбедингах.
* GCN стекер можно применять не только здесь.
* иногда ошибки приводят к интересным открытиям, перепутав айдишники моделей, получили интересную аугментацию.
* если соревнование про науку, то где-то в интернете хранятся разные полезные датасеты и код, но коду организаторов слепо верить не стоить
arXiv.org
ProtBoost: protein function prediction with Py-Boost and Graph...
Predicting protein properties, functions and localizations are important tasks in bioinformatics. Recent progress in machine learning offers an opportunities for improving existing methods. We...
В Jane Street психологически готовят к шейкапу. За месяц до конца устроили эмулятор: долили паблик еще парой миллионов строк.
Бросаю читать старых топов, иду читать что пишут новые. Тяжело 😂
upd: старые топы потихоньку возвращаются. у текущего топ-1 такие лаконичные решения, к которым я стремлюсь: без лишних слов mlp все разорвал. красиво.
Бросаю читать старых топов, иду читать что пишут новые. Тяжело 😂
upd: старые топы потихоньку возвращаются. у текущего топ-1 такие лаконичные решения, к которым я стремлюсь: без лишних слов mlp все разорвал. красиво.
Каггл нездорового человека.
В стародревние времена на kaggle можно было скачать историю всех движений в лидерборде в виде csv файла. Сейчас попробовал написать скрипт, который отслеживает движения в топе, смотрит сколько бежал сабмит. Это время когда лб обновился минус время последнего сабмита, которое всплывает при наведении на колонку Last. Полезно для понимания насколько сложное решение. У топа в JS, кстати, решение давшее ему топ-скор бежало 7+ часов.
urllib'ом не дает каггл часто ходить, написал в хроме на javascript.
Решение плохое - требует вкладке с лидербордом быть постоянно открытой и активной. И падает с ошибкой через несколько часов. Надо что-то придумать.
В стародревние времена на kaggle можно было скачать историю всех движений в лидерборде в виде csv файла. Сейчас попробовал написать скрипт, который отслеживает движения в топе, смотрит сколько бежал сабмит. Это время когда лб обновился минус время последнего сабмита, которое всплывает при наведении на колонку Last. Полезно для понимания насколько сложное решение. У топа в JS, кстати, решение давшее ему топ-скор бежало 7+ часов.
urllib'ом не дает каггл часто ходить, написал в хроме на javascript.
Решение плохое - требует вкладке с лидербордом быть постоянно открытой и активной. И падает с ошибкой через несколько часов. Надо что-то придумать.
Про работу писать не буду. Хоть там и интересно, но NDA, в котором лень разбираться, и страшно рассказать военный секрет как мы всех переедем.
Фрустрация интересное чувство. 100500 гениальных идей, которые не выдавили воду из камня и бег вверх по лидерборду-эскалатору, ведущему только вниз, вряд ли могут приносить радость. Однако, у меня в этом есть странная потребность. Если все идет как надо, я радость испытываю, но какую-то ненастоящую. А вот когда все тлен, то задача приобретает как-будто сильно большую ценность. Но только если за этим случается прорыв и то, что можно назвать успехом, потому что толерантность к неудачам у меня низкая.
Читаю иногда статьи про то как быть, когда ничего не получается в исследованиях. Протоколы, помогающие детям справиться с эмоциями при столкновении с созданной для их мучения математикой. Как-будто бы хорошего рецепта так и не нашли, в целом, если обобщить, то надо верить в себя, ждать прорыва, закреплять позитивный опыт.
Но как же это тяжело, когда лучшая попытка была месяц (вечность!) назад. Упираться в одном соревновании намного труднее, чем диверсифицировать усилия и участвовать в нескольких сразу. Жаль, что рациональность не наш метод, да и времени жалко.
Читаю иногда статьи про то как быть, когда ничего не получается в исследованиях. Протоколы, помогающие детям справиться с эмоциями при столкновении с созданной для их мучения математикой. Как-будто бы хорошего рецепта так и не нашли, в целом, если обобщить, то надо верить в себя, ждать прорыва, закреплять позитивный опыт.
Но как же это тяжело, когда лучшая попытка была месяц (вечность!) назад. Упираться в одном соревновании намного труднее, чем диверсифицировать усилия и участвовать в нескольких сразу. Жаль, что рациональность не наш метод, да и времени жалко.
рабочие будни в этом году закончены, соревнования не заканчиваются никогда.
впереди финальный рывок по jane street и обзор других сорев, у меня большие планы
впереди финальный рывок по jane street и обзор других сорев, у меня большие планы
Закончилось соревнование Jane Street Real-Time Market Data Forecasting где надо было предсказывать не пойми что на не пойми каких фичах 🤷 Однако, какой-то гений из MIT отреверсинжинирил, что это не совсем не пойми чо, а простое скользящее среднее 20 подряд не пойми чего. Техника, которой он это сделал, интересная, мне понравилось. Никак мне не помогло, хотя я пару дней очень пытался из этого что-то выжать.
В соревновании был специфический для временных рядов способ принимать ответы - признаки, соответствующие последовательным моментам времени давались друг за другом и тебе не давали следующую порцию, пока не дал ответ к предыдущей. Временное ограничение - 1 минута. Но суммарный лимит 9ч, что приводит к тому, что надо давать ответы в среднем за 0.2сек. Раз в 968 шагов, что соответствует одному торговому дню, давали ответы за весь предыдущий день. Что давало интересные возможности, о которых ниже.
В последний день злодеи выкинули меня из золота паблика, хотя я тоже сделал свой лучший сабмит, исправив ошибки, как водится. Ну ничего, прайват будет настигать нас инкрементальными обновлениями аж до июля.
Я не придумал ни одной работающей идеи, но вот что мне помогло финишировать в топ-20:
1) Online learning. Нейронки отлично учатся на новых данных, самый лучший сетап - просто скормить им день как батч с низким lr. Деревья неожиданно тоже учатся и в итоговый ансамбль вошел lightgbm, для которого использовал метод refit для обновления. В среднем онлайн обучение давало маленький, но довольно надежный бонус к скору. Учится быстро (около 3 секунд суммарно на все мои модели раз за день)
2) Online ансамбль. Ну а почему бы и нет, раз уж мы модели можем дообучать, то и однослойный mlp с весами моделей в ансамбле тоже можем. Не смотря на метрику соревнования (weighted R2 ~ MSE) лучшим лоссом для ансамбля у меня был MAE.
3) TabM! Открытие ушедшего года, супер-модель, которая без всяких хитрых эмбеддингов, хотя она умеет и это, бьет на всех моих около-табличных бенчмарках все остальное, а кое-где и бусты. Без всяких наворотов, соло-модель на дефолтных фичах с онлайн обучением (и даже без) обгоняло лучший публичный ансамбль. Удивительно! Единственное что я сделал - странный лосс и отказ от использования категориальных фичей (с низкой кардинальностью). Использовал их как числа, отнормализовав в [0,1].
4) SWA спасение от стохастики в выборе гиперпараметра - сколько эпох учить. Вытягивает максимум за заданное число эпох
5) Валидация. Последние 120 дней, размером как паблик. Ну такое. Чем ближе к паблику, тем лучше бьются числа, но корреляция слабая. Однако! Лучшие гиперпараметры на валидации как-будто воспроизводят и лучший паблик. Использовал количество эпох для обучения как гиперпараметр и учил на полном датасете (включая бывшую валидацию)
6) Трансформер. Послабее чем TabM, но забустил скор в ансамбле. Нам дан не один ряд, а много рядов, соответствующих каким-то торговым тикерам. Крипта, фьючерсы или стоки - не так важно. Используем кросс-аттеншн чтобы спроецировать фичи с учетом других тикеров и на получившихся фичах гоняем RNN по времени. Трансформер по времени очень жруч по ресурсам, я даже не смог его довести до сабмита, а RNN позволяет сохранять стейт и применяться только к текущей порции данных. Возможно, тут я и проиграл и трансформер по времени был ключем для победы.
7) Хитрый лосс. MSE почему-то не коррелировал особо с R2. а вот MSE / var(y) коррелировал. Почти все модели обучены с ним.
8 ) Чего-то по мелочи, одна из моделей предсказывает вместо таргета целый ряд, на который сообразно реверс-инжинирингу накладываем лоссы из известных SMA. Не зашло, но чуть-чуть забустило ансамбль.
Смотрю на возможный шейкап позитивно, модель 6 обладает некоей сезонностью и паблик для нее плохое время, а потом (приват) должно быть хорошим 😂 Надеюсь, онлайн ансамбль вытянет. Паблик был намного стабильнее моей валидации, так что большого шейкапа не жду, буду удивлен, если он случится.
В соревновании был специфический для временных рядов способ принимать ответы - признаки, соответствующие последовательным моментам времени давались друг за другом и тебе не давали следующую порцию, пока не дал ответ к предыдущей. Временное ограничение - 1 минута. Но суммарный лимит 9ч, что приводит к тому, что надо давать ответы в среднем за 0.2сек. Раз в 968 шагов, что соответствует одному торговому дню, давали ответы за весь предыдущий день. Что давало интересные возможности, о которых ниже.
В последний день злодеи выкинули меня из золота паблика, хотя я тоже сделал свой лучший сабмит, исправив ошибки, как водится. Ну ничего, прайват будет настигать нас инкрементальными обновлениями аж до июля.
Я не придумал ни одной работающей идеи, но вот что мне помогло финишировать в топ-20:
1) Online learning. Нейронки отлично учатся на новых данных, самый лучший сетап - просто скормить им день как батч с низким lr. Деревья неожиданно тоже учатся и в итоговый ансамбль вошел lightgbm, для которого использовал метод refit для обновления. В среднем онлайн обучение давало маленький, но довольно надежный бонус к скору. Учится быстро (около 3 секунд суммарно на все мои модели раз за день)
2) Online ансамбль. Ну а почему бы и нет, раз уж мы модели можем дообучать, то и однослойный mlp с весами моделей в ансамбле тоже можем. Не смотря на метрику соревнования (weighted R2 ~ MSE) лучшим лоссом для ансамбля у меня был MAE.
3) TabM! Открытие ушедшего года, супер-модель, которая без всяких хитрых эмбеддингов, хотя она умеет и это, бьет на всех моих около-табличных бенчмарках все остальное, а кое-где и бусты. Без всяких наворотов, соло-модель на дефолтных фичах с онлайн обучением (и даже без) обгоняло лучший публичный ансамбль. Удивительно! Единственное что я сделал - странный лосс и отказ от использования категориальных фичей (с низкой кардинальностью). Использовал их как числа, отнормализовав в [0,1].
4) SWA спасение от стохастики в выборе гиперпараметра - сколько эпох учить. Вытягивает максимум за заданное число эпох
5) Валидация. Последние 120 дней, размером как паблик. Ну такое. Чем ближе к паблику, тем лучше бьются числа, но корреляция слабая. Однако! Лучшие гиперпараметры на валидации как-будто воспроизводят и лучший паблик. Использовал количество эпох для обучения как гиперпараметр и учил на полном датасете (включая бывшую валидацию)
6) Трансформер. Послабее чем TabM, но забустил скор в ансамбле. Нам дан не один ряд, а много рядов, соответствующих каким-то торговым тикерам. Крипта, фьючерсы или стоки - не так важно. Используем кросс-аттеншн чтобы спроецировать фичи с учетом других тикеров и на получившихся фичах гоняем RNN по времени. Трансформер по времени очень жруч по ресурсам, я даже не смог его довести до сабмита, а RNN позволяет сохранять стейт и применяться только к текущей порции данных. Возможно, тут я и проиграл и трансформер по времени был ключем для победы.
7) Хитрый лосс. MSE почему-то не коррелировал особо с R2. а вот MSE / var(y) коррелировал. Почти все модели обучены с ним.
8 ) Чего-то по мелочи, одна из моделей предсказывает вместо таргета целый ряд, на который сообразно реверс-инжинирингу накладываем лоссы из известных SMA. Не зашло, но чуть-чуть забустило ансамбль.
Смотрю на возможный шейкап позитивно, модель 6 обладает некоей сезонностью и паблик для нее плохое время, а потом (приват) должно быть хорошим 😂 Надеюсь, онлайн ансамбль вытянет. Паблик был намного стабильнее моей валидации, так что большого шейкапа не жду, буду удивлен, если он случится.
какие уроки извлечь из Jane street я пока не понял, потому что идеи, которые привели к более высокому скору других, я тоже придумал. но то ли криво реализовал, то ли секрет в чем-то другом.
пока понял из опубликованных, что мой зоопарк а) довольно уникальный, б) онлайн обучение ансамбля никто не делал.
разберу чужие решения уже в июле тогда😅
пока меня завалило работой, на праздниках завалили другие обстоятельства, смешавшие все планы, пока думаю, что когда станет посвободнее, пойду rl решать (текущий топ паблик без rl там)
пока понял из опубликованных, что мой зоопарк а) довольно уникальный, б) онлайн обучение ансамбля никто не делал.
разберу чужие решения уже в июле тогда
пока меня завалило работой, на праздниках завалили другие обстоятельства, смешавшие все планы, пока думаю, что когда станет посвободнее, пойду rl решать (текущий топ паблик без rl там)
Please open Telegram to view this post
VIEW IN TELEGRAM
Неожиданное. Запустил сореву на каггле. https://www.kaggle.com/competitions/lrx-oeis-a-186783-brainstorm-math-conjecture/overview
Хорошее решение ML/RL-ем имеет важное прикладное значение и можно стать соавтором статьи. Алгоритмические не так интересны, потому что плохо обобщаются.
Добавил код алго-бейзлайна и Beam Search с трансформером
Хорошее решение ML/RL-ем имеет важное прикладное значение и можно стать соавтором статьи. Алгоритмические не так интересны, потому что плохо обобщаются.
Добавил код алго-бейзлайна и Beam Search с трансформером
Kaggle
LRX OEIS-A186783 brainstorm math conjecture
Using cyclic shifts and permutation of elements at designated positions, sort permutations in the minimum number of moves
Соревнование закончилось очень быстро, не сильно дольше, чем я его готовил. Поздравляю, @Luxoove и @VeennnN - большие молодцы! 🎉 Хорошо, что приз не успели сделать 😂
Подумал, что часто ожидания хоста соревы от решений расходятся с реальностью на каггле. Любые ограничения подталкивающие в сторону необходимого - зло, как мне кажется. Если задача решается естественным путем вот так, а не иначе, значит просто плохо подобрана задача. С другой стороны, создателю задачи тяжело, он не может придумать все те хаки, которые придумают участники.
Интересный опыт!
У меня есть еще одна задача на ту же тему, но в ней хорошо бы code competition, чтобы не решали тест вручную. LLM довольно неплохо генерит алгоритмы, а если ей задавать уточняющие вопросы, то она приходит к хорошим, а иногда оптимальным решениям.
Можно ли, ограничившись некоторым классом задач (группы перестановок с произвольными образующими), заставить ее генерить алгоритмы решения (перевод произвольной перестановки в единичную за минимальное число ходов или, что то же самое, представление любой перестановки за минимальное число образующих. Мне на основе небольшого опыта с ними, кажется, что можно. Уж от подходов в решении этой задачи точно было бы много пользы науке.
Подумал, что часто ожидания хоста соревы от решений расходятся с реальностью на каггле. Любые ограничения подталкивающие в сторону необходимого - зло, как мне кажется. Если задача решается естественным путем вот так, а не иначе, значит просто плохо подобрана задача. С другой стороны, создателю задачи тяжело, он не может придумать все те хаки, которые придумают участники.
Интересный опыт!
У меня есть еще одна задача на ту же тему, но в ней хорошо бы code competition, чтобы не решали тест вручную. LLM довольно неплохо генерит алгоритмы, а если ей задавать уточняющие вопросы, то она приходит к хорошим, а иногда оптимальным решениям.
Можно ли, ограничившись некоторым классом задач (группы перестановок с произвольными образующими), заставить ее генерить алгоритмы решения (перевод произвольной перестановки в единичную за минимальное число ходов или, что то же самое, представление любой перестановки за минимальное число образующих. Мне на основе небольшого опыта с ними, кажется, что можно. Уж от подходов в решении этой задачи точно было бы много пользы науке.
запустили пару сорев теперь с отлаженными датасетами.
как предыдущая, но по 100 перестановок на каждый n, алгоритм так просто не заточишь:
https://www.kaggle.com/competitions/lrx-discover-math-gods-algorithm/
отдельно интересная задача, где вместо перестановки чисел поровну 0 и 1:
https://www.kaggle.com/competitions/lrx-binary-in-search-of-gods-number/leaderboard
универсальный алгоритм не нашли, но и не доказали его отсутствия. трансформеры работают, RL нет. я, впрочем, интерес к задаче утратил, увы.
как предыдущая, но по 100 перестановок на каждый n, алгоритм так просто не заточишь:
https://www.kaggle.com/competitions/lrx-discover-math-gods-algorithm/
отдельно интересная задача, где вместо перестановки чисел поровну 0 и 1:
https://www.kaggle.com/competitions/lrx-binary-in-search-of-gods-number/leaderboard
универсальный алгоритм не нашли, но и не доказали его отсутствия. трансформеры работают, RL нет. я, впрочем, интерес к задаче утратил, увы.
Kaggle
LRX discover math & God's algorithm
Explore shortest paths in permutation graphs and dive into combinatorial wonders