Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Задача рабочей памяти 1-2-AX - это задача, которая требует решения рабочей памяти . Его можно использовать как тестовый пример для алгоритмов обучения, чтобы проверить их способность запоминать некоторые старые данные. Эту задачу можно использовать для демонстрации возможностей рабочей памяти таких алгоритмов, как PBWM или долговременная краткосрочная память . [1]

Описание [ править ]

Ввода задачи представляет собой последовательность из цифр / букв 1 , 2 , , X , B , Y . И дополнительные C и Z, которые следует игнорировать. Выход представляет собой последовательность букв L и R - по одной букве на каждую входную букву (кроме C или Z ). Выход R должен возвращаться тогда и только тогда, когда есть соответствие любой конечной части входной последовательности с регулярное выражение «1 [AXBYCZ] * A [CZ] * X» или «2 [AXBYCZ] * B [CZ] * Y». В противном случае (кроме C или Z) следует вернуть букву L. Другими словами, C и Z полностью игнорируются. Последовательность AX или BY принимается (с R ) в зависимости от того, был ли самый последний номер 1 или 2 . В противном случае возвращается L.

Примеры [ править ]

  • «21AAXBYAX» → «LLLLRLLLR»
  • «12CBZY» → «LLLR»

Требования [ править ]

Чтобы решить эту задачу, алгоритм должен уметь независимо запоминать последнюю цифру 1 или 2 и последнюю букву A или B. Мы называем эту память рабочей памятью . Эта память должна сохранять все остальные входные данные. Кроме того, алгоритм должен иметь возможность вырезать и игнорировать буквы C и Z .

Решения [ править ]

Псевдокод [ править ]

Для традиционных компьютерных моделей оба требования легко решить. Вот какой-то код Python (вроде псевдокода, но работает), где функция next_output получает одно число / букву в качестве ввода и возвращает либо букву, либо ничего. next_outputs предназначен для удобства работы со всей последовательностью.

last_num  =  "" last_letter  =  ""def  next_output ( next_input :  str ):  глобальный  last_num ,  last_letter,  если  next_input  в  [ "1" ,  "2" ]:  last_num  =  next_input  last_letter  =  ""  return  "L"  elif  next_input  в  [ "A" ,  "B" ]:  last_letter  =  next_input  return  "L"  elif  next_input  in  [ "X" ,  "Y" ]: seq  = last_num  +  last_letter  +  next_input  last_letter  =  next_input  если  seq  in  [ "1AX" ,  "2BY" ]:  вернуть  "R"  вернуть  "L"  вернуть  Nonedef  next_outputs ( next_inputs :  str )  ->  List [ str ]:  "" "  Args:  next_input: строка.  Возвращает:  список строк.  Пример:  >>> next_outputs ("21AAXBYAX")  ['L', 'L', 'L', 'L', 'R', 'L', 'L', 'L', 'R']  "" "  return  [ next_output ( c )  для  c  в  next_inputs ]

Пример:

>>> next_outputs ( "21AAXBYAX" ) ['L', 'L', 'L', 'L', 'R', 'L', 'L', 'L', 'R'] >>> next_outputs ( "12CBZY" ) ['L', 'L', None, 'L', None, 'R']

Конечный автомат [ править ]

Кроме того , эта задача может быть решена простым способом с помощью конечного автомата с 7 состояниями (назовем их --- , 1-- , 2-- , , 2B- , 1AX , 2BY ).

Нейронная сеть [ править ]

Для нейронных сетей эта задача намного сложнее . Для простых нейронных сетей с прямой связью эта задача не решается, поскольку в сетях с прямой связью нет рабочей памяти. Ведь включить рабочую память в нейронные сети - непростая задача. Было несколько подходов, таких как PBWM или долгосрочная краткосрочная память, которые имеют рабочую память. Эта задача 1-2-AX является хорошей задачей для этих моделей, и обе могут ее решить.

Ссылки [ править ]