Я, как новичок, наблюдаю за всем происходящим вокруг, и замечаю, что тренд на IT-специальности огромный. Множество курсов заманивают обещаниями о работе с высокой зарплатой, но спустя полгода после окончания курсов вы понимаете, что на «рынке» полно таких же как вы без опыта, а всем нужны профессионалы. Знакомо?
Я вынужден был изменить свой путь к работе мечты, и я выбрал участие в соревнованиях, чемпионатах и хакатонах, которые приносят не только опыт и знакомства, но и денежные призы и другие бонусы.
В настоящее время проходят два соревнования по машинному обучению с крупным призовым фондом, однако на одном из них такая высокая конкуренция, что для достижения чего-либо нужно тратить на это 24 часа в сутки. Второе же соревнование, Data Fusion Contest 2023, не получило достаточного внимания, хотя формат соревнования непривычный. Это турнир по Adversarial ML между командами атакующих и защищающих ML-моделей на транзакционных данных и содержит две задачи:
? В задаче Атака участники будут создавать атаки на нейросеть, обученную на данных транзакций.

? В задаче Защита — наоборот, учиться защищать свои модели от заранее оговоренного вида атак.

? Призеров определят Турниры — лучшие команды обеих задач столкнутся друг с другом за призовой фонд в 2 000 000 рублей!
Также участников ждет много мерча и подарков, онлайн-митапы с воркшопами и возможность круто прокачаться в новых DS/ML методах
Прочитав описание задач три раза, мне, как новичку, мало что стало понятно. Но низкая конкуренция, большой призовой фонд, множество подарков и любопытство заставляют меня разбираться в этих данных.
Мое решение задачи Защиты.
Прочитав все вводные, форум и посмотрев митапы, я осознал как отправлять решение на задачу защита, его нужно отправлять в формате zip.
Организаторы предоставили свой бейзлайн защиты submit_defence.zip, который состоит из 4 файлов:
– metadata.json – какой образ взять и как запустить скрипт
– model.py – скрипт, который сделает предикт. На вход имя .csv файла для предикта и имя выходного .csv файла с результатом работы
– nn_bins.pickle nn_weights.ckpt – файлы, необходимые для работы бейзлайна
Мы пока не будем лезть в дебри и создавать новые веса и прочее. Мы залезем в параметры модели в файле model.py и будем менять параметры этой модели. Главное на начальном этапе — попасть в топ-10.
В классе TransactionsRnn я меняю коэффициент скорости обучения (Learning rate=5e-2) и Droupout (nn.Dropout2d(0.1)) и смотрю что будет.
class TransactionsRnn(pl.LightningModule): def __init__(self, rnn_units=128, top_classifier_units=64, lr=5e-2, out_features=2): super().__init__() self._transaction_cat_embeddings = nn.ModuleList( [ self._create_embedding_projection(*embedding_projections[feature]) for feature in embedding_projections.keys() ] ) self._spatial_dropout = nn.Dropout2d(0.1) concat_embed = sum([embedding_projections[x][1] for x in embedding_projections.keys()]) self._gru = nn.GRU(input_size=concat_embed, hidden_size=rnn_units, batch_first=True, bidirectional=True,) self._hidden_size = rnn_units
Меняю количество повторений на 50 и random_seed на 42.
def reliable_predict(source_file, bins_path, model_path, random_seed=42): REPETITIONS = 50 # Сколько повторений
Увеличю batch_size до 256.
def get_dataloader(dataset, device, batch_size=256, is_validation=False): def collate_loader(x): return tuple(x_.to(device) for x_ in default_collate(x)) return DataLoader(dataset, batch_size=batch_size, collate_fn=collate_loader, shuffle=not is_validation,) def predict(source_file, bins_path, model_path, random_seed=42): pl.seed_everything(random_seed)
Далее мы сохраняем изменения, отправляем решение в формате .zip и получаем первый сабмит после базовой версии. Таким образом, меняя параметры модели и/или модель, добавляя слои, мы находим оптимальное для нас решение и достигаем лучшего скора в лидерборде.
Метрика соревнования
Mean Harm ROC-AUC. Это среднее гармоническое ROC-AUC на исходных данных и на атакованных. Метрика сочетает в себе компромисс между повышением защищенности модели и потенциальным снижением ее качества.
Mean Harm ROC-AUC: 0,71016
ссылка на оригинал статьи https://habr.com/ru/post/721174/
Добавить комментарий