विखंडनशील परतें क्या हैं?


187

मैंने हाल ही में जोनाथन लॉन्ग, इवान शेल्मर, ट्रेवर डेरेल द्वारा सिमेंटिक सेग्मेंटेशन के लिए पूरी तरह से कन्वेंशनल नेटवर्क पढ़ा । मुझे समझ में नहीं आता है कि "deconvolutional परतों" क्या / कैसे वे काम करते हैं।

प्रासंगिक हिस्सा है

3.3। अपसम्पलिंग पीछे की ओर दी गई सजा है

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

इस प्रकार पिक्सेल-लॉस नुकसान से बैकप्रोपैजेशन द्वारा एंड-टू-एंड सीखने के लिए अप-नेटवर्क का प्रदर्शन किया जाता है।
ध्यान दें कि इस तरह की एक परत में deconvolution फिल्टर तय नहीं किया जाना चाहिए (जैसे, बिलिनियर अपसम्पलिंग के लिए), लेकिन सीखा जा सकता है। विघटनकारी परतों और सक्रियण कार्यों का एक स्टैक भी एक अरेखीय उत्थान सीख सकता है।
हमारे प्रयोगों में, हम पाते हैं कि सघन भविष्यवाणी सीखने के लिए नेटवर्क अपसमापन तेज और प्रभावी है। हमारी सर्वश्रेष्ठ सेगमेंटेशन आर्किटेक्चर धारा 4.2 में परिष्कृत भविष्यवाणी के लिए उतार-चढ़ाव के लिए इन परतों का उपयोग करता है।

मुझे नहीं लगता कि मुझे वास्तव में समझ में आया कि कैसे दृढ़ परतों को प्रशिक्षित किया जाता है।

मुझे लगता है कि मुझे समझ में आ गया है कि कर्नेल आकार साथ दृढ़ परतें आकार फिल्टर सीखती हैं । कर्नेल आकार साथ एक दृढ़ परत का उत्पादन , और फ़िल्टर आयाम । हालाँकि, मैं नहीं जानता कि कैसे संकेंद्रित परतों का सीखना काम करता है। (मैं समझता हूं कि साधारण एमएलपी धीरे-धीरे वंश के साथ कैसे सीखते हैं, अगर वह मदद करता है)।कश्मीर × कश्मीर कश्मीर रों एन एन इनपुट मंद×रोंएनnइनपुट मंदरों2n

इसलिए यदि मेरी समझदार परतों की समझ सही है, तो मुझे कोई सुराग नहीं है कि इसे कैसे उलटा जा सकता है।

क्या कोई मुझे deconvolutional परतों को समझने में मदद कर सकता है?


3
इस वीडियो लेक्चर में
विवेचन

6
उम्मीद है कि यह किसी के लिए भी उपयोगी हो सकता है, मैंने यह पता लगाने के लिए एक नोटबुक बनाई कि टैन्सोरफ्लो (0.11) में कनवल्शन और ट्रांसपोज़्ड कनवल्शन का उपयोग कैसे किया जा सकता है। शायद कुछ व्यावहारिक उदाहरण और आंकड़े होने से यह समझने में थोड़ी मदद मिल सकती है कि वे कैसे काम करते हैं।
अंकिरोस

1
मेरे लिए, इस पृष्ठ ने मुझे एक बेहतर व्याख्या दी, यह विघटन
T.Antoni

क्या बैकसमैन की तुलना में बैकवर्ड पूलिंग की तुलना में अधिक अपघटन नहीं है, क्योंकि इसमें कोई पैरामीटर नहीं है?
केन फेहलिंग

ध्यान दें: नाम "deconvolutional परत" भ्रामक है क्योंकि इस परत है नहीं प्रदर्शन deconvolution
user76284

जवाबों:


209

Deconvolution लेयर एक बहुत ही दुर्भाग्यपूर्ण नाम है और इसे ट्रांसपोज़्ड कन्वेन्शन लेयर कहा जाना चाहिए ।

नेत्रहीन, एक और बिना पैडिंग के साथ एक प्रत्यारोपित दृढ़ संकल्प के लिए, हम सिर्फ मूल इनपुट (नीली प्रविष्टियां) को जीरो (सफेद प्रविष्टियों) (चित्रा 1) के साथ पैड करते हैं।

आकृति 1

स्ट्राइड टू और पैडिंग के मामले में, प्रत्यारोपित कनविक्शन इस तरह दिखाई देगा (चित्र 2):

चित्र 2

आप यहां संकलित अंकगणित के अधिक (महान) दृश्य पा सकते हैं ।


16
बस यह सुनिश्चित करने के लिए कि मैं इसे समझ गया: "डिकोनोवोल्यूशन" काफ़ी हद तक कनविक्शन के समान है, लेकिन आप कुछ पैडिंग जोड़ते हैं? (छवि के आसपास / जब s> 1 भी प्रत्येक पिक्सेल के आसपास)?
मार्टिन थोमा

17
हाँ, एक deconvolution परत भी दृढ़ संकल्प करता है! यही कारण है कि प्रत्यारोपित कन्वेंशन नाम के रूप में बहुत बेहतर फिट बैठता है और शब्द deconvolution वास्तव में भ्रामक है।
डेविड डाओ

11
आप चित्र 1 में "नो पैडिंग" क्यों कहते हैं, यदि वास्तव में इनपुट शून्य-गद्देदार है?
स्टास एस

8
वैसे: इसे TensorFlow में अब ट्रांसपोज़्ड कनवल्शन कहा जाता है: Tenorflow.org/versions/r0.10/api_docs/python/…
मार्टिन थोमा

9
इस बहुत सहज उत्तर के लिए धन्यवाद, लेकिन मैं इस बारे में उलझन में हूं कि दूसरा 'स्ट्राइड टू' केस क्यों है, यह कर्नेल के चलने पर पहले वाले की तरह ही व्यवहार करता है।
Demonedge

49

मुझे लगता है कि दृढ़ विश्वास के पीछे वास्तव में बुनियादी स्तर का अंतर्ज्ञान प्राप्त करने का एक तरीका यह है कि आप K फिल्टर को स्लाइड कर रहे हैं, जिसे आप K स्टेंसिल के रूप में सोच सकते हैं, इनपुट छवि पर और K सक्रियण उत्पन्न करेंगे - प्रत्येक एक विशेष स्टैंसिल के साथ मैच की डिग्री का प्रतिनिधित्व करता है । उस का उलटा संचालन K क्रियाकलापों को ले कर होगा और उन्हें प्रक्षेपण संक्रिया के पहले से विस्तारित करना होगा। उलटा ऑपरेशन की सहज व्याख्या इसलिए, मोटे तौर पर, छवि पुनर्निर्माण को स्टेंसिल (फिल्टर) और सक्रियण (प्रत्येक स्टैंसिल के लिए मैच की डिग्री) दिया गया है और इसलिए बुनियादी सहज स्तर पर हम स्टैंसिल के मुखौटा द्वारा प्रत्येक सक्रियण को उड़ाना चाहते हैं। और उन्हें जोड़ें।

डिकोनोव को समझने के लिए दृष्टिकोण का एक और तरीका कैफ में डिकॉनवोल्यूशन परत के कार्यान्वयन की जांच करना होगा, कोड के निम्नलिखित प्रासंगिक बिट्स देखें:

DeconvolutionLayer<Dtype>::Forward_gpu
ConvolutionLayer<Dtype>::Backward_gpu
CuDNNConvolutionLayer<Dtype>::Backward_gpu
BaseConvolutionLayer<Dtype>::backward_cpu_gemm

आप देख सकते हैं कि यह कैफ़े में लागू है नियमित रूप से आगे की दिशा की परत के लिए बैकप्रॉप के रूप में (मेरे लिए यह अधिक स्पष्ट था, जब मैंने cuDNN कन्टेक लेयर में बैकप्रॉप के कार्यान्वयन की तुलना की है। कन्वर्सेशन लेयर: बैकवर्ड_गप GEMM का उपयोग करके)। इसलिए यदि आप नियमित रूप से दृढ़ संकल्प के लिए कैसे बैकप्रॉपैगैशन करते हैं, तो आप समझेंगे कि यांत्रिक गणना स्तर पर क्या होता है। जिस तरह से यह गणना काम करती है वह इस ब्लर्ब के पहले पैराग्राफ में वर्णित अंतर्ज्ञान से मेल खाती है।

हालाँकि, मैं नहीं जानता कि कैसे संकेंद्रित परतों का सीखना काम करता है। (मैं समझता हूं कि साधारण एमएलपी धीरे-धीरे वंश के साथ कैसे सीखते हैं, अगर यह मदद करता है)।

आपके पहले प्रश्न के अंदर आपके अन्य प्रश्न का उत्तर देने के लिए, MLP बैकप्रोपेगैनेशन (पूरी तरह से कनेक्टेड लेयर) और कंसिस्टेंट नेट के बीच दो मुख्य अंतर हैं:

1) भार का प्रभाव स्थानीयकृत होता है, इसलिए पहले यह पता लगाएं कि बैकपॉप कैसे करना है, एक 3x3 फ़िल्टर को इनपुट इमेज के छोटे 3x3 क्षेत्र के साथ सजाया गया है, परिणाम छवि में एकल बिंदु पर मैपिंग।

2) स्थानिक फिल्टर के वजन को स्थानिक आक्रमण के लिए साझा किया जाता है। व्यवहार में इसका मतलब यह है कि फॉरवर्ड पास में समान वजन के साथ समान 3x3 फ़िल्टर को आउटपुट छवि (उस विशेष फिल्टर के लिए) के लिए आगे की गणना के लिए समान भार के साथ पूरी छवि के माध्यम से खींचा जाता है। बैकप्रॉप के लिए इसका मतलब यह है कि स्रोत छवि में प्रत्येक बिंदु के लिए बैकप्रॉप ग्रेडिएंट को पूरी सीमा पर अभिव्यक्त किया जाता है जिसे हमने फॉरवर्ड पास के दौरान उस फिल्टर को खींचा था। ध्यान दें कि लॉस wrt x, w और bias के अलग-अलग ग्रेडिएंट भी हैं क्योंकि dLoss / dx को बैकप्रॉपैगेट किया जाना है, और dLoss / dw है कि हम वेट को कैसे अपडेट करते हैं। डब्ल्यू और पूर्वाग्रह कम्प्यूटेशन डीएजी में स्वतंत्र इनपुट हैं (कोई पूर्व इनपुट नहीं हैं), इसलिए उन पर बैकप्रोपैजेशन करने की कोई आवश्यकता नहीं है।

(my notation here assumes that convolution is y = x*w+b where '*' is the convolution operation)

7
मुझे लगता है कि यह इस सवाल का सबसे अच्छा जवाब है।
kli_nlpr 15

8
मैं सहमत हूं कि यह सबसे अच्छा जवाब है। शीर्ष उत्तर में बहुत एनिमेशन हैं, लेकिन जब तक मैं इस उत्तर को नहीं पढ़ता, वे मेरे लिए कुछ मनमाने ढंग से पैडिंग के साथ नियमित रूप से दृढ़ संकल्प की तरह दिखते थे। ओह, कैसे लोगों को आंख कैंडी द्वारा बहाया जाता है।
रेई नाकानो

1
सहमत, स्वीकार किए गए उत्तर ने कुछ भी नहीं समझाया। यह काफी बेहतर है।
BjornW

आपके महान स्पष्टीकरण के लिए धन्यवाद। मैं वर्तमान में यह पता नहीं लगा सकता कि बैकप्रॉप को ठीक से कैसे किया जाए। क्या आप मुझे उस पर एक संकेत दे सकते हैं?
बास्टियन

33

चरण दर चरण गणित यह समझाता है कि 3x3 फ़िल्टर और 2 के स्ट्राइड के साथ 2x अपसंस्कृति कैसे संक्रमण फैलती है:

यहां छवि विवरण दर्ज करें

गणित को मान्य करने के लिए सबसे सरल TensorFlow स्निपेट:

import tensorflow as tf
import numpy as np

def test_conv2d_transpose():
    # input batch shape = (1, 2, 2, 1) -> (batch_size, height, width, channels) - 2x2x1 image in batch of 1
    x = tf.constant(np.array([[
        [[1], [2]], 
        [[3], [4]]
    ]]), tf.float32)

    # shape = (3, 3, 1, 1) -> (height, width, input_channels, output_channels) - 3x3x1 filter
    f = tf.constant(np.array([
        [[[1]], [[1]], [[1]]], 
        [[[1]], [[1]], [[1]]], 
        [[[1]], [[1]], [[1]]]
    ]), tf.float32)

    conv = tf.nn.conv2d_transpose(x, f, output_shape=(1, 4, 4, 1), strides=[1, 2, 2, 1], padding='SAME')

    with tf.Session() as session:
        result = session.run(conv)

    assert (np.array([[
        [[1.0], [1.0],  [3.0], [2.0]],
        [[1.0], [1.0],  [3.0], [2.0]],
        [[4.0], [4.0], [10.0], [6.0]],
        [[3.0], [3.0],  [7.0], [4.0]]]]) == result).all()

मुझे लगता है कि आपकी गणना यहां गलत है। मध्यवर्ती उत्पादन 3+ 2 * 2 = 7 होना चाहिए, फिर एक 3x3 कर्नेल के लिए अंतिम उत्पादन 7-3 + 1 = 5x5
एलेक्स

क्षमा करें, @ एलेक्स, लेकिन मैं यह समझने में असफल रहा कि मध्यवर्ती आउटपुट 7. क्यों है? क्या आप कृपया विस्तृत कर सकते हैं?
andriys

2
@andriys आपने जो छवि दिखाई है, उसमें अंतिम परिणाम क्यों है?
जेम्स बॉन्ड

28

नोटों कि स्टैनफोर्ड सीएस वर्ग CS231n साथ : दृश्य मान्यता के लिए Convolutional तंत्रिका नेटवर्क, Andrej Karpathy द्वारा , convolutional तंत्रिका नेटवर्क समझाने का एक बहुत अच्छा काम करते हैं।

इस पत्र को पढ़कर आपको इसके बारे में एक अच्छा विचार देना चाहिए:

  • Deconvolutional Networks मैथ्यू डी। ज़ाइलर, दिलीप कृष्णन, ग्राहम डब्ल्यू। टेलर और कंप्यूटर विज्ञान के रोब फर्गेट विभाग, कोर्ट इंस्टीट्यूट, न्यूयॉर्क विश्वविद्यालय

ये स्लाइड Deconvolutional Networks के लिए महान हैं।


29
क्या छोटे पैराग्राफ में उन लिंक में से किसी एक की सामग्री को संक्षेप में प्रस्तुत करना संभव है? लिंक आगे के शोध के लिए उपयोगी हो सकते हैं, लेकिन आदर्श रूप से स्टैक एक्सचेंज उत्तर में साइट पर जाने की आवश्यकता के बिना मूल प्रश्न को संबोधित करने के लिए पर्याप्त पाठ होना चाहिए।
नील स्लेटर

मुझे खेद है, लेकिन इन पृष्ठों की सामग्री संक्षिप्त पैराग्राफ में संक्षेप में बड़ी है।
अजरेल

12
एक पूर्ण सारांश की आवश्यकता नहीं है, बस एक शीर्षक है - उदाहरण के लिए "एक deconvolutional तंत्रिका नेटवर्क एक CNN के समान है, लेकिन प्रशिक्षित है ताकि किसी भी छिपी हुई परत में सुविधाओं का उपयोग पिछली परत को फिर से बनाने के लिए किया जा सके (और परतों में पुनरावृत्ति द्वारा, अंततः इनपुट को आउटपुट से फिर से संगठित किया जा सकता है)। यह एक समस्या डोमेन में सामान्य उच्च-स्तरीय विशेषताओं को सीखने के लिए इसे प्रशिक्षित करने की अनुमति देता है - आमतौर पर इमेज प्रोसेसिंग "(ध्यान दें कि अगर यह सही है तो मुझे भी यकीन नहीं है, इसलिए मेरा लेखन नहीं है खुद का जवाब)।
नील स्लेटर

6
यद्यपि लिंक अच्छे हैं, आपके शब्दों में मॉडल का एक संक्षिप्त सारांश बेहतर होगा।
लघुशंका

11

इस विषय पर बस थायोन वेबसाइट से एक बढ़िया लेख मिला [1]:

प्रत्यारोपित आक्षेपों की आवश्यकता आम तौर पर एक सामान्य दीक्षांत के विपरीत दिशा में जाने वाले एक परिवर्तन का उपयोग करने की इच्छा से उत्पन्न होती है, [...] फीचर मैप्स को उच्च-आयामी स्थान पर प्रोजेक्ट करने के लिए। [...] अर्थात, ४-आयामी अंतरिक्ष से १६-आयामी अंतरिक्ष तक का मानचित्र, जो कनैक्टिविटी के कनेक्टिविटी पैटर्न को बनाए रखते हुए।

पक्षांतरित convolutions - भी कहा जाता है आंशिक रूप strided convolutions - एक घुमाव के आगे और पीछे गुजरता स्वैप करके काम करते हैं। इसे लगाने का एक तरीका यह है कि कर्नेल एक कनविक्शन को परिभाषित करता है, लेकिन चाहे वह एक सीधा कनवल्शन हो या ट्रांसपोज़्ड कनवल्शन यह निर्धारित किया जाता है कि आगे और पीछे के मार्ग की गणना कैसे की जाती है।

ट्रांसपोज़्ड कनवल्शन ऑपरेशन को इसके इनपुट के संबंध में कुछ कनवल्शन के ग्रेडिएंट के रूप में माना जा सकता है, जो आमतौर पर ट्रांसपोज़्ड कनवल्शन को व्यवहार में लागू किया जाता है।

अंत में ध्यान दें कि एक ट्रांसप्लांट किए गए कनवल्शन को सीधा कनवल्शन के साथ लागू करना हमेशा संभव होता है। नुकसान यह है कि इसमें आम तौर पर इनपुट के लिए कई कॉलम और शून्य की पंक्तियों को जोड़ना शामिल है, जिसके परिणामस्वरूप बहुत कम कुशल कार्यान्वयन होता है।

इसलिए सिमप्सकैप में, एक "ट्रांसपोज़्ड कनवल्शन" गणितीय ऑपरेशन है जिसमें मैट्रिसेस का उपयोग किया जाता है (केवल कनवल्शन की तरह), लेकिन मामले में सामान्य कनवल्शन ऑपरेशन की तुलना में अधिक कुशल होता है, जब आप सजायाफ्ता मानों से मूल (विपरीत दिशा) में वापस जाना चाहते हैं। यही कारण है कि विपरीत दिशाओं की गणना करते समय कार्यान्वयन के लिए इसे प्राथमिकता दी जाती है (यानी इनपुट को गद्दी से उत्पन्न होने वाले विरल मैट्रिक्स के कारण होने वाले कई अनावश्यक 0 गुणा से बचने के लिए)।

Image ---> convolution ---> Result

Result ---> transposed convolution ---> "originalish Image"

कभी-कभी आप कन्वेक्शन पथ के साथ कुछ मानों को सहेजते हैं और "वापस आने पर" उस जानकारी का पुन: उपयोग करते हैं:

Result ---> transposed convolution ---> Image

शायद यही कारण है कि इसे गलत तरीके से "डिकोनोवेशन" कहा जाता है। हालांकि, इसका कनवल्शन (C ^ T) के मैट्रिक्स ट्रांसपोज़ेशन के साथ कुछ करना है, इसलिए अधिक उपयुक्त नाम "ट्रांसपोज़्ड कनवल्शन" है।

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

एनिमेशन को यहाँ ध्यान से पढ़ें और देखें: http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html#no-zero-padding-unit-strides-transposed

कुछ अन्य प्रासंगिक पढ़ने:

फिल्टर का ट्रांसपोज़ (या अधिक सामान्यतः, हर्मिटियन या संयुग्मित ट्रांज़ोज़) बस मिलान किए गए फ़िल्टर [3] है। यह समय के साथ कर्नेल को उलट कर और सभी मूल्यों के संयुग्मन के द्वारा पाया जाता है [2]।

मैं इसके लिए भी नया हूं और किसी भी प्रतिक्रिया या सुधार के लिए आभारी रहूंगा।

[१] http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arnametmet.html

[२] http://deeplearning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html#transposed-convolution-arithmetic

[३] https://en.wikipedia.org/wiki/Matched_filter


1
नाइट पिकिंग, लेकिन लिंक होना चाहिए: deeplearning.net/software/theano_versions/dev/tutorial/…
हरबर्ट

1
मुझे लगता है कि यह सबसे अच्छा जवाब है !!!
kli_nlpr

10

हम सादृश्य के लिए पीसीए का उपयोग कर सकते हैं।

कनव का उपयोग करते समय, आगे का पास इनपुट इमेज से सिद्धांत घटकों के गुणांक निकालने के लिए होता है, और बैकवर्ड पास (जो इनपुट को अपडेट करता है) एक नई इनपुट छवि को फिर से बनाने के लिए गुणांक का उपयोग करना है, ताकि नई इनपुट छवि में पीसी गुणांक होते हैं जो वांछित गुणांक से बेहतर मेल खाते हैं।

डिकोनव का उपयोग करते समय, आगे पास और पिछड़े पास को उलट दिया जाता है। फॉरवर्ड पास पीसी गुणांक से एक छवि को फिर से संगठित करने की कोशिश करता है, और बैकवर्ड पास छवि को दिए गए पीसी गुणांक (ग्रेडिएंट) को अपडेट करता है।

डिकोनव फॉरवर्ड पास इस पद में दिए गए कन्टेंट ग्रेडिएंट की गणना को ठीक करता है: http://andrew.gibiansky.com/blog/machine-learning/convolutional-neural-networks/

यही कारण है कि डिकोनव (आंद्रेई पोक्रोव्स्की के उत्तर का संदर्भ) के कैफ कार्यान्वयन में, डिकोनव फॉरवर्ड पास बैकवर्ड_कप_गेमम () को कॉल करता है, और बैकवर्ड पास फॉरवर्ड_कप_गेमम () कहता है।


6

डेविड डाओ के जवाब के अलावा: यह भी संभव है कि दूसरे तरीके के बारे में सोचें। एकल आउटपुट पिक्सेल का उत्पादन करने के लिए किस (कम रिज़ॉल्यूशन) इनपुट पिक्सेल का उपयोग किया जाता है, इस पर ध्यान केंद्रित करने के बजाय, आप यह भी ध्यान केंद्रित कर सकते हैं कि कौन से इनपुट इनपुट पिक्सल आउटपुट क्षेत्र के किस क्षेत्र में योगदान करते हैं।

यह इस डिस्टिल प्रकाशन में किया जाता है , जिसमें बहुत सहज और इंटरैक्टिव विज़ुअलाइज़ेशन की एक श्रृंखला शामिल है। इस दिशा में सोचने का एक फायदा यह है कि बिसात कलाकृतियों को समझाना आसान हो जाता है।


5

डीएसपी के दृष्टिकोण से बातचीत

मुझे इसमें थोड़ी देर है लेकिन फिर भी मैं अपने दृष्टिकोण और अंतर्दृष्टि को साझा करना चाहता हूं। मेरी पृष्ठभूमि सैद्धांतिक भौतिकी और डिजिटल सिग्नल प्रोसेसिंग है। विशेष रूप से मैंने तरंगिकाओं का अध्ययन किया और संकल्प लगभग मेरी रीढ़ की हड्डी में हैं;)

जिस तरह से गहरी शिक्षा समुदाय के लोग बातचीत के बारे में बात करते हैं, वह भी मेरे लिए उलझन भरा था। मेरे दृष्टिकोण से जो याद आ रहा है वह चिंताओं का उचित पृथक्करण है। मैं कुछ डीएसपी टूल का उपयोग करके गहन सीखने के संकल्पों को समझाऊंगा।

अस्वीकरण

मेरी व्याख्याएँ थोड़ा हाथ से लहराएंगी और मुख्य बिंदुओं को प्राप्त करने के लिए गणितीय रूप से कठोर नहीं होंगी।


परिभाषाएं

एक्सn={एक्सn}n=-={...,एक्स-1,एक्स0,एक्स1,...}

ynएक्सn

(y*एक्स)n=Σ=-yn-एक्स

क्ष=(क्ष0,क्ष1,क्ष2)एक्स=(एक्स0,एक्स1,एक्स2,एक्स3)टी

क्ष*एक्स=(क्ष1क्ष000क्ष2क्ष1क्ष000क्ष2क्ष1क्ष000क्ष2क्ष1)(एक्स0एक्स1एक्स2एक्स3)

एन

एक्सn=एक्सn

-1

एक्सn={एक्सn/n/जेड0अन्यथा

=3

3{...,एक्स0,एक्स1,एक्स2,एक्स3,एक्स4,एक्स5,एक्स6,...}={...,एक्स0,एक्स3,एक्स6,...}
3{...,एक्स0,एक्स1,एक्स2,...}={...एक्स0,0,0,एक्स1,0,0,एक्स2,0,0,...}

=2

2एक्स=(एक्स0एक्स2)=(10000010)(एक्स0एक्स1एक्स2एक्स3)

तथा

2एक्स=(एक्स00एक्स10)=(10000100)(एक्स0एक्स1)

=टी


डीप लर्निंग कन्वर्सेशन बाय पार्ट्स

क्षएक्स

  • (क्ष*एक्स)
  • (क्ष)*एक्स
  • क्ष*(एक्स)

क्ष*(एक्स)=क्ष*(टीएक्स)=((क्ष*)टी)टीएक्स

(क्ष*)क्ष

क्ष*(एक्स)=(क्ष1क्ष000क्ष2क्ष1क्ष000क्ष2क्ष1क्ष000क्ष2क्ष1)(10000100)(एक्स0एक्स1)=(क्ष1क्ष200क्ष0क्ष1क्ष200क्ष0क्ष1क्ष200क्ष0क्ष1)टी(10000010)टी(एक्स0एक्स1)=((10000010)(क्ष1क्ष200क्ष0क्ष1क्ष200क्ष0क्ष1क्ष200क्ष0क्ष1))टी(एक्स0एक्स1)=((क्ष*)टी)टीएक्स

जैसा कि कोई देख सकता है कि ट्रांसपोज़्ड ऑपरेशन है, इस प्रकार, नाम।

निकटतम पड़ोसी अपसम्पलिंग के लिए कनेक्शन

एक अन्य आम दृष्टिकोण जो दृढ़ नेटवर्क में पाया जाता है, कुछ अंतर्निर्मित प्रक्षेप के रूप में अपसम्पन्न होता है। चलो एक साधारण दोहराव के साथ फैक्टर 2 द्वारा अपस्मैपलिंग लेते हैं। इसे रूप में लिखा जा सकता है2(11)*एक्सक्ष2(11)*क्ष*एक्सक्ष=(क्ष0क्ष1क्ष2)

(11)*क्ष=(क्ष0क्ष0+क्ष1क्ष1+क्ष2क्ष2),

यानी हम एक रिपीट अप्सप्लेर को फैक्टर 2 से बदल सकते हैं और 3 के कर्नेल के साथ एक कनवल्शन को कर्नेल साइज के साथ ट्रांसपोज़्ड कनवल्शन 4 से बदल सकते हैं। इस ट्रांसप्लांट किए गए कन्वेन्शन में एक ही "इंटरपोलेशन कैपेसिटी" है, लेकिन बेहतर मैचिंग इंटरपोल को सीखने में सक्षम होगा।


निष्कर्ष और अंतिम टिप्पणी

मुझे आशा है कि मैं कुछ सामान्य दृढ़ संकल्पों को गहन सीखने में पाया जा सकता है, जो उन्हें मूलभूत कार्यों में अलग ले जा सकते हैं।

मैंने यहां पूलिंग को कवर नहीं किया। लेकिन यह सिर्फ एक नॉनलाइनर डाउनसमप्लर है और इस अंकन के भीतर भी इसका इलाज किया जा सकता है।


बहुत बढ़िया जवाब। गणितीय / प्रतीकात्मक परिप्रेक्ष्य लेना अक्सर चीजों को स्पष्ट करता है। क्या मैं यह सोचने में सही हूं कि इस संदर्भ में शब्द "डीकोनवोल्यूशन" मौजूदा शब्दावली के साथ टकराता है ?
user76284

यह वास्तव में संघर्ष नहीं करता है, यह सिर्फ कोई मतलब नहीं है। अपक्षय संचालक के साथ विघटन सिर्फ एक दोष। शब्द का विघटन ऐसा लगता है जैसे यह उलटा ऑपरेशन का कोई रूप होगा। यहां एक व्युत्क्रम के बारे में बात करना केवल मैट्रिक्स ऑपरेशन के संदर्भ में समझ में आता है। यह व्युत्क्रम मैट्रिक्स के साथ गुणा कर रहा है, प्रतिक्षेप का उलटा संचालन नहीं (जैसे विभाजन बनाम गुणा)।
एंड्रे बर्गनर

zθ*एक्स=zzθ*z=एक्स

θ*z=एक्सz=(θ*)+एक्स

संक्षेप में, ओपी की तथाकथित "डीकोनवोल्यूशन लेयर" वास्तव में डीकोवोल्यूशन नहीं कर रही है। यह कुछ और कर रहा है (जो आपने अपने उत्तर में वर्णित किया है)।
1976 पर user76284

4

मुझे यह समझने में बहुत परेशानी हुई कि इस ब्लॉग पोस्ट के आने तक पेपर में वास्तव में क्या हुआ था: http://warmspringwinds.github.io/tensorflow/tf-slim/2016/11/22/upsampling-and-image-selectation -साथ-tensorflow और tf-स्लिम /

यहाँ एक सारांश है कि मैं कैसे समझता हूँ कि 2x अपक्षय में क्या हो रहा है:

कागज से जानकारी

  • अपशगुन क्या है?
    • "फैक्टर एफ के साथ अपक्षय 1 / एफ के एक भिन्नात्मक इनपुट स्ट्राइड के साथ दृढ़ है"
    • → आंशिक रूप से फंसे हुए संकल्पों को भी http://deeplearning.net/software/theano/tutorial/conv_arithmetic.html के अनुसार प्रत्यारोपित संलक्षण के रूप में जाना जाता है।
  • उस कनवल्शन के पैरामीटर क्या हैं?
  • क्या वज़न तय या ट्रेन करने योग्य है?
    • पेपर में कहा गया है, "हम 2x अपसम्पलिंग को बिलिनियर इंटरपोलेशन को इनिशियलाइज़ करते हैं, लेकिन पैरामीटर को सीखने की अनुमति देते हैं [...]"।
    • हालांकि, इसी github पृष्ठ कहा गया है, "हमारे मूल प्रयोगों में प्रक्षेप परतों को बिलिनियर कर्नेल के लिए आरंभीकृत किया गया और फिर सीखा गया। अनुवर्ती प्रयोगों में, और इस संदर्भ कार्यान्वयन, बिलिनियर कर्नेल को ठीक किया गया है"
    • → निश्चित वजन

सरल उदाहरण है

  1. निम्नलिखित इनपुट छवि की कल्पना करें:

इनपुट छवि

  1. इन मानों के बीच फैक्टर -1 = 2-1 = 1 शून्य को सम्मिलित करके और फिर बाद में स्ट्राइड = 1 मानकर आंशिक रूप से स्ट्रैट किए गए संकल्प काम करते हैं। इस प्रकार, आप निम्न 6x6 गद्देदार छवि प्राप्त करते हैं

गद्देदार छवि

  1. बिलिनियर 4x4 फिल्टर इस तरह दिखता है। इसके मूल्यों को इस तरह चुना जाता है कि उपयोग किए गए वज़न (= सभी भार एक सम्मिलित शून्य से गुणा नहीं किए जा रहे हैं) 1. तक तीन। इसके तीन अद्वितीय मान 0.56, 0.19 और 0.06 हैं। इसके अलावा, फिल्टर का केंद्र तीसरी पंक्ति और तीसरे कॉलम में पिक्सेल के अनुसार है।

फिल्टर

  1. गद्देदार छवि पर 4x4 फ़िल्टर लागू करना (पैडिंग = 'समान' और स्ट्राइड = 1 का उपयोग करना) निम्नलिखित 6x6 अपकर्षित छवि देता है:

ऊपर की छवि

  1. प्रत्येक चैनल के लिए इस तरह की अपसंस्कृति व्यक्तिगत रूप से की जाती है ( https://github.com/shelhamer/fcn.berkeleyvision.org/blob/master/surgery.py पर लाइन 59 देखें )। अंत में, 2x अपसंस्कृति वास्तव में सीमाओं को संभालने के तरीके पर बिलिनियर प्रक्षेप और सम्मेलनों का उपयोग करते हुए एक बहुत सरल आकार है। 16x या 32x अपसमपिंग उसी तरह से काम करता है, जो मुझे विश्वास है।

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