วิธีการอาดัมของโคตรลาดลงแบบสุ่มทำงานอย่างไร


44

ฉันคุ้นเคยกับอัลกอริธึมการไล่ระดับสีพื้นฐานสำหรับการฝึกอบรมโครงข่ายประสาท ฉันได้อ่านกระดาษเสนออดัม: ADAM: เป็นวิธีการในการเพิ่มประสิทธิภาพ

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

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

ในทางปฏิบัติฉันจะสงสัยว่าอดัมสามารถใช้ขนาดขั้นตอนที่มีประสิทธิภาพมากขึ้นในการลดการไล่ระดับสีดังนั้นข้อผิดพลาดในการฝึกอบรมเมื่อใช้ร่วมกับการประมาณแบบสุ่ม ดังนั้นเวกเตอร์การอัพเดทที่ได้ผลลัพธ์ควร "กระโดด" รอบ ๆ ในมิติเชิงพื้นที่มากกว่าที่จะอธิบายถึงเส้นโค้งบางอย่างเช่นอัลกอริธึมการไล่ระดับสีปกติ

บางคนสามารถแยกแยะว่าอดัมทำงานอย่างไร? โดยเฉพาะอย่างยิ่งวิธีการที่มันมาบรรจบกันโดยเฉพาะว่าทำไมวิธีการของอดัมทำงานและสิ่งที่เป็นประโยชน์คืออะไร?


1
คุณควรระบุชื่อที่ดีขึ้นสำหรับคำถามของคุณ คุณต้องการถามอะไรเกี่ยวกับอาดัม? แม้ว่าโดยทั่วไปแล้วพยายามทำให้สามารถค้นหาได้อีกเล็กน้อย
Charlie Parker

คำตอบ:


39

กระดาษอดัมบอกว่า "... ฟังก์ชั่นวัตถุประสงค์หลายอย่างประกอบด้วยผลรวมของฟังก์ชั่นย่อยที่ประเมินที่ส่วนย่อยของข้อมูลต่าง ๆ ในกรณีนี้การเพิ่มประสิทธิภาพสามารถทำได้อย่างมีประสิทธิภาพมากขึ้นโดยทำตามขั้นตอนการไล่ระดับสี หมายความว่าฟังก์ชั่นวัตถุประสงค์คือผลรวมของข้อผิดพลาดเหนือตัวอย่างการฝึกอบรมและการฝึกอบรมสามารถทำได้ในแต่ละตัวอย่างหรือรถมินิบัส สิ่งนี้เหมือนกับในการไล่ระดับสีแบบสุ่ม (SGD) ซึ่งมีประสิทธิภาพมากขึ้นสำหรับปัญหาขนาดใหญ่กว่าการฝึกอบรมแบบแบทช์เนื่องจากการปรับปรุงพารามิเตอร์บ่อยกว่า

สำหรับสาเหตุที่อดัมทำงานนั้นใช้เทคนิคเล็กน้อย

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

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

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

วิธีการที่เกี่ยวข้อง :

โมเมนตัมมักจะใช้กับมาตรฐาน SGD รุ่นปรับปรุงที่เรียกว่าโมเมนตัม Nesterov หรือการไล่ระดับสีเร่ง Nesterov วิธีอื่น ๆ ที่ใช้อัตราการเรียนรู้ที่ปรับโดยอัตโนมัติสำหรับแต่ละพารามิเตอร์ ได้แก่ : Adagrad, RMSprop และ Adadelta RMSprop และ Adadelta แก้ปัญหาด้วย Adagrad ที่อาจทำให้การเรียนรู้หยุดลง อาดัมคล้ายกับ RMSprop พร้อมโมเมนตัม Nadam ดัดแปลงอดัมให้ใช้โมเมนตัม Nesterov แทนโมเมนตัมแบบดั้งเดิม

การอ้างอิง :

Kingma และบริติชแอร์เวย์ (2014) อดัม: วิธีสำหรับการเพิ่มประสิทธิภาพสุ่ม

Goodfellow และคณะ (2016) การเรียนรู้อย่างลึกซึ้งบทที่ 8

สไลด์จากสนามของเจฟฟ์ฮินตัน

Dozat (2016) การรวม Nesterov Momentum เข้ากับอดัม


2
(+1) ชุมชนจะได้รับประโยชน์อย่างมากหากคุณสามารถอัปเดตคำตอบของคุณเพื่อรวมข้อมูลเพิ่มเติมเกี่ยวกับบทพิสูจน์ของการบรรจบกันของอดัมและการแก้ไขของพวกเขาเช่น "ใน Convergence of Adam and Beyond" openreview.net/forum?id=ryQu7f- RZ
คืนสถานะโมนิก้า

2
ขอบคุณ @Sycorax ฉันจะพยายามอัปเดตเมื่อฉันมีเวลา
user20160

1
w

ความคิดเห็นล่าสุดของฉันยังคงคำตอบนี้อธิบายเกี่ยวกับความแตกต่างระหว่างอาดัมและ rmsprop ด้วยโมเมนตัมในขณะที่มุ่งเน้นไปที่พฤติกรรมที่เหมือนโมเมนตัมของอดัมแตกต่างจากพฤติกรรมที่เหมือนโมเมนตัมปกติ (คำตอบนั้นยังรวมถึงรหัส Python เพื่อจำลองและแสดงวิธีการทำงานของกราฟิกที่แตกต่างกัน)
Oren Milman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.