---
# System prepended metadata

title: 'Meeting Report (2023/05/05) - Differentially Private Federated Learning: A Client Level Perspective (2023/05/15 更新 Q7 Q8)'

---

# Meeting Report (2023/05/05) - Differentially Private Federated Learning: A Client Level Perspective (2023/05/15 更新 Q7 Q8)

## 問題
### Q1 : 為什麼聯邦式學習需要防止差分攻擊
#### A : 
- 由於聯邦式學習只會用本地端的資料進行訓練，並將訓練好的梯度及模型參數傳給伺服端，不會有對資料做傳輸的動作，因此有隱私保護的效果
- 但根據幾篇論文 [1] [2] 表示從梯度上也能得出客戶資料的某些特性，所以一定程度上還是會洩漏客戶隱私
- 常見的預防方法有對梯度進行加密或是加上噪音(加噪音雖然會使準確度下降，但卻有防止過擬合的效果)

### Q2 : 為什麼 K=10000 時的表現會比 K=100 時來的好
#### A : 
- 根據演算法能得知整個訓練的停止條件為 δ 是否超出設定的可容忍範圍，而不是根據是否已訓練到了某個準確度才停止
- 至於為什麼 K=10000 時比較不容易超出可容忍範圍，這或許與資料集的數量有關
    - 當 K=100 時，從 60000 筆的資料集中取 600 出來做為單個客戶所持有的資料，能保證每個客戶拿到的資料都不同，但也因此讓客戶間有了一些識別度，間接導致了隱私洩漏，所以往往在還沒收斂的情況下就結束了訓練
    - 但當 K=10000 時，要讓每個客戶都拿到 600 筆資料就一定會有重複的情況，這在提升模型的準確度上或許沒有什麼幫助，但這樣能降低客戶間的辨別度，降低了隱私洩漏的機率，所以就算訓練到了 400 多個回合，準確度已達到了 97%，也還能在容忍的範圍內

### Q3 : 是不是只要 δ 超出可容忍的範圍就會被攻擊
#### A : 
不一定，應該要說這篇論文只保證在 δ 不超出可容忍範圍下能防止隱私洩漏，降低了被攻擊的風險

### Q4 : 哪裡能看出動態適應差分隱私
#### A : 
在更新權重時，會根據當時選取出的客戶集合裡的中位數作為敏感度 $S$ ，藉此來達到動調整的效果 

### Q5 : Communication Costs (CC) 的定義
#### A : 
- 論文中對 Communication Costs 的定義如下
![](https://hackmd.io/_uploads/S1Yd_mU4n.png)
- 不過一般的情況下還會需要考慮到溝通時傳輸的模型權重大小

### Q6 : 聯邦式學習在自然語言模型上的訓練
#### A : 
FedNLP [3] 是一個結合了自然語言處理以及聯邦式學習的測試框架，可處理的工作如文本分類、序列標記等等，訓練時可以以下幾種資料集進行訓練 :
1. 20news : 英文新聞資料集，有 20 種類別共 20000 篇新聞報導
2. SQuAD 1.1 : 史丹佛大學蒐集的問答資料集，包含了 100,000 多題的問答題以及 500 多篇文章

### Q7 : 每回合參與訓練的客戶數 m 是否固定
#### A : 
```python=
param m: If specified, a privacyAgent is not used, instead the parameter is kept constant
```
根據程式碼可知當不使用差分隱私(privacyAgent)，也就是用原本的 FedAvg 時，需要特別給定 m 的值，而且 m 會被固定住，但如果是用差分隱私的話就不用給定 m，m 也不會是定值，每回合都會改變

### Q8 : delta 如何求得
#### A : 
從 `accountant.py` 可以發現 delta 是從 `_compute_delta` 這個函式求得的，程式碼如下

```python=
def _compute_delta(self, log_moments, eps):
    """Compute delta for given log_moments and eps.
    Args:
      log_moments: the log moments of privacy loss, in the form of pairs
        of (moment_order, log_moment)
      eps: the target epsilon.
    Returns:
      delta
    """
    min_delta = 1.0
    for moment_order, log_moment in log_moments:
      if math.isinf(log_moment) or math.isnan(log_moment):
        sys.stderr.write("The %d-th order is inf or Nan\n" % moment_order)
        continue
      if log_moment < moment_order * eps:
        min_delta = min(min_delta,
                        math.exp(log_moment - moment_order * eps))
    return min_delta
```

因為 delta 表示的是差分隱私能接受的最高機率，所以 `min_delta = min(min_delta,
                        math.exp(log_moment - moment_order * eps))` 的結果只會在 0~1 之間，因此 delta 會是 1 和 $e^{logmoment-({momentorder}*{eps})}$ 之間的最小值

## 參考
論文GitHub : https://github.com/SAP-samples/machine-learning-diff-private-federated-learning

[1] Melis etal. Exploiting Unintended Feature Leakage in Collaborative Learning. In lEEE Symposium on Security & Privacy,2019

[2] Hitaj et al. Deep models under theGAN: information leakage from collaborative deep learning

[3] https://github.com/FedML-AI/FedML/tree/master/python/app/fednlp