คำอธิบายของ Spikes ในการสูญเสียการฝึกอบรมเทียบกับการทำซ้ำกับ Adam Optimizer


16

ฉันกำลังฝึกอบรมโครงข่ายประสาทเทียมโดยใช้ i) SGD และ ii) เครื่องมือเพิ่มประสิทธิภาพอดัม เมื่อใช้งานปกติ SGD ฉันจะได้รับการสูญเสียการฝึกอบรมที่ราบรื่นเมื่อเทียบกับเส้นโค้งการวนซ้ำตามที่เห็นด้านล่าง อย่างไรก็ตามเมื่อฉันใช้ Adam Optimizer กราฟการสูญเสียการฝึกอบรมมีหนามแหลมบางอย่าง อะไรคือคำอธิบายของเดือยแหลมเหล่านี้?

รายละเอียดรูปแบบ:

14 input nodes -> 2 layer ที่ซ่อนอยู่ (100 -> 40 units) -> 4 output units

ฉันกำลังใช้พารามิเตอร์เริ่มต้นสำหรับอดัมbeta_1 = 0.9, beta_2 = 0.999, และepsilon = 1e-8batch_size = 32

i) กับ SGD ii) กับอดัมด้วย SGD กับอดัม


สำหรับการแจ้งเตือนในอนาคตการลดอัตราการเรียนรู้เริ่มต้นของคุณสามารถช่วยกำจัดหนามแหลมในอดัม
ตัวหนา

คำตอบ:


12

เดือยนั้นเป็นผลสืบเนื่องมาจากมินิ - แบทช์การไล่ระดับสีแบบแบทช์ในอดัม ( batch_size=32) มินิแบทช์บางรุ่นมีข้อมูล 'โชคดี' สำหรับการปรับให้เหมาะสมโดยบังเอิญทำให้เกิดเดือยแหลมที่คุณเห็นในฟังก์ชันต้นทุนของคุณโดยใช้อดัม หากคุณลองใช้การไล่ระดับสีแบบสุ่ม (เหมือนการใช้batch_size=1) คุณจะเห็นว่ามีฟังก์ชั่น spikes มากยิ่งขึ้น ไม่เหมือนกันที่เกิดขึ้นใน (เต็ม) Batch GD เพราะใช้ข้อมูลการฝึกอบรมทั้งหมด (เช่นขนาดแบทช์เท่ากับความสำคัญของชุดการฝึกอบรมของคุณ) แต่ละครั้งของการเพิ่มประสิทธิภาพ ในกราฟิกแรกของคุณค่าใช้จ่ายลดลงอย่างน่าเบื่อดูเหมือนว่าชื่อ ( i) กับ SGD ) ผิดและคุณใช้ (เต็ม) การไล่ระดับสีแบทช์แทนการใช้เหรียญสิงคโปร์

ในหลักสูตรการเรียนรู้เชิงลึกที่ยิ่งใหญ่ของเขาที่ Coursera Andrew Ng อธิบายรายละเอียดที่ยอดเยี่ยมนี้โดยใช้ภาพด้านล่าง:

ฟังก์ชั่นค่าใช้จ่าย


2
'SGD ... ใช้ข้อมูลการฝึกอบรมทั้งหมด' คุณแน่ใจหรือไม่ ซึ่งหมายความว่ามีการอัปเดตน้ำหนักหลังจากข้อมูลทั้งหมดถูกส่งไปข้างหน้า แต่สิ่งนี้เรียกว่า full-batch gd ไม่ใช่ sgd Stochastic หมายถึงมินิบัส
อเล็กซ์

ขอบคุณ @Alex ที่ชี้ความผิดพลาดของฉันฉันแก้ไขแล้วและปรับปรุงคำตอบพร้อมการอ้างอิงสำหรับข้อมูลเพิ่มเติม
xboard

@xboard - ไม่ฉันใช้การไล่ระดับสีแบบย่อส่วนสำหรับกลุ่มแรก
Abdul Fatir

8

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

  • การสูญเสียขึ้นอยู่กับ Loglikelihood-loss ต้องถูกเล็มถ้าไม่เช่นนั้นมันอาจประเมินผลlog(0)การคาดการณ์ / ค่าผิดพลาดที่ใกล้เข้ามาในชุดข้อมูลทำให้เกิดการไล่ระดับสีแบบระเบิด แพคเกจส่วนใหญ่ (ไฟฉาย, เทนเซอร์โฟลว์ ฯลฯ ) ใช้การตัดต่อค่าเริ่มต้นสำหรับการสูญเสีย
  • Outliers ในชุดข้อมูล
  • BatchNorm ที่มีขนาดเล็กและขนาดใหญ่ epsilon ( พารามิเตอร์มาก) ด้วย batchnorm asจากนั้นด้วยและขนาดเล็กคุณจะได้ขนาดที่สูงของϵy=(xu)/(s+ϵ)sϵy
  • ชุดสุดท้ายในยุคอาจมีขนาดเล็กถ้าชุดข้อมูลไม่สามารถมองเห็นได้โดยชุดขนาด ในไฟฉาย Dataloader drop_lastมีธง ชุดย่อยขนาดเล็ก = ความแปรปรวนสูง

ทีนี้ทำไมคุณถึงเห็นมันกับอดัมและไม่ใช่ด้วยเงินดอลล่าร์? เห็นได้ชัดว่าคุณถึงการสูญเสียต่ำกว่ากับอดัม ดังที่ระบุไว้ก่อนหน้านี้ถ้า 99.9% ของชุดข้อมูลมี optima ณ จุดหนึ่งยกเว้นการสังเกตบางอย่างนี่อาจเป็นการสังเกตว่าการกรีดร้อง "ไม่" และกระโดดออกจากมินิมาท้องถิ่นเมื่อเลือกแบบสุ่มเป็นชุด หากคุณเห็นทุกdataset_size//batch_size+1ขั้นตอนอาจเป็นเพราะแบทช์สุดท้ายมีขนาดเล็ก ฉันพนันได้เลยว่าคุณจะเห็นค่าเงิน SGD พุ่งขึ้นเช่นกันหากคุณปล่อยให้ขาดทุนต่ำลง

โบนัส: การลดลงอย่างรวดเร็วของคุณจริง ๆ ด้วยเครื่องมือเพิ่มประสิทธิภาพโมเมนตัม (อดัม) อาจหมายถึงว่าชั้น (อินพุตเลเยอร์เลเยอร์เอาท์พุท?) เริ่มต้นจากขนาด (จนถึงน้ำหนักขนาดใหญ่ / เล็ก)

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