พิกัดเทียบกับการไล่ระดับสี


23

ฉันถูกสงสัยว่ากรณีการใช้งานที่แตกต่างกันสำหรับสองขั้นตอนวิธีการประสานงานโคตรและการไล่โทนสีโคตร

ฉันรู้ว่าโคตรพิกัดมีปัญหากับฟังก์ชั่นที่ไม่ราบรื่น แต่ใช้ในอัลกอริทึมยอดนิยมเช่น SVM และ LASSO

อย่างไรก็ตามฉันคิดว่าใช้การไล่ระดับสีอย่างแพร่หลายมากขึ้นโดยเฉพาะกับการฟื้นตัวของ ANNs และสำหรับงานการเรียนรู้ของเครื่องอื่น ๆ อีกมากมาย

คำถามของฉันคือ: ปัญหาประเภทใดที่เหมาะกับปัญหาหนึ่ง แต่ไม่ใช่ปัญหาอื่นและในแง่นั้นอะไรที่ทำให้โคตรประสานงานที่เหมาะสมสำหรับ SVM และ LASSO แต่การสืบเชื้อสายที่เหมาะสมสำหรับ ANNs

หนึ่งควรเลือกระหว่างทั้งสองเมื่อเลือกอัลกอริทึมการเพิ่มประสิทธิภาพได้อย่างไร

คำตอบ:


7

ฉันคิดว่ามันเป็นเรื่องของความง่าย / ง่ายในการคำนวณการไล่ระดับสีของส่วนที่ราบรื่นของฟังก์ชันและ / หรือผู้ดำเนินการลงโทษ

บางครั้งมันง่ายกว่ามากที่จะหาวิธีแก้ปัญหาที่ถูกต้องในกรณีที่มีตัวแปรเดี่ยวหนึ่งตัว (หรือบล็อกหรือตัวแปร) มากกว่าที่จะใช้กับตัวแปรทั้งหมดพร้อมกัน บางครั้งมันก็แพงเกินไปที่จะคำนวณการไล่ระดับสีเมื่อเทียบกับอนุพันธ์ของแต่ละบุคคล นอกจากนี้การบรรจบกันของการประสานงานเชื้อสายเป็นเช่นเดียวกับ ista, 1/k2ที่kคือจำนวนของการทำซ้ำ แต่บางครั้งมันก็อาจจะทำงานได้ดีขึ้นเมื่อเทียบกับทั้ง ISTA และ FISTA ดูเช่น http: //statweb.stanford edu

สิ่งต่าง ๆ ดังกล่าวจะมีอิทธิพลต่อการเลือกของการประสานงานกับโคตรกับ ISTA / FISTA


ดังนั้นกรณีใดที่พิกัดโคตร (CD) จะเร็วขึ้น มีฟังก์ชั่นบางประเภทที่ซีดีไหนจะเป็นตัวเลือกที่ดีกว่า?
บาร์

ฉันไม่สามารถพูดได้ว่าคลาสฟังก์ชั่นที่เจาะจงจะเร็วกว่าด้วย CD มากกว่าด้วยวิธีอื่นเช่น FISTA เท่าที่ฉันรู้ว่าสิ่งนี้ขึ้นอยู่กับงานของคุณเป็นอย่างมากและราคาแพงแค่ไหนในการประเมินการไล่ระดับสีและสิ่งต่าง ๆ เช่นนั้น จากประสบการณ์ของฉันซีดีเร็วกว่า FISTA ในปัญหา lasso เมื่อมีตัวแปรไม่กี่ตัวในโมเดล (จำไม่ได้ แต่น้อยกว่าบางพัน) โปรดทราบว่าฉันเปรียบเทียบ CD กับ ISTA และ FISTA ที่นี่เท่านั้นอัลกอริทึมอื่น ๆ (เช่น Newton หรือ Pseudo-Newton) น่าจะเร็วกว่านี้ แต่สิ่งนี้ขึ้นอยู่กับปัญหาในมือ
Tommy L

ทำไม CD ถึงเร็วกว่า GD ดูเหมือนว่าเคาน์เตอร์ตรรกะ
Royi

3

การประสานงานโคตรปรับปรุงครั้งละหนึ่งพารามิเตอร์ในขณะที่การไล่ระดับสีลาดพยายามปรับปรุงพารามิเตอร์ทั้งหมดในครั้งเดียว

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

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

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

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

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

α


0

ฉันรู้ว่านี่เป็นคำถามเก่าและมีคำตอบที่ดีมาก ฉันต้องการแบ่งปันประสบการณ์ส่วนตัวที่เป็นประโยชน์

k

  • ความน่าจะเป็นต้องเป็นบวก
  • องค์ประกอบทั้งหมดของชุดความน่าจะเป็นต้องรวมกันเป็นหนึ่ง

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

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

สำหรับแต่ละความน่าจะเป็น พีผม

  • พีผมk+1=พีผมk-ηJพีผม
  • พีผม=นาที(สูงสุด(พีผม,0),1)
  • PJ+1=PJ1Σผม=1nพีผม

สำหรับคนอย่างฉันที่ทำงานใน Python นี้มักจะหมายความว่าฉันต้องใช้ for-loop เพิ่มเติมซึ่งส่งผลกระทบต่อประสิทธิภาพค่อนข้างเชิงลบ โคตรลาดชันช่วยให้ฉันใช้ Numpy ซึ่งเป็นประสิทธิภาพที่ดีที่สุด หนึ่งสามารถรับความเร็วที่ดีมากกับมัน แต่นี้ไม่สามารถทำได้กับพิกัดโคตรดังนั้นฉันมักจะใช้เทคนิคการแปลงบางอย่าง

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

ฉันหวังว่าสิ่งนี้ได้เพิ่มความเข้าใจลึกซึ้งเล็กน้อย

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