Forwarded from Data Blog
Привет, друзья! Врываюсь с полезными материалами! :)
Сделала открытую страничку, посвящённую механистической интерпретируемости.
В отличие от "обычной интерпретируемости", где мы чаще ограничиваемся атрибуцией признаков или визуализацией, механистическая ставит цель понять механизмы: какие представления формируются внутри модели, какие там есть схемы и связи и каким образом из простых блоков складывается сложное поведение.
Пока что глобально сильных результатов, вроде тех, что приближали бы к ответу на вопрос "Как спастись от AGI?" нет. Но с помощью MI можно:
— находить интерпретируемые признаки внутри моделей и отслеживать, как они взаимодействуют;
— создавать инструменты для редактирования поведения моделей (feature editing, model steering);
— теоретически понимать архитектуры вроде трансформеров, на которых сегодня держится весь прогресс :)
На страничках уже есть:
— введение в тему и зачем она нужна;
— базовые определения и ключевые термины;
— обзор гипотез, на которых строится подход;
— разбор архитектуры трансформеров.
Другие ресурсы по MI есть, конечно. Но я хочу сделать "живой справочник" и подтягиваю свежие статьи и работы, чтобы можно было сориентироваться в том, что есть сейчас.
Надеюсь больше не пропадать, хотя творческий кризис — это почти полезно, если из него выйти.
Всегда Ваш,
Дата-автор! :)
Сделала открытую страничку, посвящённую механистической интерпретируемости.
В отличие от "обычной интерпретируемости", где мы чаще ограничиваемся атрибуцией признаков или визуализацией, механистическая ставит цель понять механизмы: какие представления формируются внутри модели, какие там есть схемы и связи и каким образом из простых блоков складывается сложное поведение.
Пока что глобально сильных результатов, вроде тех, что приближали бы к ответу на вопрос "Как спастись от AGI?" нет. Но с помощью MI можно:
— находить интерпретируемые признаки внутри моделей и отслеживать, как они взаимодействуют;
— создавать инструменты для редактирования поведения моделей (feature editing, model steering);
— теоретически понимать архитектуры вроде трансформеров, на которых сегодня держится весь прогресс :)
На страничках уже есть:
— введение в тему и зачем она нужна;
— базовые определения и ключевые термины;
— обзор гипотез, на которых строится подход;
— разбор архитектуры трансформеров.
Другие ресурсы по MI есть, конечно. Но я хочу сделать "живой справочник" и подтягиваю свежие статьи и работы, чтобы можно было сориентироваться в том, что есть сейчас.
Надеюсь больше не пропадать, хотя творческий кризис — это почти полезно, если из него выйти.
Всегда Ваш,
Дата-автор! :)
sadsabrina.github.io
Awesome MI theory
Simple notes and articles on MI theory
Forwarded from Korenev AI - GPT в тапочках🩴
Как найти пушка-идею для супер-сервиса
Встретил алгоритм поиска идей, которым хочется поделиться:
1. Изучаем в первую очередь популярные приложения. Если нет популярности, значит идея не востребована.
2. Заходим в отзывы и читаем самые отрицательные и самые залайканные (именно этот пункт меня зацепил)
3. Думаем, как можем в своем проекте учесть отрицательные моменты проектов-локомотивов
Ну а дальше самое простое:
4. Быстро-быстро делаем проект - захватываем рынок - зарабатываем свой миллион долларов. Просто и точка!
Встретил алгоритм поиска идей, которым хочется поделиться:
1. Изучаем в первую очередь популярные приложения. Если нет популярности, значит идея не востребована.
2. Заходим в отзывы и читаем самые отрицательные и самые залайканные (именно этот пункт меня зацепил)
3. Думаем, как можем в своем проекте учесть отрицательные моменты проектов-локомотивов
Ну а дальше самое простое:
4. Быстро-быстро делаем проект - захватываем рынок - зарабатываем свой миллион долларов. Просто и точка!
Forwarded from Андрей Созыкин (Andrey Sozykin)
YouTube
Практика по сокетам | Компьютерные сети 2025 - 37
Практика по сокетам - интерфейсу транспортного уровня TCP/IP.
Как поддержать курс:
- Boosty - https://boosty.to/asozykin
- Cloudtips - https://pay.cloudtips.ru/p/45a4055b
Заранее спасибо за помощь!
Сайт курса - https://www.asozykin.ru/courses/networks_online…
Как поддержать курс:
- Boosty - https://boosty.to/asozykin
- Cloudtips - https://pay.cloudtips.ru/p/45a4055b
Заранее спасибо за помощь!
Сайт курса - https://www.asozykin.ru/courses/networks_online…
Практика по сокетам на Python
В видео по компьютерным сетям на этой неделе рассматриваем пример с сокетами на Python:
- Разбираемся, как запустить клиент и сервер в терминале.
- Проверяем, что сервер ожидает соединений (LISTEN) с помощью TCPView и netstat.
- Просматриваем в Wireshark, как данные между сокетами передаются по сети.
Полный код из видео находится в репозитории на GitHub.
Если плохо работает YouTube, то можно смотреть в Дзен или VK.
Поддержать создание курса можно на Boosty или CloudTips.
В видео по компьютерным сетям на этой неделе рассматриваем пример с сокетами на Python:
- Разбираемся, как запустить клиент и сервер в терминале.
- Проверяем, что сервер ожидает соединений (LISTEN) с помощью TCPView и netstat.
- Просматриваем в Wireshark, как данные между сокетами передаются по сети.
Полный код из видео находится в репозитории на GitHub.
Если плохо работает YouTube, то можно смотреть в Дзен или VK.
Поддержать создание курса можно на Boosty или CloudTips.
Forwarded from Запрети мне псевдолейблить
Пятое место #Birdclef2025
Мануальная обработка данных
Это вообще та самая 'секретная техника', которую все ленятся делать. Данные полезно ковырять/слушать смотреть руками
Использовали Silero для того, чтобы найти записи с человеческим голосом, затем слушали их уже своими ушами и вырезали все фрагменты, где слышен человек.
Вообще у Silero есть бот, так что я им пожалуй и озвучу этот раздел поста.
Для классов с низкой частотностью (меньше 30 семплов в трейне) дополнительно послушали все записи и из каждой вычистили участки, где птиц не слышно.
Для трейна брали только первые 30 сек записи, а для низкочастотных 60 сек. Там, где семплов было меньше 20 для класса- апсемплили, чтобы 'разудть' трейн.
Модели
Стакали кучу эффишентнетов. Благо они с легкостью влезали в ограничения по CPU
• 4x tf_efficientnetv2_s
• 3x tf_efficientnetv2_b3
• 4x tf_efficient_b3_ns
• 2x tf_efficient_b0_ns
Но важно что тренировали в три стейджа. В каждом FocalLoss, Adam, Cosine Annealing + warmup
Первый стейдж:
только основной набор данных, только основной таргет
Второй стейдж:
Основной таргет + псевдолейблы, только основные размеченные данные + двухэтапная самодистилляция
Третий стейдж:
Использовали все данные. Для каждого батча брали половину из размеченных данных, половину из неразмеченных. Для основного набора испольовали основные лейблы + псевдолейблы с второго этапа, для неразмеченных- только псевдолейблы
Ну и еще дважды самодистилляция.
Если вы шарите, то объясните плз в комментах почему самодистилл работает и почему его есть смысл больше двух раз делать? Там еще и перфоманс на самодистиллах растет. В комментах есть график того, какие резульатты получаются от уровня дистилла
Мануальная обработка данных
Это вообще та самая 'секретная техника', которую все ленятся делать. Данные полезно ковырять/слушать смотреть руками
Использовали Silero для того, чтобы найти записи с человеческим голосом, затем слушали их уже своими ушами и вырезали все фрагменты, где слышен человек.
Вообще у Silero есть бот, так что я им пожалуй и озвучу этот раздел поста.
Для классов с низкой частотностью (меньше 30 семплов в трейне) дополнительно послушали все записи и из каждой вычистили участки, где птиц не слышно.
Для трейна брали только первые 30 сек записи, а для низкочастотных 60 сек. Там, где семплов было меньше 20 для класса- апсемплили, чтобы 'разудть' трейн.
Модели
Стакали кучу эффишентнетов. Благо они с легкостью влезали в ограничения по CPU
• 4x tf_efficientnetv2_s
• 3x tf_efficientnetv2_b3
• 4x tf_efficient_b3_ns
• 2x tf_efficient_b0_ns
Но важно что тренировали в три стейджа. В каждом FocalLoss, Adam, Cosine Annealing + warmup
Первый стейдж:
только основной набор данных, только основной таргет
Второй стейдж:
Основной таргет + псевдолейблы, только основные размеченные данные + двухэтапная самодистилляция
Третий стейдж:
Использовали все данные. Для каждого батча брали половину из размеченных данных, половину из неразмеченных. Для основного набора испольовали основные лейблы + псевдолейблы с второго этапа, для неразмеченных- только псевдолейблы
Ну и еще дважды самодистилляция.
Если вы шарите, то объясните плз в комментах почему самодистилл работает и почему его есть смысл больше двух раз делать? Там еще и перфоманс на самодистиллах растет. В комментах есть график того, какие резульатты получаются от уровня дистилла
Forwarded from Запрети мне псевдолейблить
4 место в #BirdClef2025
Коротко, но ценно: иногда простота выигрывает.
Поскольку на BirdCLEF нас оценивают именно по AUC, логично оптимизировать его напрямую.
AUC-лосс устойчив к переобучению, но не поддерживает soft labels, как, например, кросс-энтропия.
Что еще работало и не работало:
Semi-supervised learning на неразмеченном датасете:
Сначала обучил 10 моделей EfficientNet на размеченной части.
Сгенерировал «псевдо-лейблы» для неразмеченных данных.
Обучил следующий раунд моделей уже на объединённом наборе.
Отказался от самодистилляции и сложных схем — не заводилось.
Лотерея или мастерство? Автор поднялся с 11 места на 4-е на прайвете! Возможно, дело не только в удаче.
Коротко, но ценно: иногда простота выигрывает.
Поскольку на BirdCLEF нас оценивают именно по AUC, логично оптимизировать его напрямую.
AUC-лосс устойчив к переобучению, но не поддерживает soft labels, как, например, кросс-энтропия.
class SoftAUCLoss(nn.Module):
def __init__(self, margin=1.0, pos_weight=1.0, neg_weight=1.0):
super().__init__()
self.margin = margin
self.pos_weight = pos_weight
self.neg_weight = neg_weight
def forward(self, preds, labels, sample_weights=None):
# Разделяем положительные и отрицательные предсказания
pos_mask = labels > 0.5
neg_mask = labels < 0.5
pos_preds, pos_labels = preds[pos_mask], labels[pos_mask]
neg_preds, neg_labels = preds[neg_mask], labels[neg_mask]
if pos_preds.numel() == 0 or neg_preds.numel() == 0:
return torch.tensor(0., device=preds.device)
# Веса отражают уверенность soft-label
pos_w = self.pos_weight * (pos_labels - 0.5)
neg_w = self.neg_weight * (0.5 - neg_labels)
if sample_weights is not None:
sw = sample_weights.unsqueeze(1).expand_as(labels)
pos_w *= sw[pos_mask]
neg_w *= sw[neg_mask]
# Считаем pairwise-разности и лог-лосс
diff = pos_preds.unsqueeze(1) - neg_preds.unsqueeze(0)
loss_matrix = torch.log1p(torch.exp(-self.margin * diff))
# Усредняем по всем парам с учётом весов
return (loss_matrix * pos_w.unsqueeze(1) * neg_w.unsqueeze(0)).mean()
Что еще работало и не работало:
Semi-supervised learning на неразмеченном датасете:
Сначала обучил 10 моделей EfficientNet на размеченной части.
Сгенерировал «псевдо-лейблы» для неразмеченных данных.
Обучил следующий раунд моделей уже на объединённом наборе.
Отказался от самодистилляции и сложных схем — не заводилось.
Лотерея или мастерство? Автор поднялся с 11 места на 4-е на прайвете! Возможно, дело не только в удаче.
Kaggle
4th place solution | Kaggle
Kaggle is the world’s largest data science community with powerful tools and resources to help you achieve your data science goals.
Forwarded from Запрети мне псевдолейблить
3 место в #BirdClef2025
Данные:
1. Выкорчевали человеческий голос с помощью паблик кернела с каггла.
2. Взяли весь датасет 2025 года и к нему доложили 80% датасета 2023 года, добавив 112 новы классов. Оставшиеся 20% данных 2023 использовали для валидации. Локальная валидация не билась с ЛБ, но такая схема давала лучшую оценку сходимости модели.
3. Дополнительно вытянули еще данных из обоих открытых источнико, Xeno-Canto и INaturalist.
4. Запсевдолейбили всю неразмеченную часть, чтобы еще немного улучшить итоговые модели
Модели:
Обучили зоопарк моделей на двух видах спектрограмм. Вообще почти всегда есть смысл покрутить параметы построения спектрограмм для того, чтобы увеличить разнообразие и не потерять в качестве. Главное одну модель не учить на двух видах.
Список моделей
tf_efficientnet_b0_ns
tf_efficientnetv2_b3
tf_efficientnetv2_s.in21k_ft_in1k
mnasnet_100
spnasnet_100
Интересные приемы для обучения:
1. Семплировали случайные отрезки, а не честную нарезку по 5 сек. Говорят, так лучше училось
2. Добавляли человеческий голос для аугментации. На мой взгляд не сильно вяжется с удалением голоса из изначального датасета, но видимо использовали этот прием чтобы голос 'равномерно' размазать по всему датасету
3. FocalLoss
4. Использовали Model Soup. Это способ 'ужать' в одну модель несколько чекпоинтов. Усредняем веса например 20 resnet c одинаковой архитектурой и обученных на одних данных. Получаем почти ту же стабильность, что и усреднение 20 отдельных предикшнов этих моделей, но со скоростью инференса и весом одного resnet.
Кстати, тут можно обычно докрутить и делать только GreedySoup: пробовать в ансамбль добавлять только те модели, которые делают предикты лучше. Но опять же, тут надо верить в свой CV, а в этом соревновании наверно никто не верил в свой CV.
Для сабмита использовали Post-processing with power adjustment. Идея проста, работает для очень классификации с очень большим числом классов. Берем предикты, из них выбираем n самых 'уверенных' и усиливаем их, занижая скоры для прочих классов.
Данные:
1. Выкорчевали человеческий голос с помощью паблик кернела с каггла.
2. Взяли весь датасет 2025 года и к нему доложили 80% датасета 2023 года, добавив 112 новы классов. Оставшиеся 20% данных 2023 использовали для валидации. Локальная валидация не билась с ЛБ, но такая схема давала лучшую оценку сходимости модели.
3. Дополнительно вытянули еще данных из обоих открытых источнико, Xeno-Canto и INaturalist.
4. Запсевдолейбили всю неразмеченную часть, чтобы еще немного улучшить итоговые модели
Модели:
Обучили зоопарк моделей на двух видах спектрограмм. Вообще почти всегда есть смысл покрутить параметы построения спектрограмм для того, чтобы увеличить разнообразие и не потерять в качестве. Главное одну модель не учить на двух видах.
Список моделей
tf_efficientnet_b0_ns
tf_efficientnetv2_b3
tf_efficientnetv2_s.in21k_ft_in1k
mnasnet_100
spnasnet_100
Интересные приемы для обучения:
1. Семплировали случайные отрезки, а не честную нарезку по 5 сек. Говорят, так лучше училось
2. Добавляли человеческий голос для аугментации. На мой взгляд не сильно вяжется с удалением голоса из изначального датасета, но видимо использовали этот прием чтобы голос 'равномерно' размазать по всему датасету
3. FocalLoss
4. Использовали Model Soup. Это способ 'ужать' в одну модель несколько чекпоинтов. Усредняем веса например 20 resnet c одинаковой архитектурой и обученных на одних данных. Получаем почти ту же стабильность, что и усреднение 20 отдельных предикшнов этих моделей, но со скоростью инференса и весом одного resnet.
Кстати, тут можно обычно докрутить и делать только GreedySoup: пробовать в ансамбль добавлять только те модели, которые делают предикты лучше. Но опять же, тут надо верить в свой CV, а в этом соревновании наверно никто не верил в свой CV.
Для сабмита использовали Post-processing with power adjustment. Идея проста, работает для очень классификации с очень большим числом классов. Берем предикты, из них выбираем n самых 'уверенных' и усиливаем их, занижая скоры для прочих классов.
Kaggle
3rd Place Solution | Kaggle
Kaggle is the world’s largest data science community with powerful tools and resources to help you achieve your data science goals.
Forwarded from Запрети мне псевдолейблить
Топ-2 в #BirdClef2025
В этот раз опытне птичники, у которых в команде чел с первым местом в 2022 и 2023 годах!
📊 Данные
Использовали данные из прошлых соревнований, что собственно и помогала в прошлые года +
Подтянули дополнительно записи из Xeno Archive.
Тут помог баг, который был обнаружен еще в 2023: API Xeno Archive выдаёт максимум 500 семплов на вид — большинство команд этого не учли. Багу два года, и его никто не чинит. Кто знает- тот знает
🎛️ Предобработка
Для обучения берём первые 7 секунд каждого файла и рандомно вырезаем 5 секунд.
Баланс между разнообразием данных и интуицией: голос птицы чаще слышен в начале записи.
🛠️ Архитектура и оптимизация
tf_efficientnetv2_s + RAdam
eca_nfnet_l0 + AdamW
Обе модели тренировали 50 эпох
Loss: Focal + BCE
Scheduller: Cosine LR
⚖️ Веса семплов
Учли с весами, чтобы компенсировать дисбаланс классов:
🚀 Ключевые бусты
1. Предтренинг на всём Xeno Archive
Вычистили низкочастотные классы и текущее тесто-трейн
Предобучили на задаче классификации и получили бекбон с глубоким пониманием спектрограмм записей животных
Результат: 0.84 → 0.87
2. Псевдолейблинг(запрещенная техника)
Предсказываем на неразмеченных данных → pseudo1
Оставляем только скоры > 0.5 → pseudo2
Зануляем слабые метки (< 0.1): pseudo2[pseudo2 < 0.1] = 0
Обучаем модель на таргет pseudo2 и повторяем цикл
После двух итераций: 0.87 → 0.89 → 0.91 (третий круг не даёт профита)
3. TTA
Сдвигали записи в Test time augmentation на 2.5 секунды влево и вправо, а потом усредняли предсказания.
0.91 -> 0.922
В общем опыт прошлых соревнований доовольно сильно решает, особенно если помнишь интересные баги связанные с источниками данных
В этот раз опытне птичники, у которых в команде чел с первым местом в 2022 и 2023 годах!
📊 Данные
Использовали данные из прошлых соревнований, что собственно и помогала в прошлые года +
Подтянули дополнительно записи из Xeno Archive.
Тут помог баг, который был обнаружен еще в 2023: API Xeno Archive выдаёт максимум 500 семплов на вид — большинство команд этого не учли. Багу два года, и его никто не чинит. Кто знает- тот знает
🎛️ Предобработка
Для обучения берём первые 7 секунд каждого файла и рандомно вырезаем 5 секунд.
Баланс между разнообразием данных и интуицией: голос птицы чаще слышен в начале записи.
🛠️ Архитектура и оптимизация
tf_efficientnetv2_s + RAdam
eca_nfnet_l0 + AdamW
Обе модели тренировали 50 эпох
Loss: Focal + BCE
Scheduller: Cosine LR
⚖️ Веса семплов
Учли с весами, чтобы компенсировать дисбаланс классов:
python
sample_weights = (
all_primary_labels.value_counts() /
all_primary_labels.value_counts().sum()
) ** (-0.5)
🚀 Ключевые бусты
1. Предтренинг на всём Xeno Archive
Вычистили низкочастотные классы и текущее тесто-трейн
Предобучили на задаче классификации и получили бекбон с глубоким пониманием спектрограмм записей животных
Результат: 0.84 → 0.87
2. Псевдолейблинг
Предсказываем на неразмеченных данных → pseudo1
Оставляем только скоры > 0.5 → pseudo2
Зануляем слабые метки (< 0.1): pseudo2[pseudo2 < 0.1] = 0
Обучаем модель на таргет pseudo2 и повторяем цикл
После двух итераций: 0.87 → 0.89 → 0.91 (третий круг не даёт профита)
3. TTA
Сдвигали записи в Test time augmentation на 2.5 секунды влево и вправо, а потом усредняли предсказания.
0.91 -> 0.922
В общем опыт прошлых соревнований доовольно сильно решает, особенно если помнишь интересные баги связанные с источниками данных
Forwarded from Запрети мне псевдолейблить
Топ-1 в #BirdClef2025 от Никиты Бабича запретите ему псевдолйблить
Никита всё соревнование доминировал — был на первом или втором месте. Я лично не видел его ниже чем на втором.
Данные
Дополнительные птицы
Докачал из архива Xeno ещё 5 489 записей по тем же классам, что и в трейне.
Дополнительные лягушки и насекомые из других таксонов
17 197 записей насекомых и амфибий, в том числе не входящих в лейблы для соревнования. Амфибии и насекомые имеют высокую частоту повторяющихся специфичных звуков, что сильно отличается от птиц — отлично прокачивает модель на низкочастотных и “других” классах.
SED-модели (Sound Event Detection).
Прошлые участники тоже их использовали, но я хотел именно тут объяснить что за SED такой.
Классическая классификация говорит «что это за звук», а SED ещё и «где он начинается и где кончается».
На шумных данных, где вокруг слышно несколько видов на одной записи, это был ключ к успеху вместе с псевдолейблингом.
По сути это мост от per-sample к per-frame разметке, похожий на MIL-задачу. Сильно мне напоминает MIL модели, которые делают что-то похожее, но на картинках
На картинке пример инференса SED: как и почему он помогает на шуме.
Валидация
Нормальной валидации не нашлось, поэтому Никита валидировался по ЛБ. :chad:
Многоэтапное обучение
Бейзлайн
15 эпох, Cross-Entropy, AdamW, Cosine Scheduler
backbone’ы: EfficientNet-0 + RegNetY-8
LB: 0.872
Псевдолейблинг I + MixUp
Генерим псевдолейблы на неразмеченной части.
Смешиваем MixUp: настоящие лейблы + псевдолейблы (малый вес последних).
Добавляем StochasticDepth (drop whole conv-блоки, p=0.15). StochasticDepth- это когда у нас есть дропауты, которые выкидывают целые блоки из бекбона и глубина получается недетерминированной.
Тренируем 25–35 эпох.
LB: 0.872 → 0.898
Power Scaling + псевдолейблинг II
Просто в лоб вторая итерация давала слишком шумные псевдолейблы, которые нельзя было повторно переиспользовать.
Решение:
new_preds_i = preds_i^(1/power_c) / sum(preds_j^(1/power_c))
Это позволило пройти 4 раунда псевдолейблинга с улучшением качества.
LB: 0.898 → 0.930
Отдельный пайплайн для насекомых и амфибий
Тренируем классификатор на этих данных.
Берём предикты по нужным классам из трейна и заменяем ими результаты в основном ансамбле.
LB: 0.930 → 0.933
В конечно итоге собираем ансамбль:
EfficientNet-l0, B4, B3 (3 раунда псевдолейблинга)
RegNetY-016 (2 штуки, 4 раунда)
RegNetY-008 (1 штука, 1 раунд)
Отдельный EfficientNet-B0 для классификации насекомых и амфибий
Из этого решения наверно для себя самыми горячими идеям вынесу:
1. PowerTransform для псевдолейблов, чтобы идти в несколько раундов. Идея будто даже похожая на жесткие псевдолейблы чем-то
2. SED как способ уточнить разметку на псевдолейблах
Никита всё соревнование доминировал — был на первом или втором месте. Я лично не видел его ниже чем на втором.
Данные
Дополнительные птицы
Докачал из архива Xeno ещё 5 489 записей по тем же классам, что и в трейне.
Дополнительные лягушки и насекомые из других таксонов
17 197 записей насекомых и амфибий, в том числе не входящих в лейблы для соревнования. Амфибии и насекомые имеют высокую частоту повторяющихся специфичных звуков, что сильно отличается от птиц — отлично прокачивает модель на низкочастотных и “других” классах.
SED-модели (Sound Event Detection).
Прошлые участники тоже их использовали, но я хотел именно тут объяснить что за SED такой.
Классическая классификация говорит «что это за звук», а SED ещё и «где он начинается и где кончается».
На шумных данных, где вокруг слышно несколько видов на одной записи, это был ключ к успеху вместе с псевдолейблингом.
По сути это мост от per-sample к per-frame разметке, похожий на MIL-задачу. Сильно мне напоминает MIL модели, которые делают что-то похожее, но на картинках
На картинке пример инференса SED: как и почему он помогает на шуме.
Валидация
Нормальной валидации не нашлось, поэтому Никита валидировался по ЛБ. :chad:
Многоэтапное обучение
Бейзлайн
15 эпох, Cross-Entropy, AdamW, Cosine Scheduler
backbone’ы: EfficientNet-0 + RegNetY-8
LB: 0.872
Псевдолейблинг I + MixUp
Генерим псевдолейблы на неразмеченной части.
Смешиваем MixUp: настоящие лейблы + псевдолейблы (малый вес последних).
Добавляем StochasticDepth (drop whole conv-блоки, p=0.15). StochasticDepth- это когда у нас есть дропауты, которые выкидывают целые блоки из бекбона и глубина получается недетерминированной.
Тренируем 25–35 эпох.
LB: 0.872 → 0.898
Power Scaling + псевдолейблинг II
Просто в лоб вторая итерация давала слишком шумные псевдолейблы, которые нельзя было повторно переиспользовать.
Решение:
new_preds_i = preds_i^(1/power_c) / sum(preds_j^(1/power_c))
Это позволило пройти 4 раунда псевдолейблинга с улучшением качества.
LB: 0.898 → 0.930
Отдельный пайплайн для насекомых и амфибий
Тренируем классификатор на этих данных.
Берём предикты по нужным классам из трейна и заменяем ими результаты в основном ансамбле.
LB: 0.930 → 0.933
В конечно итоге собираем ансамбль:
EfficientNet-l0, B4, B3 (3 раунда псевдолейблинга)
RegNetY-016 (2 штуки, 4 раунда)
RegNetY-008 (1 штука, 1 раунд)
Отдельный EfficientNet-B0 для классификации насекомых и амфибий
Из этого решения наверно для себя самыми горячими идеям вынесу:
1. PowerTransform для псевдолейблов, чтобы идти в несколько раундов. Идея будто даже похожая на жесткие псевдолейблы чем-то
2. SED как способ уточнить разметку на псевдолейблах
Forwarded from Женя Янченко
Выношу оглавление книги с кабанчиком («Высоконагруженные приложения» Мартина Клеппмана) в отдельный пост.
📎 Глава 1 Надежные, масштабируемые
и удобные в сопровождении
приложения
📎 Глава 2 Модели данных и языки запросов
📎 Глава 3 Подсистемы хранения и извлечения данных
🔵 Введение и хэш-индексы
🔵 Уплотнение и слияние в LSM
🔵 SS-таблицы и LSM-деревья
🔵 B-деревья
🔵 Сравнение B- и LSM-деревьев
🔵 OLAP и OLTP
📎 Глава 4 Кодирование и эволюция
🔴 Форматы сериализации данных
🔴 Режимы движения данных
📎 Глава 5 Репликация
🔵 Репликация с одним лидером, способы реализации репликации
🔵 Синхронная и асинхронная репликация
🔵 Проблемы при задержке репликации
🔵 Репликация с несколькими лидерами
🔵 Стратегии работы с конфликтами записи
🔵 Репликация без лидера
🔵 Операции записи и чтения по кворуму
📎 Глава 6 Шардирование
🔴 Как распределять по шардам данные
🔴 Вторичные индексы при шардировании
🔴 Ребалансировка шардов
📎 Глава 7 Транзакции
🔵 Концепция транзакций
🔵 Уровень изоляции Read Committed
🔵 Уровень изоляции Repeatable Read
🔵 Асимметрия записи и фантомы
🔵 Уровень изоляции Serializable
📎 Глава 8 Проблемы распределенных систем
🔴 Ненадежные сети
🔴 Ненадежные часы
🔴 Истина и ложь в распределенных системах
📎 Глава 9 Согласованность и консенсус
🔵 Линеаризуемость
🔵 Гарантии упорядоченности
🔵 Двухфазный коммит
🔵 Консенсусные алгоритмы
📎 Глава 10 Пакетная обработка
📎 Глава 11 Потоковая обработка
📎 Глава 12 Будущее информационных систем
#кабанчик #сисдиз
и удобные в сопровождении
приложения
📎 Глава 12 Будущее информационных систем
#кабанчик #сисдиз
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Женя Янченко
Решила обновить и расширить знания по дизайну систем. Начала с классики: читаю книгу с кабанчиком («Высоконагруженные приложения» Мартина Клепманна). Хочу поделиться тем, что усвоила после прочтения первой главы. Постараюсь объяснить на своих примерах.
Надежность…
Надежность…
Forwarded from Information Retriever
RecSys Challenge 2025.
Я уже рассказывал, что в этом году мы заняли четвертое место на RecSys Challenge. В июле подали статью на воркшоп соревнования, который проходит на самой конфе RecSys. Статью приняли! Мы доделали camera-ready версию, и с сегодняшнего дня подробное описание нашего решения можно почитать на arXiv.
От ревьюверов есть strong accept и комментарий “goldmine of practical insights” :)
Пригодится как разработчикам рексистем, так и участникам всевозможных соревнований по рекомендашкам.
Ссылочка — https://arxiv.org/abs/2508.06970
Я уже рассказывал, что в этом году мы заняли четвертое место на RecSys Challenge. В июле подали статью на воркшоп соревнования, который проходит на самой конфе RecSys. Статью приняли! Мы доделали camera-ready версию, и с сегодняшнего дня подробное описание нашего решения можно почитать на arXiv.
От ревьюверов есть strong accept и комментарий “goldmine of practical insights” :)
Пригодится как разработчикам рексистем, так и участникам всевозможных соревнований по рекомендашкам.
Ссылочка — https://arxiv.org/abs/2508.06970