ทำไมกลับเผยแพร่ผ่านเวลาใน RNN


14

ในเครือข่ายประสาทที่เกิดขึ้นอีกคุณมักจะส่งต่อการแพร่กระจายผ่านหลายขั้นตอน "ปลด" เครือข่ายและจากนั้นกลับแพร่กระจายไปตามลำดับของอินพุต

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

อัปเดต: ฉันเพิ่มคำตอบ


ทิศทางที่น่าสนใจในการทำวิจัยนี้คือการเปรียบเทียบผลลัพธ์ที่คุณประสบความสำเร็จกับปัญหาของคุณกับการเปรียบเทียบที่ตีพิมพ์ในวรรณกรรมเกี่ยวกับปัญหา RNN มาตรฐาน นั่นจะทำให้บทความที่ยอดเยี่ยมจริงๆ
Sycorax พูดว่า Reinstate Monica

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

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

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

คำตอบ:


4

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


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

ฉันไม่ได้อ่านส่วนนั้นและคุณถูกต้อง แบบจำลองที่ฉันใช้นั้นแท้จริงแล้วคือ "หลายต่อหลาย" ทางด้านขวาสุด ฉันสันนิษฐานว่าในส่วน "หนึ่งต่อหนึ่ง" มีสิ่งเหล่านี้เชื่อมต่อกันอยู่มากมายและภาพวาดเพิ่งปล่อยออกมา แต่ที่จริงแล้วเป็นหนึ่งในตัวเลือกทางด้านขวาสุดที่ฉันไม่ได้สังเกตเห็น (มันแปลกที่มีหนึ่งในนั้นในบล็อกเกี่ยวกับ RNN ดังนั้นฉันคิดว่าพวกเขาทั้งหมดเกิดขึ้นอีก) ฉันจะแก้ไขส่วนนั้นของคำตอบเพื่อให้เข้าใจมากขึ้น
Frobot

ฉันคิดว่าเป็นกรณีนั่นคือเหตุผลที่ฉันยืนยันที่จะเห็นฟังก์ชั่นการสูญเสียของคุณ ถ้ามันหลายหลายสูญเสียของคุณจะคล้ายกับและก็เหมือนกัน RNN และคุณขยายพันธุ์กำลัง / inputing ทั้งลำดับ แต่แล้วก็ตัดทอน BPTT คือคุณ' d คำนวณส่วนสีแดงในโพสต์ของฉัน แต่ไม่ชดเชยเพิ่มเติม อีRRโอR=Σเสื้อ(Yเสื้อ-Y^เสื้อ)2
ragulpr

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

เพียงโพสต์รหัสของคุณฉันไม่ได้คาดเดาอีกต่อไปนี่เป็นเรื่องโง่
ragulpr

2

RNN เป็น Deep Neural Network (DNN) ซึ่งแต่ละชั้นอาจรับอินพุตใหม่ แต่มีพารามิเตอร์เดียวกัน BPT เป็นคำแฟนซีสำหรับการแพร่กระจายย้อนกลับบนเครือข่ายซึ่งเป็นคำแฟนซีสำหรับการไล่ระดับสี

บอกว่า RNN เอาท์พุทYในแต่ละขั้นตอนและ อีR R o R T = ( Y T - Y T ) 2Y^เสื้อ

อีRRโอRเสื้อ=(Yเสื้อ-Y^เสื้อ)2

เพื่อเรียนรู้น้ำหนักเราต้องการการไล่ระดับสีสำหรับฟังก์ชันเพื่อตอบคำถาม"การเปลี่ยนแปลงของพารามิเตอร์มีผลต่อฟังก์ชันการสูญเสียมากแค่ไหน" และย้ายพารามิเตอร์ไปในทิศทางที่กำหนดโดย:

อีRRโอRเสื้อ=-2(Yเสื้อ-Y^เสื้อ)Y^เสื้อ

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

ใช้เครือข่ายเลเยอร์หนึ่งเดียวที่เรียบง่ายเพื่อดูสิ่งนี้อย่างชัดเจน:

Y^เสื้อ+1=(a+xเสื้อ+Y^เสื้อ)aY^เสื้อ+1='(a+xเสื้อ+Y^เสื้อ)aY^เสื้อY^เสื้อ+1='(a+xเสื้อ+Y^เสื้อ)(xเสื้อ+Y^เสื้อ)Y^เสื้อ+1='(a+xเสื้อ+Y^เสื้อ)(Y^เสื้อ+Y^เสื้อ)Y^เสื้อ+1='(a+xเสื้อ+Y^เสื้อ)([0xเสื้อY^เสื้อ]+Y^เสื้อ)

ด้วยอัตราการเรียนรู้ขั้นตอนการฝึกอบรมหนึ่งแล้ว: [ ~ ~ ~ ][ ] + δ ( Y T - Y T ) Yเสื้อδ

[a~b~c~][abc]+δ(yty^t)y^t

สิ่งที่เราเห็นก็คือว่าในการคำนวณที่คุณต้องการในการคำนวณคือม้วนออกYเสื้อ สิ่งที่คุณเสนอคือการไม่สนใจส่วนสีแดงคำนวณส่วนสีแดงสำหรับtแต่จะไม่เรียกเก็บเพิ่มเติม ฉันคิดว่าการสูญเสียของคุณเป็นอย่างไรy^t+1y^tt

error=t(yty^t)2

บางทีแต่ละขั้นตอนจะมีส่วนร่วมในทิศทางที่หยาบซึ่งเพียงพอในการรวม? สิ่งนี้สามารถอธิบายผลลัพธ์ของคุณ แต่ฉันสนใจที่จะรับฟังเพิ่มเติมเกี่ยวกับวิธี / ฟังก์ชั่นการสูญเสียของคุณ! และจะสนใจในการเปรียบเทียบกับการประทับเวลาสองครั้งที่หน้าต่าง ANN

edit4: หลังจากอ่านความคิดเห็นดูเหมือนว่าสถาปัตยกรรมของคุณไม่ใช่ RNN

ht Statefull

แบบจำลองของคุณ: ไร้รัฐ - สถานะที่ซ่อนสร้างใหม่ในแต่ละขั้นตอนการแก้ไข 2 stateless : เพิ่มผู้อ้างอิงเพิ่มเติมไปยัง DNNs edit3: gradstep คงที่และการแก้ไขสัญลักษณ์ 5: แก้ไขการตีความโมเดลของคุณหลังจากคำตอบ / การชี้แจง


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

1
ฉันกำลังทำงานกับการใช้แบบจำลองเดียวกันของฉันและฝึกกับ BPTT อีกครั้งเนื่องจากเราพูดว่ามีการเปรียบเทียบที่ชัดเจน ฉันยังได้ฝึกฝนแบบจำลองโดยใช้อัลกอริทึม "ขั้นตอนเดียว" เพื่อทำนายว่าราคาหุ้นจะสูงขึ้นหรือลดลงในวันถัดไปซึ่งได้รับความแม่นยำที่เหมาะสมดังนั้นฉันจะมีสองรุ่นที่แตกต่างกันเพื่อเปรียบเทียบ BPTT
Frobot

หากคุณส่งต่อไปข้างหน้าเพียงขั้นตอนเดียว ANN สองชั้นนี้ไม่ได้มีการป้อนข้อมูลคุณลักษณะของขั้นตอนสุดท้ายไปที่เลเยอร์แรกให้ป้อนคุณสมบัติไปยังขั้นตอนปัจจุบันที่เลเยอร์ที่สอง แต่มีน้ำหนัก / พารามิเตอร์เดียวกันสำหรับทั้งสองเลเยอร์ ฉันคาดหวังผลลัพธ์ที่คล้ายกันหรือดีกว่าด้วย ANN ที่รับอินพุตY^เสื้อ+1=(xเสื้อ,xเสื้อ-1)นั่นคือใช้ขนาดเวลาที่แน่นอนของหน้าต่าง 2 หากดำเนินไปข้างหน้าเพียงหนึ่งขั้นตอนจะสามารถเรียนรู้การพึ่งพาระยะยาวได้หรือไม่
ragulpr

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

ดูโพสต์ที่อัปเดตของฉัน สถาปัตยกรรมของคุณไม่ได้เป็น RNN มันไร้สัญชาติดังนั้นการพึ่งพาในระยะยาวที่ไม่ได้ถูกอบเข้าสู่คุณสมบัติอย่างชัดเจน การคาดการณ์ก่อนหน้าไม่มีผลต่อการทำนายอนาคต คุณสามารถเห็นสิ่งนี้ราวกับว่าY^เสื้อ-2Y^เสื้อ=0สำหรับสถาปัตยกรรมของคุณ BPTT มีทฤษฎีเหมือนกับ BP แต่เล่นบนสถาปัตยกรรม RNN ดังนั้นคุณทำไม่ได้ แต่ฉันเห็นว่าคุณหมายถึงอะไรและคำตอบคือไม่ จะน่าสนใจมากที่จะเห็นการทดลองใน stateful RNN แต่ OneStep BPTT แม้ว่า ^^
ragulpr

1

"การแฉผ่านเวลา" เป็นเพียงการประยุกต์กฎลูกโซ่

dF(ก.(x),ชั่วโมง(x),ม.(x))dx=Fก.dก.dx+Fชั่วโมงdชั่วโมงdx+Fม.dม.dx

เอาต์พุตของ RNN ในขั้นตอนเวลา เสื้อ, Hเสื้อ เป็นฟังก์ชั่นของพารามิเตอร์ θการป้อนข้อมูล xเสื้อ และสถานะก่อนหน้า Hเสื้อ-1 (โปรดทราบว่าแทน Hเสื้อ อาจถูกเปลี่ยนอีกครั้งในขั้นตอนเวลา เสื้อเพื่อให้ได้ผลลัพธ์ที่ไม่สำคัญที่นี่) จำเป้าหมายของการไล่ระดับสี: ให้ฟังก์ชันข้อผิดพลาดบางอย่างLลองดูที่ข้อผิดพลาดของเราสำหรับตัวอย่างปัจจุบัน (หรือตัวอย่าง) แล้วลองปรับ θ ในลักษณะที่ให้ตัวอย่างเดียวกันอีกครั้งข้อผิดพลาดของเราจะลดลง

ทำยังไงกันแน่ θนำไปสู่ข้อผิดพลาดในปัจจุบันของเรา? เราได้ผลรวมถ่วงน้ำหนักกับข้อมูลปัจจุบันของเราxเสื้อดังนั้นเราจะต้อง backpropagate ผ่านอินพุตเพื่อค้นหา θa(xเสื้อ,θ)เพื่อหาวิธีปรับตัว θ. แต่ข้อผิดพลาดของเราก็เป็นผลมาจากการมีส่วนร่วมจากHเสื้อ-1ซึ่งเป็นหน้าที่ของ θใช่มั้ย ดังนั้นเราต้องหาคำตอบθHเสื้อ-1ซึ่งเป็นหน้าที่ของ xเสื้อ-1, θ และ Hเสื้อ-2. แต่Hเสื้อ-2 ยังเป็นฟังก์ชั่นหน้าที่ของ θ. และอื่น ๆ


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

ความรู้สึกเดียวที่คุณสามารถป้อนได้ในหลายอินพุตพร้อมกันใน RNN คือการป้อนตัวอย่างการฝึกอบรมหลาย ๆ ตัวอย่างเป็นส่วนหนึ่งของแบทช์ ขนาดแบตช์นั้นไม่มีกฎเกณฑ์และการประกันการบรรจบกันสำหรับขนาดใดก็ได้ แต่ขนาดแบตช์ที่สูงกว่าอาจนำไปสู่การประมาณค่าการไล่ระดับสีที่แม่นยำยิ่งขึ้นและการคอนเวอร์เจนซ์ที่เร็วขึ้น
Matthew Hampsey

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

ฉันคิดว่าต้องการคำอธิบายบางอย่างที่นี่ เมื่อคุณพูดว่า "อินพุต" คุณหมายถึงตัวอย่างการฝึกอบรมหลายรายการหรือคุณอ้างถึงขั้นตอนหลายขั้นตอนภายในตัวอย่างการฝึกอบรมเดียวหรือไม่
Matthew Hampsey

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