การฝัง: ข้อมูลอินพุตเชิงหมวดหมู่

ข้อมูลเชิงหมวดหมู่หมายถึงฟีเจอร์อินพุตที่แสดงรายการแยกกันอย่างน้อย 1 รายการจากชุดตัวเลือกที่มีจํากัด เช่น ชุดภาพยนตร์ที่ผู้ใช้เคยดู ชุดคําในเอกสาร หรืออาชีพของผู้ใช้

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

อินพุตตัวอย่างสําหรับปัญหาเกี่ยวกับคําแนะนําภาพยนตร์ของเรา

รูปที่ 3 ข้อมูลสําหรับปัญหาเกี่ยวกับคําแนะนําภาพยนตร์ของเรา

แต่ละแถวของเมทริกซ์ในรูปที่ 3 เป็นตัวอย่างที่เก็บประวัติการดูภาพยนตร์ของผู้ใช้ และแสดงเป็น ด้วยค่าแรงกระแทกต่ํา เนื่องจากผู้ใช้แต่ละคนจะชมภาพยนตร์เพียงบางส่วนเท่านั้น แถวสุดท้ายสอดคล้องกับแถบสถานะเบาบาง [1, 3, 999999] โดยใช้ดัชนีคําศัพท์ที่แสดงด้านบนไอคอนภาพยนตร์

ในทํานองเดียวกัน เราสามารถแปลคํา ประโยค และเอกสารเป็นเวกเตอร์ที่มีจํานวนน้อยได้ โดยที่แต่ละคําในคําศัพท์จะมีบทบาทคล้ายกับภาพยนตร์ในตัวอย่างคําแนะนําของเรา

ในการใช้การแทนดังกล่าวภายในระบบแมชชีนเลิร์นนิง เราต้องหาวิธีแสดงเวกเตอร์ที่แคบแต่ละรายการเป็นเวกเตอร์ของตัวเลข เพื่อให้รายการซึ่งมีความหมายใกล้เคียงกัน (ภาพยนตร์หรือคํา) มีระยะห่างใกล้เคียงกันในพื้นที่เวกเตอร์ แต่คุณจะนําเสนอคําเป็นเวกเตอร์ของตัวเลขได้อย่างไร

วิธีที่ง่ายที่สุดในการกําหนดเลเยอร์ขนาดใหญ่ด้วยโหนดสําหรับทุกๆ คําในคําศัพท์ของคุณ หรืออย่างน้อยโหนดหนึ่งสําหรับทุกคําที่ปรากฏอยู่ในข้อมูลของคุณ หากคําที่ไม่ซ้ํากัน 500,000 คําปรากฏในข้อมูลของคุณ คุณสามารถแทนคําที่มีเวกเตอร์ความยาว 500,000 คํา และกําหนดให้คําแต่ละคําอยู่ในช่องหนึ่งในเวกเตอร์

หากกําหนด "horse" เพื่อจัดทําดัชนี 1247 จากนั้นให้ป้อน "horse" ลงในเครือข่าย คุณอาจคัดลอก 1 ลงในโหนดอินพุต 1247 และ 0 ลงในที่เหลือ การจัดประเภทเช่นนี้เรียกว่าการเข้ารหัสแบบใช้ครั้งเดียว เนื่องจากดัชนีเพียงค่าเดียวมีค่าที่ไม่ใช่ 0

โดยปกติ เวกเตอร์ของคุณอาจมีจํานวนคําในข้อความขนาดใหญ่ขึ้น หรือที่เรียกว่า ""bag of words" การนําเสนอ ในเวกเตอร์ของคําต่อคํา โหนดหลายๆ โหนดจํานวน 500,000 โหนดจะมีค่าที่ไม่ใช่ 0

แต่คุณกําหนดค่าที่ไม่ใช่ 0 โหนด 1 คําต่อคําจะให้เวกเตอร์อินพุตที่มีจํานวนน้อยมาก ซึ่งเป็นเวกเตอร์ขนาดใหญ่มากซึ่งมีค่าที่ไม่ใช่ 0 เพียงเล็กน้อย การนําเสนอสั้นๆ มีปัญหา 2-3 ข้อที่อาจทําให้โมเดลเรียนรู้ได้ยาก

ขนาดเครือข่าย

เวกเตอร์อินพุตขนาดใหญ่หมายถึงน้ําหนักที่มากเป็นพิเศษสําหรับโครงข่ายระบบประสาทเทียม หากมี M ในคําศัพท์และโหนด N ในชั้นแรกของเครือข่ายเหนืออินพุต คุณจะมีน้ําหนัก MxN เพื่อฝึกเลเยอร์นั้น การถ่วงน้ําหนักจํานวนมากก่อให้เกิดปัญหาเพิ่มเติมดังนี้

  • ปริมาณข้อมูล ยิ่งโมเดลมีน้ําหนักมากเท่าใด คุณก็ยิ่งต้องฝึกข้อมูลให้มีประสิทธิภาพมากขึ้นเท่านั้น

  • จํานวนการคํานวณ ยิ่งน้ําหนักสูง ก็ยิ่งต้องคํานวณและฝึกโมเดลมากขึ้น ใครๆ ก็เลือกใช้ ความสามารถของฮาร์ดแวร์ได้ไม่ยาก

ขาดความสัมพันธ์ที่มีความหมายระหว่างเวกเตอร์

หากคุณใส่ค่าพิกเซลของช่อง RGB ลงในตัวแยกประเภทรูปภาพ คุณควรจะพูดถึงค่า "close" สีน้ําเงินแดงใกล้เคียงกับสีน้ําเงินล้วนๆ ทั้งในแง่ของความหมายและในแง่ของระยะทางทางเรขาคณิตระหว่างเวกเตอร์ แต่เวกเตอร์ที่มี 1 ที่ดัชนี 1247 สําหรับ "horse" จะไม่ได้อยู่ใกล้กับเวกเตอร์ที่มี 1 ที่ดัชนี 50,430 สําหรับ "antelope" มากกว่าที่จะเป็นเวกเตอร์ที่มี 1 ที่ดัชนี 238 สําหรับ "t&vision"

วิธีแก้ปัญหา: การฝัง

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