เชื้อสายการไล่ระดับสีของ minibatch จะปรับปรุงน้ำหนักสำหรับตัวอย่างในชุดได้อย่างไร


12

หากเราประมวลผลตัวอย่าง 10 ตัวอย่างในแบตช์ฉันเข้าใจว่าเราสามารถสรุปการสูญเสียสำหรับแต่ละตัวอย่าง แต่การ backpropagation ทำงานอย่างไรในการอัปเดตน้ำหนักสำหรับแต่ละตัวอย่าง

ตัวอย่างเช่น:

  • ตัวอย่างที่ 1 -> การสูญเสีย = 2
  • ตัวอย่างที่ 2 -> การสูญเสีย = -2

ซึ่งส่งผลให้สูญเสียเฉลี่ย 0 (E = 0) ดังนั้นสิ่งนี้จะปรับปรุงน้ำหนักและบรรจบกันได้อย่างไร มันเป็นเพียงการสุ่มของชุดที่เรา "หวังว่า" มาบรรจบกันไม่ช้าก็เร็ว? สิ่งนี้ไม่เพียงคำนวณการไล่ระดับสีสำหรับตุ้มน้ำหนักชุดแรกสำหรับตัวอย่างสุดท้ายที่ประมวลผลด้วยหรือไม่

คำตอบ:


15

การไล่ระดับสีไม่ทำงานตามที่คุณแนะนำ แต่อาจเกิดปัญหาคล้ายกัน

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

หากแบบจำลองของคุณมีน้ำหนัก 5 น้ำหนักและคุณมีขนาดเล็กเป็นกลุ่ม 2 คุณอาจได้รับสิ่งนี้:

gradients=(1.5,2.0,1.1,0.4,0.9)

gradients=(1.2,2.3,1.1,0.8,0.7)

(1.35,0.15,0,0.2,0.8)

0

แก้ไขเพื่อตอบสนองต่อความคิดเห็น:

kLiwj

วิธีที่ฉันเขียนมันในตัวอย่างของฉันฉันเฉลี่ยแต่ละการไล่ระดับสีเช่น:Lwj=1ki=1kLiwj

รหัสบทช่วยสอนที่คุณเชื่อมโยงในความคิดเห็นใช้ Tensorflow เพื่อลดการสูญเสียโดยเฉลี่ย

Tensorflow ตั้งเป้าที่จะลด1ki=1kLi

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

Lwj=wj1ki=1kLi

ความแตกต่างสามารถนำมารวมกันได้ดังนั้นมันจึงเหมือนกับการแสดงออกจากแนวทางในตัวอย่างของฉัน

wj1ki=1kLi=1ki=1kLiwj


Gotcha คุณยังต้องการที่จะเฉลี่ยการสูญเสียมากกว่า batch_size ที่ถูกต้องหรือไม่ ฉันไม่แน่ใจว่าคุณคุ้นเคยกับ tenorflow หรือไม่ แต่ฉันพยายามที่จะกระทบยอดความเข้าใจของฉันกับบทช่วยสอนนี้: tensorflow.org/get_started/mnist/beginnersคุณสามารถเห็นความสูญเสียนั้นเฉลี่ยอยู่ในแบตช์ (รหัสลด _mean) ฉันคิดว่าเทนเซอร์โฟลว์ทำให้การนับภายใน / ค่าเฉลี่ยของน้ำหนัก?
คำนวณจากคาร์บอน

1
@carboncomputed โอ้ใช่คุณพูดถูกพวกเขาเฉลี่ยขาดทุนดังนั้นเมื่อ Tensorflow คำนวณการไล่ระดับสีของการสูญเสียเฉลี่ยมันคำนวณค่าเฉลี่ยของการไล่ระดับสีสำหรับการสูญเสียแต่ละครั้งอย่างมีประสิทธิภาพ ฉันจะแก้ไขคำตอบเพื่อแสดงคณิตศาสตร์สำหรับสิ่งนี้
Hugh

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

1
@carboncomputed นั่นคือการดึงดูดของ Tensorflow มันใช้คณิตศาสตร์สัญลักษณ์และสามารถสร้างความแตกต่างภายใต้ประทุน
Hugh

ขอบคุณสำหรับคำตอบที่เรียบร้อย แต่ผมไม่เข้าใจว่า TF รู้วิธีการสำรองการเผยแพร่กับการสูญเสียเฉลี่ยตามที่แสดงในตัวอย่างนี้ , code line 170?
คนบาป

-1

เหตุผลที่ใช้ mini-batches คือมีตัวอย่างของการฝึกอบรมที่ดีเช่นเสียงที่เป็นไปได้ของมันจะลดลงโดยเฉลี่ยของเอฟเฟ็กต์ของพวกเขา แต่ยังไม่ใช่แบทช์เต็มรูปแบบ ข้อเท็จจริงสำคัญอย่างหนึ่งคือข้อผิดพลาดที่คุณประเมินนั้นเป็นระยะทางเสมอระหว่างผลลัพธ์ที่คาดการณ์ของคุณกับผลลัพธ์จริง: นั่นหมายความว่าไม่สามารถเป็นค่าลบได้ดังนั้นคุณจึงไม่สามารถมีข้อผิดพลาดที่ 2 และ -2 ที่ยกเลิกได้ แต่มันจะกลายเป็นข้อผิดพลาด 4 จากนั้นคุณประเมินการไล่ระดับสีของข้อผิดพลาดเกี่ยวกับน้ำหนักทั้งหมดเพื่อให้คุณสามารถคำนวณว่าการเปลี่ยนแปลงใดในน้ำหนักจะลดลงได้มากที่สุด เมื่อคุณทำเช่นนั้นคุณจะทำ "ขั้นตอน" ในทิศทางนั้นขึ้นอยู่กับขนาดของอัตราการเรียนรู้ของคุณอัลฟ่า (นี่คือแนวคิดพื้นฐานฉันจะไม่ลงรายละเอียดเกี่ยวกับ backpropagation สำหรับ NN ลึก ๆ ) หลังจากใช้การฝึกอบรมนี้บนชุดข้อมูลของคุณสำหรับยุคจำนวนหนึ่งคุณสามารถคาดหวังว่าเครือข่ายของคุณจะมาบรรจบกันหากขั้นตอนการเรียนรู้ของคุณไม่ใหญ่เกินไป ทำให้มันแตกต่าง คุณยังสามารถสิ้นสุดขั้นต่ำท้องถิ่นได้สิ่งนี้สามารถหลีกเลี่ยงได้โดยการเริ่มต้นน้ำหนักของคุณแตกต่างกันใช้เครื่องมือเพิ่มประสิทธิภาพ differenr และพยายามทำให้เป็นปกติ


เพียงเพิ่ม: เราใช้ชุดมินิส่วนใหญ่เพื่อประสิทธิภาพการคำนวณ เรามีการแลกเปลี่ยนระหว่างความแม่นยำของการสืบเชื้อสายและความถี่ในการอัปเดตตุ้มน้ำหนัก ข้อมูลต้องมีขนาดใหญ่มากเพื่อไม่ให้พอดีกับหน่วยความจำ
Łukasz Grad

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

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