ฉันจะคำนวณคำศัพท์เดลต้าของเลเยอร์ Convolutional ได้อย่างไรเนื่องจากคำเดลต้าและน้ำหนักของเลเยอร์ Convolutional ก่อนหน้า


10

ฉันกำลังพยายามฝึกโครงข่ายใยประสาทเทียมด้วยชั้นสอง convolutional (c1, c2) และสองชั้นที่ซ่อนอยู่ (c1, c2) ฉันใช้วิธีการ backpropagation มาตรฐาน ใน backward pass ฉันคำนวณระยะเวลาข้อผิดพลาดของเลเยอร์ (เดลต้า) ตามข้อผิดพลาดของเลเยอร์ก่อนหน้านี้น้ำหนักของเลเยอร์ก่อนหน้าและการไล่ระดับสีของการเปิดใช้งานตามฟังก์ชั่นการเปิดใช้งานของเลเยอร์ปัจจุบัน โดยเฉพาะอย่างยิ่งเดลต้าของเลเยอร์ l มีลักษณะดังนี้:

delta(l) = (w(l+1)' * delta(l+1)) * grad_f_a(l)

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

ตอนนี้ฉันมีคำเดลต้าของ c2 - ซึ่งเป็นเมทริกซ์ขนาด 4 มิติ (featureMapSize, featureMapSize, filterNum, patternNum) นอกจากนี้ฉันมีน้ำหนัก c2 ซึ่งเป็นเมทริกซ์ 3 มิติของขนาด (filterSize, filterSize, filterNum)

ด้วยสองเทอมนี้และการไล่ระดับสีของการเปิดใช้งาน c1 ฉันต้องการคำนวณเดลต้าของ c1

เรื่องสั้นสั้น:

เมื่อกำหนดระยะเดลต้าของเลเยอร์ Convolutional ก่อนหน้านี้และน้ำหนักของเลเยอร์นั้นฉันจะคำนวณระยะเดลต้าของเลเยอร์ Convolutional ได้อย่างไร

คำตอบ:


6

ฉันแรกพบข้อผิดพลาดสำหรับชั้น convolutional ด้านล่างเพื่อความง่ายสำหรับอาร์เรย์หนึ่งมิติ (input) ซึ่งสามารถโอนไปยังหลายมิติได้อย่างง่ายดายแล้ว:

เราสมมุติเอาไว้ที่นี่ว่า Yล.-1 ความยาว ยังไม่มีข้อความ เป็นอินพุตของ ล.-1-th Conv ชั้น,ม. คือขนาดเคอร์เนลของน้ำหนัก W แสดงถึงน้ำหนักแต่ละครั้งด้วย Wผม และผลลัพธ์คือ xล..
ดังนั้นเราสามารถเขียน (บันทึกการรวมจากศูนย์):

xผมล.=Σa=0ม.-1WaYa+ผมล.-1
ที่ไหน Yผมล.=(xผมล.) และ ฟังก์ชั่นการเปิดใช้งาน (เช่น sigmoidal) ด้วยสิ่งนี้เราสามารถพิจารณาฟังก์ชันข้อผิดพลาดได้E และฟังก์ชันข้อผิดพลาดที่เลเยอร์ convolutional (หนึ่งในเลเยอร์ก่อนหน้าของคุณ) ที่กำหนดโดย E/Yผมล.. ตอนนี้เราต้องการทราบการพึ่งพาของข้อผิดพลาดในหนึ่งตุ้มน้ำหนักในเลเยอร์ก่อนหน้า:
EWa=Σa=0ยังไม่มีข้อความ-ม.Exผมล.xผมล.Wa=Σa=0ยังไม่มีข้อความ-ม.EWaYผม+aล.-1

ที่เรามีผลรวมมากกว่าการแสดงออกทั้งหมดที่ Wa เกิดขึ้นซึ่งก็คือ ยังไม่มีข้อความ-ม.. โปรดทราบว่าเรารู้คำสุดท้ายเกิดขึ้นจากข้อเท็จจริงที่ว่าxผมล.Wa=Yผม+aล.-1ซึ่งคุณสามารถดูได้จากสมการแรก
ในการคำนวณการไล่ระดับสีเราจำเป็นต้องรู้เทอมแรกซึ่งสามารถคำนวณได้โดย:
Exผมล.=EYผมล.Yผมล.xผมล.=EYผมล.xผมล.(xผมล.)
โดยที่เทอมแรกอีกครั้งเป็นข้อผิดพลาดในเลเยอร์ก่อนหน้าและ ฟังก์ชั่นการเปิดใช้งานแบบไม่เชิงเส้น

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

δaล.-1=EYผมล.-1=Σa=0ม.-1Exผม-aล.xผม-aล.Yผมล.-1=Σa=0ม.-1Exผม-aล.Waล.ผมพีพีอีd
โปรดทราบว่าขั้นตอนสุดท้ายนั้นสามารถเข้าใจได้ง่ายเมื่อเขียนลงไป xผมล.-s wrt the Yผมล.-1-s ล.ผมพีพีอีd หมายถึง maxtrix น้ำหนัก transposed (T)

ดังนั้นคุณสามารถคำนวณข้อผิดพลาดในเลเยอร์ถัดไปได้โดย (ในรูปแบบเวคเตอร์):

δล.=(Wล.)Tδล.+1'(xล.)

ซึ่งจะกลายเป็นชั้น convolutional และ subsampling:

δล.=ยูพีsaม.พีล.อี((Wล.)Tδล.+1)'(xล.)
ที่ไหน ยูพีsaม.พีล.อี การดำเนินการเผยแพร่ข้อผิดพลาดผ่านเลเยอร์สูงสุดร่วมกัน

โปรดเพิ่มหรือแก้ไขฉัน!

สำหรับการอ้างอิงดู:

http://ufldl.stanford.edu/tutorial/supervised/ConvolutionalNeuralNetwork/ http://andrew.gibiansky.com/blog/machine-learning/convolutional-neural-networks/

และสำหรับการติดตั้ง C ++ (โดยไม่ต้องมีการติดตั้ง): https://github.com/nyanp/tiny-cnn#supported-networks

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