832 lines
17 KiB
Markdown
Executable File
832 lines
17 KiB
Markdown
Executable File
# PROTEAN Prototype Aggregation Research
|
|
|
|
## Project Purpose
|
|
|
|
This repository contains a master's research implementation based on:
|
|
|
|
`planningawal/PROTEAN_Revisi_Lurus.md`
|
|
|
|
Research focus:
|
|
|
|
**Server-side prototype aggregation in PROTEAN using class-specific sample-support weighting for rare attack detection under non-IID federated data.**
|
|
|
|
The proposed aggregation is:
|
|
|
|
$$
|
|
\bar{C}_j(\beta)
|
|
=
|
|
\frac{
|
|
\sum_{i \in S_j} N_{ij}^{\beta} C_{ij}
|
|
}{
|
|
\sum_{i \in S_j} N_{ij}^{\beta}
|
|
}
|
|
$$
|
|
|
|
with planned candidate values:
|
|
|
|
```text
|
|
beta ∈ {0.00, 0.25, 0.50, 0.75, 1.00}
|
|
```
|
|
|
|
where:
|
|
|
|
* `C_ij` is client `i`'s local prototype for class `j`
|
|
* `N_ij` is the number of local training samples of class `j`
|
|
* `S_j` is the set of clients contributing a valid prototype for class `j`
|
|
|
|
This repository is a research codebase. Scientific traceability and experimental isolation are more important than implementation convenience.
|
|
|
|
---
|
|
|
|
# 1. AUTHORITATIVE RESEARCH SOURCE
|
|
|
|
The primary research specification is:
|
|
|
|
```text
|
|
planningawal/PROTEAN_Revisi_Lurus.md
|
|
```
|
|
|
|
Read this file before making methodological decisions.
|
|
|
|
Do not silently reinterpret or broaden the research objective.
|
|
|
|
If implementation evidence conflicts with an assumption in the planning document:
|
|
|
|
1. preserve the source document unchanged
|
|
2. document the discrepancy
|
|
3. distinguish paper behavior, code behavior, inference, and project decision
|
|
4. do not silently choose one interpretation
|
|
|
|
---
|
|
|
|
# 2. `planningawal/` IS IMMUTABLE
|
|
|
|
The entire directory:
|
|
|
|
```text
|
|
planningawal/
|
|
```
|
|
|
|
is read-only research source material.
|
|
|
|
Agents MAY:
|
|
|
|
* read files
|
|
* cite them internally
|
|
* use them to guide implementation
|
|
|
|
Agents MUST NOT:
|
|
|
|
* edit files inside `planningawal/`
|
|
* create files inside `planningawal/`
|
|
* rename files inside `planningawal/`
|
|
* move files into or out of it
|
|
* delete files
|
|
* autoformat its contents
|
|
* rewrite Markdown formatting
|
|
* place reports, logs, code, or handoffs there
|
|
|
|
All generated project material must live elsewhere.
|
|
|
|
Before major checkpoints, verify that `planningawal/` remains unchanged.
|
|
|
|
---
|
|
|
|
# 3. RAW DATASETS ARE EXTERNAL AND IMMUTABLE
|
|
|
|
Raw datasets exist outside the repository:
|
|
|
|
```text
|
|
~/datasets/5G-NIDD/5G-NIDD.csv
|
|
~/datasets/X-IIoTID/X-IIoTID-dataset.csv
|
|
```
|
|
|
|
These are source data.
|
|
|
|
Do NOT:
|
|
|
|
* modify them
|
|
* overwrite them
|
|
* rename them
|
|
* move them
|
|
* copy full raw datasets into the repository
|
|
* commit them to Git
|
|
|
|
Dataset locations must be supplied through configuration, environment variables, or CLI arguments rather than duplicated throughout source code.
|
|
|
|
Generated derivatives may be stored inside the repository under appropriate ignored artifact directories.
|
|
|
|
Raw data and generated data must always remain distinguishable.
|
|
|
|
---
|
|
|
|
# 4. PROJECT STRUCTURE
|
|
|
|
Prefer the following separation of concerns:
|
|
|
|
```text
|
|
perdalam-protean/
|
|
├── AGENTS.md
|
|
├── README.md
|
|
├── planningawal/ # immutable research source
|
|
├── docs/
|
|
│ ├── research/
|
|
│ ├── baseline/
|
|
│ └── handoff/
|
|
├── configs/
|
|
│ ├── datasets/
|
|
│ ├── experiments/
|
|
│ └── models/
|
|
├── src/
|
|
│ └── protean_research/
|
|
│ ├── data/
|
|
│ ├── federated/
|
|
│ ├── aggregation/
|
|
│ ├── models/
|
|
│ ├── evaluation/
|
|
│ └── utils/
|
|
├── scripts/
|
|
├── tests/
|
|
├── artifacts/
|
|
│ ├── partitions/
|
|
│ ├── processed/
|
|
│ ├── checkpoints/
|
|
│ └── analysis/
|
|
└── results/
|
|
```
|
|
|
|
This is a design guideline, not an instruction to create empty directories without purpose.
|
|
|
|
Do not introduce new top-level structures without a clear reason.
|
|
|
|
---
|
|
|
|
# 5. SESSION CONTINUITY
|
|
|
|
The canonical session continuation file is:
|
|
|
|
```text
|
|
docs/handoff/SESSION_HANDOFF.md
|
|
```
|
|
|
|
At the beginning of a new substantial session:
|
|
|
|
1. read `AGENTS.md`
|
|
2. read `docs/handoff/SESSION_HANDOFF.md` if it exists
|
|
3. read relevant project documentation
|
|
4. consult `planningawal/PROTEAN_Revisi_Lurus.md` when research semantics matter
|
|
5. inspect actual repository state before making assumptions
|
|
|
|
Do not reconstruct state from chat history when repository documentation is available.
|
|
|
|
The handoff must reflect actual repository state.
|
|
|
|
Do not copy stale plans forward as if they were completed work.
|
|
|
|
---
|
|
|
|
# 6. HANDOFF REQUIREMENT
|
|
|
|
At the end of any substantial development/research session, update:
|
|
|
|
```text
|
|
docs/handoff/SESSION_HANDOFF.md
|
|
```
|
|
|
|
The handoff should contain:
|
|
|
|
* current objective
|
|
* completed work
|
|
* important findings
|
|
* files created
|
|
* files modified
|
|
* commands/tests performed
|
|
* current architecture
|
|
* methodological decisions
|
|
* unresolved questions
|
|
* known failures or incomplete work
|
|
* Git state where relevant
|
|
* exact next task
|
|
* a concise ready-to-paste next-session prompt
|
|
|
|
Do not write huge terminal-only reports that future sessions cannot recover.
|
|
|
|
Long analysis should be written into project Markdown files.
|
|
|
|
---
|
|
|
|
# 7. BASELINE FIRST
|
|
|
|
Do not implement the proposed beta weighting as a replacement for PROTEAN before baseline semantics are understood.
|
|
|
|
The project must preserve a faithful original baseline.
|
|
|
|
Important unresolved or verifiable baseline properties include:
|
|
|
|
* local prototype construction
|
|
* missing-class handling
|
|
* server aggregation participant set
|
|
* aggregation denominator
|
|
* class support/count availability
|
|
* global prototype redistribution
|
|
* prototype alignment behavior
|
|
* inference behavior
|
|
|
|
Never assume:
|
|
|
|
```text
|
|
beta = 0 == original PROTEAN
|
|
```
|
|
|
|
This equivalence is only valid if aggregation participants and missing-class handling are also identical.
|
|
|
|
If needed, distinguish:
|
|
|
|
```text
|
|
original_protean
|
|
equal_available
|
|
support_weighted
|
|
```
|
|
|
|
`equal_available` should exist only if methodological evidence shows it is required as a control.
|
|
|
|
---
|
|
|
|
# 8. RESEARCH SCOPE
|
|
|
|
The intended modification is narrowly scoped to:
|
|
|
|
```text
|
|
server-side prototype aggregation
|
|
```
|
|
|
|
Do NOT independently add research dimensions such as:
|
|
|
|
* client rejection
|
|
* Byzantine or poisoning defense
|
|
* adaptive loss functions
|
|
* prototype clustering
|
|
* alternative distance metrics
|
|
* cosine similarity experiments
|
|
* dynamic architectures
|
|
* personalized FL
|
|
* attention modules
|
|
* client scoring
|
|
* prototype-quality scoring
|
|
* additional aggregation algorithms
|
|
|
|
unless required to faithfully reproduce the verified baseline.
|
|
|
|
A technically interesting addition is not automatically relevant to this thesis.
|
|
|
|
---
|
|
|
|
# 9. SCIENTIFIC INTERPRETATION
|
|
|
|
`N_ij` represents:
|
|
|
|
```text
|
|
class-specific sample support
|
|
```
|
|
|
|
It does NOT represent:
|
|
|
|
```text
|
|
ground-truth prototype quality
|
|
```
|
|
|
|
Do not state or encode assumptions that a larger `N_ij` automatically means a better prototype.
|
|
|
|
Low-support clients may contain useful variation unavailable at higher-support clients.
|
|
|
|
Use neutral terminology such as:
|
|
|
|
```text
|
|
support_weighted
|
|
sample_support_weighting
|
|
beta_weighted
|
|
```
|
|
|
|
Avoid names implying proven superiority, such as:
|
|
|
|
```text
|
|
improved_aggregation
|
|
optimal_aggregation
|
|
better_prototype
|
|
```
|
|
|
|
until supported by evidence.
|
|
|
|
---
|
|
|
|
# 10. BETA SEMANTICS
|
|
|
|
The proposed weight is:
|
|
|
|
```text
|
|
w_ij = N_ij ** beta
|
|
```
|
|
|
|
with:
|
|
|
|
```text
|
|
0 <= beta <= 1
|
|
```
|
|
|
|
Expected properties:
|
|
|
|
## beta = 0
|
|
|
|
For an identical contributor set `S_j`:
|
|
|
|
```text
|
|
N_ij ** 0 = 1
|
|
```
|
|
|
|
therefore aggregation becomes equal weighting.
|
|
|
|
This must not automatically be labeled the original PROTEAN baseline.
|
|
|
|
## beta = 1
|
|
|
|
Weight is directly proportional to class-specific support.
|
|
|
|
Because each local prototype is a local class embedding mean, this should correspond to the combined mean of included embeddings when all assumptions match.
|
|
|
|
## One contributor
|
|
|
|
If `|S_j| = 1`, aggregation is unchanged for every beta.
|
|
|
|
## Equal support
|
|
|
|
If all `N_ij` values are equal for fixed local prototypes, changing beta must not change the aggregate.
|
|
|
|
These invariants should eventually have tests.
|
|
|
|
---
|
|
|
|
# 11. MISSING CLASS SEMANTICS
|
|
|
|
For the proposed formulation:
|
|
|
|
```text
|
|
S_j = clients with N_ij > 0 and a valid local prototype C_ij
|
|
```
|
|
|
|
Do not fabricate a prototype for a missing class.
|
|
|
|
Do not use a zero vector unless this is specifically required to reproduce the original baseline in `original_protean` mode.
|
|
|
|
Missing-class handling must remain explicit in code.
|
|
|
|
Do not hide it inside generic tensor padding.
|
|
|
|
---
|
|
|
|
# 12. RARE CLASS DEFINITION
|
|
|
|
For each client, rare classes are defined from TRAINING DATA.
|
|
|
|
Among attack classes satisfying:
|
|
|
|
```text
|
|
N_ij > 0
|
|
```
|
|
|
|
select the two attack classes with the smallest training support.
|
|
|
|
If only one attack class is present:
|
|
|
|
* evaluate that one class
|
|
|
|
If no attack class is present:
|
|
|
|
* exclude that client from rare-class aggregation
|
|
|
|
Tie behavior must eventually be deterministic and documented.
|
|
|
|
---
|
|
|
|
# 13. UNSEEN CLASS DEFINITION
|
|
|
|
Attack classes satisfying:
|
|
|
|
```text
|
|
N_ij = 0
|
|
```
|
|
|
|
during client training are unseen classes.
|
|
|
|
Rare classes and unseen classes are different evaluation categories.
|
|
|
|
Never merge them into one metric.
|
|
|
|
---
|
|
|
|
# 14. DATA PARTITIONING
|
|
|
|
Target Dirichlet non-IID settings are:
|
|
|
|
```text
|
|
alpha = 0.75
|
|
alpha = 0.50
|
|
alpha = 0.25
|
|
```
|
|
|
|
Multiple deterministic seeds are required.
|
|
|
|
For a given:
|
|
|
|
```text
|
|
(dataset, alpha, seed)
|
|
```
|
|
|
|
all compared aggregation configurations must reuse exactly the same partition.
|
|
|
|
Persist partition manifests.
|
|
|
|
Do not regenerate a different Dirichlet split for every beta candidate.
|
|
|
|
Paired comparison requires identical:
|
|
|
|
* client partition
|
|
* train split
|
|
* validation split
|
|
* test split
|
|
* class mapping
|
|
* model initialization policy
|
|
* training hyperparameters
|
|
|
|
unless a deviation is explicitly justified and documented.
|
|
|
|
---
|
|
|
|
# 15. VALIDATION AND TEST SEPARATION
|
|
|
|
Beta selection must use validation data only.
|
|
|
|
Primary planned selection metric:
|
|
|
|
```text
|
|
rare-class macro-F1
|
|
```
|
|
|
|
The test set must not influence beta selection.
|
|
|
|
Maintain a clear separation between:
|
|
|
|
```text
|
|
candidate evaluation
|
|
beta selection
|
|
final test evaluation
|
|
```
|
|
|
|
Do not use test results to tune:
|
|
|
|
* beta
|
|
* training epochs
|
|
* thresholds
|
|
* seed choice
|
|
* class selection
|
|
* model configuration
|
|
|
|
Do not call the selected beta globally optimal.
|
|
|
|
Correct wording is:
|
|
|
|
```text
|
|
best among the tested beta candidates under the defined validation procedure
|
|
```
|
|
|
|
---
|
|
|
|
# 16. REQUIRED EVALUATION GRANULARITY
|
|
|
|
Do not report only global accuracy.
|
|
|
|
Preserve enough information for analysis at:
|
|
|
|
* dataset level
|
|
* alpha level
|
|
* seed level
|
|
* client level
|
|
* class level
|
|
|
|
Important outputs include:
|
|
|
|
* rare-class macro-F1
|
|
* rare-class recall
|
|
* overall macro-F1
|
|
* per-client metrics
|
|
* per-class precision/recall/F1 where relevant
|
|
* evaluation support
|
|
* unseen-class results
|
|
* `N_ij`
|
|
* number of clients containing a class
|
|
* number of contributing prototypes
|
|
|
|
Actual realized class imbalance must be recorded.
|
|
|
|
Dirichlet alpha alone is not sufficient to characterize a partition.
|
|
|
|
---
|
|
|
|
# 17. DIRECT PROTOTYPE ANALYSIS
|
|
|
|
The research distinguishes:
|
|
|
|
```text
|
|
direct aggregation effect
|
|
```
|
|
|
|
from:
|
|
|
|
```text
|
|
end-to-end training effect
|
|
```
|
|
|
|
Where instrumentation is implemented, preserve fixed:
|
|
|
|
```text
|
|
C_ij
|
|
N_ij
|
|
```
|
|
|
|
from the same communication round and recompute candidate global prototypes without retraining.
|
|
|
|
Useful measures include:
|
|
|
|
```text
|
|
||Cbar_j(beta) - Cbar_j(0)||
|
|
```
|
|
|
|
as well as:
|
|
|
|
* normalized client weights
|
|
* prototype displacement
|
|
* distance to local prototypes
|
|
* pairwise differences between beta settings
|
|
|
|
Do not interpret direct displacement alone as improved detection.
|
|
|
|
---
|
|
|
|
# 18. CODE QUALITY
|
|
|
|
Prefer:
|
|
|
|
* small cohesive modules
|
|
* typed interfaces where practical
|
|
* deterministic behavior
|
|
* explicit configuration
|
|
* clear validation errors
|
|
* minimal global state
|
|
* no duplicated experiment logic
|
|
* reusable dataset abstractions
|
|
* reproducible random-state handling
|
|
|
|
Avoid:
|
|
|
|
* magic constants
|
|
* hardcoded absolute user paths inside research logic
|
|
* giant scripts containing preprocessing, training, evaluation, and plotting together
|
|
* silent fallback behavior
|
|
* hidden data mutation
|
|
* unnecessary dependencies
|
|
* unrelated refactoring during methodological changes
|
|
|
|
Every important research parameter should be visible in configuration or experiment metadata.
|
|
|
|
---
|
|
|
|
# 19. TESTING EXPECTATIONS
|
|
|
|
Before large experiments, establish tests for critical research invariants.
|
|
|
|
Expected tests eventually include:
|
|
|
|
* beta=0 arithmetic-mean property
|
|
* beta=1 support-weighted property
|
|
* single-contributor invariance
|
|
* equal-support invariance
|
|
* missing-class exclusion
|
|
* normalized weight sum
|
|
* finite numerical output
|
|
* deterministic partitions
|
|
* partition save/reload identity
|
|
* baseline behavior preservation
|
|
* validation/test separation
|
|
|
|
Prefer focused tests before expensive training runs.
|
|
|
|
---
|
|
|
|
# 20. COMPUTE DISCIPLINE
|
|
|
|
Do not launch a full experimental sweep merely because the runner exists.
|
|
|
|
Before expensive experiments:
|
|
|
|
1. unit tests must pass
|
|
2. data pipeline must be validated
|
|
3. one small smoke run must succeed
|
|
4. baseline behavior must be checked
|
|
5. output artifacts must be inspected
|
|
6. experiment metadata must be reproducible
|
|
|
|
Do not invent runtime estimates.
|
|
|
|
Measure first.
|
|
|
|
---
|
|
|
|
# 21. ARTIFACTS AND RESULTS
|
|
|
|
Generated outputs should be structured and machine-readable.
|
|
|
|
Prefer:
|
|
|
|
* CSV
|
|
* JSON
|
|
* JSONL
|
|
* Parquet where appropriate
|
|
|
|
over terminal-only text.
|
|
|
|
Do not overwrite previous experiment results silently.
|
|
|
|
Each experiment should be identifiable from metadata such as:
|
|
|
|
```text
|
|
dataset
|
|
alpha
|
|
seed
|
|
aggregation_mode
|
|
beta
|
|
training configuration
|
|
code revision
|
|
```
|
|
|
|
Checkpoint/model files should not be committed unless explicitly required.
|
|
|
|
---
|
|
|
|
# 22. DOCUMENTATION
|
|
|
|
Research decisions that affect interpretation must be documented.
|
|
|
|
Expected documentation areas:
|
|
|
|
```text
|
|
docs/research/
|
|
docs/baseline/
|
|
docs/handoff/
|
|
```
|
|
|
|
Prefer updating an existing authoritative document over creating multiple overlapping reports.
|
|
|
|
Do not create `final_v2_revised_latest.md` style document proliferation.
|
|
|
|
---
|
|
|
|
# 23. GIT DISCIPLINE
|
|
|
|
The intended remote repository is:
|
|
|
|
```text
|
|
git@github.com:willtanoe/prototype-agregation.git
|
|
```
|
|
|
|
Before checkpointing:
|
|
|
|
* inspect `git status`
|
|
* inspect staged diff
|
|
* verify no secrets
|
|
* verify no raw datasets
|
|
* verify no large accidental artifacts
|
|
* verify `planningawal/` remains unchanged
|
|
|
|
Do not force push.
|
|
|
|
Do not rewrite shared history unless explicitly instructed.
|
|
|
|
Use checkpoint commits at meaningful research/development boundaries.
|
|
|
|
---
|
|
|
|
# 24. SECURITY AND SECRETS
|
|
|
|
Never commit:
|
|
|
|
* API keys
|
|
* access tokens
|
|
* passwords
|
|
* SSH private keys
|
|
* `.env` secrets
|
|
* service credentials
|
|
|
|
Do not print discovered secrets into reports.
|
|
|
|
Use environment variables or ignored local configuration for secret material.
|
|
|
|
---
|
|
|
|
# 25. SOURCE OF TRUTH HIERARCHY
|
|
|
|
When deciding what to trust, use approximately this order:
|
|
|
|
1. immutable research specification for intended thesis design
|
|
2. verified original PROTEAN paper/code for baseline behavior
|
|
3. actual repository implementation
|
|
4. documented project decisions
|
|
5. inference
|
|
|
|
Do not present inference as source-confirmed fact.
|
|
|
|
When sources conflict, document the conflict rather than hiding it.
|
|
|
|
---
|
|
|
|
# 26. AGENT BEHAVIOR
|
|
|
|
Before modifying code:
|
|
|
|
* inspect relevant files
|
|
* understand current architecture
|
|
* identify the smallest required change
|
|
* preserve established behavior outside the target scope
|
|
|
|
When uncertain:
|
|
|
|
* investigate evidence first
|
|
* write down unresolved ambiguity if it cannot be resolved
|
|
* avoid silent assumptions
|
|
|
|
Do not optimize for producing the largest amount of code.
|
|
|
|
Optimize for correctness, reproducibility, and traceability.
|
|
|
|
---
|
|
|
|
# 27. USE OF SUBAGENTS
|
|
|
|
Subagents may be used for parallel READ-ONLY investigation where tasks are independent.
|
|
|
|
Good subagent tasks:
|
|
|
|
* inspect original PROTEAN source
|
|
* inspect dataset schema
|
|
* review experimental methodology
|
|
* review code/tests
|
|
* inspect reproducibility issues
|
|
|
|
Avoid multiple agents concurrently editing the same files.
|
|
|
|
A single primary agent should own integration and final edits.
|
|
|
|
Subagent findings are advisory until verified by the primary agent.
|
|
|
|
Do not merge contradictory findings without resolving their evidence.
|
|
|
|
---
|
|
|
|
# 28. BEFORE DECLARING A PHASE COMPLETE
|
|
|
|
Verify the phase against its actual acceptance criteria.
|
|
|
|
Do not declare completion because code merely runs.
|
|
|
|
For implementation phases, check:
|
|
|
|
* relevant tests
|
|
* expected artifacts
|
|
* configuration reproducibility
|
|
* no unintended baseline changes
|
|
* no data leakage
|
|
* no source-folder modifications
|
|
|
|
For research/planning phases, check:
|
|
|
|
* evidence is documented
|
|
* unknowns remain marked as unknown
|
|
* the handoff is current
|
|
|
|
---
|
|
|
|
# 29. TERMINAL OUTPUT
|
|
|
|
Keep terminal summaries concise.
|
|
|
|
Long reports belong in files.
|
|
|
|
At the end of substantial work, terminal output should usually summarize:
|
|
|
|
* what changed
|
|
* what was verified
|
|
* tests/checks performed
|
|
* known blockers
|
|
* handoff location
|
|
* exact next task
|
|
|
|
Do not rely on terminal scrollback as project documentation.
|