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

แฟกทอเรียลเมทริกซ์เป็นรูปแบบการฝังที่เรียบง่าย เนื่องจากเมทริกซ์ความคิดเห็น 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}\)

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

ฟังก์ชันวัตถุประสงค์ที่ทําได้ง่าย 1 รายการคือระยะทางยกกําลัง 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 แล้วนํามาบวกกับรายการทั้งหมดในเมทริกซ์ ซึ่งสอดคล้องกับการลดระยะห่างแบบยกกําลัง 2 ระหว่าง \(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 รายการต่อไปนี้

  • ผลรวมเหนือค่าที่สังเกตได้
  • ผลรวมของรายการที่ไม่ได้สังเกต (แสดงเป็นศูนย์)

\[\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\) คือไฮเปอร์พารามิเตอร์ที่ระบุน้ําหนักสําหรับ 2 คํานี้ เพื่อไม่ให้วัตถุประสงค์นี้เกิดขึ้น การปรับแต่งไฮเปอร์พารามิเตอร์นี้สําคัญมาก

\[\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 มีข้อดีและข้อเสีย ตรวจสอบข้อมูลด้านล่างเพื่อเปรียบเทียบ

สิงคโปร์

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

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

ช้าลง ช้าเกินไป

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

ไม้เท้า

พึ่งพาเฉพาะ Loss Squares เท่านั้น

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

รวดเร็วกว่า SGD

จัดการสิ่งที่สังเกตเห็นได้ยาก