समय श्रृंखला मॉडल LSTM में सुविधाएँ जोड़ना


43

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

टी 3, टी 2, टी 1, आउटपुट

अब आपको बताते हैं कि आपके पास एक ऐसी सुविधा है जो आउटपुट को प्रभावित करती है, लेकिन यह जरूरी नहीं कि एक टाइम सीरीज़ फीचर है, जो इसके बाहर के मौसम को बताता है। क्या यह कुछ ऐसा है जिसे आप बस जोड़ सकते हैं और LSTM यह पहचानने में सक्षम होगा कि समय श्रृंखला का पहलू क्या है और क्या नहीं है?


मुझे आपका सवाल पसंद है। हालाँकि, क्या आप इस बात को विस्तृत कर सकते हैं कि यह गैर-समय श्रृंखला सुविधा विषय वस्तु ज्ञान के आधार पर समय टी पर आउटपुट को कैसे प्रभावित करती है।
राशिफल

जवाबों:


39

RNNs (जैसे, LSTMs और Grus) के लिए, परत इनपुट है timesteps की एक सूची है, और प्रत्येक timestep है एक सुविधा टेन्सर। इसका मतलब है कि आपके पास इस तरह का इनपुट टेंसर हो सकता है (पाइथोनिक नोटेशन में):

# Input tensor to RNN
[
    # Timestep 1
    [ temperature_in_paris, value_of_nasdaq, unemployment_rate ],
    # Timestep 2
    [ temperature_in_paris, value_of_nasdaq, unemployment_rate ],
    # Timestep 3
    [ temperature_in_paris, value_of_nasdaq, unemployment_rate ],
    ...
]

तो बिल्कुल, आप प्रत्येक टाइमस्टेप पर कई विशेषताएं रख सकते हैं। मेरे दिमाग में, मौसम एक समय श्रृंखला की विशेषता है: जहां मैं रहता हूं, यह समय का कार्य होता है। अतः मौसम की जानकारी को प्रत्येक टाइमस्टेप में अपनी एक विशेषता के रूप में (उचित एन्कोडिंग के साथ, जैसे बादल = 0, धूप = 1, आदि) को एनकोड करना काफी उचित होगा।

यदि आपके पास गैर-समय-श्रृंखला डेटा है, तो यह वास्तव में LSTM के माध्यम से इसे पारित करने का कोई मतलब नहीं है, हालांकि। हो सकता है कि LSTM वैसे भी काम करेगा, लेकिन फिर भी अगर ऐसा होता है, तो यह संभवत: प्रति प्रशिक्षण समय में अधिक नुकसान / कम सटीकता की लागत पर आएगा।

वैकल्पिक रूप से, आप अतिरिक्त परतों के माध्यम से LSTM के बाहर अपने मॉडल में इस तरह की "अतिरिक्त" जानकारी पेश कर सकते हैं। आपके पास इस तरह से डेटा प्रवाह हो सकता है:

TIME_SERIES_INPUT ------> LSTM -------\
                                       *---> MERGE ---> [more processing]
AUXILIARY_INPUTS --> [do something] --/

इसलिए आप अपने सहायक इनपुट को LSTM आउटपुट में मर्ज करेंगे, और वहां से अपना नेटवर्क जारी रखेंगे। अब आपका मॉडल केवल मल्टी-इनपुट है।

उदाहरण के लिए, मान लें कि आपके विशेष एप्लिकेशन में, आप केवल LSTM आउटपुट अनुक्रम का अंतिम आउटपुट रखते हैं। मान लीजिए कि यह लंबाई का एक वेक्टर है 10. आप सहायक इनपुट आपके एन्कोडेड मौसम (एक स्केलर) हो सकते हैं। आपकी मर्ज की परत केवल LSTM आउटपुट वेक्टर के अंत में सहायक मौसम की जानकारी को जोड़ सकती है, जिसमें 11. की एक वेक्टर का उत्पादन किया जा सकता है। लेकिन आपको केवल आखिरी LSTM आउटपुट टाइमस्टेप रखने की आवश्यकता नहीं है : यदि LSTM ने 100 समयबद्ध आउटपुट दिए हैं, 10-वेक्टर सुविधाओं के साथ, आप अभी भी अपने सहायक मौसम की जानकारी से निपट सकते हैं, जिसके परिणामस्वरूप 100 टाइमस्टेप होते हैं, जिनमें से प्रत्येक में 11 डेटा पॉइंट्स के वेक्टर शामिल होते हैं।

अपने कार्यात्मक एपीआई पर केरस प्रलेखन का अच्छा अवलोकन है।

अन्य मामलों में, जैसा कि @horaceT बताते हैं, आप गैर-अस्थायी डेटा पर LSTM को कंडीशन करना चाह सकते हैं। उदाहरण के लिए, कल मौसम की भविष्यवाणी करें, स्थान दिया गया है। इस मामले में, यहां तीन सुझाव दिए गए हैं, जिनमें से प्रत्येक सकारात्मक / नकारात्मक हैं:

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

  2. लौकिक डेटा के हिस्से के रूप में डेटा को शामिल करें। तो एक विशेष टाइमस्टेप पर प्रत्येक फीचर वेक्टर में "ज्यादातर" टाइम-सीरीज डेटा शामिल होता है, लेकिन फिर प्रत्येक फीचर वेक्टर के अंत में कंडीशनिंग डेटा जोड़ा जाता है। क्या नेटवर्क इसे पहचानना सीखेगा? शायद, लेकिन फिर भी, आप गैर-अनुक्रमिक जानकारी के साथ अनुक्रम डेटा को प्रदूषित करके एक कठिन शिक्षण कार्य बना रहे हैं। इसलिए मैं इसे भी हतोत्साहित करूंगा ।

  3. संभवतः सबसे अच्छा तरीका समय पर शून्य पर आरएनएन के छिपे हुए राज्य को सीधे प्रभावित करना होगा। यह Karpathy और Fei-Fei द्वारा और Vinyals et al द्वारा लिया गया दृष्टिकोण है । यह इस तरह काम करता है:

    1. प्रत्येक प्रशिक्षण नमूने के लिए, अपनी स्थिति चर ।x
    2. RNN की आंतरिक स्थिति: (इन रूप में इसे सही स्थिति में लाने के लिए अपनी स्थिति परिवर्तनशील चालों को एक परिर्वतन रूपांतर के साथ बदल दें / बदलें। और ट्रेन योग्य भार हैं)। आप इसे केरस में एक घने परत के साथ प्राप्त कर सकते हैं। Wbv=Wx+bWb
    3. पहले टाइमस्टेप के लिए, अपने मूल्य की गणना करते समय RNN के छिपे हुए राज्य में जोड़ें ।v

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


1
अच्छा सुझाव है, लेकिन क्या होगा यदि एलएसटीएम के आउटपुट में गैर-समय श्रृंखला भविष्यवक्ता पर संरचनात्मक निर्भरता है।
राशिफल

क्या आप एक उदाहरण दे सकते हैं?
एडम साइपनिव्स्की

6
ठीक है, यहाँ एक बहुत ही कृत्रिम उदाहरण है। मान लीजिए कि आप पिछले n समय चरणों से अवलोकन के आधार पर समय t पर मौसम की भविष्यवाणी करने की कोशिश कर रहे हैं। मौसम उस दुनिया के हिस्से पर निर्भर करता है जिसमें आप हैं। यदि यह उत्तरी गोलार्ध में गर्मी है, तो यह दक्षिणी गोलार्ध में सर्दियों की है। तो इस उत्तर / दक्षिण कारक को ध्यान में रखा जाना चाहिए। क्या आप इसे LSTM में बदल सकते हैं?
राशिफल

1
बड़ा अच्छा सवाल! मैंने इसे संबोधित करने के लिए संपादन शामिल किया है।
एडम साइपनिव्स्की

संपादन और दो संदर्भों के लिए विचार। बहुत उपयोगी।
राशिफल

2

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

https://github.com/philipperemy/cond_rnn/ (टेंसरफ़्लो)

आशा करता हूँ की ये काम करेगा!


0

केर एलएसटीएम में एक कार्य है reset_states(states)

हालाँकि पैरामीटर स्टेट्स दो स्टेट्स, हिडन स्टेट एच और सेल स्टेट का कॉनसेप्ट है।

States = [h, c]

यह जानना दिलचस्प होगा कि क्या आपको उपर्युक्त कागजात में दृष्टिकोण के अनुसार इनिशियलाइज़ करना चाहिए hया नहीं c


0

यह शायद सबसे कुशल तरीका नहीं है, लेकिन स्थैतिक चर का उपयोग करके समय की लंबाई तक दोहराया जा सकता है tf.tile()

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