สมมติว่าฉันมีเลเยอร์ Conv ซึ่งแสดงเทนเซอร์ที่มีรูปร่างที่:(N,F,H,W)
- Nคือขนาดแบทช์
- Fคือจำนวนตัวกรอง convolutional
- H,Wเป็นมิติเชิงพื้นที่
สมมติว่าผลลัพธ์นี้จะถูกป้อนเข้าชั้นแปลงที่มีฟิลเตอร์ 1x1, ศูนย์ padding และกางเกง 1 แล้วการส่งออกของชั้น 1x1 แปลงนี้จะมีรูปร่างW)F1(N,F1,H,W)
ดังนั้นตัวกรอง Conv 1x1 สามารถใช้เพื่อเปลี่ยนขนาดในพื้นที่ตัวกรอง ถ้าดังนั้นเรากำลังเพิ่มมิติข้อมูลถ้าเรากำลังลดมิติข้อมูลในมิติตัวกรองF1>FF1<F
อันที่จริงแล้วในบทความ Google Inception Going Deeper with Convolutionsพวกเขากล่าวว่า (ตัวหนาเป็นของฉันไม่ใช่ผู้เขียนต้นฉบับ):
ปัญหาใหญ่อย่างหนึ่งของโมดูลข้างต้นอย่างน้อยก็ในรูปแบบไร้เดียงสานี้ก็คือแม้กระทั่งจำนวน Convolutions 5x5 จำนวนเล็กน้อยอาจมีราคาแพงอยู่บนเลเยอร์ Convolutional ที่มีตัวกรองจำนวนมาก
สิ่งนี้นำไปสู่ความคิดที่สองของสถาปัตยกรรมที่เสนอ: ใช้การลดขนาดและการคาดการณ์อย่างรอบคอบทุกที่ที่ข้อกำหนดในการคำนวณจะเพิ่มขึ้นเป็นอย่างมาก สิ่งนี้ขึ้นอยู่กับความสำเร็จของงานแต่งงาน: แม้แต่งานแต่งที่มีมิติต่ำอาจมีข้อมูลจำนวนมากเกี่ยวกับแพทช์ภาพที่ค่อนข้างใหญ่ ... ใช้การคำนวณ 1x1 เพื่อลดการคำนวณก่อนที่จะมีราคาแพง 3x3 และ 5x5 convolutions นอกเหนือจากการใช้เป็นการลดพวกเขายังรวมถึงการใช้การเปิดใช้งานเชิงเส้นที่แก้ไขซึ่งทำให้พวกเขาแบบ dual- วัตถุประสงค์
ดังนั้นในสถาปัตยกรรม Inception เราใช้ตัวกรอง convolutional 1x1 เพื่อลดมิติในมิติตัวกรอง ดังที่ฉันได้อธิบายไว้ข้างต้นเลเยอร์ Conv 1x1 เหล่านี้สามารถใช้โดยทั่วไปเพื่อเปลี่ยนมิติพื้นที่ตัวกรอง (เพิ่มขึ้นหรือลดลง) และในสถาปัตยกรรม Inception เราเห็นว่าตัวกรอง 1x1 เหล่านี้มีประสิทธิภาพเพียงใดสำหรับการลดขนาดมิติอย่างชัดเจนในพื้นที่มิติตัวกรอง ไม่ใช่พื้นที่มิติเชิงพื้นที่
อาจมีการตีความอื่น ๆ ของตัวกรอง Conv 1x1 แต่ฉันชอบคำอธิบายนี้โดยเฉพาะในบริบทของสถาปัตยกรรม Google Inception