ทำไมข้อมูลควรถูกสับสำหรับการเรียนรู้ของเครื่อง


30

ในงานการเรียนรู้ของเครื่องเป็นเรื่องปกติที่จะสับเปลี่ยนข้อมูลและทำให้เป็นมาตรฐาน วัตถุประสงค์ของการทำให้เป็นมาตรฐานมีความชัดเจน (สำหรับการมีช่วงของค่าคุณลักษณะเดียวกัน) แต่หลังจากที่ต้องดิ้นรนมากฉันไม่พบเหตุผลที่มีค่าสำหรับการสับข้อมูล

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

ทำไมเราทำเช่นนี้?


1
มันอาจจะมีประโยชน์ในการระบุว่าทำไมคำตอบในลิงค์แรกไม่ได้ช่วยคุณ มิฉะนั้นเราจะเสี่ยงต่อการทำซ้ำเนื้อหาที่กล่าวไปแล้วว่ามีการปรับปรุงเล็กน้อย
E_net4 พูดว่า Reinstate

ตามที่ระบุไว้ฉันต้องการทราบว่าทำไมไม่เมื่อใดคุณรู้หรือไม่ นั่นอธิบายได้จริงหรือ ฉันไม่ได้เห็นกระดาษใด ๆ สำหรับเรื่องนี้เลย
สื่อ

1
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับผลกระทบของการสั่งซื้อตัวอย่างอ่านการเรียนรู้หลักสูตร [pdf]
Em

1
ฉันโพสต์สิ่งนี้ใน CrossValidated และฉันคิดว่ามีความเกี่ยวข้อง stats.stackexchange.com/a/311318/89653
Josh

@Emre จริง ๆ แล้วกระดาษนี้ขัดกับการสับขอบคุณฉันไม่ได้ยินเกี่ยวกับการเรียนรู้แบบนี้
สื่อ

คำตอบ:


18

ขึ้นอยู่กับสิ่งที่เราควรทำเมื่อมีคำถามโพสต์ใน DataScience ซ้ำกับคำถามที่โพสต์ใน CrossValidated ฉันจะโพสต์คำตอบของคำถามเดิมอีกครั้งที่ถามเกี่ยวกับ CrossValidated ( https://stats.stackexchange.com/a/311318/89653 )

หมายเหตุ: ตลอดคำตอบนี้ฉันอ้างถึงการลดการสูญเสียการฝึกอบรมให้น้อยที่สุดและฉันไม่ได้กล่าวถึงเกณฑ์การหยุดเช่นการสูญเสียการตรวจสอบความถูกต้อง ตัวเลือกของเกณฑ์การหยุดไม่ส่งผลกระทบต่อกระบวนการ / แนวคิดที่อธิบายไว้ด้านล่าง

กระบวนการฝึกอบรมโครงข่ายประสาทเทียมคือการหาค่าต่ำสุดของฟังก์ชั่นการสูญเสียโดยที่แทนเมทริกซ์ (หรือเมทริกซ์หลายตัว) ของน้ำหนักระหว่างเซลล์ประสาทและแทนชุดข้อมูลการฝึกอบรม ฉันใช้ตัวห้อยสำหรับเพื่อระบุว่าการลดขนาดของเกิดขึ้นเฉพาะกับน้ำหนัก (นั่นคือเรากำลังมองหาที่ลดขนาด ) ในขณะที่ได้รับการแก้ไขX(W)X X W W XWXXWWX

ตอนนี้ถ้าเราคิดว่าเรามีองค์ประกอบในW (นั่นคือมีน้ำหนักPในเครือข่าย) เป็นพื้นผิวในพื้นที่P - 1มิติมิติ ลองจินตนาการว่าเรามีน้ำหนักของเซลล์ประสาทเพียงสองตัว ( P = 2 ) จากนั้นมีการตีความทางเรขาคณิตง่าย ๆ : มันเป็นพื้นผิวในพื้นที่ 3 มิติ นี้เกิดขึ้นจากความจริงที่ว่าสำหรับการฝึกอบรมใดก็ตามของน้ำหนักW , ฟังก์ชั่นการสูญเสียสามารถประเมินได้ในXและความคุ้มค่าที่จะกลายเป็นระดับความสูงของพื้นผิวPWPP+1P=2WX

แต่มีปัญหาเรื่องการไม่นูน พื้นผิวที่ฉันอธิบายจะมีจำนวนน้อยที่สุดในท้องถิ่นและอัลกอริธึมการไล่ระดับสีอ่อนไหวต่อการกลายเป็น "ติด" ใน minima เหล่านั้นในขณะที่การแก้ปัญหาลึก / ต่ำ / ดีกว่าอาจอยู่ใกล้เคียง นี่คือแนวโน้มที่จะเกิดขึ้นถ้ามีการเปลี่ยนแปลงในช่วงการฝึกอบรมการทำซ้ำทั้งหมดเพราะพื้นผิวที่ได้รับการแก้ไขเพื่อให้X ; คุณสมบัติทั้งหมดของมันเป็นแบบคงที่รวมถึงความหลากหลายที่น้อยที่สุดXX

วิธีการแก้ปัญหานี้คือการฝึกอบรมแบบกลุ่มย่อยรวมกับการสับ โดยการสับแถวและการฝึกอบรมในเซตย่อยของมันในระหว่างการวนซ้ำที่กำหนดจะเปลี่ยนด้วยการวนซ้ำทุกครั้งและเป็นไปได้ค่อนข้างมากที่จะไม่มีการวนซ้ำสองครั้งในการฝึกซ้ำและ epochs ทั้งหมดในXเดียวกัน. ผลที่ได้คือตัวแก้ปัญหาสามารถ "เด้ง" ออกมาจากระดับต่ำสุดในท้องถิ่นได้อย่างง่ายดาย ลองจินตนาการว่าแก้จะติดอยู่ในขั้นต่ำท้องถิ่นย้ำฉันด้วยการฝึกอบรมมินิชุดXฉัน ค่าต่ำสุดในท้องถิ่นนี้สอดคล้องกับประเมินที่ค่าน้ำหนักเฉพาะ เราจะเรียกมันว่าX i ( W)XXiXi ) ในการทำซ้ำครั้งต่อไปรูปร่างของพื้นผิวการสูญเสียของเราเปลี่ยนไปจริง ๆ แล้วเพราะเราใช้ X i + 1นั่นคือX i + 1 ( W i )อาจใช้ค่าที่แตกต่างจากX i ( W i )และมันแตกต่างกันมากค่อนข้างเป็นไปได้ว่ามันไม่สอดคล้องกับขั้นต่ำของท้องถิ่น! ขณะนี้เราสามารถคำนวณการปรับปรุงการไล่ระดับสีและดำเนินการฝึกอบรมต่อไป เพื่อให้ชัดเจน: รูปร่างของX i + 1โดยทั่วไปจะแตกต่างจากX iXi(Wi)Xi+1Xผม+1(Wผม)Xผม(Wผม)Xผม+1Xผม. โปรดทราบว่านี่ผมหมายถึงฟังก์ชั่นการสูญเสียประเมินในการฝึกอบรมชุดX ; มันเป็นพื้นผิวที่สมบูรณ์กว่ากำหนดค่าที่เป็นไปได้ทั้งหมดของWมากกว่าการประเมินผลของการสูญเสียที่ (ซึ่งเป็นเพียงเกลา) สำหรับค่าเฉพาะของW โปรดทราบด้วยว่าหากใช้งานแบบย่อส่วนโดยไม่มีการสับเปลี่ยนยังมีระดับ "การกระจาย" ของพื้นผิวที่สูญเสีย แต่จะมีจำนวนข้อผิดพลาดที่ไม่ซ้ำกันจำนวน จำกัด (และค่อนข้างเล็ก) ที่เห็นโดยตัวแก้ปัญหา (โดยเฉพาะ ชุดมินิแบทช์ที่เหมือนกัน - และดังนั้นจึงสูญเสียพื้นผิว - ในแต่ละช่วงเวลา)XWW

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


+1 คำตอบนี้เป็นเทคนิคที่อธิบายได้ดีกว่าคำตอบอื่นที่มีจำนวน upvotes สูงกว่า
Gokul NC

29

ข้อมูลแบบสับมีจุดประสงค์เพื่อลดความแปรปรวนและตรวจสอบให้แน่ใจว่าแบบจำลองยังคงเป็นแบบทั่วไปและมีความพอดีน้อยกว่า

กรณีที่ชัดเจนที่คุณสลับข้อมูลของคุณคือถ้าข้อมูลของคุณถูกจัดเรียงตามระดับ / เป้าหมาย ที่นี่คุณจะต้องสลับเพื่อให้แน่ใจว่าชุดการฝึกอบรม / ทดสอบ / การตรวจสอบความถูกต้องเป็นตัวแทนของการกระจายข้อมูลโดยรวม

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

คุณต้องการสลับข้อมูลของคุณหลังจากแต่ละยุคเพราะคุณจะมีความเสี่ยงในการสร้างชุดที่ไม่ได้เป็นตัวแทนของชุดข้อมูลโดยรวมและดังนั้นการประมาณของการไล่ระดับสีของคุณจะถูกปิด การสลับข้อมูลของคุณหลังจากแต่ละยุคทำให้แน่ใจว่าคุณจะไม่ "ติด" กับแบตช์ที่ไม่ดีมากเกินไป

ในการไล่ระดับสีแบบสุ่มสุ่มเมื่อแต่ละชุดมีขนาด 1 คุณยังคงต้องการสลับข้อมูลของคุณหลังจากแต่ละยุคเพื่อให้การเรียนรู้ทั่วไปของคุณ แน่นอนว่าถ้าใช้จุดข้อมูล 17 เสมอหลังจากจุดข้อมูล 16 การไล่ระดับสีของตัวเองจะมีอคติกับสิ่งใดก็ตามที่จุดข้อมูล 16 ปรับปรุงในตัวแบบ ด้วยการสลับข้อมูลของคุณคุณจะมั่นใจได้ว่าจุดข้อมูลแต่ละจุดสร้างการเปลี่ยนแปลงแบบ "อิสระ" ในรูปแบบโดยไม่ต้องลำเอียงจากจุดเดียวกันก่อนหน้าพวกเขา


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

2
ฉันคิดว่าการสับจะลดความแปรปรวนและมีแนวโน้มที่จะเพิ่มความเอนเอียง (เช่นมันลดแนวโน้มที่จะทำให้ข้อมูลมีขนาดใหญ่เกินไป) ลองนึกภาพเรากำลังทำโคตรลาดแบบเต็มชุดเช่นยุคและการวนซ้ำเป็นสิ่งเดียวกัน จากนั้นก็มีค่าต่ำสุดทั่วโลก (ไม่ใช่ที่เราสามารถหาได้) ซึ่งนักแก้ปัญหาของเราพยายามค้นหา หากเราใช้การสูญเสีย MSE แล้วเราจะลดอคติหากเราสามารถเข้าถึงโซลูชันนี้ได้ทุกครั้ง แต่เนื่องจากค่าต่ำสุดทั่วโลกนี้มีแนวโน้มที่จะพบได้ในสถานที่ที่แตกต่างกันสำหรับชุดการฝึกอบรมที่แตกต่างกันวิธีการแก้ปัญหานี้จะมีความแปรปรวนสูง
Josh

2
โดยการสับเรามีโอกาสน้อยที่จะรวมเข้ากับโซลูชันที่อยู่ในระดับต่ำสุดทั่วโลกสำหรับชุดการฝึกอบรมทั้งหมด (อคติสูงกว่า) แต่มีแนวโน้มที่จะหาวิธีแก้ปัญหาที่สรุปได้ดีกว่า (ความแปรปรวนต่ำกว่า)
Josh

7

สมมติว่าข้อมูลเรียงตามลำดับที่ระบุ ตัวอย่างเช่นชุดข้อมูลที่เรียงลำดับฐานในชั้นเรียนของพวกเขา ดังนั้นหากคุณเลือกข้อมูลสำหรับการฝึกอบรมการตรวจสอบและการทดสอบโดยไม่พิจารณาหัวข้อนี้คุณจะเลือกแต่ละคลาสสำหรับงานที่แตกต่างกันและมันจะล้มเหลวในกระบวนการ

ดังนั้นเพื่อขัดขวางปัญหาเหล่านี้ทางออกที่ง่ายคือการสับข้อมูลเพื่อรับชุดการฝึกอบรมการตรวจสอบความถูกต้องและข้อมูลการทดสอบที่แตกต่างกัน

เกี่ยวกับ mini-batch คำตอบสำหรับโพสต์นี้อาจเป็นคำตอบสำหรับคำถามของคุณ


1
@ สื่อคำตอบที่เกี่ยวข้องมากที่สุดในลิงค์ที่ให้คือ: "การสับแบบย่อส่วนทำให้การไล่ระดับสีมีความผันแปรมากขึ้นซึ่งจะช่วยให้การบรรจบกันเพราะมันเพิ่มโอกาสในการตีทิศทางที่ดี"
OmG

จริง ๆ แล้วฉันเคยเห็นสิ่งนี้ในกระดาษของ SGD แต่ในฐานะผู้เขียนบทความอ้างว่ามันเป็นเหตุผลของการบรรจบกันไม่ใช่การสับ ฉันเห็นลิงก์และฉันสงสัยมันเล็กน้อย เพื่อความชัดเจนมากขึ้นลักษณะนี้กระดาษที่น่าตื่นตาตื่นใจ ผู้เขียนได้กล่าวถึงประเด็นที่นั่น แต่อย่างที่คุณจะเห็นไม่มีเหตุผลที่แน่นอนสำหรับการสับ
สื่อ

1

เราจำเป็นต้องสับเปลี่ยนสำหรับ minibatch / SGD เท่านั้นไม่จำเป็นต้องมีการไล่ระดับสีแบบแบทช์

หากไม่สับข้อมูลข้อมูลสามารถจัดเรียงหรือจุดข้อมูลที่คล้ายกันจะอยู่ติดกันซึ่งนำไปสู่การบรรจบกันช้า:

  • ตัวอย่างที่คล้ายกันจะสร้างพื้นผิวที่คล้ายกัน (1 พื้นผิวสำหรับฟังก์ชั่นการสูญเสียสำหรับ 1 ตัวอย่าง) -> การไล่ระดับสีจะชี้ไปยังทิศทางที่คล้ายกัน แต่ทิศทางนี้แทบจะชี้ไปที่ต่ำสุด ->
  • "ทิศทางที่ดีที่สุด": ค่าเฉลี่ยของการไล่ระดับสีของพื้นผิวทั้งหมด (การไล่ระดับสีแบบแบทช์) ซึ่งชี้ไปยังจุดต่ำสุดโดยตรง
  • “ ทิศทางมินิแบช”: ค่าเฉลี่ยของทิศทางที่หลากหลายจะชี้ให้ใกล้ที่สุดถึงจุดต่ำสุดแม้ว่าจะไม่ใช่ทิศทางก็ตาม
  • “ ทิศทาง 1 ตัวอย่าง”: ชี้ไปที่ระยะทางน้อยที่สุดเมื่อเทียบกับรถมินิบัส

ฉันวาดพล็อตของฟังก์ชั่นการสูญเสีย L-2 สำหรับการถดถอยเชิงเส้นตรงy=2x นี้


1

XWX

การตอบกลับการตอบสนองของ Josh ฉันต้องการเพิ่มสิ่งนั้นด้วยเหตุผลเดียวกันการสับต้องทำก่อนที่จะทำการผสม มิฉะนั้นคุณจะได้รับจำนวน จำกัด ของพื้นผิว


ขอขอบคุณและยินดีต้อนรับสู่ชุมชนของเรา
สื่อ

1

เพื่อความแม่นยำที่ดีที่สุดของแบบจำลองเราแนะนำเสมอว่าข้อมูลการฝึกอบรมควรมีข้อมูลทั้งหมด

การสับข้อมูลการฝึกอบรมช่วยให้เราบรรลุเป้าหมายนี้


1

โดยการสลับแถวและการฝึกอบรมเพียงส่วนย่อยของพวกเขาในระหว่างการทำซ้ำที่กำหนด𝑋การเปลี่ยนแปลงกับการทำซ้ำทุกครั้งและเป็นจริงค่อนข้างเป็นไปได้ที่จะไม่มีการวนซ้ำสองครั้งในการฝึกซ้ำและ epochs ทั้งหมด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.