聯邦學習 (FL) 中常見的3種模型聚合方法的 Tensorflow 示例

數據派thu 發佈 2023-02-07T21:16:01.315820+00:00

「客戶端」是 FL 中使用的計算機和設備,它們可以彼此完全分離並且擁有各自不同的數據,這些數據可以應用同不隱私策略,並由不同的組織擁有,並且彼此不能相互訪問。使用 FL,模型可以在沒有數據的情況下從更廣泛的數據源中學習。

「客戶端」是 FL 中使用的計算機和設備,它們可以彼此完全分離並且擁有各自不同的數據,這些數據可以應用同不隱私策略,並由不同的組織擁有,並且彼此不能相互訪問。

使用 FL,模型可以在沒有數據的情況下從更廣泛的數據源中學習。FL 的廣泛使用的領域如下:

  • 衛生保健
  • 物聯網 (IoT)
  • 行動裝置

由於數據隱私對於許多應用程式(例如醫療數據)來說是一個大問題,因此 FL 主要用於保護客戶的隱私而不與任何其他客戶或方共享他們的數據。FL的客戶端與中央伺服器共享他們的模型更新以聚合更新後的全局模型。全局模型被發送回客戶端,客戶端可以使用它進行預測或對本地數據採取其他操作。

FL的關鍵概念

數據隱私:適用於敏感或隱私數據應用。

數據分布:訓練分布在大量設備或伺服器上;模型應該能夠泛化到新的數據。

模型聚合:跨不同客戶端更新的模型並且聚合生成單一的全局模型,模型的聚合方式如下:

  • 簡單平均:對所有客戶端進行平均
  • 加權平均:在平均每個模型之前,根據模型的質量,或其訓練數據的數量進行加權。
  • 聯邦平均:這在減少通信開銷方面很有用,並有助於提高考慮模型更新和使用的本地數據差異的全局模型的收斂性。
  • 混合方法:結合上面多種模型聚合技術。

通信開銷:客戶端與伺服器之間模型更新的傳輸,需要考慮通信協議和模型更新的頻率。

收斂性:FL中的一個關鍵因素是模型收斂到一個關於數據的分布式性質的良好解決方案。

實現FL的簡單步驟

  1. 定義模型體系結構
  2. 將數據劃分為客戶端數據集
  3. 在客戶端數據集上訓練模型
  4. 更新全局模型
  5. 重複上面的學習過程

tensorflow代碼示例

首先我們先建立一個簡單的服務端:

 import tensorflow as tf

 

 # Set up a server and some client devices

 server = tf.keras.server.Server()

 devices = [tf.keras.server.ClientDevice(worker_id=i) for i in range(4)]

 

 # Define a simple model and compile it

 inputs = tf.keras.Input(shape=(10,))

 outputs = tf.keras.layers.Dense(2, activation='softmax')(inputs)

 model = tf.keras.Model(inputs=inputs, outputs=outputs)

 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

 

 # Define a federated dataset and iterate over it

 federated_dataset = tf.keras.experimental.get_federated_dataset(devices, model, x=X, y=y)

 for x, y in federated_dataset:

     # Train the model on the client data

     model.fit(x, y)


然後我們實現模型聚合步驟:

1. 簡單平均

 # Average the updated model weights

 model_weights = model.get_weights()

 for device in devices:

     device_weights = device.get_weights()

     for i, (model_weight, device_weight) in enumerate(zip(model_weights, device_weights)):

         model_weights[i] = (model_weight + device_weight) / len(devices)

 

 # Update the model with the averaged weights

 model.set_weights(model_weights)


2. 加權平均

 # Average the updated model weights using weights based on the quality of the model or the amount of data used to train it

     model_weights = model.get_weights()

     total_weight = 0

     for device in devices:

         device_weights = device.get_weights()

         weight = compute_weight(device)  # Replace this with a function that returns the weight for the device

         total_weight += weight

         for i, (model_weight, device_weight) in enumerate(zip(model_weights, device_weights)):

             model_weights[i] = model_weight + (device_weight - model_weight) * (weight / total_weight)

 

 # Update the model with the averaged weights    

 model.set_weights(model_weights)

3. 聯邦平均

 # Use federated averaging to aggregate the updated models

 model_weights = model.get_weights()

 client_weights = []

 for device in devices:

     client_weights.append(device.get_weights())

 server_weights = model_weights

 for _ in range(num_rounds):

     for i, device in enumerate(devices):

         device.set_weights(server_weights)

         model.fit(x[i], y[i])

         client_weights[i] = model.get_weights()

     server_weights = server.federated_average(client_weights)

 

 # Update the model with the averaged weights

 model.set_weights(server_weights)

以上就是聯邦學習中最基本的3個模型聚合方法,希望對你有所幫助。

作者:Dr Roushanak Rahmat, PhD



關鍵字:

每個不認識的人都以為我才二十幾左右

2021-11-09T03:42:05.456009+00:00

因為我有這個『不老女神的秘密』

本人剛過40歲生日了
每個不認識的人都以為我才二十幾左右
其實上我已經是二個孩子的媽了
大的已經快12歲了XD

因為我有這個『不老女神的秘密』
由內而外的吃出少女肌❤️

https://www.cashin.tw/product/0000000000357175717

 

【蜂后逆齡素】女王蜂王乳X 蜂子粉
補足女性身體所需的激素
✓調理生理 延緩更年老化
✓少女Q嫩光澤 美白肌膚
✓平衡分泌系統 提升睡眠品質
✓激發女人香 提升自信

商品資訊

 

美肌蜂后_液態逆齡素

 

熟齡警訊  生理不適、膚況差、發胖 

當美麗關鍵「雌激素」快速衰減

卵巢老一歲,外表像是老十歲😱

 

👇 臨床見證!90%女性重拾年輕體態!

 濃縮蜂王漿500的雌激素 

調理生理機能|綜合女性營養 延緩更年老化

少女Q嫩光澤|活化美白肌膚 恢復少女氣色

維持青春曲線|平衡分泌系統 睡眠品質提升

激發費洛蒙香|內而外女人味 重燃親密激情

 

https://www.cashin.tw/product/000000000035717