สมมติว่าฉันต้องการฝึกอัลกอริธึมการถดถอยแบบไล่ระดับสีแบบสุ่มโดยใช้ชุดข้อมูลที่มีตัวอย่าง N ตัว เนื่องจากขนาดของชุดข้อมูลได้รับการแก้ไขฉันจะใช้ข้อมูล T ครั้ง ในการทำซ้ำแต่ละครั้งหรือ "ยุค" ฉันใช้ตัวอย่างการฝึกอบรมแต่ละครั้งทันทีหลังจากจัดลำดับการฝึกทั้งหมดใหม่แบบสุ่ม
การติดตั้งของฉันนั้นใช้ Python และ Numpy ดังนั้นการใช้การดำเนินการเวกเตอร์สามารถลดเวลาในการคำนวณได้อย่างน่าทึ่ง การหาเวกเตอร์ของการไล่สีแบบแบทช์นั้นค่อนข้างตรงไปตรงมา อย่างไรก็ตามในกรณีของการไล่ระดับสีแบบสุ่มสุ่มฉันไม่สามารถหาวิธีที่จะหลีกเลี่ยงการวนรอบนอกที่วนซ้ำผ่านตัวอย่างทั้งหมดในแต่ละยุค
ไม่มีใครรู้ว่าการใช้เวกเตอร์ของการไล่ระดับสีแบบสุ่มสุ่ม?
แก้ไข : ฉันถูกถามว่าทำไมฉันถึงต้องการใช้การไล่ระดับสีแบบออนไลน์ถ้าขนาดของชุดข้อมูลของฉันได้รับการแก้ไข
จาก [1] เราจะเห็นได้ว่าการไล่ระดับสีแบบออนไลน์นั้นช้ากว่าการไล่ระดับสีแบบแบทช์เป็นค่าต่ำสุดของต้นทุนเชิงประจักษ์ อย่างไรก็ตามมันมาบรรจบกันได้เร็วขึ้นจนถึงค่าต่ำสุดที่คาดไว้ซึ่งวัดประสิทธิภาพทั่วไป ฉันต้องการทดสอบผลกระทบของผลลัพธ์ทางทฤษฎีเหล่านี้ในปัญหาเฉพาะของฉันโดยใช้การตรวจสอบข้าม หากไม่มีการใช้งาน vectorized แล้วโค้ดโคตรลาดของฉันออนไลน์จะช้ากว่าโคตรเกรเดียนต์ของแบทช์ ที่เพิ่มขึ้นอย่างน่าทึ่งเวลาที่ใช้ในกระบวนการตรวจสอบข้ามที่จะแล้วเสร็จ
แก้ไข : ฉันรวมที่นี่ pseudocode ของการดำเนินการสืบเชื้อสายการไล่ระดับสีแบบออนไลน์ของฉันตามที่เพื่อนร้องขอ ฉันกำลังแก้ปัญหาการถดถอย
Method: on-line gradient descent (regression)
Input: X (nxp matrix; each line contains a training sample, represented as a length-p vector), Y (length-n vector; output of the training samples)
Output: A (length-p+1 vector of coefficients)
Initialize coefficients (assign value 0 to all coefficients)
Calculate outputs F
prev_error = inf
error = sum((F-Y)^2)/n
it = 0
while abs(error - prev_error)>ERROR_THRESHOLD and it<=MAX_ITERATIONS:
Randomly shuffle training samples
for each training sample i:
Compute error for training sample i
Update coefficients based on the error above
prev_error = error
Calculate outputs F
error = sum((F-Y)^2)/n
it = it + 1
[1] "การเรียนรู้ออนไลน์ขนาดใหญ่", L. Bottou, Y. Le Cunn, NIPS 2003