आवर्तक बनाम पुनरावर्ती तंत्रिका नेटवर्क: जो एनएलपी के लिए बेहतर है?


48

आवर्तक तंत्रिका नेटवर्क और पुनरावर्ती तंत्रिका नेटवर्क हैं। दोनों को आमतौर पर एक ही संक्षिप्त नाम से दर्शाया जाता है: आरएनएन। विकिपीडिया के अनुसार , आवर्तक एनएन वास्तव में पुनरावर्ती एनएन हैं, लेकिन मैं वास्तव में स्पष्टीकरण को नहीं समझता हूं।

इसके अलावा, मुझे ऐसा नहीं लगता कि प्राकृतिक भाषा प्रसंस्करण के लिए (उदाहरण के साथ) बेहतर है। तथ्य यह है कि, यद्यपि सोचर अपने ट्यूटोरियल में एनएलपी के लिए रिकर्सिव एनएन का उपयोग करता है , मुझे पुनरावर्ती तंत्रिका नेटवर्क का अच्छा कार्यान्वयन नहीं मिल रहा है, और जब मैं Google में खोज करता हूं, तो अधिकांश उत्तर रिकरेंट एनएन के बारे में होते हैं।

इसके अलावा, क्या कोई और DNN है जो NLP के लिए बेहतर लागू होता है, या यह NLP कार्य पर निर्भर करता है? डीप बेलीज नेट्स या स्टैक्ड ऑटोएन्कोडर्स? (मुझे एनएलपी में कन्वेंशन के लिए कोई विशेष उपयोग नहीं मिल रहा है, और अधिकांश कार्यान्वयन मशीन विज़न को ध्यान में रखते हुए हैं)।

अंत में, मैं वास्तव में सी ++ के लिए डीएनएन कार्यान्वयन को प्राथमिकता दूंगा (बेहतर अभी तक अगर इसमें जीपीयू समर्थन है) या स्काला (बेहतर है अगर इसमें स्पार्क समर्थन है) पायथन या मैटलैब / ऑक्टेव के बजाय।

मैंने Deeplearning4j की कोशिश की है, लेकिन यह निरंतर विकास के तहत है और प्रलेखन थोड़ा पुराना है और मैं इसे काम नहीं कर सकता। बहुत बुरा है क्योंकि इसमें चीजों को करने का तरीका "ब्लैक बॉक्स" है, बहुत डरावना-सीखना या वीका की तरह, जो कि मैं वास्तव में चाहता हूं।

जवाबों:


42

आवर्तक तंत्रिका नेटवर्क समय के साथ आवर्ती हैं। उदाहरण के लिए यदि आपके पास कोई अनुक्रम है

x = ['h', 'e', ​​'l', 'l']

यह अनुक्रम एक एकल न्यूरॉन को खिलाया जाता है जिसका खुद से एकल संबंध होता है।

समय स्टेप 0 पर, अक्षर 'h' को इनपुट के रूप में दिया गया है। समय 1, 'ई' को इनपुट के रूप में दिया गया है। समय के साथ सामने आने पर नेटवर्क इस तरह दिखाई देगा।

RNN

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

इसका मतलब है कि सभी W_xh वजन समान (साझा) होंगे और इसलिए W_hh वजन होगा। यह केवल इसलिए है क्योंकि यह एक एकल न्यूरॉन है जिसे समय में प्रकट किया गया है।

यह एक पुनरावर्ती तंत्रिका नेटवर्क जैसा दिखता है। पुनरावर्ती तंत्रिका नेटवर्क

यह देखने के लिए काफी सरल है कि क्यों इसे एक पुनरावर्ती तंत्रिका नेटवर्क कहा जाता है। प्रत्येक अभिभावक नोड के बच्चे उस नोड के समान एक नोड होते हैं।

आपके द्वारा उपयोग किया जाने वाला तंत्रिका नेटवर्क आपके उपयोग पर निर्भर करता है। में Karpathy के ब्लॉग , वह वर्ण एक समय तो एक आवर्ती तंत्रिका नेटवर्क अच्छा है पर एक पैदा कर रहा है।

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

यदि आप c ++ में डीप लर्निंग करना चाहते हैं, तो CUDA का उपयोग करें। यह एक अच्छा उपयोगकर्ता-आधार है, और तेज है। मुझे इसके बारे में अधिक जानकारी नहीं है इसलिए मैं और अधिक टिप्पणी नहीं कर सकता।

अजगर में, थीनो सबसे अच्छा विकल्प है क्योंकि यह स्वचालित भेदभाव प्रदान करता है, जिसका अर्थ है कि जब आप बड़े, अजीब एनएनएस बना रहे हैं, तो आपको हाथ से ग्रेडिएंट नहीं ढूंढना होगा। Theano यह आपके लिए स्वचालित रूप से करता है। यह सुविधा Torch7 की कमी है।

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


11

बड़े आवर्तक तंत्रिका नेटवर्क को एनएलपी के लिए शायद सबसे शक्तिशाली मॉडल माना जाता है। ए। करपाथी द्वारा आवर्तक तंत्रिका नेटवर्क और चरित्र स्तर मॉडलिंग पर एक महान लेख http://karpathy.github.io/2015/05/21/rnn-effectiveness/ पर उपलब्ध है।

गहरी शिक्षा (थीनो, कैफ आदि) के लिए बड़ी संख्या में पुस्तकालयों की कोशिश की। मैं जोरदार तरीके से टोर्च 7 के उपयोग का सुझाव दूंगा, जिसे एनएन के लिए अत्याधुनिक उपकरण माना जाता है और यह एनवाईयू, फेसबुक एआई और गूगल दीपमाइंड द्वारा समर्थित है। मशाल 7 लुआ पर आधारित है और ऐसे कई उदाहरण हैं जिनसे आप आसानी से परिचित हो सकते हैं। गिथब पर बहुत सारे कोड पाए जा सकते हैं, एक अच्छी शुरुआत होगी https://github.com/wojzaremba/lstm

अंत में, लुआ की सुंदरता यह है कि LuaJIT को जावा, अजगर, मतलाब आदि में बहुत आसानी से इंजेक्ट किया जा सकता है।


2
Karpathy का ब्लॉग पढ़ने का सुझाव दें। आरएनएन को समझने में वास्तव में बहुत ही हिंसक।
SolessChong

1

आवर्तक तंत्रिका नेटवर्क (RNN) मूल रूप से समय के साथ प्रकट होता है। इसका उपयोग अनुक्रमिक आदानों के लिए किया जाता है जहां अनुक्रम के तत्वों के बीच समय कारक मुख्य विभेदक कारक है। उदाहरण के लिए, यहाँ एक आवर्तक तंत्रिका नेटवर्क है जो भाषा मॉडलिंग के लिए उपयोग किया जाता है जिसे समय के साथ प्रकट किया गया है। प्रत्येक समय कदम पर, उस समय कदम में उपयोगकर्ता इनपुट के अलावा, यह उस छिपी परत के आउटपुट को भी स्वीकार करता है जिसे पिछले समय कदम पर गणना की गई थी।

RNN


एक पुनरावर्ती तंत्रिका नेटवर्क एक पदानुक्रमित नेटवर्क की तरह अधिक होता है जहां वास्तव में इनपुट अनुक्रम के लिए कोई समय का पहलू नहीं होता है, लेकिन इनपुट को पेड़ के फैशन में पदानुक्रमित रूप से संसाधित करना पड़ता है। यहाँ एक उदाहरण है कि एक पुनरावर्ती तंत्रिका नेटवर्क कैसा दिखता है। यह पाठ के एक छोटे से भाग पर किए गए ऑपरेशन के आउटपुट को पुनरावर्ती रूप से ले कर वाक्य के पार्स ट्री को सीखने का तरीका दिखाता है।

पुनरावर्ती तंत्रिका नेटवर्क


[ नोट ]:

LSTM और GRU दो विस्‍तारित RNN प्रकार हैं जो गेट भूल जाते हैं, जो कि NLP में बहुत आम हैं।

LSTM

LSTM और GRU


LSTM- सेल सूत्र:

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

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