การปรับให้สม่ำเสมอเพื่อความพอดี: การแปลงแบบปกติ L1

เวกเตอร์บางส่วนมักมีมิติหลายขนาด การสร้างข้ามฟีเจอร์จะทำให้มีมิติข้อมูลมากขึ้น ด้วยเวกเตอร์ของจุดสนใจที่มีมิติสูง ขนาดโมเดลอาจใหญ่มากและต้องใช้ RAM จำนวนมาก

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

ตัวอย่างเช่น ลองพิจารณาชุดข้อมูลที่พักอาศัยที่ครอบคลุมทั้ง แคลิฟอร์เนียเท่านั้น แต่ครอบคลุมทั้งโลก การฝากข้อมูลละติจูดทั่วโลกที่ระดับนาที (60 นาทีต่อองศา) ให้ขนาดประมาณ 10,000 ในการเข้ารหัสแบบเบาบาง ส่วนลองจิจูดทั่วโลกที่ระดับนาทีให้มิติข้อมูลประมาณ 20,000 รายการ คุณลักษณะข้ามระหว่างสองคุณลักษณะ จะทำให้เกิดมิติข้อมูลประมาณ 200,000,000 มิติข้อมูลจำนวนมากจาก 200,000,000 รายการนี้แสดงถึงพื้นที่ที่พำนักอาศัยอันจำกัดดังกล่าว (เช่น กลางมหาสมุทร) จนอาจเป็นเรื่องยากที่จะใช้ข้อมูลดังกล่าวเพื่อสร้างข้อมูลทั่วไปอย่างมีประสิทธิภาพ คงจะไร้สาระถ้าจะจ่ายค่า RAM เพื่อจัดเก็บขนาดที่ไม่จำเป็นพวกนี้ ดังนั้นจึงควรสนับสนุนให้น้ำหนักสำหรับมิติข้อมูลที่ไม่มีความหมายลดลงเหลือ 0 พอดี ซึ่งจะช่วยให้เราหลีกเลี่ยงการจ่ายค่าใช้จ่ายในการจัดเก็บค่าสัมประสิทธิ์ของโมเดลเหล่านี้ในเวลาอนุมานได้

เราอาจสามารถเข้ารหัสแนวคิดนี้ลงในโจทย์การเพิ่มประสิทธิภาพที่ทำขณะฝึก โดยเพิ่มคำการกำหนดรูปแบบที่เหมาะสมซึ่งเลือกมาอย่างเหมาะสม

การกำหนดกฎ L2 จะทํางานนี้ได้ไหม ไม่ได้ ต้องขออภัยด้วย การเขียนแบบปกติ L2 จะช่วยให้น้ำหนักมีค่าน้อย แต่ไม่บังคับให้เท่ากับ 0.0 พอดี

อีกแนวคิดหนึ่งคือลองสร้างคำศัพท์แบบปกติที่บทลงโทษจำนวนค่าสัมประสิทธิ์ที่ไม่ใช่ 0 ในโมเดล การเพิ่มจำนวนนี้จะเหมาะสมก็ต่อเมื่อ ความสามารถของโมเดลในการจัดให้พอดีกับข้อมูลมีมากพอ แต่ถึงแม้วิธีการแบบอิงตามจำนวนนี้จะดูน่าดึงดูดใจ แต่ก็อาจเปลี่ยนปัญหาการเพิ่มประสิทธิภาพแบบนูนให้เป็นปัญหาการเพิ่มประสิทธิภาพแบบ non-convex ได้ แนวคิดนี้ซึ่งเรียกว่า "การควบคุมแบบ L0" จึงไม่ใช่วิธีที่เราจะใช้ได้อย่างมีประสิทธิภาพในทางปฏิบัติ

อย่างไรก็ตาม มีคำศัพท์ในการกำหนดรูปแบบที่เรียกว่า L1 ซึ่งเป็นรูปแบบการประมาณค่า L0 แต่มีข้อดีจากการนูนออกมาและช่วยให้การประมวลผลมีประสิทธิภาพ เราจึงใช้การปรับ L1 เพื่อทำให้ค่าสัมประสิทธิ์ที่ไม่ให้ข้อมูลในโมเดลมีค่าเป็น 0 ได้ทั้งหมด ซึ่งจะทำให้ประหยัด RAM ในเวลาที่อนุมานได้

การกำหนดกฎ L1 เทียบกับ L2

L2 และ L1 ให้โทษแตกต่างกันดังนี้

  • L2 ให้โทษแก่น้ำหนัก2
  • L1 ลงโทษ |น้ำหนัก|

ดังนั้น L2 และ L1 จึงมีอนุพันธ์แตกต่างกัน

  • อนุพันธ์ของ L2 คือ 2 * weight
  • อนุพันธ์ของ L1 คือ k (ค่าคงที่ซึ่งค่าไม่ขึ้นอยู่กับน้ำหนัก)

คุณอาจคิดว่าอนุพันธ์ของ L2 เป็นแรงลบ x% ของน้ำหนักทุกครั้ง อย่างที่ Zeno ทราบ แม้ว่าคุณจะลบ x เป็นจำนวนพันล้านครั้งแล้ว จำนวนที่ลดลงก็จะยังคงไม่ถึง 0 (Zeno ยังไม่คุ้นเคยกับข้อจำกัด ความแม่นยำของจุดลอยตัว ซึ่งอาจทำให้มีค่า 0 เลย) ปกติแล้ว L2 จะไม่ทำให้น้ำหนักเป็น 0 ในอัตราใดก็ตาม

คุณอาจคิดว่าอนุพันธ์ของ L1 เป็นแรงที่ลบค่าคงที่บางอย่างออกจากน้ำหนักทุกครั้ง แต่เนื่องจากค่าสัมบูรณ์ทำให้ L1 มีความไม่ต่อเนื่องที่ 0 ซึ่งทำให้ผลการลบที่เกินจาก 0 กลายเป็น 0 เช่น ถ้าการลบจะทำให้น้ำหนักจาก +0.1 ถึง -0.2 ทาง L1 จะตั้งค่าน้ำหนักเป็น 0 Eureka, L1 ลดน้ำหนักเป็น 0

การกำหนดกฎ L1 ซึ่งเป็นการลงโทษค่าสัมบูรณ์ของน้ำหนักทั้งหมด เป็นรูปแบบที่ค่อนข้างมีประสิทธิภาพสำหรับโมเดลแบบกว้าง

โปรดทราบว่าคำอธิบายนี้เป็นความจริงสำหรับโมเดลหนึ่งมิติ

คลิกปุ่มเล่น () ด้านล่างเพื่อเปรียบเทียบผลของการควบคุมแบบ L1 และ L2 ต่อเครือข่ายการถ่วงน้ำหนัก