การแยกตัวประกอบเมทริกซ์

การแยกตัวประกอบเมทริกซ์เป็นโมเดลการฝังแบบง่ายๆ เนื่องจาก เมทริกซ์ความคิดเห็น A \(\in R^{m \times n}\)โดยที่ \(m\) คือ จำนวนผู้ใช้ (หรือคำค้นหา) และ \(n\) คือจำนวนรายการ โมเดลจะเรียนรู้ว่า

  • ผู้ใช้ฝังเมทริกซ์ \(U \in \mathbb R^{m \times d}\) ที่แถว i คือการฝังสำหรับผู้ใช้ i
  • เมทริกซ์ที่ฝังรายการ \(V \in \mathbb R^{n \times d}\) โดยที่แถว j คือการฝังสำหรับรายการ j

ภาพการแยกตัวประกอบเมทริกซ์โดยใช้ตัวอย่างภาพยนตร์ที่เกิดซ้ำ

ระบบจะเรียนรู้การฝังเพื่อให้ผลิตภัณฑ์ \(U V^T\) เป็น การประมาณที่ดีของเมทริกซ์ความคิดเห็น A สังเกตว่า \((i, j)\) รายการ \(U . V^T\) ก็คือผลิตภัณฑ์แบบจุด \(\langle U_i, V_j\rangle\) ของการฝังของผู้ใช้ \(i\) และรายการที่ต้องการ \(j\)ซึ่งต้องอยู่ใกล้กับ \(A_{i, j}\)

เลือกฟังก์ชันวัตถุประสงค์

ฟังก์ชันวัตถุประสงค์ทั่วไปฟังก์ชันหนึ่งคือระยะทางยกกำลัง 2 วิธีการคือ ลดผลรวมของข้อผิดพลาดยกกำลังสองของรายการที่สังเกตได้ทุกคู่:

\[\min_{U \in \mathbb R^{m \times d},\ V \in \mathbb R^{n \times d}} \sum_{(i, j) \in \text{obs}} (A_{ij} - \langle U_{i}, V_{j} \rangle)^2.\]

ในฟังก์ชันวัตถุประสงค์นี้ คุณจะรวมได้เฉพาะคู่ที่สังเกตการณ์ (i, j) นั่นคือ มากกว่าค่าที่ไม่ใช่ 0 ในเมทริกซ์ความคิดเห็น อย่างไรก็ตาม การสรุปเพียงอย่างเดียว สำหรับค่าหนึ่งๆ ไม่ใช่แนวคิดที่ดี เมทริกซ์ของทุกค่าจะมี การสูญเสียน้อยที่สุดและสร้างโมเดลที่ไม่สามารถให้คำแนะนำที่มีประสิทธิภาพ และเป็นภาพรวมที่ไม่ดี

ภาพประกอบของ 3 เมทริกซ์: สังเกตเฉพาะการแยกตัวประกอบเมทริกซ์ การแยกตัวประกอบแบบถ่วงน้ำหนัก และการแยกส่วนค่าเอกพจน์

บางทีคุณอาจปฏิบัติต่อค่าที่ตรวจไม่พบว่าเป็น 0 และรวมทั้งหมด รายการในเมทริกซ์ ซึ่งสอดคล้องกับการลดขนาด โฟรเบเนียสยกกำลังสอง ระยะห่างระหว่าง \(A\) ถึงค่าประมาณ \(U V^T\):

\[\min_{U \in \mathbb R^{m \times d},\ V \in \mathbb R^{n \times d}} \|A - U V^T\|_F^2.\]

คุณสามารถแก้โจทย์กำลังสองนี้ผ่าน การแยกค่าเดี่ยวๆ (SVD) ของเมทริกซ์ อย่างไรก็ตาม SVD ไม่ใช่โซลูชันที่ดีเช่นกัน เพราะในการใช้งานจริง เมทริกซ์ \(A\) อาจมีปริมาณน้อย ตัวอย่างเช่น ลองนึกถึงวิดีโอทั้งหมด บน YouTube เทียบกับวิดีโอทั้งหมดที่ผู้ใช้รายหนึ่งเคยดู ผลเฉลย \(UV^T\) (ซึ่งสอดคล้องกับค่าประมาณของโมเดล ของเมทริกซ์อินพุต) ก็น่าจะอยู่ใกล้ 0 และนำไปสู่ การเพิ่มประสิทธิภาพโดยรวม

ในทางตรงกันข้าม การใช้แฟกเตอร์เมทริกซ์แบบถ่วงน้ำหนักจะแยกวัตถุประสงค์ ให้เป็นผลรวม 2 รายการต่อไปนี้

  • ผลรวมของรายการที่สังเกตได้
  • ผลรวมของรายการที่ตรวจไม่พบ (นับเป็น 0)

\[\min_{U \in \mathbb R^{m \times d},\ V \in \mathbb R^{n \times d}} \sum_{(i, j) \in \text{obs}} (A_{ij} - \langle U_{i}, V_{j} \rangle)^2 + w_0 \sum_{(i, j) \not \in \text{obs}} (\langle U_i, V_j\rangle)^2.\]

ในที่นี้ \(w_0\) คือไฮเปอร์พารามิเตอร์ที่ถ่วงน้ำหนักคำทั้งสอง เพื่อให้วัตถุประสงค์ไม่ถูกควบคุมโดยฝ่ายใดฝ่ายหนึ่ง การปรับแต่งไฮเปอร์พารามิเตอร์นี้สำคัญมาก

\[\sum_{(i, j) \in \text{obs}} w_{i, j} (A_{i, j} - \langle U_i, V_j \rangle)^2 + w_0 \sum_{i, j \not \in \text{obs}} \langle U_i, V_j \rangle^2\]

โดยที่ \(w_{i, j}\) คือฟังก์ชันของความถี่ของคำค้นหา i และรายการ j

ลดฟังก์ชันของวัตถุประสงค์ให้เหลือน้อยที่สุด

อัลกอริทึมทั่วไปที่ใช้ลดฟังก์ชันของวัตถุประสงค์ให้น้อยที่สุดมีดังนี้

  • การไล่ระดับสีแบบสโตแคติก (SGD) เป็นวิธีทั่วไปในการลดฟังก์ชันการสูญเสียข้อมูล

  • สี่เหลี่ยมจัตุรัสน้อยที่สุดแบบสลับแบบถ่วงน้ำหนัก (WALS) เหมาะสำหรับการตั้งค่านี้ วัตถุประสงค์ที่เฉพาะเจาะจง

วัตถุประสงค์คือกำลังสองในสองเมทริกซ์ U และ V (โปรดทราบว่า แต่ปัญหาจะไม่นูนขึ้นมาพร้อมกัน) WALS ทำงานโดยการเริ่มต้น ระบบจะฝังแบบสุ่ม จากนั้นจะสลับสับเปลี่ยนระหว่าง

  • กำลังแก้ไข \(U\) และแก้ปัญหาสำหรับ \(V\)
  • กำลังแก้ไข \(V\) และแก้ปัญหาสำหรับ \(U\)

แต่ละขั้นตอนสามารถแก้ได้อย่างแม่นยำ (ผ่านทางคำตอบของระบบเชิงเส้น) และสามารถ ที่จะนำไปเผยแพร่ เรารับประกันว่าเทคนิคนี้จะบรรจบกันเพราะแต่ละขั้นตอน สามารถลดการสูญเสียได้

SGD กับ WALS

SGD และ WALS มีข้อดีและข้อเสีย ตรวจสอบข้อมูลด้านล่างเพื่อดูการเปรียบเทียบ

SGD

ยืดหยุ่นมาก อาจใช้การสูญเสียอื่นๆ ได้ ฟังก์ชัน

โหลดพร้อมกันได้

ช้าลง - ไม่บรรจบกันเร็ว

ยากต่อการจัดการรายการที่ระบุไม่ได้ (ต้องการ เพื่อใช้การสุ่มตัวอย่างเชิงลบหรือแรงโน้มถ่วง)

WALS

ใช้ใน Loss Squares เท่านั้น

โหลดพร้อมกันได้

ผสานรวมเร็วกว่า SGD

จัดการรายการที่มองไม่เห็นได้ง่ายขึ้น