Files

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.