新機能・アイデアの概要
攻撃シナリオとして、全ビザンチンクライアントが一気に攻撃するのではなく、段階的に攻撃するビザンチンクライアントが増やすことが考えられる。これは、徐々にグローバルモデルを汚染できる攻撃となり、既存の一部の防御手法では防ぐことが難しい場合があるため、この段階的な攻撃を実装する。
実装例としては、以下のように、cfg.federatedlearning.warmup_rounds の 半分のラウンド時に、cfg.federatedlearning.num_byzantines の半分を攻撃させるようなイメージ。
# Check if the current index is within the number of byzantine clients specified in the configuration
if (
client_id < cfg.federatedlearning.num_byzantines // 2
and cfg.federatedlearning.warmup_rounds // 2 <= round
):
# Perform a byzantine attack on the local model by altering its weights and compute loss
weight, loss = local_model.byzantine_attack(
model=copy.deepcopy(global_model), global_round=round
)
elif (
client_id < cfg.federatedlearning.num_byzantines
and cfg.federatedlearning.warmup_rounds <= round
):
# Perform a byzantine attack on the local model by altering its weights and compute loss
weight, loss = local_model.byzantine_attack(
model=copy.deepcopy(global_model), global_round=round
)
新機能・アイデアの概要
攻撃シナリオとして、全ビザンチンクライアントが一気に攻撃するのではなく、段階的に攻撃するビザンチンクライアントが増やすことが考えられる。これは、徐々にグローバルモデルを汚染できる攻撃となり、既存の一部の防御手法では防ぐことが難しい場合があるため、この段階的な攻撃を実装する。
実装例としては、以下のように、
cfg.federatedlearning.warmup_roundsの 半分のラウンド時に、cfg.federatedlearning.num_byzantinesの半分を攻撃させるようなイメージ。