วิธีการบีบอัดอื่น ๆ สำหรับการเรียนรู้แบบรวมศูนย์
ฉันสังเกตเห็นว่าวิธีการบีบอัด Gradient Quantization ถูกนำไปใช้ในกรอบ TFF แล้ว วิธีการบีบอัดที่ไม่ใช่แบบดั้งเดิมที่เราเลือกรุ่นย่อยโดยการทิ้งบางส่วนของโมเดลส่วนกลาง ฉันพบวิธีการบีบอัด "Federated Dropout" ในกระดาษ "Expanding the Reach of Federated Learning by Reducing Client Resource Requirements" (https://arxiv.org/abs/1812.07210). แนวคิดใด ๆ หากเมธอด Federated Dropout ได้รับการสนับสนุนใน Tensorflow Federated แล้ว หากไม่เป็นเช่นนั้นข้อมูลเชิงลึกจะนำไปใช้อย่างไร (แนวคิดหลักของวิธีนี้คือการลดเปอร์เซ็นต์การเปิดใช้งานและตัวกรองในโมเดลส่วนกลางเพื่อแลกเปลี่ยนและฝึกโมเดลย่อยที่เล็กกว่า)
คำตอบ
ปัจจุบันไม่มีการนำแนวคิดนี้ไปใช้ในฐานรหัส TFF
แต่นี่เป็นโครงร่างของวิธีที่คุณทำได้ฉันขอแนะนำให้เริ่มจาก examples/simple_fedavg
- ปรับเปลี่ยนระดับบนสุดbuild_federated_averaging_processเพื่อยอมรับสอง
model_fn
s - หนึ่งserver_model_fn
สำหรับโมเดลระดับโลกหนึ่งclient_model_fn
สำหรับโครงสร้างโมเดลย่อยที่เล็กกว่าซึ่งได้รับการฝึกฝนมาแล้วในไคลเอนต์ - แก้ไขbuild_server_broadcast_messageเพื่อแยกเฉพาะรุ่นย่อยที่เกี่ยวข้องจากไฟล์
server_state.model_weights
. นี่จะเป็นการแมปจากโมเดลเซิร์ฟเวอร์ไปยังโมเดลไคลเอ็นต์ - client_updateจริงอาจไม่จำเป็นต้องมีการเปลี่ยนแปลง (ผมไม่แน่ใจ 100%) ตราบใดที่เพียงมีให้จาก
client_model_fn
client_update_fn - ปรับเปลี่ยนserver_update-
weights_delta
จะเป็นการอัปเดตสำหรับรุ่นย่อยของไคลเอ็นต์ดังนั้นคุณจะต้องแมปกลับไปยังโมเดลส่วนกลางที่ใหญ่กว่า
โดยทั่วไปขั้นตอน 2. และ 4. เป็นเรื่องยุ่งยากเนื่องจากไม่เพียงขึ้นอยู่กับว่าเลเยอร์ใดอยู่ในโมเดลเท่านั้น แต่ยังรวมถึงวิธีการเชื่อมต่อด้วย ดังนั้นจึงเป็นการยากที่จะสร้างโซลูชันทั่วไปที่ใช้งานง่าย แต่ควรเขียนสิ่งเหล่านี้สำหรับโครงสร้างแบบจำลองเฉพาะที่คุณทราบล่วงหน้า