Рекурентні проти рекурсивні нейронні мережі: що краще для НЛП?


48

Існують рекурентні нейронні мережі та рекурсивні нейронні мережі. Обидва зазвичай позначаються однаковим абревіатурою: RNN. Згідно з Вікіпедією , періодичні NN насправді є рекурсивними NN, але я не дуже розумію пояснення.

Більше того, я не вважаю, що краще (із прикладами чи так) для обробки природних мов. Справа в тому, що, хоча Сочер використовує в своєму підручнику рекурсивний NN для NLP , я не можу знайти гарну реалізацію рекурсивних нейронних мереж, і коли я шукаю в Google, більшість відповідей стосуються рецидивуючого NN.

Крім того, чи є інший DNN, який краще застосовується для NLP, або це залежить від завдання NLP? Мережі глибокої віри або штабельні автокодери? (Я, здається, не знайшов жодної конкретної утиліти для ConvNets в NLP, і більшість реалізацій мають на увазі машинне бачення).

Нарешті, я б особливо віддав перевагу DNN-реалізаціям для C ++ (ще краще, якщо вона має підтримку GPU) або Scala (краще, якщо вона має підтримку Spark), а не Python або Matlab / Octave.

Я спробував Deeplearning4j, але він постійно розробляється, і документація трохи застаріла, і я не можу зробити так, щоб вона працювала. Дуже погано, тому що він має "чорний ящик" як спосіб робити речі, дуже схожий на scikit-learn або Weka, чого я дуже хочу.

Відповіді:


42

З часом повторюються нейронні мережі. Наприклад, якщо у вас є послідовність

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

Ця послідовність подається одному нейрону, який має єдине з'єднання з собою.

На етапі часу 0 літера "h" задається як вхідний. На кроці часу 1 "e" задається як введення. Мережа при розгортанні з часом виглядатиме так.

RNN

Рекурсивна мережа - це лише узагальнення мережі, що повторюється. У мережі, що повторюється, ваги діляться (і розмірність залишається незмінною) по довжині послідовності, оскільки як би ви поводилися з залежними від позиції вагами, коли ви зустрічаєте послідовність у тестовий час різної довжини до будь-якої, яку ви бачили в час поїзда . У рекурсивній мережі ваги діляться (і розмірність залишається постійною) на кожному вузлі з тієї ж причини.

Це означає, що всі ваги W_xh будуть рівними (спільними) і таким чином буде вага W_hh. Це просто тому, що це єдиний нейрон, який розгорнувся в часі.

Ось як виглядає рекурсивна нейронна мережа . Рекурсивна нейронна мережа

Досить просто зрозуміти, чому його називають рекурсивною нейронною мережею. Діти кожного батьківського вузла є просто вузлом, подібним до цього вузла.

Нейронна мережа, яку ви хочете використовувати, залежить від вашого використання. У своєму блозі Карпаті він генерує персонажів один за одним, так що періодична нейронна мережа хороша.

Але якщо ви хочете генерувати дерево розбору, то використовувати рекурсивну нейронну мережу краще, оскільки це допомагає створити кращі ієрархічні уявлення.

Якщо ви хочете глибоко вивчити мову c ++, тоді використовуйте CUDA. Він має хорошу базу користувачів, і це швидко. Я не знаю більше про це, тому більше не можу коментувати.

У python Theano є найкращим варіантом, оскільки він забезпечує автоматичну диференціацію, а це означає, що коли ви формуєте великі, незграбні NN, вам не доведеться знаходити градієнти вручну. Theano робить це автоматично для вас. Ця функція бракує Torch7.

Theano дуже швидкий, оскільки забезпечує обгортки C для python-коду і може бути реалізований на графічних процесорах. Він також має дивовижну базу користувачів, що дуже важливо під час вивчення чогось нового.


11

Великі періодичні нейронні мережі вважаються, можливо, найпотужнішою моделлю для НЛП. Чудова стаття, написана А. Карпатією про періодичні нейронні мережі та моделювання рівня персонажів, доступна на веб-сайті http://karpathy.github.io/2015/05/21/rnn-effectiveness/

Спробувавши велику кількість бібліотек для глибокого навчання (теано, кафе тощо). Я настійно пропоную використовувати Torch7, який вважається найсучаснішим інструментом для NN, і він підтримується NYU, Facebook AI та Google DeepMind. Torch7 заснований на lua, і так багато прикладів, з якими можна легко ознайомитись. Чимало коду можна знайти на github, хорошим початком буде https://github.com/wojzaremba/lstm .

Нарешті, краса lua полягає в тому, що LuaJIT можна легко вводити в Java, Python, Matlab тощо.


2
Запропонуйте прочитати блог Карпаті. Дійсно корисний у розумінні RNN.
SolessChong

1

Рецидивні нейронні мережі (RNN) в основному розгортаються з часом. Він використовується для послідовних входів, де фактор часу є головним диференціюючим фактором між елементами послідовності. Наприклад, ось періодична нейронна мережа, що використовується для моделювання мови, розгорнута з часом. На кожному кроці часу, крім введення користувача на цьому етапі часу, він також приймає висновок прихованого шару, який був обчислений на попередньому кроці часу.

RNN


Рекурсивна нейронна мережа більше нагадує ієрархічну мережу, де дійсно немає часового аспекту в послідовності введення, але вхід повинен оброблятися ієрархічно деревом. Ось приклад того, як виглядає рекурсивна нейронна мережа. Він показує спосіб дізнатися дерево розбору речення шляхом рекурсивного взяття результату операції, виконаної на меншій частині тексту.

Рекурсивні нейронні мережі


[ ПРИМІТКА ]:

LSTM і GRU - це два розширені типи RNN з воротами забуття, які дуже поширені в NLP.

LSTM

LSTM та GRU


LSTM-формула клітин:

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.