สมมติว่าคุณกำลังพัฒนาแอปพลิเคชันแนะนำอาหาร ผู้ใช้ป้อนอาหารโปรด และแอปแนะนำอาหารที่คล้ายกัน ที่พวกเขาน่าจะชอบ คุณต้องการพัฒนาโมเดลแมชชีนเลิร์นนิง (ML) ซึ่งคาดการณ์ความคล้ายคลึงกันของอาหาร เพื่อให้แอปทำให้ ("เนื่องจากคุณชอบแพนเค้ก เราจึงแนะนำเครป")
หากต้องการฝึกโมเดล คุณต้องดูแลจัดการชุดข้อมูลยอดนิยม 5,000 รายการ รายการอาหาร รวมถึง borscht ฮอตดอก สลัด พิซซ่า และ ชาวาร์มา
คุณสร้างฟีเจอร์ meal
ที่มีองค์ประกอบ
เข้ารหัสแบบฮอตเดียว
การแทนรายการอาหารแต่ละรายการในชุดข้อมูล
ปัญหาการนำเสนอข้อมูลที่กระจัดกระจาย
เมื่อตรวจสอบการเข้ารหัสแบบฮอตเดียวเหล่านี้ คุณพบปัญหาหลักๆ 2 ข้อสำหรับ การนำเสนอข้อมูลได้อย่างอิสระ
- จำนวนน้ำหนัก เวกเตอร์อินพุตขนาดใหญ่หมายถึง
น้ำหนัก
สำหรับโครงข่ายระบบประสาทเทียม
เมื่อมีรายการ M ในการเข้ารหัสแบบ One-hot และ N
ในเลเยอร์แรกของเครือข่ายหลังจากอินพุต โมเดลจะต้องฝึก
น้ำหนัก MxN ของเลเยอร์นั้น การมีน้ำหนักจำนวนมากก่อให้เกิดปัญหาเพิ่มเติม ดังนี้
- จำนวนจุดข้อมูล ยิ่งโมเดลของคุณมีน้ำหนักมากเท่าไหร่ คุณก็ยิ่งมีข้อมูลมาก จำเป็นต้องฝึกอบรมอย่างมีประสิทธิภาพ
- ปริมาณการคำนวณ ยิ่งน้ำหนักมาก ก็ยิ่งต้องการการคำนวณมาก เพื่อฝึกและใช้โมเดล การที่เกินความสามารถของ ฮาร์ดแวร์
- ปริมาณหน่วยความจำ ยิ่งโมเดลของคุณมีน้ำหนักมากเท่าไหร่ หน่วยความจำก็จะยิ่งมากขึ้นเท่านั้น ใน Accelerator ที่ฝึกและให้บริการ ปรับเพิ่มระดับ ที่มีประสิทธิภาพนั้นเป็นเรื่องที่ยากมาก
- ปัญหาการสนับสนุน แมชชีนเลิร์นนิง (ODML) ในอุปกรณ์ หากต้องการเรียกใช้โมเดล ML ในอุปกรณ์เฉพาะที่ (ตรงข้ามกับการแสดงโฆษณา ) คุณจะต้องมุ่งเน้นในการทำให้โมเดลของคุณมีขนาดเล็กลง และต้อง เพื่อลดจำนวนน้ำหนัก
- ขาดความสัมพันธ์ที่มีความหมายระหว่างเวกเตอร์ ค่าเวกเตอร์ในองค์ประกอบ การเข้ารหัสแบบฮอตเดียวสำหรับอาหาร ไม่ได้ให้ข้อมูลที่มีประโยชน์เกี่ยวกับ ความคล้ายคลึงกันของอาหาร ในทางคณิตศาสตร์ ดัชนี 1 ("ฮอตดอก") คือ ใกล้กับดัชนี 2 ("สลัด") มากกว่าดัชนี 4999 ("ชาวาร์มา") แม้ว่าจะเป็น สุนัขมีลักษณะคล้ายชาวาร์มา (ซึ่งมีทั้งเนื้อและขนมปัง) มากกว่าสลัด
ในโมดูลนี้ คุณจะได้เรียนรู้วิธีสร้างการฝังมิติข้อมูลที่ต่ำกว่า การนำเสนอข้อมูลที่กระจัดกระจายที่ช่วยแก้ไขปัญหาทั้ง 2 อย่างนี้ได้