วิธีการบีบอัดอื่น ๆ สำหรับการเรียนรู้แบบรวมศูนย์

Aug 18 2020

ฉันสังเกตเห็นว่าวิธีการบีบอัด 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 แล้ว หากไม่เป็นเช่นนั้นข้อมูลเชิงลึกจะนำไปใช้อย่างไร (แนวคิดหลักของวิธีนี้คือการลดเปอร์เซ็นต์การเปิดใช้งานและตัวกรองในโมเดลส่วนกลางเพื่อแลกเปลี่ยนและฝึกโมเดลย่อยที่เล็กกว่า)

คำตอบ

2 JakubKonecny Aug 18 2020 at 19:34

ปัจจุบันไม่มีการนำแนวคิดนี้ไปใช้ในฐานรหัส TFF

แต่นี่เป็นโครงร่างของวิธีที่คุณทำได้ฉันขอแนะนำให้เริ่มจาก examples/simple_fedavg

  1. ปรับเปลี่ยนระดับบนสุดbuild_federated_averaging_processเพื่อยอมรับสองmodel_fns - หนึ่งserver_model_fnสำหรับโมเดลระดับโลกหนึ่งclient_model_fnสำหรับโครงสร้างโมเดลย่อยที่เล็กกว่าซึ่งได้รับการฝึกฝนมาแล้วในไคลเอนต์
  2. แก้ไขbuild_server_broadcast_messageเพื่อแยกเฉพาะรุ่นย่อยที่เกี่ยวข้องจากไฟล์server_state.model_weights. นี่จะเป็นการแมปจากโมเดลเซิร์ฟเวอร์ไปยังโมเดลไคลเอ็นต์
  3. client_updateจริงอาจไม่จำเป็นต้องมีการเปลี่ยนแปลง (ผมไม่แน่ใจ 100%) ตราบใดที่เพียงมีให้จากclient_model_fnclient_update_fn
  4. ปรับเปลี่ยนserver_update- weights_deltaจะเป็นการอัปเดตสำหรับรุ่นย่อยของไคลเอ็นต์ดังนั้นคุณจะต้องแมปกลับไปยังโมเดลส่วนกลางที่ใหญ่กว่า

โดยทั่วไปขั้นตอน 2. และ 4. เป็นเรื่องยุ่งยากเนื่องจากไม่เพียงขึ้นอยู่กับว่าเลเยอร์ใดอยู่ในโมเดลเท่านั้น แต่ยังรวมถึงวิธีการเชื่อมต่อด้วย ดังนั้นจึงเป็นการยากที่จะสร้างโซลูชันทั่วไปที่ใช้งานง่าย แต่ควรเขียนสิ่งเหล่านี้สำหรับโครงสร้างแบบจำลองเฉพาะที่คุณทราบล่วงหน้า