Backprop ผ่านเลเยอร์ Max-Pooling?


62

นี่เป็นคำถามเชิงแนวคิดขนาดเล็กที่จู้จี้ฉันอยู่ครู่หนึ่ง: เราจะเผยแพร่กลับผ่านเลเยอร์ max-pooling ในเครือข่ายประสาทได้อย่างไร

ฉันเจอเลเยอร์แบบรวมกำไรสูงสุดในขณะที่ทำตามบทช่วยสอนนี้สำหรับห้องสมุด nn ของ Torch 7 ไลบรารีจะสรุปการคำนวณการไล่ระดับสีและส่งต่อสำหรับแต่ละเลเยอร์ของเครือข่ายที่ลึก ฉันไม่เข้าใจวิธีการคำนวณการไล่ระดับสีสำหรับเลเยอร์ที่รวมกำไรสูงสุด

ฉันรู้ว่าถ้าคุณมีอินพุตเข้าสู่เซลล์ประสาทของเลเยอร์ดังนั้น (นิยามเป็น ) มอบให้โดย: zililδilδil=Ezil

δil=θ(zil)jδjl+1wi,jl,l+1

ดังนั้นเลเยอร์ที่รวมกำไรสูงสุดจะได้รับของเลเยอร์ถัดไปตามปกติ แต่เนื่องจากฟังก์ชั่นการเปิดใช้งานสำหรับเซลล์ประสาท max-pooling ใช้เวลาในเวกเตอร์ของค่า (ซึ่งมัน maxes) เป็นอินพุตไม่ใช่หมายเลขเดียวอีกต่อไป แต่เวกเตอร์ (จะต้องถูกแทนที่ด้วย ) นอกจากนี้ซึ่งเป็นฟังก์ชันสูงสุดแล้วยังไม่สามารถแยกความแตกต่างได้ด้วยความเคารพของอินพุตδjl+1δilθ(zjl)θ({zjl})θ

ดังนั้น .... มันจะออกมาดียังไง

คำตอบ:


58

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

ดังนั้นในตัวอย่างของคุณจะเป็นเวกเตอร์ของศูนย์ทั้งหมดยกเว้นว่าตำแหน่ง th จะได้รับค่าโดยที่δili{δjl+1}i=argmaxi(zil)


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

แต่คุณไม่จำเป็นต้องคูณกับอนุพันธ์ของฟังก์ชั่นการเปิดใช้งานหรือไม่?
Jason

1
@Jason: ฟังก์ชั่น max เป็นแบบเส้นตรงในพื้นที่สำหรับการเปิดใช้งานที่มีค่าสูงสุดดังนั้นอนุพันธ์ของมันจึงเป็นค่าคงที่ 1 สำหรับการเปิดใช้งานที่ไม่ได้ผ่านมันเป็น 0 นั่นเป็นแนวคิดที่คล้ายกันมากกับการแยก ReLU (x ) = ฟังก์ชั่นการเปิดใช้งานสูงสุด (0, x)
Chrigi

stride น้อยกว่าความกว้างของเคอร์เนลสำหรับการรวมกำไรสูงสุดคืออะไร?
Vatsal

1
คำตอบที่ดี! กรณีขอบที่หลายรายการมีค่าสูงสุดเท่ากัน (ตัวอย่างเช่น 2 ค่ามี 0 จาก ReLU และอีกสองรายการเป็นค่าลบ)
DankMasterDan

6

รวมกำไรสูงสุด

สมมติว่าคุณมีเลเยอร์ P ซึ่งอยู่ด้านบนของเลเยอร์ PR จากนั้นรหัสผ่านจะเป็นดังนี้:

Pi=f(jWijPRj) ,

ที่คือการกระตุ้นของ ith เซลล์ประสาทของเลเยอร์ P, f คือฟังก์ชันการเปิดใช้งานและ W คือน้ำหนัก ดังนั้นหากคุณได้รับสิ่งนั้นโดยกฎลูกโซ่คุณจะได้รับการไล่ระดับสีดังนี้:Pi

grad(PRj)=igrad(Pi)fWij{IJ}

แต่ตอนนี้ถ้าคุณมีพูลรวมสูงสุด สำหรับ max neuron และสำหรับ neurons อื่นทั้งหมดดังนั้นสำหรับ max neuron ใน layer ก่อนหน้าและสำหรับ other เซลล์ประสาท ดังนั้น:f=idf=0f=1f=0

grad(PRmax neuron)=igrad(Pi)Wi max neuron ,

grad(PRothers)=0.


2

@ คำตอบของ Shinvu เขียนได้ดีฉันอยากจะชี้ไปที่วิดีโอที่อธิบายการไล่ระดับสีของการดำเนินการ Max ()และสิ่งนี้อยู่ในกราฟการคำนวณที่เข้าใจง่าย!

ในขณะที่ใช้งานการดำเนินการ maxpool (โหนดการคำนวณในกราฟการคำนวณ - สถาปัตยกรรม NN ของคุณ) เราต้องการฟังก์ชั่นที่สร้างเมทริกซ์ "มาสก์" ซึ่งคอยติดตามตำแหน่งที่เมทริกซ์สูงสุดอยู่ True (1) ระบุตำแหน่งสูงสุดใน X ส่วนรายการอื่น ๆ เป็น False (0) เราติดตามตำแหน่งสูงสุดเพราะนี่คือค่าอินพุตที่มีผลต่อผลลัพธ์ในที่สุดและดังนั้นจึงมีค่าใช้จ่าย Backprop คือการคำนวณการไล่ระดับสีด้วยความเคารพต่อค่าใช้จ่ายดังนั้นสิ่งใดก็ตามที่มีผลต่อต้นทุนสูงสุดควรมีการไล่ระดับสีที่ไม่ใช่ศูนย์ ดังนั้น backprop จะ "แพร่กระจาย" การไล่ระดับสีกลับสู่ค่าอินพุตเฉพาะที่มีผลต่อต้นทุน

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