ชี้แจงเกี่ยวกับกฎ Perceptron เทียบกับการไล่สีไล่ระดับและการไล่สีแบบไล่ระดับ Stochastic


15

ฉันทดลองใช้งาน Perceptron ต่างกันเล็กน้อยและต้องการตรวจสอบให้แน่ใจว่าฉันเข้าใจ "การทำซ้ำ" อย่างถูกต้องหรือไม่

กฎ perceptron ดั้งเดิมของ Rosenblatt

เท่าที่ฉันเข้าใจในอัลกอริทึม Perceptron แบบคลาสสิกของ Rosenblatt น้ำหนักถูกปรับปรุงพร้อมกันหลังจากทุกตัวอย่างการฝึกอบรมผ่าน

Δw(t+1)=Δw(t)+η(targetactual)xi

ที่etaคือกฎการเรียนรู้ที่นี่ และเป้าหมายและที่เกิดขึ้นจริงมีทั้งเกณฑ์ (-1 หรือ 1) ฉันใช้มันเป็น 1 ซ้ำ = 1 ผ่านตัวอย่างการฝึกอบรม แต่เวกเตอร์น้ำหนักถูกปรับปรุงหลังจากแต่ละตัวอย่างการฝึกอบรม

และฉันคำนวณค่า "จริง" เป็น

sign(wwTxx)=sign(w0+w1x1+...+wdxd)

โคตรลาดลง

Δw(t+1)=Δw(t)+η(targetactual)xi

อย่างไรก็ตามเช่นเดียวกับกฎ perceptron targetและactualไม่ได้ถูกกำหนดค่า แต่เป็นค่าจริง นอกจากนี้ฉันนับ "ซ้ำ" เป็นเส้นทางเหนือตัวอย่างการฝึกอบรม

ทั้ง SGD และกฎ perceptron แบบคลาสสิกมาบรรจบกันในกรณีที่แยกกันไม่ได้เป็นเส้นตรงนี้อย่างไรก็ตามฉันกำลังมีปัญหากับการใช้การไล่ลงของการไล่ระดับสี

โคตรลาด

ที่นี่ฉันไปดูตัวอย่างการฝึกอบรมและสรุปการเปลี่ยนแปลงน้ำหนักสำหรับการผ่าน 1 ตัวอย่างการฝึกอบรมและอัปเดตน้ำหนักหลังจากนั้นเช่น

สำหรับแต่ละตัวอย่างการฝึกอบรม:

Δwnew+=Δw(t)+η(targetactual)xi

...

หลังจาก 1 ผ่านชุดฝึกอบรม:

Δw+=Δwnew

ฉันสงสัยว่าถ้าสมมติฐานนี้ถูกต้องหรือหากฉันขาดอะไร ฉันลองอัตราการเรียนรู้ที่หลากหลาย (มากถึงเล็กมาก) แต่ก็ไม่สามารถทำให้มันแสดงสัญญาณการลู่เข้าได้ ดังนั้นฉันสงสัยว่าฉันเข้าใจผิด sth ที่นี่

ขอบคุณเซบาสเตียน

คำตอบ:


20

Δ

Perceptron:

ww(t+1)=ww(t)+ηt(y(i)y^(i))xx(i)

y^(i)=sign(wwxx(i))ith

สิ่งนี้สามารถดูได้เป็นวิธีการสืบเชื้อสาย subochient subgradient ในฟังก์ชั่น "perceptron loss" ต่อไปนี้:

การสูญเสีย Perceptron:

Lww(y(i))=max(0,y(i)wwxx(i))

Lww(y(i))={0}, if y(i)wwxx(i)>0{y(i)xx(i)}, if y(i)wwxx(i)<0[1,0]×y(i)xx(i), if wwxx(i)=0

เนื่องจาก perceptron เป็นรูปแบบของ SGD แล้วฉันไม่แน่ใจว่าทำไมการอัปเดต SGD ควรแตกต่างจากการปรับปรุง perceptron วิธีที่คุณเขียนขั้นตอนที่ SGD ด้วยค่าที่ไม่ได้เป็นเกณฑ์คุณจะสูญเสียถ้าคุณทำนายคำตอบที่ถูกต้องเกินไป เลวร้าย.

ขั้นตอนการไล่ระดับแบตช์ของคุณไม่ถูกต้องเนื่องจากคุณใช้ "+ =" เมื่อคุณควรใช้ "=" น้ำหนักปัจจุบันมีการเพิ่มเช่นการฝึกอบรมแต่ละ กล่าวอีกนัยหนึ่งวิธีที่คุณเขียน

ww(t+1)=ww(t)+i=1n{ww(t)ηtLww(t)(y(i))}

สิ่งที่ควรเป็นคือ:

ww(t+1)=ww(t)ηti=1nLww(t)(y(i))

ηt=η0t


wwxx(i)=0L=[1,0]×y(i)xx(i)00Lww=00y(i)xx(i)L

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


ขอบคุณแซมและฉันขอโทษสำหรับคำถามยุ่ง ๆ ของฉัน ฉันไม่รู้ว่า delta มาจากไหน แต่ "+ =" เป็นสิ่งที่ผิดพลาด ฉันมองข้ามส่วนนั้นไปโดยสิ้นเชิง ขอบคุณสำหรับคำตอบอย่างละเอียด!
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.