Skip to content

Commit 303b7fc

Browse files
committed
docs ru light version
1 parent 89487d1 commit 303b7fc

32 files changed

+2203
-204
lines changed
48.8 KB
Loading
35.9 KB
Loading
197 KB
Loading
229 KB
Loading
13.3 KB
Loading
78.6 KB
Loading
182 KB
Loading
64.1 KB
Loading

docs/source/_static/logo.png

349 KB
Loading

docs/source/dev_guide/arch_back.rst

Lines changed: 91 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
Backend architecture
1+
Архитектура бэкенда
22
********************
33

44
.. contents::
55
:local:
66
:depth: 2
77

8-
.. todo::
9-
8+
..
109
детали и тонкости для разработчика, как помочь внести вклад или расширить библиотеку
1110
1211
Архитектура кода: модули, классы, потоки данных
@@ -18,3 +17,92 @@ Backend architecture
1817
Тесты, кодстайл, линтеры
1918
Соглашения по docstrings, типизации
2019

20+
21+
22+
23+
.. image:: ../_static/images/userguide/training_pipeline_ru.png
24+
25+
26+
Атаки
27+
=====
28+
29+
В фреймворке поддерживаются три типа атак: атаки уклонения, отравления и MI атаки. Атаки отравления модифицируют набор данных, чтобы модель обучилась некорректно. Атаки уклонения направлены на то, чтобы уже обученная модель дала некорректный ответ на определенных данных. MI атаки являются атакой на приватность обученной модели и должны размечать данные на те, которые использовались при обучении модели и те, которые не использовались при обучении. Стоит обратить внимание, что в общем случае постановка MI не ставят перед собой целью восстановления разбиения на все три группы (обучение, валидация и тест).
30+
31+
Все методы атак находится на уровне менеджера модели, так как все методы атак должны применяться до обучения (для атак отравления) или на этапе оценки (для MI атак и атак уклонения).
32+
33+
Базовый класс Attacker
34+
----------------------
35+
36+
Для реализации методов атак и выполнения вспомогательных функций связанных с этим процессом реализован класс `Attacker` (файл ``src/attacks/attack_base.py``), который по умолчанию содержит методы ``attack``, ``dataset_diff``, статический метод ``check_availability`` и магический метод ``__init__``.
37+
38+
Метод ``attack`` является основным, которые собственно реализует саму атаку на данные, которые предоставляются. Этот метод требует переопределения при реализации новой атаки. Метод ``dataset_diff`` отвечает за информацию об изменениях в данных, если метод не предполагает изменения данных, то может не переопределяться. Метод ``check_availability`` нужен, чтобы можно было определить можно ли применить метод атаки на переданную конфигурацию (данных и/или менеджера).
39+
40+
Типы атак
41+
---------
42+
43+
От класса **Attacker** наследуются классы для реализации соответствующих трех типов атак: `PoisonAttacker` (``src/attacks/poison_attacks.py``), `EvasionAttacker` (``src/attacks/evasion_attacks.py``), `MIAttacker` (``src/attacks/mi_attacks.py``). Они являются базовыми классами, от которых наследуются уже конкретные методы самих атак, которые будут более детально описаны в разделах 3-5 данного отчета.
44+
45+
Отдельно отметим, что MI атака и атака уклонения работают не обязательно на всем наборе данных (по умолчанию запускаются на всей тестовой выборке, но посредством белевого тезора маски можно запустить атаку на подмножестве данных датасета. В данном случае маска имеет эквивалентный смысл маскам разбивающие данные набора на обучение, валидацию и тест. Подмножество также подразумевает вершину с ее i-ой окрестностью для задач классификации вершин или i-ый граф для задач классификации графов, а не абсолютно произвольное подмножество данных. Кроме тех случаев, если иная логика не предусмотрена конкретными атаками).
46+
47+
Конфигурации атак
48+
-----------------
49+
50+
Для каждого класса атаки был создан свой собственный класс-конфиг: `PoisonAttackConfig`, `EvasionAttackConfig`, `MIAttackConfig` (файл ``src/data_structures/configs.py``). Стоит отметить, что для созданных во фреймворке специализированных структуры данных была сделана новая папка ``data_structures`` в корне проекта (``src/data_structures``), чтобы все структуры данных были в одном месте. В частности в эту папку были перемещены файлы ``configs.py`` (структуры для создания объектов классов), ``explanation.py`` (структура для хранения результатов методов интерпретации), ``prefix_storage.py`` (структура преффикс-дерева, которая используется для анализа сохраненных данных, моделей, интерпретаций и всего, что сохраняется фреймворком в случае если пути сохранения назначаются по умолчанию).
51+
52+
Пустые атаки
53+
------------
54+
55+
Отдельно стоит упомянуть такие классы атак как: `EmptyPoisonAttacker`, `EmptyEvasionAttacker`, `EmptyMIAttacker`. Эти классы являются специализированными реализациями, которые говорят о том, что соответствующая атак не определена. В некотором смысле это аналог значения ``None``. Более подробно его назначение будет описано далее в этом разделе.
56+
57+
Хранение модификаций графа
58+
---------------------------
59+
60+
Чтобы хранить результаты изменения набора данных в результате атаки и защит реализован класс `GraphModificationArtifact` (файл ``src/data_structures/graph_modification_artifacts.py``), который является специализированной структурой данных.
61+
62+
Структура данных
63+
~~~~~~~~~~~~~~~~
64+
65+
Класс имеет два основных поля ``self.nodes`` и ``self.edges``, которые являются словарями.
66+
67+
Поле ``self.nodes`` содержит три ключа:
68+
69+
* ``"remove"`` содержит список вершин, которые удаляются
70+
* ``"add"`` – словарь вершин, которые добавляются (причем именно словарь, так как при добавлении вершины необходимо не только добавить номер, но и указать значения признаков для новой вершины)
71+
* ``"change_f"`` содержит информацию об изменениях признаков вершин (если меняются только признаки), эта информация также указывается с помощью словаря, так как необходимо указать не только у какой вершины и какой признак надо поменять, но и на что он меняется
72+
73+
Поле ``self.edges`` содержит два ключа:
74+
75+
* ``"remove"`` – информация об удалении ребер
76+
* ``"add"`` – информация о добавлении новых ребер
77+
78+
.. note::
79+
Ребра в torch_geometric всегда считаются направленными, поэтому если необходимо добавить или удалить ребро, то в списоки необходимо добавить информацию по двум направленным ребрам. Первый индекс указывает на то из какой вершины ребро выходит, второй на то в какую вершину ребро направлено.
80+
81+
Методы класса GraphModificationArtifact
82+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
83+
84+
Структура данных содержит множество функций, рассмотрим подробнее назначения функций и их групп.
85+
86+
**Методы заполнения:**
87+
88+
Функции ``add_node``, ``remove_node``, ``change_node_feature``, ``add_edge``, ``remove_edge`` отвечают за заполнение соответствующих полей и ключев в структуре данных. Эти методы также имеют множественные вариации, которые позволяют заполнить информацию не по одному ребру или вершине, а сразу по целой группе: ``add_nodes``, ``remove_nodes``, ``change_node_features``, ``add_edges``, ``remove_edges``. Есть еще два метода: ``set_edges`` и ``set_nodes``, которые позволяют заполнить сразу все ключи соответствующего поля.
89+
90+
**Технические методы:**
91+
92+
Структура содержит также три технические статичных метода:
93+
94+
* ``_tensor_to_list`` – конвертация torch тензоров в список
95+
* ``_list_to_tensor`` – из списка формируется torch тензор
96+
* ``to_scalar_str`` – конвертирует индексы разных форматов в строковый тип
97+
98+
**Методы работы с данными:**
99+
100+
* ``to_json`` – преобразует поля класса в json (требуется для сохранения)
101+
* ``from_json`` (статическая) – на основании json файла заполняет и структуру и возвращает заполненный объект класса `GraphModificationArtifact`
102+
* ``clear`` – полностью очищает всю структуру
103+
* ``summary`` – возвращает словарь с указанием количества изменений каждого типа
104+
105+
Интеграция с GeneralDataset
106+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
107+
108+
Для того, чтобы объекты класса `GeneralDataset` могли взаимодействовать со структурой данных `GraphModificationArtifact`, в классе `GeneralDataset` (файл ``src/base/datasets_processing.py``) был добавлен метод ``apply_modification``, который принимать объект класса `GraphModificationArtifact` и применяет описанные в структуре модификации.

0 commit comments

Comments
 (0)