कैसे 1x1 संकल्प पूरी तरह से जुड़े परत के समान हैं?


55

मैंने हाल ही में 1x1 संकल्पों पर यान लेकुंस टिप्पणी पढ़ी है :

संवेदी नेट में, "पूरी तरह से जुड़ी हुई परतें" जैसी कोई चीज नहीं है। 1x1 दृढ़ संकल्प गुठली और एक पूर्ण कनेक्शन तालिका के साथ केवल कन्वेंशन परतें हैं।

यह एक बहुत ही दुर्लभ तथ्य है कि ConvNets को एक निश्चित आकार के इनपुट की आवश्यकता नहीं है। आप उन्हें उन इनपुटों पर प्रशिक्षित कर सकते हैं जो एकल आउटपुट वेक्टर (कोई स्थानिक सीमा के साथ) उत्पन्न करने के लिए होते हैं, और फिर उन्हें बड़ी छवियों पर लागू करते हैं। एकल आउटपुट वेक्टर के बजाय, आप तब आउटपुट वैक्टर का स्थानिक नक्शा प्राप्त करते हैं। प्रत्येक वेक्टर इनपुट पर अलग-अलग स्थानों पर इनपुट विंडो देखता है। उस परिदृश्य में, "पूरी तरह से जुड़ी हुई परतें" वास्तव में 1x1 दृढ़ संकल्प के रूप में कार्य करती हैं।

मैं इसके लिए एक सरल उदाहरण देखना चाहूंगा।

उदाहरण

मान लें कि आपके पास पूरी तरह से कनेक्टेड नेटवर्क है। इसमें केवल एक इनपुट परत और एक आउटपुट परत है। इनपुट लेयर में 3 नोड होते हैं, आउटपुट लेयर में 2 नोड होते हैं। इस नेटवर्क में पैरामीटर हैं। इसे और भी अधिक ठोस बनाने के लिए, आपको आउटपुट परत और भार मैट्रिक्स में एक ReLU सक्रियण कार्य करने की सुविधा देता है32=6

W=(011235)R2×3b=(813)R2

तो नेटवर्क साथ ।f(x)=ReLU(Wx+b)xR3

यह देखने के लिए कि परतदार परत को कैसे देखना होगा? "पूर्ण कनेक्शन तालिका" के साथ LeCun का क्या अर्थ है?

मैं एक बराबर CNN प्राप्त करने के लिए लगता है कि यह बिल्कुल मापदंडों की एक ही संख्या के लिए होगा। ऊपर से MLP में पैरामीटर हैं।23+2=8

जवाबों:


29

आपका उदाहरण

आपके उदाहरण में हमारे पास 3 इनपुट और 2 आउटपुट यूनिट हैं। संकल्पों को लागू करने के लिए, उन इकाइयों के आकार के बारे में सोचें: [1,1,3]और [1,1,2], क्रमशः। सीएनएन के संदर्भ में, हमारे पास 3इनपुट और 2आउटपुट फीचर मैप हैं, जिनमें से प्रत्येक में स्थानिक आयाम हैं 1 x 1

फीचर मैप्स के n x nसाथ एक लेयर के लिए एक कनवल्शन लागू करने के लिए k, आपको आकार की एक कर्नेल की आवश्यकता होती है [n,n,k]। इसलिए आप के 1x1संकल्पों की कर्नेल में आकृति है [1, 1, 3]। आउटपुट फीचर मैप 2बनाने के लिए आपको उन कर्नेल (या फ़िल्टर) की आवश्यकता होती है 2। कृपया ध्यान दें: कनवल्शन वास्तव में कॉन्फोल्यूशंस हैं। पिछले एक ही उल्लेख किया है शायद ही कभी।1×11×1×number of channels of the input

दरअसल अगर आप गुठली और पूर्वाग्रह के रूप में चुनते हैं:

w1=(011)R3w2=(235)R3b=(813)R2

इसके बाद की परत-परत के साथ ।f(x)=ReLU((w1xw2x)+(b1b2))xR3

वास्तविक कोड में परिवर्तन

वास्तविक जीवन के उदाहरण के लिए, मेरे vgg-fcn कार्यान्वयन पर एक नज़र डालें । इस फ़ाइल में प्रदान किया गया कोड VGG वेट लेता है, लेकिन हर पूरी तरह से कनेक्ट की गई परत को एक अवक्षेपणीय परतों में बदल देता है। परिणामी नेटवर्क vggआकार की इनपुट छवि पर लागू होने पर समान आउटपुट देता है [244,244,3]। (जब दोनों नेटवर्क को बिना पैडिंग के लागू किया जाता है)।

तब्दील की गई परतदार परतें फ़ंक्शन _fc_layer(लाइन 145) में पेश की जाती हैं। 7x7एफसी 6 के लिए उनके पास कर्नेल का आकार है (जो कि अधिकतम है, जैसा pool5कि वीजीजी आकार का एक फीचर मैप आउटपुट करता है [7,7, 512]। परत FC7और दृढ़ संकल्प के FC8साथ लागू किया 1x1जाता है।

"पूर्ण लिंक टेबल"

मुझे 100% यकीन नहीं है, लेकिन वह एक फिल्टर / कर्नेल को संदर्भित कर सकता है, जिसका इनपुट फीचर मैप के समान आयाम है। दोनों मामलों में (कोड और आपके उदाहरण) स्थानिक आयाम इस मायने में अधिकतम हैं, कि फिल्टर का स्थानिक आयाम इनपुट के रूप में स्थानिक आयाम के समान है।


"इसलिए आप के 1x1 संकल्पों के कर्नेल का आकार [1, 1, 3] है।" क्या? लगता है कि संकल्पों की बड़ी गलतफहमी है। मैंने सोचा कि अगर एक कनवल्शन कर्नेल का आकार [1, 1, 3] है, तो कोई कहेगा कि यह 1x1x3 कनवल्शन है? तो 1x1 कनवल्शन केवल आउटपुट के बारे में है, कर्नेल के बारे में नहीं?
मार्टिन थोमा

2
मेरे लिए kernel = filter, क्या आप सहमत हैं? >> "तो 1x1 कनवल्शन केवल आउटपुट के बारे में है, कर्नेल के बारे में नहीं। बिल्कुल नहीं। एक 3x3कनवल्शन में एक मनमाना आउटपुट आकृति हो सकती है।" वास्तव में, यदि पैडिंग का उपयोग किया जाता है और stride=1तब output shape = input shape। >> "मैंने सोचा कि अगर एक कन्वेक्शन कर्नेल का आकार [1, 1, 3] है, तो कोई कहेगा कि यह 1x1x3 कनवल्शन है?" नहीं, मैंने कभी किसी को बातचीत के बारे में नहीं सुना 3x3x512। हालाँकि सभी कनवल्शन-फ़िल्टर मैंने देखे हैं कि इनपुट लेयर के फीचर-मैप्स की संख्या के बराबर एक तीसरा स्थानिक आयाम है।
MarvMind

संदर्भ के लिए, Convolution DemoKarpathies CS321n पाठ्यक्रम पर एक नज़र डालें : cs231n.github.io/convolutional-networks/#conv । या टेनसफ़्लो एपीआई पर: टेनोरफ़्लो .org/ versions / r0.9 / api_docs / python / nn.html#conv2d फिल्टर का आकार होना चाहिए [filter_height, filter_width, in_channels, out_channels]
मार्विंद

क्या मैं आपके उत्तर में "1x1 कनफ़ोल्यूशन 1 इनपुट के चैनल 1 x 1 नंबर हैं" वाली चीज़ जोड़ सकता हूँ? यह मेरी उलझन का स्रोत था और मैं इसे भूलता रहता हूं।
मार्टिन थोमा

जरूर आगे बढ़ो!
मार्विंद

4

एक पूरी तरह से कनेक्ट की गई परत (इनपुट आकार के लिए चैनल के साथ , और आउटपुट न्यूरॉन्स के लिए) IS 1x1 कनवल्शन लेयर के बराबर नहीं है, बल्कि एक x कनवल्शन लेयर (यानी एक बड़ी कर्नेल, इनपुट के समान आकार के लिए है) पैड) एफसी आउटपुट / छिपी परत (यानी फिल्टर) के बराबर फिल्टर की संख्या के साथnnimnnm

जैसा कि आपने पूछा, इसमें FCN के समान पैरामीटर हैं, अर्थात (प्लस पूर्वाग्रह):nnim

FCN: (वजन प्रति इनपुट परत = इनपुट चैनल) (बार आउटपुट / छिपी परत चौड़ाई)nnim

CNN: (प्रत्येक कर्नेल) (कर्नेल प्रति इनपुट चैनल) (फिल्टर की संख्या)nnim

( स्रोत )


1
बेशक ये दोनों चीजें विशेष मामले बराबर हैं ; मुझे लगता है कि जहां भ्रम की स्थिति आती है।n=1
Yibo Yang

2

समतुल्य कर्नेल में इनपुट का आकार कुछ भी होता है, और एक टेंसर डॉट उत्पाद की गणना करता है। (मैं "आकार" शब्द का उपयोग करता हूं क्योंकि "आकार" पर कुछ भ्रम प्रतीत होता है, जो अक्सर चैनल / गहराई आयाम की उपेक्षा करता है)। इसमें "इनपुट के पार कर्नेल को स्लाइड करना" शामिल नहीं है, क्योंकि कर्नेल जितना बड़ा हो सकता है। स्टैनफोर्ड सीएस 231n कोर्स नोट्स उद्धृत करना :

किसी भी FC लेयर को CONV लेयर में बदला जा सकता है। उदाहरण के लिए, K = 4096 के साथ एक FC परत जो आकार 7 × 7 × 512 के कुछ इनपुट वॉल्यूम को देख रही है, उसे F = 7, P = 0, S = 1, K = 4096, F के साथ CONV परत के रूप में व्यक्त किया जा सकता है। = 7, पी = 0, एस = 1, कश्मीर = 4096। दूसरे शब्दों में, हम इनपुट आकार को इनपुट आयतन के आकार के आकार के अनुसार सेट कर रहे हैं, और इसलिए आउटपुट केवल 1 × 1 × 4096 होगा क्योंकि इनपुट वॉल्यूम में केवल एक ही गहराई वाला कॉलम "फिट" होता है, जो समान परिणाम देता है। प्रारंभिक एफसी परत।

मेरा मानना ​​है कि "एफ = 7, पी = 0, एस = 1, के = 4096, एफ = 7, पी = 0, एस = 1, के = 4096" यहां का अर्थ है कि प्रत्येक कनपटी में 7x7x512 आकार होता है, और इसमें 4096 "फिल्टर" होते हैं।

पहले के उत्तर में उल्लेख किया गया था कि एलेक्सनेट का अंतिम एफसी (जो आकार 1x1x4096 के साथ इनपुट प्राप्त करता है और 1000 वर्ग स्कोर की गणना करता है) को "1x1 कनवल्शन" के रूप में लागू किया गया है। पूरा होने के लिए, प्रत्येक ऐसे कन्टर्न कर्नेल का आकार 1x1x4096 होता है, और उनमें से 1000 होते हैं।

Le Cunn ने CNN के पेपर , पृष्ठ 8, LeNet5 के वर्णन में यह भी बताया:

लेयर C5 120 फ़ीचर्स मैप्स के साथ एक कन्वेन्शनल लेयर है। प्रत्येक इकाई S4 के सभी फ़ीचर मानचित्रों पर 5x5 पड़ोस से जुड़ी है। यहाँ क्योंकि S4 का आकार भी 5x5 है, C5 के फीचर मैप्स का आकार 1x1 है; यह S4 और C5 के बीच पूर्ण संबंध बनाता है।


1

मेरे जैसे किसी भी नौसिखिया PyTorch उपयोगकर्ता के लिए - "रैखिक परत" के साथ "पूरी तरह से जुड़ी परत" को भ्रमित न करें

एक रैखिक परत और 1x1 दृढ़ संकल्प एक ही बात है। मुझे यह समझने में थोड़ी देर लगी कि "पूरी तरह से जुड़ी हुई परत" जैसी कोई चीज नहीं है - यह केवल 1 डी विशालकाय टेंसर में स्थानिक आयामों का एक समतल है। चपटे सभी स्थानिक स्थानों पर हर तत्व को एक अलग फीचर मैप / चैनल / आयाम (जिसे आप कॉल करना चाहते हैं) के रूप में प्रस्तुत किया जाता है। इसलिए, जब हम एक चपटा टैंसर पर एक रैखिक परत लागू करते हैं, तो हमें एक पूरी तरह से जुड़ा हुआ ऑपरेशन मिलता है , जो जाहिर है, 1x1 कनवल्शन के समान नहीं है।

1x1ओपी के प्रश्न में एक कनवल्शन केवल इनपुट फीचर मैप्स का भारित योग है, 3. O [0] = । इसी प्रकार, O [1] = और O [2] = ।j=01X[j]W0[j]+b[0]j=01X[j]W1[j]+b[1]j=01X[j]W2[j]+b[2]

उपरोक्त 3 समीकरण ।O=W2×3X3×1+b2×1

अन्य उत्तर जो दावा करते हैं कि पूरी तरह से कनेक्ट की गई परत आकार के इनपुट के लिए बस एक वैध nxn कनवल्शन लेयर nxnहै (भ्रमित, सही)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.