ทำความเข้าใจว่าเลเยอร์ Convolutional ทำงานอย่างไร

Aug 18 2020

หลังจากทำงานร่วมกับ CNN โดยใช้ Keras และชุดข้อมูล Mnist สำหรับปัญหาการจดจำตัวเลขที่เขียนด้วยมือที่รู้จักกันดีฉันก็มีคำถามบางอย่างเกี่ยวกับการทำงานของเลเยอร์ Convolutional ฉันเข้าใจว่ากระบวนการ Convolution คืออะไร

คำถามแรกของฉันคืออะไรคือตัวกรอง? ฉันเข้าใจจุดประสงค์ของพวกเขา ใช้เพื่อทำแผนที่ขอบรูปร่าง ฯลฯ บนรูปภาพ แต่พวกเขาเริ่มต้นได้อย่างไร? มีค่าเริ่มต้นแบบสุ่มหรือมีตัวกรองภาพมาตรฐานที่กำลังใช้งานอยู่หรือไม่? หากเริ่มต้นด้วยค่าสุ่มค่าควรจะเปลี่ยนไปในกระบวนการฝึกอบรมของเครือข่าย หากเป็นเช่นนั้นคำถามใหม่จะถูกสร้างขึ้นใครบางคนจะย้อนกลับตัวกรองของเลเยอร์คอนโวลูชั่นได้อย่างไร อัลกอริทึมเบื้องหลังกระบวนการนี้คืออะไร?

ประการที่สองฉันสังเกตเห็นว่าฉันสามารถเพิ่มฟังก์ชันการเปิดใช้งานให้กับเลเยอร์ Convolutional ใน Keras ได้ เมทริกซ์ทั้งหมดของเอาต์พุตถูกส่งผ่านฟังก์ชันการเปิดใช้งานหรือไม่? การใช้ฟังก์ชันการเปิดใช้งานเปลี่ยนแปลงกระบวนการเรียนรู้ของเลเยอร์คอนโวลูชั่นอย่างไร

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

คำตอบ

11 AkshaySehgal Aug 18 2020 at 20:34

มีฟิลเตอร์อะไรบ้าง?

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

แต่พวกเขาเริ่มต้นได้อย่างไร? มีค่าเริ่มต้นแบบสุ่มหรือมีตัวกรองภาพมาตรฐานที่กำลังใช้งานอยู่หรือไม่?

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

มีกลยุทธ์การเริ่มต้นที่แตกต่างกันมากมาย

  • ตัวอย่างจากการแจกแจงเช่นการแจกแจงแบบปกติหรือสม่ำเสมอ
  • ตั้งค่าทั้งหมดเป็น 1 หรือ 0 หรือค่าคงที่อื่น
  • นอกจากนี้ยังมีวิธีการฮิวริสติกบางวิธีที่ดูเหมือนจะทำงานได้ดีในทางปฏิบัติวิธีที่ได้รับความนิยมคือ glorot initializer ที่ตั้งชื่อตาม Xavier Glorot ซึ่งเป็นผู้แนะนำพวกเขาที่นี่ Glorot initializers ยังสุ่มตัวอย่างจากการแจกแจง แต่ตัดทอนค่าตามความซับซ้อนของเคอร์เนล
  • สำหรับเมล็ดข้าวบางประเภทมีค่าเริ่มต้นอื่น ๆ ที่ดูเหมือนจะทำงานได้ดี ดูตัวอย่างนี้บทความ

หากเริ่มต้นด้วยค่าสุ่มค่าควรจะเปลี่ยนไปในกระบวนการฝึกอบรมของเครือข่าย หากเป็นเช่นนั้นคำถามใหม่จะถูกสร้างขึ้นใครบางคนจะย้อนกลับตัวกรองของเลเยอร์คอนโวลูชั่นได้อย่างไร อัลกอริทึมเบื้องหลังกระบวนการนี้คืออะไร?

พิจารณาการดำเนินการ Convolution เช่นเดียวกับฟังก์ชันระหว่างภาพอินพุตและเมทริกซ์ของน้ำหนักสุ่ม เมื่อคุณปรับฟังก์ชั่นการสูญเสียของแบบจำลองของคุณให้เหมาะสมน้ำหนัก (และอคติ) จะได้รับการอัปเดตเพื่อให้เริ่มก่อตัวเป็นคุณสมบัติระยะห่างที่แยกแยะได้ดีมาก นั่นคือวัตถุประสงค์ของ backpropogation ซึ่งดำเนินการกับเครื่องมือเพิ่มประสิทธิภาพที่คุณกำหนดไว้ในสถาปัตยกรรมโมเดลของคุณ ในทางคณิตศาสตร์มีแนวคิดอีกสองสามประการที่กล่าวถึงวิธีที่แบ็คโพรปเกิดขึ้นในการดำเนินการ Convolution (Convolution เต็มรูปแบบพร้อมการหมุน 180 ครั้ง) หากคุณสนใจโปรดตรวจสอบลิงค์นี้

เมทริกซ์ทั้งหมดของเอาต์พุตถูกส่งผ่านฟังก์ชันการเปิดใช้งานหรือไม่? การใช้ฟังก์ชันการเปิดใช้งานเปลี่ยนกระบวนการเรียนรู้ของเลเยอร์ Convolutional อย่างไร

ลองคิดว่าฟังก์ชันการเปิดใช้งานเป็นเพียงฟังก์ชัน "มาตราส่วน" ที่ไม่ใช่เชิงเส้น เมื่อป้อนข้อมูลแล้วงานของฟังก์ชันการเปิดใช้งานคือการ "บีบ" ข้อมูลให้อยู่ในช่วงที่กำหนด (ตัวอย่าง -> ปล่อยอินพุตใหม่ลงในช่วง (0, inf) โดยเพียงแค่ตั้งค่าเชิงลบทั้งหมดเป็นศูนย์และส่งกลับ ทุกค่าบวกตามที่เป็นอยู่)

ตอนนี้ในเครือข่ายประสาทเทียมการกระตุ้นจะถูกนำไปใช้ที่โหนดซึ่งใช้ฟังก์ชันเชิงเส้นเหนือคุณลักษณะอินพุตเมทริกซ์น้ำหนักและอคติ (mx + c) ดังนั้นในกรณีของ CNN ก็เช่นเดียวกัน เมื่อฟอร์เวิร์ดพาสของคุณรับอิมเมจอินพุตแล้วให้ทำฟังก์ชัน Convolution ทับโดยใช้ฟิลเตอร์ (เมทริกซ์น้ำหนัก) เพิ่มอคติจากนั้นเอาต์พุตจะถูกส่งไปยังฟังก์ชันการเปิดใช้งานเพื่อ 'squish' แบบไม่เป็นเชิงเส้นก่อนที่จะนำไปที่ ชั้นถัดไป

มันค่อนข้างง่ายที่จะเข้าใจว่าทำไมการเปิดใช้งานจึงช่วยได้ ถ้าผมมีโหนดที่ถ่มน้ำลายออกมาx1 = m0*x0+b0และถูกส่งไปยังโหนดซึ่งถ่มน้ำลายออกมาอีกx2 = m1*x1+b1ที่ผ่านไปข้างหน้าโดยรวมเป็นเพียงx2 = m1*(m0*x0+b0)+b1ซึ่งเป็นเช่นเดียวกับหรือx2 = (m1*m0*x0) + (m1*b0+b1) x2 = M*x0 + Bนี่แสดงให้เห็นว่าการซ้อนสมการเชิงเส้น 2 สมการให้สมการเชิงเส้นอีกอันดังนั้นในความเป็นจริงแล้วไม่จำเป็นต้องมี 2 โหนด แต่ฉันสามารถใช้เพียง 1 โหนดและใช้ค่า M และ B ใหม่เพื่อให้ได้ผลลัพธ์ x2 จาก x0

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

Convolutional Layer มีน้ำหนักและอคติเหมือนชั้นหนาแน่นหรือไม่?

ใช่. เพิ่มหลังจากเมทริกซ์น้ำหนัก (ตัวกรอง) ถูกนำไปใช้กับภาพอินพุตโดยใช้การดำเนินการ Convolutionconv(inp, filter)

เราคูณเมทริกซ์เอาต์พุตหลังจากกระบวนการ Convolution ด้วยเมทริกซ์น้ำหนักและเพิ่มอคติก่อนที่จะส่งผ่านฟังก์ชันกระตุ้นหรือไม่?

การดำเนินการ dot product จะกระทำระหว่างส่วนของภาพอินพุตและฟิลเตอร์ในขณะที่การแปลงภาพอินพุตขนาดใหญ่ขึ้น เมทริกซ์เอาต์พุตจะถูกเพิ่มด้วยอคติ (การแพร่ภาพ) และส่งผ่านฟังก์ชันการเปิดใช้งานไปยัง 'squish'

ถ้าเป็นจริงเราจะทำตามกระบวนการเดียวกันกับที่เราทำกับเลเยอร์ที่หนาแน่นเพื่อฝึกน้ำหนักและอคติเหล่านี้หรือไม่?

ใช่เราทำตามขั้นตอนเดียวกันในการส่งต่อยกเว้นว่ามีการดำเนินการใหม่ที่เพิ่มเข้ามาในส่วนผสมทั้งหมดซึ่งก็คือ Convolution มันเปลี่ยนพลวัตโดยเฉพาะอย่างยิ่งสำหรับการถอยหลัง แต่โดยพื้นฐานแล้วสัญชาตญาณโดยรวมยังคงเหมือนเดิม


ปมสำหรับสัญชาตญาณคือ -

  • อย่าสับสนระหว่างคุณสมบัติและตัวกรอง ตัวกรองคือสิ่งที่ช่วยให้คุณแยกคุณสมบัติ (รูปแบบพื้นฐาน) จากภาพอินพุตโดยใช้การดำเนินการเช่นจุด Conv. อคติและการเปิดใช้งาน
  • ตัวกรองแต่ละตัวช่วยให้คุณสามารถดึงแผนที่ 2 มิติของรูปแบบง่ายๆที่มีอยู่เหนือรูปภาพได้ (เช่นขอบ) หากคุณมีตัวกรอง 20 รายการคุณจะได้รับแผนที่คุณลักษณะ 20 รายการสำหรับภาพ 3 ช่องซึ่งซ้อนกันเป็นช่องในเอาต์พุต
  • คุณสมบัติดังกล่าวจำนวนมากซึ่งจับรูปแบบง่าย ๆ ที่แตกต่างกันได้เรียนรู้เป็นส่วนหนึ่งของกระบวนการฝึกอบรมและกลายเป็นคุณสมบัติพื้นฐานสำหรับเลเยอร์ถัดไป (ซึ่งอาจเป็น CNN อื่นหรือหนาแน่น)
  • การผสมผสานคุณสมบัติเหล่านี้ช่วยให้คุณสามารถดำเนินการสร้างโมเดลได้
  • ตัวกรองได้รับการฝึกฝนโดยการเพิ่มประสิทธิภาพเพื่อลดฟังก์ชันการสูญเสียโดยใช้ backprop เป็นไปตามเหตุผลย้อนหลัง:
      - How can I minimize my loss?
      - How can I find the best features that minimize the loss?
      - How can I find the best filters that generate the best features? 
      - What are the best weights and biases which give me the best filters?

นี่คือภาพอ้างอิงที่ดีที่ควรคำนึงถึงเมื่อใดก็ตามที่ทำงานกับ CNN (เพียงเพื่อเสริมสร้างสัญชาตญาณ)

หวังว่าจะตอบคำถามของคุณ

2 10xAI Aug 18 2020 at 22:22

ซีเอ็นเอ็นได้เรียนรู้วิธีการเดียวกันเรียนรู้เครือข่ายหนาแน่นประสาทเช่น Forwardpass และแพร่กระจายย้อนกลับ
สิ่งที่เราเรียนรู้ที่นี่มีน้ำหนักตัวกรอง

ดังนั้นคำตอบสำหรับคำถามของคุณ -

  • แต่พวกเขาเริ่มต้นได้อย่างไร? - เริ่มต้นมาตรฐาน เช่น glorot_uniform
  • แล้วค่าที่ควรจะได้รับการเปลี่ยนแปลงในกระบวนการฝึกอบรมของเครือข่าย ใช่
  • มีคนย้อนกลับตัวกรองของเลเยอร์คอนโวลูชั่นอย่างไร? อัลกอริทึมเบื้องหลังกระบวนการนี้คืออะไร? - เช่นเดียวกับ ANN Backpropagation กับ GradientDescent
  • ฉันสามารถเพิ่มฟังก์ชันการเปิดใช้งานให้กับเลเยอร์ Convolutional ใน Keras เมทริกซ์ทั้งหมดของเอาต์พุตถูกส่งผ่านฟังก์ชันการเปิดใช้งานหรือไม่? - ใช่เราเก็บ ReLU เกือบตลอดเวลา
  • การใช้ฟังก์ชันการเปิดใช้งานเปลี่ยนกระบวนการเรียนรู้ของเลเยอร์ Convolutional อย่างไร - ด้วยเหตุผลเดียวกับที่เราใช้ใน ANN นั่นคือ Non-linearity
  • Convolutional Layer มีน้ำหนักและอคติเหมือนชั้นหนาแน่นหรือไม่? - ใช่
  • ถ้าเป็นจริงเราจะทำตามกระบวนการเดียวกันกับที่เราทำกับเลเยอร์ที่หนาแน่นเพื่อฝึกน้ำหนักและอคติเหล่านี้หรือไม่? ใช่เพียงแค่เพิ่มแนวคิดของน้ำหนักที่ใช้ร่วมกัน / ตัวกรอง / การแปลงและการรวมกัน


ฉันจะพยายามอธิบายประเด็นสำคัญบางประการของ CNN เพื่อชี้แจงคำตอบข้างต้น -

  • ฟิลเตอร์แต่ละตัวทำการ Convolution ในระดับเสียง nD เช่น 3-D สำหรับ RGB
  • ดังนั้นจึงทำการคูณองค์ประกอบอย่างชาญฉลาดด้วยพิกเซลผลลัพธ์จะถูกสรุปและส่งผ่านฟังก์ชันการเปิดใช้งาน
  • สิ่งนี้จะกลายเป็นองค์ประกอบเดียวของแผนที่คุณลักษณะเดียว
  • แต่ละตัวกรองจะสร้างแผนที่คุณลักษณะหนึ่งรายการ
  • ความลึกของฟิลเตอร์จะเท่ากับจำนวนฟีเจอร์แม็พเช่นถ้าคุณใช้ 20 ฟิลเตอร์สำหรับภาพ RGB แรก มันจะสร้างแผนที่ 20 คุณลักษณะและถ้าคุณใช้ 5x5 ฟิลเตอร์ในชั้นนี้แล้วขนาดกรอง = 5x5x20
  • ตัวกรองแต่ละตัวจะเพิ่มพารามิเตอร์ = ขนาดเช่น 25 สำหรับตัวอย่างสุดท้าย
  • หากคุณต้องการเห็นภาพเหมือน NN ธรรมดา ๆ ดูภาพด้านล่าง ทีต้าทั้งหมดถูกคูณสรุปและส่งผ่านฟังก์ชันการเปิดใช้งาน Backpropagation เกิดขึ้นในลักษณะเดียวกับในเครือข่ายประสาทเทียมที่หนาแน่น


$\hspace{6cm}$เครดิตรูปภาพ - Jeremy Jordan


คุณสามารถอ่านข้อมูลอ้างอิงเหล่านี้เพื่อพัฒนาสัญชาตญาณขาวดำ
CS231n: Winter 2016
Jeremy Jordan บล็อก
Numpy Implementation

1 JoshPurtell Aug 18 2020 at 19:39

ในบางวิธีการชักจูงไม่ได้นำเสนอการออกจากสถาปัตยกรรมมาตรฐานอย่างสิ้นเชิง เนื่องจากการดำเนินการที่นำไปใช้กับอินพุตที่กรอง (สูงสุดต่ำสุดค่าเฉลี่ย ฯลฯ ) นั้นต่อเนื่องตัวกรองเหล่านี้จึงมีจำนวน "เลเยอร์" ที่สูญเสียไปของเครือข่าย คุณมีสิทธิ์ที่จะคิดว่าพารามิเตอร์ตัวกรองสามารถฝึกได้ - ดังนั้นตัวกรองที่เปลี่ยนรูปสี่เหลี่ยมจัตุรัส 2x2 ตาม [0,1,2,0] จากนั้นให้ผลตอบแทนสูงสุดในช่วงการฝึกหนึ่งครั้งอาจเปลี่ยนไปตาม [.1,. 9,1.7,0] และให้ผลตอบแทนสูงสุดในครั้งต่อไป การฝึกอบรมนี้สามารถทำได้โดยใช้ SGD คุณสามารถคิดว่าเมทริกซ์การเปลี่ยนแปลงแสดงผลเทียบเท่ากันเป็นชุดของน้ำหนักและอคติพร้อมกับฟังก์ชันแม้ว่ามันอาจจะไม่ได้สร้างอินสแตนซ์เช่นนี้ในทุกแพ็คเกจ (ฉันไม่ได้ใช้ keras)

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

ในเรื่องของฟังก์ชั่นการเปิดใช้งาน - พวกเขาเพียงแค่แนะนำผลลัพธ์ที่ไม่เป็นเชิงเส้นมากขึ้น นอกจากนี้หากเป็นแบบโมโนโทน (มักจะเป็นเช่นนั้น) พวกเขาควรจะสามารถสื่อสารกับการดำเนินการตัวกรองทั่วไปหลายอย่างเช่น max, min, mean ฯลฯ ดังนั้นเอาต์พุตของเลเยอร์จึงมีลักษณะเป็น Max (Relu (Filter (Input))) หรือ Relu (Max (Filter (Input))) โดยที่เคสก่อนหน้านี้อาจจะดูแปลก ๆ ไปหน่อย

leftaroundabout Aug 19 2020 at 16:29

คำถามแรกของฉันคืออะไรคือตัวกรอง?

Convention in Deep Learning คือการเรียกน้ำหนักที่ใช้ในการแปลงตัวกรองหรือเมล็ดที่มีความหมายเหมือนกัน ฟิลด์อื่น ๆ สร้างความแตกต่างระหว่างสองคำนี้ - ในหนังสือของฉันอาร์เรย์ของน้ำหนักคือเคอร์เนลและการดำเนินการที่ทำให้เกิดการแปลงด้วยน้ำหนักเหล่านั้นคือตัวกรอง กล่าวคือฟิลเตอร์คือฟังก์ชั่นที่ใช้อินพุตบางอย่างเช่นรูปภาพและให้คุณได้รับรูปภาพที่กรองแล้ว ด้วยความเข้าใจว่าเรากำลังพูดถึงคอนโวลูชั่นอลฟิลเตอร์การฝึกเคอร์เนลจึงเทียบเท่ากับการฝึกฟิลเตอร์เนื่องจากตัวกรองถูกกำหนดโดยน้ำหนักในเคอร์เนลอย่างสมบูรณ์

(ในทางคณิตศาสตร์ตัวกรอง Convolutional เป็นคลาสของตัวกรองที่ไม่แปรผันตามเวลาเชิงเส้นพร้อมการรองรับที่กะทัดรัด)

แต่พวกเขาเริ่มต้นได้อย่างไร?

มีหลายวิธีดูคำตอบอื่น ๆ

มีคนย้อนกลับตัวกรองของเลเยอร์คอนโวลูชั่นอย่างไร

นั่นคือสิ่งที่จ่ายออกไปสำหรับการทำความเข้าใจเพื่อสร้างความแตกต่างระหว่างตัวกรองและเมล็ดพืช สิ่งที่คุณกำลังทำจริงจะผ่านทั้งสองมีปากเสียงกับการดำเนินการบิดที่: เคอร์เนลและการป้อนข้อมูล$$ f(k,x) = k\star x $$ ตัวกรองคือ $f$ นำไปใช้กับเคอร์เนลบางส่วน: $$ f_k = \backslash x \mapsto f(k,x) $$นั่นคือสิ่งที่คุณสนใจในที่สุด หลังจากการฝึกอบรมเคอร์เนลจะได้รับการแก้ไขดังนั้นตัวกรองจึงเป็นเพียงหน้าที่ของ$x$. แต่คุณไม่สามารถ backpropagate ตัวกรองได้ (อย่างน้อยก็ในเฟรมเวิร์กทั่วไป) เพราะมันเป็นฟังก์ชัน สิ่งที่คุณทำ backpropagate คือเคอร์เนลและทำงานในลักษณะเดียวกับที่คุณทำ backpropagate พารามิเตอร์อื่น ๆ : คุณประเมิน$f$ ร่วมกับอนุพันธ์ (ของทั้งสองอาร์กิวเมนต์!) สำหรับหนึ่งโดยเฉพาะ $x$ ในบัตรผ่านไปข้างหน้าจากนั้นส่งผ่านเวกเตอร์คู่ในบัตรผ่านข้างหลังซึ่งจะบอกคุณเกี่ยวกับการไล่ระดับสีในทั้งสอง $x$ และ $k$. หนึ่งใน$x$ คุณย้อนกลับไปที่เลเยอร์ก่อนหน้าซึ่งอยู่ใน $k$ คุณใช้สำหรับการอัปเดตการเรียนรู้

ประการที่สองฉันสังเกตเห็นว่าฉันสามารถเพิ่มฟังก์ชันการเปิดใช้งานให้กับเลเยอร์ Convolutional ใน Keras ได้

ใช่ แต่การเปิดใช้งานไม่ได้เป็นส่วนหนึ่งของการดำเนินการ Convolution เป็นที่เข้าใจกันดีที่สุดว่าเป็นเลเยอร์แยกต่างหาก แต่เนื่องจากไม่มีพารามิเตอร์ใด ๆ และเนื่องจาก CNN มักจะมี Relu หลังการแปลงแต่ละครั้ง Keras จึงมีทางลัดสำหรับสิ่งนี้$$ g(k,x) = \operatorname{Relu}(f_k(x)) $$ $$ g_k = \bigl(\backslash x\mapsto \operatorname{Relu}(f_k(x))\bigr) = \operatorname{Relu} \circ f_k $$ ในการทำให้เกิดการย้อนกลับขั้นแรกคุณต้องดึงย้อนกลับผ่านอนุพันธ์ของการเปิดใช้งานก่อนที่จะไปถึงคอนโวลูชั่น

สุดท้าย แต่ไม่ท้ายสุดชั้น Convolutional มีน้ำหนักและอคติเหมือนชั้นหนาแน่นหรือไม่?

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

สิ่งหนึ่งที่มีความสำคัญในสถาปัตยกรรม Convolutional และมักจะอธิบายได้ไม่ดีนักก็คือเลเยอร์ดังกล่าวไม่ได้เป็นเพียงตัวกรองแบบ Convolutional ตัวเดียว แต่เป็น "ธนาคาร" ทั้งหมดของตัวกรองแต่ละตัวมีเคอร์เนลของตัวเอง ดังนั้นสำหรับทุกอินพุตคุณจะได้รับเอาต์พุตทั้งตระกูลซึ่งเรียกว่าแชนเนล :$$ f_i(\mathbf{k},x) = f(k_i,x) $$จากนั้นคุณผ่านทั้งหมดของเหล่านั้นไปยังชั้นถัดไปคือชั้นยังต้องยอมรับหลายช่อง - ซึ่งจะถูกจัดการอีกครั้งโดยมีเมล็ดหลายเช่นคุณมีทั้งเมทริกซ์ของเมล็ด วิธีทางคณิตศาสตร์ในการดูสิ่งนี้คือการไหลของสัญญาณไม่มีเวกเตอร์ในช่องว่าง$I$ ของรูปภาพ แต่อยู่ในพื้นที่เทนเซอร์ผลิตภัณฑ์ $\mathbb{R}^m\otimes I$, ที่ไหน $m$คือจำนวนช่อง และใน "พื้นที่ช่อง" คุณกำลังเชื่อมต่ออย่างสมบูรณ์ (เวลาคนพูดถึง$1\times1$ เลเยอร์คอนโวลูชันมันหมายความว่าพวกเขาไม่ได้แสดงคอนโวลูชั่นที่มีความหมายเลย แต่เป็นเพียงเมทริกซ์ที่เชื่อมต่ออย่างสมบูรณ์ระหว่างช่อง)