Самоограничение по 3 часа в день на задачу наверное слишком сильное для области, в которой я плохо разбираюсь. Ботики хорошо играют локально, но нестабильно. Топ-перформеры набирают 70-90, в среднем 60+, а на лидерборде меньше 40 😱. Слишком много вопросов и мало времени.
Сореву с экзопланетами почти забросил, подвинули на второе место (и то пришлось дореализовать недоработанную раньше идею), надо будет вернуться к ней. Что-то там 1 место раскопало мощное, а у меня пока пустой список идей.
Сореву с экзопланетами почти забросил, подвинули на второе место (и то пришлось дореализовать недоработанную раньше идею), надо будет вернуться к ней. Что-то там 1 место раскопало мощное, а у меня пока пустой список идей.
rnn спасает RL-ботов от деменции, они просыпаются не в дивном новом мире, а в старом и известном на все 512 float'ов, которых хватит всем. из очевидных, но при этом новых для меня мыслей: gru можно применять не к последовательности, а циклом, запоминая hidden_state. в соревновании все еще не помогает, потому что внезапно добавление рандомных или просто чужих ботов рушит всю гармонию. не умею правильно засемплить такие игры в обучение
любимый этап соревнования - его конец. ты такой готовишься уже финализировать решение, а все вокруг внезапно начинают фонтанировать идеями и лидерборд проносится мимо тебя со скоростью света. чтобы противостоять фрустрации в этот момент необходимо сохранить в себе внутреннего студента - оставить что-нибудь интересное на самый конец, такое, что не факт успеешь, едва-едва, как перед сдачей курсовой. тогда на фрустрацию времени не остается.
до конца экзопланетной соревы 6 дней.
от excitement до depression один submission. мои клевые идеи так давно перестали работать, что чувствую неуверенность в себе.
если боги шейкапа существуют, то какие жертвы они любят?
от excitement до depression один submission. мои клевые идеи так давно перестали работать, что чувствую неуверенность в себе.
если боги шейкапа существуют, то какие жертвы они любят?
Ни одной сетки в жизни с помощью SGD не натренил. Adam с разными r и w топпингами - мой лучший друг. Всякая экзотика вне контекста обучения LLM тоже не помогают. Хотя RMSProp однажды зашел для rnn-ок. SGD у меня не работает даже для мелкого дотюна с очень мелким шагом. Удивляюсь, когда вижу его у кого-то. Неужели с Adam было бы не лучше.
Из теории я знаю, что автоэнкодер с линейным декодером - DL-аналог для PCA. model.decoder.state_dict()['0.weight'].t() в pytorch просто визуализирует эти компоненты. Но чтобы стал полным аналогом, надо в лосс добавлять компонент на ортогональность, после чего начитается вечная алхимия с композитным лоссом - как подбирать веса между основным и дополнительным. И часто сходимости от этого сложно добиться. Читал как-то про почти оротогональные эмбеды в многомерных пространствах, которые помогают запоминать LLMкам болше концепций, чем есть размерности пространства эмбедов, и решил, что если сильно сгладить Huber'ом условие ортогональности до почти-ортогональности (то есть мы совсем не штрафуем за углы близкие к 90), то должно получиться с меньшим количеством алхимии. Вроде действительно работает и компоненты получаются более независимыми. Но надо еще подумать
GPT научил меня интересной технике: guided_pca. В соревновании про экзопланеты надо было восстанавливать газовый состав атмосферы, а точнее спектр поглощения на разных длиннах волн. И вот, допустим, у вас есть ограниченное количество физических наблюдений и теоретические модели, дающие спектры газов. При разложении спектра на теоретические компоненты, возникают остатки, не проходящие хи-квадрат тесты, но вы точно знаете, что больше газов, дающих вклады нет. Что делать? Автоэнкодер и PCA оверфитятся на небольшое количество наблюдений и не обобщаются как следует.
Можно применить guided_pca. GPT предложила три варианта, я отдебажил и сохранил их себе https://gist.github.com/ifserge/56cbc9cbc3caaf024f9ae576f03be364
Самый лучший первый. Идея такая: мы ищем базис, ортогонализируем его и минимизируем ошибку восстановления, но к ошибке восстановления добавляем штраф за непохожесть на первоначальный вариант. У GPT была ошибка: после окончания процедуры проводилась еще одна ортогонализация вслепую, которая напрочь рушила все компоненты.
Можно применить guided_pca. GPT предложила три варианта, я отдебажил и сохранил их себе https://gist.github.com/ifserge/56cbc9cbc3caaf024f9ae576f03be364
Самый лучший первый. Идея такая: мы ищем базис, ортогонализируем его и минимизируем ошибку восстановления, но к ошибке восстановления добавляем штраф за непохожесть на первоначальный вариант. У GPT была ошибка: после окончания процедуры проводилась еще одна ортогонализация вслепую, которая напрочь рушила все компоненты.
Постмортем соревы, ужасный свой код пошарил тоже. https://www.kaggle.com/competitions/ariel-data-challenge-2024/discussion/543666
Kaggle
NeurIPS - Ariel Data Challenge 2024
Derive exoplanet signals from Ariel's optical instruments
скандалы https://www.kaggle.com/competitions/ariel-data-challenge-2024/discussion/543793
написал в личку, но ссылками на маркетплейсы не делится
написал в личку, но ссылками на маркетплейсы не делится
Классный отчет со 2 места прошедшей соревы https://www.kaggle.com/competitions/ariel-data-challenge-2024/discussion/543853
В основе лежит Gaussian Process, который есть даже в sklearn, но медленный. Если у нас есть зашумленный ряд или многомерные данные, GP отвечает на вопрос не об истинных значениях в каждой точке, а к какому распределению она принадлежит, опираясь на наблюдаемые значения соседей. Метод байесовский потому что рассматривает все наблюдаемые точки, как случайные величины из многомерного нормального распределения.
GP предполагает, что у близких точек близкие значения, т.е. сигнал в каком-то смысле гладкий. Шум состоит из белого шума равномерного распределения, амплитуду которого надо знать заранее, а так же частотных скорелированных шумов. Каждое наблюдение это истинное значение + шум, поэтому усреднив соседние точки с учетом их корреляций между собой, мы можем лучше оценить их значения. Например, если рассмотреть три точки подряд, значения которых близки, а у третьей сильно отличается, то 3 получит гораздо меньший вес.
Ковариационная функция (ядро) бывает разная, обычно берут радиальную, задавая радиус на котором мы считаем, что локально изменения не сильные. GP в каком-то смысле обучается на данных локально, для каждой окрестности подбирая оптимальные веса восстановления сигнала по соседям.
Я потратил часов 10 в этом соревновании чтобы завести этот метод, обнаружил магию, что он довольно далеко может увести наблюдаемые данные в какой-то локальной области, при этом дальнейшие части пайплайна на этом участке дают более точный результат. Но я бросил, потому что результаты получались так себе, а что шевелить понятия не было. Так что на практике метод сильный, но, возможно придется повозиться, чтобы получить хороший результат.
Бонус: GP на JAX
В основе лежит Gaussian Process, который есть даже в sklearn, но медленный. Если у нас есть зашумленный ряд или многомерные данные, GP отвечает на вопрос не об истинных значениях в каждой точке, а к какому распределению она принадлежит, опираясь на наблюдаемые значения соседей. Метод байесовский потому что рассматривает все наблюдаемые точки, как случайные величины из многомерного нормального распределения.
GP предполагает, что у близких точек близкие значения, т.е. сигнал в каком-то смысле гладкий. Шум состоит из белого шума равномерного распределения, амплитуду которого надо знать заранее, а так же частотных скорелированных шумов. Каждое наблюдение это истинное значение + шум, поэтому усреднив соседние точки с учетом их корреляций между собой, мы можем лучше оценить их значения. Например, если рассмотреть три точки подряд, значения которых близки, а у третьей сильно отличается, то 3 получит гораздо меньший вес.
Ковариационная функция (ядро) бывает разная, обычно берут радиальную, задавая радиус на котором мы считаем, что локально изменения не сильные. GP в каком-то смысле обучается на данных локально, для каждой окрестности подбирая оптимальные веса восстановления сигнала по соседям.
Я потратил часов 10 в этом соревновании чтобы завести этот метод, обнаружил магию, что он довольно далеко может увести наблюдаемые данные в какой-то локальной области, при этом дальнейшие части пайплайна на этом участке дают более точный результат. Но я бросил, потому что результаты получались так себе, а что шевелить понятия не было. Так что на практике метод сильный, но, возможно придется повозиться, чтобы получить хороший результат.
Бонус: GP на JAX
Kaggle
NeurIPS - Ariel Data Challenge 2024
Derive exoplanet signals from Ariel's optical instruments
На Yandex ml-cup лик, айдишники в тесте не перемешали, 0.99 скора из 1. в последние часы. Драма. Подробности в коммент кину
Forwarded from Nikita Trifonov
1е место public LB
Мое решение - стэкинг, где на первом уровне обычная модель, на втором уровне - модель, которая улучшает предсказания первой, эксплуатируя лик
Модель первого уровня - coverhunter (https://arxiv.org/pdf/2306.09025v1 , код модели из https://github.com/alanngnet/CoverHunterMPS с минорными твиками). Вместо лоссов из статьи использовал аркфейс с margin, зависящей от кол-ва примеров класса. Реализовал аугментации из статьи - XYMasking, сдвиг спектрограммы по вертикали, изменение скорости, изменение громкости. Модель первого уровня довел примерно до 0.608 public LB
Суть лика - айдишники в test_ids.npy не зашафлены, треки, которые являются каверами друг друга, идут непосредственно друг за другом. Это легко увидеть, если посчитать эмбеддинги моделью первого уровня для первой тысячи треков из test_ids.npy и построить матрицу попарных расстояний между ними (см. картинку). То есть взаимное расположение айдишников в test_ids.npy - важная фича, если треки следуют непосредственно друг за другом, они скорее всего являются кавером, а если между ними 2000 других айдишников - точно нет. Заэксплуатиривоть это можно разными способами, например CatBoostRanker на двух фичах - расстояние между эмбеддингами и расстояние между айдишниками - давал порядка 0.98 public LB. Я ожидал, что больше людей найдет лик, поэтому оверкиллил эту часть: обучал u-net, которому на вход подается матрица попарных расстояний, а выход трактуем как матрицу скоров (одна строка - один трек, для которого нужно найти каверы, а сами значения в строке - это скоры треков, находящихся слева и справа от данного в списке айдишников). Использовал лосс для задачи ранжирования из pytorchltr; реализовал маскирование, чтобы учитывать для каждого трека ровно по 100 соседей слева и справа из списка айдишников; аугментацию для трейна за счет шаффлинга порядка клик и порядка треков внутри клик.
Мое решение - стэкинг, где на первом уровне обычная модель, на втором уровне - модель, которая улучшает предсказания первой, эксплуатируя лик
Модель первого уровня - coverhunter (https://arxiv.org/pdf/2306.09025v1 , код модели из https://github.com/alanngnet/CoverHunterMPS с минорными твиками). Вместо лоссов из статьи использовал аркфейс с margin, зависящей от кол-ва примеров класса. Реализовал аугментации из статьи - XYMasking, сдвиг спектрограммы по вертикали, изменение скорости, изменение громкости. Модель первого уровня довел примерно до 0.608 public LB
Суть лика - айдишники в test_ids.npy не зашафлены, треки, которые являются каверами друг друга, идут непосредственно друг за другом. Это легко увидеть, если посчитать эмбеддинги моделью первого уровня для первой тысячи треков из test_ids.npy и построить матрицу попарных расстояний между ними (см. картинку). То есть взаимное расположение айдишников в test_ids.npy - важная фича, если треки следуют непосредственно друг за другом, они скорее всего являются кавером, а если между ними 2000 других айдишников - точно нет. Заэксплуатиривоть это можно разными способами, например CatBoostRanker на двух фичах - расстояние между эмбеддингами и расстояние между айдишниками - давал порядка 0.98 public LB. Я ожидал, что больше людей найдет лик, поэтому оверкиллил эту часть: обучал u-net, которому на вход подается матрица попарных расстояний, а выход трактуем как матрицу скоров (одна строка - один трек, для которого нужно найти каверы, а сами значения в строке - это скоры треков, находящихся слева и справа от данного в списке айдишников). Использовал лосс для задачи ранжирования из pytorchltr; реализовал маскирование, чтобы учитывать для каждого трека ровно по 100 соседей слева и справа из списка айдишников; аугментацию для трейна за счет шаффлинга порядка клик и порядка треков внутри клик.
3 часа ночи, но в интернете кто-то не прав. Возможно, я.
Есть такой Павел Кудан, который ни много ни мало закрыл кварки, но открыл отечественный нейтрон. https://www.researchgate.net/publication/375338254_The_Russian_Model_of_Nucleus_discovered_in_2023 Увы, он не хочет делиться полным текстом своего труда с бестолковым мной, да и с кем-либо.
Я с ним поругался на высоких тонах, за что мне стыдно (не, ну а чо, он первый начал), но в процессе он выдал военную тайну.
Экспериментальной основой теории Кудана является эта статья томских ученых , в которой есть реакция фотодиссоциации (мы лупим фотоном в надежде что-нибудь развалить) дейтерия (протон+нейтрон)
γd -> pp + π-
На что Павел Валерьевич резонно на мой взгляд говорит, смотрите, слева есть нейтрон, а справа протон и отрицательный пион, так это значит из него и вылетело?
Интересно, что статья кажется в нормальном журнале, много цитируется, но фамилии там все одни и те же. Как и практически все(?) статьи Гаузштейна
Я в некоторой растерянности. Кудан называет себя будущим нобелевским лауреатом. Небезосновательно. Или нет?
update: пояснили за реакции. томские ученые кроме как кругового самоцитирования никакого криминала не сделали, честь им и хвала.
на пару лет будет стоппер, чтобы не спорить про науку
Есть такой Павел Кудан, который ни много ни мало закрыл кварки, но открыл отечественный нейтрон. https://www.researchgate.net/publication/375338254_The_Russian_Model_of_Nucleus_discovered_in_2023 Увы, он не хочет делиться полным текстом своего труда с бестолковым мной, да и с кем-либо.
Я с ним поругался на высоких тонах, за что мне стыдно (не, ну а чо, он первый начал), но в процессе он выдал военную тайну.
Экспериментальной основой теории Кудана является эта статья томских ученых , в которой есть реакция фотодиссоциации (мы лупим фотоном в надежде что-нибудь развалить) дейтерия (протон+нейтрон)
γd -> pp + π-
На что Павел Валерьевич резонно на мой взгляд говорит, смотрите, слева есть нейтрон, а справа протон и отрицательный пион, так это значит из него и вылетело?
Интересно, что статья кажется в нормальном журнале, много цитируется, но фамилии там все одни и те же. Как и практически все(?) статьи Гаузштейна
update: пояснили за реакции. томские ученые кроме как кругового самоцитирования никакого криминала не сделали, честь им и хвала.
на пару лет будет стоппер, чтобы не спорить про науку
ResearchGate
(PDF) The Russian Model of Nucleus [discovered in 2023]
PDF | At the exhibition of achievements of Russia in the 21st century, the new Russian proton-pion model of the neutron and nucleus was presented on the... | Find, read and cite all the research you need on ResearchGate
Неудачно поучаствовал в сореве про MARL от сбера, отвлек финальный этап на kaggle, недостаток времени и я умудрился удалить большинство своих наработок, когда понадобилось место на компе.
В соревновании надо было реализовать RL-агентов, которые собирают ресурсы, перерабатывают их, получая очки, но загрязняя территорию. При определенном уровне загрязнения случается катастрофа и очки больше не заработать. Можно перерабатывать мусор, тратя очки, можно выкинуть его соседу, но глобальная катастрофа так же завершит игру.
Я хотел RL решение из-за не очень очевидных критериев в правилах, да и просто чтобы понять, можно ли его сделать. Список того, что попробовал в комментах:
В соревновании надо было реализовать RL-агентов, которые собирают ресурсы, перерабатывают их, получая очки, но загрязняя территорию. При определенном уровне загрязнения случается катастрофа и очки больше не заработать. Можно перерабатывать мусор, тратя очки, можно выкинуть его соседу, но глобальная катастрофа так же завершит игру.
Я хотел RL решение из-за не очень очевидных критериев в правилах, да и просто чтобы понять, можно ли его сделать. Список того, что попробовал в комментах:
Нейронки то, нейронки сё... а я mlp не могу в одной сореве запустить.
Статья про коктейль регуляризаций (забавный термин) обобщает все, что авторы смогли придумать для MLP: l1, l2, bn, dropout, swa, cut-mix, mix-up, skip-connection и прочие, как либа для регуляризаций - интересно. Затестили в том числе и на каггле. Ну, тлен, конечно. Как и прочие TabNet и Tabpfn. Для методов тоже есть свои трейн-валидэйшн-тест и тест не пройден.
Статья про коктейль регуляризаций (забавный термин) обобщает все, что авторы смогли придумать для MLP: l1, l2, bn, dropout, swa, cut-mix, mix-up, skip-connection и прочие, как либа для регуляризаций - интересно. Затестили в том числе и на каггле. Ну, тлен, конечно. Как и прочие TabNet и Tabpfn. Для методов тоже есть свои трейн-валидэйшн-тест и тест не пройден.