Захоплення початкових шаблонів при використанні усіченого зворотного розповсюдження через час (RNN / LSTM)


12

Скажіть, що я використовую RNN / LSTM для аналізу настроїв, що є підходом до багатьох (див. Цей блог ). Мережа тренується за допомогою усіченого зворотного розповсюдження через час (BPTT), де мережа розкручується лише 30 останніх кроків, як зазвичай.

У моєму випадку кожен мій розділ тексту, який я хочу класифікувати, набагато довший, ніж 30 кроків, що розгортаються (~ 100 слів). На основі моїх знань BPTT виконується лише один раз для одного текстового розділу, коли він проходить над усім текстовим розділом та обчислює ціль двійкової класифікації, , яку він потім порівнює з функцією втрати, щоб знайти помилку.y

Потім градієнти ніколи не будуть обчислюватися стосовно перших слів кожного текстового розділу. Яким чином RNN / LSTM може все-таки відрегулювати ваги, щоб захопити конкретні шаблони, які виникають лише протягом перших кількох слів? Наприклад, скажіть, що всі речення, позначені як починаються з "Я люблю це", а всі пропозиції, позначені як починаються з "Я ненавиджу це". Як би RNN / LSTM фіксував це, коли він розкручується лише протягом останніх 30 кроків, коли він потрапляє в кінець 100-крокової довгої послідовності?positivenegative


Зазвичай абревіатура TBPTT для усіченого зворотного розповсюдження через час.
Чарлі Паркер

Відповіді:


11

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

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

Спочатку подумайте про надуманий приклад. Припустимо, ваша мережа генерує 1, якщо в його вході є 1, а інше 0. Скажімо, ви тренуєте мережу на послідовностях довжиною 20 та обмежуєте градієнт на 10 кроків. Якщо навчальний набір даних ніколи не містить 1 в останніх 10 кроків введення, то в мережі виникнуть проблеми з тестовими входами будь-якої конфігурації. Однак якщо навчальний набір має деякі приклади, такі як [1 0 0 ... 0 0 0] та інші, як [0 0 0 ... 1 0 0], то мережа зможе підібрати "наявність" функція 1 "в будь-якому місці вхідних даних.

Тоді повернемося до аналізу настроїв. Скажімо, під час тренінгу ваша модель стикається з довгим негативним реченням на кшталт "Я ненавиджу це, тому що ... навколо і навколо" з, скажімо, 50 словами в еліпсісі. Обмеживши розповсюдження градієнта 30 кроками часу, модель не з'єднає "Я ненавиджу це, тому що" до вихідної мітки, тому вона не буде підбирати "I", "ненавижу" або "this" з цього тренінгу приклад. Але він підбере слова, які знаходяться протягом 30 часових кроків з кінця речення. Якщо ваш навчальний набір містить інші приклади, які містять ті самі слова, можливо разом із "ненавистю", то він має шанс підібрати посилання між "ненавистю" та позначкою негативних настроїв. Крім того, якщо у вас є короткі приклади тренувань, скажіть: "Ми ненавидимо це, бо це жахливо!" то ваша модель зможе підключити функції "ненависть" та "це" до цільової мітки. Якщо у вас є достатньо цих прикладів навчання, тоді модель повинна мати можливість ефективно вивчити з'єднання.

Скажімо, ви на час тестування представляєте моделі ще одне довге речення на кшталт "Я ненавиджу це, тому що ... на геккона!" Введення моделі розпочнеться з "Я ненавиджу це", яке перейде в прихований стан моделі в деякій формі. Цей прихований стан використовується для впливу на майбутні приховані стани моделі, тому, хоча до кінця речення може бути 50 слів, прихований стан від цих початкових слів має теоретичний шанс вплинути на результат, хоча він ніколи не був тренувались на зразках, які містили таку велику відстань між "Я ненавиджу це" та кінцем речення.


0

@ Imjohns3 має право, якщо ви обробляєте довгі послідовності (розмір N) і обмежуєте зворотне розповсюдження останніми K кроками, мережа не буде вивчати шаблони на початку.

Я працював з довгими текстами і використовую підхід, коли я обчислюю втрати і роблю зворотне розповсюдження після кожного K кроку. Припустимо, що в моїй послідовності було N = 1000 лексем, мій RNN процес спочатку K = 100, потім я намагаюся робити прогнозування (обчислення втрат) і зворотно розповсюджувати. Далі, підтримуючи стан RNN, гальмуйте ланцюг градієнта (в піторх-> відрив) і починайте ще k = 100 кроків.

Хороший приклад цієї техніки ви можете знайти тут: https://github.com/ksopyla/pytorch_neural_networks/blob/master/RNN/lstm_imdb_tbptt.py

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