Zadanie pamięci roboczej 1-2-AX
Zadanie pamięci roboczej 1-2-AX | |
---|---|
Zamiar | zdolności pamięci roboczej pamięci krótkotrwałej |
Zadanie pamięci roboczej 1-2-AX jest testem poznawczym , który wymaga rozwiązania pamięci roboczej .
Można go wykorzystać jako przypadek testowy do uczenia się algorytmów w celu sprawdzenia ich zdolności do zapamiętywania niektórych starych danych. To zadanie może być wykorzystane do zademonstrowania możliwości pamięci roboczej algorytmów , takich jak PBWM lub długa pamięć krótkotrwała .
Opis
Dane wejściowe zadania to sekwencja cyfr/liter 1 , 2 , A , X , B i Y oraz dodatkowe rozpraszające wystąpienia 3 , C i Z , które należy zignorować. Na każdy wprowadzany znak w sekwencji podmiot musi odpowiedzieć lewą ( L ) lub prawą ( R ).
Dwie sekwencje docelowe, których szuka podmiot, to AX i BY . Kiedy badany napotka 1 , musi przełączyć się na szukanie AX , a kiedy napotka 2 , musi przełączyć się na szukanie BY .
Szukając AX , jeśli badany napotka X , ponieważ wcześniej widział A (i podobnie dla Y , szukając BY ), a poprzednia litera nie była częścią wcześniejszej sekwencji, odpowiada R , aby zaznaczyć koniec tej sekwencja; ich odpowiedzią na wszystkie inne znaki powinno być L .
Przykłady
Wejście | 2 | 1 | A | A | X | X | Y | A | X |
---|---|---|---|---|---|---|---|---|---|
Wyjście | Ł | Ł | Ł | Ł | R | Ł | Ł | Ł | R |
Wejście | 1 | 2 | A | B | X | Y | A | C | Z |
---|---|---|---|---|---|---|---|---|---|
Wyjście | Ł | Ł | Ł | Ł | Ł | R | Ł | Ł | Ł |
Wymagania dla algorytmów
niezależnie zapamiętać zarówno ostatnią cyfrę 1 lub 2 , jak i ostatnią literę A lub B. Nazywamy tę pamięć pamięcią roboczą . Ta pamięć musi utrzymywać wszystkie inne dane wejściowe. Ponadto algorytm musi być w stanie usunąć i zignorować litery C i Z.
Rozwiązania
Pseudo kod
W przypadku tradycyjnych modeli komputerów oba wymagania są łatwe do spełnienia. Oto Pythona (rodzaj pseudokodu , ale działa), w którym funkcja next_output pobiera jedną cyfrę/literę jako dane wejściowe i zwraca albo literę, albo nic. next_outputs służy wygodzie obsługi całej sekwencji.
last_num = "" last_letter = "" def next_output ( next_input : str ) -> str | Brak : """ Argumenty: next_input: Ciąg zawierający pojedynczy znak. Zwraca: Ciąg zawierający litery "L", "R" lub None. Przykład: >>> next_output("2") 'L' """ global last_num , last_letter if next_input in [ "1" , "2" ]: last_num = next_input last_letter = "" return "L" elif next_input in [ "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 if seq in [ "1AX" , "2BY" ]: return "R" return "L" return Brak def next_outputs ( next_inputs : str ) -> list [ str ]: """ Argumenty: next_input: Ciąg. Zwraca: Lista ciągów zawierających litery "L" lub "R". Przykład: >>> next_outputs("21AAXBYAX") ["L" , "L", "L", "L", "R", "L", "L", "L", "R"] "" " return [ następne_wyjście ( c ) dla c w następnych_wejściach ]
Przykład:
>>> next_outputs ( "21AAXBYAX" ) ['L', 'L', 'L', 'L', 'R', 'L', 'L', 'L', 'R'] >>> next_outputs ( "12CBZY" ) ['L', 'L', Brak, 'L', Brak, 'R']
Maszyna o skończonych stanach
Podobnie zadanie to może być rozwiązane w prosty sposób przez maszynę skończoną z 7 stanami (nazwijmy je --- , 1-- , 2-- , 1A- , 2B- , 1AX , 2BY ).
Sieć neuronowa
To zadanie jest znacznie trudniejsze dla sieci neuronowych . W przypadku prostych sieci neuronowych typu feedforward zadanie to nie jest możliwe do rozwiązania, ponieważ sieci typu feedforward nie mają żadnej pamięci roboczej. W końcu włączenie pamięci roboczej do sieci neuronowych jest trudnym zadaniem. Było kilka podejść, takich jak PBWM lub długa pamięć krótkotrwała , które mają pamięć roboczą. To zadanie 1-2-AX jest dobrym zadaniem dla tych modeli i oba są w stanie je rozwiązać.