การจัดกลุ่มน้ำหนัก

บำรุงรักษาโดย Arm ML Tooling

เอกสารนี้ให้ภาพรวมเกี่ยวกับการจัดกลุ่มน้ำหนักเพื่อช่วยคุณพิจารณาว่าจะเหมาะกับกรณีการใช้งานของคุณอย่างไร

ภาพรวม

การจัดกลุ่มหรือการแบ่งปันน้ำหนักจะช่วยลดจำนวนค่าน้ำหนักที่ไม่ซ้ำกันในแบบจำลอง ซึ่งนำไปสู่ประโยชน์ในการใช้งาน ขั้นแรกจะจัดกลุ่มน้ำหนักของแต่ละเลเยอร์ออกเป็น N คลัสเตอร์ จากนั้นจึงแชร์ค่าเซนทรอยด์ของคลัสเตอร์สำหรับน้ำหนักทั้งหมดที่เป็นของคลัสเตอร์

เทคนิคนี้นำมาซึ่งการปรับปรุงผ่านการบีบอัดโมเดล การสนับสนุนเฟรมเวิร์กในอนาคตสามารถปลดล็อกการปรับปรุงพื้นที่หน่วยความจำที่สามารถสร้างความแตกต่างที่สำคัญสำหรับการปรับใช้โมเดลการเรียนรู้เชิงลึกบนระบบฝังตัวที่มีทรัพยากรที่จำกัด

เราได้ทดลองการจัดกลุ่มในงานการมองเห็นและการพูด เราพบว่าการบีบอัดโมเดลมีการปรับปรุงขึ้นถึง 5 เท่า โดยสูญเสียความแม่นยำน้อยที่สุด ดังที่แสดงโดย ผลลัพธ์ ที่นำเสนอด้านล่าง

โปรดทราบว่าการจัดกลุ่มจะให้ประโยชน์ที่ลดลงสำหรับชั้น Convolution และชั้นหนาแน่นที่อยู่หน้าชั้นการทำให้เป็นมาตรฐานแบบแบตช์ รวมถึงการใช้ร่วมกับการหาปริมาณหลังการฝึกต่อแกน

เมทริกซ์ความเข้ากันได้ของ API

ผู้ใช้สามารถใช้การทำคลัสเตอร์กับ API ต่อไปนี้:

  • การสร้างโมเดล: keras ที่มีเฉพาะโมเดล Sequential และ Functional เท่านั้น
  • เวอร์ชัน TensorFlow: TF 1.x สำหรับเวอร์ชัน 1.14+ และ 2.x
    • ไม่รองรับ tf.compat.v1 พร้อมแพ็คเกจ TF 2.X และ tf.compat.v2 พร้อมแพ็คเกจ TF 1.X
  • โหมดการดำเนินการ TensorFlow: ทั้งกราฟและความกระตือรือร้น

ผลลัพธ์

การจำแนกประเภทภาพ

แบบอย่าง ต้นฉบับ เป็นกลุ่มก้อน
ความแม่นยำอันดับ 1 (%) ขนาดของไฟล์ .tflite ที่ถูกบีบอัด (MB) การกำหนดค่า #ของคลัสเตอร์ ความแม่นยำอันดับ 1 (%) ขนาดของไฟล์ .tflite ที่ถูกบีบอัด (MB)
โมบายเน็ตV1 70.976 14.97
แบบเลือก (3 เลเยอร์ Conv2D สุดท้าย) 16, 16, 16 70.294 7.69
แบบเลือก (3 เลเยอร์ Conv2D สุดท้าย) 32, 32, 32 70.69 8.22
เต็ม (เลเยอร์ Conv2D ทั้งหมด) 32 69.4 4.43
โมบายเน็ทV2 71.778 12.38
แบบเลือก (3 เลเยอร์ Conv2D สุดท้าย) 16, 16, 16 70.742 6.68
แบบเลือก (3 เลเยอร์ Conv2D สุดท้าย) 32, 32, 32 70.926 7.03
เต็ม (เลเยอร์ Conv2D ทั้งหมด) 32 69.744 4.05

โมเดลเหล่านี้ได้รับการฝึกอบรมและทดสอบบน ImageNet

การจำแนกคำหลัก

แบบอย่าง ต้นฉบับ เป็นกลุ่มก้อน
ความแม่นยำอันดับ 1 (%) ขนาดของไฟล์ .tflite ที่ถูกบีบอัด (MB) การกำหนดค่า #ของคลัสเตอร์ ความแม่นยำอันดับ 1 (%) ขนาดของไฟล์ .tflite ที่ถูกบีบอัด (MB)
DS-CNN-L 95.233 1.46
เต็ม (เลเยอร์ Conv2D ทั้งหมด) 32 95.09 0.39
เต็ม (เลเยอร์ Conv2D ทั้งหมด) 8 94.272 0.27

โมเดลดังกล่าวได้รับการฝึกอบรมและทดสอบบน SpeechCommands v0.02

  1. ทำให้โมเดล Keras เป็นอนุกรมเป็นไฟล์ .h5
  2. แปลงไฟล์ .h5 เป็น .tflite โดยใช้ TFLiteConverter.from_keras_model_file()
  3. บีบอัดไฟล์ .tflite ให้เป็นไฟล์ zip

ตัวอย่าง

นอกจาก การจัดกลุ่มน้ำหนักในตัวอย่าง Keras แล้ว โปรดดูตัวอย่างต่อไปนี้:

  • จัดกลุ่มน้ำหนักของโมเดล CNN ที่ได้รับการฝึกในชุดข้อมูลการจำแนกประเภทตัวเลขที่เขียนด้วยลายมือของ MNIST: รหัส

การจัดกลุ่มน้ำหนักจะขึ้นอยู่กับ Deep Compression: Compressing Deep Neural Networks With Pruning, Trained Quantization และ Huffman Coding paper ดูบทที่ 3 เรื่อง การวัดปริมาณและการแบ่งปันน้ำหนักที่ได้รับการฝึกอบรม