diff --git a/.gitattributes b/.gitattributes index a6344aac8c09253b3b630fb776ae94478aa0275b..4b44740469fbd5d2fbd2467c47c6fe7389e7bf65 100644 --- a/.gitattributes +++ b/.gitattributes @@ -33,3 +33,37 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text +source/authored/fig/example.png filter=lfs diff=lfs merge=lfs -text +source/authored/fig/exps/assoc_recall_mk/layers_dim.png filter=lfs diff=lfs merge=lfs -text +source/authored/fig/exps/assoc_recall_mk/layers_num_heads.png filter=lfs diff=lfs merge=lfs -text +source/authored/fig/exps/assoc_recall_mk/layers_state_dim.png filter=lfs diff=lfs merge=lfs -text +source/authored/fig/exps/assoc_recall_mk/layers_window.png filter=lfs diff=lfs merge=lfs -text +source/authored/fig/exps/binary_recall/layers_dim_3.png filter=lfs diff=lfs merge=lfs -text +source/authored/fig/exps/mini_decode_recall.png filter=lfs diff=lfs merge=lfs -text +source/authored/fig/exps/needle/layers_dim.png filter=lfs diff=lfs merge=lfs -text +source/authored/fig/exps/var_copy/layers_dim.png filter=lfs diff=lfs merge=lfs -text +source/authored/fig/exps/var_copy/layers_dim_1000.png filter=lfs diff=lfs merge=lfs -text +source/authored/fig/exps/var_copy/layers_dim_200.png filter=lfs diff=lfs merge=lfs -text +source/authored/fig/exps/var_copy/layers_num_heads.png filter=lfs diff=lfs merge=lfs -text +source/authored/fig/exps/var_copy/layers_state_dim.png filter=lfs diff=lfs merge=lfs -text +source/authored/fig/exps/var_copy/layers_window.png filter=lfs diff=lfs merge=lfs -text +source/official-code/micro_hf/results/assoc-recall-mk/fig/layers_dim.png filter=lfs diff=lfs merge=lfs -text +source/official-code/micro_hf/results/assoc-recall-mk/fig/layers_num_heads.png filter=lfs diff=lfs merge=lfs -text +source/official-code/micro_hf/results/assoc-recall-mk/fig/layers_state_dim.png filter=lfs diff=lfs merge=lfs -text +source/official-code/micro_hf/results/assoc-recall-mk/fig/layers_window.png filter=lfs diff=lfs merge=lfs -text +source/official-code/micro_hf/results/decode-recall/fig/dim_epochs.png filter=lfs diff=lfs merge=lfs -text +source/official-code/micro_hf/results/decode-recall/fig/layers_dim.png filter=lfs diff=lfs merge=lfs -text +source/official-code/micro_hf/results/decode-recall/fig/layers_dim_3.png filter=lfs diff=lfs merge=lfs -text +source/official-code/micro_hf/results/decode-recall/fig/layers_window.png filter=lfs diff=lfs merge=lfs -text +source/official-code/micro_hf/results/needle/fig/dim_epochs.png filter=lfs diff=lfs merge=lfs -text +source/official-code/micro_hf/results/needle/fig/layers_dim.png filter=lfs diff=lfs merge=lfs -text +source/official-code/micro_hf/results/needle/fig/layers_window.png filter=lfs diff=lfs merge=lfs -text +source/official-code/micro_hf/results/var-copy/fig/layers_dim.png filter=lfs diff=lfs merge=lfs -text +source/official-code/micro_hf/results/var-copy/fig/layers_num_heads.png filter=lfs diff=lfs merge=lfs -text +source/official-code/micro_hf/results/var-copy/fig/layers_state_dim.png filter=lfs diff=lfs merge=lfs -text +source/official-code/micro_hf/results/var-copy/fig/layers_window.png filter=lfs diff=lfs merge=lfs -text +source/official-code/mini/results/fig/p_0.2_eval_p_0.05.png filter=lfs diff=lfs merge=lfs -text +source/official-code/mini/results/fig/p_0.2_eval_p_0.1.png filter=lfs diff=lfs merge=lfs -text +source/official-code/mini/results/fig/p_0.2_eval_p_0.3.png filter=lfs diff=lfs merge=lfs -text +source/official-code/mini/results/fig/p_0.2_eval_p_0.5.png filter=lfs diff=lfs merge=lfs -text +source/official-code/mini/results/fig/p_0.2_eval_p_0.8.png filter=lfs diff=lfs merge=lfs -text diff --git a/CLAIMS.json b/CLAIMS.json new file mode 100644 index 0000000000000000000000000000000000000000..3027251b21b316620297c6f0c8700ccf160fb1b4 --- /dev/null +++ b/CLAIMS.json @@ -0,0 +1,31 @@ +{ + "orid": "82EJxJzG6r", + "arxiv_id": "2603.08859v1", + "title": "Expressivity-Efficiency Tradeoffs for Hybrid Sequence Models", + "claims": [ + { + "index": 1, + "text": "Theorem 3.3 proves that any k-layer state-space model solving the function-composition tasks under injectivity conditions must have total log state-space size scaling as Ω(m·log|V| − q·log|Y|), linear in the hidden dimension m (Theorem 3.3)." + }, + { + "index": 2, + "text": "Theorem 3.7 proves that sliding-window Transformers solving the same tasks under a local-sensitivity condition require total window size scaling with the context-dependency range R (Theorem 3.7)." + }, + { + "index": 3, + "text": "Theorem 4.3 constructs a two-layer hybrid (Mamba + attention) model that solves the selective copying task using embedding dimension O(max(log|V|, log L)) and working memory Õ(N), versus Ω(L) required by pure Transformers (Theorem 4.3)." + }, + { + "index": 4, + "text": "Theorem 4.6 constructs a three-layer hybrid model that achieves 99% accuracy on the associative recall task using embedding dimension O(max(log|V|, log L)) and window size Õ(|V|) (Theorem 4.6)." + }, + { + "index": 5, + "text": "On the selective copying task, the learned hybrid model reaches perfect accuracy with roughly 2,000 parameters while pure Transformer/SSM models need roughly 12,000 parameters to match it, a 6x parameter gap (Figure 4)." + }, + { + "index": 6, + "text": "On multi-key associative recall, the hybrid model reaches 60% accuracy using 6x fewer parameters than pure Transformers, which plateau near 40% accuracy on single-key associative recall (Figures 5-6)." + } + ] +} diff --git a/MANIFEST.sha256 b/MANIFEST.sha256 new file mode 100644 index 0000000000000000000000000000000000000000..642777f42fae2000557e037e1f19ead2ea403b0e --- /dev/null +++ b/MANIFEST.sha256 @@ -0,0 +1,237 @@ +623b5895c0e7b3bc6f8677d9e48d8aa0d5096d7973f8cddc507cfce0a0dd8831 CLAIMS.json +4a31929006e2de9085753f6c63dd831aa6a97b9209c2cfe99178265567736af3 OFFICIAL_VALIDATOR_RUN.json +95e55280501d6c6e02d77ee7d172212c18a88a38462d3a7ff3d06eb1b1593f8c README.md +1af2f46c506ae75a7e534800508eb618e2608c5e158a735c40a6b3a27774dfb6 REPLAY.json +edf2152f7756ad236995e22b097e45df60240c0dcf4f816f7e31319bb693e897 SEMANTIC_V4.json +cf11f3cb3d94de6d523c12233dcf4c4e54cbe7f40d085a54038bf0dc4b271b4b SOURCE_PROVENANCE.json +8abe413e4f0874c355d5b9f70ec4217489b146d263a4e7fbe5578871c507b372 VALIDATION.json +ab3cea500d0fb0ecba5d6977d181721d4d3f0bd1168dd3d006d26760d3e37ade audit_source_claims.py +28d5662f99475975c0f9c47234d72bf740cdc31c98e3f45bf9cebf57821b70d3 build_logbook.py +e07a2014b77c09ac99bc15a4136ddffb6fba3e87a7e10aa75b4ad5436ff35fb9 exp1_ssm_bound.py +cbbe73e70b9e2ac8d3671e3c725d92465738ddc1d5169d744154b724d2ad64c9 exp2_window_bound.py +67c1a14b45b145264daff2883b6eff6db5393828f1c1fc39536e017cbb3f3c45 exp3_selcopy_construction.py +98659455bc91453500accd5fd3e66d57687b955d9a0e4c4e8ec7a085ef21339e exp4_ar_construction.py +26a0e6aba4e24b3dc2dd4f1fac87a37a28c8ab629a58999a25164e553ebf6332 logbook.json +f03f608a23652a324db4b3329f12d1c0cba84ad8f8feeca39f3a95caa1f0d125 make_manifest.py +6439f09aefcebad5c600077c35eb1c3bbf762110405ac0bf47d31524072698e1 official_claims.json +685c19ccaffc8a993abd1196baa900aef75b3e3b4831927abb6d5efee826a1bd official_validator.py +cda7675b2b59deb26050668435bbd6e4d7f5a7fe169e88a851b4a57debd378b6 outputs/claim1.json +644f05f4af1131b092a8858a3f4ef9931bab04772b9db1097d5079e5c5fb7fa7 outputs/claim2.json +c2948406cd663b77c0502c23d6da9b71107b5388540f128f99c64e55d5be0d3b outputs/claim3.json +7ba1aee42a132c74b9875edb1a17b43a5f0d9a73cc78ce30cbd407f86ce77d50 outputs/claim3_native.json +48c3a0ea60f9e18747607f8ca0b8a40303b32cb6f562407b802dc30c19c0def0 outputs/claim4.json +4f7266b28d80bc0cc7102d5d6cb6d8eafd278d557487299af97fba71515ab33b outputs/claim4_native.json +daa15965236e3c890688d7751916192e6502db072eff9a65869f209e05a7f6cf outputs/claim5.json +ee900bdcd3c603327736e3533fa296c6337b75f2cdc6a50bbb78cf87c22bddc2 outputs/claim6.json +825cd4a03d921fb3242123e26e5bc24f8fbc9dfaacdf37814f3f822bc3d289d2 pages/claim-1-theorem-3-3-literal-bound/page.md +cf73a83a8f5412b044b91185bbea228f217eb5f452f1753070bdf5195770a666 pages/claim-2-theorem-3-7-window-bound/page.md +ca5d7f0ea97614613ac9008c7cb4c2cd93a296c9d14ea969a66ab4fd2263a45c pages/claim-3-theorem-4-3-selective-copy/page.md +50de5b40ca12b6b21d921e6e6156e8ba515280388c681db7e65aa60fe8c39122 pages/claim-4-theorem-4-6-associative-recall/page.md +910e5b716ace88949b9600ba1415a5e829a4447448f4988482af15888678c96d pages/claim-5-figure-4-selective-copy-learning/page.md +d6e24a8ba534781d1400f60fcea6f246ae49881a98f903b8ec1706f8e00e9363 pages/claim-6-figures-5-6-associative-recall-learning/page.md +c43516edb7ab1e47c0b945877457ca7bb484ddd2afbcb47db34a2e54c96ec2e4 pages/executive-summary/page.md +6bc66d5089b50b145d00491b930fa58b9a98f17c131d5d4c2fd510aef0da811d pages/index.md +235fc6d67669feb8bdba611f5aada7e4d7638f4b01e98d2bb0308e3edcf79cb3 paper_text.txt +cda7675b2b59deb26050668435bbd6e4d7f5a7fe169e88a851b4a57debd378b6 replay_a/claim1.json +644f05f4af1131b092a8858a3f4ef9931bab04772b9db1097d5079e5c5fb7fa7 replay_a/claim2.json +c2948406cd663b77c0502c23d6da9b71107b5388540f128f99c64e55d5be0d3b replay_a/claim3.json +7ba1aee42a132c74b9875edb1a17b43a5f0d9a73cc78ce30cbd407f86ce77d50 replay_a/claim3_native.json +48c3a0ea60f9e18747607f8ca0b8a40303b32cb6f562407b802dc30c19c0def0 replay_a/claim4.json +4f7266b28d80bc0cc7102d5d6cb6d8eafd278d557487299af97fba71515ab33b replay_a/claim4_native.json +daa15965236e3c890688d7751916192e6502db072eff9a65869f209e05a7f6cf replay_a/claim5.json +ee900bdcd3c603327736e3533fa296c6337b75f2cdc6a50bbb78cf87c22bddc2 replay_a/claim6.json +cda7675b2b59deb26050668435bbd6e4d7f5a7fe169e88a851b4a57debd378b6 replay_b/claim1.json +644f05f4af1131b092a8858a3f4ef9931bab04772b9db1097d5079e5c5fb7fa7 replay_b/claim2.json +c2948406cd663b77c0502c23d6da9b71107b5388540f128f99c64e55d5be0d3b replay_b/claim3.json +7ba1aee42a132c74b9875edb1a17b43a5f0d9a73cc78ce30cbd407f86ce77d50 replay_b/claim3_native.json +48c3a0ea60f9e18747607f8ca0b8a40303b32cb6f562407b802dc30c19c0def0 replay_b/claim4.json +4f7266b28d80bc0cc7102d5d6cb6d8eafd278d557487299af97fba71515ab33b replay_b/claim4_native.json +daa15965236e3c890688d7751916192e6502db072eff9a65869f209e05a7f6cf replay_b/claim5.json +ee900bdcd3c603327736e3533fa296c6337b75f2cdc6a50bbb78cf87c22bddc2 replay_b/claim6.json +e5e9949174874e50f184ae9cb93a03081b33f61348ac43b48e89fcc766903908 run_all.py +5bdc9b003531b5a101a6ab2b41fcecd8653a0170aac9a0ce10a10e71916bd267 run_native_constructions.py +e8d22bfd259aaa60385841d8643109ecb66f7eb1081dd76429f5215f05a032e8 source/2603.08859v1.tar.gz +d1f6b1a71c9accb812ec5121d1fff7910c025ca7bb201948bacdb40941bc14e5 source/authored/00README.json +58305508fa935a85634e9a69ee3a919648ea7e3cf25061120fb0cd1eae723999 source/authored/appendix/app_prelim.tex +f76427efb23af284fd0852afedf188310d3fad58cda11414930b87429155178a source/authored/appendix/construction_conventions.tex +4fbf21f1fa7544ff602fcd896a72a3babd50986fc2c5711f2d70b9844ba1a026 source/authored/appendix/constructions.tex +4caa42ab4df1d828ea44fb9167e017827477b66265d70f24c1fad42104d02b77 source/authored/appendix/experiment_details.tex +7e729f2198b6c5b7190355a7985b56096822f9c7c462ac1d42e6d62a03487406 source/authored/appendix/missing_proof_lb.tex +bd8c0384a10f6baf22cc4652d8c12e4b176fe439f90c41ad3c2f4aa8df200a2a source/authored/fig/construction_structure.pdf +f304cbf59f3c06bfa5a9e1df347701b4197cda26bc4ebd67e2471a104a84e50a source/authored/fig/example.png +b6bbbf7f68754086361ab6641322b7acf24f933b56fcb044c779a8b8f862212c source/authored/fig/exps/assoc_recall_mk/layers_dim.png +047a87d7c7b5e81595113875f27955cf30ce33056894921b6532998d7ff6b01f source/authored/fig/exps/assoc_recall_mk/layers_num_heads.png +c12d55000a42d3899f51599619e90ba7a24455c87aa113c0252a96ac1216e612 source/authored/fig/exps/assoc_recall_mk/layers_state_dim.png +c5355c62564a80012078b25777a9fdbaedc96359ccd3081e2e09d4bfb30f933f source/authored/fig/exps/assoc_recall_mk/layers_window.png +b6dd8cf4936994649a6d74ca2a1210c057571e19f0518584f6f15447a4d7272e source/authored/fig/exps/binary_recall/layers_dim_3.png +76ec4177346017cf7233b3a2cabadb2a517d7ca43ca60a0e238bcd866b8b8783 source/authored/fig/exps/constructions/decode_recall_input.pdf +5b66865ef2ef1491cae85f7faa370e6d17657b583481076709b56dbda1f1cc92 source/authored/fig/exps/constructions/decode_recall_output.pdf +392d7bd0ed19eddc8fd084c48d8367618af273c1fbf25fe00b00a66fa6af77b8 source/authored/fig/exps/constructions/selective_copy_input.pdf +563189f4e77fc950e0482d6432c2293c2298f9e6539cfd918fbf0ea8c333c7a7 source/authored/fig/exps/constructions/selective_copy_output.pdf +3200afa19cd9ebfd1ea5f6b1f53d02ad3683dcc3741ae00c67f8e34a89d6affc source/authored/fig/exps/mini_decode_recall.png +b03026887e3d4046aafb90f766b6a5154a2b742222ee71c53a007c6a1ca57c91 source/authored/fig/exps/needle/layers_dim.png +d40b41b76dc484233b2c83d6a59f613393fdca8d5f19d413727bcafc23660bc5 source/authored/fig/exps/var_copy/layers_dim.png +07c2d5ccc723acbc5a302b0b386f50244d8010f42c82aa616200076796067c23 source/authored/fig/exps/var_copy/layers_dim_1000.png +3a6dfd95e7aa31a031f42f9db1b99456cb2230096033e652a57b76d7516eb380 source/authored/fig/exps/var_copy/layers_dim_200.png +c49b8ed16b17f782392821672415a68b3b6878981bece5637c78729b0176ae47 source/authored/fig/exps/var_copy/layers_dim_adversary.png +a64ad32988841e8cfe2537c7df96442711dd8e5c6c81a05ec638f7ed5f25554d source/authored/fig/exps/var_copy/layers_num_heads.png +d8b8da4a094e7ac4cd878cfcb7ca6fc98913c8c6fd28ab7995045720e881dec8 source/authored/fig/exps/var_copy/layers_state_dim.png +f154fdb8104c5d0c3492019f22846c1e69cad5b1a110f24881523ea7d6be07b9 source/authored/fig/exps/var_copy/layers_window.png +b70c660739eba172c0dc3959139c7f931657c4887a8354448e87e13eb593988a source/authored/fig/selective_copy_construction_structure.pdf +92a399acca0a701a2fa2c1ed038192ac84dd6ab2430932081cc7283416699b8f source/authored/main.tex +3a7753a5a76463a9093767c57462ed42bd99fbe7d9594248b40c4fdd91f9a2e2 source/authored/mathcommands.tex +78b0d784946e5b987b8d5d62755f4463d122d50e49c6312f9989f28a7b16dc43 source/authored/reference.bib +c5db291da441eef14b0288d1a3f082fbddb0430b3ec3299d6f83f21982cb7fb8 source/authored/sections/conclusion.tex +fcd88332cbe90aff62337c3add333f71fc542736b3e459015a28f0b08ae3c55b source/authored/sections/experiments.tex +bc06eda70de577b8bfe7290e9edd6237bfa7d1feaa793de30306e49dd3d6f226 source/authored/sections/func_comp_and_construct.tex +cc0766f21b73d5251d78cded3e7573a0a6a4b6cabe454fd06a686ba7f8bcae17 source/authored/sections/introduction.tex +63836f14cc9a172d631ea42ae31e4cb7ca8c09660923ddaaedbb17543d24d559 source/authored/sections/prelim_and_notation.tex +8e80ed9742331f8c5d3954ee88e7b71d2db50f6e2050638625010a703c8b551f source/authored/sections/related.tex +80ba12f976423975af8377f1e80fb4b4b2622dd8dcca33fe6bbe398a28406408 source/authored/sections/tasks.tex +de2fba5f19810c4de6cc82a404726376a353b8910414c472363a95102041ee3f source/authored/sections/upper_bound.tex +95b4447f9fe95c059c5d3a8a30031ba8a03ae750e3231677c3a79ea9ebed65d0 source/official-code/.gitignore +0dd3ee6f457464358e14d0a6c8b3305c7984d3a7d5ae1c93f2a5cd57aee5d913 source/official-code/README.md +a6fa59b59c813a5349e8ff8995ba1e9bc8016586e25b1d961f3f5c30b94fa641 source/official-code/constructions/construction_decode_recall.ipynb +78b23ac5677e16533425aba2036f691776ccb87b6195394a24d47f98384fb9b9 source/official-code/constructions/construction_var_copy.ipynb +4d72444086d1d54a019cb60b62de233faf42c4fbbbdbb2da27701cc91edae9db source/official-code/constructions/data_utils.py +395135c45886fe7789c2371e9916eba08293575c9cadd5b30660b268f791431f source/official-code/constructions/fig/decode_recall_attention_pattern.pdf +76ec4177346017cf7233b3a2cabadb2a517d7ca43ca60a0e238bcd866b8b8783 source/official-code/constructions/fig/decode_recall_input.pdf +5b66865ef2ef1491cae85f7faa370e6d17657b583481076709b56dbda1f1cc92 source/official-code/constructions/fig/decode_recall_output.pdf +345a84eed08442a2b59e6f455c493324b43f6446b1cc84a595f805abbb32d06d source/official-code/constructions/fig/selective_copy_atterntion_pattern.pdf +392d7bd0ed19eddc8fd084c48d8367618af273c1fbf25fe00b00a66fa6af77b8 source/official-code/constructions/fig/selective_copy_input.pdf +563189f4e77fc950e0482d6432c2293c2298f9e6539cfd918fbf0ea8c333c7a7 source/official-code/constructions/fig/selective_copy_output.pdf +75f567e8bf36bfcb1df88a12b7bb6764b5a059f2e6dbfb741f8cfc8f40f27c4c source/official-code/constructions/generate.py +abf7541ec6f9b28b048d59411a5114a0c287db59a96ab5cf040a1768d4f5c8eb source/official-code/constructions/model_utils.py +02b238ec1175904e078c63d18fc45b9da536bc6ec18323a4463a829ac4dc27fb source/official-code/micro/generate.py +8e1d25e6932f626a92bb4fdf5d8c6d2264103a127a99312b96ede5e70fa822cb source/official-code/micro/interpretability.ipynb +a17976e516cdcbb9728223619d6f33f7220287cf38e2e08ca8fe968ac5cc632f source/official-code/micro/main.ipynb +84a1313267060e51091fc5d8952768867cb03b7757bed3d903d6f6b9746f7798 source/official-code/micro/models/hybrid.py +4818c94c8ee31a0dfaf076b967970c0f94fa233a33c0b1af3ee7055423d98839 source/official-code/micro/models/lrs.json +066ca7cc60488afa56239cc10b2fb389f55243ed2e62d49b18014ea3c13c668c source/official-code/micro/models/mlp.py +d1840ef2100dcfda7fed9f55b3989ca3cbbdeda5e2246a3729aba5a91dcdd019 source/official-code/micro/models/ssm.py +0a45ca3438a3f98c1ee0e0c8d5e344b4918195fbebd79c9dc3267d566144be9f source/official-code/micro/models/transformer.py +d17325dcede042cbf4c6bfc9e44c936db42c3724880ec3ba33c541f111254143 source/official-code/micro/ood.ipynb +2c556150faaa560759a840a751064202aeb11bb33fe58a3cf48a0f0be601cef1 source/official-code/micro/plt_utils.py +897d2689a7672aa1fc42e3094699175fedf9960fe755b6c2729ad2535c184e24 source/official-code/micro/process.ipynb +e8a536233cc8ec8093ee7c399b0fe57e9ccc55a4b79fc958ae6d6c61c60b1e91 source/official-code/micro/process_ood.ipynb +292e87e57cc08ad024a5c9d7fd02b41acb7e24dd728315069a583092176fbce8 source/official-code/micro/results/assoc_recall/fig/dim_epochs.png +99e4cf3fcbd743e6aacee54dd740961e5501accad32c78e9d2fef9505af2e2c6 source/official-code/micro/results/assoc_recall/fig/layers_dim.png +af073aaa7882c71416064dc7e0e461b98d3386ce1326d5b0f5e5dde22aa828ee source/official-code/micro/results/assoc_recall/fig/layers_num_heads.png +ddcad6b05cd1f84ca352da89cc391aec6912d6adb1b9b73f769f7c5b76cd3837 source/official-code/micro/results/assoc_recall/fig/layers_state_dim.png +865fa1c71efacafc816bc05357afcb65f5aa1493bc0bd72ceb4114e001134a00 source/official-code/micro/results/assoc_recall/fig/layers_window.png +61c59a0e41d65ba8cd5ae2d00549d679f3dd0f9cf08352bb088a4937052ec8db source/official-code/micro/results/assoc_recall_mk/fig/dim_epochs.png +432c179c8068f5c12e53f02d274d7a09c93a44d99121dc02bf752b437b7bb419 source/official-code/micro/results/assoc_recall_mk/fig/layers_dim.png +3f558698264d3de367ec7a2741f75272d746f74dd6e7ec476b923e545f5340fa source/official-code/micro/results/assoc_recall_mk/fig/layers_num_heads.png +3450659f857558c1332bdf10bcdc555442c25405c18d2fd87cd5e9a24a01fd6c source/official-code/micro/results/assoc_recall_mk/fig/layers_state_dim.png +752c8d3e46c74c300e0a097a13089c822981cdefa4472767c8e35cea69270fde source/official-code/micro/results/assoc_recall_mk/fig/layers_window.png +48dae7b32fa3262e8441555c38d709e34f63a1a1e22da1148bbf414a1777e8e4 source/official-code/micro/results/binary_recall_mix/fig/dim_epochs.png +b170ddca5ef9b8237102857bb3e898d7ee4d153f71dd445d80fadeae8bf2e7b6 source/official-code/micro/results/binary_recall_mix/fig/layers_dim.png +54186822469cf4e26ea8050ae9a7ac0e1adfca37e669bf714cfeb63b41b0ac2e source/official-code/micro/results/binary_recall_mix/fig/layers_num_heads.png +aaa0ea4006bc9622eea5fa1bafc842c35cc1db23a405c8085facf1c3a4096478 source/official-code/micro/results/binary_recall_mix/fig/layers_state_dim.png +9ec3639621f501e903bd1283d532b967ae93103b37a74621feb5957b672a974d source/official-code/micro/results/binary_recall_mix/fig/layers_window.png +4caf88944fc3616725ae3fe5f90321fa6796a51776dd44590a73acc3287f6b7e source/official-code/micro/results/var_copy/fig/dim_epochs.png +677c5376126238b0193eb502fc8be061c544c36bd6d8face11054bdd34fe73d3 source/official-code/micro/results/var_copy/fig/layers_dim.png +8a92ff131a7c52b6b65b7a5019133ff261474e5f12b24667c5ddaa8ee9544517 source/official-code/micro/results/var_copy/fig/layers_num_heads.png +4e333de1401a9b26bdfbcae3f22cf8cac52e3d43a0ec2baac8e9f87f7c1031eb source/official-code/micro/results/var_copy/fig/layers_state_dim.png +c2d69684476d5d4a171203914183a1caef8c7092af544900d86eada0f8d617ae source/official-code/micro/results/var_copy/fig/layers_window.png +b94961634bd5f8f470f0bc55431ebd3d5d7e27b9e22ef8a38a8bedf75e83badf source/official-code/micro/train.py +1469a82af7d76625d62c89a8c152dd04774a7876a5d3223e6d3cc143e61ac3bf source/official-code/micro/train_utils.py +09a7f94d2924cdd59e0edb987b4e8da42f79c39a116fccaad5cf23063b442e71 source/official-code/micro_hf/cmds.txt +81d6852fcd00980a98e8206f9ee516831f94abffb041f7164f71fba284798bc1 source/official-code/micro_hf/data_utils.py +f2fb47708ec954eab60afbd67a408398bfa63cb7a424620314938c3349763bf7 source/official-code/micro_hf/generate.py +5c8d4119c506e0478717c1b210224b23cf7ff485b2e1b014f5f5775c71a060bf source/official-code/micro_hf/main.py +79be61b4e07558b184cb8bd3dbb73d3c65bceee8eaa35ac0d387758bb376e841 source/official-code/micro_hf/model_utils.py +17eb7f1b68b7f18228cba9deb6195b21adb5f7a9ec9801114cff31080be042d7 source/official-code/micro_hf/models/__init__.py +9997367b54c737d150d819889897d080dff0760d581e63095a996bfe871be2a8 source/official-code/micro_hf/models/hard_alibi_model.py +2b6dff0c91cf2b7b207ec14662459ef9a9f412aa665da6690b7cfa5dda73d867 source/official-code/micro_hf/models/hybrid.py +344865438cf90b8a8cfd2316a9a2f2a1b710542a4b4b8814aef8da5570dde032 source/official-code/micro_hf/models/hybrid_nope.py +2e4a08af06d0cf288d973d85d579899923609c0718e818e1b8fe52ce12c76f32 source/official-code/micro_hf/models/mamba.py +451fe4ae08788545757d96a3ddea726b947d167ad2cf62d5f9d0f82bb1d2daf1 source/official-code/micro_hf/models/nope.py +07ce3adb89e1816dead845566247f7df6a832eb7d982c429e2fbc82506472355 source/official-code/micro_hf/models/rope.py +31ce9565bfd56d0bcc706f477a4fb397f0bb67c6e788ffa72776f496b9d711df source/official-code/micro_hf/plt_utils.py +d67f10dd85b8d952bbc31dfe69e45dab2dd78056803258666df767ccde72dd9e source/official-code/micro_hf/process.ipynb +f689a6ea390d15ec7da7549a8429ff813ee56d06b7383bee7bdfbb4392a757dd source/official-code/micro_hf/process_get_data.ipynb +6b27d3710bfe17f908f9f8e40417dc29eafce1f2ea6695758ad2a4886e1ea7fb source/official-code/micro_hf/results/assoc-recall-mk/fig/depths_layers.png +93e6c55110c3e696a40db87addae88bf1f5d0c4825521ac734e2a5daac598b6d source/official-code/micro_hf/results/assoc-recall-mk/fig/dim_epochs.png +b6bbbf7f68754086361ab6641322b7acf24f933b56fcb044c779a8b8f862212c source/official-code/micro_hf/results/assoc-recall-mk/fig/layers_dim.png +047a87d7c7b5e81595113875f27955cf30ce33056894921b6532998d7ff6b01f source/official-code/micro_hf/results/assoc-recall-mk/fig/layers_num_heads.png +c12d55000a42d3899f51599619e90ba7a24455c87aa113c0252a96ac1216e612 source/official-code/micro_hf/results/assoc-recall-mk/fig/layers_state_dim.png +c5355c62564a80012078b25777a9fdbaedc96359ccd3081e2e09d4bfb30f933f source/official-code/micro_hf/results/assoc-recall-mk/fig/layers_window.png +eab188c1ae231d979e8c8ae51c7a0448bef35836ed7a8522a9c31368a7a4841d source/official-code/micro_hf/results/assoc-recall-mk/fig/model_layers.png +131d1e2bf27c58f5c147537ac22497bea739cbf8965c782762edeec58d55bb82 source/official-code/micro_hf/results/assoc-recall-mk/lrs.json +6b27d3710bfe17f908f9f8e40417dc29eafce1f2ea6695758ad2a4886e1ea7fb source/official-code/micro_hf/results/decode-recall/fig/depths_layers.png +a4f06790804ba2ae16a8b81b0f4b0a3fcb7bb985ef880351268acd9bca28b3a5 source/official-code/micro_hf/results/decode-recall/fig/dim_epochs.png +23b9303f51e0adfe12db1bcb78da27ca13abe1cdc36a1e2f76f28a67c117eecc source/official-code/micro_hf/results/decode-recall/fig/layers_dim.png +7797eca4cccbc09a2f1835e5fefb6730d0c7e9515e77d5658061d909e166f5d6 source/official-code/micro_hf/results/decode-recall/fig/layers_dim_3.png +74a1274cb051470d5137461148588308460fae27738428ef11ec49db62e894fb source/official-code/micro_hf/results/decode-recall/fig/layers_num_heads.png +a7f7cec72f44fb1e3d59d86029c350ce7593997b00dddad2b4e07dd4719a18cf source/official-code/micro_hf/results/decode-recall/fig/layers_state_dim.png +28958c69a13fd12ad6ff31840630bc09100c5426c225d8f5b7ab9ed874be7f19 source/official-code/micro_hf/results/decode-recall/fig/layers_window.png +2c71683abc85af0fd0fe8bd96e30207f3b0c239af7f3fb819356955770d20f26 source/official-code/micro_hf/results/decode-recall/fig/layers_window_3.png +da40d4f3070dcd9c37d49594540305b479dc174a6f5246a2eb0725ab7b71520c source/official-code/micro_hf/results/decode-recall/lrs.json +1f6528fa0a7566021bfbd9af26f18d961701236e8e786524a7a32d11c953d2be source/official-code/micro_hf/results/decode-recall-last/fig/dim_epochs.png +ae98cc03140f9e01dc07ada5ce72924b648e4bea4e2abd4f18607b11b6fd6fd3 source/official-code/micro_hf/results/decode-recall-last/fig/layers_dim.png +fb7317b68f8860052e61c0e9e92f882f51ca08556e686ea2f586cd4d0d408268 source/official-code/micro_hf/results/decode-recall-last/fig/layers_dim_3.png +b9fe2f70cf87387269c3634739a21820b8e495e788443df4f58c88e425afc422 source/official-code/micro_hf/results/decode-recall-last/fig/layers_num_heads.png +45eed96ea8559653178411bb3cb636d7f082c7e7c84058b62c187022c6bdbe4e source/official-code/micro_hf/results/decode-recall-last/fig/layers_state_dim.png +31ddf97e08062fa06ab3de3de68768441c73982fe6a2a220247de794585a443e source/official-code/micro_hf/results/decode-recall-last/fig/layers_window.png +323a163e732dd2b1a856d7e469c08d9998f45a2e012c99b67f42089741df8983 source/official-code/micro_hf/results/decode-recall-last/fig/layers_window_3.png +0b9a5375f603f20a7a8f834dc14e19c044758978605032e0cba5c21a66ae8ab5 source/official-code/micro_hf/results/decode-recall-last/lrs.json +6b27d3710bfe17f908f9f8e40417dc29eafce1f2ea6695758ad2a4886e1ea7fb source/official-code/micro_hf/results/needle/fig/depths_layers.png +9b0714398dbcef230152bda69a34594d53909aeefd0bdd0cea3972aaa0d61e7c source/official-code/micro_hf/results/needle/fig/dim_epochs.png +8e45ae15a219c5f4c67b9875ce95d3ca3117a0aafba1fb27b5c1087470f8bf2e source/official-code/micro_hf/results/needle/fig/layers_dim.png +38555628125f7fa9a711594341f7e826b35711f5b46ab1d92daa4941fb1b32c4 source/official-code/micro_hf/results/needle/fig/layers_num_heads.png +fb70e7affe33e2dd628a6daec4a7a502951bc8b137244cfb680fb69def155b71 source/official-code/micro_hf/results/needle/fig/layers_state_dim.png +c12ce6669c6324ec13642d30e758f664b74239c140f93366e186f019ccd12d53 source/official-code/micro_hf/results/needle/fig/layers_window.png +7ec62a37bf34c4ca53a1dfba0ffc29a54639afd35d1f0033c56ced3d92082461 source/official-code/micro_hf/results/needle/lrs.json +6b27d3710bfe17f908f9f8e40417dc29eafce1f2ea6695758ad2a4886e1ea7fb source/official-code/micro_hf/results/var-copy/fig/depths_layers.png +2a45b6b14e95ee7f68550645597fc232728d2361238660d7df9c57ae2f96f6bb source/official-code/micro_hf/results/var-copy/fig/dim_epochs.png +d40b41b76dc484233b2c83d6a59f613393fdca8d5f19d413727bcafc23660bc5 source/official-code/micro_hf/results/var-copy/fig/layers_dim.png +a64ad32988841e8cfe2537c7df96442711dd8e5c6c81a05ec638f7ed5f25554d source/official-code/micro_hf/results/var-copy/fig/layers_num_heads.png +d8b8da4a094e7ac4cd878cfcb7ca6fc98913c8c6fd28ab7995045720e881dec8 source/official-code/micro_hf/results/var-copy/fig/layers_state_dim.png +f154fdb8104c5d0c3492019f22846c1e69cad5b1a110f24881523ea7d6be07b9 source/official-code/micro_hf/results/var-copy/fig/layers_window.png +f63159a0251f2b77838e31b6ac5544bce7a34b5b027a395135f1d9543d8e763a source/official-code/micro_hf/results/var-copy/lrs.json +06c0a792889df5223befd3c104f9081cbbe5fa7749de7ab349f42732d0eda212 source/official-code/micro_hf/run.ipynb +9e3bfec483af025854e9ebf8396a8ba645fb160d17e2d7fd811c248f7160d5c5 source/official-code/micro_hf/test_utils.py +ec4ccc0fa03f636f141904484f54763576e741c6f3586b1405343bb844c7c040 source/official-code/micro_hf/train_utils.py +8c8de8d919900426514c5c0bfd7b4e459a8fd9a07808d38bfcb5646e87e7db68 source/official-code/mini/LICENSE +28c7bafdae2f12a40a52b8329a04851c9c8b8a5442139043ed737a639cb390ef source/official-code/mini/README.md +d3ac296171b9de2ed1133b00b84ae72b1d85b29d03144f4cb3e8ce877e472770 source/official-code/mini/cmd.txt +a3130746ebbeda13cfa8a5505e0a55b10e336ecb0959f538c05d21a8d7dfbf4f source/official-code/mini/data_utils.py +e783bbb24ffbf7754bee14fe549844e68689b77081451610b320f4c48117f8c8 source/official-code/mini/exp.ipynb +49c62b63ca1e33c565a641a99c5ed42919fff576d8e178893781cdf1425cc4eb source/official-code/mini/main.py +8798dea4da5c960b3e0fee1e8b745e4e74e4ecc9513613908e02afc8aeeb0323 source/official-code/mini/main_binary_recall.py +9daf389e164bee5d36e5833f386f4d28e7f607c2a0a680dc40c48ae8cea25351 source/official-code/mini/model_utils.py +31ac911f56604dddf96ebfa83815887203307412ae456992869b807bbadda33b source/official-code/mini/models/__init__.py +70f95f50e72d475b4344630a3ac0dff04148295d145c1882d45bb10c64f86f7c source/official-code/mini/models/alibi_model.py +9997367b54c737d150d819889897d080dff0760d581e63095a996bfe871be2a8 source/official-code/mini/models/hard_alibi_model.py +0eafe8c1bb50b8160625cc3ec58441265b17382e25a75e1a77f22581f9a5b64d source/official-code/mini/models/hybrid.py +00435ff479ed75418e00591a1231c311f3404ca0b5adcef853f460a2e789f503 source/official-code/mini/models/hybrid_nope.py +6ecd0deae5dc88b05f284d88f70a542a9090f38a5dbb107e89bed2ffc7614555 source/official-code/mini/models/lstm.py +2e4a08af06d0cf288d973d85d579899923609c0718e818e1b8fe52ce12c76f32 source/official-code/mini/models/mamba.py +451fe4ae08788545757d96a3ddea726b947d167ad2cf62d5f9d0f82bb1d2daf1 source/official-code/mini/models/nope.py +2271fadc5024a9528bbe104e03696963de706409949f4cc86fde3b12e1e63469 source/official-code/mini/models/rope.py +df1385f452af32f1540ca2c56ed4510300cb4d4f053e3d68ec04a89c37ee02ec source/official-code/mini/process.ipynb +937cdcbefb0145207119242506d345eee82ecc227610f51ebd4f8e25aee7fdfe source/official-code/mini/results/exp.txt +c9f1d248e95997d72329b88829ea52991133b5a769d420b798cf4051cfe91dbb source/official-code/mini/results/exp1.txt +a57a07e893e5901d451cb62be6daf6c437fde78aba51843ce99be0a853d6c816 source/official-code/mini/results/exp2.txt +e2a2b0c35444bb779d89227aa6fdf9e375283a1b83647f847a9a6d629958c54e source/official-code/mini/results/exp3.txt +0e33c10f5506e0454bbfee20d890736ab493dcedce4427f815ebaec1c5fe9947 source/official-code/mini/results/exp4.txt +a39c8f0ce715507cbf8d8d565da3c91b16ea817c9029a7ccf5cb6084efbc3df3 source/official-code/mini/results/exp5.txt +af19888aba250b0b0773556bb60f182fb0bced7979c5302eaddd6db0e4c3139f source/official-code/mini/results/exp6.txt +0e07dba867faaa9134da2b44ed637fd3e5f0582acfd203adf2abcbb5850648b2 source/official-code/mini/results/fig/eval_p_0.2.png +97650c0ee292566b9516788f1ae3483c5dda118dfa9a252684304ad61253cd2f source/official-code/mini/results/fig/p_0.01_eval_p_0.2.png +9f16927cadb88035d9edebeeb97ab4b80ea2af2929be6daea62dee964ce7f19a source/official-code/mini/results/fig/p_0.2_eval_p_0.01.png +2280f32b902648f92735d3135617f1bc611c0b27c5684cf6006870d14bcb3fcd source/official-code/mini/results/fig/p_0.2_eval_p_0.05.png +24cc97585798a3ca60b27697bf5a89b93ede2895d9b82be9093d0fb10fc370df source/official-code/mini/results/fig/p_0.2_eval_p_0.1.png +0fbbe59ab479569fc5e55b2e6e8513b597425759803009bb5c36432f98edc311 source/official-code/mini/results/fig/p_0.2_eval_p_0.2.png +3200afa19cd9ebfd1ea5f6b1f53d02ad3683dcc3741ae00c67f8e34a89d6affc source/official-code/mini/results/fig/p_0.2_eval_p_0.3.png +a71d6ec5fa5e3200b6f266b217c9850111bd81f5b256422a522362d2cf790c3c source/official-code/mini/results/fig/p_0.2_eval_p_0.5.png +09b70c10e52b38eaa39512229f4c4155d701f4f6d7ad2b24914b94a4a6a1a4a0 source/official-code/mini/results/fig/p_0.2_eval_p_0.8.png +0edf4248aaabe7722735648c09c938630aba85f8ba2daf2bd45b2246ad576b59 source/official-code/mini/temp_results/results.png +f45c9c16cd589fc8f0bfb35776f73ed179e8afdcf500477e0afe842b3ff3a334 source/official-code/mini/temp_results/temp_results.ipynb +786cef7322e5d8918aa94b1fba41360859ef37bb48584754b580ab30cdfaa28a source/official-code/mini/test.py +0cebfb698d2d30ebf6c756276627e48facc93c15154d4484a5d773a6b3734d5e source/official-code/mini/test_utils.py +be4728ef54011c728f4d5e6b62e2855d74821c82c5bff22994b16fce1fb21125 source/official-code/mini/train_utils.py +062e233eb12f51ca91e5e5644bc0aa8084cadad4d11ada209e935f0819d6c65b source/official-code/output.png +6aee53116bc311ee3ab8e1a87b9e5e160f2a502c1906c8f00ef4f4fdc518e809 source/official-code/useful_commands.txt +a5bb950c7f7ea370951dd4fc5d31d4e5fc40da1c801d39190ce460e4bb3f7d32 validate_logbook.py diff --git a/OFFICIAL_VALIDATOR_RUN.json b/OFFICIAL_VALIDATOR_RUN.json new file mode 100644 index 0000000000000000000000000000000000000000..1017789d76b72a2c7a6def8677c5a68c99e9445b --- /dev/null +++ b/OFFICIAL_VALIDATOR_RUN.json @@ -0,0 +1,13 @@ +{ + "validator": "official_validator.py", + "authority": "authoritative release gate for this local package only", + "not_claimed": [ + "ICML validator", + "OpenReview validator", + "paper-author validator", + "remote campaign validator" + ], + "semantic_v4": "SEMANTIC_V4.json", + "validation": "VALIDATION.json", + "passed": true +} diff --git a/README.md b/README.md index ab326c08d109001e6690667a3589e870fa24fea0..414d44f1209c8655fcfc0836b302ba09ac431385 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,36 @@ --- -title: Repro Expressivity Efficiency Hybrid Sequence -emoji: 🐠 -colorFrom: pink -colorTo: red +title: Reproduction - Expressivity-Efficiency Hybrid Sequence Models +emoji: 📐 +colorFrom: blue +colorTo: green sdk: static pinned: false +short_description: Six claims audited, arXiv 2603.08859 +tags: + - trackio + - open-reproductions + - icml2026-repro + - paper-82EJxJzG6r --- -Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference +# Local ICML reproduction audit + +This package audits the six frozen registered claims for arXiv:2603.08859v1 / OpenReview `82EJxJzG6r`. It is deliberately isolated and local: no Hugging Face Space, campaign ledger, or remote validation target is created or changed. + +Run the complete deterministic package with: + +```sh +python3 run_all.py +``` + +That runs every evidence route twice, compares the eight result artifacts byte-for-byte, builds all pages, runs `official_validator.py` (the authoritative local-package gate, not an ICML/OpenReview/author validator), writes `SEMANTIC_V4.json` with 12 local semantic checks and `VALIDATION.json`, and finally writes `MANIFEST.sha256`. + +The proposed (not created) target slug is `repro-hybrid-seq-82ejxjzg6r`. + +Evidence categories are deliberately distinct: + +- Claims 1–2: literal theorem audit and direct numerical witnesses. +- Claims 3–4: independent finite implementations of written constructions, plus direct execution of author notebook cells recorded separately. +- Claims 5–6: exact authored-source table audit only; learned training is not claimed as rerun because the supplied training path hard-codes CUDA and this host has no CUDA device. + +Important limitations are in each claim page. In particular, Claim 1 is falsified at the literal printed scope, Claim 5’s `.999` is not silently rewritten to perfect accuracy, and Claim 6’s Figure 5 and Figure 6 tasks are not conflated. diff --git a/REPLAY.json b/REPLAY.json new file mode 100644 index 0000000000000000000000000000000000000000..491c6f191a2822113b8912f171560a8885c7ed50 --- /dev/null +++ b/REPLAY.json @@ -0,0 +1,64 @@ +{ + "kind": "paired_deterministic_local_replay", + "files": [ + { + "file": "outputs/claim1.json", + "replay_a_sha256": "cda7675b2b59deb26050668435bbd6e4d7f5a7fe169e88a851b4a57debd378b6", + "replay_b_sha256": "cda7675b2b59deb26050668435bbd6e4d7f5a7fe169e88a851b4a57debd378b6", + "byte_identical": true + }, + { + "file": "outputs/claim2.json", + "replay_a_sha256": "644f05f4af1131b092a8858a3f4ef9931bab04772b9db1097d5079e5c5fb7fa7", + "replay_b_sha256": "644f05f4af1131b092a8858a3f4ef9931bab04772b9db1097d5079e5c5fb7fa7", + "byte_identical": true + }, + { + "file": "outputs/claim3.json", + "replay_a_sha256": "c2948406cd663b77c0502c23d6da9b71107b5388540f128f99c64e55d5be0d3b", + "replay_b_sha256": "c2948406cd663b77c0502c23d6da9b71107b5388540f128f99c64e55d5be0d3b", + "byte_identical": true + }, + { + "file": "outputs/claim4.json", + "replay_a_sha256": "48c3a0ea60f9e18747607f8ca0b8a40303b32cb6f562407b802dc30c19c0def0", + "replay_b_sha256": "48c3a0ea60f9e18747607f8ca0b8a40303b32cb6f562407b802dc30c19c0def0", + "byte_identical": true + }, + { + "file": "outputs/claim5.json", + "replay_a_sha256": "daa15965236e3c890688d7751916192e6502db072eff9a65869f209e05a7f6cf", + "replay_b_sha256": "daa15965236e3c890688d7751916192e6502db072eff9a65869f209e05a7f6cf", + "byte_identical": true + }, + { + "file": "outputs/claim6.json", + "replay_a_sha256": "ee900bdcd3c603327736e3533fa296c6337b75f2cdc6a50bbb78cf87c22bddc2", + "replay_b_sha256": "ee900bdcd3c603327736e3533fa296c6337b75f2cdc6a50bbb78cf87c22bddc2", + "byte_identical": true + }, + { + "file": "outputs/claim3_native.json", + "replay_a_sha256": "7ba1aee42a132c74b9875edb1a17b43a5f0d9a73cc78ce30cbd407f86ce77d50", + "replay_b_sha256": "7ba1aee42a132c74b9875edb1a17b43a5f0d9a73cc78ce30cbd407f86ce77d50", + "byte_identical": true + }, + { + "file": "outputs/claim4_native.json", + "replay_a_sha256": "4f7266b28d80bc0cc7102d5d6cb6d8eafd278d557487299af97fba71515ab33b", + "replay_b_sha256": "4f7266b28d80bc0cc7102d5d6cb6d8eafd278d557487299af97fba71515ab33b", + "byte_identical": true + } + ], + "byte_identical": true, + "python": "3.13.3", + "commands": [ + "/Library/Frameworks/Python.framework/Versions/3.13/bin/python3 exp1_ssm_bound.py", + "/Library/Frameworks/Python.framework/Versions/3.13/bin/python3 exp2_window_bound.py", + "/Library/Frameworks/Python.framework/Versions/3.13/bin/python3 exp3_selcopy_construction.py", + "/Library/Frameworks/Python.framework/Versions/3.13/bin/python3 exp4_ar_construction.py", + "/Library/Frameworks/Python.framework/Versions/3.13/bin/python3 run_native_constructions.py", + "/Library/Frameworks/Python.framework/Versions/3.13/bin/python3 audit_source_claims.py", + "/Library/Frameworks/Python.framework/Versions/3.13/bin/python3 build_logbook.py" + ] +} diff --git a/SEMANTIC_V4.json b/SEMANTIC_V4.json new file mode 100644 index 0000000000000000000000000000000000000000..a5c9ca7e44053497afb3c604b06a7676414ae28d --- /dev/null +++ b/SEMANTIC_V4.json @@ -0,0 +1,68 @@ +{ + "profile": "semantic-v4-local", + "validator": "local_bundle_validator_not_campaign_validator", + "checks": [ + { + "name": "frozen_six_claims", + "passed": true, + "detail": "CLAIMS.json exactly equals the six registered claim strings." + }, + { + "name": "complete_eight_routes", + "passed": true, + "detail": "Index, executive summary, and six claim routes exist." + }, + { + "name": "exact_authored_archive", + "passed": true, + "detail": "arXiv e-print archive matches the retrieval SHA-256." + }, + { + "name": "pinned_clean_code_checkout", + "passed": true, + "detail": "Linked source repository is detached at the recorded clean commit." + }, + { + "name": "claim1_literal_falsification", + "passed": true, + "detail": "Under injectivity the printed RHS is non-positive; one-state 1/2 witnesses are retained." + }, + { + "name": "claim2_receptive_field_witnesses", + "passed": true, + "detail": "Real causal-attention stacks preserve the designed outside-window witness." + }, + { + "name": "claim3_construction_and_controls", + "passed": true, + "detail": "Independent finite construction succeeds while destructive controls fail." + }, + { + "name": "claim4_full_vocab_certificate", + "passed": true, + "detail": "Full-vocabulary construction passes its exact coverage and small-domain gates." + }, + { + "name": "claim4_sample_certificate_distinction", + "passed": true, + "detail": "The one sub-99% finite sample mean is retained separately from the exact coverage certificate." + }, + { + "name": "direct_native_notebooks_retained", + "passed": true, + "detail": "Author notebook cell execution and destructive controls are reported without upgrading scope." + }, + { + "name": "claim5_exact_source_scope", + "passed": true, + "detail": "Figure 4 table is preserved as .999, not silently converted to 1.000." + }, + { + "name": "claim6_source_contradiction_marked", + "passed": true, + "detail": "Figure 6 sixfold row and Figure 5 task distinction are explicitly retained." + } + ], + "passed": true, + "check_count": 12 +} diff --git a/SOURCE_PROVENANCE.json b/SOURCE_PROVENANCE.json new file mode 100644 index 0000000000000000000000000000000000000000..41d33b57ec16ddba0e79f0f8b415ca6a514bb738 --- /dev/null +++ b/SOURCE_PROVENANCE.json @@ -0,0 +1,53 @@ +{ + "arxiv_id": "2603.08859v1", + "arxiv_eprint_url": "https://export.arxiv.org/e-print/2603.08859v1", + "archive": "source/2603.08859v1.tar.gz", + "archive_sha256": "e8d22bfd259aaa60385841d8643109ecb66f7eb1081dd76429f5215f05a032e8", + "archive_sha256_expected_from_retrieval": "e8d22bfd259aaa60385841d8643109ecb66f7eb1081dd76429f5215f05a032e8", + "authored_tree_file_sha256": { + "source/authored/00README.json": "d1f6b1a71c9accb812ec5121d1fff7910c025ca7bb201948bacdb40941bc14e5", + "source/authored/appendix/app_prelim.tex": "58305508fa935a85634e9a69ee3a919648ea7e3cf25061120fb0cd1eae723999", + "source/authored/appendix/construction_conventions.tex": "f76427efb23af284fd0852afedf188310d3fad58cda11414930b87429155178a", + "source/authored/appendix/constructions.tex": "4fbf21f1fa7544ff602fcd896a72a3babd50986fc2c5711f2d70b9844ba1a026", + "source/authored/appendix/experiment_details.tex": "4caa42ab4df1d828ea44fb9167e017827477b66265d70f24c1fad42104d02b77", + "source/authored/appendix/missing_proof_lb.tex": "7e729f2198b6c5b7190355a7985b56096822f9c7c462ac1d42e6d62a03487406", + "source/authored/fig/construction_structure.pdf": "bd8c0384a10f6baf22cc4652d8c12e4b176fe439f90c41ad3c2f4aa8df200a2a", + "source/authored/fig/example.png": "f304cbf59f3c06bfa5a9e1df347701b4197cda26bc4ebd67e2471a104a84e50a", + "source/authored/fig/exps/assoc_recall_mk/layers_dim.png": "b6bbbf7f68754086361ab6641322b7acf24f933b56fcb044c779a8b8f862212c", + "source/authored/fig/exps/assoc_recall_mk/layers_num_heads.png": "047a87d7c7b5e81595113875f27955cf30ce33056894921b6532998d7ff6b01f", + "source/authored/fig/exps/assoc_recall_mk/layers_state_dim.png": "c12d55000a42d3899f51599619e90ba7a24455c87aa113c0252a96ac1216e612", + "source/authored/fig/exps/assoc_recall_mk/layers_window.png": "c5355c62564a80012078b25777a9fdbaedc96359ccd3081e2e09d4bfb30f933f", + "source/authored/fig/exps/binary_recall/layers_dim_3.png": "b6dd8cf4936994649a6d74ca2a1210c057571e19f0518584f6f15447a4d7272e", + "source/authored/fig/exps/constructions/decode_recall_input.pdf": "76ec4177346017cf7233b3a2cabadb2a517d7ca43ca60a0e238bcd866b8b8783", + "source/authored/fig/exps/constructions/decode_recall_output.pdf": "5b66865ef2ef1491cae85f7faa370e6d17657b583481076709b56dbda1f1cc92", + "source/authored/fig/exps/constructions/selective_copy_input.pdf": "392d7bd0ed19eddc8fd084c48d8367618af273c1fbf25fe00b00a66fa6af77b8", + "source/authored/fig/exps/constructions/selective_copy_output.pdf": "563189f4e77fc950e0482d6432c2293c2298f9e6539cfd918fbf0ea8c333c7a7", + "source/authored/fig/exps/mini_decode_recall.png": "3200afa19cd9ebfd1ea5f6b1f53d02ad3683dcc3741ae00c67f8e34a89d6affc", + "source/authored/fig/exps/needle/layers_dim.png": "b03026887e3d4046aafb90f766b6a5154a2b742222ee71c53a007c6a1ca57c91", + "source/authored/fig/exps/var_copy/layers_dim.png": "d40b41b76dc484233b2c83d6a59f613393fdca8d5f19d413727bcafc23660bc5", + "source/authored/fig/exps/var_copy/layers_dim_1000.png": "07c2d5ccc723acbc5a302b0b386f50244d8010f42c82aa616200076796067c23", + "source/authored/fig/exps/var_copy/layers_dim_200.png": "3a6dfd95e7aa31a031f42f9db1b99456cb2230096033e652a57b76d7516eb380", + "source/authored/fig/exps/var_copy/layers_dim_adversary.png": "c49b8ed16b17f782392821672415a68b3b6878981bece5637c78729b0176ae47", + "source/authored/fig/exps/var_copy/layers_num_heads.png": "a64ad32988841e8cfe2537c7df96442711dd8e5c6c81a05ec638f7ed5f25554d", + "source/authored/fig/exps/var_copy/layers_state_dim.png": "d8b8da4a094e7ac4cd878cfcb7ca6fc98913c8c6fd28ab7995045720e881dec8", + "source/authored/fig/exps/var_copy/layers_window.png": "f154fdb8104c5d0c3492019f22846c1e69cad5b1a110f24881523ea7d6be07b9", + "source/authored/fig/selective_copy_construction_structure.pdf": "b70c660739eba172c0dc3959139c7f931657c4887a8354448e87e13eb593988a", + "source/authored/main.tex": "92a399acca0a701a2fa2c1ed038192ac84dd6ab2430932081cc7283416699b8f", + "source/authored/mathcommands.tex": "3a7753a5a76463a9093767c57462ed42bd99fbe7d9594248b40c4fdd91f9a2e2", + "source/authored/reference.bib": "78b0d784946e5b987b8d5d62755f4463d122d50e49c6312f9989f28a7b16dc43", + "source/authored/sections/conclusion.tex": "c5db291da441eef14b0288d1a3f082fbddb0430b3ec3299d6f83f21982cb7fb8", + "source/authored/sections/experiments.tex": "fcd88332cbe90aff62337c3add333f71fc542736b3e459015a28f0b08ae3c55b", + "source/authored/sections/func_comp_and_construct.tex": "bc06eda70de577b8bfe7290e9edd6237bfa7d1feaa793de30306e49dd3d6f226", + "source/authored/sections/introduction.tex": "cc0766f21b73d5251d78cded3e7573a0a6a4b6cabe454fd06a686ba7f8bcae17", + "source/authored/sections/prelim_and_notation.tex": "63836f14cc9a172d631ea42ae31e4cb7ca8c09660923ddaaedbb17543d24d559", + "source/authored/sections/related.tex": "8e80ed9742331f8c5d3954ee88e7b71d2db50f6e2050638625010a703c8b551f", + "source/authored/sections/tasks.tex": "80ba12f976423975af8377f1e80fb4b4b2622dd8dcca33fe6bbe398a28406408", + "source/authored/sections/upper_bound.tex": "de2fba5f19810c4de6cc82a404726376a353b8910414c472363a95102041ee3f" + }, + "paper_linked_code": { + "remote": "https://github.com/SprocketLab/hybrid-expressivity", + "checkout": "6be8f8fbc2169290af6f4ba5e4bd53a5c6485f7b", + "status_porcelain": [] + }, + "code_version_selection": "The arXiv source links to the repository without a commit hash. The detached 6be8f8f checkout is the latest repository commit dated before the 2026-03-09 arXiv v1 submission; it is not asserted to be an author-pinned archival snapshot." +} diff --git a/VALIDATION.json b/VALIDATION.json new file mode 100644 index 0000000000000000000000000000000000000000..3bbafbd60fd55b51aaa9dff9767c8d498625c557 --- /dev/null +++ b/VALIDATION.json @@ -0,0 +1,78 @@ +{ + "validator": "validate_logbook.py (local bundle validator)", + "semantic_v4": { + "profile": "semantic-v4-local", + "validator": "local_bundle_validator_not_campaign_validator", + "checks": [ + { + "name": "frozen_six_claims", + "passed": true, + "detail": "CLAIMS.json exactly equals the six registered claim strings." + }, + { + "name": "complete_eight_routes", + "passed": true, + "detail": "Index, executive summary, and six claim routes exist." + }, + { + "name": "exact_authored_archive", + "passed": true, + "detail": "arXiv e-print archive matches the retrieval SHA-256." + }, + { + "name": "pinned_clean_code_checkout", + "passed": true, + "detail": "Linked source repository is detached at the recorded clean commit." + }, + { + "name": "claim1_literal_falsification", + "passed": true, + "detail": "Under injectivity the printed RHS is non-positive; one-state 1/2 witnesses are retained." + }, + { + "name": "claim2_receptive_field_witnesses", + "passed": true, + "detail": "Real causal-attention stacks preserve the designed outside-window witness." + }, + { + "name": "claim3_construction_and_controls", + "passed": true, + "detail": "Independent finite construction succeeds while destructive controls fail." + }, + { + "name": "claim4_full_vocab_certificate", + "passed": true, + "detail": "Full-vocabulary construction passes its exact coverage and small-domain gates." + }, + { + "name": "claim4_sample_certificate_distinction", + "passed": true, + "detail": "The one sub-99% finite sample mean is retained separately from the exact coverage certificate." + }, + { + "name": "direct_native_notebooks_retained", + "passed": true, + "detail": "Author notebook cell execution and destructive controls are reported without upgrading scope." + }, + { + "name": "claim5_exact_source_scope", + "passed": true, + "detail": "Figure 4 table is preserved as .999, not silently converted to 1.000." + }, + { + "name": "claim6_source_contradiction_marked", + "passed": true, + "detail": "Figure 6 sixfold row and Figure 5 task distinction are explicitly retained." + } + ], + "passed": true, + "check_count": 12 + }, + "operational": { + "replay_required": true, + "byte_identical_replay": true, + "no_remote_publication": true, + "official_campaign_validator": "not run: no campaign target was created or modified" + }, + "passed": true +} diff --git a/audit_source_claims.py b/audit_source_claims.py new file mode 100644 index 0000000000000000000000000000000000000000..c24a7b3a25bb09daa31028a15097a1c265d9c8c2 --- /dev/null +++ b/audit_source_claims.py @@ -0,0 +1,157 @@ +"""Exact authored-source audit for the two learned-model claims. + +No local GPU training is represented as a rerun: the official training code is +CUDA-only on this host and the repository contains learning-rate metadata and +figures, but no per-run scalar result artifacts. The appropriate evidence is +therefore the SHA-pinned authored TeX table/caption itself, including any +internal numeric conflict. +""" + +from __future__ import annotations + +import hashlib +import json +import re +from pathlib import Path + +import torch + + +ROOT = Path(__file__).resolve().parent +OUT = ROOT / "outputs" +TEX = ROOT / "source" / "authored" / "sections" / "experiments.tex" +TRAIN = ROOT / "source" / "official-code" / "micro_hf" / "train_utils.py" + + +def sha(path: Path) -> str: + return hashlib.sha256(path.read_bytes()).hexdigest() + + +def line_of(text: str, needle: str) -> int: + return text[: text.index(needle)].count("\n") + 1 + + +def table_after(text: str, heading: str) -> tuple[str, list[dict[str, float]]]: + start = text.index(heading) + end = text.index("\\end{figure}", start) + block = text[start:end] + rows = [] + pat = re.compile( + r"\$\\sim(\d+)\$\s*&\s*([0-9.]+)\s*&\s*([0-9.]+)" + r"\s*&\s*([0-9.]+)\s*&\s*([0-9.]+)" + ) + for m in pat.finditer(block): + rows.append( + { + "parameters_approx": float(m.group(1)), + "pure_tf": float(m.group(2)), + "pure_ssm": float(m.group(3)), + "tf_to_ssm": float(m.group(4)), + "ssm_to_tf": float(m.group(5)), + } + ) + if len(rows) != 4: + raise RuntimeError(f"expected four rows after {heading!r}, found {len(rows)}") + return block, rows + + +def training_route() -> dict[str, object]: + text = TRAIN.read_text() + return { + "official_train_file": str(TRAIN.relative_to(ROOT)), + "official_train_file_sha256": sha(TRAIN), + "hard_coded_cuda_calls": text.count(".to('cuda')"), + "torch_cuda_available_on_this_host": torch.cuda.is_available(), + "result_artifacts_present": False, + "reason_no_local_training_rerun": ( + "The official micro_hf entry point hard-codes CUDA tensors; this " + "host has no CUDA device. The checkout contains figures and lrs.json " + "metadata but no per-run evaluation JSON/CSV/checkpoint results." + ), + } + + +def main() -> None: + OUT.mkdir(exist_ok=True) + text = TEX.read_text() + var_block, var_rows = table_after(text, "\\noindent \\textbf{Selective Copy.}") + mk_block, mk_rows = table_after(text, "\\noindent \\textbf{Multi-Key Associative Recall.}") + route = training_route() + + var_2k = next(r for r in var_rows if r["parameters_approx"] == 2000) + var_12k = next(r for r in var_rows if r["parameters_approx"] == 12000) + claim5 = { + "kind": "exact_authored_source_audit", + "source": str(TEX.relative_to(ROOT)), + "source_sha256": sha(TEX), + "table_heading_line": line_of(text, "\\noindent \\textbf{Selective Copy.}"), + "caption_line": line_of(text, "At 2000 parameters, hybrid models consistently"), + "table_rows": var_rows, + "literal_table_comparison": { + "hybrid_ssm_to_tf_at_approximately_2000": var_2k["ssm_to_tf"], + "pure_tf_at_approximately_12000": var_12k["pure_tf"], + "pure_ssm_at_approximately_12000": var_12k["pure_ssm"], + "parameter_ratio_12000_over_2000": 12000 / 2000, + "strict_table_value_is_exactly_one": var_2k["ssm_to_tf"] == 1.0, + }, + "source_caption_says_perfect": "consistently attain perfect accuracy" in var_block, + "source_results_says_roughly_six_times": "factor of $6 \\times$" in text, + "assessment": ( + "The authored table supports the approximate 6x/near-perfect comparison " + "(.999 versus .923/.931), but its printed .999 is not literally 1.000 " + "while the caption calls it perfect. This is source evidence, not an " + "independent learned-model reproduction." + ), + "training_route": route, + } + + mk_2k = next(r for r in mk_rows if r["parameters_approx"] == 2000) + mk_6k = next(r for r in mk_rows if r["parameters_approx"] == 6000) + mk_12k = next(r for r in mk_rows if r["parameters_approx"] == 12000) + single_key_sentence = "none of the pure models achieved greater than 40\\% accuracy" + claim6 = { + "kind": "exact_authored_source_audit", + "source": str(TEX.relative_to(ROOT)), + "source_sha256": sha(TEX), + "mkar_table_heading_line": line_of(text, "\\noindent \\textbf{Multi-Key Associative Recall.}"), + "mkar_caption_line": line_of(text, "hybrid models could perform the task to 60\\%"), + "single_key_figure_result_line": line_of(text, single_key_sentence), + "mkar_table_rows": mk_rows, + "literal_table_checks": { + "hybrid_ssm_to_tf_at_approximately_2000": mk_2k["ssm_to_tf"], + "hybrid_ssm_to_tf_at_approximately_6000": mk_6k["ssm_to_tf"], + "pure_tf_at_approximately_12000": mk_12k["pure_tf"], + "sixfold_parameter_ratio_from_2000_to_12000": 12000 / 2000, + "hybrid_reaches_0_60_at_approximately_2000": mk_2k["ssm_to_tf"] >= 0.60, + "hybrid_reaches_0_60_at_approximately_6000": mk_6k["ssm_to_tf"] >= 0.60, + "ratio_for_6000_vs_12000": 12000 / 6000, + }, + "source_caption_claims_60pct_and_six_times": ( + "60\\% accuracy with $6 \\times$ fewer" in mk_block + ), + "single_key_statement_is_a_different_task": True, + "assessment": ( + "The authored MKAR table is internally insufficient for the literal " + "60%-at-6x conjunction: at the 6x row it reports .512 (<.60), while " + "at .990 the nearest shown pure-TF row is only 2x larger. The caption " + "asserts the headline, but raw points needed to locate an unshown " + "60% crossing were not released. The <=40% statement is explicitly " + "about associative recall with decoding (Figure 5), not MKAR (Figure 6)." + ), + "training_route": route, + } + + (OUT / "claim5.json").write_text(json.dumps(claim5, indent=2) + "\n") + (OUT / "claim6.json").write_text(json.dumps(claim6, indent=2) + "\n") + print( + "claim5 source: hybrid@2k=%.3f, pure@12k=(%.3f, %.3f), ratio=%.1f" + % (var_2k["ssm_to_tf"], var_12k["pure_tf"], var_12k["pure_ssm"], 6.0) + ) + print( + "claim6 source: hybrid@2k=%.3f, hybrid@6k=%.3f, pureTF@12k=%.3f" + % (mk_2k["ssm_to_tf"], mk_6k["ssm_to_tf"], mk_12k["pure_tf"]) + ) + + +if __name__ == "__main__": + main() diff --git a/build_logbook.py b/build_logbook.py new file mode 100644 index 0000000000000000000000000000000000000000..0f99d0b407850c09bca53d9203887bce2d79eee2 --- /dev/null +++ b/build_logbook.py @@ -0,0 +1,276 @@ +"""Build static claim pages and provenance from deterministic result artifacts.""" + +from __future__ import annotations + +import hashlib +import json +import subprocess +from pathlib import Path + + +ROOT = Path(__file__).resolve().parent +OUT = ROOT / "outputs" +PAGES = ROOT / "pages" +AUTHORED_ARCHIVE = ROOT / "source" / "2603.08859v1.tar.gz" +AUTHORED = ROOT / "source" / "authored" +CODE = ROOT / "source" / "official-code" + + +CLAIM_SLUGS = [ + "claim-1-theorem-3-3-literal-bound", + "claim-2-theorem-3-7-window-bound", + "claim-3-theorem-4-3-selective-copy", + "claim-4-theorem-4-6-associative-recall", + "claim-5-figure-4-selective-copy-learning", + "claim-6-figures-5-6-associative-recall-learning", +] + + +def sha(path: Path) -> str: + return hashlib.sha256(path.read_bytes()).hexdigest() + + +def load(name: str) -> dict: + return json.loads((OUT / name).read_text()) + + +def code_info() -> dict: + return { + "remote": "https://github.com/SprocketLab/hybrid-expressivity", + "checkout": subprocess.check_output( + ["git", "-C", str(CODE), "rev-parse", "HEAD"], text=True + ).strip(), + "status_porcelain": subprocess.check_output( + ["git", "-C", str(CODE), "status", "--porcelain"], text=True + ).splitlines(), + } + + +def source_provenance() -> dict: + files = {} + for path in sorted(AUTHORED.rglob("*")): + if path.is_file(): + files[str(path.relative_to(ROOT))] = sha(path) + return { + "arxiv_id": "2603.08859v1", + "arxiv_eprint_url": "https://export.arxiv.org/e-print/2603.08859v1", + "archive": str(AUTHORED_ARCHIVE.relative_to(ROOT)), + "archive_sha256": sha(AUTHORED_ARCHIVE), + "archive_sha256_expected_from_retrieval": "e8d22bfd259aaa60385841d8643109ecb66f7eb1081dd76429f5215f05a032e8", + "authored_tree_file_sha256": files, + "paper_linked_code": code_info(), + "code_version_selection": ( + "The arXiv source links to the repository without a commit hash. " + "The detached 6be8f8f checkout is the latest repository commit dated " + "before the 2026-03-09 arXiv v1 submission; it is not asserted to be " + "an author-pinned archival snapshot." + ), + } + + +def claim_page(title: str, status: str, body: str, evidence: list[str], limitations: str) -> str: + bullets = "\n".join(f"- {item}" for item in evidence) + return ( + f"# {title}\n\n" + f"**Assessment: {status}.**\n\n" + f"{body}\n\n" + "## Evidence\n\n" + f"{bullets}\n\n" + "## Scope and limitations\n\n" + f"{limitations}\n" + ) + + +def write_pages() -> dict: + claims = json.loads((ROOT / "CLAIMS.json").read_text())["claims"] + c1, c2, c3, c4, c5, c6 = [load(f"claim{i}.json") for i in range(1, 7)] + n3, n4 = load("claim3_native.json"), load("claim4_native.json") + PAGES.mkdir(exist_ok=True) + + pages = [] + bodies = [ + claim_page( + claims[0]["text"], + "falsified as a literal positive linear lower-bound claim", + "Assumption 3.2 makes G: V^m → Y^q injective, so cardinality gives " + "m·log₂|V| ≤ q·log₂|Y|. The printed right-hand side " + "m·log|V| − q·log|Y| is therefore never positive under its own " + "assumption. The appendix instead derives a different Fano bound under " + "error < 1/8; that is not the printed probability-1/2 theorem.", + [ + "Exact authored statement: source/authored/sections/func_comp_and_construct.tex:26–28.", + f"1,296 admissible cardinality configurations: maximum printed RHS = {c1['printed_bound_audit']['max_literal_bound_over_admissible_grid']:.1f}.", + "Exhaustive binary selective-copy partitions: one state attains exactly 1/2 success for m=2 and m=3, matching the theorem's printed threshold.", + "The appendix source records its stronger, different prerequisite as err < 1/8 (source/authored/appendix/missing_proof_lb.tex).", + ], + "This is a literal-statement audit, not a claim that no corrected lower " + "bound can be proved. The exact selective-copy enumeration is finite; the " + "cardinality implication itself is general.", + ), + claim_page( + claims[1]["text"], + "supported by explicit paper-task witnesses and exact receptive-field checks", + "For the selective-copy witnesses, changing only a token outside the " + "causal receptive field leaves the terminal logits bit-identical. On the " + "two-point witness distribution this forces accuracy 1/2, below 2/3. " + "A full-window control separates the same pair.", + [ + f"{c2['receptive_field_sweep']['configs_tested']} real float64 causal-attention stacks; outside-RF violations = {c2['receptive_field_sweep']['violations_outside_receptive_field']}.", + f"Maximum terminal-logit change outside RF = {c2['max_abs_delta_when_sumW_below_R']:.1f} for the hard witnesses.", + f"Full-window control separates {c2['control_full_window_separates_frac']:.0%} of tested witness configurations.", + "The source proof explicitly identifies the terminal dependency as the last sum_i W_i tokens (appendix/missing_proof_lb.tex).", + ], + "Finite numerical checks cannot prove the universal theorem. They directly " + "exercise its stated quantities (window, R, indistinguishability and " + "success threshold) on the paper's selective-copy task rather than a proxy.", + ), + claim_page( + claims[2]["text"], + "supported for the literal construction; official notebook does not establish its universal scope", + "A direct transcription of Appendix D.2/D.5 achieves exact final-position " + "selective copying across exhaustive and large deterministic sweeps, with a " + "window-minus-one and no-SSM destructive controls. The separately executed " + "author notebook is included unchanged as provenance and scores only .825 on " + "the notebook generator's 1,024 final-position examples, so it is not used " + "as evidence of the theorem's 'every input' quantifier.", + [ + f"Independent construction: {c3['total_inputs_tested']:,} valid inputs; minimum accuracy = {c3['min_accuracy_over_all_configs']:.6f}.", + "Includes L=100, |V|=32 and longer L=1,024/4,096 sweeps; these are labelled construction checks, not learned-model runs.", + f"Native notebook baseline/control: {n3['baseline']['last_position_accuracy']:.6f} / {n3['destructive_control']['last_position_accuracy']:.6f} on {n3['baseline']['eligible_last_position_examples']} eligible examples.", + "The destructive construction controls remove one attention position, zero the query, or disable selective state update.", + ], + "The independent checker is a faithful finite implementation of the written " + "construction, not a mechanized proof. The native notebook's aggregate failure " + "is retained rather than overwritten or relabelled as a success.", + ), + claim_page( + claims[3]["text"], + "supported by a full-vocabulary construction and exact coverage certificate; native notebook is only a limited check", + "The Appendix D.4 construction was implemented with the stated full-vocabulary " + "binary code, last-match positional bias, and a finite softmax separation. " + "Its exact iid coverage formula is at least .99 for each measured scale; the " + "5×20,000-instance point estimates track that certificate (one mean, .989820, " + "is below .99 and is not relabelled as an empirical pass). The implementation " + "also exhausts three small full-window domains.", + [ + f"All analytic coverage certificates meet 99%: {c4['all_meet_99pct']}.", + f"Minimum five-seed empirical mean = {c4['min_success_at_theorem_window']:.6f}; maximum gap from exact coverage = {c4['max_gap_vs_analytic']:.6f}.", + "Exhaustive full-window domains (|M|, L)=(4,8),(4,9),(8,8) all score 1.0.", + f"Native authored notebook baseline/control: {n4['baseline']['last_position_accuracy']:.6f} / {n4['destructive_control']['last_position_accuracy']:.6f}; it has no windowed 99%-coverage test.", + ], + "The native notebook is a direct one-construction execution, not the paper's " + "probabilistic window experiment. The 99% support comes from the written " + "construction plus an exact iid coverage calculation and finite tests; it is " + "not a claimed learned-model training rerun.", + ), + claim_page( + claims[4]["text"], + "authored-source supported, but not independently reproduced", + "The exact authored Figure 4 table gives SSM→TF .999 at approximately 2,000 " + "parameters and pure TF/SSM .923/.931 at approximately 12,000 parameters, a " + "sixfold nominal parameter ratio. The caption calls .999 'perfect', so the " + "strict word perfect and printed value are internally inconsistent at the " + "shown precision.", + [ + f"Pinned source table: hybrid@2k={c5['literal_table_comparison']['hybrid_ssm_to_tf_at_approximately_2000']:.3f}; pure TF/SSM@12k={c5['literal_table_comparison']['pure_tf_at_approximately_12000']:.3f}/{c5['literal_table_comparison']['pure_ssm_at_approximately_12000']:.3f}.", + "The TeX table, caption, and source-file SHA are in outputs/claim5.json.", + "The official micro_hf training path contains hard-coded CUDA transfers and this machine has no CUDA device; no local run is presented as a reproduction.", + ], + "The repository did not contain per-run scalar results, checkpoints, or an " + "author-pinned code commit in the arXiv archive. This page reports the paper's " + "own exact table, not an independent empirical confirmation.", + ), + claim_page( + claims[5]["text"], + "not independently established; the authored MKAR table conflicts with the literal numeric conjunction", + "The Figure 6 table's sixfold row is approximately 2,000 versus 12,000 " + "parameters, where SSM→TF is .512—not 60%. At the first shown hybrid result " + "above 60% (.990 at approximately 6,000), the nearest shown pure-TF row is " + "approximately 12,000, only 2× larger. The caption asserts 60%-at-6×, but the " + "raw points needed to locate a different crossing were not released.", + [ + f"Pinned MKAR values: hybrid@2k={c6['literal_table_checks']['hybrid_ssm_to_tf_at_approximately_2000']:.3f}, hybrid@6k={c6['literal_table_checks']['hybrid_ssm_to_tf_at_approximately_6000']:.3f}, pure TF@12k={c6['literal_table_checks']['pure_tf_at_approximately_12000']:.3f}.", + "The <=40% sentence is from Figure 5's associative recall with decoding, a different task from Figure 6's MKAR; it is not treated as an MKAR plateau measurement.", + "The exact TeX/table SHA and CUDA-only non-rerun route are recorded in outputs/claim6.json.", + ], + "This is an authored-source/data audit. It does not infer a curve between " + "unreleased points or substitute the Figure 5 task for MKAR. A GPU rerun would " + "require compatible CUDA hardware and a declared protocol; neither is claimed here.", + ), + ] + + for slug, page in zip(CLAIM_SLUGS, bodies): + dest = PAGES / slug + dest.mkdir(exist_ok=True) + (dest / "page.md").write_text(page) + pages.append(str((dest / "page.md").relative_to(ROOT))) + + rows = [ + ("1", "Theorem 3.3 literal lower bound", "falsified", "printed RHS non-positive under injectivity"), + ("2", "Theorem 3.7 window lower bound", "supported", "paper-task witnesses and real attention stacks"), + ("3", "Theorem 4.3 selective copy", "supported", "independent construction; native notebook limitation retained"), + ("4", "Theorem 4.6 associative recall", "supported", "full-vocabulary construction and exact coverage"), + ("5", "Figure 4 learned selective copy", "source-supported", "reported table only; .999/perfect rounding conflict"), + ("6", "Figures 5–6 learned recall", "not established", "MKAR table conflicts with 60%-at-6x conjunction"), + ] + table = "\n".join(f"| {a} | {b} | {c} | {d} |" for a, b, c, d in rows) + executive = ( + "# Executive summary\n\n" + "This is a six-claim audit of arXiv:2603.08859v1 / OpenReview `82EJxJzG6r`. " + "Claim text is frozen in `CLAIMS.json`; evidence does not rewrite scope.\n\n" + "| claim | subject | assessment | headline |\n| --- | --- | --- | --- |\n" + + table + + "\n\nThe package distinguishes (1) native author-notebook execution, " + "(2) an independent implementation of the written constructions, and (3) " + "exact authored-table evidence. GPU-only learned-model training was not rerun " + "on this non-CUDA host.\n" + ) + (PAGES / "executive-summary").mkdir(exist_ok=True) + (PAGES / "executive-summary" / "page.md").write_text(executive) + index = ( + "# Reproduction audit: Expressivity-Efficiency Tradeoffs for Hybrid Sequence Models\n\n" + "Paper: arXiv:2603.08859v1 · OpenReview `82EJxJzG6r`\n\n" + "Six registered claims are preserved verbatim in `CLAIMS.json`. Run `python3 run_all.py` " + "for paired deterministic replays, page generation, validation, and a recursive manifest.\n" + ) + (PAGES / "index.md").write_text(index) + return {"claim_pages": pages} + + +def write_logbook(route_info: dict) -> None: + claims = json.loads((ROOT / "CLAIMS.json").read_text())["claims"] + children = [ + {"slug": "executive-summary", "title": "Executive summary", "file": "pages/executive-summary/page.md", "children": []} + ] + for claim, slug in zip(claims, CLAIM_SLUGS): + children.append( + { + "slug": slug, + "title": f"Claim {claim['index']}: {claim['text']}", + "file": f"pages/{slug}/page.md", + "children": [], + } + ) + logbook = { + "schema_version": 1, + "title": "Reproduction audit: Hybrid Sequence Models", + "emoji": "🔬", + "proposed_target_slug": "repro-hybrid-seq-82ejxjzg6r", + "publication_status": "local-only; no Space created or modified", + "paper": {"arxiv_id": "2603.08859v1", "openreview_id": "82EJxJzG6r"}, + "updated_at": "2026-07-28T00:00:00+00:00", + "root": {"slug": "index", "title": "Reproduction audit", "file": "pages/index.md", "children": children}, + "routes_built": route_info, + } + (ROOT / "logbook.json").write_text(json.dumps(logbook, indent=2) + "\n") + + +def main() -> None: + route_info = write_pages() + write_logbook(route_info) + (ROOT / "SOURCE_PROVENANCE.json").write_text(json.dumps(source_provenance(), indent=2) + "\n") + print("built six claim pages, logbook routes, and source provenance") + + +if __name__ == "__main__": + main() diff --git a/exp1_ssm_bound.py b/exp1_ssm_bound.py new file mode 100644 index 0000000000000000000000000000000000000000..1bd4d71bdac519dd6442d478287aefec8593f22a --- /dev/null +++ b/exp1_ssm_bound.py @@ -0,0 +1,409 @@ +"""Claim 1 - Theorem 3.3: SSM state-space lower bound for function composition. + +The paper (Definition 3.1) considers F(u, v) with u in V^m, v in V^n, and +Assumption 3.2: there is a query set Q = {v^(1),...,v^(q)} such that + G(u) := (F(u,v^(1)), ..., F(u,v^(q))) +is an injection. Theorem 3.3 then asserts that any k-layer SSM computing F +needs sum_i log|S_i| >= Omega(m log|V| - q log|Y|). + +We instantiate the *canonical* member of the family, the one the paper itself +uses in Theorem 4.2 / D.1 for selective copying: + + F(u, v) = u_v , u in V^m, v in [m], Y = V, Q = {1,...,m}, q = m. + +G(u) = u is an injection, so Assumption 3.2 holds by construction. + +What we compute (all exact, no sampling): + + A. Fooling set. All |V|^m prefixes are pairwise separated by some query. + Checked over every unordered pair. + B. Minimum state count. A single-layer SSM's behaviour on this task is + determined by (i) the partition of prefixes induced by the state after + reading u and (ii) an arbitrary decoder r(state, query). We grant the + decoder unlimited power, which only *weakens* the lower bound we verify. + Exhaustive enumeration over ALL set partitions gives the exact optimal + accuracy A*(s) for every state budget s. A*(s) = 1 iff s >= |V|^m. + C. Negative control with a closed form. With exactly |V|^m - 1 states the + best possible accuracy is exactly 1 - 1/(m |V|^m): one pair of prefixes + must be merged, the cheapest pair is at Hamming distance 1, and merging + costs exactly one wrong (prefix, query) cell. Verified against brute + force over all C(N,2) merges. + D. Lemma 3.5. k stacked SSM layers are simulated by one layer whose state + space is the product; verified behaviourally on all short inputs, and the + product bound is shown tight on a witness. + E. Audit of the two constants in the printed statement of Theorem 3.3. + +Run: python3 exp1_ssm_bound.py +""" + +import itertools +import json +import math +import os +import random + +import numpy as np + +OUT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "outputs") +os.makedirs(OUT, exist_ok=True) + + +# -------------------------------------------------------------------------- +# A. fooling set: every pair of prefixes is separated by some query in Q +# -------------------------------------------------------------------------- +def fooling_set(m, V): + """Return (n_prefixes, n_pairs, n_separated, min_separating_queries).""" + prefixes = list(itertools.product(range(V), repeat=m)) + n = len(prefixes) + sep = 0 + min_sep_q = m + 1 + for a in range(n): + ua = prefixes[a] + for b in range(a + 1, n): + ub = prefixes[b] + # queries j in [m] on which the required answers differ + k = sum(1 for j in range(m) if ua[j] != ub[j]) + if k > 0: + sep += 1 + min_sep_q = min(min_sep_q, k) + return n, n * (n - 1) // 2, sep, min_sep_q + + +# -------------------------------------------------------------------------- +# B. exact optimal accuracy for a given state budget, by exhaustive partition +# -------------------------------------------------------------------------- +def _partitions(collection): + """All set partitions of a list (Knuth / standard recursive generator).""" + collection = list(collection) + if len(collection) == 1: + yield [collection] + return + first = collection[0] + for smaller in _partitions(collection[1:]): + for i, subset in enumerate(smaller): + yield smaller[:i] + [[first] + subset] + smaller[i + 1:] + yield [[first]] + smaller + + +def block_correct(block, m): + """Number of correct (prefix, query) cells achievable by the best decoder.""" + tot = 0 + for j in range(m): + counts = {} + for u in block: + counts[u[j]] = counts.get(u[j], 0) + 1 + tot += max(counts.values()) + return tot + + +def exact_accuracy_curve(m, V): + """A*(s) for every s = 1..|V|^m, by exhaustive enumeration of partitions.""" + prefixes = list(itertools.product(range(V), repeat=m)) + n = len(prefixes) + best = {s: 0 for s in range(1, n + 1)} + total_cells = n * m + for part in _partitions(prefixes): + s = len(part) + c = sum(block_correct(b, m) for b in part) + if c > best[s]: + best[s] = c + # A*(s) is monotone non-decreasing in s (more states never hurt) + run = 0 + curve = {} + for s in range(1, n + 1): + run = max(run, best[s]) + curve[s] = run / total_cells + return curve + + +def min_states_for(curve, p): + for s in sorted(curve): + if curve[s] >= p - 1e-12: + return s + return None + + +# -------------------------------------------------------------------------- +# C. negative control: |V|^m - 1 states, exact closed form +# -------------------------------------------------------------------------- +def best_accuracy_one_merge(m, V): + """Brute force over all C(N,2) merges; the rest of the prefixes stay alone.""" + prefixes = list(itertools.product(range(V), repeat=m)) + n = len(prefixes) + total_cells = n * m + best = -1 + witness = None + for a in range(n): + for b in range(a + 1, n): + ua, ub = prefixes[a], prefixes[b] + # everything outside the merged pair is correct on all m queries + c = (n - 2) * m + block_correct([ua, ub], m) + if c > best: + best = c + witness = (ua, ub) + return best / total_cells, witness + + +# -------------------------------------------------------------------------- +# D. Lemma 3.5: k SSM layers collapse to one with product state space +# -------------------------------------------------------------------------- +def lemma_35_check(rng, k, sizes, alphabet, max_len): + """Build k random SSM layers, simulate them stacked and as a product + automaton, and compare outputs on every input string up to max_len.""" + layers = [] + alpha_in = alphabet + for j in range(k): + s = sizes[j] + u = rng.integers(0, s, size=(s, alpha_in)) # update rule + r = rng.integers(0, alphabet, size=s) # output map + layers.append((u, r, s)) + alpha_in = alphabet + + def run_stacked(seq): + cur = list(seq) + for (u, r, s) in layers: + st = 0 + out = [] + for tok in cur: + st = int(u[st, tok]) + out.append(int(r[st])) + cur = out + return tuple(cur) + + # single-layer product simulation + prod_states = {} + + def run_product(seq): + st = tuple(0 for _ in layers) + out = [] + for tok in seq: + new = [] + sym = tok + for (u, r, s), cs in zip(layers, st): + ns = int(u[cs, sym]) + new.append(ns) + sym = int(r[ns]) + st = tuple(new) + prod_states[st] = True + out.append(sym) + return tuple(out) + + mismatches = 0 + tested = 0 + for L in range(1, max_len + 1): + for seq in itertools.product(range(alphabet), repeat=L): + tested += 1 + if run_stacked(seq) != run_product(seq): + mismatches += 1 + return { + "k": k, + "sizes": list(sizes), + "product_bound": int(np.prod(sizes)), + "reachable_product_states": len(prod_states), + "sequences_tested": tested, + "behaviour_mismatches": mismatches, + "bound_respected": bool(len(prod_states) <= int(np.prod(sizes))), + } + + +# -------------------------------------------------------------------------- +# E. audit of the printed bound +# -------------------------------------------------------------------------- +def h2(p): + if p <= 0 or p >= 1: + return 0.0 + return -p * math.log2(p) - (1 - p) * math.log2(1 - p) + + +def audit_printed_bound(): + """Two independent audits of the literal statement of Theorem 3.3. + + (i) The body writes Omega(m log|V| - q log|Y|). Assumption 3.2 requires + G: V^m -> Y^q to be injective, hence |V|^m <= |Y|^q, hence + m log|V| - q log|Y| <= 0 for EVERY admissible (m,|V|,q,|Y|). + (ii) The appendix (proof of Theorem 3.3, eq. before the Q.E.D.) actually + derives log|S| >= m log|V| - q (H2(1/8) + log|Y|/8) under err < 1/8. + That form is strictly positive and linear in m. + """ + rows = [] + worst_literal = -math.inf + for m in range(1, 13): + for Vs in (2, 3, 4, 8, 16, 32): + for Ys in (2, 3, 4, 8, 16, 32): + # smallest q for which injectivity V^m -> Y^q is possible + qmin = math.ceil(m * math.log2(Vs) / math.log2(Ys)) + for q in (qmin, qmin + 1, qmin + 3): + lit = m * math.log2(Vs) - q * math.log2(Ys) + app = m * math.log2(Vs) - q * (h2(1 / 8) + math.log2(Ys) / 8) + worst_literal = max(worst_literal, lit) + rows.append({"m": m, "V": Vs, "Y": Ys, "q": q, + "literal": lit, "appendix": app}) + # the selective-copying instantiation used in Theorem 4.2: m = q = N, Y = V + inst = [] + for Ms in (2, 4, 8, 16, 26, 32): + for N in range(2, 13): + lit = N * math.log2(Ms) - N * math.log2(Ms) + app = N * math.log2(Ms) - N * (h2(1 / 8) + math.log2(Ms) / 8) + inst.append({"N": N, "M": Ms, "literal": lit, "appendix": app}) + # slope of the appendix form in N, for each M + slopes = {} + for Ms in (2, 4, 8, 16, 26, 32): + xs = np.array([r["N"] for r in inst if r["M"] == Ms], float) + ys = np.array([r["appendix"] for r in inst if r["M"] == Ms], float) + A = np.vstack([xs, np.ones_like(xs)]).T + coef, *_ = np.linalg.lstsq(A, ys, rcond=None) + pred = math.log2(Ms) - (h2(1 / 8) + math.log2(Ms) / 8) + slopes[str(Ms)] = {"fitted_slope": float(coef[0]), + "closed_form_slope": pred, + "abs_err": abs(float(coef[0]) - pred)} + return { + "n_admissible_configs": len(rows), + "max_literal_bound_over_admissible_grid": worst_literal, + "literal_bound_ever_positive": bool(worst_literal > 0), + "min_appendix_bound_on_instantiation": min(r["appendix"] for r in inst), + "appendix_slope_in_m": slopes, + "note": ("literal = m*log2|V| - q*log2|Y| (Thm 3.3 as printed); " + "appendix = m*log2|V| - q*(H2(1/8)+log2|Y|/8) (proof, err<1/8)"), + } + + +def trivial_guessing_accuracy(Ys): + """A 1-state (constant) SSM's success probability under uniform Y.""" + return 1.0 / Ys + + +# -------------------------------------------------------------------------- +def main(): + res = {"task": "F(u,v) = u_v with Q = [m]; G(u)=u is injective (Asm 3.2)"} + + # ---- A + B + C on a grid ------------------------------------------ + grid = [] + for V in (2, 3, 4): + for m in range(2, 11): + n = V ** m + if n > 4096: + continue + row = {"m": m, "V": V, "n_prefixes": n} + row["log2_states_required"] = math.log2(n) + row["theory_m_log2_V"] = m * math.log2(V) + row["abs_residual"] = abs(row["log2_states_required"] - row["theory_m_log2_V"]) + if n <= 512: + np_, pairs, sep, minq = fooling_set(m, V) + row["pairs_checked"] = pairs + row["pairs_separated"] = sep + row["all_pairs_separated"] = bool(sep == pairs) + row["min_separating_queries"] = minq + # closed-form negative control + row["control_states"] = n - 1 + row["control_acc_closed_form"] = 1.0 - 1.0 / (m * n) + if n <= 256: + acc, wit = best_accuracy_one_merge(m, V) + row["control_acc_bruteforce"] = acc + row["control_acc_gap"] = abs(acc - row["control_acc_closed_form"]) + row["control_witness_pair"] = [list(wit[0]), list(wit[1])] + grid.append(row) + res["grid"] = grid + res["max_residual_log2_states"] = max(r["abs_residual"] for r in grid) + res["max_control_gap"] = max(r["control_acc_gap"] for r in grid + if "control_acc_gap" in r) + res["all_pairs_separated_everywhere"] = all( + r.get("all_pairs_separated", True) for r in grid) + + # ---- linear-in-m fit ------------------------------------------------ + fits = {} + for V in (2, 3, 4): + xs = np.array([r["m"] for r in grid if r["V"] == V], float) + ys = np.array([r["log2_states_required"] for r in grid if r["V"] == V], float) + A = np.vstack([xs, np.ones_like(xs)]).T + coef, *_ = np.linalg.lstsq(A, ys, rcond=None) + pred = A @ coef + ss_res = float(np.sum((ys - pred) ** 2)) + ss_tot = float(np.sum((ys - ys.mean()) ** 2)) + fits[str(V)] = { + "fitted_slope": float(coef[0]), + "theory_slope_log2_V": math.log2(V), + "slope_abs_err": abs(float(coef[0]) - math.log2(V)), + "intercept": float(coef[1]), + "R2": 1.0 - ss_res / ss_tot, + "max_abs_residual": float(np.max(np.abs(ys - pred))), + } + res["linear_in_m_fit"] = fits + + # ---- exhaustive optimal-accuracy curves ------------------------------ + curves = [] + for (m, V) in [(2, 2), (3, 2), (2, 3)]: + c = exact_accuracy_curve(m, V) + n = V ** m + curves.append({ + "m": m, "V": V, "n_prefixes": n, + "partitions_enumerated": "Bell(%d)" % n, + "A_star": {str(s): c[s] for s in sorted(c)}, + "min_states_acc_1.0": min_states_for(c, 1.0), + "min_states_acc_0.875": min_states_for(c, 0.875), + "min_states_acc_0.9": min_states_for(c, 0.9), + "min_states_acc_0.5": min_states_for(c, 0.5), + "A_star_at_n_minus_1": c[n - 1], + "closed_form_at_n_minus_1": 1.0 - 1.0 / (m * n), + }) + res["exhaustive_accuracy_curves"] = curves + res["exhaustive_min_states_equals_Vm"] = all( + c["min_states_acc_1.0"] == c["n_prefixes"] for c in curves) + res["max_curve_control_gap"] = max( + abs(c["A_star_at_n_minus_1"] - c["closed_form_at_n_minus_1"]) for c in curves) + + # ---- D. Lemma 3.5 ---------------------------------------------------- + rng = np.random.default_rng(0) + lem = [] + for trial, (k, sizes, alpha, ml) in enumerate([ + (2, (2, 3), 2, 8), (3, (2, 2, 2), 2, 7), (2, (3, 4), 3, 5), + (4, (2, 2, 2, 2), 2, 6), (3, (2, 3, 2), 3, 4)]): + lem.append(lemma_35_check(rng, k, sizes, alpha, ml)) + res["lemma_3_5"] = lem + res["lemma_3_5_total_mismatches"] = sum(x["behaviour_mismatches"] for x in lem) + res["lemma_3_5_bound_always_respected"] = all(x["bound_respected"] for x in lem) + + # tightness: search random layer stacks for one whose reachable product + # state count meets the product bound with equality + tight = [] + for (k, sizes, alpha, ml) in [(2, (2, 3), 3, 6), (2, (3, 3), 3, 6), + (3, (2, 2, 2), 3, 6)]: + best = None + for _ in range(4000): + r = lemma_35_check(np.random.default_rng(rng.integers(1 << 30)), + k, sizes, alpha, ml) + if best is None or r["reachable_product_states"] > best["reachable_product_states"]: + best = r + if r["reachable_product_states"] == r["product_bound"]: + break + best["bound_is_tight"] = bool( + best["reachable_product_states"] == best["product_bound"]) + tight.append(best) + res["lemma_3_5_tightness"] = tight + res["lemma_3_5_tight_witnesses"] = sum(1 for t in tight if t["bound_is_tight"]) + + # ---- E. audit of the printed bound ------------------------------------ + res["printed_bound_audit"] = audit_printed_bound() + res["one_state_guessing_accuracy"] = { + str(y): trivial_guessing_accuracy(y) for y in (2, 3, 4, 8, 26, 32)} + + with open(os.path.join(OUT, "claim1.json"), "w") as f: + json.dump(res, f, indent=1) + + print("max residual log2(states) vs m*log2|V| :", + res["max_residual_log2_states"]) + print("all fooling pairs separated :", + res["all_pairs_separated_everywhere"]) + print("exhaustive min-states == |V|^m :", + res["exhaustive_min_states_equals_Vm"]) + print("max |bruteforce - closed form| control :", res["max_control_gap"]) + print("Lemma 3.5 mismatches :", + res["lemma_3_5_total_mismatches"]) + print("max of literal bound over grid :", + res["printed_bound_audit"]["max_literal_bound_over_admissible_grid"]) + for V, f in fits.items(): + print(" |V|=%s slope=%.16f (theory %.16f) R2=%.16f" + % (V, f["fitted_slope"], f["theory_slope_log2_V"], f["R2"])) + + +if __name__ == "__main__": + main() diff --git a/exp2_window_bound.py b/exp2_window_bound.py new file mode 100644 index 0000000000000000000000000000000000000000..894f8939ca7addc122644f92eca6eec2b08c78b3 --- /dev/null +++ b/exp2_window_bound.py @@ -0,0 +1,353 @@ +"""Claim 2 - Theorem 3.7: sliding-window Transformers need total window >= R. + +Assumption 3.6 (R-local sensitivity): there exist x, x' with + x[L-R+1:L] == x'[L-R+1:L] but F(x) != F(x'). +Theorem 3.7: any stack of k Transformer layers with window sizes W_1..W_k that +computes F with probability 2/3 must satisfy sum_i W_i >= R. + +Three independent pieces of evidence, all exact: + + A. RECEPTIVE FIELD. Run *real* float64 sliding-window causal Transformer + stacks (softmax attention + MLP + residual + layernorm) with random + weights. Perturb input position p, read the output at position L. + Prediction: the output changes only for p > L - (1 + sum_i (W_i - 1)). + Since 1 + sum(W_i - 1) <= sum W_i, sum_i W_i < R implies the two + local-sensitivity witnesses are indistinguishable. We record the maximum + |delta| in the output logits outside the receptive field; the theorem + requires it to be exactly 0. + + B. WITNESSES. Explicit local-sensitivity witness pairs for the paper's own + selective-copying task (Definition 4.1). We search for the largest R + admitting a witness and compare to the paper's claim (R = L/2 in the + proof of Theorem 4.2, giving Omega(L)). + + C. THE ACTUAL FAILURE PROBABILITY. Feed the witness pair through a + window-limited stack; if sum W_i < R the two outputs are bit-identical, + so under the uniform distribution on {x, x'} the model is correct with + probability exactly 1/2 < 2/3. Measured, not assumed. + + NEGATIVE CONTROL. With sum_i W_i >= R we *construct* a stack that separates + the same witness pair (outputs differ), so the bound is tight rather than + vacuous. + +Run: python3 exp2_window_bound.py +""" + +import json +import math +import os + +import numpy as np + +OUT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "outputs") +os.makedirs(OUT, exist_ok=True) + + +# Apple Accelerate raises spurious divide/overflow RuntimeWarnings inside +# matmul even on finite inputs. numerical_gate() below re-derives the same +# products with einsum and asserts finiteness before we silence them. +np.seterr(all="ignore") + + +def numerical_gate(): + rng = np.random.default_rng(0) + worst = 0.0 + for n in (8, 16, 64, 256, 512): + A = rng.normal(size=(n, 8)) + B = rng.normal(size=(8, 16)) + worst = max(worst, float(np.max(np.abs(A @ B - np.einsum("ij,jk->ik", A, B))))) + finite = True + mx = 0.0 + for L, k in ((64, 4), (128, 3), (256, 4), (512, 4)): + m = WindowedTransformer(L, 8, [max(2, (L - 2) // k)] * k, seed=L + k) + y = m.forward(np.random.default_rng(L).integers(0, 8, size=L)) + finite = finite and bool(np.all(np.isfinite(y))) + mx = max(mx, float(np.max(np.abs(y)))) + return {"max_abs_matmul_minus_einsum": worst, + "all_forward_outputs_finite": finite, + "max_abs_logit": mx, + "note": "Accelerate RuntimeWarnings are spurious; verified here"} + + +def jsonable(o): + if isinstance(o, (np.integer,)): + return int(o) + if isinstance(o, (np.floating,)): + return float(o) + if isinstance(o, np.ndarray): + return o.tolist() + raise TypeError(str(type(o))) + + +# -------------------------------------------------------------------------- +# a real sliding-window causal Transformer stack (float64, numpy) +# -------------------------------------------------------------------------- +def layernorm(X, eps=1e-5): + mu = X.mean(axis=1, keepdims=True) + sd = X.std(axis=1, keepdims=True) + return (X - mu) / (sd + eps) + + +def softmax_rows(S): + S = S - S.max(axis=1, keepdims=True) + E = np.exp(S) + return E / E.sum(axis=1, keepdims=True) + + +class WindowedTransformer: + """k layers, layer i has causal sliding window W_i (attends to the W_i most + recent positions, itself included).""" + + def __init__(self, L, d, windows, seed): + rng = np.random.default_rng(seed) + self.L, self.d, self.windows = L, d, list(windows) + self.emb = rng.normal(size=(64, d)) # token -> R^d + self.pos = rng.normal(size=(L, d)) * 0.1 + self.layers = [] + for W in windows: + self.layers.append({ + "Wq": rng.normal(size=(d, d)) / math.sqrt(d), + "Wk": rng.normal(size=(d, d)) / math.sqrt(d), + "Wv": rng.normal(size=(d, d)) / math.sqrt(d), + "Wo": rng.normal(size=(d, d)) / math.sqrt(d), + "U1": rng.normal(size=(d, 2 * d)) / math.sqrt(d), + "U2": rng.normal(size=(2 * d, d)) / math.sqrt(2 * d), + "W": W, + }) + self.head = rng.normal(size=(d, 8)) / math.sqrt(d) + # causal sliding-window masks + idx = np.arange(L) + self.masks = [] + for W in windows: + m = (idx[:, None] >= idx[None, :]) & (idx[:, None] - idx[None, :] < W) + self.masks.append(m) + + def forward(self, tokens): + X = self.emb[np.asarray(tokens)] + self.pos + for lay, mask in zip(self.layers, self.masks): + Q, K, V = X @ lay["Wq"], X @ lay["Wk"], X @ lay["Wv"] + S = (Q @ K.T) / math.sqrt(self.d) + S = np.where(mask, S, -np.inf) + A = softmax_rows(S) + X = X + (A @ V) @ lay["Wo"] + X = layernorm(X) + H = X @ lay["U1"] + X = X + np.maximum(H, 0) @ lay["U2"] + X = layernorm(X) + return X[-1] @ self.head # logits at the last position + + +def receptive_field(windows): + """Positions L-rf+1..L can influence output L; rf = 1 + sum(W_i - 1).""" + return 1 + sum(w - 1 for w in windows) + + +# -------------------------------------------------------------------------- +# A. receptive-field sweep with real float attention +# -------------------------------------------------------------------------- +def receptive_field_sweep(Ls, seeds, d=8, vocab=8): + rows = [] + worst_outside = 0.0 + worst_inside_zero = 0 + violations = 0 + n_cfg = 0 + rng = np.random.default_rng(12345) + for L in Ls: + for k in (1, 2, 3, 4): + for s in range(seeds): + cap = max(2, (L - 2) // k) + windows = [int(rng.integers(1, cap + 1)) for _ in range(k)] + rf = receptive_field(windows) + if rf >= L: + continue + n_cfg += 1 + model = WindowedTransformer(L, d, windows, seed=1000 * L + 10 * k + s) + base = np.array(rng.integers(0, vocab, size=L)) + y0 = model.forward(base) + # perturb one position strictly outside the receptive field + p_out = L - rf - 1 # 0-indexed + alt = base.copy() + alt[p_out] = (alt[p_out] + 1) % vocab + d_out = float(np.max(np.abs(model.forward(alt) - y0))) + # perturb the position just inside the receptive field boundary + p_in = L - rf + alt2 = base.copy() + alt2[p_in] = (alt2[p_in] + 1) % vocab + d_in = float(np.max(np.abs(model.forward(alt2) - y0))) + worst_outside = max(worst_outside, d_out) + if d_out != 0.0: + violations += 1 + if d_in == 0.0: + worst_inside_zero += 1 + if len(rows) < 40: + rows.append({"L": L, "k": k, "windows": windows, + "sum_W": int(sum(windows)), "rf": rf, + "max_abs_delta_outside_rf": d_out, + "max_abs_delta_inside_rf": d_in}) + return { + "configs_tested": n_cfg, + "violations_outside_receptive_field": violations, + "max_abs_delta_outside_receptive_field": worst_outside, + "configs_with_no_effect_just_inside_rf": worst_inside_zero, + "sample_rows": rows, + } + + +# -------------------------------------------------------------------------- +# B. local-sensitivity witnesses for selective copying (Definition 4.1) +# -------------------------------------------------------------------------- +def selcopy_F(x, N): + """x is a list of ints; tokens 1..N are number tokens with value = token, + other tokens are >= N+1. F(x) = x[L+1-n] (1-indexed) with n the value of + the LAST number token. Returns None if no number token.""" + L = len(x) + n = None + for i in range(L): + if 1 <= x[i] <= N: + n = x[i] + if n is None or n > L: + return None + return x[L - n] # 0-indexed: position L+1-n + + +def largest_R_witness(L, N, M, rng, tries=20000): + """Largest R for which we can exhibit x, x' agreeing on the last R + positions but with F(x) != F(x').""" + V = N + M + best = None + for _ in range(tries): + x = list(rng.integers(N + 1, V + 1, size=L)) # all non-number + # put the only number token at position 0 (1-indexed position 1) + n1 = int(rng.integers(1, N + 1)) + n2 = int(rng.integers(1, N + 1)) + if n1 == n2: + continue + x1 = x.copy(); x1[0] = n1 + x2 = x.copy(); x2[0] = n2 + f1, f2 = selcopy_F(x1, N), selcopy_F(x2, N) + if f1 is None or f2 is None or f1 == f2: + continue + # they agree on positions 2..L -> R = L - 1 + R = L - 1 + assert x1[1:] == x2[1:] + if best is None or R > best["R"]: + best = {"R": R, "x": x1, "x_prime": x2, "F_x": f1, "F_xprime": f2} + if best["R"] == L - 1: + break + return best + + +# -------------------------------------------------------------------------- +# C/control. does a window-limited stack actually confuse the witness pair? +# -------------------------------------------------------------------------- +def witness_indistinguishability(L, N, M, seeds=5): + rng = np.random.default_rng(7) + rows = [] + max_delta_when_short = 0.0 + n_short = n_long = 0 + n_long_separated = 0 + for s in range(seeds): + w = largest_R_witness(L, N, M, np.random.default_rng(100 + s)) + R = w["R"] + for k in (1, 2, 3): + # (i) sum W_i < R -> must be indistinguishable + budget = R - 1 + windows = [max(1, budget // k)] * k + while receptive_field(windows) > R - 1 and windows[0] > 1: + windows = [x - 1 for x in windows] + model = WindowedTransformer(L, 8, windows, seed=42 + 7 * s + k) + dshort = float(np.max(np.abs(model.forward(w["x"]) + - model.forward(w["x_prime"])))) + max_delta_when_short = max(max_delta_when_short, dshort) + n_short += 1 + # (ii) sum W_i >= R -> the stack CAN separate them (control) + windows2 = [L] * k + model2 = WindowedTransformer(L, 8, windows2, seed=99 + 7 * s + k) + dlong = float(np.max(np.abs(model2.forward(w["x"]) + - model2.forward(w["x_prime"])))) + n_long += 1 + if dlong > 0: + n_long_separated += 1 + rows.append({"L": L, "R": R, "k": k, "windows_short": windows, + "sum_W_short": int(sum(windows)), + "rf_short": receptive_field(windows), + "max_abs_delta_short": dshort, + "windows_long": windows2, + "sum_W_long": int(sum(windows2)), + "max_abs_delta_long": dlong}) + return { + "pairs": rows, + "n_short_window_tests": n_short, + "max_abs_delta_when_sumW_below_R": max_delta_when_short, + "n_long_window_tests": n_long, + "n_long_window_separated": n_long_separated, + } + + +def main(): + res = {} + res["numerical_gate"] = numerical_gate() + + # ---- A --------------------------------------------------------------- + res["receptive_field_sweep"] = receptive_field_sweep( + Ls=[16, 32, 64, 128, 256, 512], seeds=40) + + # ---- B --------------------------------------------------------------- + wit = [] + for L in (8, 16, 32, 64, 128, 256): + for s in range(5): + rng = np.random.default_rng(1000 * L + s) + w = largest_R_witness(L, N=6, M=26, rng=rng) + same_last_R = w["x"][L - w["R"]:] == w["x_prime"][L - w["R"]:] + wit.append({ + "L": L, "seed": s, + "R_measured": w["R"], + "R_theory_max": L - 1, + "R_claimed_in_Thm_4_2": L // 2, + "same_in_every_window_below_R": bool(same_last_R), + "F_x": w["F_x"], "F_xprime": w["F_xprime"], + "outputs_differ": bool(w["F_x"] != w["F_xprime"]), + }) + res["local_sensitivity_witnesses"] = wit + res["all_witnesses_valid"] = all( + r["same_in_every_window_below_R"] and r["outputs_differ"] and + r["R_measured"] == r["R_theory_max"] for r in wit) + res["R_measured_equals_L_minus_1_everywhere"] = all( + r["R_measured"] == r["L"] - 1 for r in wit) + + # ---- C + negative control ------------------------------------------- + ind = {} + for L in (16, 32, 64): + ind[str(L)] = witness_indistinguishability(L, N=6, M=26, seeds=3) + res["witness_indistinguishability"] = ind + res["max_abs_delta_when_sumW_below_R"] = max( + v["max_abs_delta_when_sumW_below_R"] for v in ind.values()) + res["control_full_window_separates_frac"] = ( + sum(v["n_long_window_separated"] for v in ind.values()) + / sum(v["n_long_window_tests"] for v in ind.values())) + # success probability under D = uniform{x, x'} when the model cannot see R + res["success_prob_when_sumW_below_R"] = 0.5 + res["threshold_in_theorem"] = 2.0 / 3.0 + res["fails_theorem_threshold"] = bool(0.5 < 2.0 / 3.0) + + with open(os.path.join(OUT, "claim2.json"), "w") as f: + json.dump(res, f, indent=1, default=jsonable) + + print("numerical gate |matmul-einsum| :", + res["numerical_gate"]["max_abs_matmul_minus_einsum"]) + rf = res["receptive_field_sweep"] + print("configs tested (real float attention) :", rf["configs_tested"]) + print("violations outside receptive field :", + rf["violations_outside_receptive_field"]) + print("max |delta| outside receptive field :", + rf["max_abs_delta_outside_receptive_field"]) + print("R_measured == L-1 for every witness :", + res["R_measured_equals_L_minus_1_everywhere"]) + print("max |delta| on witness when sum W < R :", + res["max_abs_delta_when_sumW_below_R"]) + print("control: full window separates fraction :", + res["control_full_window_separates_frac"]) + + +if __name__ == "__main__": + main() diff --git a/exp3_selcopy_construction.py b/exp3_selcopy_construction.py new file mode 100644 index 0000000000000000000000000000000000000000..5b331449d40d8e52642967a14b0654a983d55744 --- /dev/null +++ b/exp3_selcopy_construction.py @@ -0,0 +1,362 @@ +"""Claim 3 - Theorem 4.3: two-layer hybrid (Mamba + attention) solves selective +copying with embedding dim O(max(log|V|, log L)) and working memory ~O(N). + +The construction is transcribed literally from Appendix D.2: + + Embedding (blocks of width c = max(bits(|V|), bits(L)) each): + b0 = psi'(x_i) binary +-1 code of the token + b1 = 1{x_i in N} psi'(x_i) gated copy (the paper's second row) + b2 = 0 SSM output slot + b3 = 0 attention output slot + b4 = phi(i) = psi'(L + 1 - i) position code, as in D.2 + g = 1{x_i in N} one extra scalar, the Mamba gate + + Mamba layer (W_A = I, Delta(x) = 1{x in N}, W_B picks b1, W_C writes b2): + H_t = (1 - Delta_t) H_{t-1} + Delta_t (W_B Phi_t) + so H_t = psi'(n_t) with n_t the value of the most recent number token. + + Attention layer, causal sliding window of size N: + q_i = M * b2(i) = M psi'(n_i), k_j = b4(j) = psi'(L+1-j), v_j = psi'(x_j) + The score M is maximal (= M c) exactly at + j* = L + 1 - n_i, so the readout is psi'(x_{L+1-n_L}) = F(x). + + As the paper states in D.5, the construction is only required to be correct + at the LAST position, which is where we score it. + +Evidence: exhaustive enumeration of every valid input at small scale, large +random sweeps at paper scale, and three negative controls that must break. + +Run: python3 exp3_selcopy_construction.py +""" + +import itertools +import json +import math +import os + +import numpy as np + +np.seterr(all="ignore") # Accelerate spurious warnings; gated below +OUT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "outputs") +os.makedirs(OUT, exist_ok=True) + +BIG = 30.0 # softmax inverse temperature M of the proof + + +def jsonable(o): + if isinstance(o, np.integer): + return int(o) + if isinstance(o, np.floating): + return float(o) + if isinstance(o, np.ndarray): + return o.tolist() + raise TypeError(str(type(o))) + + +# -------------------------------------------------------------------------- +class SelCopy: + """Definition 4.1. Number tokens carry ids equal to their offset value.""" + + def __init__(self, offsets, M, L): + self.offsets = sorted(offsets) + self.M = M + self.L = L + self.max_off = max(self.offsets) + # token ids: number tokens = the offsets themselves; others follow + self.other = list(range(self.max_off + 1, self.max_off + 1 + M)) + self.vocab = self.offsets + self.other + self.V = len(self.vocab) + self.is_num = np.zeros(max(self.vocab) + 1, bool) + self.is_num[self.offsets] = True + self.c = max((max(self.vocab)).bit_length(), L.bit_length()) + self.window = self.max_off + + # ---- reference implementation of the task --------------------------- + def target(self, X): + """X: (B, L) token ids. Returns (target, n_last, valid).""" + B, L = X.shape + num = self.is_num[X] + n_last = np.where(num, X, 0) + # running max index of a number token -> value of the LAST number token + last = np.zeros(B, int) + out = np.zeros((B, L), int) + for t in range(L): + last = np.where(num[:, t], X[:, t], last) + out[:, t] = last + nL = out[:, -1] + valid = (nL > 0) & (nL <= L) + jstar = L - nL # 0-indexed position L+1-n + tgt = X[np.arange(B), np.clip(jstar, 0, L - 1)] + return tgt, nL, valid, jstar, out + + # ---- codes ---------------------------------------------------------- + def code(self, ints): + """+-1 binary code of a non-negative integer array, width c.""" + a = np.asarray(ints) + bits = ((a[..., None] >> np.arange(self.c)) & 1).astype(np.float64) + return 2.0 * bits - 1.0 + + def embed(self, X): + B, L = X.shape + c = self.c + num = self.is_num[X].astype(np.float64) + E = np.zeros((B, L, 5 * c + 1)) + E[:, :, 0:c] = self.code(X) + E[:, :, c:2 * c] = num[..., None] * self.code(X) + # b2, b3 stay zero + pos = np.broadcast_to(np.arange(1, L + 1), (B, L)) + E[:, :, 4 * c:5 * c] = self.code(L + 1 - pos) + E[:, :, 5 * c] = num + return E + + # ---- layers --------------------------------------------------------- + def mamba(self, E, selective=True): + """H_t = (1-D_t) H_{t-1} + D_t W_B Phi_t ; writes H into block b2.""" + B, L, d = E.shape + c = self.c + WB = np.zeros((c, d)); WB[:, c:2 * c] = np.eye(c) # picks b1 + WC = np.zeros((d, c)); WC[2 * c:3 * c, :] = np.eye(c) # writes b2 + gate_sel = np.zeros(d); gate_sel[5 * c] = 1.0 # reads g + H = np.zeros((B, c)) + out = E.copy() + for t in range(L): + phi = E[:, t, :] + D = (phi @ gate_sel)[:, None] if selective else np.ones((B, 1)) + H = (1.0 - D) * H + D * (phi @ WB.T) + out[:, t, :] += H @ WC.T + return out + + def attention_last(self, Z, window, big=BIG, blind_query=False): + """Causal sliding-window attention evaluated at the last position.""" + B, L, d = Z.shape + c = self.c + Wq = np.zeros((c, d)); Wq[:, 2 * c:3 * c] = big * np.eye(c) # b2 + Wk = np.zeros((c, d)); Wk[:, 4 * c:5 * c] = np.eye(c) # b4 + Wv = np.zeros((c, d)); Wv[:, 0:c] = np.eye(c) # b0 + lo = max(0, L - window) + q = Z[:, -1, :] @ Wq.T + if blind_query: + q = np.zeros_like(q) + K = Z[:, lo:L, :] @ Wk.T + V = Z[:, lo:L, :] @ Wv.T + S = np.einsum("bc,btc->bt", q, K) + S = S - S.max(axis=1, keepdims=True) + A = np.exp(S) + A /= A.sum(axis=1, keepdims=True) + read = np.einsum("bt,btc->bc", A, V) + return read, A, lo + + # ---- decoding ------------------------------------------------------- + def decode(self, read): + """Nearest +-1 codeword among the vocabulary.""" + cw = self.code(np.array(self.vocab)) # (V, c) + sims = read @ cw.T + idx = np.argmax(sims, axis=1) + top = np.sort(sims, axis=1) + margin = top[:, -1] - top[:, -2] + return np.array(self.vocab)[idx], margin + + # ---- full model ----------------------------------------------------- + def run(self, X, window=None, selective=True, blind_query=False, big=BIG): + window = self.window if window is None else window + E = self.embed(X) + Z = self.mamba(E, selective=selective) + read, A, lo = self.attention_last(Z, window, big=big, + blind_query=blind_query) + pred, margin = self.decode(read) + return pred, margin, A, lo, Z + + +# -------------------------------------------------------------------------- +def all_sequences(V_ids, L): + """Every sequence in V^L as an (|V|^L, L) int array.""" + n = len(V_ids) ** L + X = np.zeros((n, L), int) + ids = np.array(V_ids) + for pos in range(L): + rep = len(V_ids) ** (L - pos - 1) + X[:, pos] = np.tile(np.repeat(ids, rep), n // (rep * len(V_ids))) + return X + + +MAX_ELEMS = 2.0e7 # cap on B * L * d floats held at once + + +def evaluate(task, X, **kw): + """Chunked so that memory stays bounded at long L / large batches.""" + tgt, nL, valid, jstar, _ = task.target(X) + X = X[valid]; tgt = tgt[valid]; nL = nL[valid]; jstar = jstar[valid] + n = len(X) + d = 5 * task.c + 1 + step = max(1, int(MAX_ELEMS // (task.L * d))) + n_ok = n_att = n_ssm = 0 + leak = 0.0 + minmarg = np.inf + c = task.c + for lo_i in range(0, n, step): + hi = min(n, lo_i + step) + pred, margin, A, lo, Z = task.run(X[lo_i:hi], **kw) + n_ok += int(np.sum(pred == tgt[lo_i:hi])) + n_att += int(np.sum(lo + np.argmax(A, axis=1) == jstar[lo_i:hi])) + n_ssm += int(np.sum(np.all( + np.sign(Z[:, -1, 2 * c:3 * c]) == np.sign(task.code(nL[lo_i:hi])), + axis=1))) + leak = max(leak, float(np.max(1.0 - A.max(axis=1)))) + minmarg = min(minmarg, float(np.min(margin))) + return {"n_inputs": int(n), "accuracy": n_ok / n, + "attention_argmax_correct": n_att / n, + "ssm_state_correct": n_ssm / n, + "max_softmax_leakage": leak, + "min_decode_margin": float(minmarg)} + + +def main(): + res = {"softmax_inverse_temperature_M": BIG} + + # ---- correctness gate ------------------------------------------------ + t = SelCopy([1, 2, 3], M=2, L=5) + X = all_sequences(t.vocab, 5) + tgt, nL, valid, jstar, running = t.target(X) + # re-derive F by a slow, independent reference + slow = [] + nchk = min(5000, len(X)) + for row in X[:nchk]: + n = 0 + for v in row: + if t.is_num[v]: + n = int(v) + slow.append(int(row[len(row) - n]) if 0 < n <= len(row) else -1) + fast = [int(tgt[i]) if valid[i] else -1 for i in range(nchk)] + res["gate_reference_target_mismatches"] = int(sum( + 1 for a, b in zip(slow, fast) if a != b)) + cw = t.code(np.array(t.vocab)) + res["gate_codes_injective"] = bool(len(np.unique(cw, axis=0)) == len(t.vocab)) + res["gate_matmul_vs_einsum"] = float(np.max(np.abs( + cw @ cw.T - np.einsum("ij,kj->ik", cw, cw)))) + + # ---- exhaustive ------------------------------------------------------ + exh = [] + for offsets, M, L in [([1, 2, 3], 2, 5), ([1, 2, 3], 3, 6), + ([1, 2, 3, 4], 3, 7)]: + task = SelCopy(offsets, M, L) + X = all_sequences(task.vocab, L) + r = evaluate(task, X) + r.update({"offsets": offsets, "M": M, "L": L, "V": task.V, + "embed_dim": 5 * task.c + 1, "code_width_c": task.c, + "log2_V": math.log2(task.V), "log2_L": math.log2(L), + "window": task.window, "working_memory_ratio": task.window / L, + "mamba_states": len(offsets) + 1, + "exhaustive": True}) + exh.append(r) + res["exhaustive"] = exh + + # ---- random sweeps, including the paper's own scale ------------------- + rnd = [] + configs = [ + ([1, 2, 3, 4, 5, 6], 4, 16, 200000), + ([5, 6, 7, 8, 9, 10], 26, 100, 200000), # paper E.1 selective copy + ([5, 6, 7, 8, 9, 10], 194, 100, 100000), # paper E.2, |V| = 200 + ([5, 6, 7, 8, 9, 10], 994, 100, 100000), # paper E.2, |V| = 1000 + (list(range(1, 33)), 480, 1024, 30000), + (list(range(1, 65)), 960, 4096, 6000), + ] + for offsets, M, L, nsamp in configs: + task = SelCopy(offsets, M, L) + accs = [] + row = None + for seed in range(3): + rng = np.random.default_rng(seed) + X = rng.choice(task.vocab, size=(nsamp // 3, L)) + r = evaluate(task, X) + accs.append(r["accuracy"]) + row = r + row["accuracy_mean_over_seeds"] = float(np.mean(accs)) + row["accuracy_std_over_seeds"] = float(np.std(accs)) + row["n_inputs_total"] = int(nsamp // 3 * 3) + row.update({"offsets_min_max": [min(offsets), max(offsets)], + "n_offsets": len(offsets), "M": M, "L": L, "V": task.V, + "embed_dim": 5 * task.c + 1, "code_width_c": task.c, + "log2_V": math.log2(task.V), "log2_L": math.log2(L), + "window": task.window, + "working_memory_ratio": task.window / L, + "mamba_states": len(offsets) + 1}) + rnd.append(row) + res["random_sweeps"] = rnd + res["total_inputs_tested"] = int(sum(r["n_inputs"] for r in exh) + + sum(r["n_inputs_total"] for r in rnd)) + res["min_accuracy_over_all_configs"] = min( + [r["accuracy"] for r in exh] + [r["accuracy_mean_over_seeds"] for r in rnd]) + + # ---- scaling of the embedding dimension ------------------------------ + scal = [] + for r in exh + rnd: + scal.append({"V": r["V"], "L": r["L"], "embed_dim": r["embed_dim"], + "bound_max_log2": max(r["log2_V"], r["log2_L"]), + "ratio": r["embed_dim"] / max(r["log2_V"], r["log2_L"])}) + xs = np.array([math.log(s["bound_max_log2"]) for s in scal]) + ys = np.array([math.log(s["embed_dim"]) for s in scal]) + A = np.vstack([xs, np.ones_like(xs)]).T + coef, *_ = np.linalg.lstsq(A, ys, rcond=None) + pred = A @ coef + r2 = 1.0 - float(np.sum((ys - pred) ** 2)) / float(np.sum((ys - ys.mean()) ** 2)) + res["embed_dim_scaling"] = {"rows": scal, "loglog_slope": float(coef[0]), + "R2": r2, "max_ratio": max(s["ratio"] for s in scal)} + + # ---- negative controls ------------------------------------------------ + ctl = [] + for offsets, M, L in [([5, 6, 7, 8, 9, 10], 26, 100), + ([1, 2, 3, 4, 5, 6], 4, 16)]: + task = SelCopy(offsets, M, L) + rng = np.random.default_rng(0) + X = rng.choice(task.vocab, size=(60000, L)) + base = evaluate(task, X) + short = evaluate(task, X, window=task.window - 1) + blind = evaluate(task, X, blind_query=True) + nonsel = evaluate(task, X, selective=False) + # predicted loss of the short window: instances whose offset is maximal + tgt, nL, valid, _, _ = task.target(X) + p_max = float(np.mean(nL[valid] == task.max_off)) + ctl.append({ + "offsets": [min(offsets), max(offsets)], "M": M, "L": L, + "full_construction_accuracy": base["accuracy"], + "control_window_minus_1_accuracy": short["accuracy"], + "control_window_minus_1_lower_bound": 1.0 - p_max, + "control_window_minus_1_excess_over_bound": + short["accuracy"] - (1.0 - p_max), + "frac_instances_needing_max_offset": p_max, + "control_no_ssm_query_accuracy": blind["accuracy"], + "control_nonselective_ssm_accuracy": nonsel["accuracy"], + "control_nonselective_ssm_state_correct": nonsel["ssm_state_correct"], + "chance_level": 1.0 / task.V, + "analytic_softmax_leakage_bound": float((task.window - 1) + * math.exp(-2.0 * BIG)), + }) + res["negative_controls"] = ctl + + with open(os.path.join(OUT, "claim3.json"), "w") as f: + json.dump(res, f, indent=1, default=jsonable) + + print("gate: reference mismatches :", res["gate_reference_target_mismatches"]) + print("gate: codes injective :", res["gate_codes_injective"]) + print("total inputs tested :", res["total_inputs_tested"]) + print("min accuracy over all configs :", res["min_accuracy_over_all_configs"]) + for r in exh: + print(" exhaustive V=%2d L=%2d n=%7d acc=%.6f att=%.6f leak=%.3e d=%d" + % (r["V"], r["L"], r["n_inputs"], r["accuracy"], + r["attention_argmax_correct"], r["max_softmax_leakage"], + r["embed_dim"])) + for r in rnd: + print(" random V=%4d L=%5d n=%7d acc=%.6f d=%3d mem=%.4f" + % (r["V"], r["L"], r["n_inputs_total"], r["accuracy_mean_over_seeds"], + r["embed_dim"], r["working_memory_ratio"])) + for c in ctl: + print(" control L=%d: full=%.4f W-1=%.4f (bound %.4f) noSSM=%.4f nonsel=%.4f" + % (c["L"], c["full_construction_accuracy"], + c["control_window_minus_1_accuracy"], + c["control_window_minus_1_lower_bound"], + c["control_no_ssm_query_accuracy"], + c["control_nonselective_ssm_accuracy"])) + + +if __name__ == "__main__": + main() diff --git a/exp4_ar_construction.py b/exp4_ar_construction.py new file mode 100644 index 0000000000000000000000000000000000000000..3cd12f04f023ca438983645c46e743979299aa86 --- /dev/null +++ b/exp4_ar_construction.py @@ -0,0 +1,436 @@ +"""Claim 4 - Theorem 4.6: three-layer hybrid solves associative recall with +decoding at 99% success, embedding dim O(max(log|V|,log L)), window ~O(|V|). + +Task (Definition 4.4). V = M u {0,1}. v(x) is the 0-1 subsequence of x and +Phi(v) in M is the word token whose binary representation is v. The answer is +the token following the LAST occurrence of Phi(v(x)). + +Construction, transcribed from Appendix D.4: + + Mamba layer. W_A = I - S with S the shift, Delta(x) = 1{x in {0,1}}, so the + state is a shift register over the bit subsequence and + H_t = phi(n_t), n_t = the token decoded from the bits seen so far. + Attention layer 1 (2 heads). Head 1 has (B_i)_j = -inf * 1(j != i-1), i.e. it + copies the previous token into a second slot; head 2 is the identity. + Attention layer 2 (1 head), sliding window w. + q_i = M phi(n_i), k_i = psi'(x_{i-1}), v_i = psi'(x_i), + plus the paper's positional bias B so that the argmax lands on the LAST + matching position. The readout is psi'(x_{i*+1}) = the answer. + +The 99% figure in Theorem 4.6 is a coverage statement: for uniform word tokens +the last occurrence of the key lies inside a window of size ~O(|M|) with +probability 1 - (1-1/|M|)^{n_w}. We compute that probability in closed form, +choose the window from it, and check the measured success against it. + +NEGATIVE CONTROLS. (i) window = |M| must give ~1 - 1/e = 0.632. (ii) removing +the Mamba layer (no decoded key) must collapse to chance. (iii) removing the +positional bias must fail exactly on the instances where the key occurs more +than once in the window. + +Run: python3 exp4_ar_construction.py +""" + +import json +import math +import os + +import numpy as np + +np.seterr(all="ignore") +OUT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "outputs") +os.makedirs(OUT, exist_ok=True) + + +def jsonable(o): + if isinstance(o, np.integer): + return int(o) + if isinstance(o, np.floating): + return float(o) + if isinstance(o, np.ndarray): + return o.tolist() + raise TypeError(str(type(o))) + + +class ARDecode: + """|M| word tokens with ids 0..|M|-1; bit tokens have ids |M| and |M|+1.""" + + def __init__(self, Mw, L): + assert Mw & (Mw - 1) == 0, "|M| must be a power of two" + self.Mw = Mw + self.L = L + self.ds = int(math.log2(Mw)) # bits per decoded word key + self.V = Mw + 2 + # The proof's psi' encodes the *whole* vocabulary. The Mamba register + # still consumes only ds bit tokens, but it is initialized at -1 and + # therefore yields the c-bit code of the decoded word (with leading + # zero bits) after those ds updates. Using only ds bits for every + # token aliases the two bit-token ids to word ids and lets a trailing + # bit spuriously win the attention match. + self.c = int(math.ceil(math.log2(self.V))) + self.p = max(1, L.bit_length()) + self.n_word = L - self.ds # word positions 0..n_word-1 + self.d = 4 * self.c + self.p + 2 + + # ---- data ------------------------------------------------------------ + def sample(self, n, rng): + words = rng.integers(0, self.Mw, size=(n, self.n_word)) + bits = rng.integers(0, 2, size=(n, self.ds)) + X = np.concatenate([words, self.Mw + bits], axis=1) + return X, bits + + def key_of(self, bits): + w = (1 << np.arange(self.ds - 1, -1, -1)) + return (bits * w).sum(axis=1) + + def target(self, X, bits): + """Token immediately after the last occurrence of the decoded key. + + The task definition allows that successor to be either a word or a bit + token. In particular, the last word may be the key and its successor + the first trailing bit. Restricting successors to word tokens would + silently change Definition 4.4 and incorrectly count that valid case + as a failure. + """ + n = len(X) + key = self.key_of(bits) + W = X[:, :self.n_word] + hit = (W == key[:, None]) + any_hit = hit.any(axis=1) + istar = np.where(any_hit, self.n_word - 1 - hit[:, ::-1].argmax(axis=1), -1) + tgt = np.where(any_hit, X[np.arange(n), np.clip(istar + 1, 0, self.L - 1)], -1) + return key, istar, tgt, any_hit + + # ---- codes ----------------------------------------------------------- + def wcode(self, ids): + a = np.asarray(ids) + bits = ((a[..., None] >> np.arange(self.c - 1, -1, -1)) & 1) + return 2.0 * bits - 1.0 + + def pcode(self, ids): + a = np.asarray(ids) + bits = ((a[..., None] >> np.arange(self.p)) & 1) + return 2.0 * bits - 1.0 + + # ---- the three layers ------------------------------------------------ + def embed(self, X): + n, L = X.shape + c, p, d = self.c, self.p, self.d + E = np.zeros((n, L, d)) + is_word = (X < self.Mw) + E[:, :, 0:c] = self.wcode(X) + E[:, :, 3 * c] = np.where(~is_word, (X - self.Mw) * 2.0 - 1.0, 0.0) # +-1 bit + E[:, :, 3 * c + 1] = (~is_word).astype(float) # gate g + pos = np.broadcast_to(np.arange(L), (n, L)) + E[:, :, 3 * c + 2:3 * c + 2 + p] = self.pcode(pos) + return E + + def mamba(self, E, active=True): + """Shift register over the bit subsequence -> phi(n_t) in block b3.""" + n, L, d = E.shape + c = self.c + out = E.copy() + H = -np.ones((n, c)) # empty register + for t in range(L): + g = E[:, t, 3 * c + 1:3 * c + 2] + b = E[:, t, 3 * c:3 * c + 1] + if active: + Hs = np.concatenate([H[:, 1:], b], axis=1) # S H + bit + H = (1.0 - g) * H + g * Hs + out[:, t, 2 * c:3 * c] = H + return out + + def attn1(self, Z, exact_shift=True): + """Previous-token head: (B_i)_j = -inf 1(j != i-1). Writes b1.""" + n, L, d = Z.shape + c = self.c + out = Z.copy() + prev = np.zeros((n, L, c)) + prev[:, 1:, :] = Z[:, :-1, 0:c] + out[:, :, c:2 * c] = prev + if not exact_shift: + return out + return out + + def attn1_via_softmax(self, Z): + """Same head written as a real masked softmax attention, for the gate.""" + n, L, d = Z.shape + c = self.c + idx = np.arange(L) + mask = (idx[:, None] - 1) == idx[None, :] + S = np.where(mask, 0.0, -np.inf) + S[0, :] = np.where(idx == 0, 0.0, -np.inf) # position 0 -> itself + A = np.exp(S - S.max(axis=1, keepdims=True)) + A /= A.sum(axis=1, keepdims=True) + prev = np.einsum("ij,njc->nic", A, Z[:, :, 0:c]) + prev[:, 0, :] = 0.0 + out = Z.copy() + out[:, :, c:2 * c] = prev + return out + + def attn2(self, Z, window, use_bias=True, blind_query=False): + """Windowed recall head evaluated at the last position.""" + n, L, d = Z.shape + c, p = self.c, self.p + big = 100.0 * L + lo = max(0, L - window) + q = big * Z[:, -1, 2 * c:3 * c] + if blind_query: + q = np.zeros_like(q) + K = Z[:, lo:L, c:2 * c] + V = Z[:, lo:L, 0:c] + S = np.einsum("nc,ntc->nt", q, K) + if use_bias: + # Appendix D.4 permits an arbitrary positional bias B whose only + # job is to select the *last* tied key. Use the literal position + # order as B, scaled so adjacent tied locations differ by big/(4L) + # (making finite softmax choose the last one), while its complete + # range is at most big/4. A wrong binary key loses at least + # 2*big, so B cannot turn a non-match into a match. The earlier + # signed-bit surrogate was not monotone in position and therefore + # was not a faithful realization of the stated B. + posval = np.arange(lo, L, dtype=float)[None, :] / float(L + 1) + S = S + (big / 4.0) * posval + S = S - S.max(axis=1, keepdims=True) + A = np.exp(S) + A /= A.sum(axis=1, keepdims=True) + read = np.einsum("nt,ntc->nc", A, V) + return read, A, lo + + def decode(self, read): + # psi' in Appendix D.4 is a code for the full vocabulary, not only + # word tokens. This is required when the answer is a trailing bit. + cw = self.wcode(np.arange(self.V)) + sims = read @ cw.T + idx = np.argmax(sims, axis=1) + top = np.sort(sims, axis=1) + return idx, top[:, -1] - top[:, -2] + + def run(self, X, window, mamba_on=True, use_bias=True, blind_query=False, + softmax_shift=False): + E = self.embed(X) + Z = self.mamba(E, active=mamba_on) + Z = self.attn1_via_softmax(Z) if softmax_shift else self.attn1(Z) + read, A, lo = self.attn2(Z, window, use_bias=use_bias, + blind_query=blind_query) + pred, margin = self.decode(read) + return pred, margin, A, lo, Z + + +# -------------------------------------------------------------------------- +def required_window(Mw, ds, delta=0.01): + """Smallest window w such that P(key's last occurrence is in-window) >= 1-delta.""" + p = 1.0 / Mw + n_w = math.ceil(math.log(delta) / math.log(1.0 - p)) + return int(n_w + ds + 1), int(n_w) + + +def analytic_success(Mw, n_eligible, n_in_window): + p = 1.0 / Mw + p_exists = 1.0 - (1.0 - p) ** n_eligible + p_in = 1.0 - (1.0 - p) ** min(n_eligible, n_in_window) + # p_in is the unconditional coverage probability and hence a conservative + # certificate even if one treats inputs with no key occurrence as failures. + return p_in, p_exists + + +def eligible_keys_in_window(task, window): + """How many word-key positions have their successor in the last window.""" + lo = max(0, task.L - window) + return max(0, task.n_word - max(0, lo - 1)) + + +def evaluate(task, X, bits, window, **kw): + key, istar, tgt, ok = task.target(X, bits) + Xs, ts = X[ok], tgt[ok] + # Stream all large/exhaustive grids. This changes no inputs or arithmetic + # and prevents a full 8^5 x bit-grid from allocating several simultaneous + # dense attention tensors. + n = len(Xs) + chunk = 10000 + n_acc = n_ssm = n_att = 0 + leak = 0.0 + min_margin = np.inf + c = task.c + keyc = task.wcode(key[ok]) + istars = istar[ok] + for start in range(0, n, chunk): + stop = min(n, start + chunk) + pred, margin, A, lo, Z = task.run(Xs[start:stop], window, **kw) + n_acc += int(np.sum(pred == ts[start:stop])) + n_ssm += int(np.sum(np.all( + np.sign(Z[:, -1, 2 * c:3 * c]) == keyc[start:stop], axis=1))) + att_pos = lo + np.argmax(A, axis=1) + n_att += int(np.sum(att_pos == (istars[start:stop] + 1))) + leak = max(leak, float(np.max(1.0 - A.max(axis=1))) ) + min_margin = min(min_margin, float(np.min(margin))) + return {"n_instances": int(n), + "frac_target_defined": float(np.mean(ok)), + "success": n_acc / n, + "ssm_key_decoded_correctly": n_ssm / n, + "attention_argmax_correct": n_att / n, + "max_softmax_leakage": leak, + "min_decode_margin": min_margin} + + +def all_sequences_small(task): + """Exhaustive enumeration for tiny |M|, L (word part x bit part).""" + Mw, nw, ds = task.Mw, task.n_word, task.ds + nwords = Mw ** nw + W = np.zeros((nwords, nw), int) + for pos in range(nw): + rep = Mw ** (nw - pos - 1) + W[:, pos] = np.tile(np.repeat(np.arange(Mw), rep), nwords // (rep * Mw)) + B = np.zeros((2 ** ds, ds), int) + for pos in range(ds): + rep = 2 ** (ds - pos - 1) + B[:, pos] = np.tile(np.repeat(np.arange(2), rep), (2 ** ds) // (rep * 2)) + Wr = np.repeat(W, len(B), axis=0) + Br = np.tile(B, (len(W), 1)) + X = np.concatenate([Wr, task.Mw + Br], axis=1) + return X, Br + + +def main(): + res = {} + + # ---- correctness gates ------------------------------------------------ + t = ARDecode(4, 8) + X, bits = t.sample(2000, np.random.default_rng(0)) + Za = t.attn1(t.mamba(t.embed(X))) + Zb = t.attn1_via_softmax(t.mamba(t.embed(X))) + res["gate_shift_head_vs_softmax_attention"] = float(np.max(np.abs(Za - Zb))) + key, istar, tgt, ok = t.target(X, bits) + slow = [] + for r in range(200): + k = int(key[r]); w = X[r, :t.n_word] + pos = [i for i in range(t.n_word) if w[i] == k] + slow.append(int(X[r, pos[-1] + 1]) if pos else -1) + fast = [int(tgt[r]) if ok[r] else -1 for r in range(200)] + res["gate_reference_target_mismatches"] = int( + sum(1 for a, b in zip(slow, fast) if a != b)) + + # ---- exhaustive, full window ------------------------------------------- + exh = [] + for Mw, L in [(4, 8), (4, 9), (8, 8)]: + task = ARDecode(Mw, L) + X, bits = all_sequences_small(task) + r = evaluate(task, X, bits, window=L) + r.update({"Mw": Mw, "L": L, "V": task.V, "ds": task.ds, + "embed_dim": task.d, "window": L, "exhaustive": True, + "n_enumerated": int(len(X))}) + exh.append(r) + res["exhaustive_full_window"] = exh + + # ---- the theorem's window, at scale ------------------------------------- + rows = [] + for Mw, L in [(8, 100), (16, 200), (32, 400), (64, 800), (128, 1600)]: + task = ARDecode(Mw, L) + w_req, n_w = required_window(Mw, task.ds, delta=0.01) + n_in_window = eligible_keys_in_window(task, w_req) + pred_succ, p_exists = analytic_success(Mw, task.n_word, n_in_window) + accs = [] + row = None + for seed in range(5): + rng = np.random.default_rng(1000 + seed) + X, bits = task.sample(20000, rng) + row = evaluate(task, X, bits, window=w_req) + accs.append(row["success"]) + row["success_mean"] = float(np.mean(accs)) + row["success_std"] = float(np.std(accs)) + row["n_instances_total"] = int(sum(1 for _ in range(5)) * row["n_instances"]) + row.update({"Mw": Mw, "L": L, "V": task.V, "ds": task.ds, + "embed_dim": task.d, + "bound_max_log2": max(math.log2(task.V), math.log2(L)), + "window_required": w_req, + "window_over_Mw": w_req / Mw, + "window_over_L": w_req / L, + "analytic_success": pred_succ, + "abs_gap_vs_analytic": abs(float(np.mean(accs)) - pred_succ), + "empirical_mean_meets_99pct": bool(np.mean(accs) >= 0.99), + "analytic_certificate_meets_99pct": bool(pred_succ >= 0.99), + "seeds": 5}) + rows.append(row) + res["theorem_window"] = rows + res["min_success_at_theorem_window"] = min(r["success_mean"] for r in rows) + res["max_gap_vs_analytic"] = max(r["abs_gap_vs_analytic"] for r in rows) + res["all_meet_99pct"] = all(r["analytic_certificate_meets_99pct"] for r in rows) + + # ---- window sweep + negative controls ----------------------------------- + ctl = [] + for Mw, L in [(16, 200), (32, 400)]: + task = ARDecode(Mw, L) + rng = np.random.default_rng(7) + X, bits = task.sample(40000, rng) + w_req, _ = required_window(Mw, task.ds, delta=0.01) + full = evaluate(task, X, bits, window=L) + thm = evaluate(task, X, bits, window=w_req) + tiny = evaluate(task, X, bits, window=Mw) + pred_tiny, _ = analytic_success(Mw, task.n_word, + eligible_keys_in_window(task, Mw)) + blind = evaluate(task, X, bits, window=w_req, blind_query=True) + nomamba = evaluate(task, X, bits, window=w_req, mamba_on=False) + nobias = evaluate(task, X, bits, window=w_req, use_bias=False) + # instances where the key occurs more than once inside the window + key, istar, tgt, ok = task.target(X, bits) + Wr = X[ok][:, :task.n_word] + lo = max(0, L - w_req) + inw = Wr[:, max(0, lo - 1):task.n_word] + nrep = (inw == key[ok][:, None]).sum(axis=1) + p_multi = float(np.mean(nrep > 1)) + ctl.append({ + "Mw": Mw, "L": L, "window_required": w_req, + "full_window_success": full["success"], + "theorem_window_success": thm["success"], + "control_window_eq_Mw_success": tiny["success"], + "control_window_eq_Mw_analytic": pred_tiny, + "control_window_eq_Mw_gap": abs(tiny["success"] - pred_tiny), + "one_minus_1_over_e": 1.0 - 1.0 / math.e, + "control_blind_query_success": blind["success"], + "control_no_mamba_success": nomamba["success"], + "control_no_mamba_key_decoded": nomamba["ssm_key_decoded_correctly"], + "control_no_positional_bias_success": nobias["success"], + "frac_key_repeated_in_window": p_multi, + "control_no_bias_predicted_ceiling": 1.0 - p_multi, + "chance_level": 1.0 / Mw, + }) + res["negative_controls"] = ctl + + # ---- window sweep -------------------------------------------------------- + task = ARDecode(32, 400) + rng = np.random.default_rng(3) + X, bits = task.sample(30000, rng) + sweep = [] + for w in [8, 16, 32, 64, 96, 128, 154, 200, 300, 400]: + r = evaluate(task, X, bits, window=w) + pa, _ = analytic_success(32, task.n_word, + eligible_keys_in_window(task, w)) + sweep.append({"window": w, "success": r["success"], "analytic": pa, + "abs_gap": abs(r["success"] - pa)}) + res["window_sweep_Mw32_L400"] = sweep + res["window_sweep_max_gap"] = max(s["abs_gap"] for s in sweep) + + with open(os.path.join(OUT, "claim4.json"), "w") as f: + json.dump(res, f, indent=1, default=jsonable) + + print("gate shift-head vs softmax attn :", res["gate_shift_head_vs_softmax_attention"]) + print("gate reference mismatches :", res["gate_reference_target_mismatches"]) + for r in exh: + print(" exhaustive |M|=%d L=%d n=%6d success=%.6f ssm=%.4f" + % (r["Mw"], r["L"], r["n_enumerated"], r["success"], + r["ssm_key_decoded_correctly"])) + for r in rows: + print(" |M|=%3d L=%4d w=%4d (%.2f|M|, %.3fL) success=%.5f+-%.5f analytic=%.5f d=%d" + % (r["Mw"], r["L"], r["window_required"], r["window_over_Mw"], + r["window_over_L"], r["success_mean"], r["success_std"], + r["analytic_success"], r["embed_dim"])) + for c in ctl: + print(" ctl |M|=%d: full=%.4f thm=%.4f w=|M|:%.4f (analytic %.4f, 1-1/e=%.4f) blind=%.4f nomamba=%.4f nobias=%.4f" + % (c["Mw"], c["full_window_success"], c["theorem_window_success"], + c["control_window_eq_Mw_success"], c["control_window_eq_Mw_analytic"], + c["one_minus_1_over_e"], c["control_blind_query_success"], + c["control_no_mamba_success"], c["control_no_positional_bias_success"])) + print("window sweep max |measured-analytic| :", res["window_sweep_max_gap"]) + + +if __name__ == "__main__": + main() diff --git a/index.html b/index.html deleted file mode 100644 index b0c4b3666032a737f3903db53e6a8a9272483e28..0000000000000000000000000000000000000000 --- a/index.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - My static Space - - - -
-

Welcome to your static Space!

-

You can modify this app directly by editing index.html in the Files and versions tab.

-

- Also don't forget to check the - Spaces documentation. -

-
- - diff --git a/logbook.json b/logbook.json new file mode 100644 index 0000000000000000000000000000000000000000..a11cf14df19f05fbc8cbd94df4fb513babcfa94a --- /dev/null +++ b/logbook.json @@ -0,0 +1,71 @@ +{ + "schema_version": 1, + "title": "Reproduction audit: Hybrid Sequence Models", + "emoji": "\ud83d\udd2c", + "proposed_target_slug": "repro-hybrid-seq-82ejxjzg6r", + "publication_status": "local-only; no Space created or modified", + "paper": { + "arxiv_id": "2603.08859v1", + "openreview_id": "82EJxJzG6r" + }, + "updated_at": "2026-07-28T00:00:00+00:00", + "root": { + "slug": "index", + "title": "Reproduction audit", + "file": "pages/index.md", + "children": [ + { + "slug": "executive-summary", + "title": "Executive summary", + "file": "pages/executive-summary/page.md", + "children": [] + }, + { + "slug": "claim-1-theorem-3-3-literal-bound", + "title": "Claim 1: Theorem 3.3 proves that any k-layer state-space model solving the function-composition tasks under injectivity conditions must have total log state-space size scaling as \u03a9(m\u00b7log|V| \u2212 q\u00b7log|Y|), linear in the hidden dimension m (Theorem 3.3).", + "file": "pages/claim-1-theorem-3-3-literal-bound/page.md", + "children": [] + }, + { + "slug": "claim-2-theorem-3-7-window-bound", + "title": "Claim 2: Theorem 3.7 proves that sliding-window Transformers solving the same tasks under a local-sensitivity condition require total window size scaling with the context-dependency range R (Theorem 3.7).", + "file": "pages/claim-2-theorem-3-7-window-bound/page.md", + "children": [] + }, + { + "slug": "claim-3-theorem-4-3-selective-copy", + "title": "Claim 3: Theorem 4.3 constructs a two-layer hybrid (Mamba + attention) model that solves the selective copying task using embedding dimension O(max(log|V|, log L)) and working memory \u00d5(N), versus \u03a9(L) required by pure Transformers (Theorem 4.3).", + "file": "pages/claim-3-theorem-4-3-selective-copy/page.md", + "children": [] + }, + { + "slug": "claim-4-theorem-4-6-associative-recall", + "title": "Claim 4: Theorem 4.6 constructs a three-layer hybrid model that achieves 99% accuracy on the associative recall task using embedding dimension O(max(log|V|, log L)) and window size \u00d5(|V|) (Theorem 4.6).", + "file": "pages/claim-4-theorem-4-6-associative-recall/page.md", + "children": [] + }, + { + "slug": "claim-5-figure-4-selective-copy-learning", + "title": "Claim 5: On the selective copying task, the learned hybrid model reaches perfect accuracy with roughly 2,000 parameters while pure Transformer/SSM models need roughly 12,000 parameters to match it, a 6x parameter gap (Figure 4).", + "file": "pages/claim-5-figure-4-selective-copy-learning/page.md", + "children": [] + }, + { + "slug": "claim-6-figures-5-6-associative-recall-learning", + "title": "Claim 6: On multi-key associative recall, the hybrid model reaches 60% accuracy using 6x fewer parameters than pure Transformers, which plateau near 40% accuracy on single-key associative recall (Figures 5-6).", + "file": "pages/claim-6-figures-5-6-associative-recall-learning/page.md", + "children": [] + } + ] + }, + "routes_built": { + "claim_pages": [ + "pages/claim-1-theorem-3-3-literal-bound/page.md", + "pages/claim-2-theorem-3-7-window-bound/page.md", + "pages/claim-3-theorem-4-3-selective-copy/page.md", + "pages/claim-4-theorem-4-6-associative-recall/page.md", + "pages/claim-5-figure-4-selective-copy-learning/page.md", + "pages/claim-6-figures-5-6-associative-recall-learning/page.md" + ] + } +} diff --git a/make_manifest.py b/make_manifest.py new file mode 100644 index 0000000000000000000000000000000000000000..6afac139e1d1e723cbeb3c066732d22d04bb2404 --- /dev/null +++ b/make_manifest.py @@ -0,0 +1,29 @@ +"""Write a sorted, recursive SHA-256 manifest for the local package.""" + +from __future__ import annotations + +import hashlib +from pathlib import Path + + +ROOT = Path(__file__).resolve().parent +EXCLUDED_PARTS = {".git", "__pycache__"} +EXCLUDED_NAMES = {"MANIFEST.sha256"} + + +def main() -> None: + entries = [] + for path in sorted(ROOT.rglob("*")): + if not path.is_file() or path.name in EXCLUDED_NAMES: + continue + relative = path.relative_to(ROOT) + if any(part in EXCLUDED_PARTS for part in relative.parts): + continue + entries.append(f"{hashlib.sha256(path.read_bytes()).hexdigest()} {relative.as_posix()}") + text = "\n".join(entries) + "\n" + (ROOT / "MANIFEST.sha256").write_text(text) + print(f"manifest entries: {len(entries)}") + + +if __name__ == "__main__": + main() diff --git a/official_claims.json b/official_claims.json new file mode 100644 index 0000000000000000000000000000000000000000..004515f4f311b5f06ca7b05ad26b328b62b35daa --- /dev/null +++ b/official_claims.json @@ -0,0 +1,6 @@ +{ + "source": "/Users/sshpro/icml-pending/claims_anchored.json", + "source_key": "82EJxJzG6r", + "note": "Literal registered claim text copied without edits before evidence was attached.", + "claims_file": "CLAIMS.json" +} diff --git a/official_validator.py b/official_validator.py new file mode 100644 index 0000000000000000000000000000000000000000..502f3b3be7401d04df264b5c354bf341b5d7cf13 --- /dev/null +++ b/official_validator.py @@ -0,0 +1,35 @@ +"""Authoritative read-only validator for this *local* evidence package. + +"Official" here means the package's release gate. It is explicitly not +represented as a validator maintained by ICML, OpenReview, the paper authors, +or a remote reproduction campaign. +""" + +from __future__ import annotations + +import json +import subprocess +import sys +from pathlib import Path + + +ROOT = Path(__file__).resolve().parent + + +def main() -> None: + subprocess.run([sys.executable, "validate_logbook.py", "--require-replay"], cwd=ROOT, check=True) + report = { + "validator": "official_validator.py", + "authority": "authoritative release gate for this local package only", + "not_claimed": ["ICML validator", "OpenReview validator", "paper-author validator", "remote campaign validator"], + "semantic_v4": "SEMANTIC_V4.json", + "validation": "VALIDATION.json", + "passed": True, + } + (ROOT / "OFFICIAL_VALIDATOR_RUN.json").write_text(json.dumps(report, indent=2) + "\n") + subprocess.run([sys.executable, "make_manifest.py"], cwd=ROOT, check=True) + print("official local package validator: PASS (semantic-v4 12/12)") + + +if __name__ == "__main__": + main() diff --git a/outputs/claim1.json b/outputs/claim1.json new file mode 100644 index 0000000000000000000000000000000000000000..a99864b80b94d219e8f0cc1ef5779489086a4a3a --- /dev/null +++ b/outputs/claim1.json @@ -0,0 +1,747 @@ +{ + "task": "F(u,v) = u_v with Q = [m]; G(u)=u is injective (Asm 3.2)", + "grid": [ + { + "m": 2, + "V": 2, + "n_prefixes": 4, + "log2_states_required": 2.0, + "theory_m_log2_V": 2.0, + "abs_residual": 0.0, + "pairs_checked": 6, + "pairs_separated": 6, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 3, + "control_acc_closed_form": 0.875, + "control_acc_bruteforce": 0.875, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0 + ], + [ + 0, + 1 + ] + ] + }, + { + "m": 3, + "V": 2, + "n_prefixes": 8, + "log2_states_required": 3.0, + "theory_m_log2_V": 3.0, + "abs_residual": 0.0, + "pairs_checked": 28, + "pairs_separated": 28, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 7, + "control_acc_closed_form": 0.9583333333333334, + "control_acc_bruteforce": 0.9583333333333334, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 1 + ] + ] + }, + { + "m": 4, + "V": 2, + "n_prefixes": 16, + "log2_states_required": 4.0, + "theory_m_log2_V": 4.0, + "abs_residual": 0.0, + "pairs_checked": 120, + "pairs_separated": 120, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 15, + "control_acc_closed_form": 0.984375, + "control_acc_bruteforce": 0.984375, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 5, + "V": 2, + "n_prefixes": 32, + "log2_states_required": 5.0, + "theory_m_log2_V": 5.0, + "abs_residual": 0.0, + "pairs_checked": 496, + "pairs_separated": 496, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 31, + "control_acc_closed_form": 0.99375, + "control_acc_bruteforce": 0.99375, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 6, + "V": 2, + "n_prefixes": 64, + "log2_states_required": 6.0, + "theory_m_log2_V": 6.0, + "abs_residual": 0.0, + "pairs_checked": 2016, + "pairs_separated": 2016, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 63, + "control_acc_closed_form": 0.9973958333333334, + "control_acc_bruteforce": 0.9973958333333334, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 7, + "V": 2, + "n_prefixes": 128, + "log2_states_required": 7.0, + "theory_m_log2_V": 7.0, + "abs_residual": 0.0, + "pairs_checked": 8128, + "pairs_separated": 8128, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 127, + "control_acc_closed_form": 0.9988839285714286, + "control_acc_bruteforce": 0.9988839285714286, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 8, + "V": 2, + "n_prefixes": 256, + "log2_states_required": 8.0, + "theory_m_log2_V": 8.0, + "abs_residual": 0.0, + "pairs_checked": 32640, + "pairs_separated": 32640, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 255, + "control_acc_closed_form": 0.99951171875, + "control_acc_bruteforce": 0.99951171875, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 9, + "V": 2, + "n_prefixes": 512, + "log2_states_required": 9.0, + "theory_m_log2_V": 9.0, + "abs_residual": 0.0, + "pairs_checked": 130816, + "pairs_separated": 130816, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 511, + "control_acc_closed_form": 0.9997829861111112 + }, + { + "m": 10, + "V": 2, + "n_prefixes": 1024, + "log2_states_required": 10.0, + "theory_m_log2_V": 10.0, + "abs_residual": 0.0, + "control_states": 1023, + "control_acc_closed_form": 0.99990234375 + }, + { + "m": 2, + "V": 3, + "n_prefixes": 9, + "log2_states_required": 3.169925001442312, + "theory_m_log2_V": 3.169925001442312, + "abs_residual": 0.0, + "pairs_checked": 36, + "pairs_separated": 36, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 8, + "control_acc_closed_form": 0.9444444444444444, + "control_acc_bruteforce": 0.9444444444444444, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0 + ], + [ + 0, + 1 + ] + ] + }, + { + "m": 3, + "V": 3, + "n_prefixes": 27, + "log2_states_required": 4.754887502163468, + "theory_m_log2_V": 4.754887502163468, + "abs_residual": 0.0, + "pairs_checked": 351, + "pairs_separated": 351, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 26, + "control_acc_closed_form": 0.9876543209876543, + "control_acc_bruteforce": 0.9876543209876543, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 1 + ] + ] + }, + { + "m": 4, + "V": 3, + "n_prefixes": 81, + "log2_states_required": 6.339850002884624, + "theory_m_log2_V": 6.339850002884624, + "abs_residual": 0.0, + "pairs_checked": 3240, + "pairs_separated": 3240, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 80, + "control_acc_closed_form": 0.9969135802469136, + "control_acc_bruteforce": 0.9969135802469136, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 5, + "V": 3, + "n_prefixes": 243, + "log2_states_required": 7.924812503605781, + "theory_m_log2_V": 7.92481250360578, + "abs_residual": 8.881784197001252e-16, + "pairs_checked": 29403, + "pairs_separated": 29403, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 242, + "control_acc_closed_form": 0.9991769547325103, + "control_acc_bruteforce": 0.9991769547325103, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 6, + "V": 3, + "n_prefixes": 729, + "log2_states_required": 9.509775004326936, + "theory_m_log2_V": 9.509775004326936, + "abs_residual": 0.0, + "control_states": 728, + "control_acc_closed_form": 0.9997713763145862 + }, + { + "m": 7, + "V": 3, + "n_prefixes": 2187, + "log2_states_required": 11.094737505048093, + "theory_m_log2_V": 11.094737505048093, + "abs_residual": 0.0, + "control_states": 2186, + "control_acc_closed_form": 0.9999346789470246 + }, + { + "m": 2, + "V": 4, + "n_prefixes": 16, + "log2_states_required": 4.0, + "theory_m_log2_V": 4.0, + "abs_residual": 0.0, + "pairs_checked": 120, + "pairs_separated": 120, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 15, + "control_acc_closed_form": 0.96875, + "control_acc_bruteforce": 0.96875, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0 + ], + [ + 0, + 1 + ] + ] + }, + { + "m": 3, + "V": 4, + "n_prefixes": 64, + "log2_states_required": 6.0, + "theory_m_log2_V": 6.0, + "abs_residual": 0.0, + "pairs_checked": 2016, + "pairs_separated": 2016, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 63, + "control_acc_closed_form": 0.9947916666666666, + "control_acc_bruteforce": 0.9947916666666666, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 1 + ] + ] + }, + { + "m": 4, + "V": 4, + "n_prefixes": 256, + "log2_states_required": 8.0, + "theory_m_log2_V": 8.0, + "abs_residual": 0.0, + "pairs_checked": 32640, + "pairs_separated": 32640, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 255, + "control_acc_closed_form": 0.9990234375, + "control_acc_bruteforce": 0.9990234375, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 5, + "V": 4, + "n_prefixes": 1024, + "log2_states_required": 10.0, + "theory_m_log2_V": 10.0, + "abs_residual": 0.0, + "control_states": 1023, + "control_acc_closed_form": 0.9998046875 + }, + { + "m": 6, + "V": 4, + "n_prefixes": 4096, + "log2_states_required": 12.0, + "theory_m_log2_V": 12.0, + "abs_residual": 0.0, + "control_states": 4095, + "control_acc_closed_form": 0.9999593098958334 + } + ], + "max_residual_log2_states": 8.881784197001252e-16, + "max_control_gap": 0.0, + "all_pairs_separated_everywhere": true, + "linear_in_m_fit": { + "2": { + "fitted_slope": 1.0, + "theory_slope_log2_V": 1.0, + "slope_abs_err": 0.0, + "intercept": 1.6770126117963062e-15, + "R2": 1.0, + "max_abs_residual": 1.7763568394002505e-15 + }, + "3": { + "fitted_slope": 1.5849625007211565, + "theory_slope_log2_V": 1.584962500721156, + "slope_abs_err": 4.440892098500626e-16, + "intercept": -4.520058619021783e-15, + "R2": 1.0, + "max_abs_residual": 3.552713678800501e-15 + }, + "4": { + "fitted_slope": 2.0, + "theory_slope_log2_V": 2.0, + "slope_abs_err": 0.0, + "intercept": -1.3107111616019684e-15, + "R2": 1.0, + "max_abs_residual": 1.7763568394002505e-15 + } + }, + "exhaustive_accuracy_curves": [ + { + "m": 2, + "V": 2, + "n_prefixes": 4, + "partitions_enumerated": "Bell(4)", + "A_star": { + "1": 0.5, + "2": 0.75, + "3": 0.875, + "4": 1.0 + }, + "min_states_acc_1.0": 4, + "min_states_acc_0.875": 3, + "min_states_acc_0.9": 4, + "min_states_acc_0.5": 1, + "A_star_at_n_minus_1": 0.875, + "closed_form_at_n_minus_1": 0.875 + }, + { + "m": 3, + "V": 2, + "n_prefixes": 8, + "partitions_enumerated": "Bell(8)", + "A_star": { + "1": 0.5, + "2": 0.75, + "3": 0.7916666666666666, + "4": 0.8333333333333334, + "5": 0.875, + "6": 0.9166666666666666, + "7": 0.9583333333333334, + "8": 1.0 + }, + "min_states_acc_1.0": 8, + "min_states_acc_0.875": 5, + "min_states_acc_0.9": 6, + "min_states_acc_0.5": 1, + "A_star_at_n_minus_1": 0.9583333333333334, + "closed_form_at_n_minus_1": 0.9583333333333334 + }, + { + "m": 2, + "V": 3, + "n_prefixes": 9, + "partitions_enumerated": "Bell(9)", + "A_star": { + "1": 0.3333333333333333, + "2": 0.5555555555555556, + "3": 0.6666666666666666, + "4": 0.7222222222222222, + "5": 0.7777777777777778, + "6": 0.8333333333333334, + "7": 0.8888888888888888, + "8": 0.9444444444444444, + "9": 1.0 + }, + "min_states_acc_1.0": 9, + "min_states_acc_0.875": 7, + "min_states_acc_0.9": 8, + "min_states_acc_0.5": 2, + "A_star_at_n_minus_1": 0.9444444444444444, + "closed_form_at_n_minus_1": 0.9444444444444444 + } + ], + "exhaustive_min_states_equals_Vm": true, + "max_curve_control_gap": 0.0, + "lemma_3_5": [ + { + "k": 2, + "sizes": [ + 2, + 3 + ], + "product_bound": 6, + "reachable_product_states": 2, + "sequences_tested": 510, + "behaviour_mismatches": 0, + "bound_respected": true + }, + { + "k": 3, + "sizes": [ + 2, + 2, + 2 + ], + "product_bound": 8, + "reachable_product_states": 2, + "sequences_tested": 254, + "behaviour_mismatches": 0, + "bound_respected": true + }, + { + "k": 2, + "sizes": [ + 3, + 4 + ], + "product_bound": 12, + "reachable_product_states": 6, + "sequences_tested": 363, + "behaviour_mismatches": 0, + "bound_respected": true + }, + { + "k": 4, + "sizes": [ + 2, + 2, + 2, + 2 + ], + "product_bound": 16, + "reachable_product_states": 6, + "sequences_tested": 126, + "behaviour_mismatches": 0, + "bound_respected": true + }, + { + "k": 3, + "sizes": [ + 2, + 3, + 2 + ], + "product_bound": 12, + "reachable_product_states": 2, + "sequences_tested": 120, + "behaviour_mismatches": 0, + "bound_respected": true + } + ], + "lemma_3_5_total_mismatches": 0, + "lemma_3_5_bound_always_respected": true, + "lemma_3_5_tightness": [ + { + "k": 2, + "sizes": [ + 2, + 3 + ], + "product_bound": 6, + "reachable_product_states": 6, + "sequences_tested": 1092, + "behaviour_mismatches": 0, + "bound_respected": true, + "bound_is_tight": true + }, + { + "k": 2, + "sizes": [ + 3, + 3 + ], + "product_bound": 9, + "reachable_product_states": 9, + "sequences_tested": 1092, + "behaviour_mismatches": 0, + "bound_respected": true, + "bound_is_tight": true + }, + { + "k": 3, + "sizes": [ + 2, + 2, + 2 + ], + "product_bound": 8, + "reachable_product_states": 8, + "sequences_tested": 1092, + "behaviour_mismatches": 0, + "bound_respected": true, + "bound_is_tight": true + } + ], + "lemma_3_5_tight_witnesses": 3, + "printed_bound_audit": { + "n_admissible_configs": 1296, + "max_literal_bound_over_admissible_grid": 0.0, + "literal_bound_ever_positive": false, + "min_appendix_bound_on_instantiation": 0.6628711136008072, + "appendix_slope_in_m": { + "2": { + "fitted_slope": 0.3314355568004036, + "closed_form_slope": 0.3314355568004036, + "abs_err": 0.0 + }, + "4": { + "fitted_slope": 1.2064355568004035, + "closed_form_slope": 1.2064355568004035, + "abs_err": 0.0 + }, + "8": { + "fitted_slope": 2.0814355568004035, + "closed_form_slope": 2.0814355568004035, + "abs_err": 0.0 + }, + "16": { + "fitted_slope": 2.9564355568004044, + "closed_form_slope": 2.9564355568004035, + "abs_err": 8.881784197001252e-16 + }, + "26": { + "fitted_slope": 3.569320310173859, + "closed_form_slope": 3.569320310173859, + "abs_err": 0.0 + }, + "32": { + "fitted_slope": 3.831435556800403, + "closed_form_slope": 3.8314355568004035, + "abs_err": 4.440892098500626e-16 + } + }, + "note": "literal = m*log2|V| - q*log2|Y| (Thm 3.3 as printed); appendix = m*log2|V| - q*(H2(1/8)+log2|Y|/8) (proof, err<1/8)" + }, + "one_state_guessing_accuracy": { + "2": 0.5, + "3": 0.3333333333333333, + "4": 0.25, + "8": 0.125, + "26": 0.038461538461538464, + "32": 0.03125 + } +} \ No newline at end of file diff --git a/outputs/claim2.json b/outputs/claim2.json new file mode 100644 index 0000000000000000000000000000000000000000..c97b9ad48a1724a80cbe909fe32b448c3ce5ce09 --- /dev/null +++ b/outputs/claim2.json @@ -0,0 +1,1307 @@ +{ + "numerical_gate": { + "max_abs_matmul_minus_einsum": 1.7763568394002505e-15, + "all_forward_outputs_finite": true, + "max_abs_logit": 2.1417444637761154, + "note": "Accelerate RuntimeWarnings are spurious; verified here" + }, + "receptive_field_sweep": { + "configs_tested": 960, + "violations_outside_receptive_field": 0, + "max_abs_delta_outside_receptive_field": 0.0, + "configs_with_no_effect_just_inside_rf": 0, + "sample_rows": [ + { + "L": 16, + "k": 1, + "windows": [ + 10 + ], + "sum_W": 10, + "rf": 10, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.28581609351223836 + }, + { + "L": 16, + "k": 1, + "windows": [ + 10 + ], + "sum_W": 10, + "rf": 10, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.03444175010002626 + }, + { + "L": 16, + "k": 1, + "windows": [ + 3 + ], + "sum_W": 3, + "rf": 3, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.2040553116237531 + }, + { + "L": 16, + "k": 1, + "windows": [ + 12 + ], + "sum_W": 12, + "rf": 12, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.014197238946864754 + }, + { + "L": 16, + "k": 1, + "windows": [ + 11 + ], + "sum_W": 11, + "rf": 11, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.14570162697464065 + }, + { + "L": 16, + "k": 1, + "windows": [ + 5 + ], + "sum_W": 5, + "rf": 5, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.32986723460250333 + }, + { + "L": 16, + "k": 1, + "windows": [ + 9 + ], + "sum_W": 9, + "rf": 9, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.1968814430783481 + }, + { + "L": 16, + "k": 1, + "windows": [ + 7 + ], + "sum_W": 7, + "rf": 7, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.030041848233613166 + }, + { + "L": 16, + "k": 1, + "windows": [ + 9 + ], + "sum_W": 9, + "rf": 9, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.2698237935195511 + }, + { + "L": 16, + "k": 1, + "windows": [ + 4 + ], + "sum_W": 4, + "rf": 4, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.14797709583183694 + }, + { + "L": 16, + "k": 1, + "windows": [ + 12 + ], + "sum_W": 12, + "rf": 12, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.07127460286707321 + }, + { + "L": 16, + "k": 1, + "windows": [ + 14 + ], + "sum_W": 14, + "rf": 14, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.10168374636975316 + }, + { + "L": 16, + "k": 1, + "windows": [ + 9 + ], + "sum_W": 9, + "rf": 9, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.003750870881970958 + }, + { + "L": 16, + "k": 1, + "windows": [ + 2 + ], + "sum_W": 2, + "rf": 2, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 2.407640189683196 + }, + { + "L": 16, + "k": 1, + "windows": [ + 11 + ], + "sum_W": 11, + "rf": 11, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.28417810626585305 + }, + { + "L": 16, + "k": 1, + "windows": [ + 2 + ], + "sum_W": 2, + "rf": 2, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.5150917655838505 + }, + { + "L": 16, + "k": 1, + "windows": [ + 1 + ], + "sum_W": 1, + "rf": 1, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 2.026287079665709 + }, + { + "L": 16, + "k": 1, + "windows": [ + 5 + ], + "sum_W": 5, + "rf": 5, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.21853871993517676 + }, + { + "L": 16, + "k": 1, + "windows": [ + 9 + ], + "sum_W": 9, + "rf": 9, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.5761418306350206 + }, + { + "L": 16, + "k": 1, + "windows": [ + 10 + ], + "sum_W": 10, + "rf": 10, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.006504128634520656 + }, + { + "L": 16, + "k": 1, + "windows": [ + 1 + ], + "sum_W": 1, + "rf": 1, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 3.0536991633981563 + }, + { + "L": 16, + "k": 1, + "windows": [ + 1 + ], + "sum_W": 1, + "rf": 1, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 2.1397172447617256 + }, + { + "L": 16, + "k": 1, + "windows": [ + 10 + ], + "sum_W": 10, + "rf": 10, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.04804122082565855 + }, + { + "L": 16, + "k": 1, + "windows": [ + 7 + ], + "sum_W": 7, + "rf": 7, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.701760784501624 + }, + { + "L": 16, + "k": 1, + "windows": [ + 13 + ], + "sum_W": 13, + "rf": 13, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.1355528677544809 + }, + { + "L": 16, + "k": 1, + "windows": [ + 7 + ], + "sum_W": 7, + "rf": 7, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.48194231490071804 + }, + { + "L": 16, + "k": 1, + "windows": [ + 13 + ], + "sum_W": 13, + "rf": 13, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.0814501808086524 + }, + { + "L": 16, + "k": 1, + "windows": [ + 6 + ], + "sum_W": 6, + "rf": 6, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.32926605957010213 + }, + { + "L": 16, + "k": 1, + "windows": [ + 14 + ], + "sum_W": 14, + "rf": 14, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.10376140965519931 + }, + { + "L": 16, + "k": 1, + "windows": [ + 3 + ], + "sum_W": 3, + "rf": 3, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.15220621062657136 + }, + { + "L": 16, + "k": 1, + "windows": [ + 9 + ], + "sum_W": 9, + "rf": 9, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.10168883280928198 + }, + { + "L": 16, + "k": 1, + "windows": [ + 8 + ], + "sum_W": 8, + "rf": 8, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.2597069821704449 + }, + { + "L": 16, + "k": 1, + "windows": [ + 11 + ], + "sum_W": 11, + "rf": 11, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.38062082529689295 + }, + { + "L": 16, + "k": 1, + "windows": [ + 1 + ], + "sum_W": 1, + "rf": 1, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 1.6831235344120234 + }, + { + "L": 16, + "k": 1, + "windows": [ + 14 + ], + "sum_W": 14, + "rf": 14, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.02255092704988093 + }, + { + "L": 16, + "k": 1, + "windows": [ + 3 + ], + "sum_W": 3, + "rf": 3, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.1579483465578484 + }, + { + "L": 16, + "k": 1, + "windows": [ + 14 + ], + "sum_W": 14, + "rf": 14, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.032733635175017234 + }, + { + "L": 16, + "k": 1, + "windows": [ + 10 + ], + "sum_W": 10, + "rf": 10, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.03131013093506363 + }, + { + "L": 16, + "k": 1, + "windows": [ + 14 + ], + "sum_W": 14, + "rf": 14, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.07259073385286363 + }, + { + "L": 16, + "k": 1, + "windows": [ + 5 + ], + "sum_W": 5, + "rf": 5, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.1621850317171365 + } + ] + }, + "local_sensitivity_witnesses": [ + { + "L": 8, + "seed": 0, + "R_measured": 7, + "R_theory_max": 7, + "R_claimed_in_Thm_4_2": 4, + "same_in_every_window_below_R": true, + "F_x": 28, + "F_xprime": 16, + "outputs_differ": true + }, + { + "L": 8, + "seed": 1, + "R_measured": 7, + "R_theory_max": 7, + "R_claimed_in_Thm_4_2": 4, + "same_in_every_window_below_R": true, + "F_x": 9, + "F_xprime": 31, + "outputs_differ": true + }, + { + "L": 8, + "seed": 2, + "R_measured": 7, + "R_theory_max": 7, + "R_claimed_in_Thm_4_2": 4, + "same_in_every_window_below_R": true, + "F_x": 13, + "F_xprime": 18, + "outputs_differ": true + }, + { + "L": 8, + "seed": 3, + "R_measured": 7, + "R_theory_max": 7, + "R_claimed_in_Thm_4_2": 4, + "same_in_every_window_below_R": true, + "F_x": 19, + "F_xprime": 13, + "outputs_differ": true + }, + { + "L": 8, + "seed": 4, + "R_measured": 7, + "R_theory_max": 7, + "R_claimed_in_Thm_4_2": 4, + "same_in_every_window_below_R": true, + "F_x": 19, + "F_xprime": 32, + "outputs_differ": true + }, + { + "L": 16, + "seed": 0, + "R_measured": 15, + "R_theory_max": 15, + "R_claimed_in_Thm_4_2": 8, + "same_in_every_window_below_R": true, + "F_x": 27, + "F_xprime": 8, + "outputs_differ": true + }, + { + "L": 16, + "seed": 1, + "R_measured": 15, + "R_theory_max": 15, + "R_claimed_in_Thm_4_2": 8, + "same_in_every_window_below_R": true, + "F_x": 19, + "F_xprime": 15, + "outputs_differ": true + }, + { + "L": 16, + "seed": 2, + "R_measured": 15, + "R_theory_max": 15, + "R_claimed_in_Thm_4_2": 8, + "same_in_every_window_below_R": true, + "F_x": 10, + "F_xprime": 30, + "outputs_differ": true + }, + { + "L": 16, + "seed": 3, + "R_measured": 15, + "R_theory_max": 15, + "R_claimed_in_Thm_4_2": 8, + "same_in_every_window_below_R": true, + "F_x": 29, + "F_xprime": 30, + "outputs_differ": true + }, + { + "L": 16, + "seed": 4, + "R_measured": 15, + "R_theory_max": 15, + "R_claimed_in_Thm_4_2": 8, + "same_in_every_window_below_R": true, + "F_x": 24, + "F_xprime": 18, + "outputs_differ": true + }, + { + "L": 32, + "seed": 0, + "R_measured": 31, + "R_theory_max": 31, + "R_claimed_in_Thm_4_2": 16, + "same_in_every_window_below_R": true, + "F_x": 28, + "F_xprime": 23, + "outputs_differ": true + }, + { + "L": 32, + "seed": 1, + "R_measured": 31, + "R_theory_max": 31, + "R_claimed_in_Thm_4_2": 16, + "same_in_every_window_below_R": true, + "F_x": 13, + "F_xprime": 23, + "outputs_differ": true + }, + { + "L": 32, + "seed": 2, + "R_measured": 31, + "R_theory_max": 31, + "R_claimed_in_Thm_4_2": 16, + "same_in_every_window_below_R": true, + "F_x": 18, + "F_xprime": 14, + "outputs_differ": true + }, + { + "L": 32, + "seed": 3, + "R_measured": 31, + "R_theory_max": 31, + "R_claimed_in_Thm_4_2": 16, + "same_in_every_window_below_R": true, + "F_x": 22, + "F_xprime": 10, + "outputs_differ": true + }, + { + "L": 32, + "seed": 4, + "R_measured": 31, + "R_theory_max": 31, + "R_claimed_in_Thm_4_2": 16, + "same_in_every_window_below_R": true, + "F_x": 13, + "F_xprime": 22, + "outputs_differ": true + }, + { + "L": 64, + "seed": 0, + "R_measured": 63, + "R_theory_max": 63, + "R_claimed_in_Thm_4_2": 32, + "same_in_every_window_below_R": true, + "F_x": 11, + "F_xprime": 19, + "outputs_differ": true + }, + { + "L": 64, + "seed": 1, + "R_measured": 63, + "R_theory_max": 63, + "R_claimed_in_Thm_4_2": 32, + "same_in_every_window_below_R": true, + "F_x": 7, + "F_xprime": 32, + "outputs_differ": true + }, + { + "L": 64, + "seed": 2, + "R_measured": 63, + "R_theory_max": 63, + "R_claimed_in_Thm_4_2": 32, + "same_in_every_window_below_R": true, + "F_x": 30, + "F_xprime": 8, + "outputs_differ": true + }, + { + "L": 64, + "seed": 3, + "R_measured": 63, + "R_theory_max": 63, + "R_claimed_in_Thm_4_2": 32, + "same_in_every_window_below_R": true, + "F_x": 10, + "F_xprime": 19, + "outputs_differ": true + }, + { + "L": 64, + "seed": 4, + "R_measured": 63, + "R_theory_max": 63, + "R_claimed_in_Thm_4_2": 32, + "same_in_every_window_below_R": true, + "F_x": 30, + "F_xprime": 18, + "outputs_differ": true + }, + { + "L": 128, + "seed": 0, + "R_measured": 127, + "R_theory_max": 127, + "R_claimed_in_Thm_4_2": 64, + "same_in_every_window_below_R": true, + "F_x": 20, + "F_xprime": 8, + "outputs_differ": true + }, + { + "L": 128, + "seed": 1, + "R_measured": 127, + "R_theory_max": 127, + "R_claimed_in_Thm_4_2": 64, + "same_in_every_window_below_R": true, + "F_x": 7, + "F_xprime": 24, + "outputs_differ": true + }, + { + "L": 128, + "seed": 2, + "R_measured": 127, + "R_theory_max": 127, + "R_claimed_in_Thm_4_2": 64, + "same_in_every_window_below_R": true, + "F_x": 25, + "F_xprime": 17, + "outputs_differ": true + }, + { + "L": 128, + "seed": 3, + "R_measured": 127, + "R_theory_max": 127, + "R_claimed_in_Thm_4_2": 64, + "same_in_every_window_below_R": true, + "F_x": 18, + "F_xprime": 7, + "outputs_differ": true + }, + { + "L": 128, + "seed": 4, + "R_measured": 127, + "R_theory_max": 127, + "R_claimed_in_Thm_4_2": 64, + "same_in_every_window_below_R": true, + "F_x": 17, + "F_xprime": 16, + "outputs_differ": true + }, + { + "L": 256, + "seed": 0, + "R_measured": 255, + "R_theory_max": 255, + "R_claimed_in_Thm_4_2": 128, + "same_in_every_window_below_R": true, + "F_x": 16, + "F_xprime": 28, + "outputs_differ": true + }, + { + "L": 256, + "seed": 1, + "R_measured": 255, + "R_theory_max": 255, + "R_claimed_in_Thm_4_2": 128, + "same_in_every_window_below_R": true, + "F_x": 7, + "F_xprime": 12, + "outputs_differ": true + }, + { + "L": 256, + "seed": 2, + "R_measured": 255, + "R_theory_max": 255, + "R_claimed_in_Thm_4_2": 128, + "same_in_every_window_below_R": true, + "F_x": 8, + "F_xprime": 20, + "outputs_differ": true + }, + { + "L": 256, + "seed": 3, + "R_measured": 255, + "R_theory_max": 255, + "R_claimed_in_Thm_4_2": 128, + "same_in_every_window_below_R": true, + "F_x": 7, + "F_xprime": 29, + "outputs_differ": true + }, + { + "L": 256, + "seed": 4, + "R_measured": 255, + "R_theory_max": 255, + "R_claimed_in_Thm_4_2": 128, + "same_in_every_window_below_R": true, + "F_x": 20, + "F_xprime": 13, + "outputs_differ": true + } + ], + "all_witnesses_valid": true, + "R_measured_equals_L_minus_1_everywhere": true, + "witness_indistinguishability": { + "16": { + "pairs": [ + { + "L": 16, + "R": 15, + "k": 1, + "windows_short": [ + 14 + ], + "sum_W_short": 14, + "rf_short": 14, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16 + ], + "sum_W_long": 16, + "max_abs_delta_long": 0.1769761959118361 + }, + { + "L": 16, + "R": 15, + "k": 2, + "windows_short": [ + 7, + 7 + ], + "sum_W_short": 14, + "rf_short": 13, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16, + 16 + ], + "sum_W_long": 32, + "max_abs_delta_long": 0.1321795520296115 + }, + { + "L": 16, + "R": 15, + "k": 3, + "windows_short": [ + 4, + 4, + 4 + ], + "sum_W_short": 12, + "rf_short": 10, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16, + 16, + 16 + ], + "sum_W_long": 48, + "max_abs_delta_long": 0.8786377218884379 + }, + { + "L": 16, + "R": 15, + "k": 1, + "windows_short": [ + 14 + ], + "sum_W_short": 14, + "rf_short": 14, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16 + ], + "sum_W_long": 16, + "max_abs_delta_long": 0.0552757776663132 + }, + { + "L": 16, + "R": 15, + "k": 2, + "windows_short": [ + 7, + 7 + ], + "sum_W_short": 14, + "rf_short": 13, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16, + 16 + ], + "sum_W_long": 32, + "max_abs_delta_long": 0.043267705611890306 + }, + { + "L": 16, + "R": 15, + "k": 3, + "windows_short": [ + 4, + 4, + 4 + ], + "sum_W_short": 12, + "rf_short": 10, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16, + 16, + 16 + ], + "sum_W_long": 48, + "max_abs_delta_long": 0.766364411932395 + }, + { + "L": 16, + "R": 15, + "k": 1, + "windows_short": [ + 14 + ], + "sum_W_short": 14, + "rf_short": 14, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16 + ], + "sum_W_long": 16, + "max_abs_delta_long": 0.05877028865718653 + }, + { + "L": 16, + "R": 15, + "k": 2, + "windows_short": [ + 7, + 7 + ], + "sum_W_short": 14, + "rf_short": 13, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16, + 16 + ], + "sum_W_long": 32, + "max_abs_delta_long": 0.3569878953567704 + }, + { + "L": 16, + "R": 15, + "k": 3, + "windows_short": [ + 4, + 4, + 4 + ], + "sum_W_short": 12, + "rf_short": 10, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16, + 16, + 16 + ], + "sum_W_long": 48, + "max_abs_delta_long": 0.5521298147300295 + } + ], + "n_short_window_tests": 9, + "max_abs_delta_when_sumW_below_R": 0.0, + "n_long_window_tests": 9, + "n_long_window_separated": 9 + }, + "32": { + "pairs": [ + { + "L": 32, + "R": 31, + "k": 1, + "windows_short": [ + 30 + ], + "sum_W_short": 30, + "rf_short": 30, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32 + ], + "sum_W_long": 32, + "max_abs_delta_long": 0.03534840754759783 + }, + { + "L": 32, + "R": 31, + "k": 2, + "windows_short": [ + 15, + 15 + ], + "sum_W_short": 30, + "rf_short": 29, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32, + 32 + ], + "sum_W_long": 64, + "max_abs_delta_long": 0.02080493890641305 + }, + { + "L": 32, + "R": 31, + "k": 3, + "windows_short": [ + 10, + 10, + 10 + ], + "sum_W_short": 30, + "rf_short": 28, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32, + 32, + 32 + ], + "sum_W_long": 96, + "max_abs_delta_long": 0.152554442308942 + }, + { + "L": 32, + "R": 31, + "k": 1, + "windows_short": [ + 30 + ], + "sum_W_short": 30, + "rf_short": 30, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32 + ], + "sum_W_long": 32, + "max_abs_delta_long": 0.16234324137652778 + }, + { + "L": 32, + "R": 31, + "k": 2, + "windows_short": [ + 15, + 15 + ], + "sum_W_short": 30, + "rf_short": 29, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32, + 32 + ], + "sum_W_long": 64, + "max_abs_delta_long": 0.3830170389889227 + }, + { + "L": 32, + "R": 31, + "k": 3, + "windows_short": [ + 10, + 10, + 10 + ], + "sum_W_short": 30, + "rf_short": 28, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32, + 32, + 32 + ], + "sum_W_long": 96, + "max_abs_delta_long": 0.12814149073121756 + }, + { + "L": 32, + "R": 31, + "k": 1, + "windows_short": [ + 30 + ], + "sum_W_short": 30, + "rf_short": 30, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32 + ], + "sum_W_long": 32, + "max_abs_delta_long": 0.06166132814076597 + }, + { + "L": 32, + "R": 31, + "k": 2, + "windows_short": [ + 15, + 15 + ], + "sum_W_short": 30, + "rf_short": 29, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32, + 32 + ], + "sum_W_long": 64, + "max_abs_delta_long": 0.13876098797379044 + }, + { + "L": 32, + "R": 31, + "k": 3, + "windows_short": [ + 10, + 10, + 10 + ], + "sum_W_short": 30, + "rf_short": 28, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32, + 32, + 32 + ], + "sum_W_long": 96, + "max_abs_delta_long": 0.08809620618693226 + } + ], + "n_short_window_tests": 9, + "max_abs_delta_when_sumW_below_R": 0.0, + "n_long_window_tests": 9, + "n_long_window_separated": 9 + }, + "64": { + "pairs": [ + { + "L": 64, + "R": 63, + "k": 1, + "windows_short": [ + 62 + ], + "sum_W_short": 62, + "rf_short": 62, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64 + ], + "sum_W_long": 64, + "max_abs_delta_long": 0.03295132835513548 + }, + { + "L": 64, + "R": 63, + "k": 2, + "windows_short": [ + 31, + 31 + ], + "sum_W_short": 62, + "rf_short": 61, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64, + 64 + ], + "sum_W_long": 128, + "max_abs_delta_long": 0.36324841338320957 + }, + { + "L": 64, + "R": 63, + "k": 3, + "windows_short": [ + 20, + 20, + 20 + ], + "sum_W_short": 60, + "rf_short": 58, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64, + 64, + 64 + ], + "sum_W_long": 192, + "max_abs_delta_long": 0.08466638568402152 + }, + { + "L": 64, + "R": 63, + "k": 1, + "windows_short": [ + 62 + ], + "sum_W_short": 62, + "rf_short": 62, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64 + ], + "sum_W_long": 64, + "max_abs_delta_long": 0.23067972072479592 + }, + { + "L": 64, + "R": 63, + "k": 2, + "windows_short": [ + 31, + 31 + ], + "sum_W_short": 62, + "rf_short": 61, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64, + 64 + ], + "sum_W_long": 128, + "max_abs_delta_long": 0.08941496277410776 + }, + { + "L": 64, + "R": 63, + "k": 3, + "windows_short": [ + 20, + 20, + 20 + ], + "sum_W_short": 60, + "rf_short": 58, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64, + 64, + 64 + ], + "sum_W_long": 192, + "max_abs_delta_long": 0.04893897066339015 + }, + { + "L": 64, + "R": 63, + "k": 1, + "windows_short": [ + 62 + ], + "sum_W_short": 62, + "rf_short": 62, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64 + ], + "sum_W_long": 64, + "max_abs_delta_long": 0.01683241713322925 + }, + { + "L": 64, + "R": 63, + "k": 2, + "windows_short": [ + 31, + 31 + ], + "sum_W_short": 62, + "rf_short": 61, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64, + 64 + ], + "sum_W_long": 128, + "max_abs_delta_long": 0.09862298740622921 + }, + { + "L": 64, + "R": 63, + "k": 3, + "windows_short": [ + 20, + 20, + 20 + ], + "sum_W_short": 60, + "rf_short": 58, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64, + 64, + 64 + ], + "sum_W_long": 192, + "max_abs_delta_long": 0.053174914892574254 + } + ], + "n_short_window_tests": 9, + "max_abs_delta_when_sumW_below_R": 0.0, + "n_long_window_tests": 9, + "n_long_window_separated": 9 + } + }, + "max_abs_delta_when_sumW_below_R": 0.0, + "control_full_window_separates_frac": 1.0, + "success_prob_when_sumW_below_R": 0.5, + "threshold_in_theorem": 0.6666666666666666, + "fails_theorem_threshold": true +} \ No newline at end of file diff --git a/outputs/claim3.json b/outputs/claim3.json new file mode 100644 index 0000000000000000000000000000000000000000..a17133b8375e26856b939f83ef509d8f4920a252 --- /dev/null +++ b/outputs/claim3.json @@ -0,0 +1,349 @@ +{ + "softmax_inverse_temperature_M": 30.0, + "gate_reference_target_mismatches": 0, + "gate_codes_injective": true, + "gate_matmul_vs_einsum": 0.0, + "exhaustive": [ + { + "n_inputs": 3093, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "offsets": [ + 1, + 2, + 3 + ], + "M": 2, + "L": 5, + "V": 5, + "embed_dim": 16, + "code_width_c": 3, + "log2_V": 2.321928094887362, + "log2_L": 2.321928094887362, + "window": 3, + "working_memory_ratio": 0.6, + "mamba_states": 4, + "exhaustive": true + }, + { + "n_inputs": 45927, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "offsets": [ + 1, + 2, + 3 + ], + "M": 3, + "L": 6, + "V": 6, + "embed_dim": 16, + "code_width_c": 3, + "log2_V": 2.584962500721156, + "log2_L": 2.584962500721156, + "window": 3, + "working_memory_ratio": 0.5, + "mamba_states": 4, + "exhaustive": true + }, + { + "n_inputs": 821356, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "offsets": [ + 1, + 2, + 3, + 4 + ], + "M": 3, + "L": 7, + "V": 7, + "embed_dim": 16, + "code_width_c": 3, + "log2_V": 2.807354922057604, + "log2_L": 2.807354922057604, + "window": 4, + "working_memory_ratio": 0.5714285714285714, + "mamba_states": 5, + "exhaustive": true + } + ], + "random_sweeps": [ + { + "n_inputs": 66666, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "accuracy_mean_over_seeds": 1.0, + "accuracy_std_over_seeds": 0.0, + "n_inputs_total": 199998, + "offsets_min_max": [ + 1, + 6 + ], + "n_offsets": 6, + "M": 4, + "L": 16, + "V": 10, + "embed_dim": 26, + "code_width_c": 5, + "log2_V": 3.321928094887362, + "log2_L": 4.0, + "window": 6, + "working_memory_ratio": 0.375, + "mamba_states": 7 + }, + { + "n_inputs": 66666, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "accuracy_mean_over_seeds": 1.0, + "accuracy_std_over_seeds": 0.0, + "n_inputs_total": 199998, + "offsets_min_max": [ + 5, + 10 + ], + "n_offsets": 6, + "M": 26, + "L": 100, + "V": 32, + "embed_dim": 36, + "code_width_c": 7, + "log2_V": 5.0, + "log2_L": 6.643856189774724, + "window": 10, + "working_memory_ratio": 0.1, + "mamba_states": 7 + }, + { + "n_inputs": 31722, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "accuracy_mean_over_seeds": 1.0, + "accuracy_std_over_seeds": 0.0, + "n_inputs_total": 99999, + "offsets_min_max": [ + 5, + 10 + ], + "n_offsets": 6, + "M": 194, + "L": 100, + "V": 200, + "embed_dim": 41, + "code_width_c": 8, + "log2_V": 7.643856189774724, + "log2_L": 6.643856189774724, + "window": 10, + "working_memory_ratio": 0.1, + "mamba_states": 7 + }, + { + "n_inputs": 15063, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "accuracy_mean_over_seeds": 1.0, + "accuracy_std_over_seeds": 0.0, + "n_inputs_total": 99999, + "offsets_min_max": [ + 5, + 10 + ], + "n_offsets": 6, + "M": 994, + "L": 100, + "V": 1000, + "embed_dim": 51, + "code_width_c": 10, + "log2_V": 9.965784284662087, + "log2_L": 6.643856189774724, + "window": 10, + "working_memory_ratio": 0.1, + "mamba_states": 7 + }, + { + "n_inputs": 10000, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "accuracy_mean_over_seeds": 1.0, + "accuracy_std_over_seeds": 0.0, + "n_inputs_total": 30000, + "offsets_min_max": [ + 1, + 32 + ], + "n_offsets": 32, + "M": 480, + "L": 1024, + "V": 512, + "embed_dim": 56, + "code_width_c": 11, + "log2_V": 9.0, + "log2_L": 10.0, + "window": 32, + "working_memory_ratio": 0.03125, + "mamba_states": 33 + }, + { + "n_inputs": 2000, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "accuracy_mean_over_seeds": 1.0, + "accuracy_std_over_seeds": 0.0, + "n_inputs_total": 6000, + "offsets_min_max": [ + 1, + 64 + ], + "n_offsets": 64, + "M": 960, + "L": 4096, + "V": 1024, + "embed_dim": 66, + "code_width_c": 13, + "log2_V": 10.0, + "log2_L": 12.0, + "window": 64, + "working_memory_ratio": 0.015625, + "mamba_states": 65 + } + ], + "total_inputs_tested": 1506370, + "min_accuracy_over_all_configs": 1.0, + "embed_dim_scaling": { + "rows": [ + { + "V": 5, + "L": 5, + "embed_dim": 16, + "bound_max_log2": 2.321928094887362, + "ratio": 6.890824929174289 + }, + { + "V": 6, + "L": 6, + "embed_dim": 16, + "bound_max_log2": 2.584962500721156, + "ratio": 6.189644915752666 + }, + { + "V": 7, + "L": 7, + "embed_dim": 16, + "bound_max_log2": 2.807354922057604, + "ratio": 5.699314993728355 + }, + { + "V": 10, + "L": 16, + "embed_dim": 26, + "bound_max_log2": 4.0, + "ratio": 6.5 + }, + { + "V": 32, + "L": 100, + "embed_dim": 36, + "bound_max_log2": 6.643856189774724, + "ratio": 5.418539921951662 + }, + { + "V": 200, + "L": 100, + "embed_dim": 41, + "bound_max_log2": 7.643856189774724, + "ratio": 5.363784846560324 + }, + { + "V": 1000, + "L": 100, + "embed_dim": 51, + "bound_max_log2": 9.965784284662087, + "ratio": 5.11750992628768 + }, + { + "V": 512, + "L": 1024, + "embed_dim": 56, + "bound_max_log2": 10.0, + "ratio": 5.6 + }, + { + "V": 1024, + "L": 4096, + "embed_dim": 66, + "bound_max_log2": 12.0, + "ratio": 5.5 + } + ], + "loglog_slope": 0.8804643490237325, + "R2": 0.9884958161715269, + "max_ratio": 6.890824929174289 + }, + "negative_controls": [ + { + "offsets": [ + 5, + 10 + ], + "M": 26, + "L": 100, + "full_construction_accuracy": 1.0, + "control_window_minus_1_accuracy": 0.8386333333333333, + "control_window_minus_1_lower_bound": 0.8332666666666666, + "control_window_minus_1_excess_over_bound": 0.005366666666666742, + "frac_instances_needing_max_offset": 0.16673333333333334, + "control_no_ssm_query_accuracy": 0.09431666666666666, + "control_nonselective_ssm_accuracy": 0.26576666666666665, + "control_nonselective_ssm_state_correct": 0.18866666666666668, + "chance_level": 0.03125, + "analytic_softmax_leakage_bound": 7.880859686426868e-26 + }, + { + "offsets": [ + 1, + 6 + ], + "M": 4, + "L": 16, + "full_construction_accuracy": 1.0, + "control_window_minus_1_accuracy": 0.8489333333333333, + "control_window_minus_1_lower_bound": 0.8313833333333334, + "control_window_minus_1_excess_over_bound": 0.017549999999999955, + "frac_instances_needing_max_offset": 0.16861666666666666, + "control_no_ssm_query_accuracy": 0.26435, + "control_nonselective_ssm_accuracy": 0.6937666666666666, + "control_nonselective_ssm_state_correct": 0.6011666666666666, + "chance_level": 0.1, + "analytic_softmax_leakage_bound": 4.37825538134826e-26 + } + ] +} \ No newline at end of file diff --git a/outputs/claim3_native.json b/outputs/claim3_native.json new file mode 100644 index 0000000000000000000000000000000000000000..4f080cb61f300bb5d0981b774ba5fba50de729b1 --- /dev/null +++ b/outputs/claim3_native.json @@ -0,0 +1,45 @@ +{ + "kind": "direct_native_notebook_execution", + "official_repository": "https://github.com/SprocketLab/hybrid-expressivity", + "repository_checkout": "6be8f8fbc2169290af6f4ba5e4bd53a5c6485f7b", + "repository_is_git_checkout": true, + "notebook": "source/official-code/constructions/construction_var_copy.ipynb", + "notebook_sha256": "78b23ac5677e16533425aba2036f691776ccb87b6195394a24d47f98384fb9b9", + "executed_code_cells": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ], + "device": "cpu", + "torch_version": "2.6.0", + "baseline": { + "n_batches": 256, + "examples_per_batch": 4, + "eligible_last_position_examples": 1024, + "correct_last_position_examples": 845, + "last_position_accuracy": 0.8251953125 + }, + "destructive_control": { + "ablation": "first SimpleSSM Delta vector set to zero in memory", + "eligible_last_position_examples": 1024, + "correct_last_position_examples": 56, + "last_position_accuracy": 0.0546875 + }, + "control_is_lower": true, + "scope": "Construction cells plus deterministic last-position batches; not a learned-model training rerun." +} diff --git a/outputs/claim4.json b/outputs/claim4.json new file mode 100644 index 0000000000000000000000000000000000000000..49ebb76736290a6c830f29a8ace69cab437ddd5b --- /dev/null +++ b/outputs/claim4.json @@ -0,0 +1,293 @@ +{ + "gate_shift_head_vs_softmax_attention": 0.0, + "gate_reference_target_mismatches": 0, + "exhaustive_full_window": [ + { + "n_instances": 13468, + "frac_target_defined": 0.822021484375, + "success": 1.0, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 1.0, + "max_softmax_leakage": 2.2336310578907614e-10, + "min_decode_margin": 1.9999999991065476, + "Mw": 4, + "L": 8, + "V": 6, + "ds": 2, + "embed_dim": 18, + "window": 8, + "exhaustive": true, + "n_enumerated": 16384 + }, + { + "n_instances": 56788, + "frac_target_defined": 0.86651611328125, + "success": 1.0, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 1.0, + "max_softmax_leakage": 1.6918977330249163e-10, + "min_decode_margin": 1.999999999323241, + "Mw": 4, + "L": 9, + "V": 6, + "ds": 2, + "embed_dim": 18, + "window": 9, + "exhaustive": true, + "n_enumerated": 65536 + }, + { + "n_instances": 127688, + "frac_target_defined": 0.487091064453125, + "success": 1.0, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 1.0, + "max_softmax_leakage": 2.2336310578907614e-10, + "min_decode_margin": 1.9999999991065476, + "Mw": 8, + "L": 8, + "V": 10, + "ds": 3, + "embed_dim": 22, + "window": 8, + "exhaustive": true, + "n_enumerated": 262144 + } + ], + "theorem_window": [ + { + "n_instances": 20000, + "frac_target_defined": 1.0, + "success": 0.9931, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 0.9926, + "max_softmax_leakage": 1.7788437389754108e-11, + "min_decode_margin": 1.9999999999288463, + "success_mean": 0.9934199319965998, + "success_std": 0.0004020322623794229, + "n_instances_total": 100000, + "Mw": 8, + "L": 100, + "V": 10, + "ds": 3, + "embed_dim": 25, + "bound_max_log2": 6.643856189774724, + "window_required": 39, + "window_over_Mw": 4.875, + "window_over_L": 0.39, + "analytic_success": 0.992850133023305, + "abs_gap_vs_analytic": 0.0005697989732947883, + "empirical_mean_meets_99pct": true, + "analytic_certificate_meets_99pct": true, + "seeds": 5 + }, + { + "n_instances": 20000, + "frac_target_defined": 1.0, + "success": 0.99195, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 0.9914, + "max_softmax_leakage": 1.5727419366839968e-11, + "min_decode_margin": 1.9999999999370899, + "success_mean": 0.99193, + "success_std": 0.0003203123475609443, + "n_instances_total": 100000, + "Mw": 16, + "L": 200, + "V": 18, + "ds": 4, + "embed_dim": 30, + "bound_max_log2": 7.643856189774724, + "window_required": 77, + "window_over_Mw": 4.8125, + "window_over_L": 0.385, + "analytic_success": 0.9915690899931828, + "abs_gap_vs_analytic": 0.00036091000681715, + "empirical_mean_meets_99pct": true, + "analytic_certificate_meets_99pct": true, + "seeds": 5 + }, + { + "n_instances": 20000, + "frac_target_defined": 1.0, + "success": 0.9892, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 0.98895, + "max_softmax_leakage": 1.478128730525441e-11, + "min_decode_margin": 1.9999999999408744, + "success_mean": 0.9908899999999999, + "success_std": 0.0010589617556833637, + "n_instances_total": 100000, + "Mw": 32, + "L": 400, + "V": 34, + "ds": 5, + "embed_dim": 35, + "bound_max_log2": 8.643856189774725, + "window_required": 152, + "window_over_Mw": 4.75, + "window_over_L": 0.38, + "analytic_success": 0.9908938689499518, + "abs_gap_vs_analytic": 3.868949951857381e-06, + "empirical_mean_meets_99pct": true, + "analytic_certificate_meets_99pct": true, + "seeds": 5 + }, + { + "n_instances": 20000, + "frac_target_defined": 1.0, + "success": 0.9904, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 0.99025, + "max_softmax_leakage": 1.4328316311207345e-11, + "min_decode_margin": 1.9999999999426867, + "success_mean": 0.9898197874893745, + "success_std": 0.0004907101259804869, + "n_instances_total": 100000, + "Mw": 64, + "L": 800, + "V": 66, + "ds": 6, + "embed_dim": 40, + "bound_max_log2": 9.643856189774725, + "window_required": 300, + "window_over_Mw": 4.6875, + "window_over_L": 0.375, + "analytic_success": 0.9903978217538046, + "abs_gap_vs_analytic": 0.0005780342644301495, + "empirical_mean_meets_99pct": false, + "analytic_certificate_meets_99pct": true, + "seeds": 5 + }, + { + "n_instances": 20000, + "frac_target_defined": 1.0, + "success": 0.9916, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 0.99155, + "max_softmax_leakage": 1.4106493750887239e-11, + "min_decode_margin": 1.999999999943574, + "success_mean": 0.99084, + "success_std": 0.0005304714883950082, + "n_instances_total": 100000, + "Mw": 128, + "L": 1600, + "V": 130, + "ds": 7, + "embed_dim": 45, + "bound_max_log2": 10.643856189774725, + "window_required": 596, + "window_over_Mw": 4.65625, + "window_over_L": 0.3725, + "analytic_success": 0.9902205760941751, + "abs_gap_vs_analytic": 0.0006194239058249229, + "empirical_mean_meets_99pct": true, + "analytic_certificate_meets_99pct": true, + "seeds": 5 + } + ], + "min_success_at_theorem_window": 0.9898197874893745, + "max_gap_vs_analytic": 0.0006194239058249229, + "all_meet_99pct": true, + "negative_controls": [ + { + "Mw": 16, + "L": 200, + "window_required": 77, + "full_window_success": 1.0, + "theorem_window_success": 0.991575, + "control_window_eq_Mw_success": 0.58775, + "control_window_eq_Mw_analytic": 0.5678578849390983, + "control_window_eq_Mw_gap": 0.019892115060901716, + "one_minus_1_over_e": 0.6321205588285577, + "control_blind_query_success": 0.032425, + "control_no_mamba_success": 0.1152, + "control_no_mamba_key_decoded": 0.063325, + "control_no_positional_bias_success": 0.248525, + "frac_key_repeated_in_window": 0.95075, + "control_no_bias_predicted_ceiling": 0.049250000000000016, + "chance_level": 0.0625 + }, + { + "Mw": 32, + "L": 400, + "window_required": 152, + "full_window_success": 1.0, + "theorem_window_success": 0.991075, + "control_window_eq_Mw_success": 0.6003, + "control_window_eq_Mw_analytic": 0.5889184036018332, + "control_window_eq_Mw_gap": 0.011381596398166716, + "one_minus_1_over_e": 0.6321205588285577, + "control_blind_query_success": 0.01555, + "control_no_mamba_success": 0.05795, + "control_no_mamba_key_decoded": 0.03065, + "control_no_positional_bias_success": 0.194175, + "frac_key_repeated_in_window": 0.947875, + "control_no_bias_predicted_ceiling": 0.05212499999999998, + "chance_level": 0.03125 + } + ], + "window_sweep_Mw32_L400": [ + { + "window": 8, + "success": 0.12866666666666668, + "analytic": 0.1192617416381836, + "abs_gap": 0.009404925028483085 + }, + { + "window": 16, + "success": 0.32953333333333334, + "analytic": 0.31681143890437935, + "abs_gap": 0.012721894428953995 + }, + { + "window": 32, + "success": 0.6007333333333333, + "analytic": 0.5889184036018332, + "abs_gap": 0.011814929731500112 + }, + { + "window": 64, + "success": 0.8548666666666667, + "analytic": 0.8511657337081133, + "abs_gap": 0.003700932958553338 + }, + { + "window": 96, + "success": 0.9476333333333333, + "analytic": 0.9461137666664393, + "abs_gap": 0.0015195666668940122 + }, + { + "window": 128, + "success": 0.9806, + "analytic": 0.9804902042034843, + "abs_gap": 0.00010979579651571036 + }, + { + "window": 154, + "success": 0.9916, + "analytic": 0.9914541094344762, + "abs_gap": 0.00014589056552383184 + }, + { + "window": 200, + "success": 0.9979666666666667, + "analytic": 0.9980162075146308, + "abs_gap": 4.954084796415792e-05 + }, + { + "window": 300, + "success": 0.9999333333333333, + "analytic": 0.9999170783772994, + "abs_gap": 1.6254956033967538e-05 + }, + { + "window": 400, + "success": 1.0, + "analytic": 0.9999964221046956, + "abs_gap": 3.5778953043630324e-06 + } + ], + "window_sweep_max_gap": 0.012721894428953995 +} \ No newline at end of file diff --git a/outputs/claim4_native.json b/outputs/claim4_native.json new file mode 100644 index 0000000000000000000000000000000000000000..dc201ad8a2356d1053e504d9c0672d110b13ac22 --- /dev/null +++ b/outputs/claim4_native.json @@ -0,0 +1,53 @@ +{ + "kind": "direct_native_notebook_execution", + "official_repository": "https://github.com/SprocketLab/hybrid-expressivity", + "repository_checkout": "6be8f8fbc2169290af6f4ba5e4bd53a5c6485f7b", + "repository_is_git_checkout": true, + "notebook": "source/official-code/constructions/construction_decode_recall.ipynb", + "notebook_sha256": "a6fa59b59c813a5349e8ff8995ba1e9bc8016586e25b1d961f3f5c30b94fa641", + "executed_code_cells": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 26, + 27 + ], + "device": "cpu", + "torch_version": "2.6.0", + "baseline": { + "n_batches": 256, + "examples_per_batch": 4, + "eligible_last_position_examples": 952, + "correct_last_position_examples": 883, + "last_position_accuracy": 0.9275210084033614 + }, + "destructive_control": { + "ablation": "first SimpleSSM Delta vector set to zero in memory", + "eligible_last_position_examples": 952, + "correct_last_position_examples": 25, + "last_position_accuracy": 0.026260504201680673 + }, + "control_is_lower": true, + "scope": "Construction cells plus deterministic last-position batches; not a learned-model training rerun." +} diff --git a/outputs/claim5.json b/outputs/claim5.json new file mode 100644 index 0000000000000000000000000000000000000000..7de3aa22a2ab53ac829b29fccf78ff108ec9cf88 --- /dev/null +++ b/outputs/claim5.json @@ -0,0 +1,55 @@ +{ + "kind": "exact_authored_source_audit", + "source": "source/authored/sections/experiments.tex", + "source_sha256": "fcd88332cbe90aff62337c3add333f71fc542736b3e459015a28f0b08ae3c55b", + "table_heading_line": 26, + "caption_line": 42, + "table_rows": [ + { + "parameters_approx": 1000.0, + "pure_tf": 0.056, + "pure_ssm": 0.084, + "tf_to_ssm": 0.1, + "ssm_to_tf": 0.087 + }, + { + "parameters_approx": 2000.0, + "pure_tf": 0.352, + "pure_ssm": 0.305, + "tf_to_ssm": 0.433, + "ssm_to_tf": 0.999 + }, + { + "parameters_approx": 6000.0, + "pure_tf": 0.727, + "pure_ssm": 0.485, + "tf_to_ssm": 0.822, + "ssm_to_tf": 1.0 + }, + { + "parameters_approx": 12000.0, + "pure_tf": 0.923, + "pure_ssm": 0.931, + "tf_to_ssm": 0.908, + "ssm_to_tf": 1.0 + } + ], + "literal_table_comparison": { + "hybrid_ssm_to_tf_at_approximately_2000": 0.999, + "pure_tf_at_approximately_12000": 0.923, + "pure_ssm_at_approximately_12000": 0.931, + "parameter_ratio_12000_over_2000": 6.0, + "strict_table_value_is_exactly_one": false + }, + "source_caption_says_perfect": true, + "source_results_says_roughly_six_times": true, + "assessment": "The authored table supports the approximate 6x/near-perfect comparison (.999 versus .923/.931), but its printed .999 is not literally 1.000 while the caption calls it perfect. This is source evidence, not an independent learned-model reproduction.", + "training_route": { + "official_train_file": "source/official-code/micro_hf/train_utils.py", + "official_train_file_sha256": "ec4ccc0fa03f636f141904484f54763576e741c6f3586b1405343bb844c7c040", + "hard_coded_cuda_calls": 1, + "torch_cuda_available_on_this_host": false, + "result_artifacts_present": false, + "reason_no_local_training_rerun": "The official micro_hf entry point hard-codes CUDA tensors; this host has no CUDA device. The checkout contains figures and lrs.json metadata but no per-run evaluation JSON/CSV/checkpoint results." + } +} diff --git a/outputs/claim6.json b/outputs/claim6.json new file mode 100644 index 0000000000000000000000000000000000000000..68daa0da94fe18efa3c11d3212dc15682779c314 --- /dev/null +++ b/outputs/claim6.json @@ -0,0 +1,58 @@ +{ + "kind": "exact_authored_source_audit", + "source": "source/authored/sections/experiments.tex", + "source_sha256": "fcd88332cbe90aff62337c3add333f71fc542736b3e459015a28f0b08ae3c55b", + "mkar_table_heading_line": 63, + "mkar_caption_line": 80, + "single_key_figure_result_line": 60, + "mkar_table_rows": [ + { + "parameters_approx": 1000.0, + "pure_tf": 0.124, + "pure_ssm": 0.158, + "tf_to_ssm": 0.131, + "ssm_to_tf": 0.144 + }, + { + "parameters_approx": 2000.0, + "pure_tf": 0.159, + "pure_ssm": 0.173, + "tf_to_ssm": 0.183, + "ssm_to_tf": 0.512 + }, + { + "parameters_approx": 6000.0, + "pure_tf": 0.23, + "pure_ssm": 0.356, + "tf_to_ssm": 0.286, + "ssm_to_tf": 0.99 + }, + { + "parameters_approx": 12000.0, + "pure_tf": 0.668, + "pure_ssm": 0.517, + "tf_to_ssm": 0.524, + "ssm_to_tf": 0.989 + } + ], + "literal_table_checks": { + "hybrid_ssm_to_tf_at_approximately_2000": 0.512, + "hybrid_ssm_to_tf_at_approximately_6000": 0.99, + "pure_tf_at_approximately_12000": 0.668, + "sixfold_parameter_ratio_from_2000_to_12000": 6.0, + "hybrid_reaches_0_60_at_approximately_2000": false, + "hybrid_reaches_0_60_at_approximately_6000": true, + "ratio_for_6000_vs_12000": 2.0 + }, + "source_caption_claims_60pct_and_six_times": true, + "single_key_statement_is_a_different_task": true, + "assessment": "The authored MKAR table is internally insufficient for the literal 60%-at-6x conjunction: at the 6x row it reports .512 (<.60), while at .990 the nearest shown pure-TF row is only 2x larger. The caption asserts the headline, but raw points needed to locate an unshown 60% crossing were not released. The <=40% statement is explicitly about associative recall with decoding (Figure 5), not MKAR (Figure 6).", + "training_route": { + "official_train_file": "source/official-code/micro_hf/train_utils.py", + "official_train_file_sha256": "ec4ccc0fa03f636f141904484f54763576e741c6f3586b1405343bb844c7c040", + "hard_coded_cuda_calls": 1, + "torch_cuda_available_on_this_host": false, + "result_artifacts_present": false, + "reason_no_local_training_rerun": "The official micro_hf entry point hard-codes CUDA tensors; this host has no CUDA device. The checkout contains figures and lrs.json metadata but no per-run evaluation JSON/CSV/checkpoint results." + } +} diff --git a/pages/claim-1-theorem-3-3-literal-bound/page.md b/pages/claim-1-theorem-3-3-literal-bound/page.md new file mode 100644 index 0000000000000000000000000000000000000000..9caf610182f80aacd71c65eba240c293f429b8e4 --- /dev/null +++ b/pages/claim-1-theorem-3-3-literal-bound/page.md @@ -0,0 +1,16 @@ +# Theorem 3.3 proves that any k-layer state-space model solving the function-composition tasks under injectivity conditions must have total log state-space size scaling as Ω(m·log|V| − q·log|Y|), linear in the hidden dimension m (Theorem 3.3). + +**Assessment: falsified as a literal positive linear lower-bound claim.** + +Assumption 3.2 makes G: V^m → Y^q injective, so cardinality gives m·log₂|V| ≤ q·log₂|Y|. The printed right-hand side m·log|V| − q·log|Y| is therefore never positive under its own assumption. The appendix instead derives a different Fano bound under error < 1/8; that is not the printed probability-1/2 theorem. + +## Evidence + +- Exact authored statement: source/authored/sections/func_comp_and_construct.tex:26–28. +- 1,296 admissible cardinality configurations: maximum printed RHS = 0.0. +- Exhaustive binary selective-copy partitions: one state attains exactly 1/2 success for m=2 and m=3, matching the theorem's printed threshold. +- The appendix source records its stronger, different prerequisite as err < 1/8 (source/authored/appendix/missing_proof_lb.tex). + +## Scope and limitations + +This is a literal-statement audit, not a claim that no corrected lower bound can be proved. The exact selective-copy enumeration is finite; the cardinality implication itself is general. diff --git a/pages/claim-2-theorem-3-7-window-bound/page.md b/pages/claim-2-theorem-3-7-window-bound/page.md new file mode 100644 index 0000000000000000000000000000000000000000..2650293f26536fd7f94f17366a39c5f349568c30 --- /dev/null +++ b/pages/claim-2-theorem-3-7-window-bound/page.md @@ -0,0 +1,16 @@ +# Theorem 3.7 proves that sliding-window Transformers solving the same tasks under a local-sensitivity condition require total window size scaling with the context-dependency range R (Theorem 3.7). + +**Assessment: supported by explicit paper-task witnesses and exact receptive-field checks.** + +For the selective-copy witnesses, changing only a token outside the causal receptive field leaves the terminal logits bit-identical. On the two-point witness distribution this forces accuracy 1/2, below 2/3. A full-window control separates the same pair. + +## Evidence + +- 960 real float64 causal-attention stacks; outside-RF violations = 0. +- Maximum terminal-logit change outside RF = 0.0 for the hard witnesses. +- Full-window control separates 100% of tested witness configurations. +- The source proof explicitly identifies the terminal dependency as the last sum_i W_i tokens (appendix/missing_proof_lb.tex). + +## Scope and limitations + +Finite numerical checks cannot prove the universal theorem. They directly exercise its stated quantities (window, R, indistinguishability and success threshold) on the paper's selective-copy task rather than a proxy. diff --git a/pages/claim-3-theorem-4-3-selective-copy/page.md b/pages/claim-3-theorem-4-3-selective-copy/page.md new file mode 100644 index 0000000000000000000000000000000000000000..0a19c44a0d1168786f6236ee9089c81f0afe6ca6 --- /dev/null +++ b/pages/claim-3-theorem-4-3-selective-copy/page.md @@ -0,0 +1,16 @@ +# Theorem 4.3 constructs a two-layer hybrid (Mamba + attention) model that solves the selective copying task using embedding dimension O(max(log|V|, log L)) and working memory Õ(N), versus Ω(L) required by pure Transformers (Theorem 4.3). + +**Assessment: supported for the literal construction; official notebook does not establish its universal scope.** + +A direct transcription of Appendix D.2/D.5 achieves exact final-position selective copying across exhaustive and large deterministic sweeps, with a window-minus-one and no-SSM destructive controls. The separately executed author notebook is included unchanged as provenance and scores only .825 on the notebook generator's 1,024 final-position examples, so it is not used as evidence of the theorem's 'every input' quantifier. + +## Evidence + +- Independent construction: 1,506,370 valid inputs; minimum accuracy = 1.000000. +- Includes L=100, |V|=32 and longer L=1,024/4,096 sweeps; these are labelled construction checks, not learned-model runs. +- Native notebook baseline/control: 0.825195 / 0.054688 on 1024 eligible examples. +- The destructive construction controls remove one attention position, zero the query, or disable selective state update. + +## Scope and limitations + +The independent checker is a faithful finite implementation of the written construction, not a mechanized proof. The native notebook's aggregate failure is retained rather than overwritten or relabelled as a success. diff --git a/pages/claim-4-theorem-4-6-associative-recall/page.md b/pages/claim-4-theorem-4-6-associative-recall/page.md new file mode 100644 index 0000000000000000000000000000000000000000..0547e12c9f8ac0578a98371e9476331aa2ca8122 --- /dev/null +++ b/pages/claim-4-theorem-4-6-associative-recall/page.md @@ -0,0 +1,16 @@ +# Theorem 4.6 constructs a three-layer hybrid model that achieves 99% accuracy on the associative recall task using embedding dimension O(max(log|V|, log L)) and window size Õ(|V|) (Theorem 4.6). + +**Assessment: supported by a full-vocabulary construction and exact coverage certificate; native notebook is only a limited check.** + +The Appendix D.4 construction was implemented with the stated full-vocabulary binary code, last-match positional bias, and a finite softmax separation. Its exact iid coverage formula is at least .99 for each measured scale; the 5×20,000-instance point estimates track that certificate (one mean, .989820, is below .99 and is not relabelled as an empirical pass). The implementation also exhausts three small full-window domains. + +## Evidence + +- All analytic coverage certificates meet 99%: True. +- Minimum five-seed empirical mean = 0.989820; maximum gap from exact coverage = 0.000619. +- Exhaustive full-window domains (|M|, L)=(4,8),(4,9),(8,8) all score 1.0. +- Native authored notebook baseline/control: 0.927521 / 0.026261; it has no windowed 99%-coverage test. + +## Scope and limitations + +The native notebook is a direct one-construction execution, not the paper's probabilistic window experiment. The 99% support comes from the written construction plus an exact iid coverage calculation and finite tests; it is not a claimed learned-model training rerun. diff --git a/pages/claim-5-figure-4-selective-copy-learning/page.md b/pages/claim-5-figure-4-selective-copy-learning/page.md new file mode 100644 index 0000000000000000000000000000000000000000..1ead8341711eebe6463c1ae10dac14063298890d --- /dev/null +++ b/pages/claim-5-figure-4-selective-copy-learning/page.md @@ -0,0 +1,15 @@ +# On the selective copying task, the learned hybrid model reaches perfect accuracy with roughly 2,000 parameters while pure Transformer/SSM models need roughly 12,000 parameters to match it, a 6x parameter gap (Figure 4). + +**Assessment: authored-source supported, but not independently reproduced.** + +The exact authored Figure 4 table gives SSM→TF .999 at approximately 2,000 parameters and pure TF/SSM .923/.931 at approximately 12,000 parameters, a sixfold nominal parameter ratio. The caption calls .999 'perfect', so the strict word perfect and printed value are internally inconsistent at the shown precision. + +## Evidence + +- Pinned source table: hybrid@2k=0.999; pure TF/SSM@12k=0.923/0.931. +- The TeX table, caption, and source-file SHA are in outputs/claim5.json. +- The official micro_hf training path contains hard-coded CUDA transfers and this machine has no CUDA device; no local run is presented as a reproduction. + +## Scope and limitations + +The repository did not contain per-run scalar results, checkpoints, or an author-pinned code commit in the arXiv archive. This page reports the paper's own exact table, not an independent empirical confirmation. diff --git a/pages/claim-6-figures-5-6-associative-recall-learning/page.md b/pages/claim-6-figures-5-6-associative-recall-learning/page.md new file mode 100644 index 0000000000000000000000000000000000000000..dc791c82ce4eb2efe223b45826f3af6567d73529 --- /dev/null +++ b/pages/claim-6-figures-5-6-associative-recall-learning/page.md @@ -0,0 +1,15 @@ +# On multi-key associative recall, the hybrid model reaches 60% accuracy using 6x fewer parameters than pure Transformers, which plateau near 40% accuracy on single-key associative recall (Figures 5-6). + +**Assessment: not independently established; the authored MKAR table conflicts with the literal numeric conjunction.** + +The Figure 6 table's sixfold row is approximately 2,000 versus 12,000 parameters, where SSM→TF is .512—not 60%. At the first shown hybrid result above 60% (.990 at approximately 6,000), the nearest shown pure-TF row is approximately 12,000, only 2× larger. The caption asserts 60%-at-6×, but the raw points needed to locate a different crossing were not released. + +## Evidence + +- Pinned MKAR values: hybrid@2k=0.512, hybrid@6k=0.990, pure TF@12k=0.668. +- The <=40% sentence is from Figure 5's associative recall with decoding, a different task from Figure 6's MKAR; it is not treated as an MKAR plateau measurement. +- The exact TeX/table SHA and CUDA-only non-rerun route are recorded in outputs/claim6.json. + +## Scope and limitations + +This is an authored-source/data audit. It does not infer a curve between unreleased points or substitute the Figure 5 task for MKAR. A GPU rerun would require compatible CUDA hardware and a declared protocol; neither is claimed here. diff --git a/pages/executive-summary/page.md b/pages/executive-summary/page.md new file mode 100644 index 0000000000000000000000000000000000000000..bc67989e458cf19b2fc9b816b441c37f7b762471 --- /dev/null +++ b/pages/executive-summary/page.md @@ -0,0 +1,14 @@ +# Executive summary + +This is a six-claim audit of arXiv:2603.08859v1 / OpenReview `82EJxJzG6r`. Claim text is frozen in `CLAIMS.json`; evidence does not rewrite scope. + +| claim | subject | assessment | headline | +| --- | --- | --- | --- | +| 1 | Theorem 3.3 literal lower bound | falsified | printed RHS non-positive under injectivity | +| 2 | Theorem 3.7 window lower bound | supported | paper-task witnesses and real attention stacks | +| 3 | Theorem 4.3 selective copy | supported | independent construction; native notebook limitation retained | +| 4 | Theorem 4.6 associative recall | supported | full-vocabulary construction and exact coverage | +| 5 | Figure 4 learned selective copy | source-supported | reported table only; .999/perfect rounding conflict | +| 6 | Figures 5–6 learned recall | not established | MKAR table conflicts with 60%-at-6x conjunction | + +The package distinguishes (1) native author-notebook execution, (2) an independent implementation of the written constructions, and (3) exact authored-table evidence. GPU-only learned-model training was not rerun on this non-CUDA host. diff --git a/pages/index.md b/pages/index.md new file mode 100644 index 0000000000000000000000000000000000000000..c60879c71f7685d80e3226aba1f184d1ed0efc80 --- /dev/null +++ b/pages/index.md @@ -0,0 +1,5 @@ +# Reproduction audit: Expressivity-Efficiency Tradeoffs for Hybrid Sequence Models + +Paper: arXiv:2603.08859v1 · OpenReview `82EJxJzG6r` + +Six registered claims are preserved verbatim in `CLAIMS.json`. Run `python3 run_all.py` for paired deterministic replays, page generation, validation, and a recursive manifest. diff --git a/paper_text.txt b/paper_text.txt new file mode 100644 index 0000000000000000000000000000000000000000..eba6fb963580654fefe0970af04dfa638c1aba2d --- /dev/null +++ b/paper_text.txt @@ -0,0 +1,1469 @@ + + +Expressivity-Efficiency Tradeoffs for Hybrid Sequence Models + + Report GitHub Issue + × + + Title: + + Content selection saved. Describe the issue below: + + Description: + + Submit without GitHub + Submit in GitHub + + arXiv is now an independent nonprofit! + Learn more + × + + Back to arXiv + + Why HTML? + + Report Issue + + Back to Abstract + + Download PDF + +Abstract + +1 Introduction + +2 Preliminaries and Notations + +3 Function Compositions and Limitations of Pure Models + +3.1 Limitations of SSMs + +3.2 Limitations of Transformers + +4 Hybrid Model for Function Composition + +5 Experiments + +5.1 Construction Implementations + +5.2 Learnability Experiments + +5.3 Further Experiments + +6 Conclusion + +References + +A Related Works + +B Complete Preliminaries and Notations + +C Omitted Proofs in Section 3 + +C.1 Proof of Lemma 3.5 + +C.2 Proof of Theorem 3.3 + +C.3 Proof of Theorem 3.7 + +D Omitted Proofs in Section 4 + +D.1 Proof of Theorem 4.2 + +D.2 Proof of Theorem 4.3 + +D.3 Proof of Theorem 4.5 + +D.4 Proof of Theorem 4.6 + +D.5 Construction Implementations + +E Experiment Details + +E.1 Expressivity Experiments + +E.2 Additional Experiments + + License: CC BY 4.0 + +arXiv:2603.08859v1 [cs.LG] 09 Mar 2026 + +Expressivity-Efficiency Tradeoffs for Hybrid Sequence Models + +John Cooper + +Ilias Diakonikolas + +Department of Computer Sciences, University of Wisconsin-Madison + +Mingchen Ma + +Frederic Sala + +Department of Computer Sciences, University of Wisconsin-Madison + +Abstract +Hybrid sequence models—combining Transformer and state-space model layers—seek to gain the expressive versatility of attention as well as the computational efficiency of state-space model layers. Despite burgeoning interest in hybrid models, we lack a basic understanding of the settings where—and underlying mechanisms through which—they offer benefits over their constituent models. In this paper, we study this question, focusing on a broad family of core synthetic tasks. For this family of tasks, we prove the existence of fundamental limitations for non-hybrid models. Specifically, any Transformer or state-space model that solves the underlying task requires either a large number of parameters or a large working memory. On the other hand, for two prototypical tasks within this family—namely selective copying and associative recall—we construct hybrid models of small size and working memory that provably solve these tasks, thus achieving the best of both worlds. Our experimental evaluation empirically validates our theoretical findings. Importantly, going beyond the settings in our theoretical analysis, we empirically show that learned—rather than constructed—hybrids outperform non-hybrid models with up to $6\times$ as many parameters. We additionally demonstrate that hybrid models exhibit stronger length generalization and out-of-distribution robustness than non-hybrids. 111Code is available in this link. * denotes equal contribution. + +1 Introduction + +Transformers are the workhorse architecture for modern language models. While highly expressive and capable, Transformer-based models suffer from high complexity, particularly for inference time processing of long sequence inputs. As a result, developing alternative non-Transformer architectures has become among the most important problems in LLM development. Structured state space models (SSMs) like Mamba Gu and Dao (2024) are among the most promising such alternatives. Such models trade off complexity for expressivity Jelassi et al. (2024), achieving higher throughput—but typically lower performance—compared to Transformer-based models. + +A natural question is whether we can sidestep this tradeoff and produce a model architecture that offers the best of both worlds. Hybrid sequence models seek to achieve this objective. These models, which mix layers from Transformer architectures (e.g., attention layers) with SSM layers, ideally outperform either Transformer-only or SSM-only models. In a short time, hybrids that can empirically do so on particular tasks have been scaled up from tiny sizes to as large as 50 billion parameters. For example, Nvidia’s Nemotron-H hybrid model family Blakeman et al. (2025) offers both better downstream evaluation performance and higher throughput (due to the presence of lower-complexity Mamba layers) than Transformer-only baselines. + +Despite these empirical successes, we have no principled understanding of why hybrid models can outperform models made up of a single type of layer. Similarly, we do not yet know for what basic tasks we should expect hybrids to behave in this way. This paper takes the first steps towards providing a fundamental theory addressing architectural tradeoffs for hybrid models. It does so by first showing that on a family of core tasks where pure (i.e., standard Transformer-only and SSM-only) models provably suffer from limitations (in terms complexity and memory). In contrast, we build constructions of hybrid models that do not have the same limitations on representative tasks—including key tasks like associative recall and selective copying—thus exhibiting provable benefits for hybrids. + +Concretely, we evaluate the performance of a model by analyzing its input-independent memory (model size) and input-dependent memory (working memory). We focus on a function-composition family of tasks (Fig. 1) that combine both a long-context control variable and a local context-addressable lookup; such tasks naturally model real-world data. For these, (i) under an injectivity condition, we prove +that, for this family, any pure SSM requires large internal state (or many layers); as a result, their size scales linearly with respect to the hidden dimension of the problem to solve the problem. +Likewise, (ii), under a local-sensitivity condition, any sliding-window Transformer (which includes full-window attention) requires a large window scaling linearly with respect to the length of the input context. Together, this pair of results indicates that for a broad class of tasks, pure SSM-based models and pure Transformer-based models fail to achieve good expressivity and inference efficiency simultaneously. +We study two representative synthetic tasks in this family, namely selective copying and a variant of associative recall Arora et al. (2023). +For these tasks, we construct provably successful shallow hybrid models whose size scales with the logarithm of the size of the tasks while using only sublinear memory. + +Empirically, we validate our theoretical results and investigate hybrid versus non-hybrid performance in further settings and on additional tasks, such multi-key associative recall (MKAR) and needle-in-a-haystack (NH). We find that for selective copying and MKAR, hybrids can perform the task with similar or better quality than the pure models with 6 times fewer parameters. For associative recall with decoding, at the tested scales, the pure models never match the performance possible with the hybrid model. +On top of measuring performance at fixed model sizes, we observe that hybrid models exhibit stronger length generalization and out-of-distribution (OOD) robustness. We see that when trained on the same distribution of short examples, hybrids consistently out-perform pure Transformers by around 10% accuracy for long sequences. +For out-of-distribution testing, the hybrid model sometimes attains over 15% higher performance than either the Transformer or the SSM with around the same number of parameters. + +Roadmap of the paper. +In Section 2, we provide necessary preliminaries and notations. In Section 3, we introduce a family of tasks formulated as computing a function composition and provide conditions under which non-hybrid models fail to solve the tasks efficiently. Next, in Section 4, we focus on two specific tasks (of varying difficulty) that are within this family and construct hybrid models that outperform non-hybrids. In Section 5, we conduct experiments to show the benefits of hybrid models empirically. + +Figure 1: Example function composition task. The answer to a learned question only depends on a part of the long context input. + +2 Preliminaries and Notations + +We provide necessary preliminaries and notation. A complete list of preliminaries is deferred to Appendix B. + +We consider sequence-to-sequence token prediction problems. Let $\mathcal{V}$ be some vocabulary of tokens, $V=|\mathcal{V}|$ , and $\vec{\mathbf{x}}=(\mathbf{x}_{i})_{i=1}^{L}$ be an input sequence. A language model $M$ a is sequence-to-sequence map $M:\mathcal{V}^{L}\to\mathcal{V}^{m}$ of the form $M(\vec{\mathbf{x}})=F_{N}\circ F_{N-1}\circ\dots\circ F_{1}(\vec{\mathbf{x}})$ , where $\circ$ is function composition and each $F_{i}$ is a sequence-to-sequence map called a layer. +We will consider types of layers. + +Transformer Layer. +Consider an embedded input sequence $\vec{\mathbf{x}}=(\mathbf{x}_{1},\dots,\mathbf{x}_{L})$ such that $\mathbf{x}_{i}\in\mathbb{R}^{d}$ . An attention head $\mathrm{Attn}$ is defined by matrices $\mathbf{W}_{k},\mathbf{W}_{q},\mathbf{W}_{v}\in\mathbb{R}^{d\times d}$ such that $\mathrm{Attn}(\vec{\mathbf{x}})_{j}=\sum_{i=1}^{n}\alpha_{ji}\mathbf{W}_{v}\mathbf{x}_{i}$ , where + + $\displaystyle\alpha_{ji}:=\frac{\exp\left((\mathbf{W}_{q}\mathbf{x}_{j})\cdot(\mathbf{W}_{k}\mathbf{x}_{i})\right)}{\sum_{i=1}^{n}\exp\left((\mathbf{W}_{q}\mathbf{x}_{j})\cdot(\mathbf{W}_{k}\mathbf{x}_{i})\right)}.$ + +An attention layer $\mathrm{AT}$ is defined by $H$ attention heads $\mathrm{Attn}_{1},\dots,\mathrm{Attn}_{H}$ and a projection matrix $\mathbf{W}_{o}\in\mathbb{R}^{d\times dH}$ . Denote by $\mathbf{O}:=(\mathrm{Attn}_{1}(\vec{\mathbf{x}})^{\top},\dots,\mathrm{Attn}_{H}(\vec{\mathbf{x}})^{\top})^{\top}\in\mathbb{R}^{dH\times L}$ the concatenation of the outputs of the $H$ attention heads, so the attention layer $\mathrm{AT}(\vec{\mathbf{x}})$ outputs $\mathbf{W}_{o}\mathbf{O}\in\mathbb{R}^{d\times L}$ . + +A Transformer layer $\mathrm{TF}$ is defined by an attention layer $\mathrm{AT}$ and an MLP layer. In particular, an MLP layer is defined as $f(\mathbf{x}):\mathbb{R}^{d}\to\mathbb{R}^{d}$ as $f(\mathbf{x})=\mathbf{U}_{2}\sigma(\mathbf{U}_{1}\mathbf{x})$ , where $\mathbf{U}_{1},\mathbf{U}_{2}$ are matrices and $\sigma$ is an activation function applied coordinate-wise. Specifically, $\mathrm{TF}(\vec{\mathbf{x}})=\mathrm{MLP}(\mathrm{AT}(\vec{\mathbf{x}}))$ . + +State-Space Model Layer. +We use a similar formalism of a SSM layer as in Jelassi et al. (2024). +A state space $\mathcal{S}$ is a finite set. We denote by $\mathrm{mem}(\mathcal{S})$ the number of bits required to encode the states of $\mathcal{S}$ , namely $\mathrm{mem}(\mathcal{S})=\log(|\mathcal{S}|)$ . A generalized state space model (GSSM) is a layer defined by an update rule $u:\mathcal{S}\times\mathcal{V}\rightarrow\mathcal{S}$ and an output function $r:\mathcal{S}\rightarrow\mathcal{V}$ . Let $s_{0}\in\mathcal{S}$ be some initial state. Given some sequence $\mathbf{x}_{1},\ldots,\mathbf{x}_{L}$ , the state of the model at iteration $i$ is denoted by $s_{i}=S_{i}(\mathbf{x}_{1},\ldots,\mathbf{x}_{i})$ and the output token is denoted by $r_{i}=R_{i}(\mathbf{x}_{1},\ldots,\mathbf{x}_{i})$ . The state and output are defined recursively: + +1. + + $S_{0}(\emptyset)=s_{0}$ , + +2. + + $S_{i}(\mathbf{x}_{1},\ldots,\mathbf{x}_{i})=u(S_{i-1}(\mathbf{x}_{1},\ldots,\mathbf{x}_{i-1}),\mathbf{x}_{i})$ , + +3. + + $R_{i}(\mathbf{x}_{1},\ldots,\mathbf{x}_{i})=r(S_{i}(\mathbf{x}_{1},\ldots,\mathbf{x}_{i}))$ . + +Memory Budget. In this work, we will compare the behavior of different models according to their memory budget. In particular, we will consider two types of budgets: input-dependent memory and input-independent memory. Input-dependent memory, also called working memory, is the size of the intermediate state of the model, applicable to SSMs. Input-independent memory is used to characterize the number of parameters in the model. + +3 Function Compositions and Limitations of Pure Models + +In this work, we define the following family of tasks that we term function-composition tasks, which expose the limitations of pure models. + +Definition 3.1 (Function Composition). + +Let $\mathcal{V}$ be a vocabulary of tokens. Let $m,n\in\mathbb{Z}^{+}$ . Consider a function $F(u,v):\mathcal{V}^{m}\times\mathcal{V}^{n}\to\mathcal{Y}$ . Let $u(\vec{\mathbf{x}}):\mathcal{V}^{L}\to\mathcal{V}^{m}$ and $v(\vec{\mathbf{x}}):\mathcal{V}^{L}\to\mathcal{V}^{n}$ be two functions that map a long sequence of tokens to parameters needed for computing $F$ . +The goal for model $M$ is to compute $M(\vec{\mathbf{x}})=F(u(\vec{\mathbf{x}}),v(\vec{\mathbf{x}}))$ . + +Computing deep sequential function compositions has been used as a technique for understanding the limitations of Transformer-based models empirically or through communication complexity Chen et al. (2024); Dziri et al. (2023). Though the family of tasks we consider here shares a similar flavor to prior works, we need only consider a function of composition with depth 1. Intuitively, it is convenient to think about $u(\vec{\mathbf{x}})$ as a subsequence of $\vec{\mathbf{x}}$ that contains essential information that one should look at (of length $m$ for $m\ll L$ but moderately long, i.e., the width of the necessary context), while $v(\vec{\mathbf{x}})$ can be thought as a small parameter that controls the result of $F(u,v)$ . + +Many long context tasks naturally fall into such function composition categories. For example, in a natural question answering task, the input context is usually very long, but the question (which must be learned from the context) only sparsely depends on part of the context. Transformers often struggle retrieving the information without consuming almost the whole sequence into memory, while after retrieving information, a pure SSM requires an extremely large state space to perform the rest of the computation. +We start by showing that for a broad class of very simple $u,v$ , pure Transformers and pure state space models cannot compute $F(u,v)$ without sufficient scale. + +3.1 Limitations of SSMs + +To make the above intuition formal, +we first provide conditions under which $F$ is hard to compute by an SSM. + +Assumption 3.2. + +Consider any function $F$ that satisfies Definition 3.1. We say the function $F$ is hard to compute by an SSM if it satisfies the following property: There exists a set $Q=\{v^{(i)}\}_{i=1}^{q}\subseteq\mathcal{V}^{n}$ such that $G(u):=(F(u,v^{(1)}),\dots,F(u,v^{(q)}))$ is an injection. + +Our first result shows that if $F$ satisfies 3.2, then a $k$ -layer SSM either requires $k$ to be $\Omega(m)$ or needs to have one layer with number of states exponential in $m$ . That is, to compute $F$ , the size of an SSM must grow linearly with respect to the hidden parameter $m$ . Formally, + +Theorem 3.3. + +Let $F$ be a function defined as in Definition 3.1 that satisfies 3.2. There is a distribution $D$ over the input $(u,v)$ such that any model $M$ that is a composition of $k$ state space layers $\mathrm{SSM}_{i}$ , with state space $\mathcal{S}_{i},i\in[k]$ that can compute $F$ with probability $1/2$ must satisfy $\sum_{i=1}^{k}\log(|\mathcal{S}_{i}|)\geq\Omega(m\log(|\mathcal{V}|)-q\log(|\mathcal{Y}|))$ . + +Remark 3.4. + +The distribution $D$ considered in Theorem 3.3 is defined over $(u,v)$ instead of the actual distribution over the input context $\vec{\mathbf{x}}$ . For concrete tasks that satisfy 3.2, we construct distributions over $\vec{\mathbf{x}}$ to simulate $D$ . + +To prove Theorem 3.3, we first prove a structural result for a pure multi-layer SSM. Roughly speaking, if a model is a sequence of multiple layers of state space models, then we can view them as single-layer SSMs. We defer the proof of Lemma 3.5 to Section C.1. + +Lemma 3.5. + +Consider a $k$ -layer model $M$ defined that is a composition of $k$ state space layers $\mathrm{SSM}_{j},j\in[k]$ . There is a model $\mathrm{SSM}^{\prime}$ that only consists of a single layer SSM, which behaves the same as $M$ . In particular, denote the state space of $\mathrm{SSM}_{j}$ as $\mathcal{S}_{j}$ , $j\in[k]$ , and denote by the state space of $\mathrm{SSM}^{\prime}$ as $\mathcal{S}^{\prime}$ , then $|\mathcal{S}^{\prime}|\leq\prod_{j=1}^{k}|\mathcal{S}_{j}|$ . + +Given Lemma 3.5 and Yao’s min-max principle, we only need to consider deterministic single-layer SSMs. The main technical difficulty of the proof is that, unlike in Jelassi et al. (2024); Zhan et al. (2025), which prove hardness against specific tasks, we have little knowledge of the structure of $F$ and cannot compute the probability of failure directly. +We use information theoretic arguments: +at a high level, for a fixed sample prefix and $m$ different random control parameters $v$ , there need to be $\Omega(m\log|\mathcal{V}|)$ bits to store all of the necessary information from the prefix to use $v$ correctly. +The full proof of Theorem 3.3 is in Section C.2. + +3.2 Limitations of Transformers + +Next we study the limitations of using a Transformer to solve this problem under a memory constraint. We consider sliding window attention, a dominant design choice for large context models. The size of the sliding window characterizes the working memory of a Transformer based model. Our hardness result is developed in 3.6 and Theorem 3.7. Roughly speaking, when the underlying function $F$ is locally sensitive, which implies predicting a token at a position requires information very far from the current position, any pure Transformer model must either be very deep or have one layer that is very dense. We remark that 3.6 is very natural. In the context of function composition, $F(u,v)$ , though the length of the essential context $u,v$ may be small, the control parameter $v$ might be sensitive and depend on a long range of the input context, making using a standard Transformer costly. For example, if $v(\vec{x})$ is the last token in the sequence that satisfies some property, then any Transformer must maintain a very long window size in order to compute the control parameter. +The proof of Theorem 3.7 is in Section C.3. + +Assumption 3.6. + +Let $F$ be a function that satisfies Definition 3.1. We say the function $F(u(\vec{\mathbf{x}}),v(\vec{\mathbf{x}}))$ is hard to compute by a Transformer if it is $R$ -local sensitive. That is, there are two sequences $\vec{\mathbf{x}},\vec{\mathbf{x}^{\prime}}$ such that $\vec{\mathbf{x}}_{L-R+1:L}=\vec{\mathbf{x}^{\prime}}_{L-R+1:L}$ but $F(\vec{\mathbf{x}})\neq F(\vec{\mathbf{x}^{\prime}})$ . + +Theorem 3.7. + +Let $F$ be a function that satisfies 3.6. There is a distribution $D$ over the input such that any model $M$ that is a composition of $k$ Transformer layers $\mathrm{TF}_{1},\dots,\mathrm{TF}_{k}$ that can compute $F$ with probability $2/3$ must satisfy $\sum_{i=1}^{k}W_{i}\geq R$ . + +Figure 2: The construction’s style follows taking an input $x$ and implementing 2 functions $u,v$ with an SSM. Typically, $u$ is a truncation of the input, and $v$ is a control parameter (represented in purple). Lastly, a Transformer combines these by implementing $F$ to perform the complete task (represented in red). + +4 Hybrid Model for Function Composition + +Using our hardness results, if a function $F$ satisfies 3.2 and 3.6 simultaneously, then any pure SSM must need a large number of parameters to solve the problem, making a key bottleneck for training and deploying the model, while any pure Transformer must need a working memory nearly in $\Omega(L)$ due to data redundant, making inference over long-context data a key bottleneck. + +To achieve the best of both worlds, i.e., a model with a small number of parameters and relatively small working memory, we consider hybrid models that combine state-space and Transformer layers. The intuitive motivation for hybrid use is that a state space model can implicitly act as an encoder that summarizes the information from the long context $\vec{\mathbf{x}}$ and passes the compressed information to a Transformer. Since the Transformer itself does not have the ability to select the correct positions to look at unless it has a deep depth or a large window size, using more comprehensive information can reduce the space requirement of the Transformer. + +To avoid making the notation messy, we think of $\vec{v}(\vec{\mathbf{x}})$ as a single token so that given $(\vec{u},\vec{v})$ , a Transformer solves the problem by answering a query $q_{v}$ . Suppose we have a state space model $\mathrm{SSM}_{u}$ parameterized by $(S^{u},R^{u})$ that maps $\vec{\mathbf{x}}\in\mathcal{V}^{L}$ to a sequence $\vec{a}\in\mathcal{V}^{L}$ such that $\vec{a}_{L-m+1:L}=\vec{u}(\vec{\mathbf{x}})$ and an encoder based model $\mathrm{SSM}_{v}$ parameterized by $S^{v},R^{v}$ that maps $\vec{\mathbf{x}}\in\mathcal{V}^{L}$ to a sequence $\vec{b}\in\mathcal{V}^{L}$ such that $\vec{b}_{L}=\vec{v}(\vec{\mathbf{x}})$ . We can build a merged $\mathrm{SSM}$ by combining the two state space models in a black box way. That is, + + $\displaystyle S(\mathbf{x}_{1},\dots,\mathbf{x}_{i})=(S^{u}(\mathbf{x}_{1},\dots,\mathbf{x}_{i}),S^{v}(\mathbf{x}_{1},\dots,\mathbf{x}_{i})),$ + + $\displaystyle R(S(\mathbf{x}_{1},\dots,\mathbf{x}_{i}))=\begin{pmatrix}R^{u}(S^{u}(\mathbf{x}_{1},\dots,\mathbf{x}_{i}))\\ +R^{v}(S^{v}(\mathbf{x}_{1},\dots,\mathbf{x}_{i})\end{pmatrix}.$ + +In matrix form, $\mathrm{SSM}$ maps $\vec{\mathbf{x}}$ to the following matrix + + $\displaystyle\begin{pmatrix}r^{u}_{1}&r^{u}_{2}&,\dots,&r^{u}_{L}\\ +r^{v}_{1}&r^{v}_{2}&,\dots,&r^{v}_{L}\end{pmatrix}.$ + +In particular, if we look at the last $m$ columns of the output of the state-space model, then we have + + $\displaystyle\begin{pmatrix}u_{1}&u_{2}&,\dots,&u_{m}\\ +r^{v}_{L-m+1}&r^{v}_{L-m+2}&,\dots,&v\end{pmatrix}.$ + +Suppose we have a Transformer $\mathrm{TF}$ parameterized by $(\mathbf{W}_{q}^{\mathrm{TF}},\mathbf{W}_{k}^{\mathrm{TF}},\mathbf{W}_{v}^{\mathrm{TF}})$ such that given $(\vec{u},\vec{v})$ , it can compute $F(\vec{u},\vec{v})$ . We consider the following attention layer $\mathbf{W}_{q}(r^{u}_{i},r^{v}_{i})^{\top}=\mathbf{W}_{q}^{\mathrm{TF}}r^{v}_{i},\mathbf{W}_{k}(r^{u}_{i},r^{v}_{i})^{\top}=\mathbf{W}_{k}^{\mathrm{TF}}r^{u}_{i},\mathbf{W}_{v}(r^{u}_{i},r^{v}_{i})^{\top}=\mathbf{W}_{v}^{\mathrm{TF}}r^{u}_{i}$ . +The output of $\mathrm{TF}\circ\mathrm{SSM}$ is exactly $F(\vec{u},\vec{v})$ . Furthermore, such a construction preserves the model size and the working memory of both state space models and Transformers. We next use this idea to show that for several natural synthetic tasks, we can construct small scale hybrid models achieving good working memory efficiency. + +Selective Copying. +Our first task is defined as: + +Definition 4.1 (Selective Copying). + +Consider a vocabulary of tokens $\mathcal{V}=\mathcal{N}\cup\mathcal{M}$ , where $\mathcal{N}=\{\#1,\#2,\dots,\#N\}$ , $|\mathcal{N}|=N$ and $|\mathcal{M}|=M$ . The other values in $\mathcal{M}$ are arbitrary. Provided some sequence $(\mathbf{x}_{i})_{i=1}^{L}$ , let $i=\operatorname*{argmax}_{1\leq i\leq L}\mathbf{x}_{i}\in\mathcal{N}$ , +the goal is to extract the token $\mathbf{x}_{L+1-\mathbf{x}_{i}}$ , i.e. + $\mathbf{x}_{L+1}=\mathbf{x}_{L+1-\mathbf{x}_{i}}.$ + +As a direct application of Theorem 3.3 and Theorem 3.7, the size of a pure SSM that can solve the selective copying task well must scale linearly with respect to $|\mathcal{N}|$ , while a pure Transformer must have working memory that scales linearly in the context length $L$ . The proof is in Section D.1. + +Theorem 4.2. + +Consider the task of selective copying. There is a distribution $D$ over $\mathcal{V}^{L}$ such that any pure state space model that can solve the task for some $\vec{\mathbf{x}}$ drawn from $D$ with probability $90\%$ must have $\sum_{i=1}^{k}\log(|\mathcal{S}_{i}|)\geq N\log M$ , where $\mathcal{S}_{i}$ is the state space of the $i$ th SSM layer. Furthermore, any pure Transformer model that can solve the task with probability $90\%$ must have $\sum_{i=1}^{k}W_{i}\geq\Omega(L)$ . + +Figure 3: The construction solving selective copy takes an input sequence and finds the most recent number token (as represented in the bottom squares of the output of the SSM). The Transformer can then use these to look back some relative distance to find the correct token to output. + +Hybrid Model for Selective Copying + +To sidestep the limitations of pure models, we design a two-layer hybrid that provably solves the problem with small input-independent memory and input-dependent memory. Our construction follows the discussion in Section 4. In particular, the SSM component can be realized by a Mamba model. + +Theorem 4.3. + +There is a two-layer hybrid with a Mamba layer and an attention layer that can solve the selective copying task for every input sequence $\vec{\mathbf{x}}\in\mathcal{V}^{L}$ . Furthermore, the hybrid model has an embedding dimension $d=O(\max(\log|\mathcal{V}|,\log L))$ such that the Mamba layer has $O(|\mathcal{V}|)$ state space, while the attention layer has dimension $d$ and a sliding window size of $O(N)$ . + +The proof of Theorem 4.3 is in Section D.2. We remark that the number of parameters of our hybrid model is only $\text{poly}\log(\max(|\mathcal{V}|,L))$ with working memory $\tilde{O}(N)$ , which is much smaller than $L$ , unless $N$ is extremely large. The construction follows a structure where the SSM stores the most recent number token into its state, adding it to the current token. The Transformer can then use this information to copy the token that many positions in the past (Fig. 3). + +Associative Recall with Decoding + +As a further concrete application of our framework, we introduce another task, for which a hybrid model outperforms both pure state space models and Transformers. + +Definition 4.4 (Associative Recall with Decoding). + +Consider a vocabulary of tokens $\mathcal{V}=\mathcal{M}\cup\{0,1\}$ , where $\mathcal{M}$ is a set of word tokens. Let $\vec{\mathbf{x}}\in\mathcal{V}^{L}$ be a sequence of input tokens and let $v(\vec{x})\in\{0,1\}^{\log(|\mathcal{V}|)}$ be the $0-1$ subsequence of $\vec{\mathbf{x}}$ . Denote by $\Phi(\vec{\mathbf{x}})\in\mathcal{M}$ , the token with binary representation $\vec{\mathbf{x}}$ . +Given $v(\vec{\mathbf{x}})$ , the goal is to output the next token in $\vec{\mathbf{x}}$ behind the last $\Phi(v(\vec{\mathbf{x}}))$ token. + +As another implication of Theorem 3.3 and Theorem 3.7, the size of a pure SSM that can solve the associative recall with decoding task well must scale linearly with respect to the number of all possible word tokens, while a pure Transformer must have working memory that scales linearly in the context length $L$ . +The proof of Theorem 4.5 is in Section D.3. + +Theorem 4.5. + +Consider the task of associate recall with decoding. +There is a distribution $D$ over $\mathcal{V}^{L}$ such that any pure state space model that can solve the task for some $\vec{\mathbf{x}}$ drawn from $D$ with probability $90\%$ must have $\sum_{i=1}^{k}\log(|\mathcal{S}_{i}|)\geq\Omega(W\log W)$ , where $\mathcal{S}_{i}$ is the state space of the $i$ th SSM layer and $W=|\mathcal{M}|$ . Any pure Transformer model that can solve the task with probability $90\%$ must have $\sum_{i=1}^{k}W_{i}\geq\Omega(L)$ . + +We next show that for very natural distributions (including the one stated in Theorem 4.5), the performance of a hybrid model can be much better than that of a pure model. +In particular, we show that we can construct a hybrid model such that the number of parameters of the model scales with the logarithm of the task size. The intuition here is that for associative recall, the only tokens that matter tend to appear at the end of the sequence, which implies that the window used by the Transformer can be improved to much smaller than $L$ . For example, if each token is sampled uniformly from the vocabulary, then with probability $99\%$ , within a window of size $\tilde{O}(|\mathcal{M}|)$ , we can see all distinct tokens from the vocabulary. In fact, the hard distribution we considered in Theorem 4.5 also satisfies such a property. +Thus, once we use a state space model to extract the control variable $\vec{x}$ , we are able to solve the problem with a small model with a small working memory. We defer the proof of Theorem 4.6 to Section D.4. + +Theorem 4.6. + +Consider the task of associative recall with decoding. There is a three-layer hybrid model that is a combination of a Mamba layer and two attention layers that can solve the selective copying task with probability $99\%$ for an input sequence $\vec{\mathbf{x}}\in\mathcal{V}^{L}$ such that tokens in $\vec{\mathbf{x}}\setminus v(\mathbf{x})$ are drawn from a uniform distribution. The hybrid model has an embedding dimension $d=O(\max(\log|\mathcal{V}|,\log L))$ such that the Mamba layer has $O(|\mathcal{V}|)$ state spaces, while the attention layer has dimension $d$ and a sliding window size of $\tilde{O}(|\mathcal{V}|)$ . + +5 Experiments + +Our theoretical results show fundamental expressivity differences between pure models and hybrid constructions. We empirically validate three claims related to these results: + +• + +C1. The construction for the hybrid model empirically outperforms the pure Transformer and pure SSM baselines, as predicted by our theoretical results, + +• + +C2. Under standard training approaches, a learned (rather than constructed) hybrid also outperforms pure Transformer and pure SSM baselines, + +• + +C3. In further and more realistic settings, including out-of-distribution and length generalization scenarios, learned hybrids continue to outperform pure Transformer and pure SSM baselines. + +Here, C1 verifies our basic theoretical claims, while C2 and C3 show that the benefits of hybrids persist in typical scenarios (e.g., the hybrid model is trained in standard ways, the tasks and settings deviate from the exact ones we studied). By validating these claims, we demonstrate that the fundamental benefits of hybrid models carry over to practical settings—and are not just a theoretical curiosity. + +5.1 Construction Implementations + +Each of the constructions for Theorem 4.3 and Theorem 4.6 have been implemented to test their validity. Both perform their respective tasks on the last position in the context, as desired, validating C1. For details, see Appendix D.5. + +5.2 Learnability Experiments + +To validate C2, we conduct experiments designed to test the capacity of a hybrid to learn the two main tasks we studied, selective copying and associative recall with decoding. Besides these, we also empirically study two additional tasks: multi-key associative recall (MKAR) and needle-in-a-haystack (NH). These tasks also fall into the category of function composition and are standard tasks used to evaluate pure Transformer-based and SSM models. Our goal is to determine whether the hybrid models learned with standard training approaches (rather than explicitly constructed) continue to outperform non-hybrids. As we shall see, our findings confirm that this is the case. + +To simplify comparisons, rather than directly comparing the state sizes or the input-independent memory for the Transformers, we compare models with similar parameter counts, controlled through the embedding dimension of the tokens. Both the state size and the input-independent memory scale similarly as embedding dimension is increased. + +Experiment Details. These models are comprised of GPTNeoX and Mamba layers for attention and SSM layers. We use RoPE positional encodings. Unless otherwise specified, we are using windowed, causal attention, the transformers have a single head, and the Mamba state dimension expansion is 1. All experiments are trained to convergence using linearly decaying learning rates. The experiments are seq-to-seq, and accuracy if measured over all valid tokens. Transformers use a windowed attention mask. + +When listed in figures, layers are read left-to-right. For example, SSM-TF is an $\mathrm{SSM}$ layer followed by a $\mathrm{TF}$ layer. Additional details can be found in Appendix E. + +Selective Copy. + +Parameters + +Pure TF + +Pure SSM + +TF $\to$ SSM + +SSM $\to$ TF + + $\sim 1000$ + +0.056 + +0.084 + +0.100 + +0.087 + + $\sim 2000$ + +0.352 + +0.305 + +0.433 + +0.999 + + $\sim 6000$ + +0.727 + +0.485 + +0.822 + +1.000 + + $\sim 12000$ + +0.923 + +0.931 + +0.908 + +1.000 + +Figure 4: Results from training small models on Selective Copy, across an increase in the hidden dimension of the models. At 2000 parameters, hybrid models consistently attain perfect accuracy. The pure models, with 6x the parameters, only attain around 0.9 accuracy. + +Setup. Given the relative simplicity of this task, we can study model expressivity for small models, with up to approximately ten thousand parameters. + +Results. We depict the results in Figure 4. As expected, the hybrid performs the task to 90% accuracy with significantly fewer parameters than either the pure Transformer or pure SSM, by around a factor of $6\times$ . +Also note that the “reverse” hybrid, with the Transformer layer first, performs no differently than the pure models. This is consistent with prior work Park et al. (2024). + +Associative Recall with Decoding. + +Figure 5: Results from training small models on Associative Recall with Decoding. Even at much smaller scales than the pure models, the hybrid is the only architecture that attains 0.5 accuracy. At the scales tested, none of the pure models performed the task with more than 0.4 accuracy. + +Setup. For this task, we expect both the pure Transformer and the pure SSM to struggle, while a hybrid has the expressive power to represent this task. Unlike the other tasks, this experiment utilized three layer models rather than two layer ones. This is due to the construction for Theorem 4.6, where three layers were needed. These models required significantly more parameters than the other models, close to 1 million. + +Results. For these three layer models, we observe the same behavior: the hybrid excels while the pure models struggle. As seen in Figure 5, at the scales tested, none of the pure models achieved greater than 40% accuracy, while the hybrid did at much smaller scales, eventually surpassing 50% accuracy. At a high level, this task is more difficult than the others as it requires the more complex computation of binary values before performing the commonly tested task of associative recall. + +Multi-Key Associative Recall. +Setup. We now turn our attention to a further pair of tasks, the first being MKAR. + +Parameters + +Pure TF + +Pure SSM + +TF $\to$ SSM + +SSM $\to$ TF + + $\sim 1000$ + +0.124 + +0.158 + +0.131 + +0.144 + + $\sim 2000$ + +0.159 + +0.173 + +0.183 + +0.512 + + $\sim 6000$ + +0.230 + +0.356 + +0.286 + +0.990 + + $\sim 12000$ + +0.668 + +0.517 + +0.524 + +0.989 + +Figure 6: Results from training small models on Multi-Key Associative Recall, across an increase in the hidden dimension. The hybrid consistently outperforms the pure models of the same depth and similar parameter counts. The hybrid models could perform the task to 60% accuracy with $6\times$ fewer parameters than any of the pure Transformers. + +Definition 5.1 (MKAR). + +Let $\vec{\mathbf{x}}$ be a sequence of length $L$ sampled from a vocabulary $\mathcal{V}$ , and let $k$ be some small number. Let $K=\vec{\mathbf{x}}_{L-k:L}$ . Let $i$ be the last position in the context where $\vec{\mathbf{x}}_{i:i+k}=K$ . Performing MKAR is outputting $\vec{\mathbf{x}}_{i+k}$ . + +In the framework of function-composition, we can take $v$ to be the empty map, $u$ to include enough context to find the key, and $F$ to be the look-up operation. Since $F$ can have any output depending heavily on the context, this is hard for an SSM. Since $u$ could be large, this is also hard for a Transformer. However, since $v$ is empty, function-composition does not immediately indicate if a separation exists between Transformers and hybrids. + +Results. In Figure 6, we see that SSMs perform quite poorly, while hybrids and Transformers can perform the task at scale. However, we see a similar separation between hybrids and Transformers present for selective copying. Specifically, hybrids perform the task on average with $6\times$ fewer parameters than the pure Transformers to an accuracy of $60\%$ . + +Figure 7: Results from training small models on Needle in a Haystack, across an increase in the hidden dimension of the models with no context windowing. The hybrid and SSM perform this task with fewer parameters than the Transformer, however we still see the hybrid with a slight improvement. This task was expected to be hard for the Transformer and not the SSM. + +Needle in a Haystack. Setup. To complement MKAR, we trained the same models on needle-in-a-haystack (NH). + +Definition 5.2 (NH). + +Let $\vec{\mathbf{x}}$ be a sequence of length $L$ sampled from a vocabulary $\mathcal{V}\cup\{M\}$ . Let the location of $M$ be denoted by $i^{*}$ . Performing NH is outputting $\vec{\mathbf{x}}_{i^{*}+1}$ . + +This task is simple: copy the token(s) after a marker token when requested for at the end of the input sequence. This task is hard for Transformers due to windowing, while SSMs and hybrids should perform this task easily. In the framework of function-composition, $u$ is the empty map, and $F$ is the identity. As such, we do not have the hardness criterion for SSMs; we should therefore not immediately expect hybrids to perform differently than SSMs. + +Results. We show results in Figure 7 for full-context attention. Even in the situation where the Transformer could possibly learn the task, small token dimensions result in learnability issues. +SSMs also perform more inconsistently than hybrid models in small parameter regimes. The mechanism behind these separations is not directly characterized by function-composition and is left to future work. + +For both of these tasks, we see the same property: on these synthetic tasks and at the scales tested, hybrids outperform pure models, even when we use tasks that are outside of the function-composition framework. + +5.3 Further Experiments + +In contrast to the much smaller expressivity experiments, our next set of experiments are designed to increase the scale of the models to somewhere nearer those of modern LLMs. These models will have around 100 million parameters each, closer to the scale of standard language models. Different properties of these models are tested since accuracy on many of the above tasks already approaches 1, and scaling up difficulty parameters, such as vocabulary size, which only increases the difficulty by a small amount, leads to models with similar behaviors to the expressivity experiments. + +Associative Recall with Decoding. +To analyze these different analyses, we use the more difficult task of associative recall with decoding. Empirically, this task proved far more challenging than selective copy, where 2-layer models with the same scale of parameters learned nothing. + +Figure 8: The distribution of accuracies across different input sequence lengths. Hybrid models with comparatively similar parameters as their attention/Transformer counterparts perform better at longer lengths consistently. + +Length Generalization. +Setup. First, we investigate the length generalization of different models. Each model is trained on sequences of length 20 to 50, and tests on longer sequences as well. Comparing the hybrid model to the Transformer (T_rope) and SSM (mamba), Figure 8 shows how the hybrid models consistently outperforms the pure models. + +Results. As expected, the performance drops as sequences grow longer; however, hybrids lose performance at the slowest rate. This means that even though hybrids and Transformers behave within 2% of each other for short sequences, this separation grows to be around 10% for longer sequences. + +Train Proportion + +SSM + +TF + +Hybrid + +0.05 + +0.24 + +0.47 + +0.47 + +0.1 + +0.34 + +0.40 + +0.47 + +0.3 + +0.17 + +0.64 + +0.74 + +0.5 + +0.46 + +0.63 + +0.77 + +0.8 + +0.67 + +0.63 + +0.83 + +0.9 + +0.86 + +0.61 + +0.80 + +Table 1: Results from training 12-layer models with different proportions of bits for Associative Recall with Decoding. Data are evaluation accuracies for evaluation bit proportions of 0.2. Each architecture tends to improve performance as the training bit proportion increases, with hybrids consistently out-performing the pure models. + +OOD Generalization. +Setup. We also tested these models as their sampling distributions are changed. Specifically, we tested Associative Recall with Decoding with differing proportions of bits between test and train time. This task allows us to test these behaviors on larger models, as the other two tasks saturate, only showing 100% accuracy on all tests. Under these distributions, we can see which of the architectures learns representations that consistently perform well across different varying sampling distributions. + +Results. The results can be seen in Table 1. For almost all training distributions, the hybrid indeed performs the best on a 0.2 proportion test set. However, there are some other notable trends within these results beyond just the hybrid’s performance. In particular, the different architectures show varying behavior across training distributions. SSMs tend to improve the most as more training bits are added, while Transformers improve the least. Hybrid models attain the best of both works, acting well with both a high frequency and a low frequency of bits. + +6 Conclusion + +We studied when hybrid sequence models combining SSM and attention layers can simultaneously achieve strong expressivity and favorable memory scaling. We formalized function-composition tasks that require both (i) extracting a control variable from long context and (ii) performing content-addressable retrieval conditioned on that variable. Under natural conditions, we showed that pure SSMs and sliding-window Transformers each face fundamental memory limitations on this family. In contrast, we constructed small hybrids that provably solve selective copying and associative recall with decoding while using substantially smaller working memory than either pure counterpart. Experiments on learned models corroborated these separations, showing that hybrids can outperform larger pure baselines and generalize better to longer sequences and distribution shifts. Limitations include our focus on synthetic tasks and restricted Transformer attention mechanisms; extending the theory to broader attention patterns, external memory, identification of real function-composition datasets, and naturalistic long-context workloads is an important direction for future work. + +References + +S. Arora, S. Eyuboglu, A. Timalsina, I. Johnson, M. Poli, J. Zou, A. Rudra, and C. Ré (2023) +Zoology: measuring and improving recall in efficient language models. + +arXiv preprint arXiv:2312.04927. + +Cited by: Appendix A, +Appendix A, +§1. + +S. Black, S. Biderman, E. Hallahan, Q. Anthony, L. Gao, L. Golding, H. He, C. Leahy, K. McDonell, J. Phang, M. Pieler, U. S. Prashanth, S. Purohit, L. Reynolds, J. Tow, B. Wang, and S. Weinbach (2022) +GPT-NeoX-20B: an open-source autoregressive language model. + +In Proceedings of BigScience Episode #5 – Workshop on Challenges & Perspectives in Creating Large Language Models, A. Fan, S. Ilic, T. Wolf, and M. Gallé (Eds.), + +virtual+Dublin, pp. 95–136. + +External Links: Link, +Document + +Cited by: §E.1. + +A. Blakeman, A. Basant, A. Khattar, A. Renduchintala, A. Bercovich, A. Ficek, A. Bjorlin, A. Taghibakhshi, A. S. Deshmukh, A. S. Mahabaleshwarkar, et al. (2025) +Nemotron-h: a family of accurate and efficient hybrid mamba-transformer models. + +arXiv preprint arXiv:2504.03624. + +Cited by: §1. + +L. Chen, B. Peng, and H. Wu (2024) +Theoretical limitations of multi-layer transformer. + +arXiv preprint arXiv:2412.02975. + +Cited by: Appendix A, +§3. + +Z. Dai, Z. Yang, Y. Yang, J. G. Carbonell, Q. Le, and R. Salakhutdinov (2019) +Transformer-xl: attentive language models beyond a fixed-length context. + +In Proceedings of the 57th annual meeting of the association for computational linguistics, + + pp. 2978–2988. + +Cited by: Appendix A. + +N. Dziri, X. Lu, M. Sclar, X. L. Li, L. Jiang, B. Y. Lin, S. Welleck, P. West, C. Bhagavatula, R. Le Bras, et al. (2023) +Faith and fate: limits of transformers on compositionality. + +Advances in Neural Information Processing Systems 36, pp. 70293–70332. + +Cited by: §3. + +J. L. Elman (1990) +Finding structure in time. + +Cognitive science 14 (2), pp. 179–211. + +Cited by: Appendix A. + +D. Y. Fu, T. Dao, K. K. Saab, A. W. Thomas, A. Rudra, and C. Ré (2022) +Hungry hungry hippos: towards language modeling with state space models. + +arXiv preprint arXiv:2212.14052. + +Cited by: Appendix A, +Appendix A. + +A. Gu, T. Dao, S. Ermon, A. Rudra, and C. Ré (2020) +Hippo: recurrent memory with optimal polynomial projections. + +Advances in neural information processing systems 33, pp. 1474–1487. + +Cited by: Appendix A. + +A. Gu and T. Dao (2024) +Mamba: linear-time sequence modeling with selective state spaces. + +In First Conference on Language Modeling, + +External Links: Link + +Cited by: Appendix A, +§1. + +A. Gu, K. Goel, A. Gupta, and C. Ré (2022a) +On the parameterization and initialization of diagonal state space models. + +Advances in Neural Information Processing Systems 35, pp. 35971–35983. + +Cited by: Appendix A. + +A. Gu, K. Goel, and C. Ré (2022b) +Efficiently modeling long sequences with structured state spaces. + +In The Tenth International Conference on Learning Representations, ICLR +2022, Virtual Event, April 25-29, 2022, + +External Links: Link + +Cited by: Appendix A. + +S. Hochreiter and J. Schmidhuber (1997) +Long short-term memory. + +Neural computation 9 (8), pp. 1735–1780. + +Cited by: Appendix A. + +S. Jelassi, D. Brandfonbrener, S. M. Kakade, and E. Malach (2024) +Repeat after me: transformers are better than state space models at copying. + +arXiv preprint arXiv:2402.01032. + +Cited by: Appendix A, +Appendix B, +§1, +§2, +§3.1. + +H. Lee, W. Yu, H. Zhang, K. Ma, J. Kim, D. Yu, and M. Seo (2025) +Understanding and enhancing mamba-transformer hybrids for memory recall and language modeling. + +In Proceedings of the First BabyLM Workshop, + + pp. 380–398. + +Cited by: Appendix A. + +O. Lieber, B. Lenz, H. Bata, G. Cohen, J. Osin, I. Dalmedigos, E. Safahi, S. Meirom, Y. Belinkov, S. Shalev-Shwartz, et al. (2024) +Jamba: a hybrid transformer-mamba language model. + +arXiv preprint arXiv:2403.19887. + +Cited by: Appendix A. + +W. Merrill, J. Petty, and A. Sabharwal (2024) +The illusion of state in state-space models. + +In International Conference on Machine Learning, + + pp. 35492–35506. + +Cited by: Appendix A. + +W. Merrill and A. Sabharwal (2023) +The parallelism tradeoff: limitations of log-precision transformers. + +Transactions of the Association for Computational Linguistics 11, pp. 531–545. + +Cited by: Appendix A. + +J. Park, J. Park, Z. Xiong, N. Lee, J. Cho, S. Oymak, K. Lee, and D. Papailiopoulos (2024) +Can mamba learn how to learn? a comparative study on in-context learning tasks. + +arXiv preprint arXiv:2402.04248. + +Cited by: Appendix A, +§5.2. + +B. Peng, S. Narayanan, and C. Papadimitriou (2024) +On limitations of the transformer architecture. + +In First Conference on Language Modeling, + +Cited by: Appendix A. + +L. Ren, Y. Liu, Y. Lu, Y. Shen, C. Liang, and W. Chen (2024) +Samba: simple hybrid state space models for efficient unlimited context language modeling. + +arXiv preprint arXiv:2406.07522. + +Cited by: Appendix A. + +R. Waleffe, W. Byeon, D. Riach, B. Norick, V. Korthikanti, T. Dao, A. Gu, A. Hatamizadeh, S. Singh, D. Narayanan, et al. (2024) +An empirical study of mamba-based language models. + +arXiv preprint arXiv:2406.07887. + +Cited by: Appendix A. + +G. Yehudai, C. Sanford, M. Bechler-Speicher, O. Fischer, R. Gilad-Bachrach, and A. Globerson (2025) +Depth-width tradeoffs in algorithmic reasoning of graph tasks with transformers. + +arXiv preprint arXiv:2503.01805. + +Cited by: Appendix A. + +Z. Zhan, J. Zhao, Z. Zhu, and J. Tang (2025) +Overcoming long-context limitations of state-space models via context-dependent sparse attention. + +arXiv preprint arXiv:2507.00449. + +Cited by: Appendix A, +§3.1. + +Supplementary Material + +We provide supplementary materials here. In Appendix A, we provide related works. In Appendix B, we give a complete list of preliminaries and notations. In Appendix C, we present omitted proofs in Section 3, establishing hardness results for SSMs and transformers. In Appendix D, we provide omitted proofs in Section 4, providing concrete hybrid model constructions. In Appendix E, we provide additional details to our empirical experiments. + +Appendix A Related Works + +State Space Models. +State space models (SSMs) are a classical framework Elman [1990], Hochreiter and Schmidhuber [1997] for modeling sequential data via the evolution of a latent state governed by a dynamical system. +Recently, SSMs have attracted renewed interest in machine learning as efficient alternatives to attention-based architectures for long-sequence modeling, owing to their linear-time inference and favorable memory scaling. +In their canonical form, SSMs describe sequences through linear state transitions and observation maps, providing a principled mechanism for compressing historical information into a fixed-dimensional representation. +This revival includes structured SSM architectures that carefully design or learn the state dynamics to capture long-range dependencies, such as HiPPO Gu et al. [2020] and S4Gu et al. [2022b], as well as simplified variants like S4DGu et al. [2022a]. More recently, selective and input-dependent SSMs—most notably Mamba Gu and Dao [2024], have demonstrated strong empirical performance at scale. + +Hybrid Architectures. +Hybrid sequence models that combine state space/recurrent dynamics with attention mechanisms have gained increasing attention as a means to balance efficient long-range memory with expressive contextual interaction. In the Transformer era, models like Transformer-XL Dai et al. [2019] explored recurrent memory within attention-based architectures, providing early empirical evidence for hybrid designs. With the modern revival of structured state space models, works such as Fu et al. [2022], Arora et al. [2023], which combine SSM layers with a few attention layers, have shown that hybrids can match or exceed Transformer performance on language tasks while retaining linear-time context dynamics. These findings attracted recent interest in empirical studies of hybrid models on in-context learning Park et al. [2024], language tasks Lee et al. [2025] and large-scale empirical validation Lieber et al. [2024], Ren et al. [2024]. A consistent theme exists for each of these studies: empirically, hybrid models tend to perform better than pure models of similar sizes, especially on long-sequence tasks. However, many miss a rigorous understanding of what the structure of these tasks are which requires a mixture of these pure models. + +Expressive Power and Efficiency Tradeoffs. +The expressive power of pure state space models and pure Transformers has been extensively studied through the lenses of computational and communication complexity Merrill and Sabharwal [2023], Peng et al. [2024], Merrill et al. [2024], Chen et al. [2024], Yehudai et al. [2025], providing purely theoretical characterizations of the classes of problems each architecture can solve. Complementary to this line of work, a growing body of research—motivated by the challenges of long-context reasoning Waleffe et al. [2024]—investigates expressivity and memory–computation efficiency using carefully designed synthetic tasks in controlled empirical settings. These tasks are designed to probe specific capabilities such as long-range copying, indexing, and associative retrieval, including repeat-copy tasks Jelassi et al. [2024] and associative recall benchmarks Fu et al. [2022], Arora et al. [2023]. For example, Jelassi et al. [2024] shows that state space models have difficulty copying long contexts, whereas a small Transformer can solve the same task under mild assumptions. More recently, +Zhan et al. [2025] introduces joint recall tasks that are provably hard for pure state space models in sub-quadratic time, yet become tractable when a state space model is augmented with a context-dependent sparse attention layer. Despite these advances, the fundamental tradeoffs between expressive power and efficiency for hybrid architectures remain poorly understood. + +Appendix B Complete Preliminaries and Notations + +Symbol + +Meaning + + $\phi,\psi,\Phi$ + +Token and Positional Embeddings + + $u,v$ + +Control parameters of the task + + $F$ + +The target task + + $H$ + +(Relative) Entropy + + $I$ + +Mutual Information + + $\mathbf{W}_{q},\mathbf{W}_{k},\mathbf{W}_{v},\mathbf{W}_{o}$ + +Transformer parameters + + $\mathbf{W}_{A},\mathbf{W}_{B},\mathbf{W}_{C},\Delta$ + +SSM parameters + + $\mathbf{x}$ + +The input sequence + + $\mathcal{V}$ + +Vocabulary space + + $\mathcal{N},\mathcal{M}$ + +Number/Vocabulary components of $\mathcal{V}$ + + $Y$ + +Target space, typically $\mathcal{V}^{n}$ + + $d$ + +The token dimension + + $d_{s}$ + +The state dimension + +Table 2: Notation. + +We consider sequence to sequence token prediction problem. Let $\mathcal{V}$ be some vocabulary of tokens and $V=|\mathcal{V}|$ and $\vec{\mathbf{x}}=(\mathbf{x}_{i})_{i=1}^{L}$ be and input sequence. A language model $M$ is sequence to sequence map $M:\mathcal{V}^{L}\to\mathcal{V}^{m}$ of the form $M(\vec{\mathbf{x}})=F_{N}\circ F_{N-1}\circ\dots\circ F_{1}(\vec{\mathbf{x}})$ , where each $F_{i}$ is a sequence to sequence map called layer. + +We will consider several different layers in this paper. + +Transformer Layer. +Consider an input $\mathbf{x}_{1},\dots,\mathbf{x}_{L}$ such that $\mathbf{x}_{i}\in\mathbb{R}^{d}$ . An attention head $\mathrm{Attn}$ is defined by matrices $\mathbf{W}_{k},\mathbf{W}_{q},\mathbf{W}_{v}\in\mathbb{R}^{d\times d}$ such that $\mathrm{Attn}(\vec{\mathbf{x}})_{j}=\sum_{i=1}^{n}\alpha_{ji}\mathbf{W}_{v}\mathbf{x}_{i}$ , where + + $\displaystyle\alpha_{ji}:=\frac{\exp\left((\mathbf{W}_{q}\mathbf{x}_{j})\cdot(\mathbf{W}_{k}\mathbf{x}_{i})\right)}{\sum_{i=1}^{n}\exp\left((\mathbf{W}_{q}\mathbf{x}_{j})\cdot(\mathbf{W}_{k}\mathbf{x}_{i})\right)}.$ + +Remark B.1. + +We remark that for some practical applications, a bias term $B$ will also be added to the computation of attention. + +An attention layer $\mathrm{AT}$ is defined by $H$ attention heads $\mathrm{Attn}_{1},\dots,\mathrm{Attn}_{H}$ and a projection matrix $\mathbf{W}_{o}\in\mathbb{R}^{d\times dH}$ . Denote by $\mathbf{O}:=(\mathrm{Attn}_{1}(\vec{\mathbf{x}})^{\top},\dots,\mathrm{Attn}_{H}(\vec{\mathbf{x}})^{\top})^{\top}\in\mathbb{R}^{dH\times L}$ the concatenation of the outputs of the $H$ attention heads, so the attention layer $\mathrm{AT}(\vec{\mathbf{x}})$ outputs $\mathbf{W}_{o}\mathbf{O}\in\mathbb{R}^{d\times L}$ . + +A Transformer layer $\mathrm{TF}$ is defined by an attention layer $\mathrm{AT}$ and an MLP layer $\mathrm{MLP}$ . In particular, an MLP layer is defined as $f(\mathbf{x}):\mathbb{R}^{d}\to\mathbb{R}^{d}$ as $f(\mathbf{x})=\mathbf{U}_{2}\sigma(\mathbf{U}_{1}\mathbf{x})$ , where $\mathbf{U}_{1},\mathbf{U}_{2}$ are matrices and $\sigma$ is an activation function applied coordinate-wise. Specifically, $\mathrm{TF}(\vec{\mathbf{x}})=\mathrm{MLP}(\mathrm{AT}(\vec{\mathbf{x}}))$ . + +State Space Model Layer. +We use a similar definition of SSM layer as Jelassi et al. [2024]. +A state space $\mathcal{S}$ is some finite set. We denote by $\mathrm{mem}(\mathcal{S})$ the number of bits required to encode the states of $\mathcal{S}$ , namely $\mathrm{mem}(\mathcal{S})=\log(|\mathcal{S}|)$ . A generalized state space layer (GSSM) is a sequence model defined by an update rule $u:\mathcal{S}\times\mathcal{V}\rightarrow\mathcal{S}$ and some output function $r:\mathcal{S}\rightarrow\mathcal{V}$ . Let $s_{0}\in\mathcal{S}$ be some initial state. Given some sequence $\mathbf{x}_{1},\ldots,\mathbf{x}_{L}$ , the state of the model at iteration $i$ is denoted by $S_{i}(\mathbf{x}_{1},\ldots,\mathbf{x}_{i})$ and the output token is denoted by $R_{i}(\mathbf{x}_{1},\ldots,\mathbf{x}_{i})$ . The state and output are defined recursively: + +1. + + $S_{0}(\emptyset)=s_{0}$ , + +2. + + $S_{i}(\mathbf{x}_{1},\ldots,\mathbf{x}_{i})=u(S_{i-1}(\mathbf{x}_{1},\ldots,\mathbf{x}_{i-1}),\mathbf{x}_{i})$ , + +3. + + $R_{i}(\mathbf{x}_{1},\ldots,\mathbf{x}_{i})=r(S_{i}(\mathbf{x}_{1},\ldots,\mathbf{x}_{i}))$ . + +Mamba Layer. +Our SSM layers in our constructions are defined as follows. +Let $\mathrm{Mamba}^{(i)}$ be a Mamba layer. Let $d$ be the token embedding dimension size and $d_{s}$ be the state dimension size. +Let + + $\displaystyle\mathbf{W}_{A}\in\mathbb{R}^{d_{s}\times d_{s}},\mathbf{W}_{B}\in\mathbb{R}^{d_{s}\times d},\mathbf{W}_{C}\in\mathbb{R}^{d\times d_{s}},\Delta(\mathbf{x}_{t})\in\mathbb{R}$ + +be constants and a function that returns the shift in time $\Delta(\mathbf{x}_{t})$ based on the current token. We update the hidden state matrix as follows: + + $\displaystyle H_{t}$ + + $\displaystyle=(I-\Delta(\mathbf{x}_{t})\mathbf{W}_{A})H_{t-1}+\Delta(\mathbf{x}_{t})\mathbf{W}_{B}\mathbf{x}_{t}$ + + $\displaystyle y_{t}$ + + $\displaystyle=\mathbf{W}_{C}H_{t}$ + +This follows from the first-order approximation of the S6, where $\exp(-\Delta A)\approx I-\Delta A$ . This is useful for construction purposes to avoid large constants $M\gg 1$ to push $\exp$ close to $0$ . Equivalent constructions can be found by instead placing a large constant $M$ is specific locations with the original $\exp$ . + +We also omit the typical per-token dependencies that exist for $\mathbf{W}_{B}$ and $\mathbf{W}_{C}$ in standard Mamba, as constant functions were sufficient for our constructions. + +In this work, we will consider two kinds of models used in practice, encoder-based models and decoder-based models. We next formally defined the two models as follows. + +Encoder-Based Model. An Encoder-Based Model $M$ can be thought of as a sequence-to-sequence map. That is to say, given a sequence of input tokens $\vec{x}=(\mathbf{x}_{i})_{i=1}^{L}$ , the model $M$ maps it to another sequence $\vec{y}=(y_{i})_{i=1}^{L}$ , each token $y_{i}$ corresponds to a token $\mathbf{x}_{i}$ in the sequence. Specifically, let $M=F_{N}\circ F_{N-1}\circ\cdots\circ F_{1}(\vec{\mathbf{x}})$ be a language model with $N$ layers. Each layer $F_{t}$ has an input $h^{(t-1)}\in\mathbb{R}^{d\times L}$ and an output $h^{(t)}\in\mathbb{R}^{d\times L}$ , in particular $h^{(0)}$ is the embedding of the input sequence $\vec{x}$ . Furthermore, for every $t\in[N]$ and $i\in[L]$ , $h^{(t)}_{i}$ is a function of the whole vector $h^{(t-1)}$ . + +Decoder-Based Model(Autoregressive Model). +A Decoder-Based Model $M$ can be thought of as an autoregressive(generative) model. Roughly speaking, for each input sequence $\vec{\mathbf{x}}$ , we consider recursively generating $\mathbf{x}_{L+i}=M(\mathbf{x}_{1},\dots,\mathbf{x}_{L+i-1})$ and denote by $M(\vec{\mathbf{x}})=\mathbf{x}_{L+1},\mathbf{x}_{L+2},\dots$ the final output of the model $M$ . For a multi-layer model $M=F_{N}\circ F_{N-1}\circ\cdots\circ F_{1}(\vec{\mathbf{x}})$ , the inference stage of $M$ contains two stages. In the first stage, +each layer $F_{t}$ has an input $h^{(t-1)}\in\mathbb{R}^{d\times L}$ and an output $h^{(t)}\in\mathbb{R}^{d\times t}$ , in particular $h^{(0)}$ is the embedding of the input sequence $\vec{\mathbf{x}}$ . However, unless the encoder-based model, $h^{(t)}_{i}$ only depends on $h^{(t-1)}_{1},\dots,h^{(t-1)}_{i}$ . We will decode $h^{(N)}_{L}$ as $\mathbf{x}_{L+1}$ and enter the second stage, where we generate $\mathbf{x}_{L+2}$ by consuming $(\mathbf{x}_{1},\dots,\mathbf{x}_{L+1})$ . + +Memory Budget. In this work, we will compare the behavior of different models according to their memory budget. In particular, we will consider two types of budgets: input-dependent memory and input-independent memory. By input-dependent memory, we mean the space needed for storing the input as well as the intermediate results. By input-independent memory, we mean the number of parameters of the model. + +Embeddings. +A binary embedding for a finite space $\cal X$ will be a map $\psi^{\prime}_{d^{\prime}}:\mathcal{X}\rightarrow\{-1,1\}^{d^{\prime}}$ where $d^{\prime}\geq\log_{2}|\mathcal{X}|$ or larger. + +Appendix C Omitted Proofs in Section 3 + +C.1 Proof of Lemma 3.5 + +Lemma C.1 (Restatement of Lemma 3.5). + +Consider a $k$ -layer auto-regressive SSM $M$ defined as $\mathrm{SSM}_{1}\to\mathrm{SSM}_{2}\to\dots\to\mathrm{SSM}_{k}$ , where for $j\in[k]$ , $\mathrm{SSM}_{j}$ is an SSM layer. There is a model $\mathrm{SSM}^{\prime}$ that only consists a single layer SSM, which behaves the same as $M$ . In particular, denote the state space of $\mathrm{SSM}_{j}$ as $\mathcal{S}_{j}$ , $j\in[k]$ , and denote by the state space of $\mathrm{SSM}^{\prime}$ as $\mathcal{S}^{\prime}$ , then $|\mathcal{S}^{\prime}|\leq\prod_{j=1}^{k}|\mathcal{S}_{j}|$ . + +Proof of Lemma 3.5. + +Let $s^{(j)}_{0}$ , $u^{(j)}$ , $r^{(j)}$ , $R^{(j)}_{i}$ , and $S^{(j)}_{i}$ be the SSM parameters that define $\mathrm{SSM}_{j}$ . The output of this $k$ -layer model is computed as follows: + + $\displaystyle S^{(j)}_{0}(\emptyset)$ + + $\displaystyle=s^{(j)}_{0}\quad\text{ for }j\in[k]$ + + $\displaystyle S^{(1)}_{i}(\mathbf{x}_{1},\dots,\mathbf{x}_{i})$ + + $\displaystyle=u^{(1)}(S^{(1)}_{i-1}(\mathbf{x}_{1},\dots,\mathbf{x}_{i-1}),\mathbf{x}_{1})$ + + $\displaystyle S^{(j)}_{i}(R^{(j-1)}_{1},\dots,R^{(j-1)}_{i})$ + + $\displaystyle=u^{(j)}(S^{(j)}_{i-1}(R^{(j-1)}_{1},\dots,R^{(j-1)}_{i-1}),R^{(j-1)}_{i})\quad\text{ for }2\leq j\leq k$ + + $\displaystyle R^{(j)}_{i}(R^{(j-1)}_{1},\dots,R^{(j-1)}_{i})$ + + $\displaystyle=r^{(j)}(S^{(j)}_{i}(R^{(j-1)}_{1},\dots,R^{(j-1)}_{i}))$ + +The output of each layer is fed into the next layer to update its state. +We define $\mathcal{S}^{\prime}$ to be $\{(s_{1},\dots,s_{k})\mid s_{i}\in\mathcal{S}^{i},i\in[k]\}$ , so $|\mathcal{S}^{\prime}|=\prod_{i=1}^{k}|\mathcal{S}^{i}|$ . Let $\mathrm{SSM}^{\prime}$ have state + + $S^{\prime}_{i}(\mathbf{x}_{1},\dots,\mathbf{x}_{i})=\left(S^{(1)}_{i}(\mathbf{x}_{1},\dots,\mathbf{x}_{i}),\ S^{(2)}_{i}(R^{(1)}_{1},\dots,R^{(1)}_{i}),\ \dots\ ,S^{(j)}_{i}(R^{(j-1)}_{1},\dots,R^{(j-1)}_{i})\right).$ + +We remark that the definition above is well defined, since for every $j\in[k]$ , $(R^{(j)}_{1},\dots,R^{j}_{i})$ only depends on $(\mathbf{x}_{1},\dots,\mathbf{x}_{i})$ , thus is available at time $i$ . The output function $r^{\prime}$ is defined to be the output of the final layer of the multilayer SSM $(S^{\prime}_{i})_{k}$ , + + $r^{\prime}(S^{\prime}_{i}(\mathbf{x}_{1},\dots,\mathbf{x}_{i}))=R^{(k)}_{i}((S^{\prime}_{i})_{k})$ + +All other parameters are simply their application across the different components of the compound state. + + $\displaystyle S^{\prime}_{0}(\emptyset)$ + + $\displaystyle=(s^{(1)}_{0},\dots,s^{(j)}_{0})$ + + $\displaystyle u^{\prime}(S^{\prime}_{i-1}(\mathbf{x}_{1},\dots,\mathbf{x}_{i-1}),\mathbf{x}_{i})$ + + $\displaystyle=(S^{(1)}_{i},\dots,S^{(j)}_{i})$ + +This construction computes the same result as the original multilayer model with the same size of state. +∎ + +C.2 Proof of Theorem 3.3 + +Theorem C.2 (Restatement of Theorem 3.3). + +Let $F$ be a function defined Definition 3.1 that satisfies 3.2. There is a distribution $D$ over the input $(u,v)$ such that any model $M$ that is a composition of $k$ state space layers $\mathrm{SSM}_{i}$ , with state space $\mathcal{S}_{i},i\in[k]$ that can compute $F$ with probability $1/2$ must satisfy $\sum_{i=1}^{k}\log(|\mathcal{S}_{i}|)\geq\Omega(m\log(|\mathcal{V}|)-q\log(|\mathcal{Y}|))$ . + +Proof of Theorem 3.3. + +By Lemma 3.5, we only need to show the hardness against a single layer of state space model. By Yao’s min-max principle, it is sufficient to show that we cannot construct any deterministic state-space model that can solve the problem with a good probability when the input is drawn from some distribution $D$ . +We consider the following distribution $D$ over a sequence of length $m+n$ tokens. For the first $m$ tokens, we sample each token uniformly from $\mathcal{V}$ , representing $u$ is drawn uniformly at random. For the last $n$ tokens, we will draw $v\sim Q$ independent on $u$ . We next lower bound the size of $|\mathcal{S}|$ of any SSM that can give the correct output when the input $(u,v)$ is drawn from $D$ . Denote by $Y_{i}=F(u,v^{(i)})$ for $i\in[q]$ and $Y=(Y_{1},\dots,Y_{q})$ . Furthermore, let $s=S_{m}(u)$ the random state of the model after reading $u$ . By 3.2, we know that $H(s\mid u)=0$ . +Since + + $\displaystyle I(u;s)=H(u)-H(u\mid s)=H(s)-H(s\mid u),$ + +we have + + $\displaystyle H(u)-H(u\mid s)=H(s)\leq\log(|\mathcal{S}|),$ + +because the support of $s$ has size at most $|\mathcal{S}|$ . We next upper bound $H(u\mid s)$ . By the symmetry of mutual information, we have + + $\displaystyle H(u\mid s)$ + + $\displaystyle=H(Y\mid s)+H(u\mid Y,s)-H(Y\mid u,s)$ + + $\displaystyle=H(Y\mid s)\leq\sum_{i=1}^{q}H(Y_{i}\mid s),$ + +where the second equation holds by $H(u\mid Y,s)-H(Y\mid u,s)=0$ . It remains to upper bound $H(Y_{i}\mid s)$ . Let $\mathrm{err}_{i}:=\operatorname*{\mathbf{Pr}}_{u\sim\mathcal{V}^{m}}(R(S_{m+n}(u,v^{(i)}))\neq Y_{i})$ . By Fano’s inequality, we have + + $\displaystyle H(Y_{i}\mid s)\leq H_{2}(\mathrm{err}_{i})+\mathrm{err}_{i}\log(|\mathcal{Y}|).$ + +Thus, + + $\displaystyle H(u\mid s)$ + + $\displaystyle\leq q\frac{1}{q}\sum_{i=1}^{q}H(Y_{i}\mid s)$ + + $\displaystyle\leq q\frac{1}{q}\sum_{i=1}^{q}(H_{2}(\mathrm{err}_{i})+\mathrm{err}_{i}\log(|\mathcal{Y}|))$ + + $\displaystyle\leq q(H_{2}(\mathrm{err})+\mathrm{err}\log(|\mathcal{Y}|))$ + +This implies, if we set up $\mathrm{err} + + $\displaystyle\log(|\mathcal{S}|)\geq m\log(|\mathcal{V}|)-q(H_{2}(1/8)+\log(|\mathcal{Y}|)/8).$ + +To conclude the proof of Theorem 3.3, we discuss the possible choice of $q$ and $|\mathcal{Y}|$ that satisfy 3.2. Since $G(u):=(F(u,v^{(1)}),\dots,F(u,v^{(q)}))$ is an injection, we know that the smallest possible choice of $q,|\mathcal{Y}|$ satisfies $q\log(|\mathcal{V}|)=O(m\log(|\mathcal{V}|))$ . This implies $\log(|\mathcal{S}|)\geq\Omega(m\log(|\mathcal{V}|))$ + +∎ + +C.3 Proof of Theorem 3.7 + +Theorem C.3 (Restatement of Theorem 3.7). + +Let $F$ be a function that satisfies 3.6. There is a distribution $D$ over the input such that any model $M$ that is a composition of $k$ Transformer blocks $\mathrm{TF}_{1},\dots,\mathrm{TF}_{k}$ that can compute $F$ with probability $2/3$ must satisfy $\sum_{i=1}^{k}W_{i}\geq R$ . + +Proof of Theorem 3.7. + +Consider any sliding window Transformer $M$ with window size $W_{i}$ for the $i$ -th layer. Denote by $W=\sum_{i=1}^{k}W_{i}$ the effective window size of a Transformer. +Notice that the output of $M$ is a deterministic function of $(\mathbf{x}_{L-W+1},\dots,\mathbf{x}_{L})$ . Thus, we construct a distribution $D$ that draws $\vec{\mathbf{x}}$ and $\vec{\mathbf{x}^{\prime}}$ uniformly. For any input drawn from $D$ , $M$ has the same output. However, by definition, $F(\vec{\mathbf{x}})\neq F(\vec{\mathbf{x}^{\prime}})$ , which implies that $M$ fails to output correctly with probability $1/2$ . + +∎ + +Appendix D Omitted Proofs in Section 4 + +D.1 Proof of Theorem 4.2 + +Theorem D.1 (Restatement of Theorem 4.2). + +Consider the task of selective copying. There is a distribution $D$ over $\mathcal{V}^{L}$ such that any pure state space model that can solve the task for some $\vec{\mathbf{x}}$ drawn from $D$ with probability $90\%$ must have $\sum_{i=1}^{k}\log(|\mathcal{S}_{i}|)\geq N\log M$ , where $\mathcal{S}_{i}$ is the state space of the $i$ th SSM layer, furthermore, any pure Transformer model that can solve the task with probability $90\%$ must have $\sum_{i=1}^{k}W_{i}\geq\Omega(L)$ . + +Proof of Theorem 4.2. + +We write down the task in the form of a function composition $F(u(\vec{\mathbf{x}}),v(\vec{\mathbf{x}}))$ . Let $u(\vec{\mathbf{x}})=\vec{\mathbf{x}}_{L-N+1:L}$ and $v(\vec{\mathbf{x}}):=\operatorname*{argmax}_{1\leq i\leq L}x_{i}\in\mathcal{N}$ and $F(u,v)$ be $u_{L+1-v}$ . + +We first show that $F(u,v)$ satisfies 3.2. We take $v^{(i)}=i,i\in[N]$ , which implies $F(u,v^{(i)})=u_{i},i\in[N]$ . Thus, $G(u)=(F(u,v^{(1)}),\dots,F(u,v^{(N)}))=u$ is an injection. Taking $m=q=N$ , by Theorem 3.3, +we know that when a pure SSM gives a sequence of input of the form $(u,v)$ , where $u$ is drawn uniformly from $\mathcal{V}$ and $v$ is drawn uniformly from $\mathcal{N}$ , then if the SSM wants to solve the task with probability at least $7/8$ , it needs + + $\displaystyle\sum_{i=1}^{k}\log(|\mathcal{S}_{i})|\geq\Omega(N\log(|M|)),$ + +when a pure SSM is given $(u,v)$ such that $u$ is uniformly drawn from $\mathcal{V}^{m}$ and $v$ is drawn uniformly from $\mathcal{N}$ . To simulate such a distribution over $(u,v)$ using a long context $\vec{\mathbf{x}}$ , we select the first $L-1$ tokens from $\mathcal{V}$ uniformly at random, while selecting the last token as a random token from $\{2,\dots,N\}$ . Notice that such a distribution $D_{S}$ is sufficient to simulate the required distribution of $(u,v)$ , since the effective part of $u$ is $u_{1:N-1}$ and $u$ is $u_{1:N-1}$ is independent on $v$ . + +We next show that $F(u(x),v(x))$ is $L/2$ sensitive. Let $\vec{\mathbf{x}},\vec{x^{\prime}}\in\mathcal{V}^{L}$ be any input context such that $\vec{\mathbf{x}}_{L/2:L}=\vec{x^{\prime}}_{L/2:L}$ and $\vec{\mathbf{x}}_{i}\not\in\mathcal{N}$ , for every $i=L/2,\dots,L$ . This implies $v(\vec{\mathbf{x}})$ and $v(\vec{x^{\prime}})$ only depends on the first $L/2$ coordinates. Thus, $F(u(\vec{\mathbf{x}}),v(\vec{\mathbf{x}}))$ is $L/2$ sensitive. By Theorem 3.7, we know that any pure Transformer model that can compute $F(u(\vec{\mathbf{x}}),v(\vec{\mathbf{x}}))$ with a constant probability must have $\sum_{i=1}^{k}W_{i}\geq\Omega(L).$ In particular, to construct a distribution $D_{T}$ over $\vec{\mathbf{x}}$ that makes a pure Transformer fail, we draw $\vec{\mathbf{x}}$ such that $\vec{\mathbf{x}}_{L/2:L}$ is chosen uniformly from $\mathcal{M}$ and $\vec{\mathbf{x}}_{L/2:L}$ is chosen uniformly from $\mathcal{V}$ . + +To conclude the proof of Theorem 4.2, we will choose a distribution $D:=D_{S}/2+D_{T}/2$ . Under this distribution, a pure SSM with $\sum_{i=1}^{k}\log(|\mathcal{S}_{i})| + +D.2 Proof of Theorem 4.3 + +Theorem D.2 (Restatement of Theorem 4.3). + +Consider the task of selective copying. There is a two-layer hybrid model that is a combination of a mamba layer and an attention layer that can solve the selective copying task for every input sequence $\vec{\mathbf{x}}\in\mathcal{V}^{L}$ . Furthermore, the hybrid model has an embedding dimension $d=O(\max(\log|\mathcal{V}|,\log L))$ such that the Mamba layer has $O(|\mathcal{V}|)$ state spaces, while the attention layer has dimension $d$ and a sliding window size of $O(N)$ . + +Proof of Theorem 4.3. + +We first construct the two-layer hybrid model and show the correctness of the construction. + +Token Embeddings. +We begin by constructing an embedding function that maps each $\mathbf{x}\in\mathcal{V}$ to a vector in $\mathbb{R}^{d^{\prime}}$ for some $d>0$ . +Let $d^{\prime}=\log|\mathcal{V}|$ . We define $\psi^{\prime}:\mathcal{V}\to\{\pm 1\}^{d^{\prime}}$ to be the binary encoding of the vocabulary $\mathcal{V}$ . For each $\mathbf{x}\in\mathcal{V}$ , we embed the token $\mathbf{x}$ as + + $\psi(\mathbf{x})=\begin{pmatrix}\psi^{\prime}(\mathbf{x})&\mathbbm{1}_{\{\mathbf{x}\in{\cal N}\}}\psi^{\prime}(\mathbf{x})&\mathbf{0}\end{pmatrix}^{\top}.$ + +Here $\mathbf{0}\in\mathbb{R}^{\ell}$ for some $\ell\leq O(\log(|\mathcal{V}|)+\log L)$ is a zero vector. For a given input context $\vec{\mathbf{x}}$ , the embedded context has the form of + + $\begin{pmatrix}\psi^{\prime}(\mathbf{x}_{1})&\psi^{\prime}(\mathbf{x}_{2})&\dots&\psi^{\prime}(\mathbf{x}_{L-1})&\psi^{\prime}(\mathbf{x}_{L})\\ +\mathbbm{1}_{\{\mathbf{x}_{1}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{1})&\mathbbm{1}_{\{\mathbf{x}_{2}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{2})&\dots&\mathbbm{1}_{\{\mathbf{x}_{L-1}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{L-1})&\mathbbm{1}_{\{\mathbf{x}_{L}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{L})\\ +\mathbf{0}&\mathbf{0}&\dots&\mathbf{0}&\mathbf{0}\end{pmatrix}.$ + +Position Encoding. +To allow the attention layer to access the position of the input tokens, we next add a position encoding to each input token. Define $\phi^{\prime}:[L]\to\{\pm 1\}^{\log L}$ be the binary encoding of numbers in $L$ . For each $i\in[L]$ , we encode the position $i$ using a function $\phi$ defined as follows + + $\displaystyle\phi(i)=\phi^{\prime}(L+1-i).$ + +After adding the position encoding, the input context has the following form. + + $\displaystyle\Phi(\vec{\mathbf{x}}):=\begin{pmatrix}\psi^{\prime}(\mathbf{x}_{1})&\dots&\psi^{\prime}(\mathbf{x}_{L-1})&\psi^{\prime}(\mathbf{x}_{L})\\ +\mathbbm{1}_{\{\mathbf{x}_{1}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{1})&\dots&\mathbbm{1}_{\{\mathbf{x}_{L-1}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{L-1})&\mathbbm{1}_{\{\mathbf{x}_{L}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{L})\\ +\mathbf{0}&\dots&\mathbf{0}&\mathbf{0}\\ +\phi(1)&\dots&\phi(L-1)&\phi(L)\end{pmatrix}$ + +By construction, each column of the input context is in $\mathbb{R}^{d}$ , for some $d=O(\log(|\mathcal{V}|+\log L)$ . +Given the embedding of the input context, we now construct the SSM layer and the attention layer of the hybrid model. + +Mamba Layer. +We define the weights of the Mamba layer as follows. +Let $\mathbf{W}_{A},\mathbf{W}_{B},\mathbf{W}_{C}$ be as follows, + + $\displaystyle\mathbf{W}_{B}\begin{pmatrix}\psi^{\prime}(\mathbf{x}_{i})\\ +\mathbbm{1}_{\{\mathbf{x}_{i}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{i})\\ +\mathbf{0}\\ +\phi^{\prime}(i)\end{pmatrix}$ + + $\displaystyle=\mathbbm{1}_{\{\mathbf{x}_{i}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{i}),\quad\mathbf{W}_{C}\mathbf{v}=\begin{pmatrix}\mathbf{0}\\ +\mathbf{0}\\ +\mathbf{v}\\ +\mathbf{0}\end{pmatrix},$ + + $\mathbf{W}_{A}=I$ , and $\Delta(\mathbf{x})=\mathds{1}_{\{\mathbf{x}\in\mathcal{N}\}}$ . We claim the following guarantee for the constructed Mamba layer. + +Claim D.3. + +Let $\vec{\mathbf{x}}\in\mathcal{V}^{L}$ be a sequence of input contexts. Given the embedded context $\Phi(\vec{\mathbf{x}})$ , the SSM layer with parameter $\mathbf{W}_{A},\mathbf{W}_{B},\mathbf{W}_{C},\Delta(\mathbf{x})$ , has the following output + + $\displaystyle\begin{pmatrix}\psi^{\prime}(\mathbf{x}_{1})&\psi^{\prime}(\mathbf{x}_{2})&\dots&\psi^{\prime}(\mathbf{x}_{L-1})&\psi^{\prime}(\mathbf{x}_{L})\\ +\mathbbm{1}_{\{\mathbf{x}_{1}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{1})&\mathbbm{1}_{\{\mathbf{x}_{2}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{2})&\dots&\mathbbm{1}_{\{\mathbf{x}_{L-1}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{L-1})&\mathbbm{1}_{\{\mathbf{x}_{L}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{L})\\ +\phi({L+1-n_{1}})&\phi({L+1-n_{2}})&\dots&\phi({L+1-n_{L-1}})&\phi({L+1-n_{L}})\\ +\mathbf{0}&\mathbf{0}&\dots&\mathbf{0}&\mathbf{0}\\ +\phi(1)&\phi(2)&\dots&\phi(L-1)&\phi(L)\end{pmatrix},$ + +where $n_{i}=\mathbf{x}_{\operatorname*{argmax}_{1\leq j\leq i}\mathbf{x}_{j}\in{\cal N}}$ + +Proof of D.7. + +By our choice of $\Delta(\mathbf{x}_{t})$ , if $\mathbf{x}_{t}\in\mathbb{N}$ , then $H_{t}=\mathbf{W}_{B}\Phi(\mathbf{x}_{t})$ and if $\mathbf{x}_{t}\not\in\mathbb{N}$ , then $H_{t}=H_{t-1}$ . Notice that if we set $H_{0}$ to be a zero vector, then by induction, for each $t$ , $H_{t}$ is a sparse vector, with the only non-zero component $\phi(L+1-n_{i})=\psi^{\prime}(n_{i})$ . Using an MLP layer to combine the output with the input, we know that the input context + + $\displaystyle\begin{pmatrix}\psi^{\prime}(\mathbf{x}_{1})&\psi^{\prime}(\mathbf{x}_{2})&\dots&\psi^{\prime}(\mathbf{x}_{L-1})&\psi^{\prime}(\mathbf{x}_{L})\\ +\mathbbm{1}_{\{\mathbf{x}_{1}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{1})&\mathbbm{1}_{\{\mathbf{x}_{2}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{2})&\dots&\mathbbm{1}_{\{\mathbf{x}_{L-1}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{L-1})&\mathbbm{1}_{\{\mathbf{x}_{L}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{L})\\ +\phi(L+1-{n_{1}})&\phi(L+1-{n_{2}})&\dots&\phi(L+1-{n_{L-1}})&\phi(L+1-{n_{L}})\\ +\mathbf{0}&\mathbf{0}&\dots&\mathbf{0}&\mathbf{0}\\ +\phi(1)&\phi(2)&\dots&\phi(L-1)&\phi(L)\end{pmatrix}.$ + +∎ + +Attention Layer. Based on the output of the Mamba layer, we will now construct an attention layer that can solve the copy task. Let $\mathbf{W}_{q},\mathbf{W}_{k},\mathbf{W}_{v}$ be the weight matrices of the attention layer. + + $\displaystyle\mathbf{W}_{q}\begin{pmatrix}\psi^{\prime}(\mathbf{x}_{i})\\ +\mathbbm{1}_{\{\mathbf{x}_{i}\in{\cal N}\}}\psi^{\prime}(L+1-\mathbf{x}_{i})\\ +\phi^{\prime}({n_{i}})\\ +\mathbf{0}\\ +\phi^{\prime}(i)\end{pmatrix}$ + + $\displaystyle=M\phi({n_{i}}),\quad\mathbf{W}_{k}\begin{pmatrix}\psi^{\prime}(\mathbf{x}_{i})\\ +\mathbbm{1}_{\{\mathbf{x}_{i}\in{\cal N}\}}\psi^{\prime}(L+1-\mathbf{x}_{i})\\ +\phi^{\prime}({n_{i}})\\ +\mathbf{0}\\ +\phi^{\prime}(i)\end{pmatrix}=\phi(i)$ + + $\displaystyle\mathbf{W}_{v}\begin{pmatrix}\psi^{\prime}(\mathbf{x}_{i})\\ +\mathbbm{1}_{\{\mathbf{x}_{i}\in{\cal N}\}}\psi^{\prime}(L+1-\mathbf{x}_{i})\\ +\phi^{\prime}({n_{i}})\\ +\mathbf{0}\\ +\phi^{\prime}(i)\end{pmatrix}$ + + $\displaystyle=\begin{pmatrix}\mathbf{0}\\ +0\\ +\mathbf{0}\\ +\psi^{\prime}(\mathbf{x}_{i})\\ +\mathbf{0}\end{pmatrix}$ + +We summarize the performance of the attention layer as the following claim. + +Claim D.4. + +Let $\mathrm{SSM}(\vec{\mathbf{x}})$ be the output of the Mamba layer constructed above. By applying an attention mechanism with parameters $\mathbf{W}_{q},\mathbf{W}_{k},\mathbf{W}_{v}$ with a window size of $N$ , the last output vector is a sparse vector with the only non-zero part $\psi(\mathbf{x}_{L+1-n_{L}})$ . + +Proof of D.4. + +Notice that the last output vector is defined as + + $\displaystyle\sum_{i=L+1-N}^{L}\frac{\exp(M\phi(n_{L})\phi(i))}{\sum_{i=L+1-N}^{L}\exp(M\phi(n_{L})\phi(i))}\begin{pmatrix}\mathbf{0}\\ +0\\ +\mathbf{0}\\ +\psi^{\prime}(\mathbf{x}_{i})\\ +\mathbf{0}\end{pmatrix}=\begin{pmatrix}\mathbf{0}\\ +0\\ +\mathbf{0}\\ +\psi^{\prime}(\mathbf{x}_{L+1-n_{L}})\\ +\mathbf{0}\end{pmatrix}$ + +∎ + +In fact, if we use a full attention, then after passing the attention layer, the context now has the form + + $\displaystyle\begin{pmatrix}\psi^{\prime}(\mathbf{x}_{1})&\psi^{\prime}(\mathbf{x}_{2})&\dots&\psi^{\prime}(\mathbf{x}_{L-1})&\psi^{\prime}(\mathbf{x}_{L})\\ +\mathbbm{1}_{\{\mathbf{x}_{1}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{1})&\mathbbm{1}_{\{\mathbf{x}_{2}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{2})&\dots&\mathbbm{1}_{\{\mathbf{x}_{L-1}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{L-1})&\mathbbm{1}_{\{\mathbf{x}_{L}\in{\cal N}\}}\psi^{\prime}(\mathbf{x}_{L})\\ +\phi({n_{1}})&\phi({n_{2}})&\dots&\phi({n_{L-1}})&\phi({n_{L}})\\ +\psi^{\prime}(x_{L+1-n_{1}})&\psi^{\prime}(x_{L+1-n_{2}})&\dots&\psi^{\prime}(x_{L+1-n_{L-1}})&\psi^{\prime}(x_{L+1-n_{L}})\\ +\phi(1)&\phi(2)&\dots&\phi(L-1)&\phi(L)\end{pmatrix}.$ + +This implies that by applying the natural decoding that copies only the row with $\psi^{\prime}(\mathbf{x}_{L+1-n_{1}})$ . The final sequence (up to arbitrarily small error) has the form + + $\begin{bmatrix}\psi^{\prime}(\mathbf{x}_{L+1-n_{1}})&\psi^{\prime}(\mathbf{x}_{L+1-n_{2}})&\dots&\psi^{\prime}(\mathbf{x}_{L+1-n_{L-1}})&\psi^{\prime}(\mathbf{x}_{L+1-n_{L}})\end{bmatrix}$ + +To conclude the proof of Theorem 4.3, it remains to count the number of parameters and the working memory of the constructed hybrid model. +∎ + +D.3 Proof of Theorem 4.5 + +Theorem D.5 (Restatement of Theorem 4.5). + +Consider the task of associative recall with decoding. +There is a distribution $D$ over $\mathcal{V}^{L}$ such that any pure state space model that can solve the task for some $\vec{\mathbf{x}}$ drawn from $D$ with probability $90\%$ must have $\sum_{i=1}^{k}\log(|\mathcal{S}_{i}|)\geq\Omega(W\log W)$ , where $\mathcal{S}_{i}$ is the state space of the $i$ th SSM layer and $W=|\mathcal{M}|$ , furthermore, any pure Transformer model that can solve the task with probability $90\%$ must have $\sum_{i=1}^{k}W_{i}\geq\Omega(L)$ . + +Proof of Theorem 4.5. + +To prove the hardness of the task, we will consider a constraint version of the problem. To do this, we partition equally partition the vocabulary $\mathcal{M}$ into $\mathcal{M}_{1}=\{\alpha_{1},\dots,\alpha_{W/2}\},\mathcal{M}_{2}=\{\beta_{1},\dots,\beta_{W/2}\}$ . For every possible input $\vec{\mathbf{x}}$ , we restrict $\vec{\mathbf{x}}$ of the following form. $\vec{\mathbf{x}}=(\alpha_{i1},\beta_{i1},b_{i1},\dots,\alpha_{ik},\beta_{ik},b_{ik})\in\mathcal{V}^{L}$ . Here, for $j\in[l]$ , $b_{ij}$ either does not appear or $b_{ij}\in\{0,1\}$ . Now, we partition $\vec{\mathbf{x}}$ into two parts. Let $\vec{b}=(b_{i1},\dots,b_{ik})$ be the 0-1 subsequence of $\vec{\mathbf{x}}$ and $\vec{w}=(\alpha_{i1},\beta_{i1},b_{i1},\dots,\alpha_{ik},\beta_{ik},b_{ik})$ be subsequence of $\vec{\mathbf{x}}$ with every token in $\mathcal{M}$ . Given this partition, we write the problem as a function composition. For each $\alpha\in\mathcal{M}_{1}$ , let $\beta(\alpha)\in\mathcal{M}_{2}$ be the next token of the last appearance of $\alpha$ in $\vec{w}$ . Let $u=(\beta(\alpha))_{\alpha\in\mathcal{M}_{1}}\in\mathcal{M}_{2}^{k}$ and let $v\in\mathcal{M}_{1}$ be the token corresponding to binary representation $\vec{b}$ of elements in $\mathcal{M}_{1}$ . Then $F(u,v)=\beta(v)$ . We notice that by choosing $G(u)=(\beta(\alpha_{1}),\dots,\beta(\alpha_{W/2}))$ is an injection. +Taking $m=q=W/2$ , by Theorem 3.3, +we know that when a pure SSM gives a sequence of input of the form $(u,v)$ , where $u$ is uniformly drawn from $\mathcal{M}_{2}^{M/2}$ and $v$ is drawn uniformly from $\mathcal{M}_{1}$ , then if the SSM wants to solve the task with probability at least $7/8$ , it needs + + $\displaystyle\sum_{i=1}^{k}\log(|\mathcal{S}_{i})|\geq\Omega(W\log(|W|)),$ + +To simulate such a distribution over $(u,v)$ using a distribution $D_{S}$ over a long context $\vec{\mathbf{x}}$ , we select each $(\alpha_{ij},\beta_{ij})$ uniformly at random and after selecting $\vec{w}$ , we randomly select $\vec{b}$ and append it to $\vec{w}$ . + +On the other hand, +by sampling $\vec{w}$ uniformly from, we know that with probability at least $99\%$ , for each $\alpha\in\mathcal{M}_{1}$ , the last appearance of $\alpha$ must be at the last $\tilde{O}(W)$ positions of $\vec{w}$ . By Theorem 3.7, we know that any pure Transformer model that can compute $F(u(\vec{\mathbf{x}}),v(\vec{\mathbf{x}}))$ with a constant probability must have $\sum_{i=1}^{k}W_{i}\geq\Omega(L)$ if we randomly selecting $\vec{b}$ and appending it before $\vec{w}$ . we denote the resulting distribution by $D_{T}$ . + +To conclude the proof of Theorem 4.5, we will choose a distribution $D:=D_{S}/2+D_{T}/2$ . Under this distribution, a pure SSM with $\sum_{i=1}^{k}\log(|\mathcal{S}_{i})| +∎ + +D.4 Proof of Theorem 4.6 + +Theorem D.6. + +Restatement of Theorem 4.6 +Consider the task of associative recall with decoding. There is a three-layer hybrid model that is a combination of a mamba layer and two attention layers that can solve the associative recall with decoding task with probability $99\%$ for an input sequence $\vec{\mathbf{x}}\in\mathcal{V}^{L}$ drawn from a uniform distribution. Furthermore, the hybrid model has an embedding dimension $d=O(\max(\log|\mathcal{V}|,\log L))$ such that the Mamba layer has $O(|\mathcal{V}|)$ state spaces, while the attention layer has dimension $d$ and a sliding window size of $\tilde{O}(|\mathcal{V}|)$ . + +Proof of Theorem 4.6. + +We first construct the three-layer hybrid model and show the correctness of the construction. + +Token Embeddings +Let $\mathcal{B}=\{0,1\}$ be the set containing the two bits in the vocabulary. We begin by constructing an embedding function that maps each $\mathbf{x}\in\mathcal{V}$ to a vector in $\mathbb{R}^{d^{\prime}}$ for some $d>0$ . +Let $d^{\prime}=\log|\mathcal{V}|$ . We define $\psi^{\prime}:\mathcal{V}\to\{\pm 1\}^{d^{\prime}}$ to be the binary encoding of the vocabulary $\mathcal{V}$ . For each $\mathbf{x}\in\mathcal{V}$ , we embed the token $\mathbf{x}$ as + + $\psi(\mathbf{x})=\begin{pmatrix}\psi^{\prime}(\mathbf{x})&\mathbf{0}&\mathbbm{1}_{\{\mathbf{x}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x})&\mathbf{0}\end{pmatrix}^{\top}.$ + +Here $\mathbf{0}\in\mathbb{R}^{\ell}$ for some $\ell\leq O(\log(|\mathcal{V}|)+\log L)$ is a zero vector. Also, $\mathbbm{1}_{\{\mathbf{x}\in\mathcal{B}\}}$ . For a given input context $\vec{\mathbf{x}}$ , the embedded context has the form of + + $\begin{pmatrix}\psi^{\prime}(\mathbf{x}_{1})&\psi^{\prime}(\mathbf{x}_{2})&\dots&\psi^{\prime}(\mathbf{x}_{L-1})&\psi^{\prime}(\mathbf{x}_{L})\\ +\mathbf{0}&\mathbf{0}&\dots&\mathbf{0}&\mathbf{0}\\ +\mathbbm{1}_{\{\mathbf{x}_{1}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{1})&\mathbbm{1}_{\{\mathbf{x}_{2}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{2})&\dots&\mathbbm{1}_{\{\mathbf{x}_{L-1}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{L-1})&\mathbbm{1}_{\{\mathbf{x}_{L}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{L})\\ +\mathbf{0}&\mathbf{0}&\dots&\mathbf{0}&\mathbf{0}\end{pmatrix}.$ + +Position Encoding. +To allow the attention layer to access the position of the input tokens, we next add a position encoding to each input token. Define $\phi:[L]\to\{\pm 1\}^{\log L}$ be the binary encoding of numbers in $L$ . After adding the position encoding, the input context has the following form. + + $\displaystyle\Phi(\vec{\mathbf{x}}):=\begin{pmatrix}\psi^{\prime}(\mathbf{x}_{1})&\dots&\psi^{\prime}(\mathbf{x}_{L-1})&\psi^{\prime}(\mathbf{x}_{L})\\ +\mathbf{0}&\dots&\mathbf{0}&\mathbf{0}\\ +\mathbbm{1}_{\{\mathbf{x}_{1}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{1})&\dots&\mathbbm{1}_{\{\mathbf{x}_{L-1}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{L-1})&\mathbbm{1}_{\{\mathbf{x}_{L}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{L})\\ +\mathbf{0}&\dots&\mathbf{0}&\mathbf{0}\\ +\phi(1)&\dots&\phi(L-1)&\phi(L)\end{pmatrix}$ + +By construction, each column of the input context is in $\mathbb{R}^{d}$ , for some $d=O(\log(|\mathcal{V}|+\log L)$ . +Given the embedding of the input context, we now construct the SSM layer and the attention layer of the hybrid model. + +Mamba Layer. +We will need a state dimension $d_{s}$ equal to the number of bits per bit sequence. Let $\mathbf{W}_{A}=I-S$ be the block diagonal matrix, where $S$ is the permutation matrix satisfying + + $\displaystyle Sz=(z_{2},\dots,z_{d_{s}-1},z_{d_{s}},0),\forall z\in\mathbb{R}^{d_{s}}.$ + +We define $\mathbf{W}_{B}$ and $\mathbf{W}_{C}$ as follows, + + $\displaystyle\mathbf{W}_{B}\begin{pmatrix}\psi^{\prime}(\mathbf{x}_{i})\\ +\mathbf{0}\\ +\mathbbm{1}_{\{\mathbf{x}_{i}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{i})\\ +\mathbf{0}\\ +\phi^{\prime}(i)\end{pmatrix}=\begin{pmatrix}\mathbf{0}\\ +\mathbbm{1}_{\{\mathbf{x}_{i}\in\mathcal{B}\}}\psi^{\prime}(x_{i})\end{pmatrix},\quad\mathbf{W}_{C}\mathbf{v}=\begin{pmatrix}\mathbf{0}\\ +\mathbf{0}\\ +\mathbf{0}\\ +\mathbf{v}\\ +\mathbf{0}\end{pmatrix},$ + +and $\Delta(\mathbf{x})=\mathds{1}_{\{\mathbf{x}\in\mathcal{B}\}}$ . We claim the following guarantee for the constructed Mamba layer. + +Claim D.7. + +Let $\vec{\mathbf{x}}\in\mathcal{V}^{L}$ be a sequence of input contexts. Given the embedded context $\Phi(\vec{\mathbf{x}})$ , the SSM layer with parameters $\mathbf{W}_{A},\mathbf{W}_{B},\mathbf{W}_{C},\Delta(\mathbf{x})$ , has the following output + + $\displaystyle\begin{pmatrix}\psi^{\prime}(\mathbf{x}_{1})&\psi^{\prime}(\mathbf{x}_{2})&\dots&\psi^{\prime}(\mathbf{x}_{L-1})&\psi^{\prime}(\mathbf{x}_{L})\\ +\mathbf{0}&\mathbf{0}&\dots&\mathbf{0}&\mathbf{0}\\ +\mathbbm{1}_{\{\mathbf{x}_{1}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{1})&\mathbbm{1}_{\{\mathbf{x}_{2}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{2})&\dots&\mathbbm{1}_{\{\mathbf{x}_{L-1}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{L-1})&\mathbbm{1}_{\{\mathbf{x}_{L}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{L})\\ +\phi({n_{1}})&\phi({n_{2}})&\dots&\phi({n_{L-1}})&\phi({n_{L}})\\ +\mathbf{0}&\mathbf{0}&\dots&\mathbf{0}&\mathbf{0}\\ +\phi(1)&\phi(2)&\dots&\phi(L-1)&\phi(L)\end{pmatrix},$ + +where $n_{i}=v(\vec{\mathbf{x}}_{1:i})$ corresponds to token in $\mathcal{M}$ that matches the binary representation of the $0-1$ subsequence of $\vec{\mathbf{x}}_{1:i}$ . + +Proof of D.7. + +We initialize $H_{0}=0$ and do induction over $H_{t}$ . By our construction, only the third block of $H_{t}$ is non-zero. So, for the convenience of notation, we use $H_{t}$ to denote the third block of the state. Assuming that in time step $t$ , $H_{t}=\phi(n_{t})$ , we prove this for time step $t+1$ . Write $\phi(n_{t})=(z_{1},\dots,z_{d^{\prime}})$ . If $\mathbf{x}_{t+1}\not\in\{0,1\},$ then $\Delta(\mathbf{x}_{t+1})=0,$ which implies $H_{t+1}=H_{t}$ and $n_{t}=n_{t+1}$ . If $\mathbf{x}_{t+1}\in\{0,1\},$ then + $H_{t+1}=SH_{t}+\mathbf{x}_{t+1}=\phi(n_{t+1})$ . Thus, the third block of the matrix is always $\phi(n_{t})$ . This implies, after using an MLP layer to combine the output with the input sequence, we know that in the input context has the form of + + $\displaystyle\begin{pmatrix}\psi^{\prime}(\mathbf{x}_{1})&\psi^{\prime}(\mathbf{x}_{2})&\dots&\psi^{\prime}(\mathbf{x}_{L-1})&\psi^{\prime}(\mathbf{x}_{L})\\ +\mathbf{0}&\mathbf{0}&\dots&\mathbf{0}&\mathbf{0}\\ +\mathbbm{1}_{\{\mathbf{x}_{1}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{1})&\mathbbm{1}_{\{\mathbf{x}_{2}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{2})&\dots&\mathbbm{1}_{\{\mathbf{x}_{L-1}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{L-1})&\mathbbm{1}_{\{\mathbf{x}_{L}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{L})\\ +\phi({n_{1}})&\phi({n_{2}})&\dots&\phi({n_{L-1}})&\phi({n_{L}})\\ +\mathbf{0}&\mathbf{0}&\dots&\mathbf{0}&\mathbf{0}\\ +\phi(1)&\phi(2)&\dots&\phi(L-1)&\phi(L)\end{pmatrix},$ + +∎ + +Transformer Block. Based on the output of the Mamba layer, we will now construct a Transformer block that can solve the recall task. The Transformer block contains two layers. The first layer contains two heads, while the second layer contains only one head. + +We start with the construction of the first layer. The first layer maps each token $\mathbf{x}_{t}$ to $(\mathbf{x}_{t-1},\mathbf{x}_{t})^{\top}$ . We denote by $\mathrm{Attn}^{(1)},\mathrm{Attn}^{(2)}$ the two heads of the first attention layer $\mathrm{AT}^{(1)}$ . +For the first head, we define $\mathbf{W}_{q}^{(1)}=\mathbf{W}_{k}^{(1)}=0$ , $(B_{i})_{j}=-\infty\mathds{1}(j\neq i-1)$ . That is to say $\mathrm{Attn}^{(1)}$ is used to select the previous element for each position. We set $\mathbf{W}_{v}^{(1)}$ such that + + $\displaystyle\mathbf{W}_{v}^{(1)}\begin{pmatrix}\psi^{\prime}(\mathbf{x}_{i})\\ +\mathbf{0}\\ +\mathbbm{1}_{\{\mathbf{x}_{i}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{i})\\ +\mathbf{0}\\ +\phi^{\prime}(i)\end{pmatrix}=\begin{pmatrix}\mathbf{0}\\ +\psi^{\prime}(\mathbf{x}_{i})\\ +\mathbf{0}\\ +\mathbf{0}\\ +\mathbf{0}\end{pmatrix}$ + +For the second head, we set $\mathbf{W}_{q}^{(1)}=\mathbf{W}_{k}^{(1)}=0$ , with $(B_{i})_{j}=-\infty\mathds{1}(j\neq i).$ And we set $\mathbf{W}_{v}^{(2)}=I$ . This implies given any input sequence $\vec{\mathbf{x}}$ , we have + + $\displaystyle\mathrm{AT}^{(1)}(\mathrm{SSM}(\vec{\mathbf{x}}))=\begin{pmatrix}\psi^{\prime}(\mathbf{x}_{1})&\psi^{\prime}(\mathbf{x}_{2})&\dots&\psi^{\prime}(\mathbf{x}_{L-1})&\psi^{\prime}(\mathbf{x}_{L})\\ +\psi^{\prime}({\mathbf{x}_{0}})&\psi^{\prime}(\mathbf{x}_{1})&\dots&\psi^{\prime}(\mathbf{x}_{L-2})&\psi^{\prime}(\mathbf{x}_{L-1})\\ +\mathbbm{1}_{\{\mathbf{x}_{1}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{1})&\mathbbm{1}_{\{\mathbf{x}_{2}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{2})&\dots&\mathbbm{1}_{\{\mathbf{x}_{L-1}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{L-1})&\mathbbm{1}_{\{\mathbf{x}_{L}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{L})\\ +\phi({n_{1}})&\phi({n_{2}})&\dots&\phi({n_{L-1}})&\phi({n_{L}})\\ +\mathbf{0}&\mathbf{0}&\dots&\mathbf{0}&\mathbf{0}\\ +\phi(1)&\phi(2)&\dots&\phi(L-1)&\phi(L)\end{pmatrix}.$ + +That is to say, the first attention layer maps each column of the input into a query $\mathbf{x}_{i}^{q}=\phi(n_{i})$ , a key $\mathbf{x}_{i}^{k}=\psi^{\prime}(\mathbf{x}_{i-1})$ , and a value $\mathbf{x}_{i}^{v}=\psi^{\prime}(\mathbf{x}_{i})$ . +We next design the second layer $\mathrm{AT}^{(2)}$ that contains only a single head to perform the attention mechanism using the output of $\mathrm{AT}^{(1)}$ . +Let $\mathbf{W}_{q},\mathbf{W}_{k},\mathbf{W}_{v}$ be the weight matrices of the attention layer. + + $\displaystyle\mathbf{W}_{q}\begin{pmatrix}\psi^{\prime}(\mathbf{x}_{i})\\ +\psi^{\prime}({\mathbf{x}_{i-1}})\\ +\mathbbm{1}_{\{\mathbf{x}_{i}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{i})\\ +\phi({n_{i}})\\ +\mathbf{0}\\ +\phi(i)\end{pmatrix}=M\phi({n_{i}}),\quad\mathbf{W}_{k}\begin{pmatrix}\psi^{\prime}(\mathbf{x}_{i})\\ +\psi^{\prime}({\mathbf{x}_{i-1}})\\ +\mathbbm{1}_{\{\mathbf{x}_{i}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{i})\\ +\phi({n_{i}})\\ +\mathbf{0}\\ +\phi(i)\end{pmatrix}=\psi^{\prime}(\mathbf{x}_{i-1}),\quad\mathbf{W}_{v}\begin{pmatrix}\psi^{\prime}(\mathbf{x}_{i})\\ +\psi^{\prime}({\mathbf{x}_{i-1}})\\ +\mathbbm{1}_{\{\mathbf{x}_{i}\in\mathcal{B}\}}\psi^{\prime}(\mathbf{x}_{i})\\ +\phi({n_{i}})\\ +\mathbf{0}\\ +\phi(i)\end{pmatrix}=\begin{pmatrix}\mathbf{0}\\ +\mathbf{0}\\ +\mathbf{0}\\ +\mathbf{0}\\ +\psi^{\prime}(\mathbf{x}_{i})\\ +\mathbf{0}\end{pmatrix}$ + +We also add a bias $B$ for each position, so that the argmax is achieved at the last recall token. This implies the last output vector is + + $\displaystyle\sum_{i=1}^{L}\frac{\exp(M(\phi(n_{L})\phi(\mathbf{x}_{i-1})+B_{Li}))}{\sum_{i=1}^{L}\exp((M\phi(n_{L})\phi(\mathbf{x}_{i-1})+B_{Li}))}\begin{pmatrix}\mathbf{0}\\ +\mathbf{0}\\ +\mathbf{0}\\ +\mathbf{0}\\ +\psi^{\prime}(\mathbf{x}_{i})\\ +\mathbf{0}\end{pmatrix}=\begin{pmatrix}\mathbf{0}\\ +\mathbf{0}\\ +\mathbf{0}\\ +\mathbf{0}\\ +\psi^{\prime}(\mathbf{x}^{*}_{i+1})\\ +\mathbf{0}\end{pmatrix}$ + +This implies that the hybrid model outputs the correct recall token. We remark that when tokens in $\mathcal{M}$ are drawn uniformly, with probability $99\%$ , each token in $\mathcal{M}$ appears among the last $\tilde{O}(W)$ tokens in $\vec{\mathbf{x}}$ . This implies that instead of using a window of size $L$ , a window of size $\tilde{O}(W)$ is enough to get the same output. + +∎ + +D.5 Construction Implementations + +Both of these constructions are implemented in the code repository. We show here the input embedding and the output of these different constructions. Selective copying’s construction can be found in Figure 9 and Associative Recall with Decoding’s construction can be found in Figure 10. On interesting aspect of these constructions comes from their similarity and dissimilarity to the structures in learned models. Typically, learned models on selective copying learn to output the correct token at each position in the context, while the construction only provides the correct token in the last position. In contrast, the associative recall with decoding construction outputs the correct token at each position in the context, similar to learned models. This difference can be understood in when a task uses fixed positional differences. The selective copying construction uses a fixed mechanism to look-up a distance away from the last token, while learned models learn a more general relative positioning. Associative recall with decoding does not use relative positions, leading to a construction that more readily works at every token position. + +Figure 9: An example of the input/embedding and the output for selective copy. The aspects of the construction are kept in relatively similar positions in the implementation. Dark purple is -1, cyan is 0, and yellow is 1. + +Figure 10: An example of the input/embedding and the output for associative recall with decoding. The aspects of the construction are kept in relatively similar positions in the implementation. Dark purple is -1, cyan is 0, and yellow is 1. + +Appendix E Experiment Details + +E.1 Expressivity Experiments + +All experiments had identical learning rate sweeps. Additionally, all experiments were trained to convergence using an AdamW optimizer. We used 100 steps of warm-up followed by a linearly decaying learning rate. The learning rate sweep was over the maximum learning rate. + +Experiments were ran 11 times, with the mean performance shown along with the 10 and 90 percentiles as error bars. The positional encodings used where RoPE (although similar behavior was observed for learned positional encodings). Transformers are made from GPTNeoX Black et al. [2022], and SSM layers are coming from Mamba. + +Experiment sweeps were conducted across token dimension. The Mamba layers contained more parameters than the Transformer layers, hence why some figures stop sooner for pure Transformers than for hybrids, and pure SSMs extend beyond the hybrids. + +Experiments at this scale were done with input length 100, unless otherwise specified. Investigating the behavior of these different architectures further, some other parameters were varied. Specifically, we were interested in how the number of heads, or the side of the Mamba state, affects the performance of these models. A sweep of learning rates were tested from 1e-4 to 1e+0 by factors of $\sqrt{10}$ . All experiments were trained to convergence, typically with over 4x the compute after the loss plateaus. + +These models were also trained as seq-to-seq tasks rather than autoregressively. This was to prevent certain simple tasks from having simpler properties, such as becoming cyclic, which the models could learn instead. + +Selective Copy. For this task, we used number tokens $5$ through $10$ and 26 vocabulary tokens. Larger vocabulary sizes are explored below, although the behavior is similar. The default token dimension is $12$ ; this was the scale at which separations could be seen. At the scale of modern LLMs, this task is easily learned. + +Associative Recall with Decoding. This task proved less learnable than the others. The target dimensions swept were between 24 and 768. We used a bit sequence length of 5, so a vocabulary size of $2^{5}=32$ beyond these two bits. These experiments also specifically used three layer models rather than two layer ones; all two layer models never learned anything. + +Multi-Key Associative Recall. For this task, we used a query length of 2 and a vocabulary size of 8. This very small vocabulary came from needing to have seen the target pair in the context (of length 100). Any larger than $8^{2}=64$ keys would make failure to see the key occur with high probability. Similarly to selective copying, token dimensions were kept small, around 12. + +Needle in a Haystack. We used a vocabulary of 100 tokens, plus two marker tokens to indicate the position of the needle, and where the needle should be outputted. + +E.2 Additional Experiments + +Figure 11: Results of training the same architecture as the other, smaller vocabulary experiments, except with more tokens. The left figure shows results for a vocabulary of size 200, and the right figure shows results for a vocabulary of size 1000. + +Selective Copy. We also tried larger vocabulary sizes for this task; this is something not expected to substantially change behavior. While a larger vocabulary is definitely possible, results were not significantly different for vocabularies of 200 or 1000. See Figure 11. + +Results for changing number of heads and state dimension can be see in Figure 12. One of the results immediately apparent from these experiments is that when the number of heads is any higher than 1, all of the models perform terribly. This is a result of performing experiments at this tiny scale. The deeper reason for this is likely that, in standard implementations of multi-head attention, the square key, query, and value matrices are partitioned into rectangular blocks, which act as the different heads. This, in essence, makes each head only have a projection into a space that is a fraction of the original hidden state. At this small scale, any such decrease can easily ruin performance. For example, at token dimension $12$ and $4$ heads, each head projects into $\mathbb{R}^{3}$ . + +The same does not hold for increasing the dimension of the state inside of the Mamba model. However, increasing the state did not improve performance in any clear, monotonic way. This issue likely stems from optimization issues with the very large scale of the hidden state in the Mamba models as compared to the embedding dimension of the model. + +Figure 12: Results from training small models on Selective Copy. (a) changes the number of heads, and (b) increases the state dimension as described in Mamba. Defaults are token dimension 12, number of heads 1, and state dimension 1. Error bars are 0.1 and 0.9 quantiles around the mean. + +Additionally, we trained these small models on a more adversarial distribution, where according to the developed theorems, both the SSM and Transformer should perform poorly on half of the instances. For this distribution, half of the data points maintained a number token as their final token. This made the task difficult for SSMs to perform since they would need sufficient state to store all possible outputs for a different final token each time. On the other hand, half of the instances had very sparse number tokens, meaning that a Transformer with a small window for its attention would likely have the most recent number token outside of its context, hindering its performance. However, we should still expect the hybrid to perform well as both of these issues are mitigated. + +As we can see in Figure 13, the hybrid still does outperform both of the pure models, and the reverse hybrid. However, unlike the uniform distribution seen in Figure 4, the hybrid performs much better in this environment. This could be because of many reasons, one being that in a uniform distribution, it might be harder for the SSM to decern the task, whereas when half of the instances have the number token as the final token, the pattern may make itself more apparent. The Transformer still performs around as well in this distribution, possibly indicating that in both cases number tokens frequently are outside of the windows for the Transformer. + +When expanding the available context window to these models, we observe two important things. First, Transformers tend to get worse. This is different from what is predicted by our theory, indicating that there is an additional learnability difficulty for Transformers with larger contexts which hybrids avoid. Second, with large window sizes, the hybrid also frequently suffers, learning no better than the Transformer. This, again, is due to learnability issues rather than expressivity ones. + +Figure 13: Selective Copy trained on an adversarial distribution, where half of the instances have a number token as their final token (hard for SSM), and half of the instances embed their last number token early in the sequence (hard for Transformers). This distribution is empirically easier for SSMs than uniform. + +Figure 14: Results from training small models on Selective Copy. This changes the window of the context available to the model. + +Multi-Key Associative Recall. + +Increasing the number of heads and the size of the state tends to show both what is expected from the theory as well as the optimization issues more prevalent in the Selective Copy experiments. First, performance drops because of optimization issues, but after sufficient heads/state is added, performance again begins to grow. + +We can also see that when the side of the state increases, the pure SSM model grows in performance from a state dimension of 2 to a state dimension of 6, before decreasing again, likely again from these optimization issues. + +Also similar to selective copying, we see that as window size increases, the performance of the Transformer degrades, rather than improving. This is still due to learnability issues for long contexts with these Transformers, which hybrids mitigate. + +Figure 15: Results from training small models on Multi-Key Associative Recall. This changes the window of the context available to the model. + +Figure 16: Results from training small models on Multi-Key Associative Recall. (a) changes the number of heads, and (b) increases the state dimension as described in Mamba. Defaults are token dimension 12, number of heads 1, and state dimension 1. Error bars are 0.1 and 0.9 quantiles around the mean. + + Experimental support, please + view the build logs + for errors. Generated by + + L + A + T + E + + xml + + . + + Instructions for reporting errors + + We are continuing to improve HTML versions of papers, and your feedback helps enhance accessibility and mobile + support. To report errors in the HTML that will help us improve conversion and rendering, choose any of the + methods listed below: + + Click the "Report Issue" ( + + ) button, located in the page header. + + Tip: You can select the relevant text first, to include it in your report. + + Our team has already identified the following issues. We appreciate your time reviewing and reporting rendering errors we + may not have found yet. Your efforts will help us improve the HTML versions for all readers, because disability + should not be a barrier to accessing research. Thank you for your continued support in championing open access for + all. + + Have a free development cycle? Help support accessibility at arXiv! Our collaborators at LaTeXML maintain a list of packages that need conversion, and welcome developer contributions. + + We gratefully acknowledge support from + our major funders, + member institutions, , + and all contributors. + + About + · + Help + · + Contact + · + Subscribe + · + Copyright + · + Privacy + · + Accessibility + · + Operational Status (opens in new tab) + + Major funding support from + diff --git a/replay_a/claim1.json b/replay_a/claim1.json new file mode 100644 index 0000000000000000000000000000000000000000..a99864b80b94d219e8f0cc1ef5779489086a4a3a --- /dev/null +++ b/replay_a/claim1.json @@ -0,0 +1,747 @@ +{ + "task": "F(u,v) = u_v with Q = [m]; G(u)=u is injective (Asm 3.2)", + "grid": [ + { + "m": 2, + "V": 2, + "n_prefixes": 4, + "log2_states_required": 2.0, + "theory_m_log2_V": 2.0, + "abs_residual": 0.0, + "pairs_checked": 6, + "pairs_separated": 6, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 3, + "control_acc_closed_form": 0.875, + "control_acc_bruteforce": 0.875, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0 + ], + [ + 0, + 1 + ] + ] + }, + { + "m": 3, + "V": 2, + "n_prefixes": 8, + "log2_states_required": 3.0, + "theory_m_log2_V": 3.0, + "abs_residual": 0.0, + "pairs_checked": 28, + "pairs_separated": 28, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 7, + "control_acc_closed_form": 0.9583333333333334, + "control_acc_bruteforce": 0.9583333333333334, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 1 + ] + ] + }, + { + "m": 4, + "V": 2, + "n_prefixes": 16, + "log2_states_required": 4.0, + "theory_m_log2_V": 4.0, + "abs_residual": 0.0, + "pairs_checked": 120, + "pairs_separated": 120, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 15, + "control_acc_closed_form": 0.984375, + "control_acc_bruteforce": 0.984375, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 5, + "V": 2, + "n_prefixes": 32, + "log2_states_required": 5.0, + "theory_m_log2_V": 5.0, + "abs_residual": 0.0, + "pairs_checked": 496, + "pairs_separated": 496, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 31, + "control_acc_closed_form": 0.99375, + "control_acc_bruteforce": 0.99375, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 6, + "V": 2, + "n_prefixes": 64, + "log2_states_required": 6.0, + "theory_m_log2_V": 6.0, + "abs_residual": 0.0, + "pairs_checked": 2016, + "pairs_separated": 2016, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 63, + "control_acc_closed_form": 0.9973958333333334, + "control_acc_bruteforce": 0.9973958333333334, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 7, + "V": 2, + "n_prefixes": 128, + "log2_states_required": 7.0, + "theory_m_log2_V": 7.0, + "abs_residual": 0.0, + "pairs_checked": 8128, + "pairs_separated": 8128, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 127, + "control_acc_closed_form": 0.9988839285714286, + "control_acc_bruteforce": 0.9988839285714286, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 8, + "V": 2, + "n_prefixes": 256, + "log2_states_required": 8.0, + "theory_m_log2_V": 8.0, + "abs_residual": 0.0, + "pairs_checked": 32640, + "pairs_separated": 32640, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 255, + "control_acc_closed_form": 0.99951171875, + "control_acc_bruteforce": 0.99951171875, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 9, + "V": 2, + "n_prefixes": 512, + "log2_states_required": 9.0, + "theory_m_log2_V": 9.0, + "abs_residual": 0.0, + "pairs_checked": 130816, + "pairs_separated": 130816, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 511, + "control_acc_closed_form": 0.9997829861111112 + }, + { + "m": 10, + "V": 2, + "n_prefixes": 1024, + "log2_states_required": 10.0, + "theory_m_log2_V": 10.0, + "abs_residual": 0.0, + "control_states": 1023, + "control_acc_closed_form": 0.99990234375 + }, + { + "m": 2, + "V": 3, + "n_prefixes": 9, + "log2_states_required": 3.169925001442312, + "theory_m_log2_V": 3.169925001442312, + "abs_residual": 0.0, + "pairs_checked": 36, + "pairs_separated": 36, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 8, + "control_acc_closed_form": 0.9444444444444444, + "control_acc_bruteforce": 0.9444444444444444, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0 + ], + [ + 0, + 1 + ] + ] + }, + { + "m": 3, + "V": 3, + "n_prefixes": 27, + "log2_states_required": 4.754887502163468, + "theory_m_log2_V": 4.754887502163468, + "abs_residual": 0.0, + "pairs_checked": 351, + "pairs_separated": 351, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 26, + "control_acc_closed_form": 0.9876543209876543, + "control_acc_bruteforce": 0.9876543209876543, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 1 + ] + ] + }, + { + "m": 4, + "V": 3, + "n_prefixes": 81, + "log2_states_required": 6.339850002884624, + "theory_m_log2_V": 6.339850002884624, + "abs_residual": 0.0, + "pairs_checked": 3240, + "pairs_separated": 3240, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 80, + "control_acc_closed_form": 0.9969135802469136, + "control_acc_bruteforce": 0.9969135802469136, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 5, + "V": 3, + "n_prefixes": 243, + "log2_states_required": 7.924812503605781, + "theory_m_log2_V": 7.92481250360578, + "abs_residual": 8.881784197001252e-16, + "pairs_checked": 29403, + "pairs_separated": 29403, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 242, + "control_acc_closed_form": 0.9991769547325103, + "control_acc_bruteforce": 0.9991769547325103, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 6, + "V": 3, + "n_prefixes": 729, + "log2_states_required": 9.509775004326936, + "theory_m_log2_V": 9.509775004326936, + "abs_residual": 0.0, + "control_states": 728, + "control_acc_closed_form": 0.9997713763145862 + }, + { + "m": 7, + "V": 3, + "n_prefixes": 2187, + "log2_states_required": 11.094737505048093, + "theory_m_log2_V": 11.094737505048093, + "abs_residual": 0.0, + "control_states": 2186, + "control_acc_closed_form": 0.9999346789470246 + }, + { + "m": 2, + "V": 4, + "n_prefixes": 16, + "log2_states_required": 4.0, + "theory_m_log2_V": 4.0, + "abs_residual": 0.0, + "pairs_checked": 120, + "pairs_separated": 120, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 15, + "control_acc_closed_form": 0.96875, + "control_acc_bruteforce": 0.96875, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0 + ], + [ + 0, + 1 + ] + ] + }, + { + "m": 3, + "V": 4, + "n_prefixes": 64, + "log2_states_required": 6.0, + "theory_m_log2_V": 6.0, + "abs_residual": 0.0, + "pairs_checked": 2016, + "pairs_separated": 2016, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 63, + "control_acc_closed_form": 0.9947916666666666, + "control_acc_bruteforce": 0.9947916666666666, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 1 + ] + ] + }, + { + "m": 4, + "V": 4, + "n_prefixes": 256, + "log2_states_required": 8.0, + "theory_m_log2_V": 8.0, + "abs_residual": 0.0, + "pairs_checked": 32640, + "pairs_separated": 32640, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 255, + "control_acc_closed_form": 0.9990234375, + "control_acc_bruteforce": 0.9990234375, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 5, + "V": 4, + "n_prefixes": 1024, + "log2_states_required": 10.0, + "theory_m_log2_V": 10.0, + "abs_residual": 0.0, + "control_states": 1023, + "control_acc_closed_form": 0.9998046875 + }, + { + "m": 6, + "V": 4, + "n_prefixes": 4096, + "log2_states_required": 12.0, + "theory_m_log2_V": 12.0, + "abs_residual": 0.0, + "control_states": 4095, + "control_acc_closed_form": 0.9999593098958334 + } + ], + "max_residual_log2_states": 8.881784197001252e-16, + "max_control_gap": 0.0, + "all_pairs_separated_everywhere": true, + "linear_in_m_fit": { + "2": { + "fitted_slope": 1.0, + "theory_slope_log2_V": 1.0, + "slope_abs_err": 0.0, + "intercept": 1.6770126117963062e-15, + "R2": 1.0, + "max_abs_residual": 1.7763568394002505e-15 + }, + "3": { + "fitted_slope": 1.5849625007211565, + "theory_slope_log2_V": 1.584962500721156, + "slope_abs_err": 4.440892098500626e-16, + "intercept": -4.520058619021783e-15, + "R2": 1.0, + "max_abs_residual": 3.552713678800501e-15 + }, + "4": { + "fitted_slope": 2.0, + "theory_slope_log2_V": 2.0, + "slope_abs_err": 0.0, + "intercept": -1.3107111616019684e-15, + "R2": 1.0, + "max_abs_residual": 1.7763568394002505e-15 + } + }, + "exhaustive_accuracy_curves": [ + { + "m": 2, + "V": 2, + "n_prefixes": 4, + "partitions_enumerated": "Bell(4)", + "A_star": { + "1": 0.5, + "2": 0.75, + "3": 0.875, + "4": 1.0 + }, + "min_states_acc_1.0": 4, + "min_states_acc_0.875": 3, + "min_states_acc_0.9": 4, + "min_states_acc_0.5": 1, + "A_star_at_n_minus_1": 0.875, + "closed_form_at_n_minus_1": 0.875 + }, + { + "m": 3, + "V": 2, + "n_prefixes": 8, + "partitions_enumerated": "Bell(8)", + "A_star": { + "1": 0.5, + "2": 0.75, + "3": 0.7916666666666666, + "4": 0.8333333333333334, + "5": 0.875, + "6": 0.9166666666666666, + "7": 0.9583333333333334, + "8": 1.0 + }, + "min_states_acc_1.0": 8, + "min_states_acc_0.875": 5, + "min_states_acc_0.9": 6, + "min_states_acc_0.5": 1, + "A_star_at_n_minus_1": 0.9583333333333334, + "closed_form_at_n_minus_1": 0.9583333333333334 + }, + { + "m": 2, + "V": 3, + "n_prefixes": 9, + "partitions_enumerated": "Bell(9)", + "A_star": { + "1": 0.3333333333333333, + "2": 0.5555555555555556, + "3": 0.6666666666666666, + "4": 0.7222222222222222, + "5": 0.7777777777777778, + "6": 0.8333333333333334, + "7": 0.8888888888888888, + "8": 0.9444444444444444, + "9": 1.0 + }, + "min_states_acc_1.0": 9, + "min_states_acc_0.875": 7, + "min_states_acc_0.9": 8, + "min_states_acc_0.5": 2, + "A_star_at_n_minus_1": 0.9444444444444444, + "closed_form_at_n_minus_1": 0.9444444444444444 + } + ], + "exhaustive_min_states_equals_Vm": true, + "max_curve_control_gap": 0.0, + "lemma_3_5": [ + { + "k": 2, + "sizes": [ + 2, + 3 + ], + "product_bound": 6, + "reachable_product_states": 2, + "sequences_tested": 510, + "behaviour_mismatches": 0, + "bound_respected": true + }, + { + "k": 3, + "sizes": [ + 2, + 2, + 2 + ], + "product_bound": 8, + "reachable_product_states": 2, + "sequences_tested": 254, + "behaviour_mismatches": 0, + "bound_respected": true + }, + { + "k": 2, + "sizes": [ + 3, + 4 + ], + "product_bound": 12, + "reachable_product_states": 6, + "sequences_tested": 363, + "behaviour_mismatches": 0, + "bound_respected": true + }, + { + "k": 4, + "sizes": [ + 2, + 2, + 2, + 2 + ], + "product_bound": 16, + "reachable_product_states": 6, + "sequences_tested": 126, + "behaviour_mismatches": 0, + "bound_respected": true + }, + { + "k": 3, + "sizes": [ + 2, + 3, + 2 + ], + "product_bound": 12, + "reachable_product_states": 2, + "sequences_tested": 120, + "behaviour_mismatches": 0, + "bound_respected": true + } + ], + "lemma_3_5_total_mismatches": 0, + "lemma_3_5_bound_always_respected": true, + "lemma_3_5_tightness": [ + { + "k": 2, + "sizes": [ + 2, + 3 + ], + "product_bound": 6, + "reachable_product_states": 6, + "sequences_tested": 1092, + "behaviour_mismatches": 0, + "bound_respected": true, + "bound_is_tight": true + }, + { + "k": 2, + "sizes": [ + 3, + 3 + ], + "product_bound": 9, + "reachable_product_states": 9, + "sequences_tested": 1092, + "behaviour_mismatches": 0, + "bound_respected": true, + "bound_is_tight": true + }, + { + "k": 3, + "sizes": [ + 2, + 2, + 2 + ], + "product_bound": 8, + "reachable_product_states": 8, + "sequences_tested": 1092, + "behaviour_mismatches": 0, + "bound_respected": true, + "bound_is_tight": true + } + ], + "lemma_3_5_tight_witnesses": 3, + "printed_bound_audit": { + "n_admissible_configs": 1296, + "max_literal_bound_over_admissible_grid": 0.0, + "literal_bound_ever_positive": false, + "min_appendix_bound_on_instantiation": 0.6628711136008072, + "appendix_slope_in_m": { + "2": { + "fitted_slope": 0.3314355568004036, + "closed_form_slope": 0.3314355568004036, + "abs_err": 0.0 + }, + "4": { + "fitted_slope": 1.2064355568004035, + "closed_form_slope": 1.2064355568004035, + "abs_err": 0.0 + }, + "8": { + "fitted_slope": 2.0814355568004035, + "closed_form_slope": 2.0814355568004035, + "abs_err": 0.0 + }, + "16": { + "fitted_slope": 2.9564355568004044, + "closed_form_slope": 2.9564355568004035, + "abs_err": 8.881784197001252e-16 + }, + "26": { + "fitted_slope": 3.569320310173859, + "closed_form_slope": 3.569320310173859, + "abs_err": 0.0 + }, + "32": { + "fitted_slope": 3.831435556800403, + "closed_form_slope": 3.8314355568004035, + "abs_err": 4.440892098500626e-16 + } + }, + "note": "literal = m*log2|V| - q*log2|Y| (Thm 3.3 as printed); appendix = m*log2|V| - q*(H2(1/8)+log2|Y|/8) (proof, err<1/8)" + }, + "one_state_guessing_accuracy": { + "2": 0.5, + "3": 0.3333333333333333, + "4": 0.25, + "8": 0.125, + "26": 0.038461538461538464, + "32": 0.03125 + } +} \ No newline at end of file diff --git a/replay_a/claim2.json b/replay_a/claim2.json new file mode 100644 index 0000000000000000000000000000000000000000..c97b9ad48a1724a80cbe909fe32b448c3ce5ce09 --- /dev/null +++ b/replay_a/claim2.json @@ -0,0 +1,1307 @@ +{ + "numerical_gate": { + "max_abs_matmul_minus_einsum": 1.7763568394002505e-15, + "all_forward_outputs_finite": true, + "max_abs_logit": 2.1417444637761154, + "note": "Accelerate RuntimeWarnings are spurious; verified here" + }, + "receptive_field_sweep": { + "configs_tested": 960, + "violations_outside_receptive_field": 0, + "max_abs_delta_outside_receptive_field": 0.0, + "configs_with_no_effect_just_inside_rf": 0, + "sample_rows": [ + { + "L": 16, + "k": 1, + "windows": [ + 10 + ], + "sum_W": 10, + "rf": 10, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.28581609351223836 + }, + { + "L": 16, + "k": 1, + "windows": [ + 10 + ], + "sum_W": 10, + "rf": 10, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.03444175010002626 + }, + { + "L": 16, + "k": 1, + "windows": [ + 3 + ], + "sum_W": 3, + "rf": 3, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.2040553116237531 + }, + { + "L": 16, + "k": 1, + "windows": [ + 12 + ], + "sum_W": 12, + "rf": 12, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.014197238946864754 + }, + { + "L": 16, + "k": 1, + "windows": [ + 11 + ], + "sum_W": 11, + "rf": 11, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.14570162697464065 + }, + { + "L": 16, + "k": 1, + "windows": [ + 5 + ], + "sum_W": 5, + "rf": 5, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.32986723460250333 + }, + { + "L": 16, + "k": 1, + "windows": [ + 9 + ], + "sum_W": 9, + "rf": 9, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.1968814430783481 + }, + { + "L": 16, + "k": 1, + "windows": [ + 7 + ], + "sum_W": 7, + "rf": 7, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.030041848233613166 + }, + { + "L": 16, + "k": 1, + "windows": [ + 9 + ], + "sum_W": 9, + "rf": 9, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.2698237935195511 + }, + { + "L": 16, + "k": 1, + "windows": [ + 4 + ], + "sum_W": 4, + "rf": 4, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.14797709583183694 + }, + { + "L": 16, + "k": 1, + "windows": [ + 12 + ], + "sum_W": 12, + "rf": 12, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.07127460286707321 + }, + { + "L": 16, + "k": 1, + "windows": [ + 14 + ], + "sum_W": 14, + "rf": 14, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.10168374636975316 + }, + { + "L": 16, + "k": 1, + "windows": [ + 9 + ], + "sum_W": 9, + "rf": 9, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.003750870881970958 + }, + { + "L": 16, + "k": 1, + "windows": [ + 2 + ], + "sum_W": 2, + "rf": 2, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 2.407640189683196 + }, + { + "L": 16, + "k": 1, + "windows": [ + 11 + ], + "sum_W": 11, + "rf": 11, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.28417810626585305 + }, + { + "L": 16, + "k": 1, + "windows": [ + 2 + ], + "sum_W": 2, + "rf": 2, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.5150917655838505 + }, + { + "L": 16, + "k": 1, + "windows": [ + 1 + ], + "sum_W": 1, + "rf": 1, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 2.026287079665709 + }, + { + "L": 16, + "k": 1, + "windows": [ + 5 + ], + "sum_W": 5, + "rf": 5, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.21853871993517676 + }, + { + "L": 16, + "k": 1, + "windows": [ + 9 + ], + "sum_W": 9, + "rf": 9, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.5761418306350206 + }, + { + "L": 16, + "k": 1, + "windows": [ + 10 + ], + "sum_W": 10, + "rf": 10, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.006504128634520656 + }, + { + "L": 16, + "k": 1, + "windows": [ + 1 + ], + "sum_W": 1, + "rf": 1, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 3.0536991633981563 + }, + { + "L": 16, + "k": 1, + "windows": [ + 1 + ], + "sum_W": 1, + "rf": 1, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 2.1397172447617256 + }, + { + "L": 16, + "k": 1, + "windows": [ + 10 + ], + "sum_W": 10, + "rf": 10, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.04804122082565855 + }, + { + "L": 16, + "k": 1, + "windows": [ + 7 + ], + "sum_W": 7, + "rf": 7, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.701760784501624 + }, + { + "L": 16, + "k": 1, + "windows": [ + 13 + ], + "sum_W": 13, + "rf": 13, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.1355528677544809 + }, + { + "L": 16, + "k": 1, + "windows": [ + 7 + ], + "sum_W": 7, + "rf": 7, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.48194231490071804 + }, + { + "L": 16, + "k": 1, + "windows": [ + 13 + ], + "sum_W": 13, + "rf": 13, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.0814501808086524 + }, + { + "L": 16, + "k": 1, + "windows": [ + 6 + ], + "sum_W": 6, + "rf": 6, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.32926605957010213 + }, + { + "L": 16, + "k": 1, + "windows": [ + 14 + ], + "sum_W": 14, + "rf": 14, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.10376140965519931 + }, + { + "L": 16, + "k": 1, + "windows": [ + 3 + ], + "sum_W": 3, + "rf": 3, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.15220621062657136 + }, + { + "L": 16, + "k": 1, + "windows": [ + 9 + ], + "sum_W": 9, + "rf": 9, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.10168883280928198 + }, + { + "L": 16, + "k": 1, + "windows": [ + 8 + ], + "sum_W": 8, + "rf": 8, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.2597069821704449 + }, + { + "L": 16, + "k": 1, + "windows": [ + 11 + ], + "sum_W": 11, + "rf": 11, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.38062082529689295 + }, + { + "L": 16, + "k": 1, + "windows": [ + 1 + ], + "sum_W": 1, + "rf": 1, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 1.6831235344120234 + }, + { + "L": 16, + "k": 1, + "windows": [ + 14 + ], + "sum_W": 14, + "rf": 14, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.02255092704988093 + }, + { + "L": 16, + "k": 1, + "windows": [ + 3 + ], + "sum_W": 3, + "rf": 3, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.1579483465578484 + }, + { + "L": 16, + "k": 1, + "windows": [ + 14 + ], + "sum_W": 14, + "rf": 14, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.032733635175017234 + }, + { + "L": 16, + "k": 1, + "windows": [ + 10 + ], + "sum_W": 10, + "rf": 10, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.03131013093506363 + }, + { + "L": 16, + "k": 1, + "windows": [ + 14 + ], + "sum_W": 14, + "rf": 14, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.07259073385286363 + }, + { + "L": 16, + "k": 1, + "windows": [ + 5 + ], + "sum_W": 5, + "rf": 5, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.1621850317171365 + } + ] + }, + "local_sensitivity_witnesses": [ + { + "L": 8, + "seed": 0, + "R_measured": 7, + "R_theory_max": 7, + "R_claimed_in_Thm_4_2": 4, + "same_in_every_window_below_R": true, + "F_x": 28, + "F_xprime": 16, + "outputs_differ": true + }, + { + "L": 8, + "seed": 1, + "R_measured": 7, + "R_theory_max": 7, + "R_claimed_in_Thm_4_2": 4, + "same_in_every_window_below_R": true, + "F_x": 9, + "F_xprime": 31, + "outputs_differ": true + }, + { + "L": 8, + "seed": 2, + "R_measured": 7, + "R_theory_max": 7, + "R_claimed_in_Thm_4_2": 4, + "same_in_every_window_below_R": true, + "F_x": 13, + "F_xprime": 18, + "outputs_differ": true + }, + { + "L": 8, + "seed": 3, + "R_measured": 7, + "R_theory_max": 7, + "R_claimed_in_Thm_4_2": 4, + "same_in_every_window_below_R": true, + "F_x": 19, + "F_xprime": 13, + "outputs_differ": true + }, + { + "L": 8, + "seed": 4, + "R_measured": 7, + "R_theory_max": 7, + "R_claimed_in_Thm_4_2": 4, + "same_in_every_window_below_R": true, + "F_x": 19, + "F_xprime": 32, + "outputs_differ": true + }, + { + "L": 16, + "seed": 0, + "R_measured": 15, + "R_theory_max": 15, + "R_claimed_in_Thm_4_2": 8, + "same_in_every_window_below_R": true, + "F_x": 27, + "F_xprime": 8, + "outputs_differ": true + }, + { + "L": 16, + "seed": 1, + "R_measured": 15, + "R_theory_max": 15, + "R_claimed_in_Thm_4_2": 8, + "same_in_every_window_below_R": true, + "F_x": 19, + "F_xprime": 15, + "outputs_differ": true + }, + { + "L": 16, + "seed": 2, + "R_measured": 15, + "R_theory_max": 15, + "R_claimed_in_Thm_4_2": 8, + "same_in_every_window_below_R": true, + "F_x": 10, + "F_xprime": 30, + "outputs_differ": true + }, + { + "L": 16, + "seed": 3, + "R_measured": 15, + "R_theory_max": 15, + "R_claimed_in_Thm_4_2": 8, + "same_in_every_window_below_R": true, + "F_x": 29, + "F_xprime": 30, + "outputs_differ": true + }, + { + "L": 16, + "seed": 4, + "R_measured": 15, + "R_theory_max": 15, + "R_claimed_in_Thm_4_2": 8, + "same_in_every_window_below_R": true, + "F_x": 24, + "F_xprime": 18, + "outputs_differ": true + }, + { + "L": 32, + "seed": 0, + "R_measured": 31, + "R_theory_max": 31, + "R_claimed_in_Thm_4_2": 16, + "same_in_every_window_below_R": true, + "F_x": 28, + "F_xprime": 23, + "outputs_differ": true + }, + { + "L": 32, + "seed": 1, + "R_measured": 31, + "R_theory_max": 31, + "R_claimed_in_Thm_4_2": 16, + "same_in_every_window_below_R": true, + "F_x": 13, + "F_xprime": 23, + "outputs_differ": true + }, + { + "L": 32, + "seed": 2, + "R_measured": 31, + "R_theory_max": 31, + "R_claimed_in_Thm_4_2": 16, + "same_in_every_window_below_R": true, + "F_x": 18, + "F_xprime": 14, + "outputs_differ": true + }, + { + "L": 32, + "seed": 3, + "R_measured": 31, + "R_theory_max": 31, + "R_claimed_in_Thm_4_2": 16, + "same_in_every_window_below_R": true, + "F_x": 22, + "F_xprime": 10, + "outputs_differ": true + }, + { + "L": 32, + "seed": 4, + "R_measured": 31, + "R_theory_max": 31, + "R_claimed_in_Thm_4_2": 16, + "same_in_every_window_below_R": true, + "F_x": 13, + "F_xprime": 22, + "outputs_differ": true + }, + { + "L": 64, + "seed": 0, + "R_measured": 63, + "R_theory_max": 63, + "R_claimed_in_Thm_4_2": 32, + "same_in_every_window_below_R": true, + "F_x": 11, + "F_xprime": 19, + "outputs_differ": true + }, + { + "L": 64, + "seed": 1, + "R_measured": 63, + "R_theory_max": 63, + "R_claimed_in_Thm_4_2": 32, + "same_in_every_window_below_R": true, + "F_x": 7, + "F_xprime": 32, + "outputs_differ": true + }, + { + "L": 64, + "seed": 2, + "R_measured": 63, + "R_theory_max": 63, + "R_claimed_in_Thm_4_2": 32, + "same_in_every_window_below_R": true, + "F_x": 30, + "F_xprime": 8, + "outputs_differ": true + }, + { + "L": 64, + "seed": 3, + "R_measured": 63, + "R_theory_max": 63, + "R_claimed_in_Thm_4_2": 32, + "same_in_every_window_below_R": true, + "F_x": 10, + "F_xprime": 19, + "outputs_differ": true + }, + { + "L": 64, + "seed": 4, + "R_measured": 63, + "R_theory_max": 63, + "R_claimed_in_Thm_4_2": 32, + "same_in_every_window_below_R": true, + "F_x": 30, + "F_xprime": 18, + "outputs_differ": true + }, + { + "L": 128, + "seed": 0, + "R_measured": 127, + "R_theory_max": 127, + "R_claimed_in_Thm_4_2": 64, + "same_in_every_window_below_R": true, + "F_x": 20, + "F_xprime": 8, + "outputs_differ": true + }, + { + "L": 128, + "seed": 1, + "R_measured": 127, + "R_theory_max": 127, + "R_claimed_in_Thm_4_2": 64, + "same_in_every_window_below_R": true, + "F_x": 7, + "F_xprime": 24, + "outputs_differ": true + }, + { + "L": 128, + "seed": 2, + "R_measured": 127, + "R_theory_max": 127, + "R_claimed_in_Thm_4_2": 64, + "same_in_every_window_below_R": true, + "F_x": 25, + "F_xprime": 17, + "outputs_differ": true + }, + { + "L": 128, + "seed": 3, + "R_measured": 127, + "R_theory_max": 127, + "R_claimed_in_Thm_4_2": 64, + "same_in_every_window_below_R": true, + "F_x": 18, + "F_xprime": 7, + "outputs_differ": true + }, + { + "L": 128, + "seed": 4, + "R_measured": 127, + "R_theory_max": 127, + "R_claimed_in_Thm_4_2": 64, + "same_in_every_window_below_R": true, + "F_x": 17, + "F_xprime": 16, + "outputs_differ": true + }, + { + "L": 256, + "seed": 0, + "R_measured": 255, + "R_theory_max": 255, + "R_claimed_in_Thm_4_2": 128, + "same_in_every_window_below_R": true, + "F_x": 16, + "F_xprime": 28, + "outputs_differ": true + }, + { + "L": 256, + "seed": 1, + "R_measured": 255, + "R_theory_max": 255, + "R_claimed_in_Thm_4_2": 128, + "same_in_every_window_below_R": true, + "F_x": 7, + "F_xprime": 12, + "outputs_differ": true + }, + { + "L": 256, + "seed": 2, + "R_measured": 255, + "R_theory_max": 255, + "R_claimed_in_Thm_4_2": 128, + "same_in_every_window_below_R": true, + "F_x": 8, + "F_xprime": 20, + "outputs_differ": true + }, + { + "L": 256, + "seed": 3, + "R_measured": 255, + "R_theory_max": 255, + "R_claimed_in_Thm_4_2": 128, + "same_in_every_window_below_R": true, + "F_x": 7, + "F_xprime": 29, + "outputs_differ": true + }, + { + "L": 256, + "seed": 4, + "R_measured": 255, + "R_theory_max": 255, + "R_claimed_in_Thm_4_2": 128, + "same_in_every_window_below_R": true, + "F_x": 20, + "F_xprime": 13, + "outputs_differ": true + } + ], + "all_witnesses_valid": true, + "R_measured_equals_L_minus_1_everywhere": true, + "witness_indistinguishability": { + "16": { + "pairs": [ + { + "L": 16, + "R": 15, + "k": 1, + "windows_short": [ + 14 + ], + "sum_W_short": 14, + "rf_short": 14, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16 + ], + "sum_W_long": 16, + "max_abs_delta_long": 0.1769761959118361 + }, + { + "L": 16, + "R": 15, + "k": 2, + "windows_short": [ + 7, + 7 + ], + "sum_W_short": 14, + "rf_short": 13, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16, + 16 + ], + "sum_W_long": 32, + "max_abs_delta_long": 0.1321795520296115 + }, + { + "L": 16, + "R": 15, + "k": 3, + "windows_short": [ + 4, + 4, + 4 + ], + "sum_W_short": 12, + "rf_short": 10, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16, + 16, + 16 + ], + "sum_W_long": 48, + "max_abs_delta_long": 0.8786377218884379 + }, + { + "L": 16, + "R": 15, + "k": 1, + "windows_short": [ + 14 + ], + "sum_W_short": 14, + "rf_short": 14, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16 + ], + "sum_W_long": 16, + "max_abs_delta_long": 0.0552757776663132 + }, + { + "L": 16, + "R": 15, + "k": 2, + "windows_short": [ + 7, + 7 + ], + "sum_W_short": 14, + "rf_short": 13, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16, + 16 + ], + "sum_W_long": 32, + "max_abs_delta_long": 0.043267705611890306 + }, + { + "L": 16, + "R": 15, + "k": 3, + "windows_short": [ + 4, + 4, + 4 + ], + "sum_W_short": 12, + "rf_short": 10, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16, + 16, + 16 + ], + "sum_W_long": 48, + "max_abs_delta_long": 0.766364411932395 + }, + { + "L": 16, + "R": 15, + "k": 1, + "windows_short": [ + 14 + ], + "sum_W_short": 14, + "rf_short": 14, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16 + ], + "sum_W_long": 16, + "max_abs_delta_long": 0.05877028865718653 + }, + { + "L": 16, + "R": 15, + "k": 2, + "windows_short": [ + 7, + 7 + ], + "sum_W_short": 14, + "rf_short": 13, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16, + 16 + ], + "sum_W_long": 32, + "max_abs_delta_long": 0.3569878953567704 + }, + { + "L": 16, + "R": 15, + "k": 3, + "windows_short": [ + 4, + 4, + 4 + ], + "sum_W_short": 12, + "rf_short": 10, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16, + 16, + 16 + ], + "sum_W_long": 48, + "max_abs_delta_long": 0.5521298147300295 + } + ], + "n_short_window_tests": 9, + "max_abs_delta_when_sumW_below_R": 0.0, + "n_long_window_tests": 9, + "n_long_window_separated": 9 + }, + "32": { + "pairs": [ + { + "L": 32, + "R": 31, + "k": 1, + "windows_short": [ + 30 + ], + "sum_W_short": 30, + "rf_short": 30, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32 + ], + "sum_W_long": 32, + "max_abs_delta_long": 0.03534840754759783 + }, + { + "L": 32, + "R": 31, + "k": 2, + "windows_short": [ + 15, + 15 + ], + "sum_W_short": 30, + "rf_short": 29, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32, + 32 + ], + "sum_W_long": 64, + "max_abs_delta_long": 0.02080493890641305 + }, + { + "L": 32, + "R": 31, + "k": 3, + "windows_short": [ + 10, + 10, + 10 + ], + "sum_W_short": 30, + "rf_short": 28, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32, + 32, + 32 + ], + "sum_W_long": 96, + "max_abs_delta_long": 0.152554442308942 + }, + { + "L": 32, + "R": 31, + "k": 1, + "windows_short": [ + 30 + ], + "sum_W_short": 30, + "rf_short": 30, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32 + ], + "sum_W_long": 32, + "max_abs_delta_long": 0.16234324137652778 + }, + { + "L": 32, + "R": 31, + "k": 2, + "windows_short": [ + 15, + 15 + ], + "sum_W_short": 30, + "rf_short": 29, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32, + 32 + ], + "sum_W_long": 64, + "max_abs_delta_long": 0.3830170389889227 + }, + { + "L": 32, + "R": 31, + "k": 3, + "windows_short": [ + 10, + 10, + 10 + ], + "sum_W_short": 30, + "rf_short": 28, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32, + 32, + 32 + ], + "sum_W_long": 96, + "max_abs_delta_long": 0.12814149073121756 + }, + { + "L": 32, + "R": 31, + "k": 1, + "windows_short": [ + 30 + ], + "sum_W_short": 30, + "rf_short": 30, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32 + ], + "sum_W_long": 32, + "max_abs_delta_long": 0.06166132814076597 + }, + { + "L": 32, + "R": 31, + "k": 2, + "windows_short": [ + 15, + 15 + ], + "sum_W_short": 30, + "rf_short": 29, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32, + 32 + ], + "sum_W_long": 64, + "max_abs_delta_long": 0.13876098797379044 + }, + { + "L": 32, + "R": 31, + "k": 3, + "windows_short": [ + 10, + 10, + 10 + ], + "sum_W_short": 30, + "rf_short": 28, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32, + 32, + 32 + ], + "sum_W_long": 96, + "max_abs_delta_long": 0.08809620618693226 + } + ], + "n_short_window_tests": 9, + "max_abs_delta_when_sumW_below_R": 0.0, + "n_long_window_tests": 9, + "n_long_window_separated": 9 + }, + "64": { + "pairs": [ + { + "L": 64, + "R": 63, + "k": 1, + "windows_short": [ + 62 + ], + "sum_W_short": 62, + "rf_short": 62, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64 + ], + "sum_W_long": 64, + "max_abs_delta_long": 0.03295132835513548 + }, + { + "L": 64, + "R": 63, + "k": 2, + "windows_short": [ + 31, + 31 + ], + "sum_W_short": 62, + "rf_short": 61, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64, + 64 + ], + "sum_W_long": 128, + "max_abs_delta_long": 0.36324841338320957 + }, + { + "L": 64, + "R": 63, + "k": 3, + "windows_short": [ + 20, + 20, + 20 + ], + "sum_W_short": 60, + "rf_short": 58, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64, + 64, + 64 + ], + "sum_W_long": 192, + "max_abs_delta_long": 0.08466638568402152 + }, + { + "L": 64, + "R": 63, + "k": 1, + "windows_short": [ + 62 + ], + "sum_W_short": 62, + "rf_short": 62, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64 + ], + "sum_W_long": 64, + "max_abs_delta_long": 0.23067972072479592 + }, + { + "L": 64, + "R": 63, + "k": 2, + "windows_short": [ + 31, + 31 + ], + "sum_W_short": 62, + "rf_short": 61, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64, + 64 + ], + "sum_W_long": 128, + "max_abs_delta_long": 0.08941496277410776 + }, + { + "L": 64, + "R": 63, + "k": 3, + "windows_short": [ + 20, + 20, + 20 + ], + "sum_W_short": 60, + "rf_short": 58, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64, + 64, + 64 + ], + "sum_W_long": 192, + "max_abs_delta_long": 0.04893897066339015 + }, + { + "L": 64, + "R": 63, + "k": 1, + "windows_short": [ + 62 + ], + "sum_W_short": 62, + "rf_short": 62, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64 + ], + "sum_W_long": 64, + "max_abs_delta_long": 0.01683241713322925 + }, + { + "L": 64, + "R": 63, + "k": 2, + "windows_short": [ + 31, + 31 + ], + "sum_W_short": 62, + "rf_short": 61, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64, + 64 + ], + "sum_W_long": 128, + "max_abs_delta_long": 0.09862298740622921 + }, + { + "L": 64, + "R": 63, + "k": 3, + "windows_short": [ + 20, + 20, + 20 + ], + "sum_W_short": 60, + "rf_short": 58, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64, + 64, + 64 + ], + "sum_W_long": 192, + "max_abs_delta_long": 0.053174914892574254 + } + ], + "n_short_window_tests": 9, + "max_abs_delta_when_sumW_below_R": 0.0, + "n_long_window_tests": 9, + "n_long_window_separated": 9 + } + }, + "max_abs_delta_when_sumW_below_R": 0.0, + "control_full_window_separates_frac": 1.0, + "success_prob_when_sumW_below_R": 0.5, + "threshold_in_theorem": 0.6666666666666666, + "fails_theorem_threshold": true +} \ No newline at end of file diff --git a/replay_a/claim3.json b/replay_a/claim3.json new file mode 100644 index 0000000000000000000000000000000000000000..a17133b8375e26856b939f83ef509d8f4920a252 --- /dev/null +++ b/replay_a/claim3.json @@ -0,0 +1,349 @@ +{ + "softmax_inverse_temperature_M": 30.0, + "gate_reference_target_mismatches": 0, + "gate_codes_injective": true, + "gate_matmul_vs_einsum": 0.0, + "exhaustive": [ + { + "n_inputs": 3093, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "offsets": [ + 1, + 2, + 3 + ], + "M": 2, + "L": 5, + "V": 5, + "embed_dim": 16, + "code_width_c": 3, + "log2_V": 2.321928094887362, + "log2_L": 2.321928094887362, + "window": 3, + "working_memory_ratio": 0.6, + "mamba_states": 4, + "exhaustive": true + }, + { + "n_inputs": 45927, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "offsets": [ + 1, + 2, + 3 + ], + "M": 3, + "L": 6, + "V": 6, + "embed_dim": 16, + "code_width_c": 3, + "log2_V": 2.584962500721156, + "log2_L": 2.584962500721156, + "window": 3, + "working_memory_ratio": 0.5, + "mamba_states": 4, + "exhaustive": true + }, + { + "n_inputs": 821356, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "offsets": [ + 1, + 2, + 3, + 4 + ], + "M": 3, + "L": 7, + "V": 7, + "embed_dim": 16, + "code_width_c": 3, + "log2_V": 2.807354922057604, + "log2_L": 2.807354922057604, + "window": 4, + "working_memory_ratio": 0.5714285714285714, + "mamba_states": 5, + "exhaustive": true + } + ], + "random_sweeps": [ + { + "n_inputs": 66666, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "accuracy_mean_over_seeds": 1.0, + "accuracy_std_over_seeds": 0.0, + "n_inputs_total": 199998, + "offsets_min_max": [ + 1, + 6 + ], + "n_offsets": 6, + "M": 4, + "L": 16, + "V": 10, + "embed_dim": 26, + "code_width_c": 5, + "log2_V": 3.321928094887362, + "log2_L": 4.0, + "window": 6, + "working_memory_ratio": 0.375, + "mamba_states": 7 + }, + { + "n_inputs": 66666, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "accuracy_mean_over_seeds": 1.0, + "accuracy_std_over_seeds": 0.0, + "n_inputs_total": 199998, + "offsets_min_max": [ + 5, + 10 + ], + "n_offsets": 6, + "M": 26, + "L": 100, + "V": 32, + "embed_dim": 36, + "code_width_c": 7, + "log2_V": 5.0, + "log2_L": 6.643856189774724, + "window": 10, + "working_memory_ratio": 0.1, + "mamba_states": 7 + }, + { + "n_inputs": 31722, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "accuracy_mean_over_seeds": 1.0, + "accuracy_std_over_seeds": 0.0, + "n_inputs_total": 99999, + "offsets_min_max": [ + 5, + 10 + ], + "n_offsets": 6, + "M": 194, + "L": 100, + "V": 200, + "embed_dim": 41, + "code_width_c": 8, + "log2_V": 7.643856189774724, + "log2_L": 6.643856189774724, + "window": 10, + "working_memory_ratio": 0.1, + "mamba_states": 7 + }, + { + "n_inputs": 15063, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "accuracy_mean_over_seeds": 1.0, + "accuracy_std_over_seeds": 0.0, + "n_inputs_total": 99999, + "offsets_min_max": [ + 5, + 10 + ], + "n_offsets": 6, + "M": 994, + "L": 100, + "V": 1000, + "embed_dim": 51, + "code_width_c": 10, + "log2_V": 9.965784284662087, + "log2_L": 6.643856189774724, + "window": 10, + "working_memory_ratio": 0.1, + "mamba_states": 7 + }, + { + "n_inputs": 10000, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "accuracy_mean_over_seeds": 1.0, + "accuracy_std_over_seeds": 0.0, + "n_inputs_total": 30000, + "offsets_min_max": [ + 1, + 32 + ], + "n_offsets": 32, + "M": 480, + "L": 1024, + "V": 512, + "embed_dim": 56, + "code_width_c": 11, + "log2_V": 9.0, + "log2_L": 10.0, + "window": 32, + "working_memory_ratio": 0.03125, + "mamba_states": 33 + }, + { + "n_inputs": 2000, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "accuracy_mean_over_seeds": 1.0, + "accuracy_std_over_seeds": 0.0, + "n_inputs_total": 6000, + "offsets_min_max": [ + 1, + 64 + ], + "n_offsets": 64, + "M": 960, + "L": 4096, + "V": 1024, + "embed_dim": 66, + "code_width_c": 13, + "log2_V": 10.0, + "log2_L": 12.0, + "window": 64, + "working_memory_ratio": 0.015625, + "mamba_states": 65 + } + ], + "total_inputs_tested": 1506370, + "min_accuracy_over_all_configs": 1.0, + "embed_dim_scaling": { + "rows": [ + { + "V": 5, + "L": 5, + "embed_dim": 16, + "bound_max_log2": 2.321928094887362, + "ratio": 6.890824929174289 + }, + { + "V": 6, + "L": 6, + "embed_dim": 16, + "bound_max_log2": 2.584962500721156, + "ratio": 6.189644915752666 + }, + { + "V": 7, + "L": 7, + "embed_dim": 16, + "bound_max_log2": 2.807354922057604, + "ratio": 5.699314993728355 + }, + { + "V": 10, + "L": 16, + "embed_dim": 26, + "bound_max_log2": 4.0, + "ratio": 6.5 + }, + { + "V": 32, + "L": 100, + "embed_dim": 36, + "bound_max_log2": 6.643856189774724, + "ratio": 5.418539921951662 + }, + { + "V": 200, + "L": 100, + "embed_dim": 41, + "bound_max_log2": 7.643856189774724, + "ratio": 5.363784846560324 + }, + { + "V": 1000, + "L": 100, + "embed_dim": 51, + "bound_max_log2": 9.965784284662087, + "ratio": 5.11750992628768 + }, + { + "V": 512, + "L": 1024, + "embed_dim": 56, + "bound_max_log2": 10.0, + "ratio": 5.6 + }, + { + "V": 1024, + "L": 4096, + "embed_dim": 66, + "bound_max_log2": 12.0, + "ratio": 5.5 + } + ], + "loglog_slope": 0.8804643490237325, + "R2": 0.9884958161715269, + "max_ratio": 6.890824929174289 + }, + "negative_controls": [ + { + "offsets": [ + 5, + 10 + ], + "M": 26, + "L": 100, + "full_construction_accuracy": 1.0, + "control_window_minus_1_accuracy": 0.8386333333333333, + "control_window_minus_1_lower_bound": 0.8332666666666666, + "control_window_minus_1_excess_over_bound": 0.005366666666666742, + "frac_instances_needing_max_offset": 0.16673333333333334, + "control_no_ssm_query_accuracy": 0.09431666666666666, + "control_nonselective_ssm_accuracy": 0.26576666666666665, + "control_nonselective_ssm_state_correct": 0.18866666666666668, + "chance_level": 0.03125, + "analytic_softmax_leakage_bound": 7.880859686426868e-26 + }, + { + "offsets": [ + 1, + 6 + ], + "M": 4, + "L": 16, + "full_construction_accuracy": 1.0, + "control_window_minus_1_accuracy": 0.8489333333333333, + "control_window_minus_1_lower_bound": 0.8313833333333334, + "control_window_minus_1_excess_over_bound": 0.017549999999999955, + "frac_instances_needing_max_offset": 0.16861666666666666, + "control_no_ssm_query_accuracy": 0.26435, + "control_nonselective_ssm_accuracy": 0.6937666666666666, + "control_nonselective_ssm_state_correct": 0.6011666666666666, + "chance_level": 0.1, + "analytic_softmax_leakage_bound": 4.37825538134826e-26 + } + ] +} \ No newline at end of file diff --git a/replay_a/claim3_native.json b/replay_a/claim3_native.json new file mode 100644 index 0000000000000000000000000000000000000000..4f080cb61f300bb5d0981b774ba5fba50de729b1 --- /dev/null +++ b/replay_a/claim3_native.json @@ -0,0 +1,45 @@ +{ + "kind": "direct_native_notebook_execution", + "official_repository": "https://github.com/SprocketLab/hybrid-expressivity", + "repository_checkout": "6be8f8fbc2169290af6f4ba5e4bd53a5c6485f7b", + "repository_is_git_checkout": true, + "notebook": "source/official-code/constructions/construction_var_copy.ipynb", + "notebook_sha256": "78b23ac5677e16533425aba2036f691776ccb87b6195394a24d47f98384fb9b9", + "executed_code_cells": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ], + "device": "cpu", + "torch_version": "2.6.0", + "baseline": { + "n_batches": 256, + "examples_per_batch": 4, + "eligible_last_position_examples": 1024, + "correct_last_position_examples": 845, + "last_position_accuracy": 0.8251953125 + }, + "destructive_control": { + "ablation": "first SimpleSSM Delta vector set to zero in memory", + "eligible_last_position_examples": 1024, + "correct_last_position_examples": 56, + "last_position_accuracy": 0.0546875 + }, + "control_is_lower": true, + "scope": "Construction cells plus deterministic last-position batches; not a learned-model training rerun." +} diff --git a/replay_a/claim4.json b/replay_a/claim4.json new file mode 100644 index 0000000000000000000000000000000000000000..49ebb76736290a6c830f29a8ace69cab437ddd5b --- /dev/null +++ b/replay_a/claim4.json @@ -0,0 +1,293 @@ +{ + "gate_shift_head_vs_softmax_attention": 0.0, + "gate_reference_target_mismatches": 0, + "exhaustive_full_window": [ + { + "n_instances": 13468, + "frac_target_defined": 0.822021484375, + "success": 1.0, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 1.0, + "max_softmax_leakage": 2.2336310578907614e-10, + "min_decode_margin": 1.9999999991065476, + "Mw": 4, + "L": 8, + "V": 6, + "ds": 2, + "embed_dim": 18, + "window": 8, + "exhaustive": true, + "n_enumerated": 16384 + }, + { + "n_instances": 56788, + "frac_target_defined": 0.86651611328125, + "success": 1.0, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 1.0, + "max_softmax_leakage": 1.6918977330249163e-10, + "min_decode_margin": 1.999999999323241, + "Mw": 4, + "L": 9, + "V": 6, + "ds": 2, + "embed_dim": 18, + "window": 9, + "exhaustive": true, + "n_enumerated": 65536 + }, + { + "n_instances": 127688, + "frac_target_defined": 0.487091064453125, + "success": 1.0, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 1.0, + "max_softmax_leakage": 2.2336310578907614e-10, + "min_decode_margin": 1.9999999991065476, + "Mw": 8, + "L": 8, + "V": 10, + "ds": 3, + "embed_dim": 22, + "window": 8, + "exhaustive": true, + "n_enumerated": 262144 + } + ], + "theorem_window": [ + { + "n_instances": 20000, + "frac_target_defined": 1.0, + "success": 0.9931, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 0.9926, + "max_softmax_leakage": 1.7788437389754108e-11, + "min_decode_margin": 1.9999999999288463, + "success_mean": 0.9934199319965998, + "success_std": 0.0004020322623794229, + "n_instances_total": 100000, + "Mw": 8, + "L": 100, + "V": 10, + "ds": 3, + "embed_dim": 25, + "bound_max_log2": 6.643856189774724, + "window_required": 39, + "window_over_Mw": 4.875, + "window_over_L": 0.39, + "analytic_success": 0.992850133023305, + "abs_gap_vs_analytic": 0.0005697989732947883, + "empirical_mean_meets_99pct": true, + "analytic_certificate_meets_99pct": true, + "seeds": 5 + }, + { + "n_instances": 20000, + "frac_target_defined": 1.0, + "success": 0.99195, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 0.9914, + "max_softmax_leakage": 1.5727419366839968e-11, + "min_decode_margin": 1.9999999999370899, + "success_mean": 0.99193, + "success_std": 0.0003203123475609443, + "n_instances_total": 100000, + "Mw": 16, + "L": 200, + "V": 18, + "ds": 4, + "embed_dim": 30, + "bound_max_log2": 7.643856189774724, + "window_required": 77, + "window_over_Mw": 4.8125, + "window_over_L": 0.385, + "analytic_success": 0.9915690899931828, + "abs_gap_vs_analytic": 0.00036091000681715, + "empirical_mean_meets_99pct": true, + "analytic_certificate_meets_99pct": true, + "seeds": 5 + }, + { + "n_instances": 20000, + "frac_target_defined": 1.0, + "success": 0.9892, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 0.98895, + "max_softmax_leakage": 1.478128730525441e-11, + "min_decode_margin": 1.9999999999408744, + "success_mean": 0.9908899999999999, + "success_std": 0.0010589617556833637, + "n_instances_total": 100000, + "Mw": 32, + "L": 400, + "V": 34, + "ds": 5, + "embed_dim": 35, + "bound_max_log2": 8.643856189774725, + "window_required": 152, + "window_over_Mw": 4.75, + "window_over_L": 0.38, + "analytic_success": 0.9908938689499518, + "abs_gap_vs_analytic": 3.868949951857381e-06, + "empirical_mean_meets_99pct": true, + "analytic_certificate_meets_99pct": true, + "seeds": 5 + }, + { + "n_instances": 20000, + "frac_target_defined": 1.0, + "success": 0.9904, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 0.99025, + "max_softmax_leakage": 1.4328316311207345e-11, + "min_decode_margin": 1.9999999999426867, + "success_mean": 0.9898197874893745, + "success_std": 0.0004907101259804869, + "n_instances_total": 100000, + "Mw": 64, + "L": 800, + "V": 66, + "ds": 6, + "embed_dim": 40, + "bound_max_log2": 9.643856189774725, + "window_required": 300, + "window_over_Mw": 4.6875, + "window_over_L": 0.375, + "analytic_success": 0.9903978217538046, + "abs_gap_vs_analytic": 0.0005780342644301495, + "empirical_mean_meets_99pct": false, + "analytic_certificate_meets_99pct": true, + "seeds": 5 + }, + { + "n_instances": 20000, + "frac_target_defined": 1.0, + "success": 0.9916, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 0.99155, + "max_softmax_leakage": 1.4106493750887239e-11, + "min_decode_margin": 1.999999999943574, + "success_mean": 0.99084, + "success_std": 0.0005304714883950082, + "n_instances_total": 100000, + "Mw": 128, + "L": 1600, + "V": 130, + "ds": 7, + "embed_dim": 45, + "bound_max_log2": 10.643856189774725, + "window_required": 596, + "window_over_Mw": 4.65625, + "window_over_L": 0.3725, + "analytic_success": 0.9902205760941751, + "abs_gap_vs_analytic": 0.0006194239058249229, + "empirical_mean_meets_99pct": true, + "analytic_certificate_meets_99pct": true, + "seeds": 5 + } + ], + "min_success_at_theorem_window": 0.9898197874893745, + "max_gap_vs_analytic": 0.0006194239058249229, + "all_meet_99pct": true, + "negative_controls": [ + { + "Mw": 16, + "L": 200, + "window_required": 77, + "full_window_success": 1.0, + "theorem_window_success": 0.991575, + "control_window_eq_Mw_success": 0.58775, + "control_window_eq_Mw_analytic": 0.5678578849390983, + "control_window_eq_Mw_gap": 0.019892115060901716, + "one_minus_1_over_e": 0.6321205588285577, + "control_blind_query_success": 0.032425, + "control_no_mamba_success": 0.1152, + "control_no_mamba_key_decoded": 0.063325, + "control_no_positional_bias_success": 0.248525, + "frac_key_repeated_in_window": 0.95075, + "control_no_bias_predicted_ceiling": 0.049250000000000016, + "chance_level": 0.0625 + }, + { + "Mw": 32, + "L": 400, + "window_required": 152, + "full_window_success": 1.0, + "theorem_window_success": 0.991075, + "control_window_eq_Mw_success": 0.6003, + "control_window_eq_Mw_analytic": 0.5889184036018332, + "control_window_eq_Mw_gap": 0.011381596398166716, + "one_minus_1_over_e": 0.6321205588285577, + "control_blind_query_success": 0.01555, + "control_no_mamba_success": 0.05795, + "control_no_mamba_key_decoded": 0.03065, + "control_no_positional_bias_success": 0.194175, + "frac_key_repeated_in_window": 0.947875, + "control_no_bias_predicted_ceiling": 0.05212499999999998, + "chance_level": 0.03125 + } + ], + "window_sweep_Mw32_L400": [ + { + "window": 8, + "success": 0.12866666666666668, + "analytic": 0.1192617416381836, + "abs_gap": 0.009404925028483085 + }, + { + "window": 16, + "success": 0.32953333333333334, + "analytic": 0.31681143890437935, + "abs_gap": 0.012721894428953995 + }, + { + "window": 32, + "success": 0.6007333333333333, + "analytic": 0.5889184036018332, + "abs_gap": 0.011814929731500112 + }, + { + "window": 64, + "success": 0.8548666666666667, + "analytic": 0.8511657337081133, + "abs_gap": 0.003700932958553338 + }, + { + "window": 96, + "success": 0.9476333333333333, + "analytic": 0.9461137666664393, + "abs_gap": 0.0015195666668940122 + }, + { + "window": 128, + "success": 0.9806, + "analytic": 0.9804902042034843, + "abs_gap": 0.00010979579651571036 + }, + { + "window": 154, + "success": 0.9916, + "analytic": 0.9914541094344762, + "abs_gap": 0.00014589056552383184 + }, + { + "window": 200, + "success": 0.9979666666666667, + "analytic": 0.9980162075146308, + "abs_gap": 4.954084796415792e-05 + }, + { + "window": 300, + "success": 0.9999333333333333, + "analytic": 0.9999170783772994, + "abs_gap": 1.6254956033967538e-05 + }, + { + "window": 400, + "success": 1.0, + "analytic": 0.9999964221046956, + "abs_gap": 3.5778953043630324e-06 + } + ], + "window_sweep_max_gap": 0.012721894428953995 +} \ No newline at end of file diff --git a/replay_a/claim4_native.json b/replay_a/claim4_native.json new file mode 100644 index 0000000000000000000000000000000000000000..dc201ad8a2356d1053e504d9c0672d110b13ac22 --- /dev/null +++ b/replay_a/claim4_native.json @@ -0,0 +1,53 @@ +{ + "kind": "direct_native_notebook_execution", + "official_repository": "https://github.com/SprocketLab/hybrid-expressivity", + "repository_checkout": "6be8f8fbc2169290af6f4ba5e4bd53a5c6485f7b", + "repository_is_git_checkout": true, + "notebook": "source/official-code/constructions/construction_decode_recall.ipynb", + "notebook_sha256": "a6fa59b59c813a5349e8ff8995ba1e9bc8016586e25b1d961f3f5c30b94fa641", + "executed_code_cells": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 26, + 27 + ], + "device": "cpu", + "torch_version": "2.6.0", + "baseline": { + "n_batches": 256, + "examples_per_batch": 4, + "eligible_last_position_examples": 952, + "correct_last_position_examples": 883, + "last_position_accuracy": 0.9275210084033614 + }, + "destructive_control": { + "ablation": "first SimpleSSM Delta vector set to zero in memory", + "eligible_last_position_examples": 952, + "correct_last_position_examples": 25, + "last_position_accuracy": 0.026260504201680673 + }, + "control_is_lower": true, + "scope": "Construction cells plus deterministic last-position batches; not a learned-model training rerun." +} diff --git a/replay_a/claim5.json b/replay_a/claim5.json new file mode 100644 index 0000000000000000000000000000000000000000..7de3aa22a2ab53ac829b29fccf78ff108ec9cf88 --- /dev/null +++ b/replay_a/claim5.json @@ -0,0 +1,55 @@ +{ + "kind": "exact_authored_source_audit", + "source": "source/authored/sections/experiments.tex", + "source_sha256": "fcd88332cbe90aff62337c3add333f71fc542736b3e459015a28f0b08ae3c55b", + "table_heading_line": 26, + "caption_line": 42, + "table_rows": [ + { + "parameters_approx": 1000.0, + "pure_tf": 0.056, + "pure_ssm": 0.084, + "tf_to_ssm": 0.1, + "ssm_to_tf": 0.087 + }, + { + "parameters_approx": 2000.0, + "pure_tf": 0.352, + "pure_ssm": 0.305, + "tf_to_ssm": 0.433, + "ssm_to_tf": 0.999 + }, + { + "parameters_approx": 6000.0, + "pure_tf": 0.727, + "pure_ssm": 0.485, + "tf_to_ssm": 0.822, + "ssm_to_tf": 1.0 + }, + { + "parameters_approx": 12000.0, + "pure_tf": 0.923, + "pure_ssm": 0.931, + "tf_to_ssm": 0.908, + "ssm_to_tf": 1.0 + } + ], + "literal_table_comparison": { + "hybrid_ssm_to_tf_at_approximately_2000": 0.999, + "pure_tf_at_approximately_12000": 0.923, + "pure_ssm_at_approximately_12000": 0.931, + "parameter_ratio_12000_over_2000": 6.0, + "strict_table_value_is_exactly_one": false + }, + "source_caption_says_perfect": true, + "source_results_says_roughly_six_times": true, + "assessment": "The authored table supports the approximate 6x/near-perfect comparison (.999 versus .923/.931), but its printed .999 is not literally 1.000 while the caption calls it perfect. This is source evidence, not an independent learned-model reproduction.", + "training_route": { + "official_train_file": "source/official-code/micro_hf/train_utils.py", + "official_train_file_sha256": "ec4ccc0fa03f636f141904484f54763576e741c6f3586b1405343bb844c7c040", + "hard_coded_cuda_calls": 1, + "torch_cuda_available_on_this_host": false, + "result_artifacts_present": false, + "reason_no_local_training_rerun": "The official micro_hf entry point hard-codes CUDA tensors; this host has no CUDA device. The checkout contains figures and lrs.json metadata but no per-run evaluation JSON/CSV/checkpoint results." + } +} diff --git a/replay_a/claim6.json b/replay_a/claim6.json new file mode 100644 index 0000000000000000000000000000000000000000..68daa0da94fe18efa3c11d3212dc15682779c314 --- /dev/null +++ b/replay_a/claim6.json @@ -0,0 +1,58 @@ +{ + "kind": "exact_authored_source_audit", + "source": "source/authored/sections/experiments.tex", + "source_sha256": "fcd88332cbe90aff62337c3add333f71fc542736b3e459015a28f0b08ae3c55b", + "mkar_table_heading_line": 63, + "mkar_caption_line": 80, + "single_key_figure_result_line": 60, + "mkar_table_rows": [ + { + "parameters_approx": 1000.0, + "pure_tf": 0.124, + "pure_ssm": 0.158, + "tf_to_ssm": 0.131, + "ssm_to_tf": 0.144 + }, + { + "parameters_approx": 2000.0, + "pure_tf": 0.159, + "pure_ssm": 0.173, + "tf_to_ssm": 0.183, + "ssm_to_tf": 0.512 + }, + { + "parameters_approx": 6000.0, + "pure_tf": 0.23, + "pure_ssm": 0.356, + "tf_to_ssm": 0.286, + "ssm_to_tf": 0.99 + }, + { + "parameters_approx": 12000.0, + "pure_tf": 0.668, + "pure_ssm": 0.517, + "tf_to_ssm": 0.524, + "ssm_to_tf": 0.989 + } + ], + "literal_table_checks": { + "hybrid_ssm_to_tf_at_approximately_2000": 0.512, + "hybrid_ssm_to_tf_at_approximately_6000": 0.99, + "pure_tf_at_approximately_12000": 0.668, + "sixfold_parameter_ratio_from_2000_to_12000": 6.0, + "hybrid_reaches_0_60_at_approximately_2000": false, + "hybrid_reaches_0_60_at_approximately_6000": true, + "ratio_for_6000_vs_12000": 2.0 + }, + "source_caption_claims_60pct_and_six_times": true, + "single_key_statement_is_a_different_task": true, + "assessment": "The authored MKAR table is internally insufficient for the literal 60%-at-6x conjunction: at the 6x row it reports .512 (<.60), while at .990 the nearest shown pure-TF row is only 2x larger. The caption asserts the headline, but raw points needed to locate an unshown 60% crossing were not released. The <=40% statement is explicitly about associative recall with decoding (Figure 5), not MKAR (Figure 6).", + "training_route": { + "official_train_file": "source/official-code/micro_hf/train_utils.py", + "official_train_file_sha256": "ec4ccc0fa03f636f141904484f54763576e741c6f3586b1405343bb844c7c040", + "hard_coded_cuda_calls": 1, + "torch_cuda_available_on_this_host": false, + "result_artifacts_present": false, + "reason_no_local_training_rerun": "The official micro_hf entry point hard-codes CUDA tensors; this host has no CUDA device. The checkout contains figures and lrs.json metadata but no per-run evaluation JSON/CSV/checkpoint results." + } +} diff --git a/replay_b/claim1.json b/replay_b/claim1.json new file mode 100644 index 0000000000000000000000000000000000000000..a99864b80b94d219e8f0cc1ef5779489086a4a3a --- /dev/null +++ b/replay_b/claim1.json @@ -0,0 +1,747 @@ +{ + "task": "F(u,v) = u_v with Q = [m]; G(u)=u is injective (Asm 3.2)", + "grid": [ + { + "m": 2, + "V": 2, + "n_prefixes": 4, + "log2_states_required": 2.0, + "theory_m_log2_V": 2.0, + "abs_residual": 0.0, + "pairs_checked": 6, + "pairs_separated": 6, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 3, + "control_acc_closed_form": 0.875, + "control_acc_bruteforce": 0.875, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0 + ], + [ + 0, + 1 + ] + ] + }, + { + "m": 3, + "V": 2, + "n_prefixes": 8, + "log2_states_required": 3.0, + "theory_m_log2_V": 3.0, + "abs_residual": 0.0, + "pairs_checked": 28, + "pairs_separated": 28, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 7, + "control_acc_closed_form": 0.9583333333333334, + "control_acc_bruteforce": 0.9583333333333334, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 1 + ] + ] + }, + { + "m": 4, + "V": 2, + "n_prefixes": 16, + "log2_states_required": 4.0, + "theory_m_log2_V": 4.0, + "abs_residual": 0.0, + "pairs_checked": 120, + "pairs_separated": 120, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 15, + "control_acc_closed_form": 0.984375, + "control_acc_bruteforce": 0.984375, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 5, + "V": 2, + "n_prefixes": 32, + "log2_states_required": 5.0, + "theory_m_log2_V": 5.0, + "abs_residual": 0.0, + "pairs_checked": 496, + "pairs_separated": 496, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 31, + "control_acc_closed_form": 0.99375, + "control_acc_bruteforce": 0.99375, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 6, + "V": 2, + "n_prefixes": 64, + "log2_states_required": 6.0, + "theory_m_log2_V": 6.0, + "abs_residual": 0.0, + "pairs_checked": 2016, + "pairs_separated": 2016, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 63, + "control_acc_closed_form": 0.9973958333333334, + "control_acc_bruteforce": 0.9973958333333334, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 7, + "V": 2, + "n_prefixes": 128, + "log2_states_required": 7.0, + "theory_m_log2_V": 7.0, + "abs_residual": 0.0, + "pairs_checked": 8128, + "pairs_separated": 8128, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 127, + "control_acc_closed_form": 0.9988839285714286, + "control_acc_bruteforce": 0.9988839285714286, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 8, + "V": 2, + "n_prefixes": 256, + "log2_states_required": 8.0, + "theory_m_log2_V": 8.0, + "abs_residual": 0.0, + "pairs_checked": 32640, + "pairs_separated": 32640, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 255, + "control_acc_closed_form": 0.99951171875, + "control_acc_bruteforce": 0.99951171875, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 9, + "V": 2, + "n_prefixes": 512, + "log2_states_required": 9.0, + "theory_m_log2_V": 9.0, + "abs_residual": 0.0, + "pairs_checked": 130816, + "pairs_separated": 130816, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 511, + "control_acc_closed_form": 0.9997829861111112 + }, + { + "m": 10, + "V": 2, + "n_prefixes": 1024, + "log2_states_required": 10.0, + "theory_m_log2_V": 10.0, + "abs_residual": 0.0, + "control_states": 1023, + "control_acc_closed_form": 0.99990234375 + }, + { + "m": 2, + "V": 3, + "n_prefixes": 9, + "log2_states_required": 3.169925001442312, + "theory_m_log2_V": 3.169925001442312, + "abs_residual": 0.0, + "pairs_checked": 36, + "pairs_separated": 36, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 8, + "control_acc_closed_form": 0.9444444444444444, + "control_acc_bruteforce": 0.9444444444444444, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0 + ], + [ + 0, + 1 + ] + ] + }, + { + "m": 3, + "V": 3, + "n_prefixes": 27, + "log2_states_required": 4.754887502163468, + "theory_m_log2_V": 4.754887502163468, + "abs_residual": 0.0, + "pairs_checked": 351, + "pairs_separated": 351, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 26, + "control_acc_closed_form": 0.9876543209876543, + "control_acc_bruteforce": 0.9876543209876543, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 1 + ] + ] + }, + { + "m": 4, + "V": 3, + "n_prefixes": 81, + "log2_states_required": 6.339850002884624, + "theory_m_log2_V": 6.339850002884624, + "abs_residual": 0.0, + "pairs_checked": 3240, + "pairs_separated": 3240, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 80, + "control_acc_closed_form": 0.9969135802469136, + "control_acc_bruteforce": 0.9969135802469136, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 5, + "V": 3, + "n_prefixes": 243, + "log2_states_required": 7.924812503605781, + "theory_m_log2_V": 7.92481250360578, + "abs_residual": 8.881784197001252e-16, + "pairs_checked": 29403, + "pairs_separated": 29403, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 242, + "control_acc_closed_form": 0.9991769547325103, + "control_acc_bruteforce": 0.9991769547325103, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 6, + "V": 3, + "n_prefixes": 729, + "log2_states_required": 9.509775004326936, + "theory_m_log2_V": 9.509775004326936, + "abs_residual": 0.0, + "control_states": 728, + "control_acc_closed_form": 0.9997713763145862 + }, + { + "m": 7, + "V": 3, + "n_prefixes": 2187, + "log2_states_required": 11.094737505048093, + "theory_m_log2_V": 11.094737505048093, + "abs_residual": 0.0, + "control_states": 2186, + "control_acc_closed_form": 0.9999346789470246 + }, + { + "m": 2, + "V": 4, + "n_prefixes": 16, + "log2_states_required": 4.0, + "theory_m_log2_V": 4.0, + "abs_residual": 0.0, + "pairs_checked": 120, + "pairs_separated": 120, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 15, + "control_acc_closed_form": 0.96875, + "control_acc_bruteforce": 0.96875, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0 + ], + [ + 0, + 1 + ] + ] + }, + { + "m": 3, + "V": 4, + "n_prefixes": 64, + "log2_states_required": 6.0, + "theory_m_log2_V": 6.0, + "abs_residual": 0.0, + "pairs_checked": 2016, + "pairs_separated": 2016, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 63, + "control_acc_closed_form": 0.9947916666666666, + "control_acc_bruteforce": 0.9947916666666666, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 1 + ] + ] + }, + { + "m": 4, + "V": 4, + "n_prefixes": 256, + "log2_states_required": 8.0, + "theory_m_log2_V": 8.0, + "abs_residual": 0.0, + "pairs_checked": 32640, + "pairs_separated": 32640, + "all_pairs_separated": true, + "min_separating_queries": 1, + "control_states": 255, + "control_acc_closed_form": 0.9990234375, + "control_acc_bruteforce": 0.9990234375, + "control_acc_gap": 0.0, + "control_witness_pair": [ + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 1 + ] + ] + }, + { + "m": 5, + "V": 4, + "n_prefixes": 1024, + "log2_states_required": 10.0, + "theory_m_log2_V": 10.0, + "abs_residual": 0.0, + "control_states": 1023, + "control_acc_closed_form": 0.9998046875 + }, + { + "m": 6, + "V": 4, + "n_prefixes": 4096, + "log2_states_required": 12.0, + "theory_m_log2_V": 12.0, + "abs_residual": 0.0, + "control_states": 4095, + "control_acc_closed_form": 0.9999593098958334 + } + ], + "max_residual_log2_states": 8.881784197001252e-16, + "max_control_gap": 0.0, + "all_pairs_separated_everywhere": true, + "linear_in_m_fit": { + "2": { + "fitted_slope": 1.0, + "theory_slope_log2_V": 1.0, + "slope_abs_err": 0.0, + "intercept": 1.6770126117963062e-15, + "R2": 1.0, + "max_abs_residual": 1.7763568394002505e-15 + }, + "3": { + "fitted_slope": 1.5849625007211565, + "theory_slope_log2_V": 1.584962500721156, + "slope_abs_err": 4.440892098500626e-16, + "intercept": -4.520058619021783e-15, + "R2": 1.0, + "max_abs_residual": 3.552713678800501e-15 + }, + "4": { + "fitted_slope": 2.0, + "theory_slope_log2_V": 2.0, + "slope_abs_err": 0.0, + "intercept": -1.3107111616019684e-15, + "R2": 1.0, + "max_abs_residual": 1.7763568394002505e-15 + } + }, + "exhaustive_accuracy_curves": [ + { + "m": 2, + "V": 2, + "n_prefixes": 4, + "partitions_enumerated": "Bell(4)", + "A_star": { + "1": 0.5, + "2": 0.75, + "3": 0.875, + "4": 1.0 + }, + "min_states_acc_1.0": 4, + "min_states_acc_0.875": 3, + "min_states_acc_0.9": 4, + "min_states_acc_0.5": 1, + "A_star_at_n_minus_1": 0.875, + "closed_form_at_n_minus_1": 0.875 + }, + { + "m": 3, + "V": 2, + "n_prefixes": 8, + "partitions_enumerated": "Bell(8)", + "A_star": { + "1": 0.5, + "2": 0.75, + "3": 0.7916666666666666, + "4": 0.8333333333333334, + "5": 0.875, + "6": 0.9166666666666666, + "7": 0.9583333333333334, + "8": 1.0 + }, + "min_states_acc_1.0": 8, + "min_states_acc_0.875": 5, + "min_states_acc_0.9": 6, + "min_states_acc_0.5": 1, + "A_star_at_n_minus_1": 0.9583333333333334, + "closed_form_at_n_minus_1": 0.9583333333333334 + }, + { + "m": 2, + "V": 3, + "n_prefixes": 9, + "partitions_enumerated": "Bell(9)", + "A_star": { + "1": 0.3333333333333333, + "2": 0.5555555555555556, + "3": 0.6666666666666666, + "4": 0.7222222222222222, + "5": 0.7777777777777778, + "6": 0.8333333333333334, + "7": 0.8888888888888888, + "8": 0.9444444444444444, + "9": 1.0 + }, + "min_states_acc_1.0": 9, + "min_states_acc_0.875": 7, + "min_states_acc_0.9": 8, + "min_states_acc_0.5": 2, + "A_star_at_n_minus_1": 0.9444444444444444, + "closed_form_at_n_minus_1": 0.9444444444444444 + } + ], + "exhaustive_min_states_equals_Vm": true, + "max_curve_control_gap": 0.0, + "lemma_3_5": [ + { + "k": 2, + "sizes": [ + 2, + 3 + ], + "product_bound": 6, + "reachable_product_states": 2, + "sequences_tested": 510, + "behaviour_mismatches": 0, + "bound_respected": true + }, + { + "k": 3, + "sizes": [ + 2, + 2, + 2 + ], + "product_bound": 8, + "reachable_product_states": 2, + "sequences_tested": 254, + "behaviour_mismatches": 0, + "bound_respected": true + }, + { + "k": 2, + "sizes": [ + 3, + 4 + ], + "product_bound": 12, + "reachable_product_states": 6, + "sequences_tested": 363, + "behaviour_mismatches": 0, + "bound_respected": true + }, + { + "k": 4, + "sizes": [ + 2, + 2, + 2, + 2 + ], + "product_bound": 16, + "reachable_product_states": 6, + "sequences_tested": 126, + "behaviour_mismatches": 0, + "bound_respected": true + }, + { + "k": 3, + "sizes": [ + 2, + 3, + 2 + ], + "product_bound": 12, + "reachable_product_states": 2, + "sequences_tested": 120, + "behaviour_mismatches": 0, + "bound_respected": true + } + ], + "lemma_3_5_total_mismatches": 0, + "lemma_3_5_bound_always_respected": true, + "lemma_3_5_tightness": [ + { + "k": 2, + "sizes": [ + 2, + 3 + ], + "product_bound": 6, + "reachable_product_states": 6, + "sequences_tested": 1092, + "behaviour_mismatches": 0, + "bound_respected": true, + "bound_is_tight": true + }, + { + "k": 2, + "sizes": [ + 3, + 3 + ], + "product_bound": 9, + "reachable_product_states": 9, + "sequences_tested": 1092, + "behaviour_mismatches": 0, + "bound_respected": true, + "bound_is_tight": true + }, + { + "k": 3, + "sizes": [ + 2, + 2, + 2 + ], + "product_bound": 8, + "reachable_product_states": 8, + "sequences_tested": 1092, + "behaviour_mismatches": 0, + "bound_respected": true, + "bound_is_tight": true + } + ], + "lemma_3_5_tight_witnesses": 3, + "printed_bound_audit": { + "n_admissible_configs": 1296, + "max_literal_bound_over_admissible_grid": 0.0, + "literal_bound_ever_positive": false, + "min_appendix_bound_on_instantiation": 0.6628711136008072, + "appendix_slope_in_m": { + "2": { + "fitted_slope": 0.3314355568004036, + "closed_form_slope": 0.3314355568004036, + "abs_err": 0.0 + }, + "4": { + "fitted_slope": 1.2064355568004035, + "closed_form_slope": 1.2064355568004035, + "abs_err": 0.0 + }, + "8": { + "fitted_slope": 2.0814355568004035, + "closed_form_slope": 2.0814355568004035, + "abs_err": 0.0 + }, + "16": { + "fitted_slope": 2.9564355568004044, + "closed_form_slope": 2.9564355568004035, + "abs_err": 8.881784197001252e-16 + }, + "26": { + "fitted_slope": 3.569320310173859, + "closed_form_slope": 3.569320310173859, + "abs_err": 0.0 + }, + "32": { + "fitted_slope": 3.831435556800403, + "closed_form_slope": 3.8314355568004035, + "abs_err": 4.440892098500626e-16 + } + }, + "note": "literal = m*log2|V| - q*log2|Y| (Thm 3.3 as printed); appendix = m*log2|V| - q*(H2(1/8)+log2|Y|/8) (proof, err<1/8)" + }, + "one_state_guessing_accuracy": { + "2": 0.5, + "3": 0.3333333333333333, + "4": 0.25, + "8": 0.125, + "26": 0.038461538461538464, + "32": 0.03125 + } +} \ No newline at end of file diff --git a/replay_b/claim2.json b/replay_b/claim2.json new file mode 100644 index 0000000000000000000000000000000000000000..c97b9ad48a1724a80cbe909fe32b448c3ce5ce09 --- /dev/null +++ b/replay_b/claim2.json @@ -0,0 +1,1307 @@ +{ + "numerical_gate": { + "max_abs_matmul_minus_einsum": 1.7763568394002505e-15, + "all_forward_outputs_finite": true, + "max_abs_logit": 2.1417444637761154, + "note": "Accelerate RuntimeWarnings are spurious; verified here" + }, + "receptive_field_sweep": { + "configs_tested": 960, + "violations_outside_receptive_field": 0, + "max_abs_delta_outside_receptive_field": 0.0, + "configs_with_no_effect_just_inside_rf": 0, + "sample_rows": [ + { + "L": 16, + "k": 1, + "windows": [ + 10 + ], + "sum_W": 10, + "rf": 10, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.28581609351223836 + }, + { + "L": 16, + "k": 1, + "windows": [ + 10 + ], + "sum_W": 10, + "rf": 10, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.03444175010002626 + }, + { + "L": 16, + "k": 1, + "windows": [ + 3 + ], + "sum_W": 3, + "rf": 3, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.2040553116237531 + }, + { + "L": 16, + "k": 1, + "windows": [ + 12 + ], + "sum_W": 12, + "rf": 12, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.014197238946864754 + }, + { + "L": 16, + "k": 1, + "windows": [ + 11 + ], + "sum_W": 11, + "rf": 11, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.14570162697464065 + }, + { + "L": 16, + "k": 1, + "windows": [ + 5 + ], + "sum_W": 5, + "rf": 5, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.32986723460250333 + }, + { + "L": 16, + "k": 1, + "windows": [ + 9 + ], + "sum_W": 9, + "rf": 9, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.1968814430783481 + }, + { + "L": 16, + "k": 1, + "windows": [ + 7 + ], + "sum_W": 7, + "rf": 7, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.030041848233613166 + }, + { + "L": 16, + "k": 1, + "windows": [ + 9 + ], + "sum_W": 9, + "rf": 9, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.2698237935195511 + }, + { + "L": 16, + "k": 1, + "windows": [ + 4 + ], + "sum_W": 4, + "rf": 4, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.14797709583183694 + }, + { + "L": 16, + "k": 1, + "windows": [ + 12 + ], + "sum_W": 12, + "rf": 12, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.07127460286707321 + }, + { + "L": 16, + "k": 1, + "windows": [ + 14 + ], + "sum_W": 14, + "rf": 14, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.10168374636975316 + }, + { + "L": 16, + "k": 1, + "windows": [ + 9 + ], + "sum_W": 9, + "rf": 9, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.003750870881970958 + }, + { + "L": 16, + "k": 1, + "windows": [ + 2 + ], + "sum_W": 2, + "rf": 2, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 2.407640189683196 + }, + { + "L": 16, + "k": 1, + "windows": [ + 11 + ], + "sum_W": 11, + "rf": 11, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.28417810626585305 + }, + { + "L": 16, + "k": 1, + "windows": [ + 2 + ], + "sum_W": 2, + "rf": 2, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.5150917655838505 + }, + { + "L": 16, + "k": 1, + "windows": [ + 1 + ], + "sum_W": 1, + "rf": 1, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 2.026287079665709 + }, + { + "L": 16, + "k": 1, + "windows": [ + 5 + ], + "sum_W": 5, + "rf": 5, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.21853871993517676 + }, + { + "L": 16, + "k": 1, + "windows": [ + 9 + ], + "sum_W": 9, + "rf": 9, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.5761418306350206 + }, + { + "L": 16, + "k": 1, + "windows": [ + 10 + ], + "sum_W": 10, + "rf": 10, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.006504128634520656 + }, + { + "L": 16, + "k": 1, + "windows": [ + 1 + ], + "sum_W": 1, + "rf": 1, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 3.0536991633981563 + }, + { + "L": 16, + "k": 1, + "windows": [ + 1 + ], + "sum_W": 1, + "rf": 1, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 2.1397172447617256 + }, + { + "L": 16, + "k": 1, + "windows": [ + 10 + ], + "sum_W": 10, + "rf": 10, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.04804122082565855 + }, + { + "L": 16, + "k": 1, + "windows": [ + 7 + ], + "sum_W": 7, + "rf": 7, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.701760784501624 + }, + { + "L": 16, + "k": 1, + "windows": [ + 13 + ], + "sum_W": 13, + "rf": 13, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.1355528677544809 + }, + { + "L": 16, + "k": 1, + "windows": [ + 7 + ], + "sum_W": 7, + "rf": 7, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.48194231490071804 + }, + { + "L": 16, + "k": 1, + "windows": [ + 13 + ], + "sum_W": 13, + "rf": 13, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.0814501808086524 + }, + { + "L": 16, + "k": 1, + "windows": [ + 6 + ], + "sum_W": 6, + "rf": 6, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.32926605957010213 + }, + { + "L": 16, + "k": 1, + "windows": [ + 14 + ], + "sum_W": 14, + "rf": 14, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.10376140965519931 + }, + { + "L": 16, + "k": 1, + "windows": [ + 3 + ], + "sum_W": 3, + "rf": 3, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.15220621062657136 + }, + { + "L": 16, + "k": 1, + "windows": [ + 9 + ], + "sum_W": 9, + "rf": 9, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.10168883280928198 + }, + { + "L": 16, + "k": 1, + "windows": [ + 8 + ], + "sum_W": 8, + "rf": 8, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.2597069821704449 + }, + { + "L": 16, + "k": 1, + "windows": [ + 11 + ], + "sum_W": 11, + "rf": 11, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.38062082529689295 + }, + { + "L": 16, + "k": 1, + "windows": [ + 1 + ], + "sum_W": 1, + "rf": 1, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 1.6831235344120234 + }, + { + "L": 16, + "k": 1, + "windows": [ + 14 + ], + "sum_W": 14, + "rf": 14, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.02255092704988093 + }, + { + "L": 16, + "k": 1, + "windows": [ + 3 + ], + "sum_W": 3, + "rf": 3, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.1579483465578484 + }, + { + "L": 16, + "k": 1, + "windows": [ + 14 + ], + "sum_W": 14, + "rf": 14, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.032733635175017234 + }, + { + "L": 16, + "k": 1, + "windows": [ + 10 + ], + "sum_W": 10, + "rf": 10, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.03131013093506363 + }, + { + "L": 16, + "k": 1, + "windows": [ + 14 + ], + "sum_W": 14, + "rf": 14, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.07259073385286363 + }, + { + "L": 16, + "k": 1, + "windows": [ + 5 + ], + "sum_W": 5, + "rf": 5, + "max_abs_delta_outside_rf": 0.0, + "max_abs_delta_inside_rf": 0.1621850317171365 + } + ] + }, + "local_sensitivity_witnesses": [ + { + "L": 8, + "seed": 0, + "R_measured": 7, + "R_theory_max": 7, + "R_claimed_in_Thm_4_2": 4, + "same_in_every_window_below_R": true, + "F_x": 28, + "F_xprime": 16, + "outputs_differ": true + }, + { + "L": 8, + "seed": 1, + "R_measured": 7, + "R_theory_max": 7, + "R_claimed_in_Thm_4_2": 4, + "same_in_every_window_below_R": true, + "F_x": 9, + "F_xprime": 31, + "outputs_differ": true + }, + { + "L": 8, + "seed": 2, + "R_measured": 7, + "R_theory_max": 7, + "R_claimed_in_Thm_4_2": 4, + "same_in_every_window_below_R": true, + "F_x": 13, + "F_xprime": 18, + "outputs_differ": true + }, + { + "L": 8, + "seed": 3, + "R_measured": 7, + "R_theory_max": 7, + "R_claimed_in_Thm_4_2": 4, + "same_in_every_window_below_R": true, + "F_x": 19, + "F_xprime": 13, + "outputs_differ": true + }, + { + "L": 8, + "seed": 4, + "R_measured": 7, + "R_theory_max": 7, + "R_claimed_in_Thm_4_2": 4, + "same_in_every_window_below_R": true, + "F_x": 19, + "F_xprime": 32, + "outputs_differ": true + }, + { + "L": 16, + "seed": 0, + "R_measured": 15, + "R_theory_max": 15, + "R_claimed_in_Thm_4_2": 8, + "same_in_every_window_below_R": true, + "F_x": 27, + "F_xprime": 8, + "outputs_differ": true + }, + { + "L": 16, + "seed": 1, + "R_measured": 15, + "R_theory_max": 15, + "R_claimed_in_Thm_4_2": 8, + "same_in_every_window_below_R": true, + "F_x": 19, + "F_xprime": 15, + "outputs_differ": true + }, + { + "L": 16, + "seed": 2, + "R_measured": 15, + "R_theory_max": 15, + "R_claimed_in_Thm_4_2": 8, + "same_in_every_window_below_R": true, + "F_x": 10, + "F_xprime": 30, + "outputs_differ": true + }, + { + "L": 16, + "seed": 3, + "R_measured": 15, + "R_theory_max": 15, + "R_claimed_in_Thm_4_2": 8, + "same_in_every_window_below_R": true, + "F_x": 29, + "F_xprime": 30, + "outputs_differ": true + }, + { + "L": 16, + "seed": 4, + "R_measured": 15, + "R_theory_max": 15, + "R_claimed_in_Thm_4_2": 8, + "same_in_every_window_below_R": true, + "F_x": 24, + "F_xprime": 18, + "outputs_differ": true + }, + { + "L": 32, + "seed": 0, + "R_measured": 31, + "R_theory_max": 31, + "R_claimed_in_Thm_4_2": 16, + "same_in_every_window_below_R": true, + "F_x": 28, + "F_xprime": 23, + "outputs_differ": true + }, + { + "L": 32, + "seed": 1, + "R_measured": 31, + "R_theory_max": 31, + "R_claimed_in_Thm_4_2": 16, + "same_in_every_window_below_R": true, + "F_x": 13, + "F_xprime": 23, + "outputs_differ": true + }, + { + "L": 32, + "seed": 2, + "R_measured": 31, + "R_theory_max": 31, + "R_claimed_in_Thm_4_2": 16, + "same_in_every_window_below_R": true, + "F_x": 18, + "F_xprime": 14, + "outputs_differ": true + }, + { + "L": 32, + "seed": 3, + "R_measured": 31, + "R_theory_max": 31, + "R_claimed_in_Thm_4_2": 16, + "same_in_every_window_below_R": true, + "F_x": 22, + "F_xprime": 10, + "outputs_differ": true + }, + { + "L": 32, + "seed": 4, + "R_measured": 31, + "R_theory_max": 31, + "R_claimed_in_Thm_4_2": 16, + "same_in_every_window_below_R": true, + "F_x": 13, + "F_xprime": 22, + "outputs_differ": true + }, + { + "L": 64, + "seed": 0, + "R_measured": 63, + "R_theory_max": 63, + "R_claimed_in_Thm_4_2": 32, + "same_in_every_window_below_R": true, + "F_x": 11, + "F_xprime": 19, + "outputs_differ": true + }, + { + "L": 64, + "seed": 1, + "R_measured": 63, + "R_theory_max": 63, + "R_claimed_in_Thm_4_2": 32, + "same_in_every_window_below_R": true, + "F_x": 7, + "F_xprime": 32, + "outputs_differ": true + }, + { + "L": 64, + "seed": 2, + "R_measured": 63, + "R_theory_max": 63, + "R_claimed_in_Thm_4_2": 32, + "same_in_every_window_below_R": true, + "F_x": 30, + "F_xprime": 8, + "outputs_differ": true + }, + { + "L": 64, + "seed": 3, + "R_measured": 63, + "R_theory_max": 63, + "R_claimed_in_Thm_4_2": 32, + "same_in_every_window_below_R": true, + "F_x": 10, + "F_xprime": 19, + "outputs_differ": true + }, + { + "L": 64, + "seed": 4, + "R_measured": 63, + "R_theory_max": 63, + "R_claimed_in_Thm_4_2": 32, + "same_in_every_window_below_R": true, + "F_x": 30, + "F_xprime": 18, + "outputs_differ": true + }, + { + "L": 128, + "seed": 0, + "R_measured": 127, + "R_theory_max": 127, + "R_claimed_in_Thm_4_2": 64, + "same_in_every_window_below_R": true, + "F_x": 20, + "F_xprime": 8, + "outputs_differ": true + }, + { + "L": 128, + "seed": 1, + "R_measured": 127, + "R_theory_max": 127, + "R_claimed_in_Thm_4_2": 64, + "same_in_every_window_below_R": true, + "F_x": 7, + "F_xprime": 24, + "outputs_differ": true + }, + { + "L": 128, + "seed": 2, + "R_measured": 127, + "R_theory_max": 127, + "R_claimed_in_Thm_4_2": 64, + "same_in_every_window_below_R": true, + "F_x": 25, + "F_xprime": 17, + "outputs_differ": true + }, + { + "L": 128, + "seed": 3, + "R_measured": 127, + "R_theory_max": 127, + "R_claimed_in_Thm_4_2": 64, + "same_in_every_window_below_R": true, + "F_x": 18, + "F_xprime": 7, + "outputs_differ": true + }, + { + "L": 128, + "seed": 4, + "R_measured": 127, + "R_theory_max": 127, + "R_claimed_in_Thm_4_2": 64, + "same_in_every_window_below_R": true, + "F_x": 17, + "F_xprime": 16, + "outputs_differ": true + }, + { + "L": 256, + "seed": 0, + "R_measured": 255, + "R_theory_max": 255, + "R_claimed_in_Thm_4_2": 128, + "same_in_every_window_below_R": true, + "F_x": 16, + "F_xprime": 28, + "outputs_differ": true + }, + { + "L": 256, + "seed": 1, + "R_measured": 255, + "R_theory_max": 255, + "R_claimed_in_Thm_4_2": 128, + "same_in_every_window_below_R": true, + "F_x": 7, + "F_xprime": 12, + "outputs_differ": true + }, + { + "L": 256, + "seed": 2, + "R_measured": 255, + "R_theory_max": 255, + "R_claimed_in_Thm_4_2": 128, + "same_in_every_window_below_R": true, + "F_x": 8, + "F_xprime": 20, + "outputs_differ": true + }, + { + "L": 256, + "seed": 3, + "R_measured": 255, + "R_theory_max": 255, + "R_claimed_in_Thm_4_2": 128, + "same_in_every_window_below_R": true, + "F_x": 7, + "F_xprime": 29, + "outputs_differ": true + }, + { + "L": 256, + "seed": 4, + "R_measured": 255, + "R_theory_max": 255, + "R_claimed_in_Thm_4_2": 128, + "same_in_every_window_below_R": true, + "F_x": 20, + "F_xprime": 13, + "outputs_differ": true + } + ], + "all_witnesses_valid": true, + "R_measured_equals_L_minus_1_everywhere": true, + "witness_indistinguishability": { + "16": { + "pairs": [ + { + "L": 16, + "R": 15, + "k": 1, + "windows_short": [ + 14 + ], + "sum_W_short": 14, + "rf_short": 14, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16 + ], + "sum_W_long": 16, + "max_abs_delta_long": 0.1769761959118361 + }, + { + "L": 16, + "R": 15, + "k": 2, + "windows_short": [ + 7, + 7 + ], + "sum_W_short": 14, + "rf_short": 13, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16, + 16 + ], + "sum_W_long": 32, + "max_abs_delta_long": 0.1321795520296115 + }, + { + "L": 16, + "R": 15, + "k": 3, + "windows_short": [ + 4, + 4, + 4 + ], + "sum_W_short": 12, + "rf_short": 10, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16, + 16, + 16 + ], + "sum_W_long": 48, + "max_abs_delta_long": 0.8786377218884379 + }, + { + "L": 16, + "R": 15, + "k": 1, + "windows_short": [ + 14 + ], + "sum_W_short": 14, + "rf_short": 14, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16 + ], + "sum_W_long": 16, + "max_abs_delta_long": 0.0552757776663132 + }, + { + "L": 16, + "R": 15, + "k": 2, + "windows_short": [ + 7, + 7 + ], + "sum_W_short": 14, + "rf_short": 13, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16, + 16 + ], + "sum_W_long": 32, + "max_abs_delta_long": 0.043267705611890306 + }, + { + "L": 16, + "R": 15, + "k": 3, + "windows_short": [ + 4, + 4, + 4 + ], + "sum_W_short": 12, + "rf_short": 10, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16, + 16, + 16 + ], + "sum_W_long": 48, + "max_abs_delta_long": 0.766364411932395 + }, + { + "L": 16, + "R": 15, + "k": 1, + "windows_short": [ + 14 + ], + "sum_W_short": 14, + "rf_short": 14, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16 + ], + "sum_W_long": 16, + "max_abs_delta_long": 0.05877028865718653 + }, + { + "L": 16, + "R": 15, + "k": 2, + "windows_short": [ + 7, + 7 + ], + "sum_W_short": 14, + "rf_short": 13, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16, + 16 + ], + "sum_W_long": 32, + "max_abs_delta_long": 0.3569878953567704 + }, + { + "L": 16, + "R": 15, + "k": 3, + "windows_short": [ + 4, + 4, + 4 + ], + "sum_W_short": 12, + "rf_short": 10, + "max_abs_delta_short": 0.0, + "windows_long": [ + 16, + 16, + 16 + ], + "sum_W_long": 48, + "max_abs_delta_long": 0.5521298147300295 + } + ], + "n_short_window_tests": 9, + "max_abs_delta_when_sumW_below_R": 0.0, + "n_long_window_tests": 9, + "n_long_window_separated": 9 + }, + "32": { + "pairs": [ + { + "L": 32, + "R": 31, + "k": 1, + "windows_short": [ + 30 + ], + "sum_W_short": 30, + "rf_short": 30, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32 + ], + "sum_W_long": 32, + "max_abs_delta_long": 0.03534840754759783 + }, + { + "L": 32, + "R": 31, + "k": 2, + "windows_short": [ + 15, + 15 + ], + "sum_W_short": 30, + "rf_short": 29, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32, + 32 + ], + "sum_W_long": 64, + "max_abs_delta_long": 0.02080493890641305 + }, + { + "L": 32, + "R": 31, + "k": 3, + "windows_short": [ + 10, + 10, + 10 + ], + "sum_W_short": 30, + "rf_short": 28, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32, + 32, + 32 + ], + "sum_W_long": 96, + "max_abs_delta_long": 0.152554442308942 + }, + { + "L": 32, + "R": 31, + "k": 1, + "windows_short": [ + 30 + ], + "sum_W_short": 30, + "rf_short": 30, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32 + ], + "sum_W_long": 32, + "max_abs_delta_long": 0.16234324137652778 + }, + { + "L": 32, + "R": 31, + "k": 2, + "windows_short": [ + 15, + 15 + ], + "sum_W_short": 30, + "rf_short": 29, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32, + 32 + ], + "sum_W_long": 64, + "max_abs_delta_long": 0.3830170389889227 + }, + { + "L": 32, + "R": 31, + "k": 3, + "windows_short": [ + 10, + 10, + 10 + ], + "sum_W_short": 30, + "rf_short": 28, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32, + 32, + 32 + ], + "sum_W_long": 96, + "max_abs_delta_long": 0.12814149073121756 + }, + { + "L": 32, + "R": 31, + "k": 1, + "windows_short": [ + 30 + ], + "sum_W_short": 30, + "rf_short": 30, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32 + ], + "sum_W_long": 32, + "max_abs_delta_long": 0.06166132814076597 + }, + { + "L": 32, + "R": 31, + "k": 2, + "windows_short": [ + 15, + 15 + ], + "sum_W_short": 30, + "rf_short": 29, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32, + 32 + ], + "sum_W_long": 64, + "max_abs_delta_long": 0.13876098797379044 + }, + { + "L": 32, + "R": 31, + "k": 3, + "windows_short": [ + 10, + 10, + 10 + ], + "sum_W_short": 30, + "rf_short": 28, + "max_abs_delta_short": 0.0, + "windows_long": [ + 32, + 32, + 32 + ], + "sum_W_long": 96, + "max_abs_delta_long": 0.08809620618693226 + } + ], + "n_short_window_tests": 9, + "max_abs_delta_when_sumW_below_R": 0.0, + "n_long_window_tests": 9, + "n_long_window_separated": 9 + }, + "64": { + "pairs": [ + { + "L": 64, + "R": 63, + "k": 1, + "windows_short": [ + 62 + ], + "sum_W_short": 62, + "rf_short": 62, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64 + ], + "sum_W_long": 64, + "max_abs_delta_long": 0.03295132835513548 + }, + { + "L": 64, + "R": 63, + "k": 2, + "windows_short": [ + 31, + 31 + ], + "sum_W_short": 62, + "rf_short": 61, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64, + 64 + ], + "sum_W_long": 128, + "max_abs_delta_long": 0.36324841338320957 + }, + { + "L": 64, + "R": 63, + "k": 3, + "windows_short": [ + 20, + 20, + 20 + ], + "sum_W_short": 60, + "rf_short": 58, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64, + 64, + 64 + ], + "sum_W_long": 192, + "max_abs_delta_long": 0.08466638568402152 + }, + { + "L": 64, + "R": 63, + "k": 1, + "windows_short": [ + 62 + ], + "sum_W_short": 62, + "rf_short": 62, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64 + ], + "sum_W_long": 64, + "max_abs_delta_long": 0.23067972072479592 + }, + { + "L": 64, + "R": 63, + "k": 2, + "windows_short": [ + 31, + 31 + ], + "sum_W_short": 62, + "rf_short": 61, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64, + 64 + ], + "sum_W_long": 128, + "max_abs_delta_long": 0.08941496277410776 + }, + { + "L": 64, + "R": 63, + "k": 3, + "windows_short": [ + 20, + 20, + 20 + ], + "sum_W_short": 60, + "rf_short": 58, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64, + 64, + 64 + ], + "sum_W_long": 192, + "max_abs_delta_long": 0.04893897066339015 + }, + { + "L": 64, + "R": 63, + "k": 1, + "windows_short": [ + 62 + ], + "sum_W_short": 62, + "rf_short": 62, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64 + ], + "sum_W_long": 64, + "max_abs_delta_long": 0.01683241713322925 + }, + { + "L": 64, + "R": 63, + "k": 2, + "windows_short": [ + 31, + 31 + ], + "sum_W_short": 62, + "rf_short": 61, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64, + 64 + ], + "sum_W_long": 128, + "max_abs_delta_long": 0.09862298740622921 + }, + { + "L": 64, + "R": 63, + "k": 3, + "windows_short": [ + 20, + 20, + 20 + ], + "sum_W_short": 60, + "rf_short": 58, + "max_abs_delta_short": 0.0, + "windows_long": [ + 64, + 64, + 64 + ], + "sum_W_long": 192, + "max_abs_delta_long": 0.053174914892574254 + } + ], + "n_short_window_tests": 9, + "max_abs_delta_when_sumW_below_R": 0.0, + "n_long_window_tests": 9, + "n_long_window_separated": 9 + } + }, + "max_abs_delta_when_sumW_below_R": 0.0, + "control_full_window_separates_frac": 1.0, + "success_prob_when_sumW_below_R": 0.5, + "threshold_in_theorem": 0.6666666666666666, + "fails_theorem_threshold": true +} \ No newline at end of file diff --git a/replay_b/claim3.json b/replay_b/claim3.json new file mode 100644 index 0000000000000000000000000000000000000000..a17133b8375e26856b939f83ef509d8f4920a252 --- /dev/null +++ b/replay_b/claim3.json @@ -0,0 +1,349 @@ +{ + "softmax_inverse_temperature_M": 30.0, + "gate_reference_target_mismatches": 0, + "gate_codes_injective": true, + "gate_matmul_vs_einsum": 0.0, + "exhaustive": [ + { + "n_inputs": 3093, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "offsets": [ + 1, + 2, + 3 + ], + "M": 2, + "L": 5, + "V": 5, + "embed_dim": 16, + "code_width_c": 3, + "log2_V": 2.321928094887362, + "log2_L": 2.321928094887362, + "window": 3, + "working_memory_ratio": 0.6, + "mamba_states": 4, + "exhaustive": true + }, + { + "n_inputs": 45927, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "offsets": [ + 1, + 2, + 3 + ], + "M": 3, + "L": 6, + "V": 6, + "embed_dim": 16, + "code_width_c": 3, + "log2_V": 2.584962500721156, + "log2_L": 2.584962500721156, + "window": 3, + "working_memory_ratio": 0.5, + "mamba_states": 4, + "exhaustive": true + }, + { + "n_inputs": 821356, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "offsets": [ + 1, + 2, + 3, + 4 + ], + "M": 3, + "L": 7, + "V": 7, + "embed_dim": 16, + "code_width_c": 3, + "log2_V": 2.807354922057604, + "log2_L": 2.807354922057604, + "window": 4, + "working_memory_ratio": 0.5714285714285714, + "mamba_states": 5, + "exhaustive": true + } + ], + "random_sweeps": [ + { + "n_inputs": 66666, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "accuracy_mean_over_seeds": 1.0, + "accuracy_std_over_seeds": 0.0, + "n_inputs_total": 199998, + "offsets_min_max": [ + 1, + 6 + ], + "n_offsets": 6, + "M": 4, + "L": 16, + "V": 10, + "embed_dim": 26, + "code_width_c": 5, + "log2_V": 3.321928094887362, + "log2_L": 4.0, + "window": 6, + "working_memory_ratio": 0.375, + "mamba_states": 7 + }, + { + "n_inputs": 66666, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "accuracy_mean_over_seeds": 1.0, + "accuracy_std_over_seeds": 0.0, + "n_inputs_total": 199998, + "offsets_min_max": [ + 5, + 10 + ], + "n_offsets": 6, + "M": 26, + "L": 100, + "V": 32, + "embed_dim": 36, + "code_width_c": 7, + "log2_V": 5.0, + "log2_L": 6.643856189774724, + "window": 10, + "working_memory_ratio": 0.1, + "mamba_states": 7 + }, + { + "n_inputs": 31722, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "accuracy_mean_over_seeds": 1.0, + "accuracy_std_over_seeds": 0.0, + "n_inputs_total": 99999, + "offsets_min_max": [ + 5, + 10 + ], + "n_offsets": 6, + "M": 194, + "L": 100, + "V": 200, + "embed_dim": 41, + "code_width_c": 8, + "log2_V": 7.643856189774724, + "log2_L": 6.643856189774724, + "window": 10, + "working_memory_ratio": 0.1, + "mamba_states": 7 + }, + { + "n_inputs": 15063, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "accuracy_mean_over_seeds": 1.0, + "accuracy_std_over_seeds": 0.0, + "n_inputs_total": 99999, + "offsets_min_max": [ + 5, + 10 + ], + "n_offsets": 6, + "M": 994, + "L": 100, + "V": 1000, + "embed_dim": 51, + "code_width_c": 10, + "log2_V": 9.965784284662087, + "log2_L": 6.643856189774724, + "window": 10, + "working_memory_ratio": 0.1, + "mamba_states": 7 + }, + { + "n_inputs": 10000, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "accuracy_mean_over_seeds": 1.0, + "accuracy_std_over_seeds": 0.0, + "n_inputs_total": 30000, + "offsets_min_max": [ + 1, + 32 + ], + "n_offsets": 32, + "M": 480, + "L": 1024, + "V": 512, + "embed_dim": 56, + "code_width_c": 11, + "log2_V": 9.0, + "log2_L": 10.0, + "window": 32, + "working_memory_ratio": 0.03125, + "mamba_states": 33 + }, + { + "n_inputs": 2000, + "accuracy": 1.0, + "attention_argmax_correct": 1.0, + "ssm_state_correct": 1.0, + "max_softmax_leakage": 0.0, + "min_decode_margin": 2.0, + "accuracy_mean_over_seeds": 1.0, + "accuracy_std_over_seeds": 0.0, + "n_inputs_total": 6000, + "offsets_min_max": [ + 1, + 64 + ], + "n_offsets": 64, + "M": 960, + "L": 4096, + "V": 1024, + "embed_dim": 66, + "code_width_c": 13, + "log2_V": 10.0, + "log2_L": 12.0, + "window": 64, + "working_memory_ratio": 0.015625, + "mamba_states": 65 + } + ], + "total_inputs_tested": 1506370, + "min_accuracy_over_all_configs": 1.0, + "embed_dim_scaling": { + "rows": [ + { + "V": 5, + "L": 5, + "embed_dim": 16, + "bound_max_log2": 2.321928094887362, + "ratio": 6.890824929174289 + }, + { + "V": 6, + "L": 6, + "embed_dim": 16, + "bound_max_log2": 2.584962500721156, + "ratio": 6.189644915752666 + }, + { + "V": 7, + "L": 7, + "embed_dim": 16, + "bound_max_log2": 2.807354922057604, + "ratio": 5.699314993728355 + }, + { + "V": 10, + "L": 16, + "embed_dim": 26, + "bound_max_log2": 4.0, + "ratio": 6.5 + }, + { + "V": 32, + "L": 100, + "embed_dim": 36, + "bound_max_log2": 6.643856189774724, + "ratio": 5.418539921951662 + }, + { + "V": 200, + "L": 100, + "embed_dim": 41, + "bound_max_log2": 7.643856189774724, + "ratio": 5.363784846560324 + }, + { + "V": 1000, + "L": 100, + "embed_dim": 51, + "bound_max_log2": 9.965784284662087, + "ratio": 5.11750992628768 + }, + { + "V": 512, + "L": 1024, + "embed_dim": 56, + "bound_max_log2": 10.0, + "ratio": 5.6 + }, + { + "V": 1024, + "L": 4096, + "embed_dim": 66, + "bound_max_log2": 12.0, + "ratio": 5.5 + } + ], + "loglog_slope": 0.8804643490237325, + "R2": 0.9884958161715269, + "max_ratio": 6.890824929174289 + }, + "negative_controls": [ + { + "offsets": [ + 5, + 10 + ], + "M": 26, + "L": 100, + "full_construction_accuracy": 1.0, + "control_window_minus_1_accuracy": 0.8386333333333333, + "control_window_minus_1_lower_bound": 0.8332666666666666, + "control_window_minus_1_excess_over_bound": 0.005366666666666742, + "frac_instances_needing_max_offset": 0.16673333333333334, + "control_no_ssm_query_accuracy": 0.09431666666666666, + "control_nonselective_ssm_accuracy": 0.26576666666666665, + "control_nonselective_ssm_state_correct": 0.18866666666666668, + "chance_level": 0.03125, + "analytic_softmax_leakage_bound": 7.880859686426868e-26 + }, + { + "offsets": [ + 1, + 6 + ], + "M": 4, + "L": 16, + "full_construction_accuracy": 1.0, + "control_window_minus_1_accuracy": 0.8489333333333333, + "control_window_minus_1_lower_bound": 0.8313833333333334, + "control_window_minus_1_excess_over_bound": 0.017549999999999955, + "frac_instances_needing_max_offset": 0.16861666666666666, + "control_no_ssm_query_accuracy": 0.26435, + "control_nonselective_ssm_accuracy": 0.6937666666666666, + "control_nonselective_ssm_state_correct": 0.6011666666666666, + "chance_level": 0.1, + "analytic_softmax_leakage_bound": 4.37825538134826e-26 + } + ] +} \ No newline at end of file diff --git a/replay_b/claim3_native.json b/replay_b/claim3_native.json new file mode 100644 index 0000000000000000000000000000000000000000..4f080cb61f300bb5d0981b774ba5fba50de729b1 --- /dev/null +++ b/replay_b/claim3_native.json @@ -0,0 +1,45 @@ +{ + "kind": "direct_native_notebook_execution", + "official_repository": "https://github.com/SprocketLab/hybrid-expressivity", + "repository_checkout": "6be8f8fbc2169290af6f4ba5e4bd53a5c6485f7b", + "repository_is_git_checkout": true, + "notebook": "source/official-code/constructions/construction_var_copy.ipynb", + "notebook_sha256": "78b23ac5677e16533425aba2036f691776ccb87b6195394a24d47f98384fb9b9", + "executed_code_cells": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18 + ], + "device": "cpu", + "torch_version": "2.6.0", + "baseline": { + "n_batches": 256, + "examples_per_batch": 4, + "eligible_last_position_examples": 1024, + "correct_last_position_examples": 845, + "last_position_accuracy": 0.8251953125 + }, + "destructive_control": { + "ablation": "first SimpleSSM Delta vector set to zero in memory", + "eligible_last_position_examples": 1024, + "correct_last_position_examples": 56, + "last_position_accuracy": 0.0546875 + }, + "control_is_lower": true, + "scope": "Construction cells plus deterministic last-position batches; not a learned-model training rerun." +} diff --git a/replay_b/claim4.json b/replay_b/claim4.json new file mode 100644 index 0000000000000000000000000000000000000000..49ebb76736290a6c830f29a8ace69cab437ddd5b --- /dev/null +++ b/replay_b/claim4.json @@ -0,0 +1,293 @@ +{ + "gate_shift_head_vs_softmax_attention": 0.0, + "gate_reference_target_mismatches": 0, + "exhaustive_full_window": [ + { + "n_instances": 13468, + "frac_target_defined": 0.822021484375, + "success": 1.0, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 1.0, + "max_softmax_leakage": 2.2336310578907614e-10, + "min_decode_margin": 1.9999999991065476, + "Mw": 4, + "L": 8, + "V": 6, + "ds": 2, + "embed_dim": 18, + "window": 8, + "exhaustive": true, + "n_enumerated": 16384 + }, + { + "n_instances": 56788, + "frac_target_defined": 0.86651611328125, + "success": 1.0, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 1.0, + "max_softmax_leakage": 1.6918977330249163e-10, + "min_decode_margin": 1.999999999323241, + "Mw": 4, + "L": 9, + "V": 6, + "ds": 2, + "embed_dim": 18, + "window": 9, + "exhaustive": true, + "n_enumerated": 65536 + }, + { + "n_instances": 127688, + "frac_target_defined": 0.487091064453125, + "success": 1.0, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 1.0, + "max_softmax_leakage": 2.2336310578907614e-10, + "min_decode_margin": 1.9999999991065476, + "Mw": 8, + "L": 8, + "V": 10, + "ds": 3, + "embed_dim": 22, + "window": 8, + "exhaustive": true, + "n_enumerated": 262144 + } + ], + "theorem_window": [ + { + "n_instances": 20000, + "frac_target_defined": 1.0, + "success": 0.9931, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 0.9926, + "max_softmax_leakage": 1.7788437389754108e-11, + "min_decode_margin": 1.9999999999288463, + "success_mean": 0.9934199319965998, + "success_std": 0.0004020322623794229, + "n_instances_total": 100000, + "Mw": 8, + "L": 100, + "V": 10, + "ds": 3, + "embed_dim": 25, + "bound_max_log2": 6.643856189774724, + "window_required": 39, + "window_over_Mw": 4.875, + "window_over_L": 0.39, + "analytic_success": 0.992850133023305, + "abs_gap_vs_analytic": 0.0005697989732947883, + "empirical_mean_meets_99pct": true, + "analytic_certificate_meets_99pct": true, + "seeds": 5 + }, + { + "n_instances": 20000, + "frac_target_defined": 1.0, + "success": 0.99195, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 0.9914, + "max_softmax_leakage": 1.5727419366839968e-11, + "min_decode_margin": 1.9999999999370899, + "success_mean": 0.99193, + "success_std": 0.0003203123475609443, + "n_instances_total": 100000, + "Mw": 16, + "L": 200, + "V": 18, + "ds": 4, + "embed_dim": 30, + "bound_max_log2": 7.643856189774724, + "window_required": 77, + "window_over_Mw": 4.8125, + "window_over_L": 0.385, + "analytic_success": 0.9915690899931828, + "abs_gap_vs_analytic": 0.00036091000681715, + "empirical_mean_meets_99pct": true, + "analytic_certificate_meets_99pct": true, + "seeds": 5 + }, + { + "n_instances": 20000, + "frac_target_defined": 1.0, + "success": 0.9892, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 0.98895, + "max_softmax_leakage": 1.478128730525441e-11, + "min_decode_margin": 1.9999999999408744, + "success_mean": 0.9908899999999999, + "success_std": 0.0010589617556833637, + "n_instances_total": 100000, + "Mw": 32, + "L": 400, + "V": 34, + "ds": 5, + "embed_dim": 35, + "bound_max_log2": 8.643856189774725, + "window_required": 152, + "window_over_Mw": 4.75, + "window_over_L": 0.38, + "analytic_success": 0.9908938689499518, + "abs_gap_vs_analytic": 3.868949951857381e-06, + "empirical_mean_meets_99pct": true, + "analytic_certificate_meets_99pct": true, + "seeds": 5 + }, + { + "n_instances": 20000, + "frac_target_defined": 1.0, + "success": 0.9904, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 0.99025, + "max_softmax_leakage": 1.4328316311207345e-11, + "min_decode_margin": 1.9999999999426867, + "success_mean": 0.9898197874893745, + "success_std": 0.0004907101259804869, + "n_instances_total": 100000, + "Mw": 64, + "L": 800, + "V": 66, + "ds": 6, + "embed_dim": 40, + "bound_max_log2": 9.643856189774725, + "window_required": 300, + "window_over_Mw": 4.6875, + "window_over_L": 0.375, + "analytic_success": 0.9903978217538046, + "abs_gap_vs_analytic": 0.0005780342644301495, + "empirical_mean_meets_99pct": false, + "analytic_certificate_meets_99pct": true, + "seeds": 5 + }, + { + "n_instances": 20000, + "frac_target_defined": 1.0, + "success": 0.9916, + "ssm_key_decoded_correctly": 1.0, + "attention_argmax_correct": 0.99155, + "max_softmax_leakage": 1.4106493750887239e-11, + "min_decode_margin": 1.999999999943574, + "success_mean": 0.99084, + "success_std": 0.0005304714883950082, + "n_instances_total": 100000, + "Mw": 128, + "L": 1600, + "V": 130, + "ds": 7, + "embed_dim": 45, + "bound_max_log2": 10.643856189774725, + "window_required": 596, + "window_over_Mw": 4.65625, + "window_over_L": 0.3725, + "analytic_success": 0.9902205760941751, + "abs_gap_vs_analytic": 0.0006194239058249229, + "empirical_mean_meets_99pct": true, + "analytic_certificate_meets_99pct": true, + "seeds": 5 + } + ], + "min_success_at_theorem_window": 0.9898197874893745, + "max_gap_vs_analytic": 0.0006194239058249229, + "all_meet_99pct": true, + "negative_controls": [ + { + "Mw": 16, + "L": 200, + "window_required": 77, + "full_window_success": 1.0, + "theorem_window_success": 0.991575, + "control_window_eq_Mw_success": 0.58775, + "control_window_eq_Mw_analytic": 0.5678578849390983, + "control_window_eq_Mw_gap": 0.019892115060901716, + "one_minus_1_over_e": 0.6321205588285577, + "control_blind_query_success": 0.032425, + "control_no_mamba_success": 0.1152, + "control_no_mamba_key_decoded": 0.063325, + "control_no_positional_bias_success": 0.248525, + "frac_key_repeated_in_window": 0.95075, + "control_no_bias_predicted_ceiling": 0.049250000000000016, + "chance_level": 0.0625 + }, + { + "Mw": 32, + "L": 400, + "window_required": 152, + "full_window_success": 1.0, + "theorem_window_success": 0.991075, + "control_window_eq_Mw_success": 0.6003, + "control_window_eq_Mw_analytic": 0.5889184036018332, + "control_window_eq_Mw_gap": 0.011381596398166716, + "one_minus_1_over_e": 0.6321205588285577, + "control_blind_query_success": 0.01555, + "control_no_mamba_success": 0.05795, + "control_no_mamba_key_decoded": 0.03065, + "control_no_positional_bias_success": 0.194175, + "frac_key_repeated_in_window": 0.947875, + "control_no_bias_predicted_ceiling": 0.05212499999999998, + "chance_level": 0.03125 + } + ], + "window_sweep_Mw32_L400": [ + { + "window": 8, + "success": 0.12866666666666668, + "analytic": 0.1192617416381836, + "abs_gap": 0.009404925028483085 + }, + { + "window": 16, + "success": 0.32953333333333334, + "analytic": 0.31681143890437935, + "abs_gap": 0.012721894428953995 + }, + { + "window": 32, + "success": 0.6007333333333333, + "analytic": 0.5889184036018332, + "abs_gap": 0.011814929731500112 + }, + { + "window": 64, + "success": 0.8548666666666667, + "analytic": 0.8511657337081133, + "abs_gap": 0.003700932958553338 + }, + { + "window": 96, + "success": 0.9476333333333333, + "analytic": 0.9461137666664393, + "abs_gap": 0.0015195666668940122 + }, + { + "window": 128, + "success": 0.9806, + "analytic": 0.9804902042034843, + "abs_gap": 0.00010979579651571036 + }, + { + "window": 154, + "success": 0.9916, + "analytic": 0.9914541094344762, + "abs_gap": 0.00014589056552383184 + }, + { + "window": 200, + "success": 0.9979666666666667, + "analytic": 0.9980162075146308, + "abs_gap": 4.954084796415792e-05 + }, + { + "window": 300, + "success": 0.9999333333333333, + "analytic": 0.9999170783772994, + "abs_gap": 1.6254956033967538e-05 + }, + { + "window": 400, + "success": 1.0, + "analytic": 0.9999964221046956, + "abs_gap": 3.5778953043630324e-06 + } + ], + "window_sweep_max_gap": 0.012721894428953995 +} \ No newline at end of file diff --git a/replay_b/claim4_native.json b/replay_b/claim4_native.json new file mode 100644 index 0000000000000000000000000000000000000000..dc201ad8a2356d1053e504d9c0672d110b13ac22 --- /dev/null +++ b/replay_b/claim4_native.json @@ -0,0 +1,53 @@ +{ + "kind": "direct_native_notebook_execution", + "official_repository": "https://github.com/SprocketLab/hybrid-expressivity", + "repository_checkout": "6be8f8fbc2169290af6f4ba5e4bd53a5c6485f7b", + "repository_is_git_checkout": true, + "notebook": "source/official-code/constructions/construction_decode_recall.ipynb", + "notebook_sha256": "a6fa59b59c813a5349e8ff8995ba1e9bc8016586e25b1d961f3f5c30b94fa641", + "executed_code_cells": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 26, + 27 + ], + "device": "cpu", + "torch_version": "2.6.0", + "baseline": { + "n_batches": 256, + "examples_per_batch": 4, + "eligible_last_position_examples": 952, + "correct_last_position_examples": 883, + "last_position_accuracy": 0.9275210084033614 + }, + "destructive_control": { + "ablation": "first SimpleSSM Delta vector set to zero in memory", + "eligible_last_position_examples": 952, + "correct_last_position_examples": 25, + "last_position_accuracy": 0.026260504201680673 + }, + "control_is_lower": true, + "scope": "Construction cells plus deterministic last-position batches; not a learned-model training rerun." +} diff --git a/replay_b/claim5.json b/replay_b/claim5.json new file mode 100644 index 0000000000000000000000000000000000000000..7de3aa22a2ab53ac829b29fccf78ff108ec9cf88 --- /dev/null +++ b/replay_b/claim5.json @@ -0,0 +1,55 @@ +{ + "kind": "exact_authored_source_audit", + "source": "source/authored/sections/experiments.tex", + "source_sha256": "fcd88332cbe90aff62337c3add333f71fc542736b3e459015a28f0b08ae3c55b", + "table_heading_line": 26, + "caption_line": 42, + "table_rows": [ + { + "parameters_approx": 1000.0, + "pure_tf": 0.056, + "pure_ssm": 0.084, + "tf_to_ssm": 0.1, + "ssm_to_tf": 0.087 + }, + { + "parameters_approx": 2000.0, + "pure_tf": 0.352, + "pure_ssm": 0.305, + "tf_to_ssm": 0.433, + "ssm_to_tf": 0.999 + }, + { + "parameters_approx": 6000.0, + "pure_tf": 0.727, + "pure_ssm": 0.485, + "tf_to_ssm": 0.822, + "ssm_to_tf": 1.0 + }, + { + "parameters_approx": 12000.0, + "pure_tf": 0.923, + "pure_ssm": 0.931, + "tf_to_ssm": 0.908, + "ssm_to_tf": 1.0 + } + ], + "literal_table_comparison": { + "hybrid_ssm_to_tf_at_approximately_2000": 0.999, + "pure_tf_at_approximately_12000": 0.923, + "pure_ssm_at_approximately_12000": 0.931, + "parameter_ratio_12000_over_2000": 6.0, + "strict_table_value_is_exactly_one": false + }, + "source_caption_says_perfect": true, + "source_results_says_roughly_six_times": true, + "assessment": "The authored table supports the approximate 6x/near-perfect comparison (.999 versus .923/.931), but its printed .999 is not literally 1.000 while the caption calls it perfect. This is source evidence, not an independent learned-model reproduction.", + "training_route": { + "official_train_file": "source/official-code/micro_hf/train_utils.py", + "official_train_file_sha256": "ec4ccc0fa03f636f141904484f54763576e741c6f3586b1405343bb844c7c040", + "hard_coded_cuda_calls": 1, + "torch_cuda_available_on_this_host": false, + "result_artifacts_present": false, + "reason_no_local_training_rerun": "The official micro_hf entry point hard-codes CUDA tensors; this host has no CUDA device. The checkout contains figures and lrs.json metadata but no per-run evaluation JSON/CSV/checkpoint results." + } +} diff --git a/replay_b/claim6.json b/replay_b/claim6.json new file mode 100644 index 0000000000000000000000000000000000000000..68daa0da94fe18efa3c11d3212dc15682779c314 --- /dev/null +++ b/replay_b/claim6.json @@ -0,0 +1,58 @@ +{ + "kind": "exact_authored_source_audit", + "source": "source/authored/sections/experiments.tex", + "source_sha256": "fcd88332cbe90aff62337c3add333f71fc542736b3e459015a28f0b08ae3c55b", + "mkar_table_heading_line": 63, + "mkar_caption_line": 80, + "single_key_figure_result_line": 60, + "mkar_table_rows": [ + { + "parameters_approx": 1000.0, + "pure_tf": 0.124, + "pure_ssm": 0.158, + "tf_to_ssm": 0.131, + "ssm_to_tf": 0.144 + }, + { + "parameters_approx": 2000.0, + "pure_tf": 0.159, + "pure_ssm": 0.173, + "tf_to_ssm": 0.183, + "ssm_to_tf": 0.512 + }, + { + "parameters_approx": 6000.0, + "pure_tf": 0.23, + "pure_ssm": 0.356, + "tf_to_ssm": 0.286, + "ssm_to_tf": 0.99 + }, + { + "parameters_approx": 12000.0, + "pure_tf": 0.668, + "pure_ssm": 0.517, + "tf_to_ssm": 0.524, + "ssm_to_tf": 0.989 + } + ], + "literal_table_checks": { + "hybrid_ssm_to_tf_at_approximately_2000": 0.512, + "hybrid_ssm_to_tf_at_approximately_6000": 0.99, + "pure_tf_at_approximately_12000": 0.668, + "sixfold_parameter_ratio_from_2000_to_12000": 6.0, + "hybrid_reaches_0_60_at_approximately_2000": false, + "hybrid_reaches_0_60_at_approximately_6000": true, + "ratio_for_6000_vs_12000": 2.0 + }, + "source_caption_claims_60pct_and_six_times": true, + "single_key_statement_is_a_different_task": true, + "assessment": "The authored MKAR table is internally insufficient for the literal 60%-at-6x conjunction: at the 6x row it reports .512 (<.60), while at .990 the nearest shown pure-TF row is only 2x larger. The caption asserts the headline, but raw points needed to locate an unshown 60% crossing were not released. The <=40% statement is explicitly about associative recall with decoding (Figure 5), not MKAR (Figure 6).", + "training_route": { + "official_train_file": "source/official-code/micro_hf/train_utils.py", + "official_train_file_sha256": "ec4ccc0fa03f636f141904484f54763576e741c6f3586b1405343bb844c7c040", + "hard_coded_cuda_calls": 1, + "torch_cuda_available_on_this_host": false, + "result_artifacts_present": false, + "reason_no_local_training_rerun": "The official micro_hf entry point hard-codes CUDA tensors; this host has no CUDA device. The checkout contains figures and lrs.json metadata but no per-run evaluation JSON/CSV/checkpoint results." + } +} diff --git a/run_all.py b/run_all.py new file mode 100644 index 0000000000000000000000000000000000000000..cf7e9276d680a1f05da2647f82c355debef5390c --- /dev/null +++ b/run_all.py @@ -0,0 +1,58 @@ +"""Run two deterministic local evidence passes and compare authored artifacts.""" + +from __future__ import annotations + +import hashlib +import json +import shutil +import subprocess +import sys +from pathlib import Path + + +ROOT = Path(__file__).resolve().parent +OUT = ROOT / "outputs" +SCRIPTS = [ + "exp1_ssm_bound.py", "exp2_window_bound.py", "exp3_selcopy_construction.py", + "exp4_ar_construction.py", "run_native_constructions.py", "audit_source_claims.py", + "build_logbook.py", +] +ARTIFACTS = [f"claim{i}.json" for i in range(1, 7)] + ["claim3_native.json", "claim4_native.json"] + + +def digest(path: Path) -> str: + return hashlib.sha256(path.read_bytes()).hexdigest() + + +def one_pass(label: str) -> Path: + for script in SCRIPTS: + subprocess.run([sys.executable, script], cwd=ROOT, check=True) + dest = ROOT / label + if dest.exists(): + shutil.rmtree(dest) + dest.mkdir() + for name in ARTIFACTS: + shutil.copy2(OUT / name, dest / name) + return dest + + +def main() -> None: + first = one_pass("replay_a") + second = one_pass("replay_b") + files = [] + for name in ARTIFACTS: + a, b = first / name, second / name + files.append({"file": f"outputs/{name}", "replay_a_sha256": digest(a), + "replay_b_sha256": digest(b), "byte_identical": a.read_bytes() == b.read_bytes()}) + replay = {"kind": "paired_deterministic_local_replay", "files": files, + "byte_identical": all(x["byte_identical"] for x in files), + "python": sys.version.split()[0], "commands": [f"{sys.executable} {x}" for x in SCRIPTS]} + (ROOT / "REPLAY.json").write_text(json.dumps(replay, indent=2) + "\n") + if not replay["byte_identical"]: + raise SystemExit("paired replay differed; refusing validation") + subprocess.run([sys.executable, "official_validator.py"], cwd=ROOT, check=True) + print("paired replay is byte-identical; official local semantic-v4 validation and manifest complete") + + +if __name__ == "__main__": + main() diff --git a/run_native_constructions.py b/run_native_constructions.py new file mode 100644 index 0000000000000000000000000000000000000000..1e7c8b008e09bd94800d8ed12df3e858872ab1ef --- /dev/null +++ b/run_native_constructions.py @@ -0,0 +1,156 @@ +"""Execute the authors' construction notebooks without modifying their bytes. + +The arXiv source links to https://github.com/SprocketLab/hybrid-expressivity. +``source/official-code`` is a detached checkout of the last repository commit +before arXiv:2603.08859v1. This runner reads the code cells directly from the +two authored notebooks, executes their setup/weight-assignment cells unchanged +on CPU, and evaluates the constructed models on deterministic batches generated +by the authors' own Dataset implementation. Notebook display/plot cells are +intentionally not executed because they are not part of the forward pass. + +This is construction validation only. It is not an attempted rerun of the +GPU-only learned-model training entry point, which hard-codes ``cuda``. +""" + +from __future__ import annotations + +import copy +import hashlib +import json +import os +import sys +from pathlib import Path +from typing import Any + +import numpy as np +import torch + + +ROOT = Path(__file__).resolve().parent +CODE = ROOT / "source" / "official-code" +NOTEBOOKS = { + "claim3_native": (CODE / "constructions" / "construction_var_copy.ipynb", 18), + "claim4_native": (CODE / "constructions" / "construction_decode_recall.ipynb", 27), +} +OUT = ROOT / "outputs" + + +def sha256(path: Path) -> str: + return hashlib.sha256(path.read_bytes()).hexdigest() + + +def execute_notebook_prefix(path: Path, last_cell: int) -> dict[str, Any]: + """Execute exact code-cell text through the construction's model cell.""" + notebook = json.loads(path.read_text()) + cells = notebook["cells"] + assert cells[0]["cell_type"] == "code" + # The two notebook magics only enable autoreload; skipping that display + # cell preserves every model/data/weight-assignment cell verbatim. + selected = [i for i in range(1, last_cell + 1) if cells[i]["cell_type"] == "code"] + namespace: dict[str, Any] = {"__name__": "__main__", "__file__": str(path)} + old_cwd = Path.cwd() + old_path = list(sys.path) + try: + os.chdir(path.parent) + sys.path.insert(0, str(path.parent)) + np.random.seed(1729) + torch.manual_seed(1729) + for i in selected: + source = "".join(cells[i]["source"]) + exec(compile(source, f"{path}::cell-{i}", "exec"), namespace) + finally: + os.chdir(old_cwd) + sys.path[:] = old_path + namespace["_executed_cells"] = selected + return namespace + + +def evaluate_last_position(ns: dict[str, Any], n_batches: int = 256) -> dict[str, Any]: + """Use the already-authored Dataset/model objects and score final tokens.""" + model = ns["model"] + dataset = ns["train_dataset"] + model.eval() + eligible = correct = 0 + with torch.no_grad(): + for i in range(n_batches): + batch = dataset[i] + logits = model(batch["input_ids"]) + pred = torch.argmax(logits[:, -1], dim=-1) + valid = batch["mask"][:, -1].bool() + eligible += int(valid.sum()) + correct += int((pred[valid] == batch["output_ids"][:, -1][valid]).sum()) + return { + "n_batches": n_batches, + "examples_per_batch": int(ns["args"].train_batch_size), + "eligible_last_position_examples": eligible, + "correct_last_position_examples": correct, + "last_position_accuracy": correct / eligible if eligible else None, + } + + +def destructive_no_first_ssm(ns: dict[str, Any], n_batches: int = 256) -> dict[str, Any]: + """Ablate the first authored SSM gate in-memory; source bytes stay intact.""" + model = copy.deepcopy(ns["model"]) + model.layers[0].layer.Delta.data.zero_() + dataset = ns["train_dataset"] + model.eval() + eligible = correct = 0 + # Re-seed data generation so the control sees exactly the baseline inputs. + np.random.seed(1729 + 1) + with torch.no_grad(): + for i in range(n_batches): + batch = dataset[i] + logits = model(batch["input_ids"]) + pred = torch.argmax(logits[:, -1], dim=-1) + valid = batch["mask"][:, -1].bool() + eligible += int(valid.sum()) + correct += int((pred[valid] == batch["output_ids"][:, -1][valid]).sum()) + return { + "ablation": "first SimpleSSM Delta vector set to zero in memory", + "eligible_last_position_examples": eligible, + "correct_last_position_examples": correct, + "last_position_accuracy": correct / eligible if eligible else None, + } + + +def main() -> None: + OUT.mkdir(exist_ok=True) + git_head = (CODE / ".git").exists() + for output_name, (notebook, last_cell) in NOTEBOOKS.items(): + # Baseline and destructive control receive identical generated batches. + ns = execute_notebook_prefix(notebook, last_cell) + np.random.seed(1729 + 1) + baseline = evaluate_last_position(ns) + control = destructive_no_first_ssm(ns) + payload = { + "kind": "direct_native_notebook_execution", + "official_repository": "https://github.com/SprocketLab/hybrid-expressivity", + "repository_checkout": "6be8f8fbc2169290af6f4ba5e4bd53a5c6485f7b", + "repository_is_git_checkout": git_head, + "notebook": str(notebook.relative_to(ROOT)), + "notebook_sha256": sha256(notebook), + "executed_code_cells": ns["_executed_cells"], + "device": "cpu", + "torch_version": torch.__version__, + "baseline": baseline, + "destructive_control": control, + "control_is_lower": ( + control["last_position_accuracy"] < baseline["last_position_accuracy"] + if baseline["last_position_accuracy"] is not None + else None + ), + "scope": ( + "Construction cells plus deterministic last-position batches; " + "not a learned-model training rerun." + ), + } + (OUT / f"{output_name}.json").write_text(json.dumps(payload, indent=2) + "\n") + print( + f"{output_name}: baseline={baseline['last_position_accuracy']:.6f} " + f"control={control['last_position_accuracy']:.6f} n={baseline['eligible_last_position_examples']}", + flush=True, + ) + + +if __name__ == "__main__": + main() diff --git a/source/2603.08859v1.tar.gz b/source/2603.08859v1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..58831f03491389bf69364443fd5d13ef9c541f28 --- /dev/null +++ b/source/2603.08859v1.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8d22bfd259aaa60385841d8643109ecb66f7eb1081dd76429f5215f05a032e8 +size 3403510 diff --git a/source/authored/00README.json b/source/authored/00README.json new file mode 100644 index 0000000000000000000000000000000000000000..4b733249f1c36ef7d7504b4cf43ae97e06177f8b --- /dev/null +++ b/source/authored/00README.json @@ -0,0 +1,13 @@ +{ + "sources" : [ + { + "usage" : "toplevel", + "filename" : "main.tex" + } + ], + "spec_version" : 1, + "texlive_version" : "2025", + "process" : { + "compiler" : "pdflatex" + } +} diff --git a/source/authored/appendix/app_prelim.tex b/source/authored/appendix/app_prelim.tex new file mode 100644 index 0000000000000000000000000000000000000000..59a9e6941b58a0fd6a1182c356da2cb5aa974697 --- /dev/null +++ b/source/authored/appendix/app_prelim.tex @@ -0,0 +1,109 @@ +\section{Complete Preliminaries and Notations}\label{app notations} + +\begin{table}[t] + \centering + \begin{tabular}{|c|c|} + \hline + Symbol & Meaning \\ + \hline \hline + $\phi, \psi, \Phi$ & Token and Positional Embeddings \\ + $u,v$ & Control parameters of the task \\ + $F$ & The target task \\ + $H$ & (Relative) Entropy \\ + $I$ & Mutual Information \\ + $\W_q,\W_k,\W_v,\W_o$ & Transformer parameters \\ + $\W_A,\W_B,\W_C,\Delta$ & SSM parameters \\ + $\x$ & The input sequence \\ + $\cV$ & Vocabulary space \\ + $\cN, \cM$ & Number/Vocabulary components of $\cV$\\ + $Y$ & Target space, typically $\cV^n$ \\ + $d$ & The token dimension \\ + $d_s$ & The state dimension \\ + \hline + \end{tabular} + \caption{Notation.} + \label{tab:notation} +\end{table} + + + + + + +We consider sequence to sequence token prediction problem. Let $\cV$ be some vocabulary of tokens and $V = |\cV|$ and $\vec{\x}=(\x_i)_{i=1}^L$ be and input sequence. A language model $M$ is sequence to sequence map $M: \cV^L \to \cV^m$ of the form $M(\vec{\x}) = F_N\circ F_{N-1} \circ \dots \circ F_1 (\vec{\x})$, where each $F_i$ is a sequence to sequence map called layer. + + + + + + + + + +We will consider several different layers in this paper. + +\noindent \textbf{Transformer Layer.} +Consider an input $\x_1,\dots,\x_L$ such that $\x_i \in \R^d$. An attention head $\Attn$ is defined by matrices $\W_k,\W_q,\W_v\in \R^{d \times d}$ such that $\Attn(\vec{\x})_j = \sum_{i=1}^n \alpha_{ji} \W_v\x_i$, where +\begin{align*} + \alpha_{ji} := \frac{\exp\left((\W_q \x_j) \cdot (\W_k \x_i)\right)}{\sum_{i=1}^n \exp\left((\W_q \x_j) \cdot (\W_k \x_i)\right)}. +\end{align*} +\begin{remark} + We remark that for some practical applications, a bias term $B$ will also be added to the computation of attention. +\end{remark} + +An attention layer $\AT$ is defined by $H$ attention heads $\Attn_1,\dots,\Attn_H$ and a projection matrix $\W_o \in \R^{d \times dH}$. Denote by $\mathbf{O}:= (\Attn_1(\vec{\x})^\top,\dots,\Attn_H(\vec{\x})^\top)^\top \in \R^{dH \times L}$ the concatenation of the outputs of the $H$ attention heads, so the attention layer $\AT(\vec{\x})$ outputs $\W_o \mathbf{O} \in \R^{d \times L}$. + +A Transformer layer $\TF$ is defined by an attention layer $\AT$ and an MLP layer $\MLP$. In particular, an MLP layer is defined as $f(\x): \R^d \to \R^d$ as $f(\x) = \mathbf{U}_2 \sigma(\mathbf{U}_1 \x)$, where $\mathbf{U}_1,\mathbf{U}_2$ are matrices and $\sigma$ is an activation function applied coordinate-wise. Specifically, $\TF(\vec{\x}) = \MLP(\AT(\vec{\x}))$. + +\noindent \textbf{State Space Model Layer.} +We use a similar definition of SSM layer as \cite{jelassi2024repeat}. +A state space $\mathcal{S}$ is some finite set. We denote by $\mathrm{mem}(\mathcal{S})$ the number of bits required to encode the states of $\mathcal{S}$, namely $\mathrm{mem}(\mathcal{S}) = \log(|\mathcal{S}|)$. A \textit{generalized state space layer} (GSSM) is a sequence model defined by an update rule $u: \mathcal{S} \times \cV \rightarrow \mathcal{S}$ and some output function $r: \mathcal{S} \rightarrow \cV$. Let $s_0 \in \mathcal{S}$ be some initial state. Given some sequence $\x_1, \ldots, \x_L$, the state of the model at iteration $i$ is denoted by $S_i(\x_1, \ldots, \x_i)$ and the output token is denoted by $R_i(\x_1, \ldots, \x_i)$. The state and output are defined recursively: + +\begin{enumerate} + \item $S_0(\emptyset) = s_0$, + \item $S_i(\x_1, \ldots, \x_i) = u(S_{i-1}(\x_1, \ldots, \x_{i-1}), \x_i)$, + \item $R_i(\x_1, \ldots, \x_i) = r(S_i(\x_1, \ldots, \x_i))$. +\end{enumerate} + +\noindent \textbf{Mamba Layer.} +% In this work, we will be interested in a specific family of state space models, Mamba. Mamba is defined as follows. +Our SSM layers in our constructions are defined as follows. +Let $\MB\^i$ be a Mamba layer. Let $d$ be the token embedding dimension size and $d_s$ be the state dimension size. +% be equivalent to the original Mamba formulation. +Let +% \begin{align*} +% \W_A(\x_t) \in \R^{d \times d}, +% \W_B(\x_t) \in \R^{d}, +% \W_C(\x_t) \in \R^{d}, +% \Delta(\x_t) \in \R +% \end{align*} +\begin{align*} + \W_A \in \R^{d_s \times d_s}, + \W_B \in \R^{d_s \times d}, + \W_C \in \R^{d \times d_s}, + \Delta(\x_t) \in \R +\end{align*} +be constants and a function that returns the shift in time $\Delta(\x_t)$ based on the current token. We update the hidden state matrix as follows: +\begin{align*} + H_t &= (I - \Delta(\x_t)\W_A) H_{t-1} + \Delta(\x_t) \W_B \x_t \\ + y_t &= \W_C H_t +\end{align*} + +This follows from the first-order approximation of the S6, where $\exp(-\Delta A) \approx I - \Delta A$. This is useful for construction purposes to avoid large constants $M \gg 1$ to push $\exp$ close to $0$. Equivalent constructions can be found by instead placing a large constant $M$ is specific locations with the original $\exp$. + +We also omit the typical per-token dependencies that exist for $\W_B$ and $\W_C$ in standard Mamba, as constant functions were sufficient for our constructions. + + + + + +In this work, we will consider two kinds of models used in practice, encoder-based models and decoder-based models. We next formally defined the two models as follows. + +\noindent \textbf{Encoder-Based Model.} An Encoder-Based Model $M$ can be thought of as a sequence-to-sequence map. That is to say, given a sequence of input tokens $\vec{x} = (\x_i)_{i=1}^L$, the model $M$ maps it to another sequence $\vec{y} = (y_i)_{i=1}^L$, each token $y_i$ corresponds to a token $\x_i$ in the sequence. Specifically, let $M = F_N \circ F_{N-1} \circ \cdots \circ F_1(\vec{\x})$ be a language model with $N$ layers. Each layer $F_t$ has an input $h^{(t-1)} \in \R^{d\times L}$ and an output $h^{(t)} \in \R^{d \times L}$, in particular $h\^0$ is the embedding of the input sequence $\vec{x}$. Furthermore, for every $t \in [N]$ and $i \in [L]$, $h\^t_i$ is a function of the whole vector $h^{(t-1)}$. + +\noindent \textbf{Decoder-Based Model(Autoregressive Model).} +A Decoder-Based Model $M$ can be thought of as an autoregressive(generative) model. Roughly speaking, for each input sequence $\vec{\x}$, we consider recursively generating $\x_{L+i} = M(\x_1,\dots,\x_{L+i-1})$ and denote by $M(\vec{\x}) = \x_{L+1},\x_{L+2},\dots$ the final output of the model $M$. For a multi-layer model $M = F_N \circ F_{N-1} \circ \cdots \circ F_1(\vec{\x})$, the inference stage of $M$ contains two stages. In the first stage, +each layer $F_t$ has an input $h^{(t-1)} \in \R^{d\times L}$ and an output $h^{(t)} \in \R^{d \times t}$, in particular $h^{(0)}$ is the embedding of the input sequence $\vec{\x}$. However, unless the encoder-based model, $h^{(t)}_i$ only depends on $h^{(t-1)}_1,\dots,h^{(t-1)}_i$. We will decode $h^{(N)}_L$ as $\x_{L+1}$ and enter the second stage, where we generate $\x_{L+2}$ by consuming $(\x_1,\dots,\x_{L+1})$. + + +\noindent \textbf{Memory Budget.} In this work, we will compare the behavior of different models according to their memory budget. In particular, we will consider two types of budgets: input-dependent memory and input-independent memory. By input-dependent memory, we mean the space needed for storing the input as well as the intermediate results. By input-independent memory, we mean the number of parameters of the model. \ No newline at end of file diff --git a/source/authored/appendix/construction_conventions.tex b/source/authored/appendix/construction_conventions.tex new file mode 100644 index 0000000000000000000000000000000000000000..f5cde7fca580197e2315df1897f8baa96b783159 --- /dev/null +++ b/source/authored/appendix/construction_conventions.tex @@ -0,0 +1,12 @@ + + + +\noindent \textbf{Embeddings.} +A binary embedding for a finite space $\cal X$ will be a map $\psi'_{d'}:\mathcal X \rightarrow \{-1, 1\}^{d'}$ where $d' \geq \log_2 |\mathcal X| $ or larger. + + + + + + + diff --git a/source/authored/appendix/constructions.tex b/source/authored/appendix/constructions.tex new file mode 100644 index 0000000000000000000000000000000000000000..56077e7dc3804397d4de4906ebbbb1a473ab99b3 --- /dev/null +++ b/source/authored/appendix/constructions.tex @@ -0,0 +1,350 @@ +\section{Omitted Proofs in \Cref{sec merge}} +\label{app:constructions} + + +\subsection{Proof of \Cref{th lb selective copying}}\label{app proof lb copy} + + + +\begin{theorem}[Restatement of \Cref{th lb selective copying}] +Consider the task of selective copying. There is a distribution $D$ over $\cV^L$ such that any pure state space model that can solve the task for some $\vec{\x}$ drawn from $D$ with probability $90\%$ must have $\sum_{i=1}^k\log(\card{\mathcal{S}_i}) \ge N \log M$, where $\mathcal{S}_i$ is the state space of the $i$th SSM layer, furthermore, any pure Transformer model that can solve the task with probability $90\%$ must have $\sum_{i=1}^kW_i \ge \Omega(L)$. +\end{theorem} + +\begin{proof}[Proof of \Cref{th lb selective copying}] +We write down the task in the form of a function composition $F(u(\vec{\x}),v(\vec{\x}))$. Let $u(\vec{\x}) = \vec{\x}_{L-N+1: L}$ and $v(\vec{\x}):=\argmax_{1 \le i \le L} x_i \in \cN$ and $F(u,v)$ be $u_{L+1-v}$. + +We first show that $F(u,v)$ satisfies \Cref{asp ssm lb}. We take $v^{(i)} = i, i \in [N]$, which implies $F(u,v^{(i)}) = u_i, i \in [N]$. Thus, $G(u)=(F(u,v^{(1)}),\dots,F(u,v^{(N)})) = u$ is an injection. Taking $m=q=N$, by \Cref{th SSM lb general}, +we know that when a pure SSM gives a sequence of input of the form $(u,v)$, where $u$ is drawn uniformly from $\cV$ and $v$ is drawn uniformly from $\cN$, then if the SSM wants to solve the task with probability at least $7/8$, it needs +\begin{align*} +\sum_{i=1}^k \log(\card{\mathcal{S}_i)} \ge \Omega(N \log(\card{M})), +\end{align*} +when a pure SSM is given $(u,v)$ such that $u$ is uniformly drawn from $\cV^m$ and $v$ is drawn uniformly from $\cN$. To simulate such a distribution over $(u,v)$ using a long context $\vec{\x}$, we select the first $L-1$ tokens from $\cV$ uniformly at random, while selecting the last token as a random token from $\{2,\dots,N\}$. Notice that such a distribution $D_S$ is sufficient to simulate the required distribution of $(u,v)$, since the effective part of $u$ is $u_{1:N-1}$ and $u$ is $u_{1:N-1}$ is independent on $v$. + + + +We next show that $F(u(x),v(x))$ is $L/2$ sensitive. Let $\vec{\x},\vec{x'} \in \cV^L$ be any input context such that $\vec{\x}_{L/2:L} = \vec{x'}_{L/2:L}$ and $\vec{\x}_i \not\in \cN$, for every $i=L/2,\dots,L$. This implies $v(\vec{\x})$ and $v(\vec{x'})$ only depends on the first $L/2$ coordinates. Thus, $F(u(\vec{\x}),v(\vec{\x}))$ is $L/2$ sensitive. By \Cref{th Transformer lb}, we know that any pure Transformer model that can compute $F(u(\vec{\x}),v(\vec{\x}))$ with a constant probability must have $\sum_{i=1}^k W_i \ge \Omega(L).$ In particular, to construct a distribution $D_T$ over $\vec{\x}$ that makes a pure Transformer fail, we draw $\vec{\x}$ such that $\vec{\x}_{L/2:L}$ is chosen uniformly from $\cM$ and $\vec{\x}_{L/2:L}$ is chosen uniformly from $\cV$. + +To conclude the proof of \Cref{th lb selective copying}, we will choose a distribution $D:= D_S/2 + D_T/2$. Under this distribution, a pure SSM with $\sum_{i=1}^k \log(\card{\mathcal{S}_i)} < \Omega(N \log(\card{M}))$ has a constant failure probability when $\vec{\x}$ is drawn from $D_S$ and a Transformer with working memory less than $o(L)$ has a constant failure probability when $\vec{\x}$ drawn from $D_T$. + \end{proof} + + + + + + + +\subsection{Proof of \Cref{th hybrid copy}}\label{app proof hybrid copy} + +\begin{theorem}[Restatement of \Cref{th hybrid copy}] +Consider the task of selective copying. There is a two-layer hybrid model that is a combination of a mamba layer and an attention layer that can solve the selective copying task for \emph{every} input sequence $\vec{\x} \in \cV^L$. Furthermore, the hybrid model has an embedding dimension $d = O( \max(\log \card{\cV},\log L))$ such that the Mamba layer has $O(\card{\cV})$ state spaces, while the attention layer has dimension $d$ and a sliding window size of $O(N)$. +\end{theorem} + + +\begin{proof}[Proof of \Cref{th hybrid copy}] +We first construct the two-layer hybrid model and show the correctness of the construction. + +\noindent \textbf{Token Embeddings.} +We begin by constructing an embedding function that maps each $\x \in \cV$ to a vector in $\R^{d'}$ for some $d>0$. +Let $d' = \log \card{\cV}$. We define $\psi': \cV \to \{\pm1\}^{d'}$ to be the binary encoding of the vocabulary $\cV$. For each $\x \in \cV$, we embed the token $\x$ as +\[\psi(\x) = \begin{pmatrix} + \psi'(\x) & \One_{\{\x \in \calN\}}\psi'(\x) & \mathbf{0} +\end{pmatrix}^\top.\] +Here $\mathbf{0} \in \R^{\ell}$ for some $\ell \le O(\log(\card{\cV})+\log L)$ is a zero vector. For a given input context $\vec{\x}$, the embedded context has the form of +\begin{equation*} + \begin{pmatrix} + \psi'(\x_1) & \psi'(\x_2) & \dots & \psi'(\x_{L-1}) & \psi'(\x_L) \\ + \One_{\{\x_1 \in \calN\}}\psi'(\x_1) & \One_{\{\x_2 \in \calN\}}\psi'(\x_2) & \dots & \One_{\{\x_{L-1} \in \calN\}}\psi'(\x_{L-1}) & \One_{\{\x_L \in \calN\}}\psi'(\x_{L}) \\ + \mathbf{0} & \mathbf{0} & \dots & \mathbf{0} & \mathbf{0} + \end{pmatrix}. +\end{equation*} +\noindent \textbf{Position Encoding.} +To allow the attention layer to access the position of the input tokens, we next add a position encoding to each input token. Define $\phi': [L] \to \{\pm 1\}^{\log L}$ be the binary encoding of numbers in $L$. For each $i \in [L]$, we encode the position $i$ using a function $\phi$ defined as follows +\begin{align*} + \phi(i) = \phi'(L+1-i). +\end{align*} +After adding the position encoding, the input context has the following form. +\begin{align*} + \Phi(\vec{\x}):=\begin{pmatrix} + \psi'(\x_1) & \dots & \psi'(\x_{L-1}) & \psi'(\x_L) \\ + \One_{\{\x_1 \in \calN\}}\psi'(\x_1) & \dots & \One_{\{\x_{L-1} \in \calN\}}\psi'(\x_{L-1}) & \One_{\{\x_L \in \calN\}}\psi'(\x_{L}) \\ + \mathbf{0} & \dots & \mathbf{0} & \mathbf{0} \\ + \phi(1) & \dots & \phi(L-1) & \phi(L) + \end{pmatrix} +\end{align*} +By construction, each column of the input context is in $\R^d$, for some $d = O(\log(\card{\cV}+\log L)$. +Given the embedding of the input context, we now construct the SSM layer and the attention layer of the hybrid model. + + +\noindent \textbf{Mamba Layer.} +We define the weights of the Mamba layer as follows. +Let $\W_A,\W_B,\W_C$ be as follows, +\begin{align*} + \W_B + \begin{pmatrix}\psi'(\x_i)\\\One_{\{\x_i \in \calN\}}\psi'(\x_i)\\\mathbf{0}\\\phi'(i)\end{pmatrix} + &= \One_{\{\x_i \in \calN\}}\psi'(\x_i) + , \quad + \W_C \bv = \begin{pmatrix}\mathbf{0} \\ \mathbf{0} \\ \bv \\ \mathbf{0}\end{pmatrix}, +\end{align*} + + + + +$\W_A = I$, and $\Delta(\x) = \Ind_{\{\x \in \cN\}}$. We claim the following guarantee for the constructed Mamba layer. +\begin{claim}\label{cl mamba2} + Let $\vec{\x} \in \cV^L$ be a sequence of input contexts. Given the embedded context $\Phi(\vec{\x})$, the SSM layer with parameter $\W_A,\W_B,\W_C,\Delta(\x)$, has the following output + \begin{align*} + \begin{pmatrix} + \psi'(\x_1) & \psi'(\x_2) & \dots & \psi'(\x_{L-1}) & \psi'(\x_L) \\ + \One_{\{\x_1 \in \calN\}}\psi'(\x_1) & \One_{\{\x_2 \in \calN\}}\psi'(\x_2) & \dots & \One_{\{\x_{L-1} \in \calN\}}\psi'(\x_{L-1}) & \One_{\{\x_L \in \calN\}}\psi'(\x_{L}) \\ + \phi({L+1-n_1}) & \phi({L+1-n_2}) & \dots & \phi({L+1-n_{L-1}}) & \phi({L+1-n_L}) \\ + \mathbf{0} & \mathbf{0} & \dots & \mathbf{0} & \mathbf{0} \\ + \phi(1) & \phi(2) & \dots & \phi(L-1) & \phi(L) + \end{pmatrix}, + \end{align*} +where $n_i = \x_{\argmax_{1 \leq j \leq i} \x_j \in \calN}$ +\end{claim} + +\begin{proof}[Proof of \Cref{cl mamba}] + +By our choice of $\Delta(\x_t)$, if $\x_t \in \N$, then $H_t = \W_B\Phi(\x_t)$ and if $\x_t \not \in \N$, then $H_t = H_{t-1}$. Notice that if we set $H_0$ to be a zero vector, then by induction, for each $t$, $H_t$ is a sparse vector, with the only non-zero component $\phi(L+1-n_i) = \psi'(n_i)$. Using an MLP layer to combine the output with the input, we know that the input context +\begin{align*} + \begin{pmatrix} + \psi'(\x_1) & \psi'(\x_2) & \dots & \psi'(\x_{L-1}) & \psi'(\x_L) \\ + \One_{\{\x_1 \in \calN\}}\psi'(\x_1) & \One_{\{\x_2 \in \calN\}}\psi'(\x_2) & \dots & \One_{\{\x_{L-1} \in \calN\}}\psi'(\x_{L-1}) & \One_{\{\x_L \in \calN\}}\psi'(\x_{L}) \\ + \phi(L+1-{n_1}) & \phi(L+1-{n_2}) & \dots & \phi(L+1-{n_{L-1}}) & \phi(L+1-{n_L}) \\ + \mathbf{0} & \mathbf{0} & \dots & \mathbf{0} & \mathbf{0} \\ + \phi(1) & \phi(2) & \dots & \phi(L-1) & \phi(L) + \end{pmatrix}. + \end{align*} +\end{proof} + +\noindent \textbf{Attention Layer.} Based on the output of the Mamba layer, we will now construct an attention layer that can solve the copy task. Let $\W_q,\W_k,\W_v$ be the weight matrices of the attention layer. +\begin{align*} + \W_q \begin{pmatrix}\psi'(\x_i) + % \\\One_{\{\x_i \in \calN\}} + \\\One_{\{\x_i \in \calN\}}\psi'(L+1-\x_i) + \\\phi'({n_i})\\\mathbf{0}\\\phi'(i)\end{pmatrix} &= M\phi({n_i}) ,\quad + \W_k \begin{pmatrix}\psi'(\x_i) + % \\\One_{\{\x_i \in \calN\}} + \\\One_{\{\x_i \in \calN\}}\psi'(L+1-\x_i) \\\phi'({n_i})\\\mathbf{0}\\\phi'(i)\end{pmatrix} = \phi(i) \\ + \W_v \begin{pmatrix}\psi'(\x_i) + % \\\One_{\{\x_i \in \calN\}} + \\\One_{\{\x_i \in \calN\}}\psi'(L+1-\x_i) \\\phi'({n_i})\\\mathbf{0}\\\phi'(i)\end{pmatrix} &= \begin{pmatrix}\mathbf{0}\\0\\\mathbf{0}\\\psi'(\x_i)\\\mathbf{0}\end{pmatrix} \\ +\end{align*} +We summarize the performance of the attention layer as the following claim. +\begin{claim}\label{cl tf copy} + Let $\SSM(\vec{\x})$ be the output of the Mamba layer constructed above. By applying an attention mechanism with parameters $\W_q,\W_k,\W_v$ with a window size of $N$, the last output vector is a sparse vector with the only non-zero part $\psi(\x_{L+1-n_L})$. +\end{claim} +\begin{proof}[Proof of \Cref{cl tf copy}] + Notice that the last output vector is defined as + \begin{align*} + \sum_{i=L+1-N}^L \frac{\exp(M\phi(n_L)\phi(i))}{\sum_{i=L+1-N}^L \exp(M\phi(n_L)\phi(i))}\begin{pmatrix}\mathbf{0}\\0 + % \\\mathbf{0} + \\\mathbf{0}\\\psi'(\x_i)\\\mathbf{0}\end{pmatrix} = \begin{pmatrix}\mathbf{0}\\0 + % \\\mathbf{0} + \\\mathbf{0}\\\psi'(\x_{L+1-n_L})\\\mathbf{0}\end{pmatrix} + \end{align*} +\end{proof} +In fact, if we use a full attention, then after passing the attention layer, the context now has the form +\begin{align*} + \begin{pmatrix} + \psi'(\x_1) & \psi'(\x_2) & \dots & \psi'(\x_{L-1}) & \psi'(\x_L) \\ + \One_{\{\x_1 \in \calN\}}\psi'(\x_1) & \One_{\{\x_2 \in \calN\}}\psi'(\x_2) & \dots & \One_{\{\x_{L-1} \in \calN\}}\psi'(\x_{L-1}) & \One_{\{\x_L \in \calN\}}\psi'(\x_{L}) \\ + \phi({n_1}) & \phi({n_2}) & \dots & \phi({n_{L-1}}) & \phi({n_L}) \\ + \psi'(x_{L+1-n_1}) & \psi'(x_{L+1-n_2}) & \dots & \psi'(x_{L+1-n_{L-1}}) & \psi'(x_{L+1-n_{L}}) \\ + \phi(1) & \phi(2) & \dots & \phi(L-1) & \phi(L) + \end{pmatrix}. + \end{align*} +This implies that by applying the natural decoding that copies only the row with $\psi'(\x_{L+1-n_1})$. The final sequence (up to arbitrarily small error) has the form +\textbf{\begin{equation*} + \begin{bmatrix} + \psi'(\x_{L+1-n_1}) & \psi'(\x_{L+1-n_2}) & \dots & \psi'(\x_{L+1-n_{L-1}}) & \psi'(\x_{L+1-n_L}) + \end{bmatrix} +\end{equation*}} + +To conclude the proof of \Cref{th hybrid copy}, it remains to count the number of parameters and the working memory of the constructed hybrid model. +\end{proof} + +\subsection{Proof of \Cref{th lb associate recall}}\label{app proof lb recall} + + +\begin{theorem}[Restatement of \Cref{th lb associate recall}] + Consider the task of associative recall with decoding. + There is a distribution $D$ over $\cV^L$ such that any pure state space model that can solve the task for some $\vec{\x}$ drawn from $D$ with probability $90\%$ must have $\sum_{i=1}^k\log(\card{\mathcal{S}_i}) \ge \Omega (W \log W)$, where $\mathcal{S}_i$ is the state space of the $i$th SSM layer and $W = \card{\cM}$, furthermore, any pure Transformer model that can solve the task with probability $90\%$ must have $\sum_{i=1}^kW_i \ge \Omega(L)$. +\end{theorem} + +\begin{proof}[Proof of \Cref{th lb associate recall}] + To prove the hardness of the task, we will consider a constraint version of the problem. To do this, we partition equally partition the vocabulary $\cM$ into $\cM_1 = \{\alpha_1,\dots,\alpha_{W/2}\} ,\cM_2 = \{\beta_{1},\dots,\beta_{W/2}\}$. For every possible input $\vec{\x}$, we restrict $\vec{\x}$ of the following form. $\vec{\x} = (\alpha_{i1},\beta_{i1},b_{i1},\dots,\alpha_{ik},\beta_{ik},b_{ik})\in \cV^L$. Here, for $j \in [l]$, $b_{ij}$ either does not appear or $b_{ij} \in \{0,1\}$. Now, we partition $\vec{\x}$ into two parts. Let $\vec{b}=(b_{i1},\dots,b_{ik})$ be the 0-1 subsequence of $\vec{\x}$ and $\vec{w} = (\alpha_{i1},\beta_{i1},b_{i1},\dots,\alpha_{ik},\beta_{ik},b_{ik})$ be subsequence of $\vec{\x}$ with every token in $\cM$. Given this partition, we write the problem as a function composition. For each $\alpha \in \cM_1$, let $\beta(\alpha) \in \cM_2$ be the next token of the last appearance of $\alpha$ in $\vec{w}$. Let $u = (\beta(\alpha))_{\alpha \in \cM_1} \in \cM_2^k$ and let $v \in \cM_1$ be the token corresponding to binary representation $\vec{b}$ of elements in $\cM_1$. Then $F(u,v) = \beta(v)$. We notice that by choosing $G(u)=(\beta(\alpha_1),\dots,\beta(\alpha_{W/2}))$ is an injection. + Taking $m=q=W/2$, by \Cref{th SSM lb general}, +we know that when a pure SSM gives a sequence of input of the form $(u,v)$, where $u$ is uniformly drawn from $\cM_2^{M/2}$ and $v$ is drawn uniformly from $\cM_1$, then if the SSM wants to solve the task with probability at least $7/8$, it needs +\begin{align*} +\sum_{i=1}^k \log(\card{\mathcal{S}_i)} \ge \Omega(W \log(\card{W})), +\end{align*} + +To simulate such a distribution over $(u,v)$ using a distribution $D_S$ over a long context $\vec{\x}$, we select each $(\alpha_{ij},\beta_{ij})$ uniformly at random and after selecting $\vec{w}$, we randomly select $\vec{b}$ and append it to $\vec{w}$. + + + On the other hand, + by sampling $\vec{w}$ uniformly from, we know that with probability at least $99\%$, for each $\alpha \in \cM_1$, the last appearance of $\alpha$ must be at the last $\Tilde{O}(W)$ positions of $\vec{w}$. By \Cref{th Transformer lb}, we know that any pure Transformer model that can compute $F(u(\vec{\x}),v(\vec{\x}))$ with a constant probability must have $\sum_{i=1}^k W_i \ge \Omega(L)$ if we randomly selecting $\vec{b}$ and appending it before $\vec{w}$. we denote the resulting distribution by $D_T$. + + +To conclude the proof of \Cref{th lb associate recall}, we will choose a distribution $D:= D_S/2 + D_T/2$. Under this distribution, a pure SSM with $\sum_{i=1}^k \log(\card{\mathcal{S}_i)} < \Omega(W \log(W))$ has a constant failure probability when $\vec{\x}$ is drawn from $D_S$ and a Transformer with working memory less than $o(L)$ has a constant failure probability when $\vec{\x}$ drawn from $D_T$. + + +\end{proof} + +\subsection{Proof of \Cref{th hybrid recall}}\label{app proof hybrid recall} + + +\begin{theorem}{Restatement of \Cref{th hybrid recall}} +Consider the task of associative recall with decoding. There is a three-layer hybrid model that is a combination of a mamba layer and two attention layers that can solve the associative recall with decoding task with probability $99\%$ for an input sequence $\vec{\x} \in \cV^L$ drawn from a uniform distribution. Furthermore, the hybrid model has an embedding dimension $d = O( \max(\log \card{\cV},\log L))$ such that the Mamba layer has $O(\card{\cV})$ state spaces, while the attention layer has dimension $d$ and a sliding window size of $\Tilde{O}(\card{\cV})$. +\end{theorem} + + +\begin{proof}[Proof of \Cref{th hybrid recall}] + We first construct the three-layer hybrid model and show the correctness of the construction. + +\noindent \textbf{Token Embeddings} +Let $\cB = \{0,1\}$ be the set containing the two bits in the vocabulary. We begin by constructing an embedding function that maps each $\x \in \cV$ to a vector in $\R^{d'}$ for some $d>0$. +Let $d' = \log \card{\cV}$. We define $\psi': \cV \to \{\pm 1\}^{d'}$ to be the binary encoding of the vocabulary $\cV$. For each $\x \in \cV$, we embed the token $\x$ as +\[\psi(\x) = \begin{pmatrix} + \psi'(\x) & \mathbf{0} &\One_{\{\x \in \cB\}}\psi'(\x) & \mathbf{0} +\end{pmatrix}^\top.\] +Here $\mathbf{0} \in \R^{\ell}$ for some $\ell \le O(\log(\card{\cV})+\log L)$ is a zero vector. Also, $\One_{\{\x \in \cB\}}$. For a given input context $\vec{\x}$, the embedded context has the form of +\begin{equation*} + \begin{pmatrix} + \psi'(\x_1) & \psi'(\x_2) & \dots & \psi'(\x_{L-1}) & \psi'(\x_L) \\ + \mathbf{0} & \mathbf{0} & \dots & \mathbf{0} & \mathbf{0} \\ + % \One_{\{\x_1 \in \cB\}} & \One_{\{\x_2 \in \cB\}} & \dots & \One_{\{\x_{L-1} \in \cB\}} & \One_{\{\x_L \in \cB\}}\\ + \One_{\{\x_1 \in \cB\}}\psi'(\x_1) & \One_{\{\x_2 \in \cB\}}\psi'(\x_2) & \dots & \One_{\{\x_{L-1} \in \cB\}}\psi'(\x_{L-1}) & \One_{\{\x_L \in \cB\}}\psi'(\x_{L}) \\ + \mathbf{0} & \mathbf{0} & \dots & \mathbf{0} & \mathbf{0} + \end{pmatrix}. +\end{equation*} +\noindent \textbf{Position Encoding.} +To allow the attention layer to access the position of the input tokens, we next add a position encoding to each input token. Define $\phi: [L] \to \{\pm 1\}^{\log L}$ be the binary encoding of numbers in $L$. After adding the position encoding, the input context has the following form. +\begin{align*} + \Phi(\vec{\x}):=\begin{pmatrix} + \psi'(\x_1) & \dots & \psi'(\x_{L-1}) & \psi'(\x_L) \\ + \mathbf{0} & \dots & \mathbf{0} & \mathbf{0} \\ + % \One_{\{\x_1 \in \cB\}} & \dots & \One_{\{\x_{L-1} \in \cB\}} & \One_{\{\x_L \in \cB\}}\\ + \One_{\{\x_1 \in \cB\}}\psi'(\x_1) & \dots & \One_{\{\x_{L-1} \in \cB\}}\psi'(\x_{L-1}) & \One_{\{\x_L \in \cB\}}\psi'(\x_{L}) \\ + \mathbf{0} & \dots & \mathbf{0} & \mathbf{0} \\ + \phi(1) & \dots & \phi(L-1) & \phi(L) + \end{pmatrix} +\end{align*} +By construction, each column of the input context is in $\R^d$, for some $d = O(\log(\card{\cV}+\log L)$. +Given the embedding of the input context, we now construct the SSM layer and the attention layer of the hybrid model. + +\noindent \textbf{Mamba Layer.} +We will need a state dimension $d_s$ equal to the number of bits per bit sequence. Let $\W_A = I - S$ be the block diagonal matrix, where $S$ is the permutation matrix satisfying +\begin{align*} + S z = (z_2,\dots,z_{d_s-1},z_{d_s},0), \forall z \in \R^{d_s}. +\end{align*} + +We define $\W_B$ and $\W_C$ as follows, + +\begin{align*} + \W_B \begin{pmatrix}\psi'(\x_i) + \\ + \mathbf{0} \\ + \One_{\{\x_i \in \cB\}}\psi'(\x_i)\\\mathbf{0}\\\phi'(i)\end{pmatrix} = + \begin{pmatrix}\mathbf{0} \\ \One_{\{\x_i \in \cB\}} \psi'(x_i)\end{pmatrix} + , \quad\W_C + \bv + = \begin{pmatrix}\mathbf{0}\\ \mathbf{0} \\\mathbf{0}\\ \bv \\\mathbf{0}\end{pmatrix}, +\end{align*} + + + and $\Delta(\x) = \Ind_{\{\x \in \cB\}}$. We claim the following guarantee for the constructed Mamba layer. +\begin{claim}\label{cl mamba} + Let $\vec{\x} \in \cV^L$ be a sequence of input contexts. Given the embedded context $\Phi(\vec{\x})$, the SSM layer with parameters $\W_A,\W_B,\W_C,\Delta(\x)$, has the following output + \begin{align*} + \begin{pmatrix} + \psi'(\x_1) & \psi'(\x_2) & \dots & \psi'(\x_{L-1}) & \psi'(\x_L) \\ + \mathbf{0} & \mathbf{0} & \dots & \mathbf{0} & \mathbf{0} \\ + \One_{\{\x_1 \in \cB\}}\psi'(\x_1) & \One_{\{\x_2 \in \cB\}}\psi'(\x_2) & \dots & \One_{\{\x_{L-1} \in \cB\}}\psi'(\x_{L-1}) & \One_{\{\x_L \in \cB\}}\psi'(\x_{L}) \\ + \phi({n_1}) & \phi({n_2}) & \dots & \phi({n_{L-1}}) & \phi({n_L}) \\ + \mathbf{0} & \mathbf{0} & \dots & \mathbf{0} & \mathbf{0} \\ + \phi(1) & \phi(2) & \dots & \phi(L-1) & \phi(L) + \end{pmatrix}, + \end{align*} +where $n_i = v(\vec{\x}_{1:i})$ corresponds to token in $\cM$ that matches the binary representation of the $0-1$ subsequence of $\vec{\x}_{1:i}$. +\end{claim} + +\begin{proof}[Proof of \Cref{cl mamba}] +We initialize $H_0 = 0$ and do induction over $H_t$. By our construction, only the third block of $H_t$ is non-zero. So, for the convenience of notation, we use $H_t$ to denote the third block of the state. Assuming that in time step $t$, $H_t=\phi(n_t)$, we prove this for time step $t+1$. Write $\phi(n_t) = (z_1,\dots,z_{d'})$. If $\x_{t+1} \not\in \{0,1\},$ then $\Delta(\x_{t+1}) =0,$ which implies $H_{t+1} = H_t$ and $n_t = n_{t+1}$. If $\x_{t+1} \in \{0,1\},$ then +$H_{t+1} = SH_t + \x_{t+1} = \phi(n_{t+1})$. Thus, the third block of the matrix is always $\phi(n_t)$. This implies, after using an MLP layer to combine the output with the input sequence, we know that in the input context has the form of + \begin{align*} + \begin{pmatrix} + \psi'(\x_1) & \psi'(\x_2) & \dots & \psi'(\x_{L-1}) & \psi'(\x_L) \\ + \mathbf{0} & \mathbf{0} & \dots & \mathbf{0} & \mathbf{0} \\ + \One_{\{\x_1 \in \cB\}}\psi'(\x_1) & \One_{\{\x_2 \in \cB\}}\psi'(\x_2) & \dots & \One_{\{\x_{L-1} \in \cB\}}\psi'(\x_{L-1}) & \One_{\{\x_L \in \cB\}}\psi'(\x_{L}) \\ + \phi({n_1}) & \phi({n_2}) & \dots & \phi({n_{L-1}}) & \phi({n_L}) \\ + \mathbf{0} & \mathbf{0} & \dots & \mathbf{0} & \mathbf{0} \\ + \phi(1) & \phi(2) & \dots & \phi(L-1) & \phi(L) + \end{pmatrix}, + \end{align*} + +\end{proof} + + + + +\noindent \textbf{Transformer Block.} Based on the output of the Mamba layer, we will now construct a Transformer block that can solve the recall task. The Transformer block contains two layers. The first layer contains two heads, while the second layer contains only one head. + +We start with the construction of the first layer. The first layer maps each token $\x_t$ to $(\x_{t-1},\x_{t})^\top$. We denote by $\Attn^{(1)},\Attn^{(2)}$ the two heads of the first attention layer $\AT^{(1)}$. +For the first head, we define $\W_q^{(1)}=\W_k^{(1)}=0$, $(B_i)_j = -\infty \Ind(j \neq i-1)$. That is to say $\Attn^{(1)}$ is used to select the previous element for each position. We set $\W_v^{(1)}$ such that +\begin{align*} + \W_v^{(1)} \begin{pmatrix}\psi'(\x_i) + \\ + \mathbf{0} \\ + \One_{\{\x_i \in \cB\}}\psi'(\x_i)\\\mathbf{0}\\\phi'(i)\end{pmatrix} = \begin{pmatrix}\mathbf{0}\\ \psi'(\x_i) \\ + \mathbf{0}\\\mathbf{0}\\\mathbf{0}\end{pmatrix} +\end{align*} +For the second head, we set $\W_q^{(1)}=\W_k^{(1)}=0$, with $(B_i)_j = -\infty \Ind(j \neq i).$ And we set $\W_v^{(2)} = I$. This implies given any input sequence $\vec{\x}$, we have +\begin{align*} + \AT^{(1)}(\SSM(\vec{\x})) = \begin{pmatrix} + \psi'(\x_1) & \psi'(\x_2) & \dots & \psi'(\x_{L-1}) & \psi'(\x_L) \\ + \psi'({\x_0}) & \psi'(\x_1) & \dots & \psi'(\x_{L-2}) & \psi'(\x_{L-1}) \\ + \One_{\{\x_1 \in \cB\}}\psi'(\x_1) & \One_{\{\x_2 \in \cB\}}\psi'(\x_2) & \dots & \One_{\{\x_{L-1} \in \cB\}}\psi'(\x_{L-1}) & \One_{\{\x_L \in \cB\}}\psi'(\x_{L}) \\ + \phi({n_1}) & \phi({n_2}) & \dots & \phi({n_{L-1}}) & \phi({n_L}) \\ + \mathbf{0} & \mathbf{0} & \dots & \mathbf{0} & \mathbf{0} \\ + \phi(1) & \phi(2) & \dots & \phi(L-1) & \phi(L) + \end{pmatrix}. +\end{align*} +That is to say, the first attention layer maps each column of the input into a query $\x_i^q = \phi(n_i)$, a key $\x_i^k = \psi'(\x_{i-1})$, and a value $\x_i^v = \psi'(\x_i)$. +We next design the second layer $\AT^{(2)}$ that contains only a single head to perform the attention mechanism using the output of $\AT^{(1)}$. +Let $\W_q,\W_k,\W_v$ be the weight matrices of the attention layer. +\begin{align*} + \W_q \begin{pmatrix}\psi'(\x_i)\\\psi'({\x_{i-1}})\\\One_{\{\x_i \in \cB\}}\psi'(\x_i) \\\phi({n_i})\\\mathbf{0}\\\phi(i)\end{pmatrix} = M\phi({n_i}) ,\quad + \W_k \begin{pmatrix}\psi'(\x_i)\\\psi'({\x_{i-1}})\\\One_{\{\x_i \in \cB\}}\psi'(\x_i) \\\phi({n_i})\\\mathbf{0}\\\phi(i)\end{pmatrix}= \psi'(\x_{i-1}) ,\quad + \W_v \begin{pmatrix}\psi'(\x_i)\\\psi'({\x_{i-1}})\\\One_{\{\x_i \in \cB\}}\psi'(\x_i) \\\phi({n_i})\\\mathbf{0}\\\phi(i)\end{pmatrix} = \begin{pmatrix}\mathbf{0}\\\mathbf{0}\\\mathbf{0}\\\mathbf{0}\\\psi'(\x_i)\\\mathbf{0}\end{pmatrix} \\ +\end{align*} +We also add a bias $B$ for each position, so that the argmax is achieved at the last recall token. This implies the last output vector is + \begin{align*} + \sum_{i=1}^L \frac{\exp(M(\phi(n_L)\phi(\x_{i-1}) +B_{Li}))}{\sum_{i=1}^L \exp((M\phi(n_L)\phi(\x_{i-1})+B_{Li}))}\begin{pmatrix}\mathbf{0}\\\mathbf{0}\\\mathbf{0}\\\mathbf{0}\\\psi'(\x_i)\\\mathbf{0}\end{pmatrix} = \begin{pmatrix}\mathbf{0}\\\mathbf{0}\\\mathbf{0}\\\mathbf{0}\\\psi'(\x^*_{i+1})\\\mathbf{0}\end{pmatrix} + \end{align*} +This implies that the hybrid model outputs the correct recall token. We remark that when tokens in $\cM$ are drawn uniformly, with probability $99\%$, each token in $\cM$ appears among the last $\Tilde{O}(W)$ tokens in $\vec{\x}$. This implies that instead of using a window of size $L$, a window of size $\Tilde{O}(W)$ is enough to get the same output. + +\end{proof} + +\subsection{Construction Implementations} + +\label{app constructions} +Both of these constructions are implemented in the code repository. We show here the input embedding and the output of these different constructions. Selective copying's construction can be found in \Cref{fig:construction_selective_copy} and Associative Recall with Decoding's construction can be found in \Cref{fig:construction_decode_recall}. On interesting aspect of these constructions comes from their similarity and dissimilarity to the structures in learned models. Typically, learned models on selective copying learn to output the correct token at each position in the context, while the construction only provides the correct token in the last position. In contrast, the associative recall with decoding construction outputs the correct token at each position in the context, similar to learned models. This difference can be understood in when a task uses fixed positional differences. The selective copying construction uses a fixed mechanism to look-up a distance away from the last token, while learned models learn a more general relative positioning. Associative recall with decoding does not use relative positions, leading to a construction that more readily works at every token position. + +\begin{figure} + \centering + \includegraphics[width=0.49\linewidth]{fig/exps/constructions/selective_copy_input.pdf} + \includegraphics[width=0.49\linewidth]{fig/exps/constructions/selective_copy_output.pdf} + \caption{An example of the input/embedding and the output for selective copy. The aspects of the construction are kept in relatively similar positions in the implementation. Dark purple is -1, cyan is 0, and yellow is 1.} + \label{fig:construction_selective_copy} +\end{figure} + +\begin{figure} + \centering + \includegraphics[width=0.49\linewidth]{fig/exps/constructions/decode_recall_input.pdf} + \includegraphics[width=0.49\linewidth]{fig/exps/constructions/decode_recall_output.pdf} + \caption{An example of the input/embedding and the output for associative recall with decoding. The aspects of the construction are kept in relatively similar positions in the implementation. Dark purple is -1, cyan is 0, and yellow is 1.} + \label{fig:construction_decode_recall} +\end{figure} \ No newline at end of file diff --git a/source/authored/appendix/experiment_details.tex b/source/authored/appendix/experiment_details.tex new file mode 100644 index 0000000000000000000000000000000000000000..d8b6c469476a3856c5f149ec84b25f76e2719f8c --- /dev/null +++ b/source/authored/appendix/experiment_details.tex @@ -0,0 +1,102 @@ +\section{Experiment Details}\label{app experiments} + +\subsection{Expressivity Experiments} + +All experiments had identical learning rate sweeps. Additionally, all experiments were trained to convergence using an AdamW optimizer. We used 100 steps of warm-up followed by a linearly decaying learning rate. The learning rate sweep was over the maximum learning rate. + +Experiments were ran 11 times, with the mean performance shown along with the 10 and 90 percentiles as error bars. The positional encodings used where RoPE (although similar behavior was observed for learned positional encodings). Transformers are made from GPTNeoX \cite{black-etal-2022-gpt}, and SSM layers are coming from Mamba. + +Experiment sweeps were conducted across token dimension. The Mamba layers contained more parameters than the Transformer layers, hence why some figures stop sooner for pure Transformers than for hybrids, and pure SSMs extend beyond the hybrids. + +Experiments at this scale were done with input length 100, unless otherwise specified. Investigating the behavior of these different architectures further, some other parameters were varied. Specifically, we were interested in how the number of heads, or the side of the Mamba state, affects the performance of these models. A sweep of learning rates were tested from 1e-4 to 1e+0 by factors of $\sqrt{10}$. All experiments were trained to convergence, typically with over 4x the compute after the loss plateaus. + +These models were also trained as seq-to-seq tasks rather than autoregressively. This was to prevent certain simple tasks from having simpler properties, such as becoming cyclic, which the models could learn instead. + +\noindent \textbf{Selective Copy.} For this task, we used number tokens $5$ through $10$ and 26 vocabulary tokens. Larger vocabulary sizes are explored below, although the behavior is similar. The default token dimension is $12$; this was the scale at which separations could be seen. At the scale of modern LLMs, this task is easily learned. + +\noindent \textbf{Associative Recall with Decoding.} This task proved less learnable than the others. The target dimensions swept were between 24 and 768. We used a bit sequence length of 5, so a vocabulary size of $2^5=32$ beyond these two bits. These experiments also specifically used three layer models rather than two layer ones; all two layer models never learned anything. + +\noindent \textbf{Multi-Key Associative Recall.} For this task, we used a query length of 2 and a vocabulary size of 8. This very small vocabulary came from needing to have seen the target pair in the context (of length 100). Any larger than $8^2=64$ keys would make failure to see the key occur with high probability. Similarly to selective copying, token dimensions were kept small, around 12. + +\noindent \textbf{Needle in a Haystack.} We used a vocabulary of 100 tokens, plus two marker tokens to indicate the position of the needle, and where the needle should be outputted. + + + +\subsection{Additional Experiments} + + +\begin{figure} + \centering + \includegraphics[width=0.4\linewidth]{fig/exps/var_copy/layers_dim_200.png} + \includegraphics[width=0.4\linewidth]{fig/exps/var_copy/layers_dim_1000.png} + \caption{Results of training the same architecture as the other, smaller vocabulary experiments, except with more tokens. The left figure shows results for a vocabulary of size 200, and the right figure shows results for a vocabulary of size 1000.} + \label{fig:app_var_copy_more_dim} +\end{figure} + +\noindent \textbf{Selective Copy.} We also tried larger vocabulary sizes for this task; this is something not expected to substantially change behavior. While a larger vocabulary is definitely possible, results were not significantly different for vocabularies of 200 or 1000. See \Cref{fig:app_var_copy_more_dim}. + + +Results for changing number of heads and state dimension can be see in \Cref{fig:app_var_copy}. One of the results immediately apparent from these experiments is that when the number of heads is any higher than 1, all of the models perform terribly. This is a result of performing experiments at this tiny scale. The deeper reason for this is likely that, in standard implementations of multi-head attention, the square key, query, and value matrices are partitioned into rectangular blocks, which act as the different heads. This, in essence, makes each head only have a projection into a space that is a fraction of the original hidden state. At this small scale, any such decrease can easily ruin performance. For example, at token dimension $12$ and $4$ heads, each head projects into $\sR^3$. + +The same does not hold for increasing the dimension of the state inside of the Mamba model. However, increasing the state did not improve performance in any clear, monotonic way. This issue likely stems from optimization issues with the very large scale of the hidden state in the Mamba models as compared to the embedding dimension of the model. + +\begin{figure} + \centering + % \subfigure[]{\includegraphics[width=24pt]{fig/exps/var_copy/layers_num_heads.png}} + \includegraphics[width=0.4\linewidth]{fig/exps/var_copy/layers_num_heads.png} + % \subfigure[]{\includegraphics[width=0.4\linewidth]{fig/exps/var_copy/layers_state_dim.png}} + \includegraphics[width=0.4\linewidth]{fig/exps/var_copy/layers_state_dim.png} + \caption{Results from training small models on Selective Copy. (a) changes the number of heads, and (b) increases the state dimension as described in Mamba. Defaults are token dimension 12, number of heads 1, and state dimension 1. Error bars are 0.1 and 0.9 quantiles around the mean.} + \label{fig:app_var_copy} +\end{figure} + +Additionally, we trained these small models on a more adversarial distribution, where according to the developed theorems, both the SSM and Transformer should perform poorly on half of the instances. For this distribution, half of the data points maintained a number token as their final token. This made the task difficult for SSMs to perform since they would need sufficient state to store all possible outputs for a different final token each time. On the other hand, half of the instances had very sparse number tokens, meaning that a Transformer with a small window for its attention would likely have the most recent number token outside of its context, hindering its performance. However, we should still expect the hybrid to perform well as both of these issues are mitigated. + +As we can see in Figure \ref{fig:app_var_copy_adversary}, the hybrid still does outperform both of the pure models, and the reverse hybrid. However, unlike the uniform distribution seen in Figure \ref{fig:exp_var_copy}, the hybrid performs much better in this environment. This could be because of many reasons, one being that in a uniform distribution, it might be harder for the SSM to decern the task, whereas when half of the instances have the number token as the final token, the pattern may make itself more apparent. The Transformer still performs around as well in this distribution, possibly indicating that in both cases number tokens frequently are outside of the windows for the Transformer. + +When expanding the available context window to these models, we observe two important things. First, Transformers tend to get \emph{worse}. This is different from what is predicted by our theory, indicating that there is an additional learnability difficulty for Transformers with larger contexts which hybrids avoid. Second, with large window sizes, the hybrid also frequently suffers, learning no better than the Transformer. This, again, is due to learnability issues rather than expressivity ones. + +\begin{figure} + \centering + \includegraphics[width=0.5\linewidth]{fig/exps/var_copy/layers_dim_adversary.png} + \caption{Selective Copy trained on an adversarial distribution, where half of the instances have a number token as their final token (hard for SSM), and half of the instances embed their last number token early in the sequence (hard for Transformers). This distribution is empirically easier for SSMs than uniform.} + \label{fig:app_var_copy_adversary} +\end{figure} + +\begin{figure} + \centering + % \subfigure[]{\includegraphics[width=0.4\linewidth]{fig/exps/var_copy/layers_dim.png}} + \includegraphics[width=0.45\linewidth]{fig/exps/var_copy/layers_window.png} + % \subfigure[]{\includegraphics[width=0.4\linewidth]{fig/exps/var_copy/layers_window.png}} + \caption{Results from training small models on Selective Copy. This changes the window of the context available to the model. } + \label{fig:app_exp_var_copy} +\end{figure} + + +\noindent \textbf{Multi-Key Associative Recall.} + +Increasing the number of heads and the size of the state tends to show both what is expected from the theory as well as the optimization issues more prevalent in the Selective Copy experiments. First, performance drops because of optimization issues, but after sufficient heads/state is added, performance again begins to grow. + +We can also see that when the side of the state increases, the pure SSM model grows in performance from a state dimension of 2 to a state dimension of 6, before decreasing again, likely again from these optimization issues. + +Also similar to selective copying, we see that as window size increases, the performance of the Transformer degrades, rather than improving. This is still due to learnability issues for long contexts with these Transformers, which hybrids mitigate. + +\begin{figure} + \centering + % \subfigure[]{\includegraphics[width=0.4\linewidth]{fig/exps/assoc_recall_mk/layers_dim.png}} + \includegraphics[width=0.45\linewidth]{fig/exps/assoc_recall_mk/layers_window.png} + % \subfigure[]{\includegraphics[width=0.4\linewidth]{fig/exps/assoc_recall_mk/layers_window.png}} + \caption{Results from training small models on Multi-Key Associative Recall. This changes the window of the context available to the model.} + \label{fig:app_exp_assoc_recall_mk} +\end{figure} + +\begin{figure} + \centering + \includegraphics[width=0.4\linewidth]{fig/exps/assoc_recall_mk/layers_num_heads.png} + % \subfigure[]{\includegraphics[width=0.4\linewidth]{fig/exps/assoc_recall_mk/layers_num_heads.png}} + \includegraphics[width=0.4\linewidth]{fig/exps/assoc_recall_mk/layers_state_dim.png} + % \subfigure[]{\includegraphics[width=0.4\linewidth]{fig/exps/assoc_recall_mk/layers_state_dim.png}} + \caption{Results from training small models on Multi-Key Associative Recall. (a) changes the number of heads, and (b) increases the state dimension as described in Mamba. Defaults are token dimension 12, number of heads 1, and state dimension 1. Error bars are 0.1 and 0.9 quantiles around the mean.} + \label{fig:app_assoc_recall_mk} +\end{figure} + diff --git a/source/authored/appendix/missing_proof_lb.tex b/source/authored/appendix/missing_proof_lb.tex new file mode 100644 index 0000000000000000000000000000000000000000..84d63454ed69d96cffd4ece80bd55bc048d75797 --- /dev/null +++ b/source/authored/appendix/missing_proof_lb.tex @@ -0,0 +1,104 @@ +\section{Omitted Proofs in \Cref{sec lb}}\label{app proof lb} + + +\subsection{Proof of \Cref{lm group ssm}}\label{app proof group ssm} + +\begin{lemma}[Restatement of \Cref{lm group ssm}] +Consider a $k$-layer auto-regressive SSM $M$ defined as $\SSM_1 \to \SSM_2 \to \dots \to \SSM_k$, where for $j \in [k]$, $\SSM_j$ is an SSM layer. There is a model $\SSM'$ that only consists a single layer SSM, which behaves the same as $M$. In particular, denote the state space of $\SSM_j$ as $\cS_j$, $j \in [k]$, and denote by the state space of $\SSM'$ as $\cS'$, then $\card{\cS'} \le \prod_{j=1}^k \card{\cS_j}$. +\end{lemma} + +\begin{proof}[Proof of \Cref{lm group ssm}] + Let $s\^j_0$, $u\^j$, $r\^j$, $R\^j_i$, and $S\^j_i$ be the SSM parameters that define $\SSM_j$. The output of this $k$-layer model is computed as follows: + \begin{align*} + S\^j_0(\emptyset) &= s\^j_0 \quad \text{ for } j \in [k] \\ + S\^1_i(\x_1,\dots,\x_i) &= u\^1(S\^1_{i-1}(\x_1,\dots,\x_{i-1}), \x_1) \\ + S\^j_i(R\^{j-1}_1,\dots,R\^{j-1}_i) &= u\^j(S\^j_{i-1}(R\^{j-1}_1,\dots,R\^{j-1}_{i-1}), R\^{j-1}_i) \quad \text{ for } 2 \le j \le k \\ + R\^j_i(R\^{j-1}_1,\dots,R\^{j-1}_i) &= r\^j(S\^j_i(R\^{j-1}_1,\dots,R\^{j-1}_i)) + \end{align*} + The output of each layer is fed into the next layer to update its state. + %By Lemma D.1 in \cite{jelassi2024repeat}, we know that for every $i \in [k]$, there is a decoding map $G_i: \mathcal{S} \to \cV$ for every input sequence $\vec{x}=(x_1,\dots,x_L)$, we can write $SSM_i(\vec{x}) = G_i ( S^i(\vec{x}) )$, where $S^i(\vec{x})$ is the state of $SSM_i$ after seeing the whole input $\vec{x}$. + We define $\cS'$ to be $\{(s_1,\dots,s_k) \mid s_i \in\cS^i, i \in [k] \}$, so $\card{\cS'} = \prod_{i=1}^k \card{\cS^i}$. Let $\SSM'$ have state + \[S'_i(\x_1,\dots,\x_i) = \lp(S\^1_i(\x_1,\dots,\x_i),\ S\^2_i(R\^1_1,\dots,R\^1_i),\ \dots\ ,S\^j_i(R\^{j-1}_1,\dots,R\^{j-1}_i)\rp).\] + We remark that the definition above is well defined, since for every $j \in [k]$, $(R\^j_1,\dots,R^j_i)$ only depends on $(\x_1,\dots,\x_i)$, thus is available at time $i$. The output function $r'$ is defined to be the output of the final layer of the multilayer SSM $(S'_i)_k$, + \[r'(S'_i(\x_1, \dots, \x_i)) = R\^k_i((S'_i)_k)\] + All other parameters are simply their application across the different components of the compound state. + \begin{align*} + S'_0(\emptyset) &= (s\^1_0, \dots, s\^j_0) \\ + u'(S'_{i-1}(\x_1, \dots, \x_{i-1}), \x_i) &= (S\^1_i, \dots, S\^j_i) + \end{align*} + % For each $i \in [k]$, we define $z_{ij}$ to be the $j$th input of $SSM_i$. We construct a single layer of a state space model as follows. + % \begin{align*} + % & S'_j(x_1,\dots,x_j) = (S^1(z_{11},\dots,z_{1j}),\dots,S^k(z_{k1},\dots,z_{kj})) \\ + % & R'_j(x_1,\dots,x_j) = r^k(S^k(z_{k1},\dots,z_{kj})) + % \end{align*} + % We remark that the definition above is well-defined, because for every $i \in [k]$, $(z_{i1},\dots,z_{ij})$ only depends on $(x_1,\dots,x_j)$. Furthermore, the output of $SSM'$ is the same as $M$ for every input sequence by definition. + This construction computes the same result as the original multilayer model with the same size of state. +\end{proof} + + +\subsection{Proof of \Cref{th SSM lb general}} \label{app proof SSM lb general} + +\begin{theorem}[Restatement of \Cref{th SSM lb general}] + Let $F$ be a function defined \Cref{def function composition} that satisfies \Cref{asp ssm lb}. There is a distribution $D$ over the input $(u,v)$ such that any model $M$ that is a composition of $k$ state space layers $\SSM_i$, with state space $\mathcal{S}_i, i \in [k]$ that can compute $F$ with probability $1/2$ must satisfy $\sum_{i=1}^k \log(\card{\mathcal{S}_i}) \ge \Omega(m\log(\card{\cV})-q\log(\card{\mathcal{Y}}))$. +\end{theorem} + + +\begin{proof}[Proof of \Cref{th SSM lb general}] + By \Cref{lm group ssm}, we only need to show the hardness against a single layer of state space model. By Yao's min-max principle, it is sufficient to show that we cannot construct any deterministic state-space model that can solve the problem with a good probability when the input is drawn from some distribution $D$. + We consider the following distribution $D$ over a sequence of length $m+n$ tokens. For the first $m$ tokens, we sample each token uniformly from $\cV$, representing $u$ is drawn uniformly at random. For the last $n$ tokens, we will draw $v \sim Q$ independent on $u$. We next lower bound the size of $\card{\mathcal{S}}$ of any SSM that can give the correct output when the input $(u,v)$ is drawn from $D$. Denote by $Y_i = F(u,v^{(i)})$ for $i \in [q]$ and $Y=(Y_1,\dots,Y_q)$. Furthermore, let $s = S_m(u)$ the random state of the model after reading $u$. By \Cref{asp ssm lb}, we know that $H(s\mid u) = 0$. + Since + \begin{align*} + I(u;s) = H(u) - H(u \mid s) = H(s) - H(s \mid u), + \end{align*} + we have + \begin{align*} + H(u) - H(u \mid s) = H(s) \le \log(\card{\mathcal{S}}), + \end{align*} + because the support of $s$ has size at most $\card{\mathcal{S}}$. We next upper bound $H(u \mid s)$. By the symmetry of mutual information, we have + \begin{align*} + H(u \mid s) & = H(Y \mid s) + H(u \mid Y, s) - H(Y \mid u, s) \\ + & = H(Y \mid s) \le \sum_{i=1}^q H(Y_i \mid s), + \end{align*} + where the second equation holds by $H(u \mid Y, s) - H(Y \mid u, s) = 0$. It remains to upper bound $H(Y_i \mid s)$. Let $\err_i:=\Pr_{u\sim \cV^m}(R(S_{m+n}(u,v^{(i)}))\neq Y_i)$. By Fano's inequality, we have + \begin{align*} + H(Y_i \mid s)\le H_2(\err_i) + \err_i \log(\card{\mathcal{Y}}). + \end{align*} + Thus, + \begin{align*} + H(u\mid s) &\le q \frac{1}{q}\sum_{i=1}^qH(Y_i \mid s)\\ + &\le q \frac{1}{q}\sum_{i=1}^q(H_2(\err_i) + \err_i \log(\card{\mathcal{Y}}))\\ + &\le q (H_2(\err)+\err \log(\card{\mathcal{Y}})) + \end{align*} + This implies, if we set up $\err<1/8$, then we have + \begin{align*} + \log(\card{\mathcal{S}}) \ge m\log(\card{\cV}) - q(H_2(1/8)+\log(\card{\mathcal{Y}})/8). + \end{align*} + +%\mnote{fix the last inequality by considering the range of $q$.} +To conclude the proof of \Cref{th SSM lb general}, we discuss the possible choice of $q$ and $\card{\mathcal{Y}}$ that satisfy \Cref{asp ssm lb}. Since $G(u):=(F(u,v^{(1)}),\dots,F(u,v^{(q)}))$ is an injection, we know that the smallest possible choice of $q, \card{\mathcal{Y}}$ satisfies $q\log(\card{\mathcal{V}}) = O(m\log(\card{\cV}))$. This implies $\log(\card{\mathcal{S}}) \ge \Omega(m\log(\card{\cV}))$ + + +\end{proof} + + + +\subsection{Proof of \Cref{th Transformer lb}}\label{app proof transform lb} + + +\begin{theorem}[Restatement of \Cref{th Transformer lb}] + Let $F$ be a function that satisfies \Cref{ass lb Transformer}. There is a distribution $D$ over the input such that any model $M$ that is a composition of $k$ Transformer blocks $\TF_1,\dots,\TF_k$ that can compute $F$ with probability $2/3$ must satisfy $\sum_{i=1}^k W_i \ge R$. +\end{theorem} + +\begin{proof}[Proof of \Cref{th Transformer lb}] +Consider any sliding window Transformer $M$ with window size $W_i$ for the $i$-th layer. Denote by $W = \sum_{i=1}^k W_i$ the effective window size of a Transformer. +Notice that the output of $M$ is a deterministic function of $(\x_{L-W+1},\dots,\x_L)$. Thus, we construct a distribution $D$ that draws $\vec{\x}$ and $\vec{\x'}$ uniformly. For any input drawn from $D$, $M$ has the same output. However, by definition, $F(\vec{\x}) \neq F(\vec{\x'})$, which implies that $M$ fails to output correctly with probability $1/2$. + + + + + + +% We first construct two distributions over the input $D_0$ and $D_1$. $D_0$ is a uniform distribution drawn from $\cV^L$. $D_1$ first draws an input sequence $\vec{x}$ from $D_0$ and chooses a random position $i$ and modifies $x_i$ to be a random number token. + +% Notice that for any fixed Transformer $M$ and for any input sequence $\vec{x}$, if we random draw a position $i$ from $L$, then the probability that this position is stored by any head of the model is at most $\sum_{i=1}^{M}\ell_i /L$. Since the output of any Transformer is uniquely defined by the stored key/value pairs, if we draw a sequence $\vec{x}$ from the mixture $D_0/2+D_1/2$, then with probability $3/4$, model $M$ will fail to output $\perp$ or the correct letter token if $\sum_{i=1}^{M}\ell_i /L<1/100$. +\end{proof} \ No newline at end of file diff --git a/source/authored/fig/construction_structure.pdf b/source/authored/fig/construction_structure.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1c6107f260363de755cff418f46a49b8e96bd452 Binary files /dev/null and b/source/authored/fig/construction_structure.pdf differ diff --git a/source/authored/fig/example.png b/source/authored/fig/example.png new file mode 100644 index 0000000000000000000000000000000000000000..6f111cabcc07673cb958cb347dd42eeb7a8c97c8 --- /dev/null +++ b/source/authored/fig/example.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f304cbf59f3c06bfa5a9e1df347701b4197cda26bc4ebd67e2471a104a84e50a +size 1643565 diff --git a/source/authored/fig/exps/assoc_recall_mk/layers_dim.png b/source/authored/fig/exps/assoc_recall_mk/layers_dim.png new file mode 100644 index 0000000000000000000000000000000000000000..9dc4d1f7f2d4b61ca7a2396682dc57e0e10514cf --- /dev/null +++ b/source/authored/fig/exps/assoc_recall_mk/layers_dim.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6bbbf7f68754086361ab6641322b7acf24f933b56fcb044c779a8b8f862212c +size 156208 diff --git a/source/authored/fig/exps/assoc_recall_mk/layers_num_heads.png b/source/authored/fig/exps/assoc_recall_mk/layers_num_heads.png new file mode 100644 index 0000000000000000000000000000000000000000..d91b65a829636da0e1ecf0c4ace40b4f57249df3 --- /dev/null +++ b/source/authored/fig/exps/assoc_recall_mk/layers_num_heads.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:047a87d7c7b5e81595113875f27955cf30ce33056894921b6532998d7ff6b01f +size 110328 diff --git a/source/authored/fig/exps/assoc_recall_mk/layers_state_dim.png b/source/authored/fig/exps/assoc_recall_mk/layers_state_dim.png new file mode 100644 index 0000000000000000000000000000000000000000..131219c60a7630fe1ebcfe648d16a4029b58230e --- /dev/null +++ b/source/authored/fig/exps/assoc_recall_mk/layers_state_dim.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c12d55000a42d3899f51599619e90ba7a24455c87aa113c0252a96ac1216e612 +size 124549 diff --git a/source/authored/fig/exps/assoc_recall_mk/layers_window.png b/source/authored/fig/exps/assoc_recall_mk/layers_window.png new file mode 100644 index 0000000000000000000000000000000000000000..e77256201a6ae58c83917b71af5b4281761c3be5 --- /dev/null +++ b/source/authored/fig/exps/assoc_recall_mk/layers_window.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5355c62564a80012078b25777a9fdbaedc96359ccd3081e2e09d4bfb30f933f +size 130935 diff --git a/source/authored/fig/exps/binary_recall/layers_dim_3.png b/source/authored/fig/exps/binary_recall/layers_dim_3.png new file mode 100644 index 0000000000000000000000000000000000000000..116f6e1c672decca0b055fe61889217954ea849d --- /dev/null +++ b/source/authored/fig/exps/binary_recall/layers_dim_3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6dd8cf4936994649a6d74ca2a1210c057571e19f0518584f6f15447a4d7272e +size 118862 diff --git a/source/authored/fig/exps/constructions/decode_recall_input.pdf b/source/authored/fig/exps/constructions/decode_recall_input.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3d7334ed2d5137b4a9b9541ff4946c94aafc5eb3 Binary files /dev/null and b/source/authored/fig/exps/constructions/decode_recall_input.pdf differ diff --git a/source/authored/fig/exps/constructions/decode_recall_output.pdf b/source/authored/fig/exps/constructions/decode_recall_output.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7a358831b00b3199ddfe556524ce9c193445f941 Binary files /dev/null and b/source/authored/fig/exps/constructions/decode_recall_output.pdf differ diff --git a/source/authored/fig/exps/constructions/selective_copy_input.pdf b/source/authored/fig/exps/constructions/selective_copy_input.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4e1ccce0eb7c6418e05fa9674074cccc32508abb Binary files /dev/null and b/source/authored/fig/exps/constructions/selective_copy_input.pdf differ diff --git a/source/authored/fig/exps/constructions/selective_copy_output.pdf b/source/authored/fig/exps/constructions/selective_copy_output.pdf new file mode 100644 index 0000000000000000000000000000000000000000..79dc9b50070ea04d92a8d262375f8bc051eebc24 Binary files /dev/null and b/source/authored/fig/exps/constructions/selective_copy_output.pdf differ diff --git a/source/authored/fig/exps/mini_decode_recall.png b/source/authored/fig/exps/mini_decode_recall.png new file mode 100644 index 0000000000000000000000000000000000000000..a34d10d1f94ac73b0f5cc17af799bf3a64a8841f --- /dev/null +++ b/source/authored/fig/exps/mini_decode_recall.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3200afa19cd9ebfd1ea5f6b1f53d02ad3683dcc3741ae00c67f8e34a89d6affc +size 145929 diff --git a/source/authored/fig/exps/needle/layers_dim.png b/source/authored/fig/exps/needle/layers_dim.png new file mode 100644 index 0000000000000000000000000000000000000000..ae2c3aaf945145c4f632bae0f5c71366e36b01f8 --- /dev/null +++ b/source/authored/fig/exps/needle/layers_dim.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b03026887e3d4046aafb90f766b6a5154a2b742222ee71c53a007c6a1ca57c91 +size 131846 diff --git a/source/authored/fig/exps/var_copy/layers_dim.png b/source/authored/fig/exps/var_copy/layers_dim.png new file mode 100644 index 0000000000000000000000000000000000000000..af245d5ebc235b315d396b957a59c6d17a143f7f --- /dev/null +++ b/source/authored/fig/exps/var_copy/layers_dim.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d40b41b76dc484233b2c83d6a59f613393fdca8d5f19d413727bcafc23660bc5 +size 150852 diff --git a/source/authored/fig/exps/var_copy/layers_dim_1000.png b/source/authored/fig/exps/var_copy/layers_dim_1000.png new file mode 100644 index 0000000000000000000000000000000000000000..4c825546a930a29671403a6f4108235a3b0b1c9a --- /dev/null +++ b/source/authored/fig/exps/var_copy/layers_dim_1000.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07c2d5ccc723acbc5a302b0b386f50244d8010f42c82aa616200076796067c23 +size 152971 diff --git a/source/authored/fig/exps/var_copy/layers_dim_200.png b/source/authored/fig/exps/var_copy/layers_dim_200.png new file mode 100644 index 0000000000000000000000000000000000000000..91b0785eedad904ddd80847407bf6b1b5de36f1d --- /dev/null +++ b/source/authored/fig/exps/var_copy/layers_dim_200.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a6dfd95e7aa31a031f42f9db1b99456cb2230096033e652a57b76d7516eb380 +size 142649 diff --git a/source/authored/fig/exps/var_copy/layers_dim_adversary.png b/source/authored/fig/exps/var_copy/layers_dim_adversary.png new file mode 100644 index 0000000000000000000000000000000000000000..3a34783f59770798a2fb7a1c7cb8cb07a56f3101 Binary files /dev/null and b/source/authored/fig/exps/var_copy/layers_dim_adversary.png differ diff --git a/source/authored/fig/exps/var_copy/layers_num_heads.png b/source/authored/fig/exps/var_copy/layers_num_heads.png new file mode 100644 index 0000000000000000000000000000000000000000..d613c2ba31aba0fdc5cf848a2249eae24745ceec --- /dev/null +++ b/source/authored/fig/exps/var_copy/layers_num_heads.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a64ad32988841e8cfe2537c7df96442711dd8e5c6c81a05ec638f7ed5f25554d +size 112106 diff --git a/source/authored/fig/exps/var_copy/layers_state_dim.png b/source/authored/fig/exps/var_copy/layers_state_dim.png new file mode 100644 index 0000000000000000000000000000000000000000..d1255dbf423906a925350e170f4db2ad4cdfa70d --- /dev/null +++ b/source/authored/fig/exps/var_copy/layers_state_dim.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8b8da4a094e7ac4cd878cfcb7ca6fc98913c8c6fd28ab7995045720e881dec8 +size 102024 diff --git a/source/authored/fig/exps/var_copy/layers_window.png b/source/authored/fig/exps/var_copy/layers_window.png new file mode 100644 index 0000000000000000000000000000000000000000..fd655182e6c2af7178577a09e3a364bbc9437a9f --- /dev/null +++ b/source/authored/fig/exps/var_copy/layers_window.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f154fdb8104c5d0c3492019f22846c1e69cad5b1a110f24881523ea7d6be07b9 +size 125649 diff --git a/source/authored/fig/selective_copy_construction_structure.pdf b/source/authored/fig/selective_copy_construction_structure.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1286c1ace827f2cc255baca3f8766af846715b05 Binary files /dev/null and b/source/authored/fig/selective_copy_construction_structure.pdf differ diff --git a/source/authored/main.tex b/source/authored/main.tex new file mode 100644 index 0000000000000000000000000000000000000000..2bb84aede6b8c4f72e16847182e250793f811a98 --- /dev/null +++ b/source/authored/main.tex @@ -0,0 +1,107 @@ +\documentclass{article} +\usepackage[margin=1in]{geometry} % 1 inch margins all around + +\usepackage{soul} +\usepackage{microtype} +\usepackage{graphicx} +\usepackage{subcaption} +\usepackage{booktabs} % for professional tables +\usepackage{bbm} +\usepackage{dsfont} +\usepackage{authblk} % for multiple authors and affiliations + +\usepackage{hyperref} + + +\newcommand{\theHalgorithm}{\arabic{algorithm}} + +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{mathtools} +\usepackage{amsthm} +\usepackage{thmtools} +\usepackage{natbib} +\usepackage{enumitem} + \usepackage[nameinlink]{cleveref} + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% THEOREMS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\theoremstyle{plain} +\newtheorem{theorem}{Theorem}[section] +\newtheorem{proposition}[theorem]{Proposition} +\newtheorem{lemma}[theorem]{Lemma} +\newtheorem{corollary}[theorem]{Corollary} +\theoremstyle{definition} +\newtheorem{definition}[theorem]{Definition} +\newtheorem{assumption}[theorem]{Assumption} +\theoremstyle{remark} +\newtheorem{remark}[theorem]{Remark} + +\title{Expressivity-Efficiency Tradeoffs for Hybrid Sequence Models} + +\author[*1]{John Cooper} +\author[1]{Ilias Diakonikolas} +\author[*1]{Mingchen Ma} +\author[1]{Frederic Sala} + +\affil[1]{Department of Computer Sciences, University of Wisconsin-Madison} + +% Optional: email addresses +\affil[ ]{\texttt{\{jfcooper2, mingchen\}@cs.wisc.edu}} + +\date{} + +\input{mathcommands} + +\begin{document} + +\maketitle + +\begin{abstract} + Hybrid sequence models---combining Transformer and state-space model layers---seek to gain the expressive versatility of attention as well as the computational efficiency of state-space model layers. Despite burgeoning interest in hybrid models, we lack a basic understanding of the settings where—and underlying mechanisms through which—they offer benefits over their constituent models. In this paper, we study this question, focusing on a broad family of core synthetic tasks. For this family of tasks, we prove the existence of fundamental limitations for non-hybrid models. Specifically, any Transformer or state-space model that solves the underlying task requires either a large number of parameters or a large working memory. On the other hand, for two prototypical tasks within this family—namely selective copying and associative recall—we construct hybrid models of small size and working memory that provably solve these tasks, thus achieving the best of both worlds. Our experimental evaluation empirically validates our theoretical findings. Importantly, going beyond the settings in our theoretical analysis, we empirically show that learned---rather than constructed---hybrids outperform non-hybrid models with up to $6 \times$ as many parameters. We additionally demonstrate that hybrid models exhibit stronger length generalization and out-of-distribution robustness than non-hybrids. \footnote{Code is available \href{https://github.com/SprocketLab/hybrid-expressivity}{in this link}. * denotes equal contribution.} +\end{abstract} + +\input{sections/introduction} + +\input{sections/prelim_and_notation} + +\input{sections/func_comp_and_construct} + +\input{sections/upper_bound} + +\input{sections/tasks} + +\input{sections/experiments} + +\input{sections/conclusion} + + + +\bibliography{reference} +\bibliographystyle{plainnat} +% \bibliographystyle{plain} + + + +\newpage +\appendix + +\section*{Supplementary Material} +We provide supplementary materials here. In \Cref{app relate work}, we provide related works. In \Cref{app notations}, we give a complete list of preliminaries and notations. In \Cref{app proof lb}, we present omitted proofs in \Cref{sec lb}, establishing hardness results for SSMs and transformers. In \Cref{app:constructions}, we provide omitted proofs in \Cref{sec merge}, providing concrete hybrid model constructions. In \Cref{app experiments}, we provide additional details to our empirical experiments. + +\input{sections/related} + +\input{appendix/app_prelim} + +\input{appendix/construction_conventions} + +\input{appendix/missing_proof_lb} + +\input{appendix/constructions} + +\input{appendix/experiment_details} + +\end{document} \ No newline at end of file diff --git a/source/authored/mathcommands.tex b/source/authored/mathcommands.tex new file mode 100644 index 0000000000000000000000000000000000000000..7bc7b18978218e9c8c797dd1c308a72a2d84105f --- /dev/null +++ b/source/authored/mathcommands.tex @@ -0,0 +1,306 @@ +%\newtheorem{theorem}{Theorem}[section] +\newtheorem{question}[theorem]{Question} +\newtheorem{conj}{Conjecture} +\newtheorem{cond}[theorem]{Condition} +%\newtheorem{lemma}[theorem]{Lemma} +\newtheorem{corrollary}{Corrollary} +\newtheorem{informal theorem}[theorem]{Theorem (informal statement)} +\newtheorem{condition}[theorem]{Condition} +%\newtheorem{proposition}[theorem]{Proposition} +%\newtheorem{corollary}[theorem]{Corollary} +\newtheorem{claim}[theorem]{Claim} +\newtheorem{fact}[theorem]{Fact} +\newtheorem{obs}[theorem]{Observation} +%\newtheorem{remark}[theorem]{Remark} +\newtheorem{infproposition}[theorem]{Proposition (Informal)} +\newtheorem{observation}[theorem]{Observation} +%\newtheorem{assumption}[theorem]{Assumption} +%\newtheorem{definition}[theorem]{Definition} +\newtheorem{example}{Example} +\newcommand{\eqdef}{\coloneqq} + +\newcommand{\bA}{\mathbf{A}} +\newcommand{\bB}{\mathbf{B}} +\newcommand{\bC}{\mathbf{C}} +\newcommand{\bD}{\mathbf{D}} +\newcommand{\bE}{\mathbf{E}} +\newcommand{\bF}{\mathbf{F}} +\newcommand{\bG}{\mathbf{G}} +\newcommand{\bH}{\mathbf{H}} +\newcommand{\bI}{\mathbf{I}} +\newcommand{\bJ}{\mathbf{J}} +\newcommand{\bK}{\mathbf{K}} +\newcommand{\bL}{\mathbf{L}} +\newcommand{\bM}{\mathbf{M}} +\newcommand{\bN}{\mathbf{N}} +\newcommand{\bO}{\mathbf{O}} +\newcommand{\bP}{\mathbf{P}} +\newcommand{\bQ}{\mathbf{Q}} +\newcommand{\bR}{\mathbf{R}} +\newcommand{\bS}{\mathbf{S}} +\newcommand{\bT}{\mathbf{T}} +\newcommand{\bU}{\mathbf{U}} +\newcommand{\bV}{\mathbf{V}} +\newcommand{\bW}{\mathbf{W}} +\newcommand{\bX}{\mathbf{X}} +\newcommand{\bY}{\mathbf{Y}} +\newcommand{\bZ}{\mathbf{Z}} + +\newcommand{\ba}{\mathbf{a}} +\newcommand{\bb}{\mathbf{b}} +\newcommand{\bc}{\mathbf{c}} +\newcommand{\bd}{\mathbf{d}} +\newcommand{\be}{\mathbf{e}} +% \newcommand{\bf}{\mathbf{f}} +\newcommand{\bg}{\mathbf{g}} +\newcommand{\bh}{\mathbf{h}} +\newcommand{\bi}{\mathbf{i}} +\newcommand{\bj}{\mathbf{j}} +\newcommand{\bk}{\mathbf{k}} +\newcommand{\bl}{\mathbf{l}} +\newcommand{\bm}{\mathbf{m}} +\newcommand{\bn}{\mathbf{n}} +\newcommand{\bo}{\mathbf{o}} +\newcommand{\bp}{\mathbf{p}} +\newcommand{\bq}{\mathbf{q}} +\newcommand{\br}{\mathbf{r}} +\newcommand{\bs}{\mathbf{s}} +\newcommand{\bt}{\mathbf{t}} +\newcommand{\bu}{\mathbf{u}} +\newcommand{\bv}{\mathbf{v}} +\newcommand{\bw}{\mathbf{w}} +\newcommand{\bx}{\mathbf{x}} +\newcommand{\by}{\mathbf{y}} +\newcommand{\bz}{\mathbf{z}} + + +\newcommand{\cA}{\mathcal{A}} +\newcommand{\cB}{\mathcal{B}} +\newcommand{\cC}{\mathcal{C}} +\newcommand{\cD}{\mathcal{D}} +\newcommand{\cE}{\mathcal{E}} +\newcommand{\cF}{\mathcal{F}} +\newcommand{\cG}{\mathcal{G}} +\newcommand{\cH}{\mathcal{H}} +\newcommand{\cI}{\mathcal{I}} +\newcommand{\cJ}{\mathcal{J}} +\newcommand{\cK}{\mathcal{K}} +\newcommand{\cL}{\mathcal{L}} +\newcommand{\cM}{\mathcal{M}} +\newcommand{\cN}{\mathcal{N}} +\newcommand{\cO}{\mathcal{O}} +\newcommand{\cP}{\mathcal{P}} +\newcommand{\cQ}{\mathcal{Q}} +\newcommand{\cR}{\mathcal{R}} +\newcommand{\cS}{\mathcal{S}} +\newcommand{\cT}{\mathcal{T}} +\newcommand{\cU}{\mathcal{U}} +\newcommand{\cV}{\mathcal{V}} +\newcommand{\cW}{\mathcal{W}} +\newcommand{\cX}{\mathcal{X}} +\newcommand{\cY}{\mathcal{Y}} +\newcommand{\cZ}{\mathcal{Z}} + +\newcommand{\ca}{\mathcal{a}} +\newcommand{\cb}{\mathcal{b}} +\newcommand{\cc}{\mathcal{c}} +\newcommand{\cd}{\mathcal{d}} +\newcommand{\ce}{\mathcal{e}} +\newcommand{\cf}{\mathcal{f}} +\newcommand{\cg}{\mathcal{g}} +\newcommand{\ch}{\mathcal{h}} +\newcommand{\ci}{\mathcal{i}} +\newcommand{\cj}{\mathcal{j}} +\newcommand{\ck}{\mathcal{k}} +\newcommand{\cl}{\mathcal{l}} +\newcommand{\cm}{\mathcal{m}} +\newcommand{\cn}{\mathcal{n}} +\newcommand{\co}{\mathcal{o}} +\newcommand{\cp}{\mathcal{p}} +\newcommand{\cq}{\mathcal{q}} +% \newcommand{\cr}{\mathcal{r}} +\newcommand{\cs}{\mathcal{s}} +\newcommand{\ct}{\mathcal{t}} +\newcommand{\cu}{\mathcal{u}} +\newcommand{\cv}{\mathcal{v}} +\newcommand{\cw}{\mathcal{w}} +\newcommand{\cx}{\mathcal{x}} +\newcommand{\cy}{\mathcal{y}} +\newcommand{\cz}{\mathcal{z}} + + +\newcommand{\sA}{\mathbb{A}} +\newcommand{\sB}{\mathbb{B}} +\newcommand{\sC}{\mathbb{C}} +\newcommand{\sD}{\mathbb{D}} +\newcommand{\sE}{\mathbb{E}} +\newcommand{\sF}{\mathbb{F}} +\newcommand{\sG}{\mathbb{G}} +\newcommand{\sH}{\mathbb{H}} +\newcommand{\sI}{\mathbb{I}} +\newcommand{\sJ}{\mathbb{J}} +\newcommand{\sK}{\mathbb{K}} +\newcommand{\sL}{\mathbb{L}} +\newcommand{\sM}{\mathbb{M}} +\newcommand{\sN}{\mathbb{N}} +\newcommand{\sO}{\mathbb{O}} +\newcommand{\sP}{\mathbb{P}} +\newcommand{\sQ}{\mathbb{Q}} +\newcommand{\sR}{\mathbb{R}} +\newcommand{\sS}{\mathbb{S}} +\newcommand{\sT}{\mathbb{T}} +\newcommand{\sU}{\mathbb{U}} +\newcommand{\sV}{\mathbb{V}} +\newcommand{\sW}{\mathbb{W}} +\newcommand{\sX}{\mathbb{X}} +\newcommand{\sY}{\mathbb{Y}} +\newcommand{\sZ}{\mathbb{Z}} + + + +\newcommand{\density}{\gamma} +%\newcommand{\W}{ {\cal W} } +\newcommand{\wperp}{(\vec w^\ast)^{\perp_\vec w}} +\newcommand{\lp}{\left} +\newcommand{\rp}{\right} +\newcommand\norm[1]{\left\| #1 \right\|} +\newcommand\snorm[2]{\left\| #2 \right\|_{#1}} +%\renewcommand\vec[1]{\mathbf{#1}} +\DeclareMathOperator*{\pr}{\mathbf{Pr}} +\DeclareMathOperator*{\E}{\mathbf{E}} +\newcommand{\proj}{\mathrm{proj}} +\newcommand{\me}{\mathrm{e}} +\newcommand{\mrm}{\mathrm} +\def\d{\mathrm{d}} +\newcommand{\normal}{\mathcal{N}} + +\DeclareMathOperator*{\argmin}{argmin} +\DeclareMathOperator*{\argmax}{argmax} +\DeclareMathOperator*{\influ}{Inf} +\DeclareMathOperator*{\he}{He} + + +\newcommand{\sample}[2]{#1^{(#2)}} +\newcommand{\tr}{\mathrm{tr}} +\newcommand{\e}{\mathbf{e}} +\newcommand{\Sp}{\mathbb{S}} +%\newcommand{\bz}{\mathbf{z}} +\newcommand{\sym}{\mathrm{sym}} + + +\newcommand{\err}{\mathrm{err}} +\newcommand{\LTF}{\mathcal{H}} +\newcommand{\B}{\mathbb{B}} +\renewcommand{\H}{\mathcal H } +\newcommand{\X}{\mathcal X } + + + +\newcommand{\p}{\sP} +\newcommand{\q}{\sQ} +\newcommand{\h}{\sH} +\newcommand{\R}{\sR} +\newcommand{\s}{\sS} +\newcommand{\Z}{\sZ} +\newcommand{\N}{\sN} +\newcommand{\C}{\sC} + +\newcommand{\eps}{\epsilon} +\newcommand{\dtv}{d_{\mathrm TV}} +\newcommand{\poly}{\mathrm{poly}} +\newcommand{\dom}{\mathrm{dom}} +\newcommand{\polylog}{\mathrm{polylog}} +\newcommand{\var}{\mathbf{Var}} +\newcommand{\cov}{\mathbf{Cov}} +\newcommand{\D}{\mathcal{D}} +\newcommand{\nul}{\mathrm{null}} + + + +\newcommand{\sgn}{\mathrm{sign}} +\newcommand{\sign}{\mathrm{sign}} +\newcommand{\calN}{{\cal N}} +\newcommand{\calL}{{\cal L}} +\newcommand{\la}{\langle} +\newcommand{\ra}{\rangle} +\newcommand{\Ex}{\mathop{{\bf E}\/}} +\newcommand{\OPT}{\mathrm{opt}} +%\newcommand{\D}{D} +\newcommand{\LR}{\mathrm{LeakyRelu}} +\newcommand{\Ind}{\mathds{1}} +\newcommand{\1}{\Ind} +\newcommand{\matr[1]}{\boldsymbol{#1}} +\newcommand{\littleint}{\mathop{\textstyle \int}} +\newcommand{\littlesum}{\mathop{\textstyle \sum}} +\newcommand{\littleprod}{\mathop{\textstyle \prod}} +\newcommand{\wt}{\widetilde} +\newcommand{\wh}{\widehat} + + +\newcommand{\ltwo}[1]{\left\lVert#1\right\rVert_2} +\newcommand{\dotp}[2]{ #1 \cdot #2 } +\newcommand{\miscl}{\err_{0-1}^{\D}} +\newcommand{\wstar}{\bw^{\ast}} +\newcommand{\x}{\mathbf{x}} +\newcommand{\w}{\vec w} +\DeclareMathOperator\erf{erf} +\newcommand{\normald}[1]{\mathcal{N}_{#1}} + +\newcommand{\ith}{^{(i)}} +\newcommand{\tth}{^{(t)}} +\newcommand{\Exx}{\E_{\x\sim \D_\x}} +\newcommand{\Exn}{\E_{\x\sim \normal}} +\newcommand{\Ey}{\E_{(\x,y)\sim \D}} +\newcommand{\vpar}[2]{\vec #1^{\|_{\vec #2}}} +\newcommand{\vperp}[2]{\vec #1^{\perp{\vec #2}}} +\newcommand{\bounda}{\nu} +\newcommand{\boundb}{\zeta} +\newcommand{\boundc}{\rho} +\newcommand{\boundd}{\subvector} +\newcommand{\booundd}{\subvector} +\newcommand{\esp}{\eps} +\newcommand{\lamdba}{\lambda} + +\newcommand{\mderiv}{D_{\rho}} + +\newcommand{\OU}{Ornstein–Uhlenbeck\xspace} +\newcommand{\lip}{Lipschitz\xspace} +\newcommand{\subvector}{h} +\DeclareMathOperator{\floor}{floor} +\newcommand{\opt}{\mathrm{opt}} +\newcommand{\Cagn}{C_{\mathrm{A}}} +\newcommand{\iid}{{i.i.d.}\ } +\newcommand{\abs}[1]{\lp| #1 \rp|} +\newcommand{\A}{\mathcal{A}} +\newcommand{\spa}{\mathrm{span}} + +%\newcommand{\inote}[1]{\color{magenta} I: #1 \color{black}} +\newcommand{\mnote}[1]{\color{magenta} M: #1 \color{black}} +\newcommand{\cnote}[1]{\color{magenta} C: #1 \color{black}} +\newcommand{\vnote}[1]{\color{magenta} V: #1 \color{black}} +\newcommand{\rnote}[1]{\color{magenta} R: #1 \color{black}} +\newcommand{\jnote}[1]{\color{magenta} J: #1 \color{black}} +\newcommand{\relu}{\mathrm{Relu}} +\newcommand{\card}[1]{|#1|} + +\DeclareMathOperator{\Var}{Var} +\renewcommand\Pr{\pr} + +\newcommand{\CS}{Cauchy-Schwarz\xspace} +\newcommand{\holder}{H\"older} + +\newcommand{\softmax}{\text{softmax}} +\newcommand{\Attn}{\mathrm{Attn}} +\newcommand{\SSM}{\mathrm{SSM}} +\newcommand{\MB}{\mathrm{Mamba}} +\renewcommand{\^}[1]{^{(#1)}} +\newcommand{\One}{\mathbbm{1}} + +\newcommand{\AT}{\mathrm{AT}} +\newcommand{\TF}{\mathrm{TF}} +\newcommand{\MLP}{\mathrm{MLP}} +%\newcommand{\SSM}{\mathrm{SSM}} + +\newcommand{\W}{\mathbf{W}} + +\renewcommand{\poly}{\text{poly}} \ No newline at end of file diff --git a/source/authored/reference.bib b/source/authored/reference.bib new file mode 100644 index 0000000000000000000000000000000000000000..959024be3655d45842b061b266daf7fca8820825 --- /dev/null +++ b/source/authored/reference.bib @@ -0,0 +1,293 @@ +@article{jelassi2024repeat, + title={Repeat after me: Transformers are better than state space models at copying}, + author={Jelassi, Samy and Brandfonbrener, David and Kakade, Sham M and Malach, Eran}, + journal={arXiv preprint arXiv:2402.01032}, + year={2024} +} + +@article{berger2003rate, + title={Rate-distortion theory}, + author={Berger, Toby}, + journal={Wiley Encyclopedia of Telecommunications}, + year={2003}, + publisher={Wiley Online Library} +} + +@inproceedings{peng2024limitations, + title={On limitations of the transformer architecture}, + author={Peng, Binghui and Narayanan, Srini and Papadimitriou, Christos}, + booktitle={First Conference on Language Modeling}, + year={2024} +} + +@article{vaswani2017attention, + title={Attention is all you need}, + author={Vaswani, Ashish and Shazeer, Noam and Parmar, Niki and Uszkoreit, Jakob and Jones, Llion and Gomez, Aidan N and Kaiser, {\L}ukasz and Polosukhin, Illia}, + journal={Advances in neural information processing systems}, + volume={30}, + year={2017} +} + +@inproceedings{gu2021efficiently, + author = {Albert Gu and + Karan Goel and + Christopher R{\'{e}}}, + title = {Efficiently Modeling Long Sequences with Structured State Spaces}, + booktitle = {The Tenth International Conference on Learning Representations, {ICLR} + 2022, Virtual Event, April 25-29, 2022}, + publisher = {OpenReview.net}, + year = {2022}, + url = {https://openreview.net/forum?id=uYLFoz1vlAC}, + timestamp = {Sat, 20 Aug 2022 01:15:42 +0200}, + biburl = {https://dblp.org/rec/conf/iclr/GuGR22.bib}, + bibsource = {dblp computer science bibliography, https://dblp.org} +} + +@inproceedings{ +gu2024mamba, +title={Mamba: Linear-Time Sequence Modeling with Selective State Spaces}, +author={Albert Gu and Tri Dao}, +booktitle={First Conference on Language Modeling}, +year={2024}, +url={https://openreview.net/forum?id=tEYskw1VY2} +} + +@article{hochreiter1997long, + title={Long short-term memory}, + author={Hochreiter, Sepp and Schmidhuber, J{\"u}rgen}, + journal={Neural computation}, + volume={9}, + number={8}, + pages={1735--1780}, + year={1997}, + publisher={MIT press} +} + +@article{blakeman2025nemotron, + title={Nemotron-h: A family of accurate and efficient hybrid mamba-transformer models}, + author={Blakeman, Aaron and Basant, Aarti and Khattar, Abhinav and Renduchintala, Adithya and Bercovich, Akhiad and Ficek, Aleksander and Bjorlin, Alexis and Taghibakhshi, Ali and Deshmukh, Amala Sanjay and Mahabaleshwarkar, Ameya Sunil and others}, + journal={arXiv preprint arXiv:2504.03624}, + year={2025} +} + +@article{huang2024formal, + title={A formal framework for understanding length generalization in transformers}, + author={Huang, Xinting and Yang, Andy and Bhattamishra, Satwik and Sarrof, Yash and Krebs, Andreas and Zhou, Hattie and Nakkiran, Preetum and Hahn, Michael}, + journal={arXiv preprint arXiv:2410.02140}, + year={2024} +} + +@article{malach2025infinity, + title={To Infinity and Beyond: Tool-Use Unlocks Length Generalization in State Space Models}, + author={Malach, Eran and Saremi, Omid and Williamson, Sinead and Bradley, Arwen and Lotfi, Aryo and Abbe, Emmanuel and Susskind, Josh and Littwin, Etai}, + journal={arXiv preprint arXiv:2510.14826}, + year={2025} +} + +@inproceedings{li2025power, + title={On the power of convolution-augmented transformer}, + author={Li, Mingchen and Zhang, Xuechen and Huang, Yixiao and Oymak, Samet}, + booktitle={Proceedings of the AAAI Conference on Artificial Intelligence}, + volume={39}, + number={17}, + pages={18393--18402}, + year={2025} +} + +@article{liu2023exposing, + title={Exposing attention glitches with flip-flop language modeling}, + author={Liu, Bingbin and Ash, Jordan and Goel, Surbhi and Krishnamurthy, Akshay and Zhang, Cyril}, + journal={Advances in Neural Information Processing Systems}, + volume={36}, + pages={25549--25583}, + year={2023} +} + + + +@article{arora2023zoology, + title={Zoology: Measuring and improving recall in efficient language models}, + author={Arora, Simran and Eyuboglu, Sabri and Timalsina, Aman and Johnson, Isys and Poli, Michael and Zou, James and Rudra, Atri and R{\'e}, Christopher}, + journal={arXiv preprint arXiv:2312.04927}, + year={2023} +} + + +@article{park2024can, + title={Can mamba learn how to learn? a comparative study on in-context learning tasks}, + author={Park, Jongho and Park, Jaeseung and Xiong, Zheyang and Lee, Nayoung and Cho, Jaewoong and Oymak, Samet and Lee, Kangwook and Papailiopoulos, Dimitris}, + journal={arXiv preprint arXiv:2402.04248}, + year={2024} +} + +@article{lieber2024jamba, + title={Jamba: A hybrid transformer-mamba language model}, + author={Lieber, Opher and Lenz, Barak and Bata, Hofit and Cohen, Gal and Osin, Jhonathan and Dalmedigos, Itay and Safahi, Erez and Meirom, Shaked and Belinkov, Yonatan and Shalev-Shwartz, Shai and others}, + journal={arXiv preprint arXiv:2403.19887}, + year={2024} +} + +@article{zhan2025overcoming, + title={Overcoming Long-Context Limitations of State-Space Models via Context-Dependent Sparse Attention}, + author={Zhan, Zhihao and Zhao, Jianan and Zhu, Zhaocheng and Tang, Jian}, + journal={arXiv preprint arXiv:2507.00449}, + year={2025} +} + + +@article{waleffe2024empirical, + title={An empirical study of mamba-based language models}, + author={Waleffe, Roger and Byeon, Wonmin and Riach, Duncan and Norick, Brandon and Korthikanti, Vijay and Dao, Tri and Gu, Albert and Hatamizadeh, Ali and Singh, Sudhakar and Narayanan, Deepak and others}, + journal={arXiv preprint arXiv:2406.07887}, + year={2024} +} + +@article{ren2024samba, + title={Samba: Simple hybrid state space models for efficient unlimited context language modeling}, + author={Ren, Liliang and Liu, Yang and Lu, Yadong and Shen, Yelong and Liang, Chen and Chen, Weizhu}, + journal={arXiv preprint arXiv:2406.07522}, + year={2024} +} + +@inproceedings{merrill2024illusion, + title={The Illusion of State in State-Space Models}, + author={Merrill, William and Petty, Jackson and Sabharwal, Ashish}, + booktitle={International Conference on Machine Learning}, + pages={35492--35506}, + year={2024}, + organization={PMLR} +} + +@article{merrill2023parallelism, + title={The parallelism tradeoff: Limitations of log-precision transformers}, + author={Merrill, William and Sabharwal, Ashish}, + journal={Transactions of the Association for Computational Linguistics}, + volume={11}, + pages={531--545}, + year={2023}, + publisher={MIT Press One Broadway, 12th Floor, Cambridge, Massachusetts 02142, USA~…} +} + + +@article{chen2024theoretical, + title={Theoretical limitations of multi-layer transformer}, + author={Chen, Lijie and Peng, Binghui and Wu, Hongxun}, + journal={arXiv preprint arXiv:2412.02975}, + year={2024} +} + + +@article{yehudai2025depth, + title={Depth-width tradeoffs in algorithmic reasoning of graph tasks with transformers}, + author={Yehudai, Gilad and Sanford, Clayton and Bechler-Speicher, Maya and Fischer, Orr and Gilad-Bachrach, Ran and Globerson, Amir}, + journal={arXiv preprint arXiv:2503.01805}, + year={2025} +} + +@inproceedings{lee2025understanding, + title={Understanding and Enhancing Mamba-Transformer Hybrids for Memory Recall and Language Modeling}, + author={Lee, Hyunji and Yu, Wenhao and Zhang, Hongming and Ma, Kaixin and Kim, Jiyeon and Yu, Dong and Seo, Minjoon}, + booktitle={Proceedings of the First BabyLM Workshop}, + pages={380--398}, + year={2025} +} + +@article{fu2022hungry, + title={Hungry hungry hippos: Towards language modeling with state space models}, + author={Fu, Daniel Y and Dao, Tri and Saab, Khaled K and Thomas, Armin W and Rudra, Atri and R{\'e}, Christopher}, + journal={arXiv preprint arXiv:2212.14052}, + year={2022} +} + +@article{dziri2023faith, + title={Faith and fate: Limits of transformers on compositionality}, + author={Dziri, Nouha and Lu, Ximing and Sclar, Melanie and Li, Xiang Lorraine and Jiang, Liwei and Lin, Bill Yuchen and Welleck, Sean and West, Peter and Bhagavatula, Chandra and Le Bras, Ronan and others}, + journal={Advances in Neural Information Processing Systems}, + volume={36}, + pages={70293--70332}, + year={2023} +} + + +@article{elman1990finding, + title={Finding structure in time}, + author={Elman, Jeffrey L}, + journal={Cognitive science}, + volume={14}, + number={2}, + pages={179--211}, + year={1990}, + publisher={Wiley Online Library} +} + +@article{gu2020hippo, + title={Hippo: Recurrent memory with optimal polynomial projections}, + author={Gu, Albert and Dao, Tri and Ermon, Stefano and Rudra, Atri and R{\'e}, Christopher}, + journal={Advances in neural information processing systems}, + volume={33}, + pages={1474--1487}, + year={2020} +} + + + +@article{gu2022parameterization, + title={On the parameterization and initialization of diagonal state space models}, + author={Gu, Albert and Goel, Karan and Gupta, Ankit and R{\'e}, Christopher}, + journal={Advances in Neural Information Processing Systems}, + volume={35}, + pages={35971--35983}, + year={2022} +} + + +@inproceedings{dai2019transformer, + title={Transformer-xl: Attentive language models beyond a fixed-length context}, + author={Dai, Zihang and Yang, Zhilin and Yang, Yiming and Carbonell, Jaime G and Le, Quoc and Salakhutdinov, Ruslan}, + booktitle={Proceedings of the 57th annual meeting of the association for computational linguistics}, + pages={2978--2988}, + year={2019} +} + +@inproceedings{black-etal-2022-gpt, + title = "{GPT}-{N}eo{X}-20{B}: An Open-Source Autoregressive Language Model", + author = "Black, Sidney and + Biderman, Stella and + Hallahan, Eric and + Anthony, Quentin and + Gao, Leo and + Golding, Laurence and + He, Horace and + Leahy, Connor and + McDonell, Kyle and + Phang, Jason and + Pieler, Michael and + Prashanth, Usvsn Sai and + Purohit, Shivanshu and + Reynolds, Laria and + Tow, Jonathan and + Wang, Ben and + Weinbach, Samuel", + editor = "Fan, Angela and + Ilic, Suzana and + Wolf, Thomas and + Gall{\'e}, Matthias", + booktitle = "Proceedings of BigScience Episode {\#}5 -- Workshop on Challenges {\&} Perspectives in Creating Large Language Models", + month = may, + year = "2022", + address = "virtual+Dublin", + publisher = "Association for Computational Linguistics", + url = "https://aclanthology.org/2022.bigscience-1.9/", + doi = "10.18653/v1/2022.bigscience-1.9", + pages = "95--136", + abstract = "We introduce GPT-NeoX-20B, a 20 billion parameter autoregressive language model trained on the Pile, whose weights will be made freely and openly available to the public through a permissive license. It is, to the best of our knowledge, the largest dense autoregressive model that has publicly available weights at the time of submission. In this work, we describe GPT-NeoX-20B{'}s architecture and training, and evaluate its performance. We open-source the training and evaluation code, as well as the model weights, at \url{https://github.com/EleutherAI/gpt-neox}." +} + +@article{Olsson2022IncontextLA, + title={In-context Learning and Induction Heads}, + author={Catherine Olsson and Nelson Elhage and Neel Nanda and Nicholas Joseph and Nova Dassarma and T. J. Henighan and Benjamin Mann and Amanda Askell and Yuntao Bai and Anna Chen and Tom Conerly and Dawn Drain and Deep Ganguli and Zac Hatfield-Dodds and Danny Hernandez and Scott Johnston and Andy Jones and John Kernion and Liane Lovitt and Kamal Ndousse and Dario Amodei and Tom B. Brown and Jack Clark and Jared Kaplan and Sam McCandlish and Chris Olah}, + journal={ArXiv}, + year={2022}, + volume={abs/2209.11895}, + url={https://api.semanticscholar.org/CorpusID:252532078} +} \ No newline at end of file diff --git a/source/authored/sections/conclusion.tex b/source/authored/sections/conclusion.tex new file mode 100644 index 0000000000000000000000000000000000000000..cfa5aa210856d8b96f2453e360130cf7ac18ff50 --- /dev/null +++ b/source/authored/sections/conclusion.tex @@ -0,0 +1,3 @@ +\section{Conclusion} + +We studied when hybrid sequence models combining SSM and attention layers can simultaneously achieve strong expressivity and favorable memory scaling. We formalized function-composition tasks that require both (i) extracting a control variable from long context and (ii) performing content-addressable retrieval conditioned on that variable. Under natural conditions, we showed that pure SSMs and sliding-window Transformers each face fundamental memory limitations on this family. In contrast, we constructed small hybrids that provably solve selective copying and associative recall with decoding while using substantially smaller working memory than either pure counterpart. Experiments on learned models corroborated these separations, showing that hybrids can outperform larger pure baselines and generalize better to longer sequences and distribution shifts. Limitations include our focus on synthetic tasks and restricted Transformer attention mechanisms; extending the theory to broader attention patterns, external memory, identification of real function-composition datasets, and naturalistic long-context workloads is an important direction for future work. \ No newline at end of file diff --git a/source/authored/sections/experiments.tex b/source/authored/sections/experiments.tex new file mode 100644 index 0000000000000000000000000000000000000000..2c98e131328d8b3e44b3c45908ad660c5eddfe3a --- /dev/null +++ b/source/authored/sections/experiments.tex @@ -0,0 +1,162 @@ +\section{Experiments}\label{sec experiments} + +Our theoretical results show fundamental expressivity differences between pure models and hybrid constructions. We empirically validate three claims related to these results: +\begin{itemize}[leftmargin=*, nosep] +\item \textbf{C1.} The construction for the hybrid model empirically outperforms the pure Transformer and pure SSM baselines, as predicted by our theoretical results, +\item \textbf{C2.} Under standard training approaches, a \emph{learned} (rather than constructed) hybrid \text{also outperforms} pure Transformer and pure SSM baselines, +\item \textbf{C3.} In further and more realistic settings, including out-of-distribution and length generalization scenarios, learned hybrids continue to outperform pure Transformer and pure SSM baselines. +\end{itemize} +Here, C1 verifies our basic theoretical claims, while C2 and C3 show that the benefits of hybrids persist in typical scenarios (e.g., the hybrid model is trained in standard ways, the tasks and settings deviate from the exact ones we studied). By validating these claims, {\textbf{\emph{we demonstrate that the fundamental benefits of hybrid models carry over to practical settings}}}---and are not just a theoretical curiosity. + + +\subsection{Construction Implementations} + +Each of the constructions for \Cref{th hybrid copy} and \Cref{th hybrid recall} have been implemented to test their validity. Both perform their respective tasks on the last position in the context, as desired, validating C1. For details, see Appendix \ref{app constructions}. + +\subsection{Learnability Experiments} +To validate C2, we conduct experiments designed to test the capacity of a hybrid to learn the two main tasks we studied, selective copying and associative recall with decoding. Besides these, we also empirically study two additional tasks: multi-key associative recall (MKAR) and needle-in-a-haystack (NH). These tasks also fall into the category of function composition and are standard tasks used to evaluate pure Transformer-based and SSM models. Our goal is to determine whether the hybrid models learned with standard training approaches (rather than explicitly constructed) continue to outperform non-hybrids. As we shall see, our findings confirm that this is the case. + +To simplify comparisons, rather than directly comparing the state sizes or the input-independent memory for the Transformers, we compare models with similar parameter counts, controlled through the embedding dimension of the tokens. Both the state size and the input-independent memory scale similarly as embedding dimension is increased. + +\noindent \textbf{Experiment Details.} These models are comprised of GPTNeoX and Mamba layers for attention and SSM layers. We use RoPE positional encodings. Unless otherwise specified, we are using windowed, causal attention, the transformers have a single head, and the Mamba state dimension expansion is 1. All experiments are trained to convergence using linearly decaying learning rates. The experiments are seq-to-seq, and accuracy if measured over all valid tokens. Transformers use a windowed attention mask. + +When listed in figures, layers are read left-to-right. For example, SSM-TF is an $\SSM$ layer followed by a $\TF$ layer. Additional details can be found in Appendix \ref{app experiments}. + + +\noindent \textbf{Selective Copy.} +\begin{figure}[t] + \centering + \includegraphics[width=0.6\linewidth]{fig/exps/var_copy/layers_dim.png} + \small + \begin{tabular}{c c c c c} + \toprule + Parameters & Pure TF & Pure SSM & TF$\to$SSM & \textit{SSM$\to$TF} \\ + \midrule + $\sim1000$ & 0.056 & 0.084 & 0.100 & 0.087 \\ + $\sim2000$ & 0.352 & 0.305 & 0.433 & 0.999 \\ + $\sim6000$ & 0.727 & 0.485 & 0.822 & 1.000 \\ + $\sim12000$ & 0.923 & 0.931 & 0.908 & 1.000 \\ + \bottomrule + \end{tabular} + + \caption{Results from training small models on Selective Copy, across an increase in the hidden dimension of the models. At 2000 parameters, hybrid models consistently attain perfect accuracy. The pure models, with 6x the parameters, only attain around 0.9 accuracy.} + \label{fig:exp_var_copy} + \vspace{-0.2cm} +\end{figure} +\noindent \emph{Setup.} Given the relative simplicity of this task, we can study model expressivity for small models, with up to approximately ten thousand parameters. + +\noindent \emph{Results.} We depict the results in \Cref{fig:exp_var_copy}. As expected, the hybrid performs the task to 90\% accuracy with significantly fewer parameters than either the pure Transformer or pure SSM, by around a factor of $6 \times$. +Also note that the ``reverse'' hybrid, with the Transformer layer first, performs no differently than the pure models. This is consistent with prior work \cite{park2024can}. + +\noindent {\bf Associative Recall with Decoding.} +\begin{figure}[t] + \centering + \includegraphics[width=0.6\linewidth]{fig/exps/binary_recall/layers_dim_3.png} + \caption{Results from training small models on Associative Recall with Decoding. Even at much smaller scales than the pure models, the hybrid is the only architecture that attains 0.5 accuracy. At the scales tested, none of the pure models performed the task with more than 0.4 accuracy.} + \label{fig:exp_decode_recall} +\end{figure} +\emph{Setup.} For this task, we expect both the pure Transformer and the pure SSM to struggle, while a hybrid has the expressive power to represent this task. Unlike the other tasks, this experiment utilized three layer models rather than two layer ones. This is due to the construction for \Cref{th hybrid recall}, where three layers were needed. These models required significantly more parameters than the other models, close to 1 million. + +\emph{Results}. For these three layer models, we observe the same behavior: the hybrid excels while the pure models struggle. As seen in \Cref{fig:exp_decode_recall}, at the scales tested, none of the pure models achieved greater than 40\% accuracy, while the hybrid did at much smaller scales, eventually surpassing 50\% accuracy. At a high level, this task is more difficult than the others as it requires the more complex computation of binary values before performing the commonly tested task of associative recall. + + +\noindent \textbf{Multi-Key Associative Recall.} +\textit{Setup.} We now turn our attention to a further pair of tasks, the first being MKAR. + +\begin{figure}[t] + \centering + \includegraphics[width=0.6\linewidth]{fig/exps/assoc_recall_mk/layers_dim.png} + \small + \begin{tabular}{c c c c c} +\toprule +Parameters & Pure TF & Pure SSM & TF$\to$SSM & \textit{SSM$\to$TF} \\ +\midrule +$\sim1000$ & 0.124 & 0.158 & 0.131 & 0.144 \\ +$\sim2000$ & 0.159 & 0.173 & 0.183 & 0.512 \\ +$\sim6000$ & 0.230 & 0.356 & 0.286 & 0.990 \\ +$\sim12000$ & 0.668 & 0.517 & 0.524 & 0.989 \\ +\bottomrule +\end{tabular} + \caption{Results from training small models on Multi-Key Associative Recall, across an increase in the hidden dimension. The hybrid consistently outperforms the pure models of the same depth and similar parameter counts. The hybrid models could perform the task to 60\% accuracy with $6 \times$ fewer parameters than any of the pure Transformers.} + \label{fig:exp_assoc_recall_mk} +\end{figure} + + +\begin{definition}[MKAR] + Let $\vec{\x}$ be a sequence of length $L$ sampled from a vocabulary $\cV$, and let $k$ be some small number. Let $K = \vec{\x}_{L-k:L}$. Let $i$ be the last position in the context where $\vec{\x}_{i:i+k} = K$. Performing \textit{MKAR} is outputting $\vec{\x}_{i+k}$. +\end{definition} + +In the framework of function-composition, we can take $v$ to be the empty map, $u$ to include enough context to find the key, and $F$ to be the look-up operation. Since $F$ can have any output depending heavily on the context, this is hard for an SSM. Since $u$ could be large, this is also hard for a Transformer. However, since $v$ is empty, function-composition does not immediately indicate if a separation exists between Transformers and hybrids. + +\textit{Results.} In \Cref{fig:exp_assoc_recall_mk}, we see that SSMs perform quite poorly, while hybrids and Transformers can perform the task at scale. However, we see a similar separation between hybrids and Transformers present for selective copying. Specifically, hybrids perform the task on average with $6 \times$ fewer parameters than the pure Transformers to an accuracy of $60\%$. + + +\begin{figure}[t] + \centering + \includegraphics[width=0.6\linewidth]{fig/exps/needle/layers_dim.png} + \caption{Results from training small models on Needle in a Haystack, across an increase in the hidden dimension of the models with no context windowing. The hybrid and SSM perform this task with fewer parameters than the Transformer, however we still see the hybrid with a slight improvement. This task was expected to be hard for the Transformer and not the SSM.} + \label{fig:exp_needle} +\end{figure} + +\noindent {\bf Needle in a Haystack.} \textit{Setup.} To complement MKAR, we trained the same models on needle-in-a-haystack (NH). +\begin{definition}[NH] + Let $\vec{\x}$ be a sequence of length $L$ sampled from a vocabulary $\cV \cup \{M\}$. Let the location of $M$ be denoted by $i^*$. Performing \textit{NH} is outputting $\vec{\x}_{i^*+1}$. +\end{definition} +This task is simple: copy the token(s) after a marker token when requested for at the end of the input sequence. This task is hard for Transformers due to windowing, while SSMs and hybrids should perform this task easily. In the framework of function-composition, $u$ is the empty map, and $F$ is the identity. As such, we do not have the hardness criterion for SSMs; we should therefore not immediately expect hybrids to perform differently than SSMs. + +\textit{Results.} We show results in \Cref{fig:exp_needle} for full-context attention. Even in the situation where the Transformer could possibly learn the task, small token dimensions result in learnability issues. +SSMs also perform more inconsistently than hybrid models in small parameter regimes. The mechanism behind these separations is not directly characterized by function-composition and is left to future work. + + +For both of these tasks, we see the same property: on these synthetic tasks and at the scales tested, \textbf{hybrids outperform pure models, even when we use tasks that are outside of the function-composition framework.} + + + + + + +\subsection{Further Experiments} + +In contrast to the much smaller expressivity experiments, our next set of experiments are designed to increase the scale of the models to somewhere nearer those of modern LLMs. These models will have around 100 million parameters each, closer to the scale of standard language models. Different properties of these models are tested since accuracy on many of the above tasks already approaches 1, and scaling up difficulty parameters, such as vocabulary size, which only increases the difficulty by a small amount, leads to models with similar behaviors to the expressivity experiments. + + +\noindent {\bf Associative Recall with Decoding.} +To analyze these different analyses, we use the more difficult task of associative recall with decoding. Empirically, this task proved far more challenging than selective copy, where 2-layer models with the same scale of parameters learned nothing. + +\begin{figure}[t] + \centering + \includegraphics[width=0.6\linewidth]{fig/exps/mini_decode_recall.png} + \caption{The distribution of accuracies across different input sequence lengths. Hybrid models with comparatively similar parameters as their attention/Transformer counterparts perform better at longer lengths consistently.} + \label{fig:decode_recall_length_gen} +\end{figure} + +\noindent {\bf Length Generalization.} +\textit{Setup.} First, we investigate the length generalization of different models. Each model is trained on sequences of length 20 to 50, and tests on longer sequences as well. Comparing the hybrid model to the Transformer (T\_rope) and SSM (mamba), Figure \ref{fig:decode_recall_length_gen} shows how the hybrid models \textit{consistently} outperforms the pure models. + +\textit{Results.} As expected, the performance drops as sequences grow longer; however, hybrids lose performance at the slowest rate. This means that even though hybrids and Transformers behave within 2\% of each other for short sequences, this separation grows to be around 10\% for longer sequences. + +\begin{table}[t] + \centering + % \small + \begin{tabular}{c|c c c} + \toprule + Train Proportion & SSM & TF & Hybrid \\ + \midrule + 0.05 & 0.24 & \textbf{0.47} & \textbf{0.47} \\ + 0.1 & 0.34 & 0.40 & \textbf{0.47} \\ + 0.3 & 0.17 & 0.64 & \textbf{0.74} \\ + 0.5 & 0.46 & 0.63 & \textbf{0.77} \\ + 0.8 & 0.67 & 0.63 & \textbf{0.83} \\ + 0.9 & \textbf{0.86} & 0.61 & 0.80 \\ + \bottomrule + \end{tabular} + + \caption{Results from training 12-layer models with different proportions of bits for Associative Recall with Decoding. Data are evaluation accuracies for evaluation bit proportions of 0.2. Each architecture tends to improve performance as the training bit proportion increases, with hybrids consistently out-performing the pure models.} + \label{tab:robustness} +\end{table} + + +\noindent {\bf OOD Generalization.} +\textit{Setup.} We also tested these models as their sampling distributions are changed. Specifically, we tested Associative Recall with Decoding with differing proportions of bits between test and train time. This task allows us to test these behaviors on larger models, as the other two tasks saturate, only showing 100\% accuracy on all tests. Under these distributions, we can see which of the architectures learns representations that consistently perform well across different varying sampling distributions. + +\textit{Results.} The results can be seen in \Cref{tab:robustness}. For almost all training distributions, the hybrid indeed performs the best on a 0.2 proportion test set. However, there are some other notable trends within these results beyond just the hybrid's performance. In particular, the different architectures show varying behavior across training distributions. SSMs tend to improve the most as more training bits are added, while Transformers improve the least. Hybrid models attain the best of both works, acting well with both a high frequency and a low frequency of bits. \ No newline at end of file diff --git a/source/authored/sections/func_comp_and_construct.tex b/source/authored/sections/func_comp_and_construct.tex new file mode 100644 index 0000000000000000000000000000000000000000..367c3eb5db75eced9808ecfe85c495038a7ca051 --- /dev/null +++ b/source/authored/sections/func_comp_and_construct.tex @@ -0,0 +1,73 @@ +\section{Function Compositions and Limitations of Pure Models}\label{sec lb} +In this work, we define the following family of tasks that we term \emph{function-composition} tasks, which expose the limitations of pure models. + + +\begin{definition}[Function Composition]\label{def function composition} +Let $\cV$ be a vocabulary of tokens. Let $m,n \in \Z^+$. Consider a function $F(u,v) : \cV^m \times \cV^n \to \mathcal{Y}$. Let $u(\vec{\x}): \cV^L \to \cV^m$ and $v(\vec{\x}): \cV^L \to \cV^n$ be two functions that map a long sequence of tokens to parameters needed for computing $F$. +The goal for model $M$ is to compute $M(\vec{\x}) = F(u(\vec{\x}),v(\vec{\x}))$. +\end{definition} + +Computing deep sequential function compositions has been used as a technique for understanding the limitations of Transformer-based models empirically or through communication complexity \cite{chen2024theoretical,dziri2023faith}. Though the family of tasks we consider here shares a similar flavor to prior works, we need only consider a function of composition with depth 1. Intuitively, it is convenient to think about $u(\vec{\x})$ as a subsequence of $\vec{\x}$ that contains essential information that one should look at (of length $m$ for $m \ll L$ but moderately long, i.e., the width of the necessary context), while $v(\vec{\x})$ can be thought as a small parameter that controls the result of $F(u,v)$. + +Many \emph{long context tasks} naturally fall into such function composition categories. For example, in a natural question answering task, the input context is usually very long, but the question (which must be learned from the context) only sparsely depends on part of the context. Transformers often struggle retrieving the information without consuming almost the whole sequence into memory, while after retrieving information, a pure SSM requires an extremely large state space to perform the rest of the computation. +We start by showing that for a broad class of very simple $u,v$, \emph{pure Transformers and pure state space models cannot compute $F(u,v)$ without sufficient scale}. + + + + +\subsection{Limitations of SSMs} +To make the above intuition formal, +we first provide conditions under which $F$ is hard to compute by an SSM. + +\begin{assumption}\label{asp ssm lb} + Consider any function $F$ that satisfies \Cref{def function composition}. We say the function $F$ is \emph{hard to compute by an SSM} if it satisfies the following property: There exists a set $Q=\{v^{(i)}\}_{i=1}^q \subseteq \cV^n$ such that $G(u):=(F(u,v^{(1)}),\dots,F(u,v^{(q)}))$ is an injection. +\end{assumption} +Our first result shows that if $F$ satisfies \Cref{asp ssm lb}, then a $k$-layer SSM either requires $k$ to be $\Omega(m)$ or needs to have one layer with number of states exponential in $m$. That is, to compute $F$, \textit{the size of an SSM must grow linearly with respect to the hidden parameter $m$}. Formally, %we present the following \Cref{th SSM lb general}. +\begin{theorem}\label{th SSM lb general} + Let $F$ be a function defined as in \Cref{def function composition} that satisfies \Cref{asp ssm lb}. There is a distribution $D$ over the input $(u,v)$ such that any model $M$ that is a composition of $k$ state space layers $\SSM_i$, with state space $\mathcal{S}_i, i \in [k]$ that can compute $F$ with probability $1/2$ must satisfy $\sum_{i=1}^k \log(\card{\mathcal{S}_i}) \ge \Omega(m\log(\card{\cV})-q\log(\card{\mathcal{Y}}))$. +\end{theorem} +\begin{remark} + The distribution $D$ considered in \Cref{th SSM lb general} is defined over $(u,v)$ instead of the actual distribution over the input context $\vec{\x}$. For concrete tasks that satisfy \Cref{asp ssm lb}, we construct distributions over $\vec{\x}$ to simulate $D$. +\end{remark} + +To prove \Cref{th SSM lb general}, we first prove a structural result for a pure multi-layer SSM. Roughly speaking, if a model is a sequence of multiple layers of state space models, then we can view them as single-layer SSMs. We defer the proof of \Cref{lm group ssm} to \Cref{app proof group ssm}. + + +\begin{lemma}\label{lm group ssm} +Consider a $k$-layer model $M$ defined that is a composition of $k$ state space layers $\SSM_j, j \in [k]$. There is a model $\SSM'$ that only consists of a single layer SSM, which behaves the same as $M$. In particular, denote the state space of $\SSM_j$ as $\cS_j$, $j \in [k]$, and denote by the state space of $\SSM'$ as $\cS'$, then $\card{\cS'} \le \prod_{j=1}^k \card{\cS_j}$. +\end{lemma} + +Given \Cref{lm group ssm} and Yao's min-max principle, we only need to consider deterministic single-layer SSMs. The main technical difficulty of the proof is that, unlike in \citet{jelassi2024repeat,zhan2025overcoming}, which prove hardness against specific tasks, we have little knowledge of the structure of $F$ and cannot compute the probability of failure directly. +We use information theoretic arguments: +at a high level, for a fixed sample prefix and $m$ different random control parameters $v$, there need to be $\Omega(m \log |\cV|)$ bits to store all of the necessary information from the prefix to use $v$ correctly. +The full proof of \Cref{th SSM lb general} is in \Cref{app proof SSM lb general}. + + + + + +\subsection{Limitations of Transformers} +Next we study the limitations of using a Transformer to solve this problem under a memory constraint. We consider \emph{sliding window attention}, a dominant design choice for large context models. The size of the sliding window characterizes the working memory of a Transformer based model. Our hardness result is developed in \Cref{ass lb Transformer} and \Cref{th Transformer lb}. Roughly speaking, when the underlying function $F$ is \emph{locally sensitive}, which implies predicting a token at a position requires information very far from the current position, any pure Transformer model must either be very deep or have one layer that is very dense. We remark that \Cref{ass lb Transformer} is very natural. In the context of function composition, $F(u,v)$, though the length of the essential context $u,v$ may be small, the control parameter $v$ might be sensitive and depend on a long range of the input context, making using a standard Transformer costly. For example, if $v(\vec{x})$ is the last token in the sequence that satisfies some property, then any Transformer must maintain a very long window size in order to compute the control parameter. +The proof of \Cref{th Transformer lb} is in \Cref{app proof transform lb}. + + +\begin{assumption}\label{ass lb Transformer} + Let $F$ be a function that satisfies \Cref{def function composition}. We say the function $F(u(\vec{\x}),v(\vec{\x}))$ is hard to compute by a Transformer if it is $R$-local sensitive. That is, there are two sequences $\vec{\x},\vec{\x'}$ such that $\vec{\x}_{L-R+1:L} = \vec{\x'}_{L-R+1:L}$ but $F(\vec{\x}) \neq F(\vec{\x'})$. +\end{assumption} + +\begin{theorem}\label{th Transformer lb} + Let $F$ be a function that satisfies \Cref{ass lb Transformer}. There is a distribution $D$ over the input such that any model $M$ that is a composition of $k$ Transformer layers $\TF_1,\dots,\TF_k$ that can compute $F$ with probability $2/3$ must satisfy $\sum_{i=1}^k W_i \ge R$. +\end{theorem} + + + + +\begin{figure} + \centering + \includegraphics[width=0.6\linewidth]{fig/construction_structure.pdf} + \caption{The construction's style follows taking an input $x$ and implementing 2 functions $u, v$ with an SSM. Typically, $u$ is a truncation of the input, and $v$ is a control parameter (represented in purple). Lastly, a Transformer combines these by implementing $F$ to perform the complete task (represented in red).} + \label{fig:general_construction} +\end{figure} + + + diff --git a/source/authored/sections/introduction.tex b/source/authored/sections/introduction.tex new file mode 100644 index 0000000000000000000000000000000000000000..beae51b03baca983fdf412673a88572ed658c18a --- /dev/null +++ b/source/authored/sections/introduction.tex @@ -0,0 +1,35 @@ +\section{Introduction} +Transformers are the workhorse architecture for modern language models. While highly expressive and capable, Transformer-based models suffer from high complexity, particularly for inference time processing of long sequence inputs. As a result, developing alternative non-Transformer architectures has become among the most important problems in LLM development. Structured state space models (SSMs) like Mamba \cite{gu2024mamba} are among the most promising such alternatives. Such models trade off complexity for expressivity \cite{jelassi2024repeat}, achieving higher throughput---but typically lower performance---compared to Transformer-based models. + +A natural question is whether we can sidestep this tradeoff and produce a model architecture that offers the best of both worlds. \emph{Hybrid sequence models} seek to achieve this objective. These models, which mix layers from Transformer architectures (e.g., attention layers) with SSM layers, ideally outperform either Transformer-only or SSM-only models. In a short time, hybrids that can empirically do so on particular tasks have been scaled up from tiny sizes to as large as 50 billion parameters. For example, Nvidia's Nemotron-H hybrid model family \cite{blakeman2025nemotron} offers both better downstream evaluation performance \emph{and} higher throughput (due to the presence of lower-complexity Mamba layers) than Transformer-only baselines. + +Despite these empirical successes, \textbf{\emph{we have no principled understanding}} of why hybrid models can outperform models made up of a single type of layer. Similarly, we do not yet know for what basic tasks we should expect hybrids to behave in this way. This paper takes the first steps towards providing a \textbf{\emph{fundamental theory addressing architectural tradeoffs for hybrid models}}. It does so by first showing that on a family of core tasks where \emph{pure} (i.e., standard Transformer-only and SSM-only) models provably suffer from limitations (in terms complexity and memory). In contrast, we build constructions of hybrid models that \emph{do not} have the same limitations on representative tasks---including key tasks like associative recall and selective copying---thus exhibiting provable benefits for hybrids. + + +Concretely, we evaluate the performance of a model by analyzing its \emph{input-independent memory (model size) and input-dependent memory (working memory)}. We focus on a \emph{function-composition} family of tasks (Fig.~\ref{fig:example}) that combine both a long-context control variable and a local context-addressable lookup; such tasks naturally model real-world data. For these, (i) under an injectivity condition, we prove +%memory lower bounds showing +that, for this family, any pure SSM requires large internal state (or many layers); as a result, their size scales linearly with respect to the hidden dimension of the problem to solve the problem. +Likewise, (ii), under a local-sensitivity condition, any sliding-window Transformer (which includes full-window attention) requires a large window scaling linearly with respect to the length of the input context. Together, this pair of results indicates that for a broad class of tasks, pure SSM-based models and pure Transformer-based models \textbf{\emph{fail to achieve good expressivity and inference efficiency simultaneously}}. +We study two representative synthetic tasks in this family, namely selective copying %\cite{jelassi2024repeat} +and a variant of associative recall \cite{arora2023zoology}. +For these tasks, we construct \textbf{\emph{provably successful shallow hybrid models}} whose size scales with the logarithm of the size of the tasks while using only sublinear memory. + +Empirically, we validate our theoretical results and investigate hybrid versus non-hybrid performance in further settings and on additional tasks, such multi-key associative recall (MKAR) and needle-in-a-haystack (NH). We find that for selective copying and MKAR, \textbf{\emph{hybrids can perform the task with similar or better quality than the pure models with {6 times fewer parameters}}}. For associative recall with decoding, at the tested scales, the pure models \emph{never} match the performance possible with the hybrid model. +On top of measuring performance at fixed model sizes, we observe that hybrid models exhibit stronger length generalization and out-of-distribution (OOD) robustness. We see that when trained on the same distribution of short examples, hybrids consistently out-perform pure Transformers by around 10\% accuracy for long sequences. +For out-of-distribution testing, the hybrid model sometimes attains over 15\% higher performance than either the Transformer or the SSM with around the same number of parameters. + + + +\noindent \textbf{Roadmap of the paper.} +In \Cref{sec notation}, we provide necessary preliminaries and notations. In \Cref{sec lb}, we introduce a family of tasks formulated as computing a function composition and provide conditions under which non-hybrid models fail to solve the tasks efficiently. Next, in \Cref{sec merge}, we focus on two specific tasks (of varying difficulty) that are within this family and construct hybrid models that outperform non-hybrids. In \Cref{sec experiments}, we conduct experiments to show the benefits of hybrid models empirically. + +\begin{figure}[t] + \centering + \includegraphics[width=0.6\linewidth]{fig/example.png} + \caption{Example function composition task. The answer to a learned question only depends on a part of the long context input.} + \label{fig:example} + \vspace{-1em} +\end{figure} + + + diff --git a/source/authored/sections/prelim_and_notation.tex b/source/authored/sections/prelim_and_notation.tex new file mode 100644 index 0000000000000000000000000000000000000000..ecb4bf1d4c8f255afcc7f49eff917766b8bb1317 --- /dev/null +++ b/source/authored/sections/prelim_and_notation.tex @@ -0,0 +1,33 @@ +\section{Preliminaries and Notations}\label{sec notation} +We provide necessary preliminaries and notation. A complete list of preliminaries is deferred to \Cref{app notations}. + +We consider sequence-to-sequence token prediction problems. Let $\cV$ be some vocabulary of tokens, $V = \card{\cV}$, and $\vec{\x}=(\x_i)_{i=1}^L$ be an input sequence. A language model $M$ a is sequence-to-sequence map $M: \cV^L \to \cV^m$ of the form $M(\vec{\x}) = F_N\circ F_{N-1} \circ \dots \circ F_1 (\vec{\x})$, where $\circ$ is function composition and each $F_i$ is a sequence-to-sequence map called a \emph{layer}. +We will consider types of layers. + + +\noindent \textbf{Transformer Layer.} +Consider an embedded input sequence $\vec{\x}=(\x_1,\dots,\x_L)$ such that $\x_i \in \R^d$. An attention head $\Attn$ is defined by matrices $\W_k,\W_q,\W_v \in \R^{d \times d}$ such that $\Attn(\vec{\x})_j = \sum_{i=1}^n \alpha_{ji} \W_v\x_i$, where +\begin{align*} + \alpha_{ji} := \frac{\exp\left((\W_q \x_j) \cdot (\W_k \x_i)\right)}{\sum_{i=1}^n \exp\left((\W_q \x_j) \cdot (\W_k \x_i)\right)}. +\end{align*} +An attention layer $\AT$ is defined by $H$ attention heads $\Attn_1,\dots,\Attn_H$ and a projection matrix $\W_o \in \R^{d \times dH}$. Denote by $\mathbf{O}:= (\Attn_1(\vec{\x})^\top,\dots,\Attn_H(\vec{\x})^\top)^\top \in \R^{dH \times L}$ the concatenation of the outputs of the $H$ attention heads, so the attention layer $\AT(\vec{\x})$ outputs $\W_o \mathbf{O} \in \R^{d \times L}$. + +A Transformer layer $\TF$ is defined by an attention layer $\AT$ and an MLP layer. In particular, an MLP layer is defined as $f(\x): \R^d \to \R^d$ as $f(\x) = \mathbf{U}_2 \sigma(\mathbf{U}_1 \x)$, where $\mathbf{U}_1,\mathbf{U}_2$ are matrices and $\sigma$ is an activation function applied coordinate-wise. Specifically, $\TF(\vec{\x}) = \MLP(\AT(\vec{\x}))$. + + + +\noindent \textbf{State-Space Model Layer.} +We use a similar formalism of a SSM layer as in \citet{jelassi2024repeat}. +A state space $\mathcal{S}$ is a finite set. We denote by $\mathrm{mem}(\mathcal{S})$ the number of bits required to encode the states of $\mathcal{S}$, namely $\mathrm{mem}(\mathcal{S}) = \log(|\mathcal{S}|)$. A \textit{generalized state space model} (GSSM) is a layer defined by an update rule $u: \mathcal{S} \times \cV \rightarrow \mathcal{S}$ and an output function $r: \mathcal{S} \rightarrow \cV$. Let $s_0 \in \mathcal{S}$ be some initial state. Given some sequence $\x_1, \ldots, \x_L$, the state of the model at iteration $i$ is denoted by $s_i = S_i(\x_1, \ldots, \x_i)$ and the output token is denoted by $r_i=R_i(\x_1, \ldots, \x_i)$. The state and output are defined recursively: +\begin{enumerate}[leftmargin=*, nosep] + \item $S_0(\emptyset) = s_0$, + \item $S_i(\x_1, \ldots, \x_i) = u(S_{i-1}(\x_1, \ldots, \x_{i-1}), \x_i)$, + \item $R_i(\x_1, \ldots, \x_i) = r(S_i(\x_1, \ldots, \x_i))$. +\end{enumerate} + + + +\noindent \textbf{Memory Budget.} In this work, we will compare the behavior of different models according to their memory budget. In particular, we will consider two types of budgets: input-dependent memory and input-independent memory. \emph{Input-dependent memory}, also called \textit{working memory}, is the size of the intermediate state of the model, applicable to SSMs. \emph{Input-independent memory} is used to characterize the number of parameters in the model. + + + diff --git a/source/authored/sections/related.tex b/source/authored/sections/related.tex new file mode 100644 index 0000000000000000000000000000000000000000..0866714f9effcc643c9c8f4a82955b47d045dd75 --- /dev/null +++ b/source/authored/sections/related.tex @@ -0,0 +1,18 @@ +\section{Related Works}\label{app relate work} +\noindent \textbf{State Space Models.} +State space models (SSMs) are a classical framework \cite{elman1990finding,hochreiter1997long} for modeling sequential data via the evolution of a latent state governed by a dynamical system. +Recently, SSMs have attracted renewed interest in machine learning as efficient alternatives to attention-based architectures for long-sequence modeling, owing to their linear-time inference and favorable memory scaling. +In their canonical form, SSMs describe sequences through linear state transitions and observation maps, providing a principled mechanism for compressing historical information into a fixed-dimensional representation. +This revival includes structured SSM architectures that carefully design or learn the state dynamics to capture long-range dependencies, such as HiPPO \cite{gu2020hippo} and S4\cite{gu2021efficiently}, as well as simplified variants like S4D\cite{gu2022parameterization}. More recently, selective and input-dependent SSMs—most notably Mamba \cite{gu2024mamba}, have demonstrated strong empirical performance at scale. + + +\noindent \textbf{Hybrid Architectures.} +Hybrid sequence models that combine state space/recurrent dynamics with attention mechanisms have gained increasing attention as a means to balance efficient long-range memory with expressive contextual interaction. In the Transformer era, models like Transformer-XL \cite{dai2019Transformer} explored recurrent memory within attention-based architectures, providing early empirical evidence for hybrid designs. With the modern revival of structured state space models, works such as \cite{fu2022hungry,arora2023zoology}, which combine SSM layers with a few attention layers, have shown that hybrids can match or exceed Transformer performance on language tasks while retaining linear-time context dynamics. These findings attracted recent interest in empirical studies of hybrid models on in-context learning \cite{park2024can}, language tasks \cite{lee2025understanding} and large-scale empirical validation \cite{lieber2024jamba,ren2024samba}. A consistent theme exists for each of these studies: empirically, hybrid models tend to perform better than pure models of similar sizes, especially on long-sequence tasks. However, many miss a rigorous understanding of what the structure of these tasks are which requires a mixture of these pure models. + + +\noindent \textbf{Expressive Power and Efficiency Tradeoffs.} +The expressive power of pure state space models and pure Transformers has been extensively studied through the lenses of computational and communication complexity \cite{merrill2023parallelism,peng2024limitations,merrill2024illusion,chen2024theoretical,yehudai2025depth}, providing purely theoretical characterizations of the classes of problems each architecture can solve. Complementary to this line of work, a growing body of research—motivated by the challenges of long-context reasoning \cite{waleffe2024empirical}—investigates expressivity and memory–computation efficiency using carefully designed synthetic tasks in controlled empirical settings. These tasks are designed to probe specific capabilities such as long-range copying, indexing, and associative retrieval, including repeat-copy tasks \cite{jelassi2024repeat} and associative recall benchmarks \cite{fu2022hungry,arora2023zoology}. For example, \cite{jelassi2024repeat} shows that state space models have difficulty copying long contexts, whereas a small Transformer can solve the same task under mild assumptions. More recently, +\cite{zhan2025overcoming} introduces joint recall tasks that are provably hard for pure state space models in sub-quadratic time, yet become tractable when a state space model is augmented with a \emph{context-dependent} sparse attention layer. Despite these advances, the fundamental tradeoffs between expressive power and efficiency for hybrid architectures remain poorly understood. + + + diff --git a/source/authored/sections/tasks.tex b/source/authored/sections/tasks.tex new file mode 100644 index 0000000000000000000000000000000000000000..395d6bfb8a54a58ffaf5bc85ef7dc503de5a3b1b --- /dev/null +++ b/source/authored/sections/tasks.tex @@ -0,0 +1,63 @@ +\noindent \textbf{Selective Copying.} +Our first task is defined as: + +\begin{definition}[Selective Copying] +Consider a vocabulary of tokens $\cV = \cN \cup \cM$, where $\cN = \{\#1,\#2,\dots,\#N\}$, $|\cN| = N$ and $|\cM| = M$. The other values in $\cM$ are arbitrary. Provided some sequence $(\x_i)_{i=1}^L$, let $i = \argmax_{1 \leq i \leq L} \x_i \in \cN$, +the goal is to extract the token $\x_{L+1-\x_{i}}$, i.e. +$\x_{L+1} = \x_{L+1-\x_{i}}.$ +\end{definition} + +As a direct application of \Cref{th SSM lb general} and \Cref{th Transformer lb}, the size of a pure SSM that can solve the selective copying task well must scale linearly with respect to $\card{\cN}$, while a pure Transformer must have working memory that scales linearly in the context length $L$. The proof is in \Cref{app proof lb copy}. + +\begin{theorem}\label{th lb selective copying} +Consider the task of selective copying. There is a distribution $D$ over $\cV^L$ such that any pure state space model that can solve the task for some $\vec{\x}$ drawn from $D$ with probability $90\%$ must have $\sum_{i=1}^k\log(\card{\mathcal{S}_i}) \ge N \log M$, where $\mathcal{S}_i$ is the state space of the $i$th SSM layer. Furthermore, any pure Transformer model that can solve the task with probability $90\%$ must have $\sum_{i=1}^kW_i \ge \Omega(L)$. +\end{theorem} + + + +\begin{figure} + \centering + \includegraphics[width=0.6\linewidth]{fig/selective_copy_construction_structure.pdf} + \caption{The construction solving selective copy takes an input sequence and finds the most recent number token (as represented in the bottom squares of the output of the SSM). The Transformer can then use these to look back some relative distance to find the correct token to output.} + \label{fig:var_copy_construction} +\end{figure} + +\noindent \textbf{Hybrid Model for Selective Copying} + +To sidestep the limitations of pure models, we \textbf{design a two-layer hybrid that provably solves the problem with small input-independent memory \emph{and} input-dependent memory}. Our construction follows the discussion in \Cref{sec merge}. In particular, the SSM component can be realized by a Mamba model. +\begin{theorem}\label{th hybrid copy} +There is a two-layer hybrid with a Mamba layer and an attention layer that can solve the selective copying task for \emph{every} input sequence $\vec{\x} \in \cV^L$. Furthermore, the hybrid model has an embedding dimension $d = O( \max(\log \card{\cV},\log L))$ such that the Mamba layer has $O(\card{\cV})$ state space, while the attention layer has dimension $d$ and a sliding window size of $O(N)$. +\end{theorem} +The proof of \Cref{th hybrid copy} is in \Cref{app proof hybrid copy}. We remark that the number of parameters of our hybrid model is only $\poly\log(\max(\card{\cV},L))$ with working memory $\Tilde{O}(N)$, which is much smaller than $L$, unless $N$ is extremely large. The construction follows a structure where the SSM stores the most recent number token into its state, adding it to the current token. The Transformer can then use this information to copy the token that many positions in the past (Fig. \ref{fig:var_copy_construction}). + + +\noindent \textbf{Associative Recall with Decoding} + +As a further concrete application of our framework, we introduce another task, for which a hybrid model outperforms both pure state space models and Transformers. +\begin{definition}[Associative Recall with Decoding] + Consider a vocabulary of tokens $\cV = \cM \cup \{0,1\}$, where $\cM$ is a set of word tokens. Let $\vec{\x} \in \cV^L$ be a sequence of input tokens and let $v(\vec{x}) \in \{0,1\}^{\log(\card{\cV})}$ be the $0-1$ subsequence of $\vec{\x}$. Denote by $\Phi(\vec{\x}) \in \cM$, the token with binary representation $\vec{\x}$. + Given $v(\vec{\x})$, the goal is to output the next token in $\vec{\x}$ behind the last $\Phi(v(\vec{\x}))$ token. +\end{definition} + +As another implication of \Cref{th SSM lb general} and \Cref{th Transformer lb}, the size of a pure SSM that can solve the associative recall with decoding task well must scale linearly with respect to the number of all possible word tokens, while a pure Transformer must have working memory that scales linearly in the context length $L$. +The proof of \Cref{th lb associate recall} is in \Cref{app proof lb recall}. + + +\begin{theorem}\label{th lb associate recall} + Consider the task of associate recall with decoding. + There is a distribution $D$ over $\cV^L$ such that any pure state space model that can solve the task for some $\vec{\x}$ drawn from $D$ with probability $90\%$ must have $\sum_{i=1}^k\log(\card{\mathcal{S}_i}) \ge \Omega (W \log W)$, where $\mathcal{S}_i$ is the state space of the $i$th SSM layer and $W = \card{\cM}$. Any pure Transformer model that can solve the task with probability $90\%$ must have $\sum_{i=1}^kW_i \ge \Omega(L)$. +\end{theorem} + + + +We next show that for very natural distributions (including the one stated in \Cref{th lb associate recall}), the performance of a hybrid model can be much better than that of a pure model. +In particular, we show that we can construct a hybrid model such that the number of parameters of the model scales with the logarithm of the task size. The intuition here is that for associative recall, the only tokens that matter tend to appear at the end of the sequence, which implies that the window used by the Transformer can be improved to much smaller than $L$. For example, if each token is sampled uniformly from the vocabulary, then with probability $99\%$, within a window of size $\Tilde{O}(\card{\cM})$, we can see all distinct tokens from the vocabulary. In fact, the hard distribution we considered in \Cref{th lb associate recall} also satisfies such a property. +Thus, once we use a state space model to extract the control variable $\vec{x}$, we are able to solve the problem with a small model with a small working memory. We defer the proof of \Cref{th hybrid recall} to \Cref{app proof hybrid recall}. + + + +\begin{theorem}\label{th hybrid recall} +Consider the task of associative recall with decoding. There is a three-layer hybrid model that is a combination of a Mamba layer and two attention layers that can solve the selective copying task with probability $99\%$ for an input sequence $\vec{\x} \in \cV^L$ such that tokens in $\vec{\x}\setminus v(\x)$ are drawn from a uniform distribution. The hybrid model has an embedding dimension $d = O( \max(\log \card{\cV},\log L))$ such that the Mamba layer has $O(\card{\cV})$ state spaces, while the attention layer has dimension $d$ and a sliding window size of $\Tilde{O}(\card{\cV})$. +\end{theorem} + +% } \ No newline at end of file diff --git a/source/authored/sections/upper_bound.tex b/source/authored/sections/upper_bound.tex new file mode 100644 index 0000000000000000000000000000000000000000..a7cca3f832cfd327956d6d71c3652114e37612c6 --- /dev/null +++ b/source/authored/sections/upper_bound.tex @@ -0,0 +1,30 @@ +\section{Hybrid Model for Function Composition}\label{sec merge} +Using our hardness results, if a function $F$ satisfies \Cref{asp ssm lb} and \Cref{ass lb Transformer} simultaneously, then any pure SSM must need a large number of parameters to solve the problem, making a key bottleneck for training and deploying the model, while any pure Transformer must need a working memory nearly in $\Omega(L)$ due to data redundant, making inference over long-context data a key bottleneck. + + +To achieve the best of both worlds, i.e., a model with a small number of parameters and relatively small working memory, we consider hybrid models that combine state-space and Transformer layers. The intuitive motivation for hybrid use is that \emph{a state space model can implicitly act as an encoder that summarizes the information from the long context $\vec{\x}$ and passes the compressed information to a Transformer}. Since the Transformer itself does not have the ability to select the correct positions to look at unless it has a deep depth or a large window size, using more comprehensive information can reduce the space requirement of the Transformer. + +To avoid making the notation messy, we think of $\vec{v}(\vec{\x})$ as a single token so that given $(\vec{u},\vec{v})$, a Transformer solves the problem by answering a query $q_v$. Suppose we have a state space model $\SSM_u$ parameterized by $(S^u,R^u)$ that maps $\vec{\x} \in \cV^L$ to a sequence $\vec{a} \in \cV^L$ such that $\vec{a}_{L-m+1:L} = \vec{u}(\vec{\x})$ and an encoder based model $\SSM_v$ parameterized by $S^v,R^v$ that maps $\vec{\x} \in \cV^L$ to a sequence $\vec{b} \in \cV^L$ such that $\vec{b}_L = \vec{v}(\vec{\x})$. We can build a merged $\SSM$ by combining the two state space models in a black box way. That is, +\begin{align*} + & S(\x_1,\dots,\x_i) = (S^u (\x_1,\dots,\x_i), S^v (\x_1,\dots,\x_i)), \\ + & R(S(\x_1,\dots,\x_i)) = \begin{pmatrix} + R^u(S^u (\x_1,\dots,\x_i)) \\ + R^v(S^v (\x_1,\dots,\x_i) + \end{pmatrix}. +\end{align*} +In matrix form, $\SSM$ maps $\vec{\x}$ to the following matrix +\begin{align*} + \begin{pmatrix} + r^u_1 & r^u_2 &,\dots, & r^u_L \\ + r^v_1 & r^v_2 &,\dots, & r^v_L + \end{pmatrix}. +\end{align*} +In particular, if we look at the last $m$ columns of the output of the state-space model, then we have +\begin{align*} + \begin{pmatrix} + u_1 & u_2 &,\dots, & u_m \\ + r^v_{L-m+1} & r^v_{L-m+2} &,\dots, & v + \end{pmatrix}. +\end{align*} +Suppose we have a Transformer $\TF$ parameterized by $(\W_q^{\TF},\W_k^{\TF},\W_v^{\TF})$ such that given $(\vec{u},\vec{v})$, it can compute $F(\vec{u},\vec{v})$. We consider the following attention layer $\W_q(r^u_i, r^v_i)^\top = \W_q^{\TF}r^v_i, \W_k(r^u_i, r^v_i)^\top = \W_k^{\TF}r^u_i, \W_v(r^u_i, r^v_i)^\top = \W_v^{\TF}r^u_i$. +The output of $\TF\circ \SSM$ is exactly $F(\vec{u},\vec{v})$. Furthermore, such a construction \emph{preserves the model size and the working memory of both state space models and Transformers}. We next use this idea to show that for several natural synthetic tasks, we can construct small scale hybrid models achieving good working memory efficiency. diff --git a/source/official-code/.gitignore b/source/official-code/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..677dfcdfcb0be089c82c53bb8f4aad381319292e --- /dev/null +++ b/source/official-code/.gitignore @@ -0,0 +1,16 @@ +*.ipynb_checkpoints +.vscode/ +*__pycache__/ +*.pyc +*.pkl +*.pt +.DS_Store +logs/ +data/ +micro/results/*/data_* +micro_hf/results/*/data_* +micro_hf/old_results/ +micro_hf/results/*-old/* +mini/output_dir/ +old/ +micro_hf/change_folder_names.py \ No newline at end of file diff --git a/source/official-code/README.md b/source/official-code/README.md new file mode 100644 index 0000000000000000000000000000000000000000..1b5c6c9dea1d64e9ea109a8cbcf83227d40a73f7 --- /dev/null +++ b/source/official-code/README.md @@ -0,0 +1,7 @@ +## Expressivity-Efficiency Tradeoffs for Hybrid Sequence Models + +This repository includes all of the experiments relevant to the associated paper. + +- `micro`: A collection of old experiments with pytorch transformers and mamba. Not currently used, but might be useful as a reference. +- `micro_hf`: A collection of experiments for micro-scale experiments, using huggingface models. `run.ipynb` will execute the experiments, and `process.ipynb` can be used to analyze the results. Each individual run does not take long to run on an RTX 4090. +- `mini`: A collection of larger experiments, mostly ported from the ones in the Repeat After Me paper. Added to this are hybrid models implemented in huggingface. \ No newline at end of file diff --git a/source/official-code/constructions/construction_decode_recall.ipynb b/source/official-code/constructions/construction_decode_recall.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..5a10d676f04b5ba83e9baf0419a9fcbe419bbb26 --- /dev/null +++ b/source/official-code/constructions/construction_decode_recall.ipynb @@ -0,0 +1,1274 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 810, + "id": "62c170c5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "code", + "execution_count": 811, + "id": "9dc62fbc", + "metadata": {}, + "outputs": [], + "source": [ + "from data_utils import get_tokenizer, get_train_dataset\n", + "# from model_utils import get_model\n", + "from generate import force_args\n", + "from generate import generate_seq\n", + "\n", + "import math\n", + "import matplotlib.pyplot as plt\n", + "\n", + "import torch\n", + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "\n", + "from model_utils import SSMTransformer" + ] + }, + { + "cell_type": "code", + "execution_count": 812, + "id": "60f94b8e", + "metadata": {}, + "outputs": [], + "source": [ + "class Args:\n", + " def __init__(self):\n", + " self.model = \"hybrid\"\n", + " self.num_vocab = 32\n", + " self.train_task = \"decode-recall\"\n", + " self.num_numbers = 2\n", + " self.nope = False\n", + " self.layers = ['SSM', 'SSM', 'TF']\n", + " self.hidden_size = 12\n", + " self.heads = 1\n", + " self.state_dim = 1\n", + " self.sequence_length = 100\n", + "\n", + " self.pack_examples = False\n", + " self.min_train_length = 97\n", + " self.max_train_length = 98\n", + " self.min_test_length = 97\n", + " self.max_test_length = 98\n", + "\n", + " self.num_examples = 1000\n", + "\n", + " self.train_batch_size = 4\n", + " self.test_batch_size = 4\n", + "\n", + " self.p = 0.2\n", + "\n", + "args = Args()\n", + "force_args(args)\n", + "\n", + "tokenizer = get_tokenizer(args)\n", + "train_dataset = get_train_dataset(args, tokenizer) " + ] + }, + { + "cell_type": "code", + "execution_count": 813, + "id": "1c70350b", + "metadata": {}, + "outputs": [], + "source": [ + "batch = 2\n", + "seq_len = 100\n", + "size_vocab = 34\n", + "\n", + "l = max(int(math.log2(seq_len)), int(math.log2(size_vocab))) + 2\n", + "d_model = 3 * l + 1 + 5 + 5 + 2 * l\n", + "\n", + "# x = torch.randn(batch, seq_len, d_model)\n", + "\n", + "model = SSMTransformer(\n", + " num_vocab=size_vocab,\n", + " d_model=d_model,\n", + " d_state=5,\n", + " n_heads=1,\n", + " d_ff=-1,\n", + " layers=['SSM', 'SSM', 'TF'],\n", + ")\n", + "\n", + "# y = model(x)\n", + "# print(y.shape) # (2, 64, 128)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 814, + "id": "06d6245a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "51" + ] + }, + "execution_count": 814, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d_model" + ] + }, + { + "cell_type": "code", + "execution_count": 815, + "id": "232bd737", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "SSMTransformer(\n", + " (embedding): Embedding(34, 51)\n", + " (layers): ModuleList(\n", + " (0-1): 2 x SSMTransformerBlock(\n", + " (layer): SimpleSSM(\n", + " (Wo): Linear(in_features=51, out_features=51, bias=False)\n", + " )\n", + " )\n", + " (2): SSMTransformerBlock(\n", + " (layer): CausalSelfAttention(\n", + " (qkv): Linear(in_features=51, out_features=153, bias=False)\n", + " (out): Linear(in_features=51, out_features=51, bias=False)\n", + " )\n", + " )\n", + " )\n", + " (lm_head): Linear(in_features=51, out_features=34, bias=True)\n", + ")" + ] + }, + "execution_count": 815, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model" + ] + }, + { + "cell_type": "code", + "execution_count": 816, + "id": "9e0d58a8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "emb = torch.zeros((34, d_model))\n", + "for i in range(34):\n", + " t = i\n", + " if tokenizer.TO_STR[i][0] == \"#\":\n", + " t = int(tokenizer.TO_STR[i][1:]) #+ 1\n", + "\n", + " for j in range(l-1, 0, -1):\n", + " # emb[i,j] = t % 2 # 0/1 binary\n", + " emb[i,j] = 2*(t % 2) - 1 # -1/1 binary encoding\n", + " t //= 2\n", + "\n", + " if tokenizer.TO_STR[i][0] == \"#\": # If the token is a number token\n", + " emb[i,2*l:3*l] = emb[i,:l]\n", + "\n", + " emb[i,0] = 1 # Indicator for being a number token\n", + " emb[i,2*l] = 1 # Indicator for being a number token\n", + " if tokenizer.TO_STR[i][1] == \"0\":\n", + " emb[i,3*l+1:3*l+6] = -1 # Indicators for being a number token\n", + " else:\n", + " emb[i,3*l+1:3*l+6] = 1 # Indicators for being a number token\n", + "\n", + "emb[:,3*l] = 1 # For bias terms\n", + "\n", + "model.embedding.weight.data.copy_(emb)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 817, + "id": "3f928dce", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "pos_emb = torch.zeros_like(model.pos_emb.data)\n", + "for i in range(seq_len):\n", + " t = i + 1\n", + " # t = seq_len - i\n", + " # t = seq_len - i - 1\n", + " for j in range(-1, -l-1, -1):\n", + " # pos_emb[0,i,j] = t % 2 # 0/1 binary\n", + " pos_emb[0,i,j] = 2*(t % 2) - 1 # -1/1 binary encoding\n", + " t //= 2\n", + " pos_emb[0,i,-l] = 1.0 * i / seq_len # Bias term\n", + "\n", + "model.pos_emb.data.copy_(pos_emb)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 818, + "id": "13dccb09", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "h0 = torch.zeros_like(model.layers[0].layer.h0.data)\n", + "\n", + "h0[:, 3*l+1:3*l+6] = -1 # Indicators for no numbers stored\n", + "\n", + "model.layers[0].layer.h0.data.copy_(h0)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 819, + "id": "b991bd89", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "A = torch.zeros_like(model.layers[0].layer.A.data)\n", + "d = A.shape[1]\n", + "assert d == 5\n", + "# A[3*l+1:3*l+6,1:,:-1] += 10 * torch.eye(d-1) # M = 10\n", + "A[3*l+1:3*l+6,:-1,1:] += 1 * torch.eye(d-1) # M = 10\n", + "\n", + "model.layers[0].layer.A.data.copy_(A)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 820, + "id": "ddc28110", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor(1.)\n", + "\n" + ] + } + ], + "source": [ + "B = torch.zeros_like(model.layers[0].layer.B.data)\n", + "# B[3*l+1:3*l+6, -1] = 1 # Identity\n", + "# B[3*l+5, :] = 1 # Identity\n", + "B[3*l, -1] = 1 # Identity\n", + "print(torch.sum(B))\n", + "\n", + "model.layers[0].layer.B.data.copy_(B)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 821, + "id": "79ed41af", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "C = torch.zeros_like(model.layers[0].layer.C.data)\n", + "\n", + "model.layers[0].layer.C.data.copy_(C)\n", + "\n", + "Cb = torch.zeros_like(model.layers[0].layer.Cb.data)\n", + "Cb[3*l+1:3*l+6, :] = torch.eye(5)\n", + "\n", + "model.layers[0].layer.Cb.data.copy_(Cb)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 822, + "id": "1d9a5b92", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "Delta = torch.zeros_like(model.layers[0].layer.Delta.data)\n", + "Delta[2*l] = 1 # Position of the number token\n", + "\n", + "model.layers[0].layer.Delta.data.copy_(Delta)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 823, + "id": "b5d941f6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "Wo = torch.zeros_like(model.layers[0].layer.Wo.weight.data)\n", + "# Wo[3*l+1:3*l+6, 3*l+6:3*l+11] = torch.eye(5) \n", + "Wo[3*l+6:3*l+11, 3*l+1:3*l+6] = torch.eye(5) \n", + "\n", + "model.layers[0].layer.Wo.weight.data.copy_(Wo)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 824, + "id": "4b2f081f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "A = torch.zeros_like(model.layers[1].layer.A.data)\n", + "d = A.shape[1]\n", + "assert d == 5\n", + "# A[:l,-2,-1] = 1 # M = 10\n", + "A[:l,:-1,1:] += 1 * torch.eye(d-1) # M = 10\n", + "\n", + "model.layers[1].layer.A.data.copy_(A)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 825, + "id": "b6783e5c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor(1.)\n", + "\n" + ] + } + ], + "source": [ + "B = torch.zeros_like(model.layers[1].layer.B.data)\n", + "# B[3*l+1:3*l+6, -1] = 1 # Identity\n", + "# B[3*l+5, :] = 1 # Identity\n", + "B[3*l, -1] = 1 # Identity\n", + "print(torch.sum(B))\n", + "\n", + "model.layers[1].layer.B.data.copy_(B)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 826, + "id": "88fc3f9d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "C = torch.zeros_like(model.layers[1].layer.C.data)\n", + "\n", + "model.layers[1].layer.C.data.copy_(C)\n", + "\n", + "Cb = torch.zeros_like(model.layers[1].layer.Cb.data)\n", + "Cb[:l, -2] = 1\n", + "\n", + "model.layers[1].layer.Cb.data.copy_(Cb)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 827, + "id": "66d478f5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "Delta = torch.zeros_like(model.layers[1].layer.Delta.data)\n", + "Delta[3*l] = 1 # Always one\n", + "\n", + "model.layers[1].layer.Delta.data.copy_(Delta)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 828, + "id": "2191cbc5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "Wo = torch.zeros_like(model.layers[1].layer.Wo.weight.data)\n", + "# Wo[3*l+1:3*l+6, 3*l+6:3*l+11] = torch.eye(5) \n", + "Wo[l:2*l, :l] = torch.eye(l) \n", + "\n", + "model.layers[1].layer.Wo.weight.data.copy_(Wo)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 829, + "id": "829db9d3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "Wq = torch.zeros((d_model, d_model))\n", + "Wk = torch.zeros((d_model, d_model))\n", + "Wv = torch.zeros((d_model, d_model))\n", + "\n", + "# Wk[:5, l-5:l] = torch.eye(5)\n", + "Wk[:5, 2*l-5:2*l] = torch.eye(5)\n", + "Wk[5, -l] = 1\n", + "\n", + "Wq[:5, 3*l+6:3*l+11] = 10000 * torch.eye(5)\n", + "Wq[5, 3*l] = 10000\n", + "\n", + "Wv[:l, :l] = torch.eye(l)\n", + "# Wv[:l, l:2*l] = torch.eye(l)\n", + "\n", + "model.layers[2].layer.qkv.weight.data.copy_(torch.concat([Wq, Wk, Wv], dim=0))\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 830, + "id": "d2d1e4b0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "out = torch.zeros_like(model.layers[2].layer.out.weight.data)\n", + "# Wo = torch.eye(model.layers[0].ssm.Wo.weight.data.shape[0])\n", + "# out[3*l+2:4*l+2, :l] = torch.eye(l) \n", + "out[-2*l:-l, :l] = torch.eye(l) \n", + "\n", + "model.layers[2].layer.out.weight.data.copy_(out)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 831, + "id": "345188a4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "lm_head = torch.zeros_like(model.lm_head.weight.data)\n", + "lm_head[:,-2*l:-l] = model.embedding.weight.data[:,:l]\n", + "\n", + "model.lm_head.weight.data.copy_(lm_head)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 832, + "id": "d023b30d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'V9 V1 V18 V28 V16 V0 V0 V17 V23 V3 #1 V10 #1 #1 V20 V30 V0 #0 V23 V9 V31 V4 V14 V21 #1 V16 V1 V13 V22 V15 #0 #0 V5 V17 V25 V7 V8 V1 V2 V30 V11 #1 V25 V13 V21 #0 V20 V6 #0 V12 V26 V27 #1 #1 V8 V6 V18 #1 #0 V17 V16 V15 V7 V20 V5 V19 #0 V25 V4 V25 V20 V9 V20 V3 V10 V10 #1 V12 V15 V13 V25 V7 V22 V10 V29 V30 V0 #0 V6 V11 V15 V25 V7 V24 V6 V1 V10 V29 V14 #0'" + ] + }, + "execution_count": 832, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "first_data = train_dataset[0]\n", + "x = first_data['input_ids']\n", + "y = first_data['output_ids']\n", + "\n", + "' '.join(first_data['input'][0])" + ] + }, + { + "cell_type": "code", + "execution_count": 833, + "id": "ccca0a63", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'TO_TOKEN': {'V0': 0,\n", + " 'V1': 1,\n", + " 'V2': 2,\n", + " 'V3': 3,\n", + " 'V4': 4,\n", + " 'V5': 5,\n", + " 'V6': 6,\n", + " 'V7': 7,\n", + " 'V8': 8,\n", + " 'V9': 9,\n", + " 'V10': 10,\n", + " 'V11': 11,\n", + " 'V12': 12,\n", + " 'V13': 13,\n", + " 'V14': 14,\n", + " 'V15': 15,\n", + " 'V16': 16,\n", + " 'V17': 17,\n", + " 'V18': 18,\n", + " 'V19': 19,\n", + " 'V20': 20,\n", + " 'V21': 21,\n", + " 'V22': 22,\n", + " 'V23': 23,\n", + " 'V24': 24,\n", + " 'V25': 25,\n", + " 'V26': 26,\n", + " 'V27': 27,\n", + " 'V28': 28,\n", + " 'V29': 29,\n", + " 'V30': 30,\n", + " 'V31': 31,\n", + " '#0': 32,\n", + " '#1': 33,\n", + " '': 34,\n", + " '': 35,\n", + " '': 36},\n", + " 'TO_STR': {0: 'V0',\n", + " 1: 'V1',\n", + " 2: 'V2',\n", + " 3: 'V3',\n", + " 4: 'V4',\n", + " 5: 'V5',\n", + " 6: 'V6',\n", + " 7: 'V7',\n", + " 8: 'V8',\n", + " 9: 'V9',\n", + " 10: 'V10',\n", + " 11: 'V11',\n", + " 12: 'V12',\n", + " 13: 'V13',\n", + " 14: 'V14',\n", + " 15: 'V15',\n", + " 16: 'V16',\n", + " 17: 'V17',\n", + " 18: 'V18',\n", + " 19: 'V19',\n", + " 20: 'V20',\n", + " 21: 'V21',\n", + " 22: 'V22',\n", + " 23: 'V23',\n", + " 24: 'V24',\n", + " 25: 'V25',\n", + " 26: 'V26',\n", + " 27: 'V27',\n", + " 28: 'V28',\n", + " 29: 'V29',\n", + " 30: 'V30',\n", + " 31: 'V31',\n", + " 32: '#0',\n", + " 33: '#1',\n", + " 34: '',\n", + " 35: '',\n", + " 36: ''},\n", + " 'vocab': array(['V0', 'V1', 'V2', 'V3', 'V4', 'V5', 'V6', 'V7', 'V8', 'V9', 'V10',\n", + " 'V11', 'V12', 'V13', 'V14', 'V15', 'V16', 'V17', 'V18', 'V19',\n", + " 'V20', 'V21', 'V22', 'V23', 'V24', 'V25', 'V26', 'V27', 'V28',\n", + " 'V29', 'V30', 'V31', '#0', '#1', '', '', ''],\n", + " dtype='',\n", + " 'TO_STRING': {0: 'a',\n", + " 1: 'b',\n", + " 2: 'c',\n", + " 3: 'd',\n", + " 4: 'e',\n", + " 5: 'f',\n", + " 6: 'g',\n", + " 7: 'h',\n", + " 8: 'i',\n", + " 9: 'j',\n", + " 10: 'k',\n", + " 11: 'l',\n", + " 12: 'm',\n", + " 13: 'n',\n", + " 14: 'o',\n", + " 15: 'p',\n", + " 16: 'q',\n", + " 17: 'r',\n", + " 18: 's',\n", + " 19: 't',\n", + " 20: 'u',\n", + " 21: 'v',\n", + " 22: 'w',\n", + " 23: 'x',\n", + " 24: 'y',\n", + " 25: 'z',\n", + " 32: '0',\n", + " 33: '1',\n", + " 34: '$',\n", + " 35: '.',\n", + " 36: '_'}}" + ] + }, + "execution_count": 833, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vars(tokenizer)" + ] + }, + { + "cell_type": "code", + "execution_count": 834, + "id": "7278ad14", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[ 9, 1, 18, 28, 16, 0, 0, 17, 23, 3, 33, 10, 33, 33, 20, 30, 0, 32,\n", + " 23, 9, 31, 4, 14, 21, 33, 16, 1, 13, 22, 15, 32, 32, 5, 17, 25, 7,\n", + " 8, 1, 2, 30, 11, 33, 25, 13, 21, 32, 20, 6, 32, 12, 26, 27, 33, 33,\n", + " 8, 6, 18, 33, 32, 17, 16, 15, 7, 20, 5, 19, 32, 25, 4, 25, 20, 9,\n", + " 20, 3, 10, 10, 33, 12, 15, 13, 25, 7, 22, 10, 29, 30, 0, 32, 6, 11,\n", + " 15, 25, 7, 24, 6, 1, 10, 29, 14, 32]])" + ] + }, + "execution_count": 834, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x, y = x[:1], y[:1]\n", + "x" + ] + }, + { + "cell_type": "markdown", + "id": "761fe746", + "metadata": {}, + "source": [ + "### The Below Should Agree Except For 36, The Null Token" + ] + }, + { + "cell_type": "code", + "execution_count": 835, + "id": "2f365ad7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[36, 36, 36, 36, 36, 36, 0, 17, 17, 17, 18, 18, 33, 36, 36, 36, 36, 36,\n", + " 36, 36, 36, 36, 36, 21, 36, 36, 36, 36, 36, 36, 36, 30, 30, 30, 30, 30,\n", + " 30, 30, 30, 30, 30, 31, 31, 31, 31, 28, 28, 28, 14, 14, 14, 14, 31, 36,\n", + " 36, 36, 36, 8, 21, 21, 21, 21, 21, 21, 21, 21, 16, 16, 16, 16, 16, 16,\n", + " 16, 16, 16, 16, 20, 20, 20, 20, 20, 7, 7, 7, 7, 7, 7, 33, 33, 33,\n", + " 33, 33, 33, 33, 33, 33, 33, 33, 33, 25]])" + ] + }, + "execution_count": 835, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y" + ] + }, + { + "cell_type": "code", + "execution_count": 836, + "id": "55d55593", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[ 9, 33, 18, 18, 18, 32, 32, 17, 17, 17, 18, 10, 33, 33, 33, 33, 33, 32,\n", + " 32, 32, 32, 32, 32, 21, 33, 33, 33, 33, 22, 22, 32, 30, 30, 30, 30, 30,\n", + " 30, 30, 30, 30, 30, 31, 31, 31, 31, 28, 28, 28, 14, 14, 14, 14, 31, 33,\n", + " 33, 33, 33, 8, 21, 21, 21, 21, 21, 21, 21, 21, 16, 16, 16, 16, 16, 16,\n", + " 16, 16, 16, 16, 20, 20, 20, 20, 20, 7, 7, 7, 7, 7, 7, 33, 33, 33,\n", + " 33, 33, 33, 33, 33, 33, 33, 33, 33, 25]])" + ] + }, + "execution_count": 836, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "torch.argmax(model(x), dim=-1)" + ] + }, + { + "cell_type": "code", + "execution_count": 837, + "id": "ca772c02", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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l8rNzZXT6dTq1avVsWNHSWdC9S233KK4uDiffc2YMcM6tvr27StJXvtFku655x7VqlVLmZmZ2rRpk/75z3+qcuXK1jF7se6//34tXbpUy5Yt03XXXWfV07t3b6Wnp2vMmDE6duyYpkyZohYtWujzzz+3juUvv/xSaWlpioyMVN++fVWzZk3t2rVLCxcu1AsvvCDpzLGTlpYml8uloUOHKjIyUlOnTtXtt9+ulStXWtd+ZmVlqXXr1jp9+rR1jL3yyiuKjY294NcyevRoOZ1OPfHEE8rNzdXYsWPVs2dPrVu3zmozZcoU9e/fX2lpaRo8eLC+//57de7cWRUqVFC1atUuej/OmjVL+fn56tevnxwOh8aOHauuXbvqu+++U2RkpNWusLBQd955p5o1a6axY8dq8eLFGjFihE6fPq1Ro0YFtM1A3u+4whnABjZs2GAkmWXLlhljjPF4PKZatWpm4MCBXu0GDhxoXC6XOX36tN++br75ZtOxY8dzbq9BgwamcuXK5siRI9a6L774wjidTtOrVy9rXa9evYzT6TTr168v1ofH4zHGGPPhhx8aSebDDz+0Hjt27Fix9pmZmcbhcJgffvjBWpeRkWH8vQ0lmREjRlj/vu+++0zlypW9XvuBAweM0+k0o0aNsta1bdvW1KtXz5w4ccKr1ttuu81ce+21Prf16+0+9NBD5tChQ+bgwYNmw4YN5s477zSSzLhx46x2M2bMME6n06xatcrr+S+//LKRZFavXm2MMWbHjh3G6XSaLl26mMLCQq+2RfvQGN/7rF+/fqZs2bJer6V3796mRo0axWo+e1/5Mm7cOFOmTBmTl5dnjDFmwoQJpkaNGqZJkybmySefNMYYU1hYaOLj483gwYOt540YMaLYGJUrV8707t272DaK2j744INe67t06WISEhLOWV/RaytXrpzfxz///HMjyaovPz/fxMfHm0ceecSrXVZWlnG73V7rW7ZsacqXL+91/BnjPQadO3c2UVFRZteuXda6/fv3m/Lly5uWLVta6wYNGmQkmXXr1lnrDh48aNxut5Fkdu/eba1v1aqVadWqlfXvovdL3bp1TUFBgbX+pZdeMpLMV199ZYwxpqCgwCQkJJjGjRubU6dOWe2mT59uJHn16U+NGjW8Pgt2795tJJmEhATz008/WesXLFhgJJmFCxda63r37m0kmQEDBnjtq44dO5qoqChz6NAhr9dz9vv/7G1NmzbNWneu9ztQhK8yYQszZ85UUlKSWrduLenMGY4ePXpo9uzZXl9lxcfH6+jRo8W+ljxbfHy8vv76a+3YscPn4wcOHNDmzZvVp08fVaxY0Vpfv3593XHHHXrvvfcknTkj9Pbbb6tTp05q1KhRsX7O9TXE2WcOjh49qsOHD+u2226TMUaff/653+edS48ePXTw4EGvr0zmz58vj8ejHj16SJJ++uknrVixQvfcc4/y8/N1+PBhHT58WEeOHFF6erp27Nihffv2nXdbr732mhITE1W5cmU1atRIy5cv19ChQ72+Cpw3b57q1q2rlJQUazuHDx9WmzZtJEkffvihJOntt9+Wx+PRM888I6fT+yPn7H149j4rqj0tLU3Hjh3Ttm3bAt9hv5KWlqbCwkJ9+umnks6cGUtLS1NaWppWrVolSdqyZYtycnKUlpZ2Sdt69NFHi237yJEjl3zhftFZvPz8fElnziDn5OTovvvu8xqDMmXKqGnTptYYHDp0SB9//LEefPBBJScne/VZNAaFhYVaunSpOnfurNq1a1uPX3XVVfr973+vTz75xKr/vffeU7NmzdSkSROrXWJionr27HnBr+WBBx7wOuNctM+/++47SdKGDRt05MgRPfLII17X+PXs2VMVKlS44O340qNHD68+fr3ts/Xv39/6b4fDof79++vkyZP64IMPLqkGwB+CGcKusLBQs2fPVuvWrbV7927t3LlTO3fuVNOmTZWdna3ly5dbbR9//HFdd9116tChg6pVq6YHH3xQixcv9upv1KhRysnJ0XXXXad69erpT3/6k7788kvr8R9++EGSdP311xerpW7dujp8+LCOHj2qQ4cOKS8vz/qKMBB79uyxgl9cXJwSExOtryBzc3MD7k+S7rzzTrndbq8Lv+fMmaMGDRpYX2vt3LlTxhg9/fTTSkxM9FqKJlIcPHjwvNu66667tGzZMi1atMi6xurYsWNewWrHjh36+uuvi22nqJai7ezatUtOp1M33HDDObf59ddfq0uXLnK73XK5XEpMTLQugr/YfXa2W2+9VWXLlrVCWFEwa9mypTZs2KATJ05Yj7Vo0eKStvXr8FMUAn7++edL6rfourfy5ctLkvU/H23atCk2DkuXLrXGoChwnOtYPnTokI4dO+b3feHxeLR3715JZ95D1157bbF2vp7rz/n2UdH79JprrvFqFxERUew+doG60PFxOp1eIVWSdXyffa82IJi4xgxht2LFCh04cECzZ8/W7Nmziz0+c+ZM6zqkypUra/PmzVqyZInef/99vf/++5o2bZp69eqlN954Q9KZ21fs2rVLCxYs0NKlS/XPf/5T48eP18svv6yHH3445K+nsLBQd9xxh3766Sc9+eSTSklJUbly5bRv3z716dPnou9FFR0drc6dO+utt97S5MmTlZ2drdWrV+vFF1+02hT1/cQTT/idPfnrP3S+VKtWTe3atZMk/eY3v1GlSpXUv39/tW7dWl27drW2Va9ePf3tb3/z2Uf16tUv+LXl5OSoVatWcrlcGjVqlOrUqaOYmBht2rRJTz75ZFDu3xUZGammTZvq448/1s6dO5WVlaW0tDQlJSXp1KlTWrdunVatWqWUlBQlJiZe0rbKlCnjc70566Lxi1E0waNoDIv2y4wZM1SlSpVi7S/nbNJAhWofXe5t+ztzHoxJK7gy2fddiyvGzJkzVblyZWvG0tnefPNNvfXWW3r55Zetr7qioqLUqVMnderUSR6PR48//rimTp2qp59+2vqDVbFiRT3wwAN64IEH9Msvv6hly5YaOXKkHn74YdWoUUOStH379mLb27ZtmypVqqRy5copNjZWLpfLa7bjhfjqq6/07bff6o033lCvXr2s9b6+fg10VlaPHj30xhtvaPny5frmm29kjLG+xpRk/d99ZGSkFayCoV+/fho/fryeeuopdenSRQ6HQ3Xq1NEXX3yhtm3bnvN11KlTRx6PR1u3blWDBg18tvnoo4905MgRvfnmm173g9u9e3fQXoN05iurMWPG6IMPPlClSpWUkpIih8OhG2+8UatWrdKqVasu6Iak4ZpNN2PGDDkcDmsSS9Gkg8qVK59zvIuOi3Mdy4mJiSpbtqzf94XT6bTCdo0aNXxeKuDruRer6H26c+dO6xIHSTp9+rS+//571a9fP2jb8sfj8ei7776zzpJJsmbEFp21KzrbdvbMXum/Z/zOxixMXAi+ykRYHT9+XG+++aZ++9vfqnv37sWW/v37Kz8/37rVw5EjR7ye73Q6rQ/ools0/LpNXFycrrnmGuvxq666Sg0aNNAbb7zh9WG6ZcsWLV26VL/5zW+svjt37qyFCxdqw4YNxWr393/XRf83fvbj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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "m = model.embedding(x) + model.pos_emb\n", + "\n", + "plt.title(\"Associative Recall with Decoding Input\")\n", + "plt.tight_layout()\n", + "\n", + "plt.imshow(m.detach().numpy()[0].T)\n", + "\n", + "plt.savefig(\"fig/decode_recall_input.pdf\")" + ] + }, + { + "cell_type": "code", + "execution_count": 838, + "id": "555ea9f3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "m = m + model.layers[0].layer(m)\n", + "# print(\"After\")\n", + "plt.imshow(m.detach().numpy()[0])\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 839, + "id": "b0296fe2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "m = m + model.layers[1].layer(m)\n", + "plt.imshow(m.detach().numpy()[0])\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 840, + "id": "e919b4e6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 840, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOsAAAGgCAYAAABL4pDOAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAFXJJREFUeJzt3X9sVfX9x/FXS9tbBu0FariXhnb0i3yDExUtv66YbdHGZsEFpNk0YRlTE4beOtomczQB3Bh6hWRCYJWqMXUmY3QkX9wwGaQp2oTYApaxSNRqnBl19d7OZO1ldb30257vH9vOl8uPwm1vvffd+3wkN7n3nM+5/fSEZ849t/ceshzHcQQg7WWnegIAbgyxAkYQK2AEsQJGECtgBLECRhArYASxAkYQK2AEsQJGTFisDQ0NmjdvnvLz87V8+XKdOnVqon4UkBGyJuKzwc3Nzfr+97+vxsZGLV++XHv27NGhQ4fU1dWl2bNnj7rtyMiIenp6VFBQoKysrGRPDUg7juPowoULKi4uVnb2KMdPZwIsW7bMCQaD7uPh4WGnuLjYCYVC1922u7vbkcSNW8bduru7R20jR0l28eJFdXZ2qr6+3l2WnZ2tiooKtbe3XzE+FospFou5j51/H+jn/nSLsvPzkz09GPVfm08nNP7wh++69x/879tueOwd//NoYhNLgpHBQX360x0qKCgYdVzSY/388881PDwsn88Xt9zn8+mDDz64YnwoFNLPfvazK5Zn5+cTK1w5WbkJjS8s+P+Xk9fb9tKxqfw3d73TvqTHmqj6+nrV1dW5j6PRqEpKSlI4I0wGlcWLUz2FpEt6rDfddJOmTJmiSCQStzwSicjv918x3uPxyOPxJHsawKST9D/d5OXlqby8XK2tre6ykZERtba2KhAIJPvHARljQl4G19XVaf369VqyZImWLVumPXv2aGBgQI888shE/DhAx3rOxj0e7WXwqGN3J21KSTchsT700EP629/+pm3btikcDmvx4sU6evToFW86AbhxE/YGU3V1taqrqyfq6YGMw2eDASOIFTCCWAEjiBUwglgBI4gVMIJYASOIFTAi5d+6AZIhkW/ZWP1GDkdWwAhiBYwgVsAIYgWMIFbACGIFjCBWwAj+zopJIZHLuoy27fzmFcmZ0ATgyAoYQayAEcQKGEGsgBHEChhBrIARxAoYQayAEcQKGEGsgBF83BAZx+r/IseRFTCCWAEjiBUwgnNWTAqXfyXu0vNSq5cevRxHVsAIYgWM4GUw0tbHDzW69ytrFye07WgvfUd7ycyVIgCMG7ECRhArYASxAkYQK2AEsQJGECtgBLECRhArYASxAkYQK2AEsQJGECtgBLECRhArYASxAkYQK2AEsQJGcFkXpK35zRvd+zerY8J+DlfkB5BUxAoYQayAEcQKGEGsgBHEChhBrIARxAoYQayAEQnFGgqFtHTpUhUUFGj27Nlas2aNurq64sYMDg4qGAyqqKhI06dPV1VVlSKRSFInDWSihGJta2tTMBhUR0eHWlpaNDQ0pPvvv18DAwPumNraWh05ckSHDh1SW1ubenp6tHbt2qRPHMg0CX02+OjRo3GPX331Vc2ePVudnZ36+te/rv7+fr3yyis6cOCA7r33XklSU1OTbrnlFnV0dGjFiiv/O71YLKZYLOY+jkajY/k9gElvXOes/f39kqRZs2ZJkjo7OzU0NKSKigp3zMKFC1VaWqr29varPkcoFJLX63VvJSUl45kSMGmNOdaRkRHV1NRo5cqVWrRokSQpHA4rLy9PM2bMiBvr8/kUDoev+jz19fXq7+93b93d3WOdEjCpjfkrcsFgUOfOndOJEyfGNQGPxyOPxzOu5wAywZiOrNXV1XrjjTf05ptvau7cue5yv9+vixcvqq+vL258JBKR3+8f10SBTJdQrI7jqLq6WocPH9bx48dVVlYWt768vFy5ublqbW11l3V1den8+fMKBALJmTGQoRJ6GRwMBnXgwAH97ne/U0FBgXse6vV6NXXqVHm9Xj322GOqq6vTrFmzVFhYqCeffFKBQOCq7wQDuHEJxbp//35J0je/+c245U1NTfrBD34gSdq9e7eys7NVVVWlWCymyspKvfDCC0mZLJDJEorVcZzrjsnPz1dDQ4MaGhrGPCkAV+KzwYARXN0Qk8KxnrNxjy+9YuFo6y5fP785fd9b4cgKGEGsgBHEChjBOSvS1scPNbr3K2sXjzr28vPQG11nCUdWwAhiBYwgVsAIYgWMIFbACGIFjCBWwAhiBYwgVsAIYgWMIFbACGIFjCBWwAhiBYzgK3JIW/ObN7r3b1bHqGMTuazL5eK+Qrf7BieXAhxZASOIFTCCWAEjiBUwglgBI4gVMII/3WBS4OqGANIGsQJGECtgBOesmBSu95HC0Vg5p+XIChhBrIARxAoYQayAEcQKGEGsgBHEChhBrIARxAoYQayAEcQKGEGsgBHEChhBrIARxAoYQayAEcQKGEGsgBHEChhBrIARxAoYQayAEcQKGEGsgBHEChhBrIARxAoYQayAEcQKGEGsgBHEChgxrlife+45ZWVlqaamxl02ODioYDCooqIiTZ8+XVVVVYpEIuOdJ5Dxxhzr6dOn9eKLL+r222+PW15bW6sjR47o0KFDamtrU09Pj9auXTvuiQKZbkyx/uMf/9C6dev08ssva+bMme7y/v5+vfLKK3r++ed17733qry8XE1NTXr77bfV0dFx1eeKxWKKRqNxNwBXGlOswWBQq1atUkVFRdzyzs5ODQ0NxS1fuHChSktL1d7eftXnCoVC8nq97q2kpGQsUwImvYRjPXjwoM6cOaNQKHTFunA4rLy8PM2YMSNuuc/nUzgcvurz1dfXq7+/3711d3cnOiUgI+QkMri7u1ubNm1SS0uL8vPzkzIBj8cjj8eTlOcCxuJYz1n3/vzmFambyHUkdGTt7OxUb2+v7rrrLuXk5CgnJ0dtbW3au3evcnJy5PP5dPHiRfX19cVtF4lE5Pf7kzlvIOMkdGS977779O6778Yte+SRR7Rw4UL95Cc/UUlJiXJzc9Xa2qqqqipJUldXl86fP69AIJC8WQMZKKFYCwoKtGjRorhl06ZNU1FRkbv8scceU11dnWbNmqXCwkI9+eSTCgQCWrEifV9eABYkFOuN2L17t7Kzs1VVVaVYLKbKykq98MILyf4xQMYZd6xvvfVW3OP8/Hw1NDSooaFhvE8N4BJ8NhgwglgBI4gVMIJYASOIFTCCWAEjiBUwglgBI5L+CSYg3VUWL772yt1f2jQSxpEVMIJYASOIFTCCWAEjiBUwglgBI4gVMIJYASOIFTCCWAEjiBUwgs8GY1K4/PO+l15l/3KXrxv1s8JphCMrYASxAkYQK2AEsQJGECtgBLECRhArYASxAkYQK2AEsQJGECtgBLECRhArYATfusGkMNq3bBLZdn7zivFPZoJwZAWMIFbACGIFjOCcFWnr44ca3fuVtYtHHTueqz2M53z3y8SRFTCCWAEjiBUwglgBI4gVMIJYASOIFTCCWAEjiBUwglgBI4gVMIJYASOIFTCCWAEj+Ioc0tb85o3u/ZvVkdC2l37t7Xpfn4tbvzuhH/Ol4sgKGEGsgBHEChjBOSsmhcsvzXLpeeho6y5fz6VIAYwbsQJGECtgBLECRhArYETCsf71r3/V9773PRUVFWnq1Km67bbb9M4777jrHcfRtm3bNGfOHE2dOlUVFRX66KOPkjppIBMlFOvf//53rVy5Urm5ufrDH/6g9957T7/4xS80c+ZMd8yuXbu0d+9eNTY26uTJk5o2bZoqKys1ODiY9MkDmSShv7Pu3LlTJSUlampqcpeVlZW59x3H0Z49e7RlyxatXr1akvTaa6/J5/Pp9ddf18MPP3zFc8ZiMcViMfdxNBpN+JcAMkFCR9bf//73WrJkib7zne9o9uzZuvPOO/Xyyy+76z/55BOFw2FVVFS4y7xer5YvX6729varPmcoFJLX63VvJSUlY/xVgMktoVj//Oc/a//+/VqwYIGOHTumxx9/XD/60Y/0q1/9SpIUDoclST6fL247n8/nrrtcfX29+vv73Vt3d/dYfg9g0kvoZfDIyIiWLFmiZ599VpJ055136ty5c2psbNT69evHNAGPxyOPxzOmbYFMktCRdc6cOfra174Wt+yWW27R+fPnJUl+v1+SFIlE4sZEIhF3HYCxSSjWlStXqqurK27Zhx9+qK9+9auS/vVmk9/vV2trq7s+Go3q5MmTCgQCSZgukLkSehlcW1uru+++W88++6y++93v6tSpU3rppZf00ksvSZKysrJUU1OjHTt2aMGCBSorK9PWrVtVXFysNWvWTMT8gYyRUKxLly7V4cOHVV9fr+3bt6usrEx79uzRunXr3DFPPfWUBgYGtGHDBvX19emee+7R0aNHlZ+fn/TJA5kk4e+zPvDAA3rggQeuuT4rK0vbt2/X9u3bxzUxAPH4bDBgBLECRhArYASxAkYQK2AEsQJGECtgBLECRhArYASxAkYQK2AEsQJG8B9TYdLjP1MG8KUiVsAIYgWMIFbACGIFjCBWwAhiBYwgVsAIYgWMIFbACGIFjCBWwAhiBYwgVsAIYgWMIFbACGIFjCBWwAhiBYwgVsAIYgWMIFbACGIFjCBWwAhiBYwgVsAIYgWMIFbACGIFjCBWwAhiBYwgVsAIYgWMIFbACGIFjCBWwIicVE8AmGjHes7GPa4sXpySeYwXR1bACGIFjCBWwAhiBYwgVsAIYgWMIFbACGIFjCBWwAhiBYwgVsAIYgWMIFbAiIRiHR4e1tatW1VWVqapU6dq/vz5+vnPfy7HcdwxjuNo27ZtmjNnjqZOnaqKigp99NFHSZ84kGkSinXnzp3av3+/fvnLX+r999/Xzp07tWvXLu3bt88ds2vXLu3du1eNjY06efKkpk2bpsrKSg0ODiZ98kAmSej7rG+//bZWr16tVatWSZLmzZun3/zmNzp16pSkfx1V9+zZoy1btmj16tWSpNdee00+n0+vv/66Hn744SueMxaLKRaLuY+j0eiYfxlgMkvoyHr33XertbVVH374oSTpT3/6k06cOKFvfetbkqRPPvlE4XBYFRUV7jZer1fLly9Xe3v7VZ8zFArJ6/W6t5KSkrH+LsCkltCRdfPmzYpGo1q4cKGmTJmi4eFhPfPMM1q3bp0kKRwOS5J8Pl/cdj6fz113ufr6etXV1bmPo9EowQJXkVCsv/3tb/XrX/9aBw4c0K233qqzZ8+qpqZGxcXFWr9+/Zgm4PF45PF4xrQt8B+JXKrl8su8XGp+84rxT2aCJBTrj3/8Y23evNk997ztttv0l7/8RaFQSOvXr5ff75ckRSIRzZkzx90uEolo8eLFyZs1kIESOmf94osvlJ0dv8mUKVM0MjIiSSorK5Pf71dra6u7PhqN6uTJkwoEAkmYLpC5Ejqyfvvb39Yzzzyj0tJS3XrrrfrjH/+o559/Xo8++qgkKSsrSzU1NdqxY4cWLFigsrIybd26VcXFxVqzZs1EzB/IGAnFum/fPm3dulVPPPGEent7VVxcrB/+8Ifatm2bO+app57SwMCANmzYoL6+Pt1zzz06evSo8vPzkz55IJNkOZd+/CgNRKNReb1elT63Q9kEjn+7ubZjzNuO9obS5eY3bxzzzxmrkcFBnd+8Rf39/SosLLzmOD4bDBhBrIARxAoYQayAEcQKGEGsgBHEChhBrIARxAoYQayAEcQKGEGsgBHEChhBrIARxAoYQayAEQldKQL4Mn38UKN7v7J28Zif53pXPkzky+mpxJEVMIJYASOIFTCCWAEjiBUwglgBI4gVMIJYASOIFTCCWAEjiBUwglgBI4gVMIJYASOIFTCCWAEjiBUwglgBI4gVMIJYASOIFTCCWAEjiBUwglgBI4gVMIJYASOIFTCCWAEjiBUwglgBI4gVMIJYASOIFTCCWAEjiBUwglgBI4gVMIJYASOIFTCCWAEjiBUwglgBI4gVMCIn1RMArmV+80b3/s3qGHXssZ6z11xXWbw4STNKLY6sgBHEChiRdi+DHceRJI0MDqZ4Jkgn/+sMjbo+emEkKdum4t/df37mf/7tX0uWc70RX7JPP/1UJSUlqZ4G8KXr7u7W3Llzr7k+7WIdGRlRT0+PHMdRaWmpuru7VVhYmOpppa1oNKqSkhL203Wk835yHEcXLlxQcXGxsrOvfWaadi+Ds7OzNXfuXEWjUUlSYWFh2u3cdMR+ujHpup+8Xu91x/AGE2AEsQJGpG2sHo9HTz/9tDweT6qnktbYTzdmMuyntHuDCcDVpe2RFUA8YgWMIFbACGIFjCBWwIi0jbWhoUHz5s1Tfn6+li9frlOnTqV6SikTCoW0dOlSFRQUaPbs2VqzZo26urrixgwODioYDKqoqEjTp09XVVWVIpFIimacHp577jllZWWppqbGXWZ5P6VlrM3Nzaqrq9PTTz+tM2fO6I477lBlZaV6e3tTPbWUaGtrUzAYVEdHh1paWjQ0NKT7779fAwMD7pja2lodOXJEhw4dUltbm3p6erR27doUzjq1Tp8+rRdffFG333573HLT+8lJQ8uWLXOCwaD7eHh42CkuLnZCoVAKZ5U+ent7HUlOW1ub4ziO09fX5+Tm5jqHDh1yx7z//vuOJKe9vT1V00yZCxcuOAsWLHBaWlqcb3zjG86mTZscx7G/n9LuyHrx4kV1dnaqoqLCXZadna2Kigq1t7encGbpo7+/X5I0a9YsSVJnZ6eGhobi9tnChQtVWlqakfssGAxq1apVcftDsr+f0u5bN59//rmGh4fl8/nilvt8Pn3wwQcpmlX6GBkZUU1NjVauXKlFixZJksLhsPLy8jRjxoy4sT6fT+FwOAWzTJ2DBw/qzJkzOn369BXrrO+ntIsVowsGgzp37pxOnDiR6qmkne7ubm3atEktLS3Kz89P9XSSLu1eBt90002aMmXKFe/QRSIR+f3+FM0qPVRXV+uNN97Qm2++GXdFAb/fr4sXL6qvry9ufKbts87OTvX29uquu+5STk6OcnJy1NbWpr179yonJ0c+n8/0fkq7WPPy8lReXq7W1lZ32cjIiFpbWxUIBFI4s9RxHEfV1dU6fPiwjh8/rrKysrj15eXlys3NjdtnXV1dOn/+fEbts/vuu0/vvvuuzp49696WLFmidevWufdN76dUv8N1NQcPHnQ8Ho/z6quvOu+9956zYcMGZ8aMGU44HE711FLi8ccfd7xer/PWW285n332mXv74osv3DEbN250SktLnePHjzvvvPOOEwgEnEAgkMJZp4dL3w12HNv7KS1jdRzH2bdvn1NaWurk5eU5y5Ytczo6OlI9pZSRdNVbU1OTO+af//yn88QTTzgzZ850vvKVrzgPPvig89lnn6Vu0mni8lgt7ye+zwoYkXbnrACujlgBI4gVMIJYASOIFTCCWAEjiBUwglgBI4gVMIJYASOIFTDi/wB3jBZw6Pfr0gAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "out, scores = model.layers[2].layer(m)\n", + "# plt.imshow((m+out).detach().numpy()[0])\n", + "plt.imshow((out).detach().numpy()[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 841, + "id": "233a68cf", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmYAAAFjCAYAAACXCcekAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAPNBJREFUeJzt3Xl0FFX6//FPN1kh6Q5LCCIEAcWgoGhYjOybkWEYWVR0GAHFDYMijIPycwFXQL4zKA6L4zCgiAPCqOi4AIKgIiCLuLOKgkKCqFlkCSG5vz846aFNN6ST7vRN8n6dU+eQ6tu3nrq3qvuh+t4qhzHGCAAAAGHnDHcAAAAAOInEDAAAwBIkZgAAAJYgMQMAALAEiRkAAIAlSMwAAAAsQWIGAABgCRIzAAAAS5CYAQAAWILEDCiF1atXy+FwaPXq1UGt1+FwaOLEiUGtsyoYPny4zjnnHK91oWyriRMnyuFwBFT20KFDIYnFdvPmzZPD4dC3337rWdetWzd169YtbDEBVQmJGSrczJkz5XA41KFDh3CHUiHeeust65Ivh8PhtbhcLnXt2lVvvvlmuEOzxhNPPKHXXnst6PUOHz7cq+3j4uLUrFkzXX311frPf/6joqKioG+zqisoKND06dPVrl07xcfHKy4uTu3atdP06dNVUFBQ5no/+ugjTZw4UdnZ2cEL9jRCdcyhciExQ4VbsGCBzjnnHH388cfatWtXuMMplS5duujo0aPq0qVLwO9966239PDDD/t87ejRo3rggQfKG16Z9O7dW/Pnz9cLL7ygcePGadeuXerXr5+WLVsWlnjC6YEHHtDRo0e91oXySzI6Olrz58/X/PnzNW3aNP3xj3/Uzp07dfXVV6tnz57Kzc0NyXZDZfny5Vq+fHlYtn348GH17t1bo0ePVoMGDTR58mRNnTpVDRs21OjRo9W7d28dPny4THV/9NFHevjhh0nMUKEiwh0Aqpc9e/boo48+0iuvvKLbbrtNCxYs0IQJE8Id1hk5nU7FxMQEvd5Q1FlaLVq00J/+9CfP34MGDdIFF1ygp59+Wunp6WGLKxwiIiIUEVFxH4cRERFebS9Jjz32mCZPnqzx48frlltu0aJFiyosnvKKiooK27bHjh2rNWvW6JlnntGoUaM860eOHKkZM2Zo1KhRuueeezRr1qywxQgEgitmqFALFixQ7dq11bdvX1199dVasGCBz3ILFy5Uamqq4uPj5XK51Lp1az399NOe1wsKCvTwww/rvPPOU0xMjOrWratOnTppxYoVXvWsWrVKnTt3Vq1atZSQkKCrrrpKX3/9dYnt/fDDDxoxYoQaNmyo6OhoNW3aVCNHjtTx48cl+R5j9sEHH+iaa65RcnKyoqOj1bhxY40ZM8brysvw4cM1Y8YMSd4/HxY7ddzUkiVL5HA4tGbNmhLxPfvss3I4HPriiy8867Zt26arr75aderUUUxMjNq2bavXX3/dX9OfUcuWLVWvXj3t3r3ba31+fr4mTJigc88917Of48aNU35+fok6XnzxRbVv3141a9ZU7dq11aVLF68rKUuXLlXfvn097dy8eXM9+uijKiwsLHPcxYwxqlevnsaOHetZV1RUpISEBNWoUcPrqseUKVMUERGhX3/9VVLJMWYOh0OHDx/W888/7+mz4cOHe20vOztbw4cPV0JCgtxut2688UYdOXKkXPtw33336YorrtDixYu1Y8cOr9fefvttz7EcHx+vvn376ssvvyxRx7Zt23TttdcqMTFRsbGxOv/883X//fd7lfnkk0/Up08fuVwuxcXFqWfPnlq/fn2Jur788kv16NFDsbGxatSokR577DGfP7X+doxZ8fny8ssv6/HHH1ejRo0UExOjnj17+rxKPmPGDDVr1kyxsbFq3769Pvjgg1KNW/v+++81Z84c9ejRwyspK5aRkaHu3bvrn//8p77//ntJ0rfffiuHw6F58+aVKH/q+Thx4kT95S9/kSQ1bdrUcxwUj61zOBwaNWqUFixYoPPPP18xMTFKTU3V+++/71Wnr/GSxfUHesyheuCKGSrUggULNHDgQEVFRen666/XrFmztHHjRrVr185TZsWKFbr++uvVs2dPTZkyRZL09ddfa+3atRo9erSkkx9qkyZN0s0336z27dsrNzdXmzZt0pYtW9S7d29J0rvvvqs+ffqoWbNmmjhxoo4ePapnnnlGHTt21JYtWzwflvv371f79u2VnZ2tW2+9VSkpKfrhhx+0ZMkSHTlyxO/VgMWLF+vIkSMaOXKk6tatq48//ljPPPOMvv/+ey1evFiSdNttt2n//v1asWKF5s+ff9q26du3r+Li4vTyyy+ra9euXq8tWrRIF154oVq1aiXp5Bdmx44ddfbZZ+u+++5TrVq19PLLL6t///76z3/+owEDBgTYM1JOTo5++eUXNW/e3LOuqKhIf/jDH/Thhx/q1ltvVcuWLfX5559r2rRp2rFjh9fPLg8//LAmTpyoyy+/XI888oiioqK0YcMGrVq1SldccYWkkwPH4+LiNHbsWMXFxWnVqlV66KGHlJubq6lTpwYc86kcDoc6duzo9cX42WefKScnR06nU2vXrlXfvn0lnUyqL7nkEsXFxfmsa/78+Z5j69Zbb5Ukr3aRpGuvvVZNmzbVpEmTtGXLFv3zn/9U/fr1PcdsWd1www1avny5VqxYoRYtWnjiGTZsmNLT0zVlyhQdOXJEs2bNUqdOnfTJJ594juXPPvtMnTt3VmRkpG699Vadc8452r17t9544w09/vjjkk4eO507d5bL5dK4ceMUGRmpZ599Vt26ddOaNWs8Yz8zMzPVvXt3nThxwnOM/eMf/1BsbGyp92Xy5MlyOp265557lJOToyeffFJDhgzRhg0bPGVmzZqlUaNGqXPnzhozZoy+/fZb9e/fX7Vr11ajRo1OW//bb7+twsJCDR061G+ZoUOH6r333tM777yjm2++udSxDxw4UDt27NC///1vTZs2TfXq1ZMkJSYmesqsWbNGixYt0l133aXo6GjNnDlTV155pT7++GPPuVpapTnmUE0YoIJs2rTJSDIrVqwwxhhTVFRkGjVqZEaPHu1VbvTo0cblcpkTJ074reviiy82ffv2Pe322rRpY+rXr29++uknz7pPP/3UOJ1OM3ToUM+6oUOHGqfTaTZu3FiijqKiImOMMe+9956RZN577z3Pa0eOHClRftKkScbhcJjvvvvOsy4jI8P4O9UkmQkTJnj+vv766039+vW99v3AgQPG6XSaRx55xLOuZ8+epnXr1ubYsWNesV5++eXmvPPO87mt3253xIgR5scffzQHDx40mzZtMldeeaWRZKZOneopN3/+fON0Os0HH3zg9f7Zs2cbSWbt2rXGGGN27txpnE6nGTBggCksLPQqW9yGxvhus9tuu83UrFnTa1+GDRtmmjRpUiLmU9vKl6lTp5oaNWqY3NxcY4wx06dPN02aNDHt27c39957rzHGmMLCQpOQkGDGjBnjed+ECRNK9FGtWrXMsGHDSmyjuOxNN93ktX7AgAGmbt26p42veN9q1arl9/VPPvnESPLEl5eXZxISEswtt9ziVS4z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KR4AXr9+/dP2d/FxcbpjOTExUTVr1vR7XjidTk+y3aRJE59DBXy9t6yKz9Ndu3Z5hjhI0okTJ/Ttt9/qoosuOu37+/Tpoxo1amj+/Pl+JwC88MILioiI0JVXXinpf1ftfntvsuKrd6c60zHgq3127NihmjVrehL/2rVr+7wPWlm2h+qBnzIRckePHtUrr7yi3//+97r66qtLLKNGjVJeXp7nVg8//fST1/udTqfnA7r4Fg2/LRMXF6dzzz3X8/pZZ52lNm3a6Pnnn/f6UPziiy+0fPly/e53v/PU3b9/f73xxhvatGlTidj9/c+++ErAqa8bY7xu6VGsVq1akkp+EfjTq1cv1alTR4sWLdKiRYvUvn17NW3a1PN6/fr11a1bNz377LM6cOBAifeX9SeUiIgI/fnPf9bXX3+tpUuXSjo58/CHH37Qc889V6L80aNHPTfu7N+/v5xOpx555JESV76K28hXmx0/flwzZ84sU7z+dO7cWfn5+XrqqafUqVMnz5dd586dNX/+fO3fv79U48tq1apVYTcWLTZ58mQtX75cgwcP9vxMlp6eLpfLpSeeeMLnXeyL+zsxMVFdunTRv/71L+3du9erzKl9cMUVV2jp0qVej1TKysrSSy+9pE6dOsnlckk6eRV1/fr1+vjjj7225e8WN2XRtm1b1a1bV88995xOnDjhWb9gwYJS/STcuHFj3XjjjXr33Xd93qds9uzZWrVqlUaMGOGZ4elyuVSvXr0St7XwdRye6dxdt26dtmzZ4vl73759Wrp0qa644grP8d68eXPl5OR4DbU4cOCAXn31VZ/bq+hjDvbhihlC7vXXX1deXp7+8Ic/+Hz9sssuU2JiohYsWKDBgwfr5ptv1s8//6wePXqoUaNG+u677/TMM8+oTZs2np8uLrjgAnXr1k2pqamqU6eONm3apCVLlnjdy2jq1Knq06eP0tLSNGLECM/tMtxut9cjkp544gktX75cXbt29dwS4sCBA1q8eLE+/PBDJSQklIg5JSVFzZs31z333KMffvhBLpdL//nPf3x+mRQPDr7rrruUnp6uGjVq6LrrrvPbXpGRkRo4cKAWLlyow4cP6//+7/9KlJkxY4Y6deqk1q1b65ZbblGzZs2UlZWldevW6fvvv9enn37qt/7TGT58uB566CFNmTJF/fv31w033KCXX35Zt99+u9577z117NhRhYWF2rZtm15++WUtW7ZMbdu21bnnnqv7779fjz76qDp37qyBAwcqOjpaGzduVMOGDTVp0iRdfvnlql27toYNG6a77rpLDodD8+fPD9rPWsXS0tIUERGh7du3e247IJ38+bv4y7s0iVlqaqreffdd/e1vf1PDhg3VtGnToD1G7MSJE3rxxRclSceOHdN3332n119/XZ999pm6d++uf/zjH56yLpdLs2bN0g033KBLL71U1113nRITE7V37169+eab6tixo/7+979LkqZPn65OnTrp0ksv1a233qqmTZvq22+/1ZtvvqmtW7dKOnkj2xUrVqhTp0664447FBERoWeffVb5+fl68sknPdsdN26c5s+fryuvvFKjR4/23C6jSZMmXklGeURFRWnixIm688471aNHD1177bX69ttvNW/ePDVv3rxUV5CmTZumbdu26Y477tA777zjuTK2bNkyLV26VF27dtVf//pXr/fcfPPNmjx5sm6++Wa1bdtW77//fon7xkn/O3fvv/9+XXfddYqMjFS/fv08CVurVq2Unp7udbsMSV5P+rjuuut07733asCAAbrrrrs8tzpp0aKFV1JXvL1QHXOoRMIzGRTVSb9+/UxMTIw5fPiw3zLDhw83kZGR5tChQ2bJkiXmiiuuMPXr1zdRUVEmOTnZ3HbbbebAgQOe8o899php3769SUhIMLGxsSYlJcU8/vjj5vjx4171vvvuu6Zjx44mNjbWuFwu069fP/PVV1+V2P53331nhg4dahITE010dLRp1qyZycjI8Ez193W7jK+++sr06tXLxMXFmXr16plbbrnFfPrppyWm4p84ccLceeedJjEx0TgcDq8p8vJzC4gVK1YYScbhcJh9+/b5bLPdu3eboUOHmgYNGpjIyEhz9tlnm9///vdmyZIlftv51O1mZGT4fG3ixIle+3r8+HEzZcoUc+GFF5ro6GhTu3Ztk5qaah5++GGTk5Pj9d5//etf5pJLLvGU69q1q+f2KMYYs3btWnPZZZeZ2NhY07BhQzNu3DizbNmyEm1b1ttlFGvXrl2JWz18//33RpJp3LhxifK+bl2wbds206VLFxMbG2skeW5jUFz2xx9/9Co/d+5cv7dWONWwYcM8t1qQZGrWrGnOOeccM2jQILNkyZIStxsp9t5775n09HTjdrtNTEyMad68uRk+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044AAABUdgH9lNmnTx/Pvy+66CJ16NBBTZo00csvv6zY2NgyBTB+/HiNHTvW83dubi7JGQAAqJbKdef/hIQEtWjRQrt27VLv3r11/PhxZWdne101y8rK8jkmrVh0dLSio6M9fxtjJEm5vxaVKHvyrrnecvNKlvNX1l/5QMraHkco6yaOqhtHKOsmjqobRyjrJo6qG0co67Y5jhM6ua44z/HLlENeXp6pXbu2efrpp012draJjIw0S5Ys8by+bds2I8msW7eu1HXu27fPSGJhYWFhYWFhqXLLvn37TpsHOYw5U+r2P/fcc4/69eunJk2aaP/+/ZowYYK2bt2qr776SomJiRo5cqTeeustzZs3Ty6XS3feeack6aOPPirtJlRUVKT9+/crPj5eeXl5aty4sfbt2yeXy1XqOmCX4p+n6cfKiz6sGujHyo8+rLyMMcrLy1PDhg3ldPof4h/QT5nff/+9rr/+ev30009KTExUp06dtH79eiUmJkqSpk2bJqfTqUGDBik/P1/p6emaOXNmQIE7nU41atRIkuRwOCRJLpeLA7AKoB8rP/qwaqAfKz/6sHJyu91nLBPQFbOKlpubK7fbrZycHA7ASox+rPzow6qBfqz86MOqj2dlAgAAWMLqxCw6OloTJkzwmrWJyod+rPzow6qBfqz86MOqz+qfMgEAAKoTq6+YAQAAVCckZgAAAJYgMQMAALAEiRkAAIAlrE7MZsyYoXPOOUcxMTHq0KGDPv7443CHBD8mTZqkdu3aKT4+XvXr11f//v21fft2rzLHjh1TRkaG6tatq7i4OA0aNEhZWVlhihhnMnnyZDkcDt19992edfRh5fDDDz/oT3/6k+rWravY2Fi1bt1amzZt8rxujNFDDz2ks846S7GxserVq5d27twZxohxqsLCQj344INq2rSpYmNj1bx5cz366KNez1ikD6suaxOzRYsWaezYsZowYYK2bNmiiy++WOnp6Tp48GC4Q4MPa9asUUZGhtavX68VK1aooKBAV1xxhQ4fPuwpM2bMGL3xxhtavHix1qxZo/3792vgwIFhjBr+bNy4Uc8++6wuuugir/X0of1++eUXdezYUZGRkXr77bf11Vdf6a9//atq167tKfPkk09q+vTpmj17tjZs2KBatWopPT1dx44dC2PkKDZlyhTNmjVLf//73/X1119rypQpevLJJ/XMM894ytCHVViAzy2vMO3btzcZGRmevwsLC03Dhg3NpEmTwhgVSuvgwYNGklmzZo0xxngecr948WJPma+//tpIgT3kHqGXl5dnzjvvPLNixQrTtWtXM3r0aGMMfVhZ3HvvvaZTp05+Xy8qKjINGjQwU6dO9azLzs420dHR5t///ndFhIgz6Nu3r7npppu81g0cONAMGTLEGEMfVnVWXjE7fvy4Nm/erF69ennWOZ1O9erVS+vWrQtjZCitnJwcSVKdOnUkSZs3b1ZBQYFXn6akpCg5OZk+tUxGRob69u3r1VcSfVhZvP7662rbtq2uueYa1a9fX5dccomee+45z+t79uxRZmamVz+63W516NCBfrTE5ZdfrpUrV2rHjh2SpE8//VQffvih+vTpI4k+rOoCeoh5RTl06JAKCwuVlJTktT4pKUnbtm0LU1QoraKiIt19993q2LGjWrVqJUnKzMxUVFSUEhISvMomJSUpMzMzDFHCl4ULF2rLli3auHFjidfow8rhm2++0axZszR27Fj9v//3/7Rx40bdddddioqK0rBhwzx95evzlX60w3333afc3FylpKSoRo0aKiws1OOPP64hQ4ZIEn1YxVmZmKFyy8jI0BdffKEPP/ww3KEgAPv27dPo0aO1YsUKxcTEhDsclFFRUZHatm2rJ554QpJ0ySWX6IsvvtDs2bM1bNiwMEeH0nj55Ze1YMECvfTSS7rwwgu1detW3X333WrYsCF9WA1Y+VNmvXr1VKNGjRKzvbKystSgQYMwRYXSGDVqlP773//qvffeU6NGjTzrGzRooOPHjys7O9urPH1qj82bN+vgwYO69NJLFRERoYiICK1Zs0bTp09XRESEkpKS6MNK4KyzztIFF1zgta5ly5bau3evJHn6is9Xe/3lL3/Rfffdp+uuu06tW7fWDTfcoDFjxmjSpEmS6MOqzsrELCoqSqmpqVq5cqVnXVFRkVauXKm0tLQwRgZ/jDEaNWqUXn31Va1atUpNmzb1ej01NVWRkZFefbp9+3bt3buXPrVEz5499fnnn2vr1q2epW3bthoyZIjn3/Sh/Tp27FjiVjU7duxQkyZNJElNmzZVgwYNvPoxNzdXGzZsoB8tceTIETmd3l/PNWrUUFFRkST6sMoL9+wDfxYuXGiio6PNvHnzzFdffWVuvfVWk5CQYDIzM8MdGnwYOXKkcbvdZvXq1ebAgQOe5ciRI54yt99+u0lOTjarVq0ymzZtMmlpaSYtLS2MUeNMTp2VaQx9WBl8/PHHJiIiwjz++ONm586dZsGCBaZmzZrmxRdf9JSZPHmySUhIMEuXLjWfffaZueqqq0zTpk3N0aNHwxg5ig0bNsycffbZ5r///a/Zs2ePeeWVV0y9evXMuHHjPGXow6rL2sTMGGOeeeYZk5ycbKKiokz79u3N+vXrwx0S/JDkc5k7d66nzNGjR80dd9xhateubWrWrGkGDBhgDhw4EL6gcUa/Tczow8rhjTfeMK1atTLR0dEmJSXF/OMf//B6vaioyDz44IMmKSnJREdHm549e5rt27eHKVr8Vm5urhk9erRJTk42MTExplmzZub+++83+fn5njL0YdXlMOaUWwkDAAAgbKwcYwYAAFAdkZgBAABYgsQMAADAEiRmAAAAliAxAwAAsASJGQAAgCVIzAAAACxBYgYAAGAJEjMAAABLkJgBAABYgsQMAADAEiRmAAAAlvj/PZdG7+2tomgAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.title(\"Associative Recall with Decoding Output\")\n", + "plt.tight_layout()\n", + "\n", + "plt.imshow((m+out).detach().numpy()[0].T)\n", + "\n", + "plt.savefig(\"fig/decode_recall_output.pdf\")" + ] + }, + { + "cell_type": "code", + "execution_count": 842, + "id": "9125a8cd", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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s2TJEt16663q0qWLJk2aJEnaunWrVq1apaFDh0o6cyA8KSlJd911l1q2bKnMzEytX79eGzdu1JVXXilJ+vTTT3XNNdeoTp06Gjt2rI4fP66XX35Z8fHx2rhxo3MCyb59+9SyZUulp6dr4MCBio2N1d69ezV//nwdO3Ys32/N8+bN07FjxzRo0CBVqVJFa9eu1csvv6xffvlF8+bNkyTdfffd2rdvn5YsWaJZs2adt2+6deum4OBgzZ07Vx06dPCYNmfOHDVs2FCNGjWSJH377beKj4/XJZdcokceeUQVKlTQ3Llz1aNHD/3nP/9Rz549C/nOSBkZGfrtt99Ut25dp8ztduuGG27Q559/roEDB6p+/fr65ptv9OKLL+qHH37wOKb35JNPauzYsWrTpo3GjRsnf39/rVmzRkuXLtVVV10l6czJIcHBwRoxYoSCg4O1dOlSjRkzRpmZmXr22WcL3eazuVwuxcfHa8WKFU7Z119/rYyMDPn4+GjVqlXq1q2bJGnlypVq2rSpgoOD85zXrFmznHVr4MCBkuTRL5J08803KyYmRklJSdq4caP++c9/KiIiwllni+q2227T4sWLtWTJEtWrV89pT2JiohISEjRp0iQdO3ZMU6dOVdu2bfXVV1856/LXX3+tdu3ayc/PTwMHDlTt2rX1448/6oMPPtD48eMlnVl32rVrp5CQEI0cOVJ+fn567bXX1LFjRy1fvtw5lyA1NVWdOnXS6dOnnXVs+vTpCgoKKvBrmThxonx8fPTggw8qIyNDzzzzjPr27as1a9Y4daZOnaohQ4aoXbt2Gj58uH7++Wf16NFDlSpVUvXq1Qu0nPfff1+///67brnlFkVFRaljx45KTk7W3/72N6fO5MmTdd999yk4OFiPPfaYJCkyMlJ169bV/fffrylTpujRRx9V/fr1Jcn5t6B9L505bpqQkKBWrVrpueee06effqrnn39edevW1aBBgxQeHq6pU6dq0KBB6tmzp3r16iVJuvzyy/N9bXfddZdmzpypG2+8UQ888IDWrFmjpKQkbd26Ve+9955H3R07dujGG2/UnXfeqcTERL355pvq37+/4uLi1LBhwwL15dl+++03/fbbb7r00kslFW+bZ3vthd2m3XvvvQoPD9eYMWN09OhRjzZfffXV6tWrl26++WbNnz9fDz/8sBo3bly40XGh47UErV+/3kgyS5YsMcacGQlUr17dDB061KPe0KFDTUhISK7Rxtn++te/mm7dup13eU2aNDERERHm119/dco2b95sfHx8TL9+/Zyyfv36GR8fH7Nu3bpc83C73caYvEeWZ3+bypGUlGRcLpfZtWuXU3a+Y5Y655vVrbfeaiIiIjxee8435XHjxjllXbp0MY0bN/b4dul2u02bNm3yHa2fu9w777zTHDx40Bw4cMCsX7/eXH311UaSefbZZ516s2bNMj4+PmblypUez88Z6a5atcoYY8z27duNj4+P6dmzZ67jujl9aEzefXb33Xeb8uXLe7yWoh6zfPbZZ025cuVMZmamMcaYKVOmmFq1apmWLVuahx9+2BhzZrQZFhbmMQLN6xu97ZjlHXfc4VHes2dPU6VKlfO2L+e1nW9k+dVXXxlJTvuOHDliwsLCzIABAzzqpaammtDQUI/y9u3bm4oVK3qsf8Z4vgc9evQw/v7+5scff3TK9u3bZypWrGjat2/vlA0bNsxIMmvWrHHKDhw4YEJDQws8sqxfv77HscyXXnrJYw9JVlaWqVKlimnRooXHsfu33nrLGfkVxHXXXWfi4+Odv6dPn258fX3NgQMHPOoV9phlYfo+Z0R19ufUGGOaNm1q4uLinL/Pd9zu3PVw06ZNRpK56667POo9+OCDRpJZunSpU5Yzcl6xYoVTduDAARMQEGAeeOCBXMs617nbhDVr1pguXboYSeb55583xhR/m3e+117QbVrOyLJt27a5MqJDhw5Gknn77bedsqysLBMVFWV69+5t7YOzefVs2OTkZEVGRqpTp06SzowE+vTpo9mzZys7O9upFxYWpqNHj2rJkiX5zissLEzffvuttm/fnuf0/fv3a9OmTerfv78qV67slF9++eW68sor9dFHH0k6M3JasGCBrr/+ejVv3jzXfM53GvfZ37CPHj2qQ4cOqU2bNjLG6Kuvvsr3eefTp08fHThwwONssfnz58vtdqtPnz6SpMOHD2vp0qW6+eabdeTIER06dEiHDh3Sr7/+qoSEBG3fvl179+61LuuNN95QeHi4IiIi1Lx5c6WkpGjkyJEaMWKEU2fevHmqX7++YmNjneUcOnRInTt3liR99tlnkqQFCxbI7XZrzJgx8vHxXM3O7sOz+yyn7e3atdOxY8f0/fffF77DztGuXTtlZ2friy++kHRmBNmuXTu1a9dOK1eulCRt2bJF6enpateuXbGWdc899+Ra9q+//qrMzMxizTdntHvkyBFJZ/a0pKen69Zbb/V4D8qVK6dWrVo578HBgwe1YsUK3XHHHapZs6bHPHPeg+zsbC1evFg9evRQnTp1nOnVqlXT3/72N33++edO+z/66CNdccUVatmypVMvPDxcffv2LfBruf322z32zOT0+U8//SRJWr9+vX799VcNGDDA41hd3759ValSpQIt49dff9WiRYt06623OmW9e/eWy+XS3LlzC9zWvBS078+W13qR83oLK2c7dfZnUpIeeOABScp19nqDBg081uvw8HD95S9/KfDyz94mtGrVSqtWrdKIESM0bNgwSaWzzZOKtk0bMGCAypUrl2tewcHBHsdd/f391bJly0K/B14Ly+zsbM2ePVudOnXSzp07tWPHDu3YsUOtWrVSWlqaUlJSnLr33nuv6tWrp2uuuUbVq1fXHXfcoU8++cRjfuPGjVN6errq1aunxo0b66GHHtLXX3/tTN+1a5ck6S9/+UuuttSvX1+HDh3S0aNHdfDgQWVmZjq7Nwtj9+7dThgHBwcrPDzc2X2akZFR6PlJ0tVXX63Q0FCPkzvmzJmjJk2aOLvkduzYIWOMRo8erfDwcI9HzslSBw4csC6re/fuWrJkiT788EPn+q5jx455hN327dv17bff5lpOTltylvPjjz/Kx8dHDRo0OO8yv/32W/Xs2VOhoaEKCQlReHi4s2IXtc/O1qxZM5UvX94JxpywbN++vdavX68TJ04409q2bVusZZ0bSDkb999++61Y8/39998lSRUrVpQk5wth586dc70Pixcvdt6DnI3B+dblgwcP6tixY/l+Ltxut/bs2SPpzGfosssuy1Uvr+fmx9ZHOZ/TnN18OXx9fXNdZ5ufOXPm6NSpU2ratKmzXTl8+LBatWql5OTkArc1LwXt+xyBgYEKDw/3KKtUqVKR14ldu3bJx8cnV/9ERUUpLCzM6b8c5/Z3YZefs0349NNPtWbNGh06dEjPP/+8s00ojW2eVLRtWkxMTJ7zql69eq5BTlHeA68ds1y6dKn279+v2bNna/bs2bmmJycnO8e1IiIitGnTJi1atEgff/yxPv74Y82YMUP9+vXTzJkzJUnt27fXjz/+qIULF2rx4sX65z//qRdffFHTpk3TXXfdVeqvJzs7W1deeaUOHz6shx9+WLGxsapQoYL27t2r/v37F/lauYCAAPXo0UPvvfeeXn31VaWlpWnVqlWaMGGCUydn3g8++GC+Z62e++HKS/Xq1dW1a1dJ0rXXXquqVatqyJAh6tSpk3M8we12q3HjxnrhhRfynEeNGjUK/NrS09PVoUMHhYSEaNy4capbt64CAwO1ceNGPfzwwyVyfaGfn59atWqlFStWaMeOHUpNTVW7du0UGRmpU6dOac2aNVq5cqViY2NzbdQKK69vtZJkjCnWfLds2SLpf+9hTr/MmjVLUVFRuep78+xJm9Lqo7PlBGJ8fHye03/66SePUXRhFLbv83u9xVXQGxUUt7/P3iacq7S2eVLRtmn5HTsvqXXOa5+q5ORkRURE6JVXXsk17d1339V7772nadOmOR3g7++v66+/Xtdff73cbrfuvfdevfbaaxo9erTTaZUrV9btt9+u22+/Xb///rvat2+vsWPH6q677lKtWrUkSdu2bcu1vO+//15Vq1ZVhQoVFBQUpJCQEGcDVVDffPONfvjhB82cOVP9+vVzyvPadVzYO3L06dNHM2fOVEpKirZu3SpjjLMLVpLzwffz88t3xS6Ku+++Wy+++KIef/xx9ezZUy6XS3Xr1tXmzZvVpUuX876OunXryu1267vvvlOTJk3yrLNs2TL9+uuvevfdd9W+fXunfOfOnSX2GqQzu70mTZqkTz/9VFWrVlVsbKxcLpcaNmyolStXauXKlbruuuus8/HWnVRmzZoll8vlnKiWc2JRRETEed/vnPXifOtyeHi4ypcvn+/nwsfHx/kCVKtWrTwPc+T13KLK+Zzu2LHDOTwjSadPn9bPP/983hNfpP9dijZkyJBcJ8W53W7ddttteuedd/T4449Lyv89za+8oH1fGIVZr2rVqiW3263t27c7JxxJUlpamtLT053+uxBKYpuXX3lpbdOKwyu7YY8fP653331X1113nW688cZcjyFDhujIkSN6//33JZ05BuHRaB8f50OTlZWVZ53g4GBdeumlzvRq1aqpSZMmmjlzptLT0516W7Zs0eLFi3Xttdc68+7Ro4c++OADrV+/Plfb8/s2kvPt5ezpxhi99NJLuermXP9zdjvOp2vXrqpcubLmzJmjOXPmqGXLlh67HCIiItSxY0e99tpr2r9/f67nHzx4sEDLOZevr68eeOABbd26VQsXLpR05ozPvXv36vXXX89V//jx485ZaD169JCPj4/GjRuX6xtmTh/l1WcnT57Uq6++WqT25qddu3bKysrS5MmT1bZtW+cD2q5dO82aNUv79u0r0PHKChUqFPg9KykTJ07U4sWL1adPH2cXaEJCgkJCQjRhwgSdOnUq13Ny3u/w8HC1b99eb775pnbv3u1R5+z34KqrrtLChQs97laTlpamd955R23btlVISIikM3sbvvzyS61du9ZjWcXdtXm25s2bq0qVKnr99dd1+vRppzw5OblAu81y2jJy5Mhc25Wbb75ZHTp08Ghvfu9pfp/RgvZ9YZQvXz7PZeUlZzs1efJkj/KcPT05Z3dfCCWxzcvvtZfWNq04vDKyfP/993XkyBHdcMMNeU6/4oorFB4eruTkZPXp00d33XWXDh8+rM6dO6t69eratWuXXn75ZTVp0sT5dtWgQQN17NhRcXFxqly5stavX6/58+dryJAhznyfffZZXXPNNWrdurXuvPNO59KR0NBQj1sxTZgwQYsXL1aHDh2cyyP279+vefPm6fPPP1dYWFiuNsfGxqpu3bp68MEHtXfvXoWEhOg///lPnh/wuLg4SdL999+vhIQElStXTrfccku+/eXn56devXpp9uzZOnr0qJ577rlcdV555RW1bdtWjRs31oABA1SnTh2lpaVp9erV+uWXX7R58+Z8538+/fv315gxYzRp0iT16NFDt912m+bOnat77rlHn332meLj45Wdna3vv/9ec+fO1aJFi9S8eXNdeumleuyxx/TUU0+pXbt26tWrlwICArRu3TpFR0crKSlJbdq0UaVKlZSYmKj7779fLpdLs2bNKtFdcpLUunVr+fr6atu2bc5lH9KZXfdTp06VpAKFZVxcnD799FO98MILio6OVkxMTIndovH06dP617/+JUk6ceKEdu3apffff19ff/21OnXqpOnTpzt1Q0JCNHXqVN12221q1qyZbrnlFoWHh2v37t368MMPFR8fr3/84x+SpClTpqht27Zq1qyZBg4cqJiYGP3888/68MMPtWnTJklnbn6wZMkStW3bVvfee698fX312muvKSsrS88884yz3JEjR2rWrFm6+uqrNXToUOfSkVq1anmcH1Ac/v7+Gjt2rO677z517txZN998s37++We99dZbqlu3rnUUlpycrCZNmuR7OOCGG27Qfffdp40bN6pZs2aKi4vT1KlT9fTTT+vSSy9VRESEOnfurCZNmqhcuXKaNGmSMjIyFBAQoM6dOysiIqLAfV9QQUFBatCggebMmaN69eqpcuXKatSoUZ7Hmv/6178qMTFR06dPdw5jrF27VjNnzlSPHj08RuOlrSS2eed77aW1TSuyQp07W0Kuv/56ExgYeN4Ltvv372/8/PzMoUOHzPz5881VV11lIiIijL+/v6lZs6a5++67zf79+536Tz/9tGnZsqUJCwszQUFBJjY21owfP96cPHnSY76ffvqpiY+PN0FBQSYkJMRcf/31ed6UYNeuXaZfv34mPDzcBAQEmDp16pjBgwef96YE3333nenatasJDg42VatWNQMGDDCbN282ksyMGTOceqdPnzb33XefCQ8PNy6XK9+bEpxtyZIlRpJxuVxmz549efbZjz/+aPr162eioqKMn5+fueSSS8x1111n5s+fn28/n73cvC5ANsaYsWPHerzWkydPmkmTJpmGDRuagIAAU6lSJRMXF2eefPLJXLdle/PNN03Tpk2deh06dHAuFTLGmFWrVpkrrrjCuVh45MiRZtGiRbn6tri3u2vRokWuyx5++eUXI8nUqFEjV/28Lh35/vvvTfv27U1QUFCeNyU493Z3ed0GLi/nXrRdvnx5U7t2bdO7d28zf/78fG+p+Nlnn5mEhAQTGhpqAgMDTd26dU3//v3N+vXrPept2bLF9OzZ04SFhZnAwEDzl7/8xYwePdqjzsaNG01CQoIJDg425cuXN506dTJffPFFrmV+/fXXpkOHDkW+KcG8efM85pdzYfrZnw9j/neJT0BAgGnZsqVZtWqViYuLM1dffXW+/bhhwwYjKddrO9vPP//scRlOamqq6datm6lYsWKuS1Nef/11U6dOHVOuXLlc62NB+j6/S4LyWre++OILExcXZ/z9/Qt0U4Inn3zSxMTEGD8/P1OjRo3z3pTgXAW9ucP5tgk5SmKbl99rN6Zg27Scz1lel/rl3JTgXHltT2xcxpTw13gAKGFut1vh4eHq1atXnocAgNJWJn51BABynDhxIteu+LfffluHDx/mZ7/gNYwsAZQpy5Yt0/Dhw3XTTTepSpUq2rhxo9544w3Vr19fGzZsKBM3acefT9m9IAvAn1Lt2rVVo0YNTZkyRYcPH1blypXVr18/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++9OnXvuucfUqFHDpKSkmPXr15srrrjCtGnTxoutLrvWrl1rateubS6//HIzdOhQp5w+PL/Dhw+bWrVqmf79+5s1a9aYn376ySxatMjs2LHDqTNx4kQTGhpqFixYYDZv3mxuuOEGExMTY44fP+7Flpcd48ePN1WqVDH//e9/zc6dO828efNMcHCweemll5w69KH3lMmwbNmypRk8eLDzd3Z2tomOjjZJSUlebNXF4cCBA0aSWb58uTHGmPT0dOPn52fmzZvn1Nm6dauRZFavXu2tZpZJR44cMZdddplZsmSJ6dChgxOW9KHdww8/bNq2bZvvdLfbbaKiosyzzz7rlKWnp5uAgADz73//+0I0sczr1q2bueOOOzzKevXqZfr27WuMoQ+9rczthj158qQ2bNigrl27OmU+Pj7q2rWrVq9e7cWWXRwyMjIkSZUrV5YkbdiwQadOnfLoz9jYWNWsWZP+PMfgwYPVrVs3j76S6MOCeP/999W8eXPddNNNioiIUNOmTfX6668703fu3KnU1FSPPgwNDVWrVq3ow//Xpk0bpaSk6IcffpAkbd68WZ9//rmuueYaSfSht5W5G6kfOnRI2dnZioyM9CiPjIzU999/76VWXRzcbreGDRum+Ph4NWrUSJKUmpoqf39/hYWFedSNjIxUamqqF1pZNs2ePVsbN27UunXrck2jD+1++uknTZ06VSNGjNCjjz6qdevW6f7775e/v78SExOdfsrrc00fnvHII48oMzNTsbGxKleunLKzszV+/Hj17dtXkuhDLytzYYmiGzx4sLZs2aLPP//c2025qOzZs0dDhw7VkiVLFBgY6O3mXJTcbreaN2+uCRMmSJKaNm2qLVu2aNq0aUpMTPRy6y4Oc+fOVXJyst555x01bNhQmzZt0rBhwxQdHU0flgFlbjds1apVVa5cuVxnGqalpSkqKspLrSr7hgwZov/+97/67LPPPH7kNCoqSidPnlR6erpHffrzfzZs2KADBw6oWbNm8vX1la+vr5YvX64pU6bI19dXkZGR9KFFtWrV1KBBA4+y+vXra/fu3ZLk9BOf6/w99NBDeuSRR3TLLbeocePGuu222zR8+HAlJSVJog+9rcyFpb+/v+Li4pSSkuKUud1upaSkqHXr1l5sWdlkjNGQIUP03nvvaenSpYqJifGYHhcXJz8/P4/+3LZtm3bv3k1//r8uXbrom2++0aZNm5xH8+bN1bdvX+f/9OH5xcfH57pk6YcfflCtWrUkSTExMYqKivLow8zMTK1Zs4Y+/H/Hjh3L9QPF5cqVk9vtlkQfep23zzDKy+zZs01AQIB56623zHfffWcGDhxowsLCTGpqqrebVuYMGjTIhIaGmmXLlpn9+/c7j2PHjjl17rnnHlOzZk2zdOlSs379etO6dWvTunVrL7a67Dv7bFhj6EObtWvXGl9fXzN+/Hizfft2k5ycbMqXL2/+9a9/OXUmTpxowsLCzMKFC83XX39tunfvzmUPZ0lMTDSXXHKJc+nIu+++a6pWrWpGjhzp1KEPvadMhqUxxrz88sumZs2axt/f37Rs2dJ8+eWX3m5SmSQpz8eMGTOcOsePHzf33nuvqVSpkilfvrzp2bOn2b9/v/cafRE4NyzpQ7sPPvjANGrUyAQEBJjY2Fgzffp0j+lut9uMHj3aREZGmoCAANOlSxezbds2L7W27MnMzDRDhw41NWvWNIGBgaZOnTrmscceM1lZWU4d+tB7+IkuAAAsytwxSwAAyhrCEgAAC8ISAAALwhIAAAvCEgAAC8ISAAALwhIAAAvCEgAAC8ISAAALwhIAAAvCEgAAC8ISAACL/wOG8/wAEqW82gAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.title(\"Associative Recall with Decoding Attention Pattern\")\n", + "plt.tight_layout()\n", + "\n", + "plt.imshow(scores.detach().numpy()[0,0])\n", + "\n", + "plt.savefig(\"fig/decode_recall_attention_pattern.pdf\")" + ] + }, + { + "cell_type": "code", + "execution_count": 843, + "id": "0f3fbf55", + "metadata": {}, + "outputs": [], + "source": [ + "qkv = model.layers[2].layer.qkv(m)\n", + "q, k, v = qkv.chunk(3, dim=-1)" + ] + }, + { + "cell_type": "code", + "execution_count": 844, + "id": "b14d0fed", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 844, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(q.detach().numpy()[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 845, + "id": "19f589dc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 845, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(k.detach().numpy()[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 846, + "id": "5c2de9b5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 846, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(v.detach().numpy()[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 847, + "id": "8039708e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 847, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(out.detach().numpy()[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 848, + "id": "0b02c404", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[36, 36, 36, 36, 36, 36, 0, 17, 17, 17, 18, 18, 33, 36, 36, 36, 36, 36,\n", + " 36, 36, 36, 36, 36, 21, 36, 36, 36, 36, 36, 36, 36, 30, 30, 30, 30, 30,\n", + " 30, 30, 30, 30, 30, 31, 31, 31, 31, 28, 28, 28, 14, 14, 14, 14, 31, 36,\n", + " 36, 36, 36, 8, 21, 21, 21, 21, 21, 21, 21, 21, 16, 16, 16, 16, 16, 16,\n", + " 16, 16, 16, 16, 20, 20, 20, 20, 20, 7, 7, 7, 7, 7, 7, 33, 33, 33,\n", + " 33, 33, 33, 33, 33, 33, 33, 33, 33, 25]])" + ] + }, + "execution_count": 848, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y" + ] + }, + { + "cell_type": "code", + "execution_count": 849, + "id": "343dacd7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([-1., -1., -1., -1., -1., -1., 1., -1.], grad_fn=)" + ] + }, + "execution_count": 849, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(m+out)[0,-1, 3*l+2:4*l+2]" + ] + }, + { + "cell_type": "code", + "execution_count": 850, + "id": "b093612d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[36, 36, 36, 36, 36, 36, 0, 17, 17, 17, 18, 18, 33, 36, 36, 36, 36, 36,\n", + " 36, 36, 36, 36, 36, 21, 36, 36, 36, 36, 36, 36, 36, 30, 30, 30, 30, 30,\n", + " 30, 30, 30, 30, 30, 31, 31, 31, 31, 28, 28, 28, 14, 14, 14, 14, 31, 36,\n", + " 36, 36, 36, 8, 21, 21, 21, 21, 21, 21, 21, 21, 16, 16, 16, 16, 16, 16,\n", + " 16, 16, 16, 16, 20, 20, 20, 20, 20, 7, 7, 7, 7, 7, 7, 33, 33, 33,\n", + " 33, 33, 33, 33, 33, 33, 33, 33, 33, 25]])" + ] + }, + "execution_count": 850, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "hybrid", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/source/official-code/constructions/construction_var_copy.ipynb b/source/official-code/constructions/construction_var_copy.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..82ff79f065b56aa1825c47dfab2a7c52432a3cb2 --- /dev/null +++ b/source/official-code/constructions/construction_var_copy.ipynb @@ -0,0 +1,892 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 194, + "id": "62c170c5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "code", + "execution_count": 195, + "id": "9dc62fbc", + "metadata": {}, + "outputs": [], + "source": [ + "from data_utils import get_tokenizer, get_train_dataset\n", + "# from model_utils import get_model\n", + "from generate import force_args\n", + "from generate import generate_seq\n", + "\n", + "import math\n", + "import matplotlib.pyplot as plt\n", + "\n", + "import torch\n", + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "\n", + "from model_utils import SSMTransformer" + ] + }, + { + "cell_type": "code", + "execution_count": 196, + "id": "60f94b8e", + "metadata": {}, + "outputs": [], + "source": [ + "class Args:\n", + " def __init__(self):\n", + " self.model = \"hybrid\"\n", + " self.num_vocab = 26\n", + " self.train_task = \"var-copy\"\n", + " self.num_numbers = 5\n", + " self.nope = False\n", + " self.layers = ['SSM', 'TF']\n", + " self.hidden_size = 12\n", + " self.heads = 1\n", + " self.state_dim = 1\n", + " self.sequence_length = 100\n", + "\n", + " self.pack_examples = False\n", + " self.min_train_length = 97\n", + " self.max_train_length = 98\n", + " self.min_test_length = 97\n", + " self.max_test_length = 98\n", + "\n", + " self.num_examples = 1000\n", + "\n", + " self.train_batch_size = 4\n", + " self.test_batch_size = 4\n", + "\n", + " self.p = 0.2\n", + "\n", + "args = Args()\n", + "force_args(args)\n", + "\n", + "tokenizer = get_tokenizer(args)\n", + "train_dataset = get_train_dataset(args, tokenizer) " + ] + }, + { + "cell_type": "code", + "execution_count": 197, + "id": "1c70350b", + "metadata": {}, + "outputs": [], + "source": [ + "batch = 2\n", + "seq_len = 100\n", + "size_vocab = 34\n", + "\n", + "l = max(int(math.log2(seq_len)), int(math.log2(size_vocab))) + 2\n", + "d_model = 2 * l + 2 + 2 * l + 8\n", + "\n", + "# x = torch.randn(batch, seq_len, d_model)\n", + "\n", + "model = SSMTransformer(\n", + " num_vocab=34,\n", + " d_model=d_model,\n", + " d_state=1,\n", + " n_heads=1,\n", + " d_ff=-1,\n", + " layers=['SSM', 'TF'],\n", + ")\n", + "\n", + "# y = model(x)\n", + "# print(y.shape) # (2, 64, 128)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 198, + "id": "232bd737", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "SSMTransformer(\n", + " (embedding): Embedding(34, 42)\n", + " (layers): ModuleList(\n", + " (0): SSMTransformerBlock(\n", + " (layer): SimpleSSM(\n", + " (Wo): Linear(in_features=42, out_features=42, bias=False)\n", + " )\n", + " )\n", + " (1): SSMTransformerBlock(\n", + " (layer): CausalSelfAttention(\n", + " (qkv): Linear(in_features=42, out_features=126, bias=False)\n", + " (out): Linear(in_features=42, out_features=42, bias=False)\n", + " )\n", + " )\n", + " )\n", + " (lm_head): Linear(in_features=42, out_features=34, bias=True)\n", + ")" + ] + }, + "execution_count": 198, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model" + ] + }, + { + "cell_type": "code", + "execution_count": 199, + "id": "9e0d58a8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "emb = torch.zeros((34, d_model))\n", + "for i in range(34):\n", + " t = i + 1\n", + " if tokenizer.TO_STR[i][0] == \"#\":\n", + " t = int(tokenizer.TO_STR[i][1:]) #+ 1\n", + "\n", + " # for j in range(l-2, -1, -1):\n", + " for j in range(l-1, -1, -1):\n", + " # emb[i,j] = t % 2 # 0/1 binary\n", + " emb[i,j] = 2*(t % 2) - 1 # -1/1 binary encoding\n", + " t //= 2\n", + "\n", + " if tokenizer.TO_STR[i][0] == \"#\": # If the token is a number token\n", + " emb[i,l:2*l] = emb[i,:l]\n", + "\n", + " emb[i,l] = 1 # Indicator for being a number token\n", + " emb[i,2*l] = 1 # Indicator for being a number token\n", + " # else:\n", + " # emb[i,l] = -1 # Indicator for being a number token\n", + " # emb[i,2*l] = -1 # Indicator for being a number token\n", + "\n", + "emb[:,2*l+1] = 1 # For bias terms\n", + "\n", + "model.embedding.weight.data.copy_(emb)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 200, + "id": "3f928dce", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "pos_emb = torch.zeros_like(model.pos_emb.data)\n", + "for i in range(seq_len):\n", + " # t = i + 1\n", + " # t = seq_len - i\n", + " t = seq_len - i - 1\n", + " for j in range(-1, -l-1, -1):\n", + " # pos_emb[0,i,j] = t % 2 # 0/1 binary\n", + " pos_emb[0,i,j] = 2*(t % 2) - 1 # -1/1 binary encoding\n", + " t //= 2\n", + "\n", + "model.pos_emb.data.copy_(pos_emb)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 201, + "id": "b991bd89", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "A = torch.zeros_like(model.layers[0].layer.A.data)\n", + "# A += 10 # M = 10\n", + "# A += 1\n", + "\n", + "model.layers[0].layer.A.data.copy_(A)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 202, + "id": "ddc28110", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "B = torch.zeros_like(model.layers[0].layer.B.data)\n", + "B[2*l+1] = 1 # Identity\n", + "\n", + "model.layers[0].layer.B.data.copy_(B)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 203, + "id": "79ed41af", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "C = torch.zeros_like(model.layers[0].layer.C.data)\n", + "C[2*l+1] = 1 # Identity\n", + "\n", + "model.layers[0].layer.C.data.copy_(C)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 204, + "id": "1d9a5b92", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "Delta = torch.zeros_like(model.layers[0].layer.Delta.data)\n", + "Delta[2*l] = 1 # Position of the number token\n", + "\n", + "model.layers[0].layer.Delta.data.copy_(Delta)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 205, + "id": "2191cbc5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "Wo = torch.zeros_like(model.layers[0].layer.Wo.weight.data)\n", + "# Wo = torch.eye(model.layers[0].ssm.Wo.weight.data.shape[0])\n", + "# Wo[2*l+2:3*l+2, :l] = torch.eye(l) \n", + "Wo[2*l+2:3*l+2, l:2*l] = torch.eye(l) \n", + "# Wo[2*l+2:3*l+2, -l:] = torch.eye(l) \n", + "\n", + "model.layers[0].layer.Wo.weight.data.copy_(Wo)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 206, + "id": "829db9d3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "Wq = torch.zeros((d_model, d_model))\n", + "Wk = torch.zeros((d_model, d_model))\n", + "# Wv = torch.zeros((d_model, d_model))\n", + "\n", + "Wq[:l, 2*l+2:3*l+2] = 50 * torch.eye(l)\n", + "# Wq[:l, 2*l+2:3*l+2] = 10 * torch.eye(l)\n", + "Wq[0, 2*l+2] = 0 # Ignore the indicator\n", + "# Wq[2*l+2:3*l+2, :l] = 10 * torch.eye(l)\n", + "Wk[:l, -l:] = torch.eye(l)\n", + "Wv = torch.eye(d_model)\n", + "\n", + "model.layers[1].layer.qkv.weight.data.copy_(torch.concat([Wq, Wk, Wv], dim=0))\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 207, + "id": "d2d1e4b0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "out = torch.zeros_like(model.layers[1].layer.out.weight.data)\n", + "# Wo = torch.eye(model.layers[0].ssm.Wo.weight.data.shape[0])\n", + "# out[3*l+2:4*l+2, :l] = torch.eye(l) \n", + "out[3*l+2:4*l+2, :l] = torch.eye(l) \n", + "\n", + "model.layers[1].layer.out.weight.data.copy_(out)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 208, + "id": "345188a4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "lm_head = torch.zeros_like(model.lm_head.weight.data)\n", + "lm_head[:,3*l+2:4*l+2] = model.embedding.weight.data[:,:l]\n", + "\n", + "model.lm_head.weight.data.copy_(lm_head)\n", + "print()" + ] + }, + { + "cell_type": "code", + "execution_count": 209, + "id": "d023b30d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'V15 V19 V22 #7 #6 V18 #9 V2 #8 V25 V19 #8 V19 V16 V22 V4 V8 V3 V19 V12 #8 V19 V7 V23 #5 V4 V6 V23 V15 V6 #6 V11 #9 V23 V20 V12 V7 V5 #6 V18 V7 V13 V4 V6 #5 V10 V9 V8 #9 V5 V7 V24 V4 V16 V19 #5 V7 V18 V15 V12 V2 V4 V12 #8 #7 V1 #9 V8 V6 V15 V0 V17 #9 V20 V24 V3 V3 #5 #9 V0 V0 #9 V13 V5 V0 V21 #8 V25 #6 V7 V13 V13 V22 V23 V24 V16 #8 V10 V24 #7'" + ] + }, + "execution_count": 209, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "first_data = train_dataset[0]\n", + "x = first_data['input_ids']\n", + "y = first_data['output_ids']\n", + "\n", + "' '.join(first_data['input'][0])" + ] + }, + { + "cell_type": "code", + "execution_count": 210, + "id": "7278ad14", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[15, 19, 22, 28, 27, 18, 30, 2, 29, 25, 19, 29, 19, 16, 22, 4, 8, 3,\n", + " 19, 12, 29, 19, 7, 23, 26, 4, 6, 23, 15, 6, 27, 11, 30, 23, 20, 12,\n", + " 7, 5, 27, 18, 7, 13, 4, 6, 26, 10, 9, 8, 30, 5, 7, 24, 4, 16,\n", + " 19, 26, 7, 18, 15, 12, 2, 4, 12, 29, 28, 1, 30, 8, 6, 15, 0, 17,\n", + " 30, 20, 24, 3, 3, 26, 30, 0, 0, 30, 13, 5, 0, 21, 29, 25, 27, 7,\n", + " 13, 13, 22, 23, 24, 16, 29, 10, 24, 28]])" + ] + }, + "execution_count": 210, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x, y = x[:1], y[:1]\n", + "x" + ] + }, + { + "cell_type": "code", + "execution_count": 211, + "id": "2f365ad7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[33, 33, 33, 33, 33, 33, 33, 33, 15, 19, 22, 28, 27, 18, 30, 2, 29, 25,\n", + " 19, 29, 19, 16, 22, 4, 12, 29, 19, 7, 23, 26, 26, 4, 23, 26, 4, 6,\n", + " 23, 15, 30, 23, 20, 12, 7, 5, 18, 7, 13, 4, 18, 7, 13, 4, 6, 26,\n", + " 10, 7, 24, 4, 16, 19, 26, 7, 18, 26, 18, 15, 18, 15, 12, 2, 4, 12,\n", + " 29, 28, 1, 30, 8, 30, 15, 0, 17, 30, 20, 24, 3, 3, 30, 0, 13, 5,\n", + " 0, 21, 29, 25, 27, 7, 27, 7, 13, 22]])" + ] + }, + "execution_count": 211, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y" + ] + }, + { + "cell_type": "code", + "execution_count": 212, + "id": "55d55593", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[15, 15, 19, 15, 19, 18, 2, 2, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7,\n", + " 7, 7, 7, 7, 7, 7, 2, 2, 2, 2, 15, 15, 6, 6, 6, 6, 6, 6,\n", + " 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6,\n", + " 6, 5, 5, 5, 5, 5, 5, 5, 26, 7, 2, 2, 2, 2, 2, 2, 2, 2,\n", + " 2, 2, 16, 16, 16, 26, 16, 16, 16, 16, 16, 16, 16, 16, 11, 7, 26, 26,\n", + " 26, 26, 6, 23, 23, 23, 13, 13, 13, 22]])" + ] + }, + "execution_count": 212, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "torch.argmax(model(x), dim=-1)" + ] + }, + { + "cell_type": "code", + "execution_count": 213, + "id": "ca772c02", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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KipKQ4cO9Wl35513au/evbrvvvsUGRmpsWPHnrHuQDpbjV26dFFkZKQ2b97s874XXnihXl+nx+ZsM30BnBvOmAEhZPLkyTpx4oRuvfVWpaamqra2Vu+9956WL1+url27asKECZK+Oav0+OOPKy8vTwcPHtQtt9yi+Ph4HThwQCtXrtQ999yjf/u3f2twG4MHD9bEiROVn5+vXbt2afjw4YqKitK+fftUWFioZ599VqNGjZLT6dTTTz+tf/3Xf1W/fv10++23q3379vrggw904sQJ/dd//Zekb4LU8uXLNX36dPXr109xcXE+Z8C+KzExUTfccIOeeuopVVVVacyYMT7rIyIi9Lvf/U4jRozQlVdeqQkTJuiSSy7Rp59+qg0bNsjpdGrVqlWN9h8VFaUVK1YoIyND1113nUaPHq2BAwcqKipKH374oQoKCtS+fXvNmjVLUVFReuKJJzRhwgQNHjxY//Iv/6Ly8nI9++yz6tq1q6ZNm+bTd2xsrNauXaucnBwNGDBAa9as0ZtvvqmHHnqo3lfAWVlZ6tChg/cauobuQ9cczqVGl8ul2267TfPmzZPD4VD37t21evXqBq9NTEtLkyT98pe/VGZmZouHTCDsBGs6KAD/rVmzxvz0pz81qampJi4uzkRHR5vLL7/cTJ482ZSXl9dr/8c//tEMGjTItG3b1rRt29akpqaa3NxcU1JS4m3z3dtlnPbSSy+ZtLQ007p1axMfH2969+5t7r//fnP48GGfdm+88Yb54Q9/aFq3bm2cTqfp37+/Wbp0qXf9sWPHzO23327atWtnJHm31dCtF057+eWXjSQTHx9f71Ycp/3lL38xI0eONB06dDAxMTGmS5cuZvTo0aaoqOgcjqQxX331lZkxY4bp3bu3adOmjYmNjTW9evUyeXl55siRIz5tly9fbq655hoTExNjEhISzLhx48w///lPnzY5OTmmbdu25pNPPjHDhw83bdq0MUlJSWbmzJmmrq6uwRruvfdeI8kUFBScU83GNH67jLlz59ZrK8nMnDmzSTV+9tlnJjs727Rp08a0b9/eTJw40ezZs6femJ06dcpMnjzZXHTRRcbhcHDrDOA88axMAAiA8ePH6w9/+EODX682Ztq0aXrllVdUVlamNm3aNGN132hKjQBaFteYAUAQVFdXa/HixcrOzm6RUAYgNHCNGQC0oKNH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rd69e2vnzp3e9cYYzZgxQxdffLFat26tjIwM7du3L4gV49vq6ur0yCOPqFu3bmrdurW6d++uX//61z7PWGQMw5e1wWz58uWaPn26Zs6cqffff19XX321MjMzdfTo0WCXhgZs2rRJubm52rp1q9avX6+TJ09q+PDhOn78uLfNtGnTtGrVKhUWFmrTpk06fPiwRo4cGcSq0ZgdO3bot7/9ra666iqf5Yyh/b766isNHDhQUVFRWrNmjfbu3av/+I//UPv27b1t5syZo+eee04vvviitm3bprZt2yozM1PV1dVBrBynPfHEE1qwYIGef/55ffTRR3riiSc0Z84czZs3z9uGMQxjxlL9+/c3ubm53p/r6upMp06dTH5+fhCrwrk6evSokWQ2bdpkjDGmoqLCREVFmcLCQm+bjz76yEgyW7ZsCVaZaEBVVZXp0aOHWb9+vRk8eLCZMmWKMYYxDBUPPPCAGTRoUKPrPR6PSU5ONnPnzvUuq6ioMDExMWbp0qUtUSLOIisry/z0pz/1WTZy5Egzbtw4YwxjGO6sPGNWW1ur4uJiZWRkeJdFREQoIyNDW7ZsCWJlOFeVlZWSpISEBElScXGxTp486TOmqampSklJYUwtk5ubq6ysLJ+xkhjDUPHGG2+ob9++uu2225SYmKhrrrlGL7/8snf9gQMHVFZW5jOOLpdLAwYMYBwt8cMf/lBFRUX6+OOPJUkffPCB/vznP2vEiBGSGMNwZ91DzCXp888/V11dnZKSknyWJyUl6W9/+1uQqsK58ng8mjp1qgYOHKhevXpJksrKyhQdHa127dr5tE1KSlJZWVkQqkRDli1bpvfff187duyot44xDA379+/XggULNH36dD300EPasWOHfvnLXyo6Olo5OTnesWro85VxtMODDz4ot9ut1NRURUZGqq6uTrNmzdK4ceMkiTEMc1YGM4S23Nxc7dmzR3/+85+DXQr8UFpaqilTpmj9+vWKjY0NdjloIo/Ho759++o3v/mNJOmaa67Rnj179OKLLyonJyfI1eFcvPbaa1qyZIkKCgp05ZVXateuXZo6dao6derEGF4ArPwqs2PHjoqMjKw326u8vFzJyclBqgrnYtKkSVq9erU2bNigSy+91Ls8OTlZtbW1qqio8GnPmNqjuLhYR48e1Q9+8AO1atVKrVq10qZNm/Tcc8+pVatWSkpKYgxDwMUXX6zvf//7PsuuuOIKHTp0SJK8Y8Xnq73uu+8+Pfjggxo7dqx69+6tO++8U9OmTVN+fr4kxjDcWRnMoqOjlZaWpqKiIu8yj8ejoqIipaenB7EyNMYYo0mTJmnlypV655131K1bN5/1aWlpioqK8hnTkpISHTp0iDG1xNChQ7V7927t2rXL++rbt6/GjRvn/TdjaL+BAwfWu1XNxx9/rC5dukiSunXrpuTkZJ9xdLvd2rZtG+NoiRMnTigiwvfPc2RkpDwejyTGMOwFe/ZBY5YtW2ZiYmLMokWLzN69e80999xj2rVrZ8rKyoJdGhrwi1/8wrhcLrNx40Zz5MgR7+vEiRPeNj//+c9NSkqKeeedd8zOnTtNenq6SU9PD2LVOJtvz8o0hjEMBdu3bzetWrUys2bNMvv27TNLliwxbdq0MYsXL/a2mT17tmnXrp15/fXXzV//+ldz8803m27dupmvv/46iJXjtJycHHPJJZeY1atXmwMHDpgVK1aYjh07mvvvv9/bhjEMX9YGM2OMmTdvnklJSTHR0dGmf//+ZuvWrcEuCY2Q1OBr4cKF3jZff/21uffee0379u1NmzZtzK233mqOHDkSvKJxVt8NZoxhaFi1apXp1auXiYmJMampqeall17yWe/xeMwjjzxikpKSTExMjBk6dKgpKSkJUrX4LrfbbaZMmWJSUlJMbGysueyyy8zDDz9sampqvG0Yw/DlMOZbtxIGAABA0Fh5jRkAAMCFiGAGAABgCYIZAACAJQhmAAAAliCYAQAAWIJgBgAAYAmCGQAAgCUIZgAAAJYgmAEAAFiCYAYAAGAJghkAAIAlCGYAAACW+P9OricQCyRuPAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "m = model.embedding(x) + model.pos_emb\n", + "\n", + "plt.title(\"Selective Copy Input\")\n", + "plt.tight_layout()\n", + "\n", + "plt.imshow(m.detach().numpy()[0].T)\n", + "\n", + "plt.savefig(\"fig/selective_copy_input.pdf\")" + ] + }, + { + "cell_type": "code", + "execution_count": 214, + "id": "555ea9f3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 214, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "m = m + model.layers[0].layer(m)\n", + "plt.imshow(m.detach().numpy()[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 215, + "id": "e919b4e6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 215, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "out, scores = model.layers[1].layer(m)\n", + "# plt.imshow((m+out).detach().numpy()[0])\n", + "plt.imshow((out).detach().numpy()[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 216, + "id": "caee6b73", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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rFnGmObPmBnz71nLw7NkP68ryXzwwQfusn/+858mLi7OXHnllR790JwZM2OMSUhIYJYM8AMzZoBlLrroIm3atEmXX365Pv74Y82bN095eXk64YQT3DNBkvTcc8/J5XJpwoQJ+uabb9yvtLQ0ZWZm6s033/R5jJKSEjkcDl100UUen83OzlZiYqL7s6+99prq6uo0e/bsJveKRUREtOj8Jk6cqPLycn3++efusjVr1ig2NlZjx46VJG3ZskU7d+7Utddeq2+//dYd3/79+3XhhRfqrbfeksvl8nkMp9OppKSkZsXzwQcfaO/evbrttts8znHMmDHKysrSq6++2uQzR973FRERoalTp+rgwYN6/fXXJUn9+vXT0KFDtWLFCne97777TmvXrtWkSZOO2nd1dXWSdNT4D7/ndDqbdY7+yMnJUXZ2tvvfGRkZGjt2rNavX6/GxsaAHw+AJxIzwEJDhgzRc889p++//17vv/++CgsLVVdXp6uuukrbt2+XJO3cuVPGGGVmZuq4447zeH366adHXSiwc+dO1dbWqkePHk0+u2/fPvdnDydP/fv3D9i5XX311YqMjNSaNWsk/bRys6SkRKNHj1ZycrI7PknKz89vEt+f/vQn1dfXq7a21ucxkpOT3QnOsfzzn/+UJJ1yyilN3svKynK/f1hkZKROOukkj7J+/fpJkseq1MmTJ+udd95xf76kpEQNDQ3H/PPq4aTraPE3J3lrqczMzCZl/fr10w8//KCvv/464McD4IlVmYDFYmJiNGTIEA0ZMkT9+vXTjTfeqJKSEs2ZM0cul0sRERFau3at10dRJCYm+mzX5XKpR48eHjM6RzrynqNA69mzp37xi1/o2Wef1V133aWysjLt3r3bY5Xk4dmwRx55RAMHDvTaztHOLysrSx999JEqKyuVnp4e0Pib65prrtHMmTO1YsUK3XXXXVq+fLkGDx7sNQE80qmnnipJ+uSTT3ye+yeffCJJOu200yT5nr0M1gxXWx8P6EhIzIAwMXjwYEnSV199JUnq27evjDHq06ePe8amufr27avXX39dw4YNU3x8/FHrSdK2bdt08skn+6zn7581J06cqNtuu00VFRVas2aNOnfurMsuu6zJcZOTk5Wbm+tX25J02WWXadWqVVq+fLkKCwuPWrd3796SpIqKCo0cOdLjvYqKCvf7h7lcLn3xxRcefX74eWhHPhesa9euGjNmjFasWKFJkybpnXfeadZDeEePHq2oqCg988wzPhcAPP300+rUqZMuvvhiSXIvmPj5QoWfz/ZJxx6rw7OVR9qxY4c6d+7sTti7dOnidXFJS44HwBN/ygQs8+abb8p4ee7zX//6V0n//pPbuHHjFBUVpfvuu69JfWOMvv32W5/HmDBhghobG/XAAw80ee/QoUPuX7qjRo1SUlKSioqKdODAgSbHOCwhIeGof1r8ufHjxysqKkqrVq1SSUmJLr30Uo+HpWZnZ6tv37763e9+p3379jX5/LH+pHbVVVdpwIABmjt3rjZt2tTk/bq6Ot19992Sfkp4e/TooaVLl6q+vt5dZ+3atfr00081ZsyYJp9ftGiR+7+NMVq0aJGio6N14YUXetS7/vrrtX37dt1+++2KiorSNddcc9S4JSk9PV033nijXn/9da/PKVu6dKneeOMNTZkyRb169ZL0UwLbvXt3vfXWWx51Fy9e3OTzh/vZ16rdTZs26cMPP3T/u7KyUi+++KJGjRrlnpnt27evamtr3TN30k//w/D88897PV5b7TIAtAuhW3cAwJvTTz/d9OnTx8yaNcs8/vjjZtGiRebaa681UVFR5sQTTzTff/+9u25RUZGRZM4991wzb948s2TJEnPHHXeYzMxM88gjj7jreVtFd/PNNxtJZvTo0Wb+/Plm0aJFZvr06aZnz56mpKTEXe9Pf/qTkWT69+9vHnzwQbNkyRJzyy23mMmTJ7vrzJs3z0gyM2fONCtXrjQvvfSSMeboqwVzc3NNUlKSkWT+8pe/NHn/zTffNHFxcSYjI8PMmTPHPP7442bOnDlmxIgR5tJLLz1mP+7cudP07t3bdOrUyVx77bWmuLjYPP7442b69OnmuOOOM/369XPXXbZsmZFkhg4dahYsWGAKCwtN586dm/R3fn6+iYuLM5mZmWby5MmmuLjYXHrppUaSueuuu5rEUF9fb7p16+bu5+aqq6szw4cPN5LM5ZdfbhYvXmwWL15sxo4daySZ8847z+zbt8/jM7NnzzaSzJQpU8ySJUvML3/5S5Odnd1kVebhFbCXXHKJefrpp82qVavcbR0e5+7du5v777/fPPzww6Z3794mLi7OfPzxx+42vvnmG5OQkGBOOukks2DBAvPggw+a9PR0M2jQoCarMi+55BKTkJBg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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.title(\"Selective Copy Output\")\n", + "plt.tight_layout()\n", + "\n", + "plt.imshow((m+out).detach().numpy()[0].T)\n", + "\n", + "plt.savefig(\"fig/selective_copy_output.pdf\")" + ] + }, + { + "cell_type": "code", + "execution_count": 217, + "id": "9125a8cd", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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z/e29e/fXx6PR0899dRhHdeBvPHGG9q6davOP/98n599YGCgOnfuXOHr5sorr/R5fOqpp+rbb7+t0v5ffvllSdKYMWN82q+77jpJKjfeLVu21Kmnnup93LhxY5144omHvf9HHnlEjRs3VlxcnDp37qz3339fY8aM0ahRoyRJ4eHh3r7bt2/XL7/8oi5dusjM9Mknn1T6+Mr89ttveuuttzRw4EBt27bNO86//vqrMjMztX79ev34448+21xxxRUKDAws91yRkZE+5z1DQkLUqVOnKv8MIPEBmqNEx44d9cwzz2j37t1au3atli5dqqlTp2rAgAFas2aNWrZsqfXr18vM1KJFiwqfIzg4+IDPv379ehUWFiouLq7C9WUf1CkLrNatW1fziP7rvPPO05gxY7R48WKNHz9eZqYlS5bo9NNPV3R0tLc+SRo2bNgBn6ewsFD169evcF10dPRh/6L4/vvvJUknnnhiuXWpqal67733fNoCAgJ03HHH+bSdcMIJkuRzGcNFF12kESNG6Pvvv1dycrKWLFmi4uJiDR069JA1LV68WMXFxWrXrp2+/vprb3tZwGZnZx/WsVWkbGx79uxZ4fqyn0GZsLAwNW7c2Ketfv36+v3336u0/++//14BAQE6/vjjfdoTEhIUGxvr/XmUadq0abnnqMz++/btqxEjRsjj8SgqKkqtWrXy+WDKxo0bNXHiRD3//PPlnrOwsPBwD6ucr7/+WmamCRMmaMKECRX22bJli4499ljv45SUlAr7NWnSpNwfUPXr19d//vOfKtfnOsLwKBMSEqKOHTuqY8eOOuGEE3TJJZdoyZIluvXWW1VaWuq9/uxAf00eSGlpqeLi4nxmLvva/5dfTUpMTNSpp56qp556SuPHj9eKFSu0ceNGn093ls367r33XrVt27bC5znY8aWmpuqTTz7Rpk2blJSUVKP1H67Bgwdr9OjRWrBggcaPH68nnnhCHTp0qDB091f2c+natWuF67/99ttygXy4ysb28ccfV0JCQrn1+3/ys6LXVk043HcWDrR/Mzus7Zs0aaKMjIwK15WUlKh379767bffdNNNNyk1NVURERH68ccfdfHFFx/03YdDKdv2+uuvV2ZmZoV99v+DYN9Z6r6qOwYojzA8inXo0EGS9NNPP0mSmjdvLjNTSkqKd2ZyuJo3b64333xTXbt2PeB/wLJ+krRu3bpy/3H3Vdm3TAcNGqSrr75aeXl5Wrx4serVq6ezzjqr3H6jo6MP+IvsYM466yw9+eSTeuKJJzRu3LiD9k1OTpYk5eXllZst5eXledeXKS0t1bfffusz5l999ZUk+dzlp0GDBsrKytKCBQs0ZMgQvf/++4d1Y4INGzbogw8+0IgRI9S9e/dy+x46dKgWLlyoW265RdKBx/5A7WVjGxcXV6Wxrcy+KpKcnKzS0lKtX79eJ510kre9oKBAW7duLTfetenTTz/VV199pfnz5+uiiy7ytr/xxhvl+lZ2nMv+WAkODq6xcUbN4ZzhUeDtt9+u8C++snMtZTOLc889V4GBgZo0aVK5/mamX3/99YD7GDhwoEpKSnTHHXeUW7dnzx5t3bpVktSnTx9FRUUpJydHO3fuLLePMhEREZV6S6l///4KDAzUk08+qSVLlujMM8/0eesqLS1NzZs31z//+U/98ccf5bb/+eefD/r8AwYMUJs2bTR58mQtX7683Ppt27bp5ptvlrT3j4y4uDjNmTNHu3bt8vZ55ZVX9MUXXygrK6vc9jNmzPD+28w0Y8YMBQcHq1evXj79hg4dqs8//1w33HCDAgMDNXjw4IPWLf13VnjjjTdqwIABPsvAgQPVvXt3nxl9RESE9+e1r7Lx3H9dZmamoqOjddddd6m4uLjcdoca24rUq1evwn1V5IwzzpCkcn8Y3H///ZJU4XjXlrIZ176vZTPTAw88UK7vgcbzQMceFxenHj166KGHHvL+Abuvqowzag4zw6PAyJEjtWPHDp1zzjlKTU3V7t279cEHH2jx4sVq1qyZLrnkEkl7/8K/8847NW7cOH333Xfq16+foqKitGHDBi1dulTDhw/X9ddfX+E+unfvrn/84x/KycnRmjVr1KdPHwUHB2v9+vVasmSJHnjgAQ0YMEDR0dGaOnWqLr/8cnXs2FEXXHCB6tevr7Vr12rHjh2aP3++pL3htXjxYo0ZM0YdO3ZUZGSkz0xvf3Fxcfr73/+u+++/X9u2bdOgQYN81gcEBOh///d/dfrpp6tVq1a65JJLdOyxx+rHH3/U22+/rejoaL3wwgsHfP7g4GA988wzysjI0GmnnaaBAweqa9euCg4O1meffaaFCxeqfv36mjx5soKDgzVlyhRdcskl6t69u84//3wVFBTogQceULNmzTR69Gif5w4LC9Orr76qYcOGqXPnznrllVf00ksvafz48eXeXs7KylLDhg2950QPdI52XwsWLFDbtm0P+Pbu2WefrZEjR+rjjz9W+/btlZaWptmzZ+vOO+/U8ccfr7i4OPXs2VNt27ZVYGCgpkyZosLCQoWGhqpnz56Ki4vT7NmzNXToULVv316DBw9W48aNtXHjRr300kvq2rWrT9gfjvDwcLVs2VKLFy/WCSecoAYNGqh169YVnmv+29/+pmHDhmnu3LnaunWrunfvrlWrVmn+/Pnq16+f/v73v1dq39WRmpqq5s2b6/rrr9ePP/6o6Oho/etf/6rwfGRaWpok6ZprrlFmZqb3j5uDHfvMmTPVrVs3tWnTRldccYWOO+44FRQUaPny5frhhx+0du3aI3as2I8/PsKKynnllVfs0ksvtdTUVIuMjPTemm3kyJFWUFBQrv+//vUv69atm0VERFhERISlpqZadna25eXlefsc6HZsc+fOtbS0NAsPD7eoqChr06aN3XjjjbZ582affs8//7x16dLFwsPDLTo62jp16mRPPvmkd/0ff/xhF1xwgcXGxh70ovt9PfzwwybJoqKiDni7rk8++cTOPfdca9iwoYWGhlpycrINHDjQcnNzD2MkzX7//XebOHGitWnTxurVq2dhYWHWunVrGzdunP30008+fRcvXmzt2rWz0NBQa9CgwWFfdB8fH2+33nqrlZSUVFjD1VdfbZJs4cKFh6x39erV5a5Z3N93331nkmz06NFmtveSiKysLIuKivJedF/m4YcftuOOO84CAwPLXWbx9ttvW2ZmpsXExFhYWJg1b97cLr74Yvvoo4/KHe/+Krp28IMPPrC0tDQLCQk5rIvuJ02aZCkpKRYcHGxJSUkHveh+f927d6/wcpL96QAX3e/r888/t4yMDIuMjLRGjRrZFVdcYWvXri33ut2zZ4+NHDnSGjdubB6Px+eYDnTsZntvC3jRRRdZQkKCBQcH27HHHmtnnnmmPf30094+ZZdWfPjhhxUea6tWrcq11/YtFv/qPGaccQWq6uKLL9bTTz9d4Vu3BzJ69Gg98sgjys/P976lBsC/OGcIHEE7d+7UE088of79+xOEQB3COUPgCNiyZYvefPNNPf300/r111917bXX+rskAPsgDIEj4PPPP9eQIUMUFxenBx988IDXSgLwD84ZAgCcxzlD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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.title(\"Selective Copy Attention Pattern\")\n", + "plt.tight_layout()\n", + "\n", + "plt.imshow(scores.detach().numpy()[0,0])\n", + "\n", + "plt.savefig(\"fig/selective_copy_atterntion_pattern.pdf\")" + ] + }, + { + "cell_type": "code", + "execution_count": 218, + "id": "0f3fbf55", + "metadata": {}, + "outputs": [], + "source": [ + "qkv = model.layers[1].layer.qkv(m)\n", + "q, k, v = qkv.chunk(3, dim=-1)" + ] + }, + { + "cell_type": "code", + "execution_count": 219, + "id": "b14d0fed", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 219, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(q.detach().numpy()[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 220, + "id": "19f589dc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 220, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(k.detach().numpy()[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 221, + "id": "5c2de9b5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 221, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(v.detach().numpy()[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 222, + "id": "8039708e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 222, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(out.detach().numpy()[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 223, + "id": "0b02c404", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[33, 33, 33, 33, 33, 33, 33, 33, 15, 19, 22, 28, 27, 18, 30, 2, 29, 25,\n", + " 19, 29, 19, 16, 22, 4, 12, 29, 19, 7, 23, 26, 26, 4, 23, 26, 4, 6,\n", + " 23, 15, 30, 23, 20, 12, 7, 5, 18, 7, 13, 4, 18, 7, 13, 4, 6, 26,\n", + " 10, 7, 24, 4, 16, 19, 26, 7, 18, 26, 18, 15, 18, 15, 12, 2, 4, 12,\n", + " 29, 28, 1, 30, 8, 30, 15, 0, 17, 30, 20, 24, 3, 3, 30, 0, 13, 5,\n", + " 0, 21, 29, 25, 27, 7, 27, 7, 13, 22]])" + ] + }, + "execution_count": 223, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y" + ] + }, + { + "cell_type": "code", + "execution_count": 224, + "id": "343dacd7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([-1.0000, -1.0000, -1.0000, 1.0000, -1.0000, 1.0000, 1.0000, 1.0000],\n", + " grad_fn=)" + ] + }, + "execution_count": 224, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(m+out)[0,-1, 3*l+2:4*l+2]" + ] + }, + { + "cell_type": "code", + "execution_count": 225, + "id": "b093612d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[33, 33, 33, 33, 33, 33, 33, 33, 15, 19, 22, 28, 27, 18, 30, 2, 29, 25,\n", + " 19, 29, 19, 16, 22, 4, 12, 29, 19, 7, 23, 26, 26, 4, 23, 26, 4, 6,\n", + " 23, 15, 30, 23, 20, 12, 7, 5, 18, 7, 13, 4, 18, 7, 13, 4, 6, 26,\n", + " 10, 7, 24, 4, 16, 19, 26, 7, 18, 26, 18, 15, 18, 15, 12, 2, 4, 12,\n", + " 29, 28, 1, 30, 8, 30, 15, 0, 17, 30, 20, 24, 3, 3, 30, 0, 13, 5,\n", + " 0, 21, 29, 25, 27, 7, 27, 7, 13, 22]])" + ] + }, + "execution_count": 225, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "hybrid", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/source/official-code/constructions/data_utils.py b/source/official-code/constructions/data_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..293a9df61c73810aefec214380da1831ad330fae --- /dev/null +++ b/source/official-code/constructions/data_utils.py @@ -0,0 +1,267 @@ +import numpy as np +import torch +import string +from generate import generate_seq + +from transformers import AutoTokenizer + +################################################################# + +# Tokenizer +class Tokenizer: + def __init__(self, TO_TOKEN, vocab_tokens, number_tokens): + + self.TO_TOKEN = TO_TOKEN + self.TO_STR = {v:k for k, v in TO_TOKEN.items()} + + self.vocab = np.array(list(TO_TOKEN.keys())) + + self.vocab_tokens = vocab_tokens + self.number_tokens = number_tokens + self.num_vocab = len(self.vocab_tokens) + self.num_numbers = len(self.number_tokens) + + self.bos_token = self.TO_TOKEN[''] + self.eos_token = self.TO_TOKEN[''] + self.null = '' + + # Human readible printing + vocab_part = {self.TO_TOKEN[k]: v for (k, v) in zip(self.vocab_tokens, string.ascii_lowercase[:self.num_vocab])} + number_part = {self.TO_TOKEN[t]: t[1:] for t in self.number_tokens} + + self.TO_STRING = {**vocab_part, **number_part} + self.TO_STRING[self.bos_token] = "$" + self.TO_STRING[self.eos_token] = "." + self.TO_STRING[self.TO_TOKEN[self.null]] = "_" + + def __call__(self, x): + encoded = [self.TO_TOKEN[c] for c in x] + return torch.tensor(encoded, dtype=torch.int64) + + def decode(self, x): + x = x.detach().cpu().numpy() + decoded = [str(t) if t not in self.TO_STR else self.TO_STR[t] for t in x] + return decoded + + def __len__(self): + return len(self.TO_TOKEN) + + # def to_string(self, x, pytorch=True): + # if pytorch: + # return "".join([self.TO_STRING[t.item()] for t in x]) + # else: + # return "".join([self.TO_STRING[self.TO_TOKEN[t]] for t in x]) + + +def get_tokenizer(args): + if args.model == "pretrained": + tokenizer = AutoTokenizer.from_pretrained(args.pretrained_model) + return tokenizer + + # Vocab tokens look like 'V' + number + vocab_tokens = ["V%d" % i for i in range(args.num_vocab)] + + # Create number tokens. Variable copy tasks start with 5, not 0 + if args.train_task.startswith("var-copy"): + number_tokens = ["#%d" % (5+i) for i in range(args.num_numbers)] + else: + number_tokens = ["#%d" % i for i in range(args.num_numbers)] + + vocab = vocab_tokens + number_tokens + ["", "", ""] + + TO_TOKEN = dict(zip(vocab, range(len(vocab)))) + + tokenizer = Tokenizer(TO_TOKEN, vocab_tokens, number_tokens) + + return tokenizer + + +################################################################# + +# Datasets + +class Dataset: + def __init__(self, + tokenizer, + task="var_copy", + sequence_length=220, + min_subseq_length=20, + max_subseq_length=50, + num_examples=1000, + batch_size=8, + p=0.2, + pack_examples=False): + + self.tokenizer = tokenizer + self.task = task + self.num_vocab = self.tokenizer.num_vocab + self.num_numbers = self.tokenizer.num_numbers + + self.sequence_length = sequence_length + self.min_subseq_length = min_subseq_length + self.max_subseq_length = max_subseq_length + self.num_examples = num_examples + self.batch_size = batch_size + self.p = p + self.pack_examples = pack_examples + + def __len__(self): + return self.num_examples + + def __getitem__(self, idx): + batch = {'input': [], 'input_ids': [], 'output': [], 'output_ids': [], 'mask': []} + + for _ in range(self.batch_size): + + # Fill the context with subsequences of the desired task + prospective_len = 0 + input_seq = [] + output_seq = [] + mask = [] + + if self.pack_examples: + while prospective_len < self.sequence_length: + # Sample for the task + length = np.random.randint(self.min_subseq_length, self.max_subseq_length+1) + input_sample, output_sample = generate_seq_and_mask(self.tokenizer, length, self.task, self.p) + + input_sample = [""] + input_sample + [""] + output_sample = [""] + output_sample + [""] + mask_sample = [0 if i in ["", "", ""] else 1 for i in output_seq] + + # Add the sample to the context + if prospective_len + len(input_sample) <= self.sequence_length: + prospective_len += len(input_sample) + input_seq += input_sample + output_seq += output_sample + mask += mask_sample + # Not enough room for another sample + else: + remaining_len = self.sequence_length - prospective_len + remaining_mask_len = self.sequence_length - prospective_len + input_seq += input_sample[:remaining_len] + output_seq += output_sample[:remaining_len] + mask += [0] * (remaining_mask_len) # Just mask it + break + + else: + input_seq, output_seq = generate_seq(self.tokenizer, self.sequence_length, self.task, self.p) + mask = [0 if i in ["", "", ""] else 1 for i in output_seq] + + # Add the sequence to the sampled dataset + assert len(input_seq) == len(mask) + input_ids = self.tokenizer(input_seq) + output_ids = self.tokenizer(output_seq) + mask = torch.tensor(mask) + + batch['input'].append(input_seq) + batch['input_ids'].append(input_ids) + batch['output'].append(output_seq) + batch['output_ids'].append(output_ids) + batch['mask'].append(mask) + + batch['input_ids'] = torch.stack(batch['input_ids'], dim=0) + batch['output_ids'] = torch.stack(batch['output_ids'], dim=0) + batch['mask'] = torch.stack(batch['mask'], dim=0) + return batch + + +class EvalDataset: + def __init__(self, + tokenizer, + train_task="var_copy", + sequence_length=220, + min_subseq_length=20, + max_subseq_length=50, + num_examples=1000, + batch_size=8, + p=0.2): + + self.tokenizer = tokenizer + self.train_task = train_task + + self.sequence_length = sequence_length + self.min_subseq_length = min_subseq_length + self.max_subseq_length = max_subseq_length + self.num_examples = num_examples + self.batch_size = batch_size + self.p = p + + def __len__(self): + return self.num_examples + + def __getitem__(self, idx): + batch = {'input': [], 'input_ids': [], 'output': [], 'output_ids': [], 'mask': []} + + for _ in range(self.batch_size): + + # Fill the context with subsequences of the desired task + prospective_len = 0 + input_seq = [] + output_seq = [] + mask = [] + + # Sample for the task + length = np.random.randint(self.min_subseq_length, self.max_subseq_length+1) + input_seq, output_seq = generate_seq(self.tokenizer, length, self.train_task, self.p) + mask = [0 if i in ["", "", ""] else 1 for i in output_seq] + + # DO NOT REPLACE + # Fill the context with null tokens + input_seq += [""] * (self.sequence_length - len(input_seq)) + output_seq += [""] * (self.sequence_length - len(output_seq)) + mask += [0] * (self.sequence_length - len(mask)) + + # Add the sequence to the sampled dataset + assert len(input_seq) == len(mask) + input_ids = self.tokenizer(input_seq) + output_ids = self.tokenizer(output_seq) + mask = torch.tensor(mask) + + batch['input'].append(input_seq) + batch['input_ids'].append(input_ids) + batch['output'].append(output_seq) + batch['output_ids'].append(output_ids) + batch['mask'].append(mask) + + batch['input_ids'] = torch.stack(batch['input_ids'], dim=0) + batch['output_ids'] = torch.stack(batch['output_ids'], dim=0) + batch['mask'] = torch.stack(batch['mask'], dim=0) + return batch + + +################################################################# + +# Util functions + +def get_train_dataset(args, tokenizer): + train_dataset = Dataset( + tokenizer=tokenizer, + task=args.train_task, + + sequence_length=args.sequence_length, + min_subseq_length=args.min_train_length, + max_subseq_length=args.max_train_length, + num_examples=args.num_examples, + batch_size=args.train_batch_size, + p=args.p, + pack_examples=args.pack_examples + ) + + return train_dataset + + +def get_eval_dataset(args, tokenizer, min_length, max_length): + eval_dataset = EvalDataset( + tokenizer=tokenizer, + train_task=args.train_task, + + sequence_length=args.sequence_length, + min_subseq_length=min_length, + max_subseq_length=max_length, + num_examples=args.num_eval_examples, + batch_size=args.eval_batch_size, + p=args.eval_p + ) + + return eval_dataset diff --git a/source/official-code/constructions/fig/decode_recall_attention_pattern.pdf b/source/official-code/constructions/fig/decode_recall_attention_pattern.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a0c64705413008d47c2a73bc28461e9534ba6fbd Binary files /dev/null and b/source/official-code/constructions/fig/decode_recall_attention_pattern.pdf differ diff --git a/source/official-code/constructions/fig/decode_recall_input.pdf b/source/official-code/constructions/fig/decode_recall_input.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3d7334ed2d5137b4a9b9541ff4946c94aafc5eb3 Binary files /dev/null and b/source/official-code/constructions/fig/decode_recall_input.pdf differ diff --git a/source/official-code/constructions/fig/decode_recall_output.pdf b/source/official-code/constructions/fig/decode_recall_output.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7a358831b00b3199ddfe556524ce9c193445f941 Binary files /dev/null and b/source/official-code/constructions/fig/decode_recall_output.pdf differ diff --git a/source/official-code/constructions/fig/selective_copy_atterntion_pattern.pdf b/source/official-code/constructions/fig/selective_copy_atterntion_pattern.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4bc91ef9f9d9aa3a8cbd25cfbe9f0b4e00302810 Binary files /dev/null and b/source/official-code/constructions/fig/selective_copy_atterntion_pattern.pdf differ diff --git a/source/official-code/constructions/fig/selective_copy_input.pdf b/source/official-code/constructions/fig/selective_copy_input.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4e1ccce0eb7c6418e05fa9674074cccc32508abb Binary files /dev/null and b/source/official-code/constructions/fig/selective_copy_input.pdf differ diff --git a/source/official-code/constructions/fig/selective_copy_output.pdf b/source/official-code/constructions/fig/selective_copy_output.pdf new file mode 100644 index 0000000000000000000000000000000000000000..79dc9b50070ea04d92a8d262375f8bc051eebc24 Binary files /dev/null and b/source/official-code/constructions/fig/selective_copy_output.pdf differ diff --git a/source/official-code/constructions/generate.py b/source/official-code/constructions/generate.py new file mode 100644 index 0000000000000000000000000000000000000000..4576fb91e141193315272a4daa4c7c5b8cc2dd35 --- /dev/null +++ b/source/official-code/constructions/generate.py @@ -0,0 +1,212 @@ +# Sequence Generation +import numpy as np +import math +from collections import defaultdict + + +task_choices = ["var-copy", "var-copy-rep", "decode-recall", "decode-recall-last", "assoc-recall", "assoc-recall-mk"] + + +def force_args(args): + if args.train_task in ["var-copy", "var-copy-rep"]: + pass + + if args.train_task in ["decode-recall", "decode-recall-last"]: + args.num_numbers = 2 + args.num_vocab = int(2 ** math.floor(math.log(args.num_vocab) / math.log(2))) + + if args.train_task == "assoc-recall": + args.num_numbers = 0 + + if args.train_task == "assoc-recall-mk": + args.num_numbers = 0 + # args.num_vocab = 1 + int(args.num_vocab ** (1./size_key)) + + +def generate_seq(tokenizer, length, task, p=0.2): + num_vocab = tokenizer.num_vocab + num_numbers = tokenizer.num_numbers + + if task == "var-copy": + # Start with num_numbers vocab tokens + input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=p) + # input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers) + + nums = [(i, int(c[1:])) for (i, c) in enumerate(input_seq) if c in tokenizer.number_tokens] + + # The real task, if not degenerate + if len(nums) > 0: + output_seq = [""] * nums[0][0] + + for i in range(len(nums)-1): + if nums[i][0]-nums[i][1] < 0: + if nums[i+1][0]-nums[i][1] < 0: + output_seq += [""] * (nums[i+1][0]-nums[i][0]) + else: + output_seq += [""] * (nums[i][1]-nums[i][0]) + output_seq += input_seq[:nums[i+1][0]-nums[i][1]] + else: + output_seq += input_seq[nums[i][0]-nums[i][1]:nums[i+1][0]-nums[i][1]] + + if nums[-1][0]-nums[-1][1] < 0: + output_seq += [""] * (nums[-1][1]-nums[-1][0]) + output_seq += input_seq[:-nums[-1][1]] + else: + output_seq += input_seq[nums[-1][0]-nums[-1][1]:-nums[-1][1]] + else: + output_seq = [""] * length + + # output_seq = [""] + output_seq[:length] + [""] + + elif task == "var-copy-rep": + # Start with num_numbers vocab tokens + # input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=p) + input_seq = rand_seq_special(tokenizer, length, num_vocab, num_numbers, p_numbers=p, special_type="repetitive_vocab") + + nums = [(i, int(c[1:])) for (i, c) in enumerate(input_seq) if c in tokenizer.number_tokens] + + # The real task, if not degenerate + if len(nums) > 0: + output_seq = [""] * nums[0][0] + + for i in range(len(nums)-1): + if nums[i][0]-nums[i][1] < 0: + if nums[i+1][0]-nums[i][1] < 0: + output_seq += [""] * (nums[i+1][0]-nums[i][0]) + else: + output_seq += [""] * (nums[i][1]-nums[i][0]) + output_seq += input_seq[:nums[i+1][0]-nums[i][1]] + else: + output_seq += input_seq[nums[i][0]-nums[i][1]:nums[i+1][0]-nums[i][1]] + + if nums[-1][0]-nums[-1][1] < 0: + output_seq += [""] * (nums[-1][1]-nums[-1][0]) + output_seq += input_seq[:-nums[-1][1]] + else: + output_seq += input_seq[nums[-1][0]-nums[-1][1]:-nums[-1][1]] + else: + output_seq = [""] * length + + input_seq = [""] + input_seq + [""] + output_seq = [""] + output_seq + [""] + # output_seq = [""] + output_seq[:length] + [""] + + elif task == "decode-recall": + input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=p) + output_seq = [None for _ in range(len(input_seq))] + + assoc = {v: "" for v in tokenizer.vocab} + s = 0 + for i in range(len(output_seq)): + if i != 0: + assoc[input_seq[i-1]] = input_seq[i] + + if input_seq[i][0] == '#': + # s = (2 * s + int(input_seq[i][1:])) % num_numbers + s = (2 * s + int(input_seq[i][1:])) % num_vocab + + # if i-s < 0: + # output_seq[i] = "" + # else: + # output_seq[i] = input_seq[i-s] + + output_seq[i] = assoc["V%d" % s] + + elif task == "decode-recall-last": + input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=0) + output_seq = ["" for _ in range(len(input_seq))] + + n_bits = int(math.log(num_vocab)/math.log(2)) + + target = np.random.randint(0, num_vocab) + temp = target + for i in range(length-1, length-1-n_bits, -1): + input_seq[i] = "#%d" % (temp % 2) + temp = temp // 2 + + try: + i = length-2-n_bits - input_seq[-2-n_bits::-1].index("V%d" % target) + output_seq[-1] = input_seq[i+1] + except ValueError: + pass + + elif task == "assoc-recall": + input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=0.2) + output_seq = [None for _ in range(len(input_seq))] + + assoc = {v: "" for v in tokenizer.vocab} + + for i in range(len(output_seq)): + if i != 0: + assoc[input_seq[i-1]] = input_seq[i] + + output_seq[i] = assoc[input_seq[i]] + + elif task == "assoc-recall-mk": + size_key = 2 + + input_seq = rand_seq(tokenizer, length, num_vocab, 0, p_numbers=0.0) + output_seq = ["" for _ in range(len(input_seq))] + + assoc = defaultdict(lambda: "") + + for i in range(len(output_seq)): + if i > size_key: + key = tuple(input_seq[i-size_key:i]) + assoc[key] = input_seq[i] + + if i+1 > size_key: + key = tuple(input_seq[i-size_key+1:i+1]) + output_seq[i] = assoc[key] + + else: + print("Task name:", task) + assert False # Not implemented + + return input_seq, output_seq + +################################################################################################ + +# SEQUENCE GENERATION HELPERS + +def rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=-1): + if p_numbers == -1: + p_numbers = num_numbers / (num_vocab + num_numbers) + + if num_numbers != 0: + props = {"V": (1-p_numbers)/num_vocab, "#": p_numbers/num_numbers, "<": 0} + else: + props = {"V": 1/num_vocab, "#": 0, "<": 0} + props = np.array([props[i[0]] for i in tokenizer.vocab]) + + return np.random.choice(tokenizer.vocab, size=length, p=props).tolist() + + +# For other special generations +def rand_seq_special(tokenizer, length, num_vocab, num_numbers, p_numbers=-1, special_type=None): + if special_type == "repetitive_vocab": + if p_numbers == -1: + p_numbers = num_numbers / (num_vocab + num_numbers) + + if num_numbers != 0: + props = {"V": 0, "#": p_numbers/num_numbers, "<": 0} + else: + props = {"V": 0, "#": 0, "<": 0} + if num_numbers != 0: + props_V0 = (1-p_numbers) + else: + props_V0 = 1 + props = np.array([props[i[0]] if i != "V0" else props_V0 for i in tokenizer.vocab]) + + tile_length = 3 + + props_tile = {"V": 1./num_vocab, "#": 0, "<": 0} + props_tile = np.array([props_tile[i[0]] for i in tokenizer.vocab]) + + ret_seq = np.random.choice(tokenizer.vocab, size=length, p=props) + ret_seq2 = np.tile(np.random.choice(tokenizer.vocab, size=tile_length, p=props_tile), (length // tile_length + 1))[:length] + + return np.where(ret_seq == "V0", ret_seq2, ret_seq).tolist() + + else: + assert False, "Not implemented" \ No newline at end of file diff --git a/source/official-code/constructions/model_utils.py b/source/official-code/constructions/model_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..07ca1765260aa0b4b0f55a8887e3b4c489804f92 --- /dev/null +++ b/source/official-code/constructions/model_utils.py @@ -0,0 +1,149 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + +class SimpleSSM(nn.Module): + """ + Minimal discrete-time linear SSM: + x_{t+1} = A x_t + B u_t + y_t = C x_t + """ + + def __init__(self, d_model, d_state): + super().__init__() + + self.d_model = d_model + self.d_state = d_state + + # Learnable parameters + self.A = nn.Parameter(torch.randn(d_model, d_state, d_state) * 0.01) + self.B = nn.Parameter(torch.randn(d_model, d_state) * 0.01) + self.C = nn.Parameter(torch.randn(d_model, d_state) * 0.01) + self.Cb = nn.Parameter(torch.zeros(d_model, d_state)) + self.Delta = nn.Parameter(torch.randn(d_model) * 0.01) + + self.Wo = nn.Linear(d_model, d_model, bias=False) + + self.h0 = nn.Parameter(torch.zeros(d_state, d_model)) + + def forward(self, x): + """ + x: (batch, seq_len, d_model) + returns: (batch, seq_len, d_model) + """ + + B, T, _ = x.shape + h = self.h0.unsqueeze(0).expand(B, -1, -1) # (batch, d_state, d_model) + + outputs = [] + + for t in range(T): + xt = x[:, t] # (batch, d_model) + Delta = xt @ self.Delta + # edA = torch.exp(-torch.einsum('b,aij->baij', Delta, self.A)) + edA = torch.einsum('b,aij->baij', 1-Delta, torch.eye(self.d_state, device=x.device).unsqueeze(0)) \ + + torch.einsum('b,aij->baij', Delta, self.A) # (batch, d_model, d_state, d_state) + B = xt @ self.B + # B = torch.einsum('ba,ak->bk', xt, self.B) # (batch, d_model, d_state) + C = xt @ self.C + + # print(edA.shape, h.shape, xt.shape, Delta.shape, B.shape) + + h = torch.einsum('bja,bakj->bka', h, edA) + torch.einsum('b,ba,bk->bka', Delta, xt, B) # state update + # h = h @ self.A.T + xt @ self.B.T # state update + # print(h.shape, self.Cb.shape) + yt = torch.einsum('bka,bk->ba', h, C) + torch.einsum('bka,ak->ba', h, self.Cb) # output + # yt = h @ self.C.T # output + outputs.append(yt) + # if Delta == 1: + # print("Next is number!") + # print(torch.max(torch.abs(xt - h))) + # print(h[0,0]) + # print(torch.max(edA), torch.max(torch.einsum('baj,akj->bak', h, edA)), torch.max(torch.einsum('b,bk,ba->bak', Delta, xt, B)), torch.max(yt), torch.max(torch.abs(h))) + + # print(yt[0, 25:30]) + # print(torch.stack(outputs, dim=1)[0, -1, 25:30]) + return self.Wo(torch.stack(outputs, dim=1)) + +class CausalSelfAttention(nn.Module): + def __init__(self, d_model, n_heads): + super().__init__() + assert d_model % n_heads == 0 + + self.d_model = d_model + self.n_heads = n_heads + self.d_head = d_model // n_heads + + self.qkv = nn.Linear(d_model, 3 * d_model, bias=False) + self.out = nn.Linear(d_model, d_model, bias=False) + + def forward(self, x): + """ + x: (batch, seq_len, d_model) + """ + B, T, D = x.shape + + qkv = self.qkv(x) + q, k, v = qkv.chunk(3, dim=-1) + + # reshape for heads + q = q.view(B, T, self.n_heads, self.d_head).transpose(1, 2) + k = k.view(B, T, self.n_heads, self.d_head).transpose(1, 2) + v = v.view(B, T, self.n_heads, self.d_head).transpose(1, 2) + + # scaled dot-product attention + scores = (q @ k.transpose(-2, -1)) / (self.d_head ** 0.5) + + # causal mask + mask = torch.tril(torch.ones(T, T, device=x.device)) + # mask = torch.tril(torch.ones(T, T, device=x.device)).T + scores = scores.masked_fill(mask == 0, float('-inf')) + + attn = F.softmax(scores, dim=-1) + out = attn @ v + + out = out.transpose(1, 2).contiguous().view(B, T, D) + return self.out(out), attn + +class SSMTransformerBlock(nn.Module): + def __init__(self, d_model, d_state, n_heads, d_ff, layer_type): + super().__init__() + + self.layer_type = layer_type + + if layer_type == 'SSM': + self.layer = SimpleSSM(d_model, d_state) + elif layer_type == 'TF': + self.layer = CausalSelfAttention(d_model, n_heads) + + def forward(self, x): + out = self.layer(x) + if self.layer_type == 'SSM': + x = x + out + elif self.layer_type == 'TF': + x = x + out[0] + + return x + +class SSMTransformer(nn.Module): + def __init__(self, num_vocab, d_model, d_state, n_heads, d_ff, layers): + super().__init__() + + self.embedding = nn.Embedding(num_vocab, d_model) + + self.pos_emb = nn.Parameter(torch.randn(1, 100, d_model)) + + self.layers = nn.ModuleList([ + SSMTransformerBlock(d_model, d_state, n_heads, d_ff, layer) + for layer in layers + ]) + + self.lm_head = nn.Linear(d_model, num_vocab) + + def forward(self, x): + x = self.embedding(x.long()) + self.pos_emb + + for layer in self.layers: + x = layer(x) + + return self.lm_head(x) diff --git a/source/official-code/micro/generate.py b/source/official-code/micro/generate.py new file mode 100644 index 0000000000000000000000000000000000000000..8a084d5ca5b40a5d7ae42b0c0b552c58755c4c23 --- /dev/null +++ b/source/official-code/micro/generate.py @@ -0,0 +1,329 @@ +import torch +import numpy as np + +all_tasks = ["assoc_recall", "assoc_recall_mk", "binary_copy", "binary_encode", "binary_recall", "binary_recall_mix", "binary_recall_last",\ + "binary_recall_rep", "median_last", "parity", "read_write", "sparse_parity", "threshold", "var_copy"] + +def set_task_specific_parameters(args): + assert args.task_name in all_tasks, "Task not in list of all implemented tasks" + + if args.task_name == "assoc_recall": + args.num_numbers = 0 + args.vocab_size = args.num_vocab + 1 + args.data_name = "data_%d_%d" % (args.sequence_len, args.num_vocab) + + if args.task_name == "assoc_recall_mk": + print("Shifting the number of vocab to hits are as frequent") + args.size_query = 2 + args.num_vocab = int(1 + args.num_vocab ** (1./args.size_query)) + args.vocab_size = args.num_vocab + 1 + args.data_name = "data_%d_%d" % (args.sequence_len, args.num_vocab) + print("Current query length:", args.size_query) + + if args.task_name == "binary_copy": + args.vocab_size = 2 + args.num_vocab + 1 + args.data_name = "data_%d_%d_%d" % (args.sequence_len, args.num_vocab) + print("Using %d bits" % args.num_bits) + + if args.task_name == "binary_encode": + args.vocab_size = 2 ** args.num_bits + 1 + args.data_name = "data_%d_%d" % (args.sequence_len, args.num_bits) + print("Using %d bits" % args.num_bits) + + if args.task_name == "binary_recall": + args.vocab_size = 2 + 2 ** args.num_bits + 1 + args.data_name = "data_%d_%d" % (args.sequence_len, args.num_bits) + print("Using %d bits" % args.num_bits) + + if args.task_name == "binary_recall_mix": + args.vocab_size = 2 + 2 ** args.num_bits + 1 + args.data_name = "data_%d_%d" % (args.sequence_len, args.num_bits) + print("Using %d bits" % args.num_bits) + + if args.task_name == "binary_recall_last": + args.vocab_size = 2 + 2 ** args.num_bits + 1 + args.data_name = "data_%d_%d.pt" % (args.sequence_len, args.num_bits) + print("Using %d bits" % args.num_bits) + + if args.task_name == "binary_recall_rep": + args.vocab_size = 2 + 2 ** args.num_bits + 1 + args.data_name = "data_%d_%d.pt" % (args.sequence_len, args.num_bits) + print("Using %d bits" % args.num_bits) + + if args.task_name == "median_last": + assert args.num_numbers % 2 == 1 + + args.vocab_size = args.num_numbers + 1 + args.data_name = "data_%d_%d" % (args.sequence_len, args.num_numbers) + + if args.task_name == "parity": + args.vocab_size = 2 + 1 + args.data_name = "data_%d" % (args.sequence_len,) + + if args.task_name == "read_write": + args.num_numbers = 0 + args.vocab_size = args.num_vocab + 3 + args.data_name = "data_%d_%d" % (args.sequence_len, args.num_vocab) + + if args.task_name == "sparse_parity": + args.vocab_size = 2 + 1 + args.data_name = "data_%d" % (args.sequence_len,) + + if args.task_name == "threshold": + args.vocab_size = 2 + args.num_numbers + args.num_vocab + 1 + args.data_name = "data_%d_%d_%d" % (args.sequence_len, args.num_numbers, args.num_vocab) + + if args.task_name == "var_copy": + args.min_num_token = 5 + + args.vocab_size = args.min_num_token + args.num_numbers + args.num_vocab + 1 + args.data_name = "data_%d_%d_%d" % (args.sequence_len, args.num_numbers, args.num_vocab) + + + +def generate_seq(args, ood=False): + if args.task_name == "assoc_recall": + seq_in = torch.randint(0, args.num_vocab, (args.sequence_len,)) + seq_out = torch.zeros(args.sequence_len, dtype=torch.int32) - 1 # All empty tokens + + lookup = {} + for i in range(1, args.sequence_len): + lookup[seq_in[i-1].item()] = seq_in[i].item() + if seq_in[i].item() in lookup.keys(): + seq_out[i] = lookup[seq_in[i].item()] + + if args.task_name == "assoc_recall_mk": + seq_in = torch.randint(0, args.num_vocab, (args.sequence_len,)) + seq_out = torch.zeros(args.sequence_len, dtype=torch.int32) - 1 # All empty tokens + + lookup = {} + for i in range(args.size_query, args.sequence_len): + key = tuple(seq_in[i-args.size_query:i].tolist()) + lookup[key] = seq_in[i].item() + + key = tuple(seq_in[i-args.size_query+1:i+1].tolist()) + if key in lookup.keys(): + seq_out[i] = lookup[key] + + if args.task_name == "binary_copy": + seq_in = torch.randint(2, 2 + args.num_vocab, (args.sequence_len,)) + seq_in[torch.multinomial(torch.tensor([1-args.p, args.p]), args.sequence_len, replacement=True).to(torch.bool)] = 0 + seq_in[torch.multinomial(torch.tensor([1-args.p, args.p]), args.sequence_len, replacement=True).to(torch.bool)] = 1 + + seq_out = torch.zeros(args.sequence_len, dtype=torch.int32) - 1 + s = 0 + for i in range(args.sequence_len): + if seq_in[i] in [0, 1]: + s = (2*s + seq_in[i]) % (2 ** args.num_bits) + + if i-s >= 0: + seq_out[i] = seq_in[i-s] + + if args.task_name == "binary_encode": + seq_in = torch.randint(0, 2, (args.sequence_len,)) + seq_out = torch.zeros(args.sequence_len, dtype=torch.int32) + s = 0 + for i in range(args.sequence_len): + s = (2*s + seq_in[i]) % (2 ** args.num_bits) + seq_out[i] = s + + if args.task_name == "binary_recall": + seq_in = torch.randint(2, 2 + 2 ** args.num_bits, (args.sequence_len,)) + + seq_in[torch.multinomial(torch.tensor([1-args.p, args.p]), args.sequence_len, replacement=True).to(torch.bool)] = 0 + seq_in[torch.multinomial(torch.tensor([1-args.p, args.p]), args.sequence_len, replacement=True).to(torch.bool)] = 1 + + seq_out = torch.zeros(args.sequence_len, dtype=torch.int32) -1 + assoc = {i: -1 for i in range(2, 2 + 2**args.num_bits)} + s = 0 + for i in range(args.length): + if seq_in[i] in [0, 1]: + s = (2*s + seq_in[i].item()) % (2**args.num_bits) + + if i >= 1 and 2 <= seq_in[i-1] and seq_in[i-1] < 2 + 2**args.num_bits: # Is a vocab token + assoc[seq_in[i-1].item()] = seq_in[i] + + seq_out[i] = assoc[s+2] + + if args.task_name == "binary_recall_mix": + target = torch.randint(0, 2 ** args.num_bits, (1,)).item() + + seq_in = torch.randint(2, 2 + (2 ** args.num_bits), (args.sequence_len,)) # Only 32 possible tokens, can be set to more + temp = target + + bit_positions = np.random.randint(0, 2 ** args.num_bits - args.num_bits // 2, args.num_bits // 2).tolist() + bit_positions += list(range(args.sequence_len-1, args.sequence_len-1-args.num_bits // 2, -1)) + bit_positions.sort() + + for i in bit_positions: + seq_in[i] = temp % 2 + temp = temp // 2 + + assoc = {i: 0 for i in range(2 + 2 ** args.num_bits)} + for i in range(1,args.sequence_len-args.num_bits): + assoc[seq_in[i-1].item()] = seq_in[i] + + seq_out = torch.zeros(args.sequence_len, dtype=torch.int32) -1 + seq_out[-1] = assoc[2 + target] + + if args.task_name == "binary_recall_last": + target = torch.randint(0, 2 ** args.num_bits, (1,)).item() + + seq_in = torch.randint(2, 2 + (2 ** args.num_bits), (args.sequence_len,)) # Only 32 possible tokens, can be set to more + temp = target + for i in range(args.sequence_len-1, args.sequence_len-1-args.num_bits, -1): + seq_in[i] = temp % 2 + temp = temp // 2 + + assoc = {i: 0 for i in range(2 + 2 ** args.num_bits)} + for i in range(1,args.sequence_len-args.num_bits): + assoc[seq_in[i-1].item()] = seq_in[i] + + seq_out = torch.zeros(args.sequence_len, dtype=torch.int32) -1 + seq_out[-1] = assoc[2 + target] + + if args.task_name == "binary_recall_rep": + target = torch.randint(0, 2 ** args.num_bits, (1,)).item() + + repeat_length = torch.randint(4, 10, (1,)).item() + seq_in = torch.randint(2, 2 + (2 ** args.num_bits), (repeat_length,)) # Only 32 possible tokens, can be set to more + seq_in = seq_in.repeat(int(args.sequence_len / repeat_length) + 1)[:args.sequence_len] + + temp = target + for i in range(args.sequence_len-1, args.sequence_len-1-args.num_bits, -1): + seq_in[i] = temp % 2 + temp = temp // 2 + + assoc = {i: 0 for i in range(2 + 2 ** args.num_bits)} + for i in range(1,args.sequence_len-args.num_bits): + assoc[seq_in[i-1].item()] = seq_in[i] + + seq_out = torch.zeros(args.sequence_len, dtype=torch.int32) -1 + seq_out[-1] = assoc[2 + target] + + if args.task_name == "median_last": + seq_in = torch.randint(0, args.num_numbers, (args.sequence_len,)) + seq_in[-1] = 1 # Marks that the models should be outputting a median + + seq_out = torch.zeros(args.sequence_len, dtype=torch.int32) -1 + seq_out[-1] = torch.median(seq_in[-args.num_numbers-1:-2]) + + if args.task_name == "parity": + seq_in = torch.multinomial(torch.Tensor([0.5, 0.5]), args.sequence_len, replacement=True) + seq_in[0] = 0 # Distribution choice to make code simpler + seq_out = torch.zeros(args.sequence_len, dtype=torch.int32) + + for i in range(1, args.sequence_len): + seq_out[i] = (seq_out[i-1] + seq_in[i]) % 2 + + if args.task_name == "read_write": + # -3 is the read token + # -2 is the write token + # -1 is the ignore token + seq_in = torch.randint(0, args.num_vocab, (args.sequence_len+1,)) + seq_in[::2] = torch.multinomial(torch.Tensor([0.1, 0.1, 0.8]), args.sequence_len // 2 + 1, replacement=True).to(torch.int32) - 3 + + lookup = {} + for i in range(0, args.sequence_len, 2): + if seq_in[i].item() == -2: # Write token + lookup[i] = seq_in[i+1].item() + elif seq_in[i].item() == -3: # Read token + if i in lookup.keys(): + seq_in[i+1] = lookup[i] + # else leave it as is (random token) + + seq_out = seq_in[1:] # Shifted by one + seq_in = seq_in[:-1] + + if args.task_name == "sparse_parity": + seq_in = torch.multinomial(torch.Tensor([1-args.p, args.p]), args.sequence_len, replacement=True) + seq_in[0] = 0 # Distribution choice to make code simpler + seq_out = torch.zeros(args.sequence_len, dtype=torch.int32) + + for i in range(1, args.sequence_len): + seq_out[i] = (seq_out[i-1] + seq_in[i]) % 2 + + if args.task_name == "threshold": + threshold = args.num_numbers / args.p # this just seems to work, nothing more special than that + + seq_in = torch.zeros(args.sequence_len, dtype=torch.int32) + seq_out = torch.zeros(args.sequence_len, dtype=torch.int32) -1 + + lookup = {} + s = 0 + for i in range(args.length): + if torch.rand((1,)) > args.p: + # Add a random vocab token + seq_in[i] = torch.randint(args.num_numbers+2, args.num_numbers+args.num_vocab+2, (1,)) + else: + # Add a random number token + num = torch.randint(0, args.num_numbers, (1,)) + seq_in[i] = num + 2 + s += num # ... which is added to the sum + + if s < threshold: + seq_out[i] = 0 + else: + seq_out[i] = 1 + + if args.task_name == "var_copy": + vocab = torch.randint(args.min_num_token+args.num_numbers, args.min_num_token+args.num_numbers+args.num_vocab, (args.sequence_len,), dtype=torch.int32) + numbers = torch.randint(args.min_num_token, args.min_num_token+args.num_numbers, (args.sequence_len,), dtype=torch.int32) + mask = torch.rand_like(vocab, dtype=torch.float) < args.p + + seq_in = torch.where(mask, numbers, vocab) + seq_out = torch.zeros(args.sequence_len, dtype=torch.int32) -1 + + number_seq = [(i, v) for i, v in enumerate(seq_in) if args.min_num_token <= v and v < args.min_num_token+args.num_numbers] + for i in range(len(number_seq)-1): + this_i = number_seq[i][0] + this_v = number_seq[i][1] + next_i = number_seq[i+1][0] + next_v = number_seq[i+1][1] + + if next_i-this_v > 0: + if this_i-this_v >= 0: + seq_out[this_i:next_i] = seq_in[this_i-this_v:next_i-this_v] + else: + seq_out[this_v:next_i] = seq_in[:next_i-this_v] + + if len(number_seq) > 0: + this_i = number_seq[-1][0] + this_v = number_seq[-1][1] + + if this_i-this_v >= 0: + seq_out[this_i:] = seq_in[this_i-this_v:-this_v] + else: + seq_out[this_v:] = seq_in[:-this_v] + + return seq_in, seq_out + + +def generate_data(args, all_at_once=True): + sequences_in = [] + sequences_out = [] + + if all_at_once: + print("Generating Data") + for i in range(args.batch_size * args.batches_per_epoch): + if i % 8000 == 0: + print("- Sequence Num:", i) + seq_in, seq_out = generate_seq(args) + + sequences_in.append(seq_in) + sequences_out.append(seq_out) + else: + for i in range(args.batch_size): + seq_in, seq_out = generate_seq(args) + + sequences_in.append(seq_in) + sequences_out.append(seq_out) + + x_in = torch.stack(sequences_in) # (batch_size, max_len) + x_out = torch.stack(sequences_out) # (batch_size, max_len) + + # Shift -1 + x_in = (x_in + args.vocab_size) % args.vocab_size + x_out = (x_out + args.vocab_size) % args.vocab_size + + return x_in, x_out \ No newline at end of file diff --git a/source/official-code/micro/interpretability.ipynb b/source/official-code/micro/interpretability.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..a9a2d0377fc1eb696244644878472198c31bf8fb --- /dev/null +++ b/source/official-code/micro/interpretability.ipynb @@ -0,0 +1,407 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "e90f90dd-be7b-4706-8fa6-fff9abe22192", + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "6c055b4d-336a-4963-9c87-3a0da5935e96", + "metadata": {}, + "outputs": [], + "source": [ + "import subprocess\n", + "from concurrent.futures import ThreadPoolExecutor, as_completed" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "7ce02c2d-750e-4405-af82-495ae08b59a0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['python3 train.py --run_number -1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --num_epochs 100 --save_path interpret.pt']" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "command= ['python3 train.py --run_number -1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --num_epochs 100 --save_path interpret.pt']\n", + "command" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "8b875c1d-ea18-4e4d-80a3-f9bbc8880ef4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(['python3 train.py --run_number -1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --num_epochs 100 --save_path interpret.pt'],\n", + " 0,\n", + " 'Generating Data\\n- Sequence Num: 0\\n- Sequence Num: 8000\\n- Sequence Num: 16000\\n- Sequence Num: 24000\\n- Sequence Num: 32000\\n- Sequence Num: 40000\\n- Sequence Num: 48000\\n- Sequence Num: 56000\\nStarting work for results/data_100_5_30/run-1.pt\\nLoss: 2.7080, Acc: 0.2483\\n',\n", + " '')" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def run_command(cmd):\n", + " \"\"\"Run a single shell command and return (cmd, returncode, stdout, stderr).\"\"\"\n", + " result = subprocess.run(cmd, shell=True, capture_output=True, text=True)\n", + " return cmd, result.returncode, result.stdout, result.stderr\n", + "\n", + "run_command(command)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f92e83f8-a718-412c-9a46-0afd43319018", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "9c0b1f58-6964-44e8-888a-d03c77da2484", + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "import matplotlib.pyplot as plt\n", + "from generate import generate_data, set_task_specific_parameters\n", + "from models.transformer import generate_mask, scaled_dot_product_attention, SimpleHandmadeTFLayer\n", + "from models.ssm import SimpleSSMLayer" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "2fafc39f-b2f9-436e-824d-bf39b55f41db", + "metadata": {}, + "outputs": [], + "source": [ + "class args:\n", + " batch_size = 1\n", + " batches_per_epoch = 1\n", + " task_name = \"var_copy\"\n", + " min_num_token = 5\n", + " num_numbers = 5\n", + " num_vocab = 30\n", + " sequence_len = 100\n", + "\n", + "set_task_specific_parameters(args)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "bedcc2e9-3a59-4f90-b119-a9b8b948ade7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating Data\n", + "- Sequence Num: 0\n" + ] + }, + { + "data": { + "text/plain": [ + "tensor([[18, 17, 11, 19, 6, 22, 6, 25, 38, 5, 39, 39, 24, 38, 9, 29, 20, 14,\n", + " 5, 5, 5, 21, 14, 5, 36, 35, 28, 8, 5, 8, 6, 25, 38, 9, 7, 16,\n", + " 30, 14, 13, 7, 18, 14, 30, 5, 7, 26, 6, 27, 39, 35, 17, 10, 9, 22,\n", + " 35, 21, 22, 24, 39, 39, 18, 30, 5, 8, 5, 8, 25, 39, 5, 6, 28, 8,\n", + " 34, 19, 31, 7, 6, 12, 36, 11, 8, 23, 10, 30, 35, 17, 19, 14, 8, 10,\n", + " 38, 13, 13, 38, 17, 9, 29, 5, 23, 23]], dtype=torch.int32)" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "in_data, out_data = generate_data(args)\n", + "in_data" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "d74c8b86-6493-4bdf-914a-4131e24b56a5", + "metadata": {}, + "outputs": [], + "source": [ + "model = torch.load(\"saved_models/interpret.pt\", weights_only=False).to('cuda:0')\n", + "mask = generate_mask(args.sequence_len).to('cuda:0')" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "e8466863-faa0-425b-a3e0-64931805f276", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "HybridModel(\n", + " (embedding): Embedding(41, 12)\n", + " (layers): ModuleList(\n", + " (0-1): 2 x SimpleHandmadeTFLayer(\n", + " (transformer_encoder): TransformerHead(\n", + " (mha): MultiHeadAttention(\n", + " (q_proj): Linear(in_features=12, out_features=12, bias=True)\n", + " (k_proj): Linear(in_features=12, out_features=12, bias=True)\n", + " (v_proj): Linear(in_features=12, out_features=12, bias=True)\n", + " (out_proj): Linear(in_features=12, out_features=12, bias=True)\n", + " (dropout): Dropout(p=0.2, inplace=False)\n", + " )\n", + " (norm1): LayerNorm((12,), eps=1e-05, elementwise_affine=True)\n", + " (norm2): LayerNorm((12,), eps=1e-05, elementwise_affine=True)\n", + " (ffn): Sequential(\n", + " (0): Linear(in_features=12, out_features=12, bias=True)\n", + " (1): ReLU()\n", + " (2): Dropout(p=0.2, inplace=False)\n", + " (3): Linear(in_features=12, out_features=12, bias=True)\n", + " )\n", + " (dropout): Dropout(p=0.2, inplace=False)\n", + " )\n", + " )\n", + " )\n", + " (decoder): Linear(in_features=12, out_features=41, bias=True)\n", + ")" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "9d61b9cf-38d0-4a18-97fc-75eed286fbee", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4193" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sum(p.numel() for p in model.parameters() if p.requires_grad)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "0bdb809b-fdaf-4961-87fa-1ce2ec444ff1", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "if type(model.layers[0]) == SimpleHandmadeTFLayer:\n", + " layer0 = model.layers[0].transformer_encoder\n", + " q_proj = layer0.mha.q_proj.weight.to('cpu').detach()\n", + " k_proj = layer0.mha.k_proj.weight.to('cpu').detach()\n", + "\n", + " plt.imshow(torch.matmul(q_proj, k_proj.transpose(-2, -1)))" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "b3945736-3161-4840-b4b8-d2878771ed94", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGgCAYAAADsNrNZAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAPC1JREFUeJzt3X9wXNV58PHn3l1pJdv6Ycu2ZGEZK4TUBMgbgsEYaJsGT5mUtBA8aZk6rUMypUnkgPFMCE5jOiEBkXQmoWQcKEzqkBZCw/sWkpKWvLwmYYZgftgpJA7BdoLBxrbkn5Js/dbe8/4hd/ec51q7XlvSuSt/PzOa2bv37u79sdLRPc85zxMYY4wAADDJQt87AAA4M9EAAQC8oAECAHhBAwQA8IIGCADgBQ0QAMALGiAAgBc0QAAAL2iAAABe0AABALyYsAZo/fr1snDhQqmqqpIlS5bIyy+/PFEfBQAoQ8FE5IL7t3/7N/nrv/5reeCBB2TJkiVy7733yuOPPy7btm2TuXPnFnxtFEWyd+9eqampkSAIxnvXAAATzBgjR48elebmZgnDAvc5ZgJceumlpq2tLbeczWZNc3OzaW9vL/ra3bt3GxHhhx9++OGnzH92795d8O99WsbZ0NCQbNmyRdauXZt7LgxDWbZsmWzatCm2/eDgoAwODuaWzfEbsrd/sVBqZ4y2nB99z4XjvZsAgAkyIsPyvPyn1NTUFNxu3BuggwcPSjablcbGRuf5xsZGeeONN2Lbt7e3y5e//OXY87UzQqmtGW2A0kHFeO8mAGCijN5HFA2jjHsDVKq1a9fKmjVrcss9PT3S0tIin3r796VieqWIiPQuf09u/fT/89Kk7yMAYPyNewM0e/ZsSaVS0tnZ6Tzf2dkpTU1Nse0zmYxkMpnx3g0AQMKN+zDsyspKufjii2Xjxo2556Ioko0bN8rSpUvH++MAAGVqQrrg1qxZIytXrpTFixfLpZdeKvfee6/09vbKjTfeeNLv8ZdzNsn0mpSIiNz7y5m557PjvrcAAB8mpAH6i7/4Czlw4IDccccd0tHRIe9///vl6aefjg1MAACcuSZsEMKqVatk1apVE/X2AIAyRy44AIAX3odhj+U9lV1SU3m8fTx4xO/OAADGHXdAAAAvaIAAAF7QAAEAvEhsDKgpVS21qdH2Mdvd43lvAADjjTsgAIAXNEAAAC8S2wX3z90LpSp7fPcuPT+/4sVf+tkhAMC44g4IAOAFDRAAwAsaIACAF4mNAf3vd94v6emjheoGL5iee77hRV97BAAYT9wBAQC8oAECAHhBAwQA8CKxMaD+pxslVVklIiI1B0dyzx/9i8uc7eq3dDrL0Vu7c4/NyIgAAJKJOyAAgBc0QAAAL2iAAABeJDYGVH0gK+mKrIiIZA4O5Z7vW1TtbDc8r95ZTncezD02R49O3A4CAE4Ld0AAAC9ogAAAXiS2C27GE5slHVSIiEiQyeSen9PT6mx3cPFMZ3noAxfmHs//0R5nXbT/oLNsBgfd5chYG2dL32kAwEnjDggA4AUNEADACxogAIAXiY0BhdOqJQwqRx/PrM893980w9muotc4y/Xb+3OPTcptX4NUyv0QK7YkIhJk83Efk3W3NcNDAgAYP9wBAQC8oAECAHhBAwQA8CKxMSAzNCwmOP64tzf3fKrPLbGQrlZxHisklJ3lxovS2cj9kENH3M+0YkBi1LYAgHHFHRAAwAsaIACAF8ntghsZEROM9sFFvfmh1RVv7Ha2S7U2O8sDc6tyj0eq3GHWM1QXXGpApeIx+f47MzR8CnsNADhZ3AEBALygAQIAeEEDBADwIrExIJs9PDp7uMtZl1JxnWnds3KPB+fXO+uijHu4vUvPdpZrtuXfO7Wnw1mX7eoeewePx6ryO2xOvB0AIIc7IACAFzRAAAAvaIAAAF6URQwoCPMxlrC+zl05q37M1x1dUOksVx1xSyzUvvyOsxx19+QemyHKLwDAROIOCADgBQ0QAMCLsuiCMyP5DNjZg4fclXrZMnP77wq+7+G/vMxZ7p2Xb4+r96tKq/+yacz3CdIVzjLVUwGgOO6AAABe0AABALygAQIAeFEWMaCJMvM1tyJqz9kN+cetbnqd+gLvE6TcdtxQyQEAiuIOCADgBQ0QAMALGiAAgBdndAwo2r7TWT7ruXw577c+Mu2k36f36vc5yzNecN/X9PXlP7O3t5RdBIApizsgAIAXNEAAAC9ogAAAXiQ2BpSaPVtS4Wg5hezBg/kV41juWudsC154Lfe49cWU3nxM/Q3uthXvW+Au9+Q/J33oqPviIXfSkOlx19tlIaKBgZPeJwBIOu6AAABe0AABALxIbBdckE5JEB7v2hrHbreTFmVPetMZe0cKrh+qy1dmzQy7w7uDY/3Osjnifm40RF4fAFMTd0AAAC9ogAAAXpTUALW3t8sll1wiNTU1MnfuXLnuuutk27ZtzjYDAwPS1tYmDQ0NMmPGDFm+fLl0dnaO604DAMpfSTGg5557Ttra2uSSSy6RkZER+eIXvyh//Md/LK+//rpMnz5dRERuvfVW+fGPfyyPP/641NXVyapVq+T666+Xn//85yXtmKmvEZPKjC7s6yjptZOt+nduWXBTXeksR9Pyy4Nz3RhQOLPKWa481OW+eT9DrwFMTSU1QE8//bSz/N3vflfmzp0rW7ZskT/4gz+Q7u5u+c53viOPPvqofOhDHxIRkQ0bNsh5550nL774olx22WWx9xwcHJTBwcHcck9Pz6kcBwCgzJxWDKi7u1tERGbNmiUiIlu2bJHh4WFZtmxZbptFixbJggULZNOmTSd8j/b2dqmrq8v9tLS0nM4uAQDKxCk3QFEUyerVq+WKK66QCy64QEREOjo6pLKyUurr651tGxsbpaPjxN1oa9eule7u7tzP7t27T3WXAABl5JTnAbW1tcnWrVvl+eefP60dyGQykslkCm8UWOWxfcwJKkLHfCRS662S3RVdg+6mlSrlT9q9JEEqv96UMDcJAJLulO6AVq1aJU899ZT89Kc/lfnz5+eeb2pqkqGhIenq6nK27+zslKamptPaUQDA1FJSA2SMkVWrVskTTzwhzz77rLS2tjrrL774YqmoqJCNGzfmntu2bZvs2rVLli5dOj57DACYEkrqgmtra5NHH31UfvjDH0pNTU0urlNXVyfV1dVSV1cnn/rUp2TNmjUya9Ysqa2tlc997nOydOnSE46AK8RUpsWkRncvrK7OPR9Z1UWTIti1z1229ldEZLA5f5dYeUil1gnUJZhV5yyGI/k0P9kjbvZuAChnJTVA999/v4iIfPCDH3Se37Bhg3ziE58QEZFvfvObEoahLF++XAYHB+Xqq6+Wb3/72+OyswCAqaOkBsicxACAqqoqWb9+vaxfv/6UdwoAMPWRCw4A4EVyyzH0DUrwPyOQq610NQmMAZmsGncducv9DfnTXPWOGwMKj7nDsiUMnMWgdkZ+4ciRU99JAEgY7oAAAF7QAAEAvKABAgB4kdgYkFSkRY7PAwqq8jGgVMMsZ7PoWK+zbAZVTGUSREePuk+o5drHDuQXZs92X7vQzRBhUm4MyNTnyzekK9TlOtLtLGbtZdL2AEg47oAAAF7QAAEAvEhuF9zQsMjxLNJmIF8VNKiZ4WwWBm6XVZTNdz0ZK42NV/YEXtVFGAyqYdkD7rKpqsg/nuZmDQ+Hp7vvZXVHmkG64AAkG3dAAAAvaIAAAF7QAAEAvEhsDMh07BcTjFYaDaZNG3M7e4i2iEhQ2Z9/j6TEgCxR/4CzHPxOlSBXx5p9z1n511a4/y+krPiQiEiq51j+dR6GowNAKbgDAgB4QQMEAPCCBggA4EViY0BRX79EwWgMJwzz7WR0dqOzXdjT7yzL4QnftdNiRoYLLgcqbpU+XJ973HvOTPfN3ClQkp5mlQKndAOAhOMOCADgBQ0QAMALGiAAgBeJjQGN5k8bzaHmlDvYvNXZrFDGs1DNEar5f27utO4rD53OHp4aOy/ciVar+TvZ3+zIPa76TeG3tqNHoZpPNHjle53liv+7ufCbAcAE4w4IAOAFDRAAwIvkdsFZgorK3ONUgzsU2cyqczcesoY173e72Lp/X43RVqUc3Dcu3FU2WVIzreNtcqupDje4XYqp/vyxh3vdY888/7qzHFnHHqRSzrokpjACMPVwBwQA8IIGCADgBQ0QAMCLsogBmeGh3OORjk53pV62pBpmOcvRle93lo8scodpNz61M/85+zpK3MuJkbVT6qj0Ovq/Bztqlc2o8t1qWLa56D25x+m97vuOvLVLvXEy4mEAphbugAAAXtAAAQC8oAECAHhRFjGggkJ3DktYmS9Trct1V/52n7M8K+uWdpBMfr5RWFPjrHLSAWl6PtF4xkwKzFUK0m5Jbgnz24bVqlT5DHfOUPpA/niiOjWfSB179liv+zlRoQRIAHByuAMCAHhBAwQA8KL8u+BUd1A0kF+O9uwt/NLfa3aWR+bm0/qkqt1hzPKbAl1wE6lAd549PF3Lqqza0tXtLKbPbsk9Hmp20xlVzpvrbtvrVp2NDueHbUd9fWPuAwAUwh0QAMALGiAAgBc0QAAAL8o/BlSIGsL89pcvc5an73E3n/svb+QeZ/vduEdBZZCqJlCpecz06tzj9KZfO+ti8SMAmADcAQEAvKABAgB4QQMEAPBiaseAVGzm7Ds2Fdw8aMzPf0m1tjjrsr/eNubrQpXyJ9IxlATEiIzap+zr23OPU7/3bmfdUHOts9w7r9JZrttmzYn65Q73cwrMTQIAG3dAAAAvaIAAAF4ktwsuCPLDqCepCyt74FDucSp78hmfzYXnOsupt9xqqmZgIPc4OnastJ0KrP8RJigLdfTWbmc5c6zBWU71usvZafkuuYqF8511Zo977IGVnTzbo46drNrAGY07IACAFzRAAAAvaIAAAF4kNwbkgxWTiFT5goJUjCqw0tyIiATpfNVWo1L8mGKxpkmIk8SGaB885Cyn027V2YFz8sPVzXR3CHpY5w7hljD/P06gyjoYE6kd8T9cHcDk4Q4IAOAFDRAAwAsaIACAF4mNAYWZSgmD0fkmkTWPZrKYkZGT3jYYcLc1Feq0TsvHSUIdAxpWr1XxGCdGNEkxEjPkptOJDh52ljPHevMLjbPdF1vzfkREzIxpucehuo6m1y3n7aQwIh4ETHncAQEAvKABAgB4QQMEAPAisTGgoLZWgvB4zrGExwbCIz3qCbddN/ZcmJn1zrpgxJ3nEx0+4r6234qbmEnKnabOcdTvxm4C63qEoTtHyOh5S5l83rhAzxFKu1+/4HBX/n0o6wBMedwBAQC8oAECAHiR3C646owEYeb4gtVOTlY3VAlG9nU6y2FVxlkOavPVVaNqt7poMOweTzg87CybofxyrHtrsqjPtTPoZA8edLdV3Xcpq5st2zzHWRdWqXNxNF+uwYy45yGJXa8ATg93QAAAL2iAAABenFYDdM8990gQBLJ69erccwMDA9LW1iYNDQ0yY8YMWb58uXR2do79JgCAM9Ipx4BeeeUV+ad/+id53/ve5zx/6623yo9//GN5/PHHpa6uTlatWiXXX3+9/PznPy/tA7JRLtiQbszHDkb2dYz1isTQJRYCK91O2F2kJPc0t5RDqiKf2mZkzz71QQkoZxCo/2F0jM4awp060KVeG7jLVhqf1PTpzqrsgQOnuocAEuqU7oCOHTsmK1askIceekhmzpyZe767u1u+853vyDe+8Q350Ic+JBdffLFs2LBBXnjhBXnxxRdP+F6Dg4PS09Pj/AAApr5TaoDa2trkmmuukWXLljnPb9myRYaHh53nFy1aJAsWLJBNmzad8L3a29ulrq4u99PS0nLC7QAAU0vJDdBjjz0mv/jFL6S9vT22rqOjQyorK6W+vt55vrGxUTo6Ttx1tnbtWunu7s797N69u9RdAgCUoZJiQLt375ZbbrlFnnnmGamqqir+gpOQyWQkk8nEV4TB6I+4ZazDmhpns1iJ6xLKKIwbPU9m0F3Obv9d7nGqVqWjmTfXXY5UXCeVnyuTnuuWPoiOuvGkqM8qbzBZ8aAic5OyVpdqqK5NqNIS2al5gow7Ryg1u8H9WHXsTgkJ5gwBZaGkO6AtW7bI/v375QMf+ICk02lJp9Py3HPPyX333SfpdFoaGxtlaGhIurq6nNd1dnZKU1PTeO43AKDMlXQHdNVVV8mvfvUr57kbb7xRFi1aJF/4whekpaVFKioqZOPGjbJ8+XIREdm2bZvs2rVLli5dOn57DQAoeyU1QDU1NXLBBRc4z02fPl0aGhpyz3/qU5+SNWvWyKxZs6S2tlY+97nPydKlS+Wyyy4rbc8Gh3NdcLZAVdwUNeTZRwXRUuhqo2Gv24WohyabmnxFUT1EO8i63XV2lmovXZFF6OHpUc9RZzmwj1118QY6c3al20UnUf5ak0kbKA/jngvum9/8poRhKMuXL5fBwUG5+uqr5dvf/vZ4fwwAoMyddgP0s5/9zFmuqqqS9evXy/r160/3rQEAUxi54AAAXiS2HMNI536R4Hi8x6q6maqd4WwXnOWOrgvtcgfb33LWRXZl1ROZhJhRNOBWF43e2VNw+9BKSRPoYdgL3WNPWfGx6NBhZ52OCel4jLtyYs6DUedfLzuO9TqLsRIXKlVPOCc/TDu7e6/7OfpY7RRGCYwTAmcK7oAAAF7QAAEAvKABAgB4kdgYkC1I5WNAQX2du3JE9e+/le//z6p4S1lQ84CCGflYx3DzTGedSbvbpqw0PjrWVG6CCverGda6KZikwp0PZo7mY0bMAwLKA3dAAAAvaIAAAF6URRecGRnOP1ZdM0ZlTQ6tCpw6+3KkMmcncgiu2qfsgUO5xxW626lKpaOxpObMcZ9QQ56zCS/8p1MW6WHkdresiEhgDdPWGcf1e5V79yQwVXAHBADwggYIAOAFDRAAwIuyiAHZcZHsjjcLbmoXKEjPc1PV/G7d/3KWz/nyf7uvTWJswKo4OlIkbY8tpYarm3fNd5aDrdvz6xJYuiEWCzt4aIwN42LxL33sv8lXqC2YDgjAhOIOCADgBQ0QAMALGiAAgBflEQOyyjEEqkx3OG2au211vpSzidyS1e/+2uvuttPd14Zhvj0uNg/FodLnjOf8oiCTn98Sm/tS7ZatdsqTB+7/FmGHG0OJqvPlvUNV5jzqOeYs2/OwRp+YhPlT+pyq44mn6snP/TFHVanvt9UcIuucGnVOC173Ytd5Ar8HwFTEHRAAwAsaIACAFzRAAAAvEhsDCioqJThektvu74/10atlsZajIRW7iNzSDXYsQESVfVDrCsWAQiueIlKk3HVUOC4QpFSsw3rvWElrfXzW58bOU7f7uc6x6s9U5a+l0PQo48bZ9LGHdrwlW3hb+710bK/YfB3T15d7HJvPpV4bVOZz6MXiavq6W9dLb6tjY6k6Nwddtqu74D4DZzrugAAAXtAAAQC8SGwXnBkeEhOY3OMxtzuNNDLhuxc6y0GvVa5BdRdFvb0ylvEs82BUr5pMUHqgcE5DfqHOrTYaHnWPVZe8MMfy66PBwkO0TzW9UaHzLSIi6roX7KJT+5SaWZ9fUN2NutxHqvNgfp3+TPW9zHYnu8QFkDTcAQEAvKABAgB4QQMEAPAisTGgSWH174uImPr8MNpAp1WZYszRfLqdYPZMd6WK+QQqVY8ZtGIfSSxhUURkHXs4zR1CL2l3qLWd2inQcaY+d5HUO0BpuAMCAHhBAwQA8IIGCADgxRkdA9JlnkNrfkvQMOuk3yc1e7azHKkULE7KmahAmp5JFFmpa1J797sr692UMmaaW/bBjgmFUZH5UlYpjcQcu72Pe1XqoNkN7sZWLNCc5ZZ4F1W2IqW+M9kDB059J4EzAHdAAAAvaIAAAF6c0V1wqTlznOXAGoJrqjN68zFFR444y6eTHmiyhNOn5x4HM6a7K1WW7WBEdZ1Z3W7Z/iLDsBPS7Wazjz2sr3PWmVr3XASHre7U/YfdN1KZwLOH1HoABXEHBADwggYIAOAFDRAAwIszOgZUcJhsCal4Ui1nOct2mpvRD7JiJjplv4ojTFY6F3sosh46HaTdr4WOk8jc/FDltC7VcERVAbWOLzqmyjx4ipUVOnbZ6173VI1VquKsRmddWlWSFZXWZ+TNt3KPgwp1nkZ03Q17JSl9cGbgDggA4AUNEADACxogAIAXiY0BBRWVEgSjKV8KleSeMKX0w6t0NJJKjbkc6hLQWXeejBlWcREP82hi+6RiN4FdrlzNIQpqZ7hvZpVuCPSxBe7/P05cxFccRJcUt1IWhfvd1E1GxcoKRQ3D6W58KOpXW0f5z/XyfQc84A4IAOAFDRAAwIvEdsGF06skDEaHrma7kt0lobuotKDCqiiqhuoGqrsulkl7yOrumqxuKd0NpVLz2Kl6VGejiKqeGoT5/3GCap1V2x2aHB09mt+FhKQzsvcjUtmvAzUM27nOSjDD7ZoM1XU31jmlCw5nCu6AAABe0AABALygAQIAeJHYGJCEqVw1TTuNSRL7x40qSaBT2ZhGq2LqAbd0gz38VkQkVHESY6UEigaKlD4YL8XSEFlDw82Qez2iri5nOTXXKnmhh6frmJa9Xp2XRJR1UGmTogH32IPBEr6boXsugrR1vPr8k5oHUxR3QAAAL2iAAABe0AABALxIbgzImFwcIJxVn3s627nf0w6NLRoYdJaDlDuHJdXbn3tsdCxDxTqCajVPqCofE4r2q/k4E1XKQb+PGTv+YqeqOdFr7dIUeh5Q7Nit2EdYV+usy6rYko+4SLG5ScaaxxSjX6u/B1bcMBU7dlXiwo4RER9CGeMOCADgBQ0QAMALGiAAgBcJjgFFIjIa4zB9+RhKWKXmyeiYg53yf7LmjqhYjBlxl7N79uUeBxm3HEOgyzMMj12qOaVKH8TKJvjIJ1YkBqHnCdn0fCkJx/5/KJw2zX1CH7u1H2bQjclNlkIxIvs7LBL/3gZV1rwgVaYinO5ed+d9VJ6+JM6TA8bCHRAAwAsaIACAF4ntgjMDg2KC490UTkp/NUxZp0eRfLoap5SBiLchq8YebqxLG+h9UmlYggrrEulSB9mxU9s41UVP9DmTxDl2VRE1Vv3VvpYqbY8u3aC7PQPrc7K+uuB0+iB7neqK1F1whcSO3S4DobugE3LdgZPBHRAAwAsaIACAFyU3QHv27JGPf/zj0tDQINXV1XLhhRfK5s2bc+uNMXLHHXfIvHnzpLq6WpYtWyY7duwY150GAJS/kmJAR44ckSuuuEL+6I/+SP7rv/5L5syZIzt27JCZM2fmtvn6178u9913nzz88MPS2toq69atk6uvvlpef/11qVJDqAsxRsTIaP91UKw8gM3uh/dUwjq+3ipfoNeFKuajhiYHs/Ln1uhtdUyl0xrqm5S+/6jAsetUQtbw47By7PLWIiIyrGIf2QSUaygw7L+kEuP6WPTvjf09iJIR5wRORUkN0Ne+9jVpaWmRDRs25J5rbW3NPTbGyL333itf+tKX5NprrxURke9973vS2NgoTz75pNxwww2x9xwcHJRBK2jc09NT8kEAAMpPSV1wP/rRj2Tx4sXysY99TObOnSsXXXSRPPTQQ7n1O3fulI6ODlm2bFnuubq6OlmyZIls2rTphO/Z3t4udXV1uZ+WlpZTPBQAQDkpqQF688035f7775dzzz1XfvKTn8hnPvMZufnmm+Xhhx8WEZGOjg4REWlsbHRe19jYmFunrV27Vrq7u3M/u3fvPpXjAACUmZK64KIoksWLF8vdd98tIiIXXXSRbN26VR544AFZuXLlKe1AJpORjEpPIzKaTsUEUe5xbofnzna3S6m0JUFXfn+P6hQ5JfTDTxQVJzCDetmdwxK9lZ/XlG6c46wTHS+yUvWEah5NIlK2FEuNZMXKsofd0uWp+np3W1XawZ4HFOhj1TEVD+W9T6eUQ2qaLtFhpSUacVMUhRVu7Mz0qxRASfgdAI4r6Q5o3rx58t73vtd57rzzzpNdu3aJiEhTU5OIiHR2djrbdHZ25tYBACBSYgN0xRVXyLZt25zntm/fLmeffbaIjA5IaGpqko0bN+bW9/T0yEsvvSRLly4dh90FAEwVJXXB3XrrrXL55ZfL3XffLX/+538uL7/8sjz44IPy4IMPisjocOnVq1fLV7/6VTn33HNzw7Cbm5vluuuuG5cdHtn59klvq4c072+73Fmeu/6FcdmnCWV1F43sO3Ec7UT0sYcL3cEd2d/uPL39mmhqOHH2yJExNoxLzz/LWR5ucbttg02vnfp+eZA9eMh9Qi9bdObsgT++yFnO/Ocr47ZfwOkqqQG65JJL5IknnpC1a9fKnXfeKa2trXLvvffKihUrctvcdttt0tvbKzfddJN0dXXJlVdeKU8//XRJc4AAAFNfyclIP/KRj8hHPvKRMdcHQSB33nmn3Hnnnae1YwCAqY1ccAAALxJbjsER5ocU66qgwXR3GKpdUTQ6esxZVxYxH8WuBBrW1TrrzAz32O3hx9HhLmdd9FaB+VU61VES0rmE7jDyUFWODfQwbKtkwcheN1YW7Nk7zjs3uXQ12HBOQ35BlYCIDh12ljP/tVmApOIOCADgBQ0QAMALGiAAgBflEQOy5sJkdbZsvWzHM4rEMlLvOWfMdeadfe4u9PWN/UYTGEOxP7fgPpQo3ZTP1zf8LjdLRcVON5NF1O2e4/HcjzGpdDmxzzyNfbDnCZkqt9y12bff/dz+fCqkQJXDiKW1maDvgT726O2JOf/plvnOcrYjfy68pG7ClMcdEADACxogAIAX5dEFVwqr28PuZhIRGTzPTdESvvSGsxz1n2JF0SQMW1ZSc9zM2SPvbnaWs7/IH3vw4kF3Ww/ZoseTTkcj57hpiKLtb+Ufq+zjha6lLuAa38D/9yDVONdZjlrcZbN565ivHdn9zoTsEzAW7oAAAF7QAAEAvKABAgB4MfViQJaRDnc4cUotB+e+y11v9+Ef7XXWZTvd4blJlz1wwFkO1HLYMCu/0OiWK5BDXc6i6VNVNa1YWRIrbEa97rWTX7qxvtTsfCqb9Dw3TijD7vFEVukDo2I8unptEsS+pyV8b9NnuXFCY6WysoejizAsG+ODOyAAgBc0QAAAL2iAAABeTOkYkE7pH6TcZT1vI+i1YhvZEubCqM/RaWS80GlhAvW/hlWyO+hxYyaxuE6kJsDY51GfpwTMhYnR34OMVdpBxzZOZ/+T8D0odt0L7JOOaTnnItTvq5bdFxbaQyCHOyAAgBc0QAAAL2iAAABeTO0YkOrvNmo5+9udY740SJ/8qUkvcHPMRYeOuBvYZcJLyD02uiMnX16i4PsadewF5oc4MRIRCXUZ9LS1rOJF2SPd7msrK3KPSz728aKu+0iBEt36utvLqTnufKlsp5pb9a4F7vptvx3zfQuWcjid81Lkuhd86TE3FmiXOQ9q3XLw+pwGVtnwkXf2lLSP9vctiXOrMHG4AwIAeEEDBADwYmp3wZ2GkoZhK7HuFnthaFjclQkYsq0YlY7GDLjdIkFVCW9Wke+CK4tjL3TdY91b7vD0qLZ6zJcW7YJLgEhdnzDM/38am8KgmEzF2Cv1UHB13QOr+5EB3GcW7oAAAF7QAAEAvKABAgB4QQxoPKgYSSw9ja1oXWe9vf9ecd3/H1RbsQ51rGGVO4S73DmxG5V+JrSGHouIBHsPOct2lKdozCcB1znGuu7BNBXfUtfddPXkt7WGb4vEY4pabHg+zhjcAQEAvKABAgB4QQMEAPCCGNBYTqdPvtKdE+HEUHr71Ockby6MjlPF4hcD+RIGOm2PnkcTWusDldK/1HDYpNBlt7PWTqoYkBlSZamrC8S/9DyaJJax0BfESiFlBtyyFTrO46xTx1osBoQzF3dAAAAvaIAAAF4ktgsurJkhYTB6mx8dPep5bwqLdLeaEqTy7XyqTmUVTrn/A0Td7rGaESs9ymR106jPifr73fXWcljtDs8Nq1WeHqvbLaypUZ+jUtlY2ZiTkqrGDOe72Ub27HPW6S7FoPvYmO8T1te5T+jqo1YanKiv8Pdpwujrbne7qf0NVddrYF1bnXYoNWeGs6wzsaes12Z7egRnDu6AAABe0AABALygAQIAeJHYGFAQBLk07XafclJiAzY9HDeWumb2rPy2XaqPO+vGQQKdysbqhrfjEV5ZsQI97DrqduNFqfr6sd9Hp+m3l0M1bDlK3nD12HexlOujjj2wh+73u7GlZAzRVsPT9fKRfBVgXUG3YGoqEXeIehlcd4wf7oAAAF7QAAEAvKABAgB4kdgYkKTTIuHo7tl9ytmubl97NKZYShadiuSYNa9DzR2RyO1L12nv7fhXtkuXtPYzL8hZpY9dxwasOUPBdLd8gWbPl9KxsETMBSsSj4j6Bwqud+jvgeS/M7rMQ9TbK0lT6LpHvW4cMJw+dqlyEXHmwoUqjVU0QAxoKuMOCADgBQ0QAMCLxHbBBZWVEoTHU/Ec6fK7M8Xobic1PDd74EDucapWpeKZ2+AsBqpLTtJWV0dX1ynv4oQp0g1op3MJQzX0uMZN0eJ0u+kh2mXAFKrsqdYFVVVjbOim5UmsQt2yaji6GSr8Z8bumjWDqmtvoIRuTZSd8vstBwBMCTRAAAAvaIAAAF4kNgY00tEpEowOyQwq8tUX0/PPcrYzqhSCPVw3iWl7Yunm9bKqummnskm99z3upn1u/3jUmY81eUvpX0Bsnwrso660mm5qdJb1tTVWKYcogXGD+PQBtWxfdxX/0sdub6vjo0k89mLfxawqc2FLz2ty38u6zjrFTxK/8yiMOyAAgBc0QAAAL2iAAABeJDYGFFRUSpCLAeV3M+pWMZPILWeQeCrdfKx0Q4V7SYJaa65Mj0rJouMgxdLe+xbo9DNj06W9jYptmOHkxfcK0WWqjZrv5Ryvuo762O1UT7osQiLp66722S7VrlP86BhvLAUQyhp3QAAAL2iAAABe0AABALxIbAzIDA+JCUzu8f/Q84DsVO4iItHhrvx7qP7jRJT3Vftg9LLKoxXtyqe2TzXMctbpuIIdRzC6JITuW/cxR6qEeIWeN6Nz6MVKl1txk0CVOY/Fxjx8D4qd70IlF1LqWIOKfMmCUM2X0tc9GlD56Xz8DhS57lmrnLemr3tYX5d/2z637IP+fXDKYyThdx8x3AEBALygAQIAeJHYLrgx6a6MwK2gGFhDPvUQZ93dVXZ02YdCXRt66Ks6F7HzmHC6G01f20LlGwJVfdSU2ch9o7oUCw1m191QQai6Xsvu2NV1L/C9jU1hGMyfqXI77jMFd0AAAC9ogAAAXpTUAGWzWVm3bp20trZKdXW1nHPOOfKVr3zF6Qoyxsgdd9wh8+bNk+rqalm2bJns2LFj3HccAFDeSooBfe1rX5P7779fHn74YTn//PNl8+bNcuONN0pdXZ3cfPPNIiLy9a9/Xe677z55+OGHpbW1VdatWydXX321vP7661JVoAxxQVb6mkgNrY6VNtaxgTLnDLPVaXz0UGSr5LUZUimLCqXpKZIqxQt1rHoYcywGZJ2n2LDrMg8AxNLPzJieexhMq3ZWRWr4euLTM4m4378i5e1Nd35YeapxrrMuOnTY3bYcjv0MV1ID9MILL8i1114r11xzjYiILFy4UL7//e/Lyy+/LCKjdz/33nuvfOlLX5Jrr71WRES+973vSWNjozz55JNyww03xN5zcHBQBgfzX6oeXR8HADAlldQFd/nll8vGjRtl+/btIiLy2muvyfPPPy8f/vCHRURk586d0tHRIcuWLcu9pq6uTpYsWSKbNm064Xu2t7dLXV1d7qelpeVUjwUAUEZKugO6/fbbpaenRxYtWiSpVEqy2azcddddsmLFChER6ejoEBGRxka3gmNjY2NunbZ27VpZs2ZNbrmnp4dGCADOACU1QD/4wQ/kkUcekUcffVTOP/98efXVV2X16tXS3NwsK1euPKUdyGQyklHpRGKs+Tt2yW0RkaBfpeOw3iu0SxmIiOgU/pXuHCJjpe5w0niofZhMkdU9KUPDzrqgZ+zLF1RWOst2ynsRceMiOn2LKnnhJW2PTlE06C5nVVwktJZjJS4qq9Ry/tzo+EpSrrvNDLrpdLIHDuYXYseqrnuF+x3Xvz/Oa3XJiMm67gVijvrYbdmDh5zl2LHb50Z9hk5RFJszOEzZh8lQUgP0+c9/Xm6//fZcLOfCCy+Ut99+W9rb22XlypXS1DRav72zs1PmzZuXe11nZ6e8//3vH7+9BgCUvZJiQH19fRKG7ktSqZREx4vCtba2SlNTk2zcuDG3vqenR1566SVZunTpOOwuAGCqKOkO6E//9E/lrrvukgULFsj5558v//3f/y3f+MY35JOf/KSIjKbBWb16tXz1q1+Vc889NzcMu7m5Wa677rqJ2P/4UEvrlr3QUF0REalzu+jsNB92Gg8RjyN57a4Do7qlhtROWeloAj20WnWvxM7FGO9z/M3G3idfdJeK6p60BaHKJm0PXy+S4ieJ6ZucrrEiQ411ZdmC9O+L/d5JuOaK7j6Nfeet7ke9LqxUGdP18RUYGo7xU1ID9K1vfUvWrVsnn/3sZ2X//v3S3Nwsf/u3fyt33HFHbpvbbrtNent75aabbpKuri658sor5emnnz71OUAAgCkpMAkrKt/T0yN1dXXyQblW0irR6Amp/2zs/2DDadPcbYvcAcnB/ES26Jhbn8VLIL4Y/R+fdecSqgEWQbU7YVEPwLDZNZVERMyIurtI1ldmVDj2BORwuvs9CK2JnLpmlB6EkPhgtP7+60C8ugPSdZac1+raQvYdRhKvub6r0b/fBe6AYvWx9ATYpB97wo2YYfmZ/FC6u7ulVtV0spELDgDgRfmVY9AKpO7IFsmqkNapbGbk74hC1R+eVWk+EkH/Z2bFiKIBFRsYcP+ztytNBrPqnXX2HYJIfCis/d9hYu4MC8RqYkP3rSq6gb47UncMTmqbSH3XknB3pL//esh2gWHMWljj9gjYFUcTUVFXiw2tVkPorWXdGxI2znHfqk/d+VoVao2avpGI6z5FcAcEAPCCBggA4AUNEADAi/KPAZ0Go9OS2HNlCoyqikniPJki7D79QKUlEVXCWo+Okig/hyIRsYASGft4dQlrdaz2yKpYHGTsqUflKZbWxxopGal5M2V23XUcR0b0/C/1v7j9PdDHPtWuu0fcAQEAvKABAgB4cUZ3welJeUFFfhKfHopciJ4AF+mhrwnsknOGrPa4/4cEaihyrPKq1W0VZHX3RPKHqNrHrvc/rFXXyuqODHRGcXWd9STQQpmcE0mnJbKzl1S4xxa77vZrk5i+SH0vR/buc5ZTc91h2UHGOl7dTaurtNrD8xN47EnGHRAAwAsaIACAFzRAAAAvzugYkGb3E0fHTv51Op1LoGM+Vv94EoevRqqqbBjpMg9qmLk1XFfHh3R5jMCKoSTx2HVsIOpxL3xQkf8VCVVG9yDtJnTVqWycNDhlMFTfqAS8Yiew1clt1XUPrePL6ukNxY7VnvIwWTEUncLoqPqFt+K6TjxI4kP17d/3RKYsSjDugAAAXtAAAQC8oAECAHhBDGgMsSJsheiiYLr8tRUziZUQT0IsQKe1V/NXwlDNE5qenyMVqNhAGI1d+daocgZJnDMRm8dkxk47FCt3rUuZ26t0qe8ExgZi1916rFPVxL7j9nwpFRuLfef1dfdW7z6vYBxUH3uFe+zGmhMVmwtWqGR6En73PeMOCADgBQ0QAMALGiAAgBfEgMZSSv+s2lb3ETuxAV36wCQvDhKbI6HmNjhxHx0L0POArD7xQJV5SEDXf1FO3KrIeQlrVa44m4oB6fOUiHhAgfL2wZCKica+41YMSK9TFzqR173QsRd5aWAdu9HXWccFE3nw/nAHBADwggYIAOBFYrvgwmnVEgaj3TdRX5/nvSnM9A+4T+hh2VaXRKpImQd9rM4wTk/dNHrIcLa7J/dYDzvVw43t4bnhNDdlkX7fyO6eTMoQbWs/ske6C2woEgwMjLkurK11lo3a1u7OS0oZB/v66PQ6+ro75UvU9z+sc489e+iwu976XkS9Kh2QJ86xH+5y1unvuN0lrdeFupSJPSVDDf1O4tD8icYdEADACxogAIAXNEAAAC8SGwMKKiskCI73rfZbfcpJGK6q6OG4esitm7pexTZ0ud8hlebDGQackLiIfQ3UcOJo2O3HTtnHp4ZhB9Oq3WXrtUYPV03CdS+yT7FYYIHXxlLZWKlfkhIDchQoMSIiEtlxQVWuwCm3cAJO3CSJZSti111NJ7CHqFeo/dV/C+zrntYpfRI4NH+CcQcEAPCCBggA4AUNEADAi8TGgCQyIsFoH2holQZO4pygWBlqvYHu17apFCdBtRsXCSvycwwiXeo4AYr1W9vxMV3GWR+7LVRxhKjAHJtJU6RPvqR5HPo7Y80VCypUSn9dIiIBSolXxOaGafax61IOSTj2Aml6RKTg73dQaJ0ua67KniTxb9144w4IAOAFDRAAwIvkdsGl0yLh6O45w1ITOUyz8C169uCh3GOdjkZnULarK4q43XmxrplilSYnQ5Hzb3edBWrbUKUlCky+SyLWdaG76xI4TLvQ8GnT56Zd0ZVk7azJutJqNtbdZR27r+Mu8Ln6+x+bpqBZUw30eUnEd7wY61wU6zJ0UhipCsGx6sLi/q1IZKqq08QdEADACxogAIAXNEAAAC+SGwOKsvnUM3YfsRrSaVQ/atL7Ro1KVaNjPqL7kK24T3wYs7utGSyzYy+QukZXltRVNvV7iSQgLlJAfH9ddvoaHUMJY3ERK21PEoYpFxH7jmt2Shp17PHrbi0k/HddJB7Dcq5tpOK9ofpzrEs7WN+DSF/2MjgXJ8IdEADACxogAIAXNEAAAC8SGwOKjvVJFBzv8LX6QoNAlS/Qr7P7RhPYL2pG3PksUZdb5jlIuf8ThDU1Y64zGXdeUGT1NyeyvK+auxOpksT2XJhY6XIdE1LzhBIfF9HHPuDOGQqt49HxIj0/JLDSM+n3TeJ119/5GPv3VMdFdBofO6aiYiZJPPbY9bGvuy5Por/j+vc9yq8Pq6ZG2h7ugAAAXtAAAQC8SGwXXJBO5brbjJ3qokhlxiR2u9lit9m6e0UPM7eHWqtUL0alp4kNSU+YolmRbWGBDOISH9obS9mSNLHuFbXeyoSshx7HhpXb1VMTfs1FTvCd1l1l0dgVdrVyOF5H4P6P7/y+6+ta7DvvDOEus/MwBu6AAABe0AABALygAQIAeJHYGFA0MChREE/hkZo5Uz2hhipa6V1iMZIEDM+NpaovNnTUqoKaqnFLNwSqamho97XrFCA6bY+HIaulfGZWDU+PlbFQJQtsekhqEtI1FSrVUGy9PnY7JZOuolmO1z175MiY62LXfbq1HBVO8WOfU29DtNV3LertHXtbNZI6duxq2WZG3L8FxprikMjh6cdxBwQA8IIGCADgBQ0QAMCLxMaAxlKov1hEnJLdsT7U97S62+oY0e69ucd2KWmvrLkC2Z6ek35ZkFYpi3S8qL4u/xGqXHQsRU4CyhuUkmpEH7sTN1DL2SNdzrpisRofYsde4FzEjl39DhT8DiWw3P3pXHf7O586a56zLrtnn7OchDihdjrX3S79nZrf7L7v/oPusv37PsnXnDsgAIAXNEAAAC9ogAAAXpRdDEgr1PcZK+f71jtjbht/44T0h9v7ofNK6Zxh9jp9XvS5GMzPD9H56ESVCsiVRk8SdX2ca6nziQ2rWJ8V84qVdUjKdS8ktMqTFCtdXsocEPX9SuR1twQV7u9v7Htsx0879rur1Hcklq+uSBVx33RMV/++28dujh4r8mbWdZ/ka84dEADACxogAIAXZd8FF0vDPzx2l0Os9IGqKGoPwQ3S7rbe0vjYXUDq9tgUKjSph5WqlC262qK7TnVH6P6IJHRLFSjLERtSq7YN7LT3sfIYY38nEsO6HsV6TAp10xbb1gxZ1z0J11wpWmnVus6xLmnd1arf2/67ksRj13/ndJeifby6ey5WGiS/HPtdj33w+J4L7oAAAF7QAAEAvEhcF9z/VDwdkWGRk7rbU6OhjP04UutUV0zktr+RyXezGd3dVbC/y5MCt8vxY9fnaez/PSJ1rLFjT2CXRFCgaq6+7qF17Mao7OTlcN2d77zqWo1dd3dZX1t3W5VZ3t42gde80O++iIhY33l9Hor1XUZJP/aiv9/59UGkMqIbvTx8wscn/tyTOxcjMnx888LbB6bYFpPsnXfekZaWFt+7AQA4Tbt375b58+ePuT5xDVAURbJ3714xxsiCBQtk9+7dUltb63u3Equnp0daWlo4T0Vwnk4O5+nkcJ4KM8bI0aNHpbm5OV6zypK4LrgwDGX+/PnSczxpYm1tLRf4JHCeTg7n6eRwnk4O52lsdXV1RbdhEAIAwAsaIACAF4ltgDKZjPz93/+9ZFTOI7g4TyeH83RyOE8nh/M0PhI3CAEAcGZI7B0QAGBqowECAHhBAwQA8IIGCADgBQ0QAMCLxDZA69evl4ULF0pVVZUsWbJEXn75Zd+75E17e7tccsklUlNTI3PnzpXrrrtOtm3b5mwzMDAgbW1t0tDQIDNmzJDly5dLZ2enpz1OhnvuuUeCIJDVq1fnnuM8jdqzZ498/OMfl4aGBqmurpYLL7xQNm/enFtvjJE77rhD5s2bJ9XV1bJs2TLZsWOHxz2efNlsVtatWyetra1SXV0t55xzjnzlK19xEmxynk6TSaDHHnvMVFZWmn/+5382v/71r83f/M3fmPr6etPZ2el717y4+uqrzYYNG8zWrVvNq6++av7kT/7ELFiwwBw7diy3zac//WnT0tJiNm7caDZv3mwuu+wyc/nll3vca79efvlls3DhQvO+973P3HLLLbnnOU/GHD582Jx99tnmE5/4hHnppZfMm2++aX7yk5+Y3/72t7lt7rnnHlNXV2eefPJJ89prr5k/+7M/M62traa/v9/jnk+uu+66yzQ0NJinnnrK7Ny50zz++ONmxowZ5h//8R9z23CeTk8iG6BLL73UtLW15Zaz2axpbm427e3tHvcqOfbv329ExDz33HPGGGO6urpMRUWFefzxx3Pb/OY3vzEiYjZt2uRrN705evSoOffcc80zzzxj/vAP/zDXAHGeRn3hC18wV1555ZjroygyTU1N5h/+4R9yz3V1dZlMJmO+//3vT8YuJsI111xjPvnJTzrPXX/99WbFihXGGM7TeEhcF9zQ0JBs2bJFli1blnsuDENZtmyZbNq0yeOeJUd3d7eIiMyaNUtERLZs2SLDw8POOVu0aJEsWLDgjDxnbW1tcs011zjnQ4Tz9D9+9KMfyeLFi+VjH/uYzJ07Vy666CJ56KGHcut37twpHR0dznmqq6uTJUuWnFHn6fLLL5eNGzfK9u3bRUTktddek+eff14+/OEPiwjnaTwkLhv2wYMHJZvNSmNjo/N8Y2OjvPHGG572KjmiKJLVq1fLFVdcIRdccIGIiHR0dEhlZaXU19c72zY2NkpHR4eHvfTnsccek1/84hfyyiuvxNZxnka9+eabcv/998uaNWvki1/8orzyyity8803S2VlpaxcuTJ3Lk70O3gmnafbb79denp6ZNGiRZJKpSSbzcpdd90lK1asEBHhPI2DxDVAKKytrU22bt0qzz//vO9dSZzdu3fLLbfcIs8884xUVVX53p3EiqJIFi9eLHfffbeIiFx00UWydetWeeCBB2TlypWe9y45fvCDH8gjjzwijz76qJx//vny6quvyurVq6W5uZnzNE4S1wU3e/ZsSaVSsZFJnZ2d0tTU5GmvkmHVqlXy1FNPyU9/+lOnymBTU5MMDQ1JV1eXs/2Zds62bNki+/fvlw984AOSTqclnU7Lc889J/fdd5+k02lpbGzkPInIvHnz5L3vfa/z3HnnnSe7du0SEcmdizP9d/Dzn/+83H777XLDDTfIhRdeKH/1V38lt956q7S3t4sI52k8JK4BqqyslIsvvlg2btyYey6KItm4caMsXbrU4575Y4yRVatWyRNPPCHPPvustLa2OusvvvhiqaiocM7Ztm3bZNeuXWfUObvqqqvkV7/6lbz66qu5n8WLF8uKFStyjzlPIldccUVsGP/27dvl7LPPFhGR1tZWaWpqcs5TT0+PvPTSS2fUeerr64tV80ylUhJFkYhwnsaF71EQJ/LYY4+ZTCZjvvvd75rXX3/d3HTTTaa+vt50dHT43jUvPvOZz5i6ujrzs5/9zOzbty/309fXl9vm05/+tFmwYIF59tlnzebNm83SpUvN0qVLPe51Mtij4IzhPBkzOkQ9nU6bu+66y+zYscM88sgjZtq0aeZf//Vfc9vcc889pr6+3vzwhz80v/zlL8211157xg0vXrlypTnrrLNyw7D//d//3cyePdvcdtttuW04T6cnkQ2QMcZ861vfMgsWLDCVlZXm0ksvNS+++KLvXfJGRE74s2HDhtw2/f395rOf/ayZOXOmmTZtmvnoRz9q9u3b52+nE0I3QJynUf/xH/9hLrjgApPJZMyiRYvMgw8+6KyPosisW7fONDY2mkwmY6666iqzbds2T3vrR09Pj7nlllvMggULTFVVlXnXu95l/u7v/s4MDg7mtuE8nR7qAQEAvEhcDAgAcGagAQIAeEEDBADwggYIAOAFDRAAwAsaIACAFzRAAAAvaIAAAF7QAAEAvKABAgB4QQMEAPDi/wOHiMQ8zjOdKwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "if type(model.layers[0]) == SimpleHandmadeTFLayer:\n", + " x = model.embedding(in_data.to('cuda:0')) * (model.embedding.embedding_dim ** 0.5)\n", + " \n", + " if model.positional_encoding == \"sine\":\n", + " x = x + model.pos_encoder(x) # For the sinusoidal positional encoding class\n", + " if model.positional_encoding == \"learned\":\n", + " x = x + model.pos_encoder # For the learned positional encodings\n", + " \n", + " # xx = x.permute(1, 0, 2)\n", + " xx = x\n", + " \n", + " x_norm = model.layers[0].transformer_encoder.norm1(xx)\n", + " \n", + " mha = model.layers[0].transformer_encoder.mha\n", + " B, T, _ = x_norm.size()\n", + " q = mha.q_proj(x_norm).view(B, T, mha.num_heads, mha.head_dim).transpose(1, 2)\n", + " k = mha.k_proj(x_norm).view(B, T, mha.num_heads, mha.head_dim).transpose(1, 2)\n", + " v = mha.v_proj(x_norm).view(B, T, mha.num_heads, mha.head_dim).transpose(1, 2)\n", + " \n", + " attn_output, attn_weights = scaled_dot_product_attention(q, k, v, mask)\n", + "\n", + " head_number = 0\n", + " plt.imshow(attn_weights[0,head_number].to('cpu').detach())" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "36e16938-890a-42fc-8902-f83f4b48a012", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "if type(model.layers[1]) == SimpleHandmadeTFLayer:\n", + " x = model.embedding(in_data.to('cuda:0')) * (model.embedding.embedding_dim ** 0.5)\n", + " \n", + " if model.positional_encoding == \"sine\":\n", + " x = x + model.pos_encoder(x) # For the sinusoidal positional encoding class\n", + " if model.positional_encoding == \"learned\":\n", + " x = x + model.pos_encoder # For the learned positional encodings\n", + "\n", + " x = model.layers[0](x, mask)\n", + " \n", + " # xx = x.permute(1, 0, 2)\n", + " xx = x\n", + " \n", + " x_norm = model.layers[1].transformer_encoder.norm1(xx)\n", + " \n", + " mha = model.layers[1].transformer_encoder.mha\n", + " B, T, _ = x_norm.size()\n", + " q = mha.q_proj(x_norm).view(B, T, mha.num_heads, mha.head_dim).transpose(1, 2)\n", + " k = mha.k_proj(x_norm).view(B, T, mha.num_heads, mha.head_dim).transpose(1, 2)\n", + " v = mha.v_proj(x_norm).view(B, T, mha.num_heads, mha.head_dim).transpose(1, 2)\n", + " \n", + " attn_output, attn_weights = scaled_dot_product_attention(q, k, v, mask)\n", + "\n", + " head_number = 0\n", + " plt.imshow(attn_weights[0,head_number].to('cpu').detach())" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "c88fa0db-2a1a-41d0-b1b4-1f0ac5667b3f", + "metadata": {}, + "outputs": [], + "source": [ + "loss_mask = (out_data != args.vocab_size-1)\n", + "acc = torch.sum(loss_mask.to(\"cuda:0\") & ((torch.argmax(model(in_data.to(\"cuda:0\"), mask.to(\"cuda:0\")), dim=-1) - out_data.to(\"cuda:0\")) == 0)).item()\n", + "acc /= loss_mask.sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "4ebd177f-0218-4613-88a6-c15d6c907cb2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor(0.1383)" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "acc" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6a42964f-6872-4b8f-ab37-e30c9f79e54e", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "hybrid", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/source/official-code/micro/main.ipynb b/source/official-code/micro/main.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..5f59289b0c566d447e67d670bdf9386d5b429fe5 --- /dev/null +++ b/source/official-code/micro/main.ipynb @@ -0,0 +1,10976 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "e957187d-9efd-41ac-a96f-5c80582bfba5", + "metadata": {}, + "outputs": [], + "source": [ + "import subprocess\n", + "from concurrent.futures import ThreadPoolExecutor, as_completed" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "b4ad0906-3be6-4361-a2eb-975bf10e3b39", + "metadata": {}, + "outputs": [], + "source": [ + "task_name = \"read_write\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "9857d742-ffcd-4ad8-a16c-f3cf7ed3ad35", + "metadata": {}, + "outputs": [], + "source": [ + "# For variable copy\n", + "if task_name == \"var_copy\":\n", + " experiment1_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [12, 24], 'window': [5, 10, 15, 20, 30, 50, 100], 'nh': [1], 'sd': [1]}\n", + " experiment2_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [2, 4, 6, 8, 10, 12, 15, 20, 24], 'window': [20, 100], 'nh': [1], 'sd': [1]}\n", + " experiment3_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [12, 24], 'window': [20, 100], 'nh': [2,3,4], 'sd': [1]}\n", + " experiment4_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [12, 24], 'window': [20, 100], 'nh': [1], 'sd': [2,4,8,16]}\n", + " experiment5_params = {'layer1': ['TF-nC'], 'layer2': ['TF-nC'], 'd': [2, 4, 6, 8, 10, 12, 15, 20, 24], 'window': [20, 100], 'nh': [1], 'sd': [1]}\n", + "\n", + "# For binary recall\n", + "if task_name in [\"binary_recall_mix\"]:\n", + " experiment1_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [6], 'window': [5, 10, 15, 20, 30, 50, 100], 'nh': [1], 'sd': [1]}\n", + " experiment2_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [2, 4, 8, 10, 12, 15, 20], 'window': [100], 'nh': [1], 'sd': [1]}\n", + " experiment3_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [6], 'window': [100], 'nh': [2,3], 'sd': [1]}\n", + " experiment4_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [6], 'window': [100], 'nh': [1], 'sd': [2,4,8,16]}\n", + " experiment5_params = {'layer1': ['TF-nC'], 'layer2': ['TF-nC'], 'd': [2, 4, 6, 8, 10, 12, 15, 20], 'window': [100], 'nh': [1], 'sd': [1]}\n", + "\n", + "# For associative recall\n", + "if task_name in [\"assoc_recall\", \"assoc_recall_mk\"]:\n", + " experiment1_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [12], 'window': [5, 10, 15, 20, 50, 100], 'nh': [1], 'sd': [1]}\n", + " experiment2_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [2, 4, 6, 8, 10, 12], 'window': [20, 100], 'nh': [1], 'sd': [1]}\n", + " experiment3_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [12], 'window': [20, 100], 'nh': [2,3], 'sd': [1]}\n", + " experiment4_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [12], 'window': [20, 100], 'nh': [1], 'sd': [2,4,8,16]}\n", + " experiment5_params = {'layer1': ['TF-nC'], 'layer2': ['TF-nC'], 'd': [2, 4, 6, 8, 10, 12], 'window': [20, 100], 'nh': [1], 'sd': [1]}\n", + "\n", + "# For read write\n", + "if task_name in [\"read_write\"]:\n", + " experiment1_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [12], 'window': [5, 10, 15, 20, 50, 100], 'nh': [1], 'sd': [1]}\n", + " experiment2_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [2, 4, 6, 8, 10, 12], 'window': [20, 100], 'nh': [1], 'sd': [1]}\n", + " experiment3_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [12], 'window': [20, 100], 'nh': [2,3], 'sd': [1]}\n", + " experiment4_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [12], 'window': [20, 100], 'nh': [1], 'sd': [2,4,8,16]}\n", + " experiment5_params = {'layer1': ['TF-nC'], 'layer2': ['TF-nC'], 'd': [2, 4, 6, 8, 10, 12], 'window': [20, 100], 'nh': [1], 'sd': [1]}" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "501791fd-5cd8-4086-86bf-655500db978c", + "metadata": {}, + "outputs": [], + "source": [ + "# List of commands to run\n", + "commands = []\n", + "\n", + "def make_command(layer1, layer2, embed_dim, window, num_heads, state_dim, run_number=0):\n", + " return f\"python3 train.py --run_number {run_number} --task_name {task_name} --layer1 {layer1} --layer2 {layer2} --embed_dim {embed_dim} --window {window} --num_heads {num_heads} --state_dim {state_dim} --save True\"\n", + "\n", + "for run_number in range(11):\n", + " for experiment in [experiment1_params, experiment2_params, experiment3_params, experiment4_params, experiment5_params]:\n", + " for layer1 in experiment[\"layer1\"]:\n", + " for layer2 in experiment[\"layer2\"]:\n", + " for embed_dim in experiment[\"d\"]:\n", + " for window in experiment[\"window\"]:\n", + " for num_heads in experiment[\"nh\"]:\n", + " for state_dim in experiment[\"sd\"]:\n", + " commands.append(make_command(layer1, layer2, embed_dim, window, num_heads, state_dim, run_number))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "b9e6a6e5-bfbd-44b8-9c76-591e8cd47ec4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 0 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 1 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 2 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 3 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 4 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 5 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 6 --task_name read_write --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True',\n", + " 'python3 train.py --run_number 7 --task_name read_write --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True',\n", + " ...]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "# commands = ['python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True']\n", + "commands" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "30f4f897-7954-4843-a4a3-c1abe3a66ea3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 1 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n", + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 2 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 3 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n", + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n", + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 4 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 5 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 6 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n", + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 7 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 8 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n", + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n", + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 9 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 5 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 10 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 15 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 50 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 2 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 3 --state_dim 1 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 20 --num_heads 1 --state_dim 1 --save True] exited with 2\n", + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 TF-nC --layer2 TF-nC --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True] exited with 2\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 4 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 2 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 8 --save True] exited with 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 10 --task_name assoc_recall_mk --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 16 --save True] exited with 0\n" + ] + } + ], + "source": [ + "def run_command(cmd):\n", + " \"\"\"Run a single shell command and return (cmd, returncode, stdout, stderr).\"\"\"\n", + " result = subprocess.run(cmd, shell=True, capture_output=True, text=True)\n", + " return cmd, result.returncode, result.stdout, result.stderr\n", + "\n", + "max_workers = 20\n", + "\n", + "with ThreadPoolExecutor(max_workers=max_workers) as executor:\n", + " futures = {executor.submit(run_command, cmd): cmd for cmd in commands}\n", + "\n", + " for future in as_completed(futures):\n", + " cmd, returncode, stdout, stderr = future.result()\n", + " print(f\"[{cmd}] exited with {returncode}\")\n", + " if returncode == 1:\n", + " executor.shutdown()\n", + " print(stdout)\n", + " print(stderr)\n", + " assert False" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d4bc2226-523f-42de-9fc1-d46f96103d4d", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "hybrid", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/source/official-code/micro/models/hybrid.py b/source/official-code/micro/models/hybrid.py new file mode 100644 index 0000000000000000000000000000000000000000..fe107519cceb5fef133a2967890671a4b22c23dd --- /dev/null +++ b/source/official-code/micro/models/hybrid.py @@ -0,0 +1,92 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + +from .transformer import SimplePyTorchTFLayer, SimpleHandmadeTFLayer +from .ssm import SimpleSSMLayer +from .mlp import SimpleMLPLayer + + +# Sine Positional Encodings, if desired +class PositionalEncoding(nn.Module): + def __init__(self, d_model, max_len=20): + super().__init__() + pe = torch.zeros(max_len, d_model) + position = torch.arange(0, max_len).unsqueeze(1).float() + div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-torch.log(torch.tensor(10000.0)) / d_model)) + pe[:, 0::2] = torch.sin(position * div_term) + pe[:, 1::2] = torch.cos(position * div_term) + self.pe = pe.unsqueeze(0) + + def forward(self, x): + return self.pe[:, :x.size(1)].to(x.device) + + +class HybridModel(nn.Module): + def __init__(self, args): + super().__init__() + + # Token Embedding + self.embedding = nn.Embedding(args.vocab_size, args.embed_dim) + + # Choice of positional encodings. For these small models, learned seems better + self.positional_encoding = args.positional_encoding + if args.positional_encoding == "sine": + self.pos_encoder = PositionalEncoding(args.embed_dim, args.sequence_len) + if args.positional_encoding == "learned": + p = torch.zeros((args.sequence_len, args.embed_dim)) + torch.nn.init.xavier_uniform_(p) + self.pos_encoder = nn.Parameter(p) + + self.layers = [] + for layer in args.layers: + # Transformer Layers + if layer == "TF": + if "do_norm" not in vars(args).keys(): args.do_norm = True + if args.pytorch_transformer: + self.layers.append(SimplePyTorchTFLayer(args.embed_dim, args.num_heads, + causal=True)) + else: + self.layers.append(SimpleHandmadeTFLayer(args.embed_dim, args.num_heads, + causal=True, do_norm=args.do_norm)) + + # Transformer (non-causal) Layers + if layer == "TF-nC": + if "do_norm" not in vars(args).keys(): args.do_norm = True + if args.pytorch_transformer: + self.layers.append(SimplePyTorchTFLayer(args.embed_dim, args.num_heads, + causal=False)) + else: + self.layers.append(SimpleHandmadeTFLayer(args.embed_dim, args.num_heads, + causal=False, do_norm=args.do_norm)) + + # MLP layers (already included in transformer layers) + if layer == "MLP": + self.layers.append(SimpleMLPLayer(args.embed_dim, args.embed_dim, args.embed_dim)) + + # Mamba layers + if layer == "SSM": + if "d_conv" not in vars(args).keys(): args.d_conv = 4 + if "expand" not in vars(args).keys(): args.expand = 2 + if not args.d_conv: args.d_conv = 4 + if not args.expand: args.expand = 2 + self.layers.append(SimpleSSMLayer(args.embed_dim, args.state_dim, + args.d_conv, args.expand)) + + self.layers = nn.ModuleList(self.layers) + self.decoder = nn.Linear(args.embed_dim, args.vocab_size) + + + def forward(self, x, mask): + x = self.embedding(x) * (self.embedding.embedding_dim ** 0.5) + + if self.positional_encoding == "sine": + x = x + self.pos_encoder(x) # For the sinusoidal positional encoding class + if self.positional_encoding == "learned": + x = x + self.pos_encoder # For the learned positional encodings + + for layer in self.layers: + # x = x + layer(x, mask) + x = layer(x, mask) + + return self.decoder(x) \ No newline at end of file diff --git a/source/official-code/micro/models/lrs.json b/source/official-code/micro/models/lrs.json new file mode 100644 index 0000000000000000000000000000000000000000..511b0df0eef8b1f70a98fe3ead60e449114c9daf --- /dev/null +++ b/source/official-code/micro/models/lrs.json @@ -0,0 +1,610 @@ +{ + "run_assoc-recall_SSM_TF_w5_d6_nh1_sd1_nn0_nv30": 0.03162277660168379, + "run_assoc-recall_SSM_SSM_w10_d6_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_SSM_TF_w20_d6_nh1_sd1_nn0_nv30": 0.03162277660168379, + "run_assoc-recall_TF_SSM_w20_d6_nh1_sd1_nn0_nv30": 0.03162277660168379, + "run_assoc-recall_SSM_TF_w15_d6_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_SSM_SSM_w5_d6_nh1_sd1_nn0_nv30": 0.03162277660168379, + "run_assoc-recall_TF_SSM_w100_d6_nh1_sd1_nn0_nv30": 0.03162277660168379, + "run_assoc-recall_TF_TF_w100_d6_nh1_sd1_nn0_nv30": 0.03162277660168379, + "run_assoc-recall_TF_SSM_w5_d6_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_TF_TF_w5_d6_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_TF_TF_w10_d6_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_SSM_TF_w10_d6_nh1_sd1_nn0_nv30": 0.03162277660168379, + "run_assoc-recall_TF_SSM_w10_d6_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_SSM_TF_w50_d6_nh1_sd1_nn0_nv30": 0.03162277660168379, + "run_assoc-recall_TF_SSM_w15_d6_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_TF_SSM_w50_d6_nh1_sd1_nn0_nv30": 0.03162277660168379, + "run_assoc-recall_TF_TF_w20_d6_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_TF_TF_w15_d6_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_SSM_TF_w100_d6_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_TF_TF_w50_d6_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_SSM_SSM_w15_d6_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_SSM_SSM_w100_d6_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_SSM_SSM_w20_d6_nh1_sd1_nn0_nv30": 0.03162277660168379, + "run_assoc-recall_SSM_SSM_w50_d6_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_TF_TF_w20_d2_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_TF_TF_w20_d4_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_TF_TF_w20_d8_nh1_sd1_nn0_nv30": 0.03162277660168379, + "run_assoc-recall_TF_TF_w20_d12_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_TF_TF_w20_d10_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_TF_SSM_w20_d2_nh1_sd1_nn0_nv30": 0.03162277660168379, + "run_assoc-recall_TF_SSM_w20_d8_nh1_sd1_nn0_nv30": 0.03162277660168379, + "run_assoc-recall_TF_SSM_w20_d4_nh1_sd1_nn0_nv30": 0.03162277660168379, + "run_assoc-recall_TF_SSM_w20_d10_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_TF_SSM_w20_d12_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_SSM_TF_w20_d2_nh1_sd1_nn0_nv30": 0.03162277660168379, + "run_assoc-recall_SSM_SSM_w20_d2_nh1_sd1_nn0_nv30": 0.0031622776601683794, + "run_assoc-recall_SSM_TF_w20_d10_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_SSM_TF_w20_d4_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_SSM_TF_w20_d8_nh1_sd1_nn0_nv30": 0.0031622776601683794, + "run_assoc-recall_SSM_SSM_w20_d8_nh1_sd1_nn0_nv30": 0.0031622776601683794, + "run_assoc-recall_SSM_SSM_w20_d10_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_SSM_SSM_w20_d12_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_SSM_SSM_w20_d4_nh1_sd1_nn0_nv30": 0.03162277660168379, + "run_assoc-recall_SSM_TF_w20_d12_nh1_sd1_nn0_nv30": 0.01, + "run_assoc-recall_TF_SSM_w20_d6_nh2_sd1_nn0_nv30": 0.01, + "run_assoc-recall_TF_SSM_w20_d6_nh3_sd1_nn0_nv30": 0.01, + "run_assoc-recall_TF_TF_w20_d6_nh2_sd1_nn0_nv30": 0.01, + "run_assoc-recall_TF_TF_w20_d6_nh3_sd1_nn0_nv30": 0.01, + "run_assoc-recall_SSM_SSM_w20_d6_nh2_sd1_nn0_nv30": 0.01, + "run_assoc-recall_SSM_TF_w20_d6_nh2_sd1_nn0_nv30": 0.01, + "run_assoc-recall_SSM_SSM_w20_d6_nh3_sd1_nn0_nv30": 0.01, + "run_assoc-recall_SSM_TF_w20_d6_nh3_sd1_nn0_nv30": 0.01, + "run_assoc-recall_TF_TF_w20_d6_nh1_sd4_nn0_nv30": 0.01, + "run_assoc-recall_TF_TF_w20_d6_nh1_sd2_nn0_nv30": 0.01, + "run_assoc-recall_TF_TF_w20_d6_nh1_sd16_nn0_nv30": 0.01, + "run_assoc-recall_TF_TF_w20_d6_nh1_sd8_nn0_nv30": 0.01, + "run_assoc-recall_TF_SSM_w20_d6_nh1_sd2_nn0_nv30": 0.01, + "run_assoc-recall_TF_SSM_w20_d6_nh1_sd4_nn0_nv30": 0.01, + "run_assoc-recall_TF_SSM_w20_d6_nh1_sd16_nn0_nv30": 0.01, + "run_assoc-recall_TF_SSM_w20_d6_nh1_sd8_nn0_nv30": 0.01, + "run_assoc-recall_SSM_TF_w20_d6_nh1_sd2_nn0_nv30": 0.03162277660168379, + "run_assoc-recall_SSM_TF_w20_d6_nh1_sd16_nn0_nv30": 0.01, + "run_assoc-recall_SSM_TF_w20_d6_nh1_sd4_nn0_nv30": 0.01, + "run_assoc-recall_SSM_SSM_w20_d6_nh1_sd2_nn0_nv30": 0.01, + "run_assoc-recall_SSM_TF_w20_d6_nh1_sd8_nn0_nv30": 0.01, + "run_assoc-recall_SSM_SSM_w20_d6_nh1_sd4_nn0_nv30": 0.01, + "run_assoc-recall_SSM_SSM_w20_d6_nh1_sd8_nn0_nv30": 0.01, + "run_assoc-recall_SSM_SSM_w20_d6_nh1_sd16_nn0_nv30": 0.01, + "run_binary-recall-mix_SSM_TF_w50_d6_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_SSM_TF_w15_d6_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_TF_SSM_w10_d6_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_TF_TF_w20_d6_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_TF_w100_d6_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_SSM_TF_w30_d6_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_TF_w15_d6_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_SSM_w15_d6_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_TF_SSM_w100_d6_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_SSM_w20_d6_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_TF_SSM_w50_d6_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_SSM_TF_w20_d6_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_TF_TF_w50_d6_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_SSM_w30_d6_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_TF_TF_w5_d6_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_TF_TF_w30_d6_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_SSM_TF_w5_d6_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_SSM_TF_w10_d6_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_TF_TF_w10_d6_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_SSM_w5_d6_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_SSM_SSM_w10_d6_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_SSM_SSM_w15_d6_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_SSM_SSM_w5_d6_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_SSM_SSM_w100_d6_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_SSM_SSM_w30_d6_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_SSM_TF_w100_d6_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_SSM_SSM_w50_d6_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_SSM_SSM_w20_d6_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_TF_TF_w100_d2_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_TF_TF_w100_d8_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_TF_w100_d10_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_TF_TF_w100_d4_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_TF_w100_d12_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_SSM_w100_d10_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_SSM_w100_d4_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_SSM_w100_d2_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_TF_SSM_w100_d8_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_TF_SSM_w100_d12_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_SSM_TF_w100_d8_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_SSM_TF_w100_d4_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_SSM_TF_w100_d2_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_SSM_TF_w100_d10_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_SSM_TF_w100_d12_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_SSM_SSM_w100_d2_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_SSM_SSM_w100_d10_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_SSM_SSM_w100_d4_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_SSM_SSM_w100_d8_nh1_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_SSM_SSM_w100_d12_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_TF_TF_w100_d6_nh3_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_TF_w100_d6_nh2_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_SSM_w100_d6_nh2_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_SSM_w100_d6_nh3_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_SSM_SSM_w100_d6_nh2_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_SSM_TF_w100_d6_nh3_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_SSM_SSM_w100_d6_nh3_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_SSM_TF_w100_d6_nh2_sd1_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_TF_w100_d6_nh1_sd2_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_TF_w100_d6_nh1_sd8_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_TF_w100_d6_nh1_sd4_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_TF_w100_d6_nh1_sd16_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_SSM_w100_d6_nh1_sd2_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_SSM_w100_d6_nh1_sd16_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_TF_SSM_w100_d6_nh1_sd8_nn5_nv30": 0.01, + "run_binary-recall-mix_TF_SSM_w100_d6_nh1_sd4_nn5_nv30": 0.01, + "run_binary-recall-mix_SSM_TF_w100_d6_nh1_sd2_nn5_nv30": 0.01, + "run_binary-recall-mix_SSM_TF_w100_d6_nh1_sd8_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_SSM_TF_w100_d6_nh1_sd16_nn5_nv30": 0.01, + "run_binary-recall-mix_SSM_TF_w100_d6_nh1_sd4_nn5_nv30": 0.01, + "run_binary-recall-mix_SSM_SSM_w100_d6_nh1_sd2_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_SSM_SSM_w100_d6_nh1_sd4_nn5_nv30": 0.01, + "run_binary-recall-mix_SSM_SSM_w100_d6_nh1_sd8_nn5_nv30": 0.01, + "run_binary-recall-mix_SSM_SSM_w100_d6_nh1_sd16_nn5_nv30": 0.01, + "var_copy_run_var-copy_TF_TF_w100_d12_nh1_sd1_nn5_nv30": 0.01, + "var_copy_run_var-copy_TF_SSM_w15_d12_nh1_sd1_nn5_nv30": 0.03162277660168379, + "var_copy_run_var-copy_TF_SSM_w30_d12_nh1_sd1_nn5_nv30": 0.03162277660168379, + "var_copy_run_var-copy_SSM_TF_w10_d12_nh1_sd1_nn5_nv30": 0.01, + "var_copy_run_var-copy_TF_TF_w50_d12_nh1_sd1_nn5_nv30": 0.03162277660168379, + "var_copy_run_var-copy_SSM_TF_w30_d12_nh1_sd1_nn5_nv30": 0.03162277660168379, + "var_copy_run_var-copy_TF_SSM_w20_d12_nh1_sd1_nn5_nv30": 0.03162277660168379, + "var_copy_run_var-copy_SSM_TF_w20_d12_nh1_sd1_nn5_nv30": 0.03162277660168379, + "var_copy_run_var-copy_TF_SSM_w5_d12_nh1_sd1_nn5_nv30": 0.01, + "var_copy_run_var-copy_SSM_TF_w50_d12_nh1_sd1_nn5_nv30": 0.03162277660168379, + "var_copy_run_var-copy_TF_TF_w20_d12_nh1_sd1_nn5_nv30": 0.03162277660168379, + "var_copy_run_var-copy_TF_SSM_w50_d12_nh1_sd1_nn5_nv30": 0.03162277660168379, + "var_copy_run_var-copy_SSM_TF_w5_d12_nh1_sd1_nn5_nv30": 0.03162277660168379, + "var_copy_run_var-copy_TF_SSM_w100_d12_nh1_sd1_nn5_nv30": 0.03162277660168379, + "var_copy_run_var-copy_TF_SSM_w10_d12_nh1_sd1_nn5_nv30": 0.03162277660168379, + "var_copy_run_var-copy_TF_TF_w15_d12_nh1_sd1_nn5_nv30": 0.01, + "var_copy_run_var-copy_TF_TF_w10_d12_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "var_copy_run_var-copy_TF_TF_w30_d12_nh1_sd1_nn5_nv30": 0.01, + "var_copy_run_var-copy_TF_TF_w5_d12_nh1_sd1_nn5_nv30": 0.03162277660168379, + "var_copy_run_var-copy_SSM_TF_w15_d12_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_SSM_TF_w100_d12_nh1_sd2_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_TF_w10_d12_nh1_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_SSM_TF_w5_d12_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_SSM_TF_w15_d12_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_TF_TF_w50_d12_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_TF_SSM_w100_d12_nh1_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_TF_SSM_w30_d12_nh1_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_TF_SSM_w5_d12_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_SSM_w15_d12_nh1_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_SSM_TF_w10_d12_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_SSM_w50_d12_nh1_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_SSM_TF_w20_d12_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_SSM_w20_d12_nh1_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_TF_TF_w5_d12_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_TF_w30_d12_nh1_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_TF_TF_w15_d12_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_SSM_w10_d12_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_TF_w30_d12_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_SSM_TF_w50_d12_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_TF_w20_d12_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_TF_w100_d12_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_SSM_SSM_w5_d12_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_SSM_SSM_w50_d12_nh1_sd1_nn5_nv30": 0.005623413251903491, + "run_var-copy_SSM_SSM_w10_d12_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_SSM_SSM_w30_d12_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_SSM_TF_w100_d12_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_SSM_w100_d12_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_SSM_SSM_w20_d12_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_SSM_SSM_w15_d12_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_TF_TF_w20_d2_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_TF_w100_d2_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_TF_w100_d4_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_TF_w20_d4_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_TF_w20_d8_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_TF_TF_w20_d6_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_TF_w100_d6_nh1_sd1_nn5_nv30": 0.1, + "run_var-copy_TF_TF_w100_d8_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_TF_w100_d10_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_TF_w20_d10_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_TF_w20_d15_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_TF_w100_d15_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_TF_w20_d20_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_TF_w100_d20_nh1_sd1_nn5_nv30": 0.005623413251903491, + "run_var-copy_TF_SSM_w100_d2_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_SSM_w20_d2_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_SSM_w100_d4_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_SSM_w20_d4_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_SSM_w100_d6_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_TF_SSM_w20_d6_nh1_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_TF_SSM_w20_d8_nh1_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_TF_SSM_w20_d10_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_SSM_w100_d8_nh1_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_TF_SSM_w20_d15_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_SSM_w100_d10_nh1_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_TF_SSM_w100_d15_nh1_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_TF_SSM_w20_d20_nh1_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_TF_SSM_w100_d20_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_TF_w100_d2_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_TF_w20_d2_nh1_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_SSM_TF_w100_d4_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_SSM_TF_w100_d6_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_SSM_TF_w20_d4_nh1_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_SSM_TF_w20_d8_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_SSM_TF_w20_d6_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_TF_w100_d10_nh1_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_SSM_TF_w100_d8_nh1_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_SSM_TF_w20_d15_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_TF_w20_d10_nh1_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_SSM_TF_w100_d15_nh1_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_SSM_TF_w20_d20_nh1_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_SSM_SSM_w20_d2_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_SSM_TF_w100_d20_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_SSM_w100_d2_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_SSM_w100_d4_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_SSM_SSM_w20_d6_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_SSM_SSM_w20_d4_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_SSM_SSM_w100_d6_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_SSM_SSM_w100_d8_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_SSM_SSM_w20_d8_nh1_sd1_nn5_nv30": 0.005623413251903491, + "run_var-copy_SSM_SSM_w20_d10_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_SSM_SSM_w100_d10_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_SSM_SSM_w100_d15_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_SSM_SSM_w100_d20_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_SSM_w20_d15_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_SSM_SSM_w20_d20_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_TF_TF_w20_d12_nh2_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_TF_w20_d12_nh3_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_TF_w100_d12_nh2_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_TF_w20_d12_nh4_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_TF_w100_d12_nh3_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_SSM_w20_d12_nh2_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_TF_TF_w100_d12_nh4_sd1_nn5_nv30": 0.1, + "run_var-copy_TF_SSM_w20_d12_nh3_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_SSM_w20_d12_nh4_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_TF_SSM_w100_d12_nh2_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_TF_SSM_w100_d12_nh4_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_SSM_w100_d12_nh3_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_SSM_TF_w100_d12_nh2_sd1_nn5_nv30": 0.056234132519034905, + "run_var-copy_SSM_TF_w20_d12_nh3_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_SSM_TF_w20_d12_nh4_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_SSM_w20_d12_nh2_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_SSM_TF_w20_d12_nh2_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_SSM_SSM_w20_d12_nh3_sd1_nn5_nv30": 0.01, + "run_var-copy_SSM_TF_w100_d12_nh3_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_TF_w100_d12_nh4_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_SSM_w20_d12_nh4_sd1_nn5_nv30": 0.01, + "run_var-copy_SSM_SSM_w100_d12_nh3_sd1_nn5_nv30": 0.01, + "run_var-copy_SSM_SSM_w100_d12_nh2_sd1_nn5_nv30": 0.01, + "run_var-copy_SSM_SSM_w100_d12_nh4_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_TF_w20_d12_nh1_sd8_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_TF_w20_d12_nh1_sd2_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_TF_w20_d12_nh1_sd16_nn5_nv30": 0.01, + "run_var-copy_TF_TF_w20_d12_nh1_sd4_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_TF_w100_d12_nh1_sd2_nn5_nv30": 0.01, + "run_var-copy_TF_TF_w100_d12_nh1_sd4_nn5_nv30": 0.01, + "run_var-copy_TF_TF_w100_d12_nh1_sd16_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_SSM_w20_d12_nh1_sd4_nn5_nv30": 0.005623413251903491, + "run_var-copy_TF_SSM_w20_d12_nh1_sd2_nn5_nv30": 0.056234132519034905, + "run_var-copy_TF_TF_w100_d12_nh1_sd8_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_SSM_w20_d12_nh1_sd8_nn5_nv30": 0.01, + "run_var-copy_TF_SSM_w20_d12_nh1_sd16_nn5_nv30": 0.01, + "run_var-copy_TF_SSM_w100_d12_nh1_sd2_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_SSM_w100_d12_nh1_sd4_nn5_nv30": 0.01, + "run_var-copy_TF_SSM_w100_d12_nh1_sd8_nn5_nv30": 0.01, + "run_var-copy_SSM_TF_w20_d12_nh1_sd2_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_SSM_w100_d12_nh1_sd16_nn5_nv30": 0.01778279410038923, + "run_var-copy_SSM_TF_w20_d12_nh1_sd4_nn5_nv30": 0.056234132519034905, + "run_var-copy_SSM_TF_w20_d12_nh1_sd8_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_TF_w20_d12_nh1_sd16_nn5_nv30": 0.01, + "run_var-copy_SSM_TF_w100_d12_nh1_sd16_nn5_nv30": 0.01, + "run_var-copy_SSM_TF_w100_d12_nh1_sd4_nn5_nv30": 0.01, + "run_var-copy_SSM_TF_w100_d12_nh1_sd8_nn5_nv30": 0.01778279410038923, + "run_var-copy_SSM_SSM_w20_d12_nh1_sd2_nn5_nv30": 0.005623413251903491, + "run_var-copy_SSM_SSM_w20_d12_nh1_sd4_nn5_nv30": 0.01, + "run_var-copy_SSM_SSM_w20_d12_nh1_sd8_nn5_nv30": 0.01, + "run_var-copy_SSM_SSM_w100_d12_nh1_sd2_nn5_nv30": 0.01, + "run_var-copy_SSM_SSM_w20_d12_nh1_sd16_nn5_nv30": 0.005623413251903491, + "run_var-copy_SSM_SSM_w100_d12_nh1_sd4_nn5_nv30": 0.01, + "run_var-copy_SSM_SSM_w100_d12_nh1_sd16_nn5_nv30": 0.005623413251903491, + "run_var-copy_SSM_SSM_w100_d12_nh1_sd8_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_SSM_SSM_w100_d15_nh1_sd1_nn5_nv30": 0.005623413251903491, + "run_binary-recall-mix_SSM_SSM_w100_d20_nh1_sd1_nn5_nv30": 0.005623413251903491, + "run_binary-recall-mix_TF_TF_w100_d15_nh1_sd1_nn5_nv30": 0.005623413251903491, + "run_binary-recall-mix_SSM_TF_w100_d20_nh1_sd1_nn5_nv30": 0.005623413251903491, + "run_binary-recall-mix_TF_TF_w100_d20_nh1_sd1_nn5_nv30": 0.005623413251903491, + "run_binary-recall-mix_SSM_TF_w100_d15_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_TF_SSM_w100_d15_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_binary-recall-mix_TF_SSM_w100_d20_nh1_sd1_nn5_nv30": 0.005623413251903491, + "run_var-copy_TF_TF_w5_d20_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_TF_w50_d20_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_SSM_w50_d20_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_SSM_w5_d20_nh1_sd1_nn5_nv30": 0.0031622776601683794, + "run_var-copy_SSM_SSM_w50_d20_nh1_sd1_nn5_nv30": 0.005623413251903491, + "run_var-copy_TF_SSM_w10_d20_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_TF_w10_d20_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_SSM_SSM_w10_d20_nh1_sd1_nn5_nv30": 0.005623413251903491, + "run_var-copy_SSM_TF_w15_d20_nh1_sd1_nn5_nv30": 0.005623413251903491, + "run_var-copy_TF_TF_w30_d20_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_SSM_w30_d20_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_TF_TF_w15_d20_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_SSM_w5_d20_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_SSM_w15_d20_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_SSM_SSM_w15_d20_nh1_sd1_nn5_nv30": 0.005623413251903491, + "run_var-copy_SSM_TF_w5_d20_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_SSM_w30_d20_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_TF_w30_d20_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_TF_w10_d20_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_SSM_TF_w50_d20_nh1_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_SSM_w100_d20_nh2_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_SSM_w20_d20_nh4_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_SSM_w20_d20_nh2_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_TF_w20_d20_nh4_sd1_nn5_nv30": 0.1, + "run_var-copy_SSM_SSM_w20_d20_nh3_sd1_nn5_nv30": 0.005623413251903491, + "run_var-copy_TF_TF_w100_d20_nh2_sd1_nn5_nv30": 0.005623413251903491, + "run_var-copy_SSM_TF_w20_d20_nh2_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_SSM_SSM_w20_d20_nh2_sd1_nn5_nv30": 0.005623413251903491, + "run_var-copy_TF_TF_w100_d20_nh4_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_SSM_w100_d20_nh4_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_TF_w100_d20_nh4_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_TF_w20_d20_nh2_sd1_nn5_nv30": 0.01778279410038923, + "run_var-copy_SSM_TF_w20_d20_nh4_sd1_nn5_nv30": 0.01, + "run_var-copy_SSM_TF_w100_d20_nh2_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_SSM_w20_d20_nh4_sd1_nn5_nv30": 0.005623413251903491, + "run_var-copy_SSM_SSM_w100_d20_nh2_sd1_nn5_nv30": 0.01, + "run_var-copy_SSM_SSM_w100_d20_nh3_sd1_nn5_nv30": 0.0031622776601683794, + "run_var-copy_SSM_SSM_w100_d20_nh4_sd1_nn5_nv30": 0.005623413251903491, + "run_var-copy_TF_TF_w20_d20_nh1_sd2_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_TF_w20_d20_nh1_sd4_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_TF_w20_d20_nh1_sd8_nn5_nv30": 0.01778279410038923, + "run_var-copy_TF_TF_w100_d20_nh1_sd4_nn5_nv30": 0.005623413251903491, + "run_var-copy_TF_TF_w20_d20_nh1_sd16_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_TF_w100_d20_nh1_sd2_nn5_nv30": 0.01, + "run_var-copy_TF_TF_w100_d20_nh1_sd8_nn5_nv30": 0.01, + "run_var-copy_TF_SSM_w20_d20_nh1_sd8_nn5_nv30": 0.005623413251903491, + "run_var-copy_TF_SSM_w20_d20_nh1_sd2_nn5_nv30": 0.056234132519034905, + "run_var-copy_TF_SSM_w100_d20_nh1_sd16_nn5_nv30": 0.005623413251903491, + "run_var-copy_TF_SSM_w20_d20_nh1_sd4_nn5_nv30": 0.005623413251903491, + "run_var-copy_TF_SSM_w100_d20_nh1_sd8_nn5_nv30": 0.005623413251903491, + "run_var-copy_TF_SSM_w100_d20_nh1_sd2_nn5_nv30": 0.005623413251903491, + "run_var-copy_TF_TF_w100_d20_nh1_sd16_nn5_nv30": 0.005623413251903491, + "run_var-copy_SSM_TF_w100_d20_nh1_sd4_nn5_nv30": 0.005623413251903491, + "run_var-copy_SSM_TF_w100_d20_nh1_sd2_nn5_nv30": 0.056234132519034905, + "run_var-copy_TF_SSM_w100_d20_nh1_sd4_nn5_nv30": 0.01, + "run_var-copy_SSM_TF_w20_d20_nh1_sd16_nn5_nv30": 0.01, + "run_var-copy_SSM_TF_w20_d20_nh1_sd8_nn5_nv30": 0.056234132519034905, + "run_var-copy_TF_SSM_w20_d20_nh1_sd16_nn5_nv30": 0.0031622776601683794, + "run_var-copy_SSM_TF_w20_d20_nh1_sd2_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_TF_w20_d20_nh1_sd4_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_TF_w100_d20_nh1_sd8_nn5_nv30": 0.01, + "run_var-copy_SSM_TF_w100_d20_nh1_sd16_nn5_nv30": 0.01, + "run_var-copy_SSM_SSM_w20_d20_nh1_sd2_nn5_nv30": 0.005623413251903491, + "run_var-copy_SSM_SSM_w20_d20_nh1_sd4_nn5_nv30": 0.0017782794100389228, + "run_var-copy_SSM_SSM_w20_d20_nh1_sd8_nn5_nv30": 0.0031622776601683794, + "run_var-copy_SSM_SSM_w20_d20_nh1_sd16_nn5_nv30": 0.005623413251903491, + "run_var-copy_SSM_SSM_w100_d20_nh1_sd2_nn5_nv30": 0.0031622776601683794, + "run_var-copy_SSM_SSM_w100_d20_nh1_sd16_nn5_nv30": 0.0031622776601683794, + "run_var-copy_SSM_SSM_w100_d20_nh1_sd8_nn5_nv30": 0.0017782794100389228, + "run_var-copy_SSM_SSM_w100_d20_nh1_sd4_nn5_nv30": 0.0031622776601683794, + "run_assoc-recall-mk_SSM_SSM_w5_d12_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_SSM_w20_d12_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_SSM_w10_d12_nh1_sd1_nn5_nv6": 0.01, + "run_assoc-recall-mk_SSM_SSM_w50_d12_nh1_sd1_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_SSM_SSM_w15_d12_nh1_sd1_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_TF_TF_w20_d12_nh1_sd1_nn5_nv6": 0.056234132519034905, + "run_assoc-recall-mk_SSM_SSM_w20_d12_nh1_sd1_nn5_nv6": 0.01, + "run_assoc-recall-mk_SSM_TF_w5_d12_nh1_sd1_nn5_nv6": 0.01, + "run_assoc-recall-mk_TF_SSM_w15_d12_nh1_sd1_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_TF_SSM_w10_d12_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_TF_w20_d12_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_SSM_w100_d12_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_TF_w100_d12_nh1_sd1_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_TF_TF_w5_d12_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_TF_w10_d12_nh1_sd1_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_TF_TF_w15_d12_nh1_sd1_nn5_nv6": 0.056234132519034905, + "run_assoc-recall-mk_SSM_TF_w50_d12_nh1_sd1_nn5_nv6": 0.01, + "run_assoc-recall-mk_TF_SSM_w5_d12_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_TF_w100_d12_nh1_sd1_nn5_nv6": 0.01, + "run_assoc-recall-mk_TF_TF_w10_d12_nh1_sd1_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_TF_TF_w50_d12_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_TF_w15_d12_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_SSM_w50_d12_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_SSM_w100_d12_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_TF_w20_d2_nh1_sd1_nn5_nv6": 0.01, + "run_assoc-recall-mk_TF_TF_w100_d2_nh1_sd1_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_TF_TF_w20_d4_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_TF_w100_d4_nh1_sd1_nn5_nv6": 0.056234132519034905, + "run_assoc-recall-mk_TF_TF_w20_d6_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_TF_w100_d6_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_TF_w20_d8_nh1_sd1_nn5_nv6": 0.01, + "run_assoc-recall-mk_TF_TF_w20_d10_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_SSM_w100_d2_nh1_sd1_nn5_nv6": 0.01, + "run_assoc-recall-mk_TF_SSM_w20_d4_nh1_sd1_nn5_nv6": 0.005623413251903491, + "run_assoc-recall-mk_TF_SSM_w100_d6_nh1_sd1_nn5_nv6": 0.056234132519034905, + "run_assoc-recall-mk_TF_SSM_w100_d8_nh1_sd1_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_TF_TF_w100_d8_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_SSM_w20_d2_nh1_sd1_nn5_nv6": 0.01, + "run_assoc-recall-mk_TF_SSM_w20_d6_nh1_sd1_nn5_nv6": 0.056234132519034905, + "run_assoc-recall-mk_TF_SSM_w100_d4_nh1_sd1_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_TF_SSM_w20_d10_nh1_sd1_nn5_nv6": 0.01, + "run_assoc-recall-mk_TF_TF_w100_d10_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_SSM_w20_d8_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_SSM_w100_d10_nh1_sd1_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_SSM_TF_w20_d2_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_TF_w100_d2_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_TF_w20_d4_nh1_sd1_nn5_nv6": 0.01, + "run_assoc-recall-mk_SSM_TF_w100_d4_nh1_sd1_nn5_nv6": 0.056234132519034905, + "run_assoc-recall-mk_SSM_TF_w20_d6_nh1_sd1_nn5_nv6": 0.056234132519034905, + "run_assoc-recall-mk_SSM_TF_w100_d6_nh1_sd1_nn5_nv6": 0.056234132519034905, + "run_assoc-recall-mk_SSM_TF_w20_d8_nh1_sd1_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_SSM_TF_w100_d8_nh1_sd1_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_SSM_SSM_w20_d4_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_SSM_w100_d6_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_SSM_w100_d2_nh1_sd1_nn5_nv6": 0.056234132519034905, + "run_assoc-recall-mk_SSM_SSM_w100_d4_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_SSM_w100_d8_nh1_sd1_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_SSM_SSM_w20_d10_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_SSM_w20_d8_nh1_sd1_nn5_nv6": 0.01, + "run_assoc-recall-mk_SSM_SSM_w20_d2_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_TF_w100_d10_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_SSM_w20_d6_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_TF_w20_d10_nh1_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_SSM_w100_d10_nh1_sd1_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_TF_TF_w20_d12_nh2_sd1_nn5_nv6": 0.01, + "run_assoc-recall-mk_TF_TF_w20_d12_nh3_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_TF_w100_d12_nh2_sd1_nn5_nv6": 0.056234132519034905, + "run_assoc-recall-mk_TF_SSM_w20_d12_nh2_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_TF_w100_d12_nh3_sd1_nn5_nv6": 0.056234132519034905, + "run_assoc-recall-mk_TF_SSM_w20_d12_nh3_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_SSM_w100_d12_nh2_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_SSM_w100_d12_nh3_sd1_nn5_nv6": 0.005623413251903491, + "run_assoc-recall-mk_SSM_TF_w20_d12_nh2_sd1_nn5_nv6": 0.01, + "run_assoc-recall-mk_SSM_TF_w100_d12_nh2_sd1_nn5_nv6": 0.01, + "run_assoc-recall-mk_SSM_SSM_w100_d12_nh2_sd1_nn5_nv6": 0.005623413251903491, + "run_assoc-recall-mk_SSM_SSM_w100_d12_nh3_sd1_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_SSM_TF_w20_d12_nh3_sd1_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_SSM_SSM_w20_d12_nh3_sd1_nn5_nv6": 0.01, + "run_assoc-recall-mk_SSM_SSM_w20_d12_nh2_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_TF_w100_d12_nh3_sd1_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_TF_w20_d12_nh1_sd2_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_TF_w20_d12_nh1_sd8_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_TF_TF_w20_d12_nh1_sd4_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_TF_TF_w20_d12_nh1_sd16_nn5_nv6": 0.056234132519034905, + "run_assoc-recall-mk_TF_TF_w100_d12_nh1_sd2_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_TF_TF_w100_d12_nh1_sd4_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_SSM_w20_d12_nh1_sd4_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_TF_SSM_w20_d12_nh1_sd2_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_TF_TF_w100_d12_nh1_sd8_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_TF_w100_d12_nh1_sd16_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_SSM_w20_d12_nh1_sd8_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_TF_SSM_w20_d12_nh1_sd16_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_SSM_w100_d12_nh1_sd2_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_SSM_w100_d12_nh1_sd4_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_SSM_w100_d12_nh1_sd16_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_TF_SSM_w100_d12_nh1_sd8_nn5_nv6": 0.005623413251903491, + "run_assoc-recall-mk_SSM_TF_w20_d12_nh1_sd8_nn5_nv6": 0.01, + "run_assoc-recall-mk_SSM_TF_w20_d12_nh1_sd2_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_TF_w100_d12_nh1_sd4_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_TF_w20_d12_nh1_sd4_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_TF_w100_d12_nh1_sd2_nn5_nv6": 0.01, + "run_assoc-recall-mk_SSM_TF_w20_d12_nh1_sd16_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_SSM_TF_w100_d12_nh1_sd8_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_TF_w100_d12_nh1_sd16_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_SSM_w20_d12_nh1_sd2_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_SSM_w20_d12_nh1_sd4_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_SSM_w20_d12_nh1_sd16_nn5_nv6": 0.01, + "run_assoc-recall-mk_SSM_SSM_w100_d12_nh1_sd2_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_SSM_w100_d12_nh1_sd4_nn5_nv6": 0.03162277660168379, + "run_assoc-recall-mk_SSM_SSM_w100_d12_nh1_sd8_nn5_nv6": 0.01778279410038923, + "run_assoc-recall-mk_SSM_SSM_w100_d12_nh1_sd16_nn5_nv6": 0.01, + "run_assoc-recall-mk_SSM_SSM_w20_d12_nh1_sd8_nn5_nv6": 0.01778279410038923, + "run_var-copy_TF_SSM_w20_d12_nh2_sd2_nn5_nv30": 0.03162277660168379, + "run_var-copy_SSM_TF_w20_d12_nh2_sd2_nn5_nv30": 0.01778279410038923, + "run_read-write_SSM_SSM_w5_d12_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_SSM_SSM_w10_d12_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_SSM_TF_w15_d12_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_TF_TF_w50_d12_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_TF_SSM_w20_d12_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_TF_TF_w10_d12_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_SSM_w15_d12_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_TF_SSM_w5_d12_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_TF_w50_d12_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_TF_TF_w100_d12_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_TF_SSM_w50_d12_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_TF_TF_w15_d12_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_TF_w20_d12_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_TF_SSM_w100_d12_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_TF_w5_d12_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_SSM_TF_w100_d12_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_TF_SSM_w10_d12_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_SSM_TF_w10_d12_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_TF_TF_w5_d12_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_TF_w20_d12_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_SSM_SSM_w20_d12_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_SSM_SSM_w15_d12_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_SSM_SSM_w50_d12_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_SSM_SSM_w100_d12_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_TF_TF_w20_d2_nh1_sd1_nn0_nv30": 0.005623413251903491, + "run_read-write_TF_TF_w100_d2_nh1_sd1_nn0_nv30": 0.005623413251903491, + "run_read-write_TF_TF_w20_d10_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_TF_w20_d6_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_TF_w100_d4_nh1_sd1_nn0_nv30": 0.0031622776601683794, + "run_read-write_TF_SSM_w20_d4_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_TF_w20_d8_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_TF_w20_d4_nh1_sd1_nn0_nv30": 0.0031622776601683794, + "run_read-write_TF_TF_w100_d8_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_TF_w100_d10_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_SSM_w100_d4_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_SSM_w100_d6_nh1_sd1_nn0_nv30": 0.0031622776601683794, + "run_read-write_TF_SSM_w100_d2_nh1_sd1_nn0_nv30": 0.005623413251903491, + "run_read-write_TF_SSM_w20_d6_nh1_sd1_nn0_nv30": 0.0031622776601683794, + "run_read-write_TF_TF_w100_d6_nh1_sd1_nn0_nv30": 0.0031622776601683794, + "run_read-write_TF_SSM_w20_d2_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_SSM_w100_d8_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_TF_SSM_w20_d8_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_SSM_w20_d10_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_SSM_w100_d10_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_SSM_TF_w100_d2_nh1_sd1_nn0_nv30": 0.0031622776601683794, + "run_read-write_SSM_TF_w20_d2_nh1_sd1_nn0_nv30": 0.0031622776601683794, + "run_read-write_SSM_TF_w20_d4_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_TF_w20_d8_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_TF_w100_d4_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_SSM_w20_d2_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_SSM_w20_d4_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_TF_w20_d6_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_SSM_w100_d6_nh1_sd1_nn0_nv30": 0.0031622776601683794, + "run_read-write_SSM_SSM_w100_d4_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_SSM_TF_w100_d8_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_SSM_SSM_w20_d6_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_TF_w20_d10_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_TF_w100_d6_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_TF_w100_d10_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_SSM_w100_d2_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_SSM_w100_d8_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_SSM_SSM_w20_d8_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_SSM_SSM_w20_d10_nh1_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_SSM_w100_d10_nh1_sd1_nn0_nv30": 0.001, + "run_read-write_TF_TF_w20_d12_nh2_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_TF_w20_d12_nh3_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_TF_w100_d12_nh2_sd1_nn0_nv30": 0.001, + "run_read-write_TF_SSM_w100_d12_nh2_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_TF_w100_d12_nh3_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_SSM_w100_d12_nh3_sd1_nn0_nv30": 0.001, + "run_read-write_TF_SSM_w20_d12_nh2_sd1_nn0_nv30": 0.001, + "run_read-write_SSM_SSM_w20_d12_nh2_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_SSM_w20_d12_nh3_sd1_nn0_nv30": 0.001, + "run_read-write_TF_SSM_w20_d12_nh3_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_TF_w20_d12_nh2_sd1_nn0_nv30": 0.005623413251903491, + "run_read-write_SSM_SSM_w100_d12_nh2_sd1_nn0_nv30": 0.001, + "run_read-write_SSM_TF_w100_d12_nh3_sd1_nn0_nv30": 0.001, + "run_read-write_SSM_TF_w100_d12_nh2_sd1_nn0_nv30": 0.001, + "run_read-write_SSM_TF_w20_d12_nh3_sd1_nn0_nv30": 0.001, + "run_read-write_TF_SSM_w100_d12_nh3_sd1_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_TF_w20_d12_nh1_sd2_nn0_nv30": 0.001, + "run_read-write_TF_TF_w20_d12_nh1_sd4_nn0_nv30": 0.001, + "run_read-write_TF_TF_w20_d12_nh1_sd8_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_TF_w20_d12_nh1_sd16_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_SSM_w20_d12_nh1_sd2_nn0_nv30": 0.001, + "run_read-write_TF_SSM_w20_d12_nh1_sd8_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_SSM_w100_d12_nh1_sd2_nn0_nv30": 0.0031622776601683794, + "run_read-write_TF_TF_w100_d12_nh1_sd2_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_SSM_w20_d12_nh1_sd16_nn0_nv30": 0.001, + "run_read-write_TF_TF_w100_d12_nh1_sd4_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_TF_w100_d12_nh1_sd8_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_SSM_w20_d12_nh1_sd4_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_TF_w100_d12_nh1_sd16_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_TF_w20_d12_nh1_sd2_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_TF_w20_d12_nh1_sd4_nn0_nv30": 0.001, + "run_read-write_TF_SSM_w100_d12_nh1_sd8_nn0_nv30": 0.0017782794100389228, + "run_read-write_TF_SSM_w100_d12_nh1_sd4_nn0_nv30": 0.001, + "run_read-write_TF_SSM_w100_d12_nh1_sd16_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_TF_w20_d12_nh1_sd8_nn0_nv30": 0.001, + "run_read-write_SSM_TF_w20_d12_nh1_sd16_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_TF_w100_d12_nh1_sd2_nn0_nv30": 0.001, + "run_read-write_SSM_TF_w100_d12_nh1_sd4_nn0_nv30": 0.0017782794100389228, + "run_read-write_SSM_TF_w100_d12_nh1_sd8_nn0_nv30": 0.001, + "run_read-write_SSM_TF_w100_d12_nh1_sd16_nn0_nv30": 0.001, + "run_read-write_SSM_SSM_w20_d12_nh1_sd2_nn0_nv30": 0.001, + "run_read-write_SSM_SSM_w20_d12_nh1_sd8_nn0_nv30": 0.001, + "run_read-write_SSM_SSM_w20_d12_nh1_sd4_nn0_nv30": 0.001, + "run_read-write_SSM_SSM_w20_d12_nh1_sd16_nn0_nv30": 0.001, + "run_read-write_SSM_SSM_w100_d12_nh1_sd4_nn0_nv30": 0.001, + "run_read-write_SSM_SSM_w100_d12_nh1_sd16_nn0_nv30": 0.001, + "run_read-write_SSM_SSM_w100_d12_nh1_sd2_nn0_nv30": 0.001, + "run_read-write_SSM_SSM_w100_d12_nh1_sd8_nn0_nv30": 0.001, + "run_var-copy_TF_SSM_w100_d24_nh1_sd1_nn5_nv30": 0.03162277660168379, + "run_var-copy_TF_TF_w100_d24_nh1_sd1_nn5_nv30": 0.005623413251903491, + "run_var-copy_SSM_SSM_w100_d24_nh1_sd1_nn5_nv30": 0.01, + "run_var-copy_SSM_TF_w100_d24_nh1_sd1_nn5_nv30": 0.01778279410038923 +} \ No newline at end of file diff --git a/source/official-code/micro/models/mlp.py b/source/official-code/micro/models/mlp.py new file mode 100644 index 0000000000000000000000000000000000000000..2b01a8914288fb8f090bc98229eb10554ed5db07 --- /dev/null +++ b/source/official-code/micro/models/mlp.py @@ -0,0 +1,15 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + +class SimpleMLPLayer(nn.Module): + def __init__(self, input_dim, hidden_dim, output_dim): + super(SimpleMLPLayer, self).__init__() + self.fc1 = nn.Linear(input_dim, hidden_dim) + self.act = F.relu + self.fc2 = nn.Linear(hidden_dim, output_dim) + + def forward(self, x, mask=None): + x = self.act(self.fc1(x)) + x = self.fc2(x) + return x \ No newline at end of file diff --git a/source/official-code/micro/models/ssm.py b/source/official-code/micro/models/ssm.py new file mode 100644 index 0000000000000000000000000000000000000000..ccf68f663c46dda5b2dfe59d326d5b266094a527 --- /dev/null +++ b/source/official-code/micro/models/ssm.py @@ -0,0 +1,25 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + +from mamba_ssm import Mamba + +class SimpleSSMLayer(nn.Module): + def __init__(self, d_model, d_state, d_conv=4, expand=2): + super().__init__() + + self.d_model = d_model + self.d_state = d_state + + self.mamba = Mamba( + d_model=d_model, # Model dimension + d_state=d_state, # SSM state expansion factor + d_conv=d_conv, # Local convolution width + expand=expand, # Block expansion factor + dt_rank=1 # DESIGN DECISION, for construction + ) + + def forward(self, x, mask=None): + # x: (batch, seq_len, d_model) + return x + self.mamba(x) + # return self.mamba(x) \ No newline at end of file diff --git a/source/official-code/micro/models/transformer.py b/source/official-code/micro/models/transformer.py new file mode 100644 index 0000000000000000000000000000000000000000..d1931863ca9b11106fb2c41931f451c9d6663408 --- /dev/null +++ b/source/official-code/micro/models/transformer.py @@ -0,0 +1,151 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + +# Causal mask: Prevent attending to future tokens +def generate_mask(sz, window=None): + if not window: + mask = (torch.triu(torch.ones(sz, sz)) == 1).transpose(0, 1) + else: + mask = (torch.triu(torch.ones(sz, sz)) - torch.triu(torch.ones(sz, sz), diagonal=window) == 1).transpose(0, 1) + mask = mask.float().masked_fill(mask == 0, float('-inf')).masked_fill(mask == 1, float(0.0)) + return mask + +#################################################################################### + +def scaled_dot_product_attention(q, k, v, mask=None): + d_k = q.size(-1) + scores = torch.matmul(q, k.transpose(-2, -1)) / torch.sqrt(torch.tensor(d_k, dtype=torch.float32)) + + if mask is not None: + scores = scores.masked_fill(mask == float('-inf'), float('-inf')) + # scores = scores.masked_fill(mask == 0, float('-inf')) + + attn = F.softmax(scores, dim=-1) + output = torch.matmul(attn, v) + return output, attn + + +class MultiHeadAttention(nn.Module): + def __init__(self, embed_dim, num_heads, dropout=0.1): + super().__init__() + assert embed_dim % num_heads == 0, "Embedding dimension must be divisible by number of heads" + + self.embed_dim = embed_dim + self.num_heads = num_heads + # self.head_dim = embed_dim // num_heads + self.head_dim = embed_dim + + self.q_proj = nn.Linear(embed_dim, self.head_dim*self.num_heads) + self.k_proj = nn.Linear(embed_dim, self.head_dim*self.num_heads) + self.v_proj = nn.Linear(embed_dim, self.head_dim*self.num_heads) + self.out_proj = nn.Linear(embed_dim, embed_dim) + + self.dropout = nn.Dropout(dropout) + + def forward(self, query, key, value, mask=None): + B, T, _ = query.size() + + # Linear projections + q = self.q_proj(query).view(B, T, self.num_heads, self.head_dim).transpose(1, 2) + k = self.k_proj(key).view(B, T, self.num_heads, self.head_dim).transpose(1, 2) + v = self.v_proj(value).view(B, T, self.num_heads, self.head_dim).transpose(1, 2) + + # Apply attention on all the projected vectors in batch + attn_output, _ = scaled_dot_product_attention(q, k, v, mask) + + # Concatenate heads and run through final linear layer + # attn_output = attn_output.transpose(1, 2).contiguous().view(B, T, self.embed_dim) + attn_output = attn_output.transpose(1, 2).sum(dim=2).view(B, T, self.embed_dim) + output = self.out_proj(attn_output) + return output + + +class TransformerHead(nn.Module): + def __init__(self, embed_dim, num_heads, ff_dim, dropout=0.1, do_norm=True): + super().__init__() + self.mha = MultiHeadAttention(embed_dim, num_heads, dropout) + if do_norm: + self.norm1 = nn.LayerNorm(embed_dim) + self.norm2 = nn.LayerNorm(embed_dim) + else: + self.norm1 = nn.Identity(embed_dim) + self.norm2 = nn.Identity(embed_dim) + + self.ffn = nn.Sequential( + nn.Linear(embed_dim, ff_dim), + nn.ReLU(), + nn.Dropout(dropout), + nn.Linear(ff_dim, embed_dim), + ) + self.dropout = nn.Dropout(dropout) + + def forward(self, x, mask=None): + # Multi-head attention + residual + norm + x_norm = self.norm1(x) + attn_out = self.mha(x_norm, x_norm, x_norm, mask) + # x = x + self.norm1(self.dropout(attn_out)) + x = x + self.dropout(attn_out) + + # Feedforward + residual + norm + x_norm = self.norm2(x) + ff_out = self.ffn(x_norm) + # x = x + self.norm2(self.dropout(ff_out)) + x = x + self.dropout(ff_out) + return x + + +class SimpleHandmadeTFLayer(nn.Module): + def __init__(self, d_model, nhead, causal=True, do_norm=True): + super().__init__() + self.transformer_encoder = TransformerHead(d_model, nhead, d_model, dropout=0.2, do_norm=do_norm) + self.d_model = d_model + self.nhead = nhead + self.causal = causal + + def forward(self, x, mask): + # xx = x.permute(1, 0, 2) # (seq_len, batch_size, d_model) + xx = x + if self.causal: + xx = self.transformer_encoder(xx, mask=mask) + else: + xx = self.transformer_encoder(xx) + # return xx.permute(1, 0, 2) # Already includes the skip connection + return xx # Already includes the skip connection + + # # Finds the average required memory for select data + # def required_activation_memory(self, x, mask, thres=0.01): + # B, T, _ = x.size() + + # # Linear projections + # mha = self.transformer_encoder.mha + # q = mha.q_proj(x).view(B, T, self.nhead, self.d_model // self.nhead).transpose(1, 2) + # k = mha.k_proj(x).view(B, T, self.nhead, self.d_model // self.nhead).transpose(1, 2) + # v = mha.v_proj(x).view(B, T, self.nhead, self.d_model // self.nhead).transpose(1, 2) + + # attn_output, attn_weights = scaled_dot_product_attention(q, k, v, mask) + # # This calculation is saying 'we only need the tokens where the last token attends highly with it' + # # It's not exactly what we are going for, so we need to think about this more + # return (torch.sum(attn_weights[:, 0, -1, :] > thres) / x.shape[0] * self.d_model).item() + +#################################################################################### + +# A simple wrapper for the PyTorch transformer encoder layers +class SimplePyTorchTFLayer(nn.Module): + def __init__(self, d_model, nhead, causal=True): + super().__init__() + encoder_layer = nn.TransformerEncoderLayer(d_model=d_model, nhead=nhead, dim_feedforward=d_model, dropout=0.2) + self.transformer_encoder = nn.TransformerEncoder(encoder_layer, num_layers=1) + self.d_model = d_model + self.nhead = nhead + self.causal = causal + + def forward(self, x, mask): + xx = x.permute(1, 0, 2) # (seq_len, batch_size, d_model) + # xx = x + if self.causal: + xx = self.transformer_encoder(xx, mask=mask) + else: + xx = self.transformer_encoder(xx) + # return x + xx + return x + xx.permute(1, 0, 2) # (batch_size, seq_len, vocab_size) \ No newline at end of file diff --git a/source/official-code/micro/ood.ipynb b/source/official-code/micro/ood.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..42380d1992117d393ba9aac15fd8545ffce9269e --- /dev/null +++ b/source/official-code/micro/ood.ipynb @@ -0,0 +1,1010 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 7, + "id": "e957187d-9efd-41ac-a96f-5c80582bfba5", + "metadata": { + "execution": { + "iopub.execute_input": "2025-11-14T12:22:34.327156Z", + "iopub.status.busy": "2025-11-14T12:22:34.326560Z", + "iopub.status.idle": "2025-11-14T12:22:34.335404Z", + "shell.execute_reply": "2025-11-14T12:22:34.333721Z" + } + }, + "outputs": [], + "source": [ + "import subprocess\n", + "from concurrent.futures import ThreadPoolExecutor, as_completed" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "b4ad0906-3be6-4361-a2eb-975bf10e3b39", + "metadata": { + "execution": { + "iopub.execute_input": "2025-11-14T12:22:34.341937Z", + "iopub.status.busy": "2025-11-14T12:22:34.340486Z", + "iopub.status.idle": "2025-11-14T12:22:34.347937Z", + "shell.execute_reply": "2025-11-14T12:22:34.346156Z" + } + }, + "outputs": [], + "source": [ + "task_name = \"var_copy\"" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "9857d742-ffcd-4ad8-a16c-f3cf7ed3ad35", + "metadata": { + "execution": { + "iopub.execute_input": "2025-11-14T12:22:34.354053Z", + "iopub.status.busy": "2025-11-14T12:22:34.353499Z", + "iopub.status.idle": "2025-11-14T12:22:34.369540Z", + "shell.execute_reply": "2025-11-14T12:22:34.369053Z" + } + }, + "outputs": [], + "source": [ + "# For variable copy\n", + "if task_name == \"var_copy\":\n", + " experiment1_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [12, 24], 'window': [5, 10, 15, 20, 30, 50, 100], 'nh': [1], 'sd': [1]}\n", + " experiment2_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [2, 4, 6, 8, 10, 12, 15, 20, 24], 'window': [100], 'nh': [1], 'sd': [1]}\n", + " experiment3_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [12, 24], 'window': [100], 'nh': [2,3,4], 'sd': [1]}\n", + " experiment4_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [12, 24], 'window': [100], 'nh': [1], 'sd': [2,4,8,16]}\n", + " experiment5_params = {'layer1': ['TF-nC'], 'layer2': ['TF-nC'], 'd': [2, 4, 6, 8, 10, 12, 15, 20, 24], 'window': [100], 'nh': [1], 'sd': [1]}\n", + "\n", + "# For binary recall\n", + "if task_name in [\"binary_recall_mix\"]:\n", + " experiment1_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [6], 'window': [5, 10, 15, 20, 30, 50, 100], 'nh': [1], 'sd': [1]}\n", + " experiment2_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [2, 4, 8, 10, 12, 15, 20], 'window': [100], 'nh': [1], 'sd': [1]}\n", + " experiment3_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [6], 'window': [100], 'nh': [2,3], 'sd': [1]}\n", + " experiment4_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [6], 'window': [100], 'nh': [1], 'sd': [2,4,8,16]}\n", + " experiment5_params = {'layer1': ['TF-nC'], 'layer2': ['TF-nC'], 'd': [2, 4, 6, 8, 10, 12, 15, 20], 'window': [100], 'nh': [1], 'sd': [1]}\n", + "\n", + "# For associative recall\n", + "if task_name in [\"assoc_recall\", \"assoc_recall_mk\"]:\n", + " experiment1_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [12], 'window': [5, 10, 15, 20, 50, 100], 'nh': [1], 'sd': [1]}\n", + " experiment2_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [2, 4, 6, 8, 10, 12], 'window': [100], 'nh': [1], 'sd': [1]}\n", + " experiment3_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [12], 'window': [100], 'nh': [2,3], 'sd': [1]}\n", + " experiment4_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [12], 'window': [100], 'nh': [1], 'sd': [2,4,8,16]}\n", + " experiment5_params = {'layer1': ['TF-nC'], 'layer2': ['TF-nC'], 'd': [2, 4, 6, 8, 10, 12], 'window': [100], 'nh': [1], 'sd': [1]}\n", + "\n", + "# For read write\n", + "if task_name in [\"read_write\"]:\n", + " experiment1_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [12], 'window': [5, 10, 15, 20, 50, 100], 'nh': [1], 'sd': [1]}\n", + " experiment2_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [2, 4, 6, 8, 10, 12], 'window': [100], 'nh': [1], 'sd': [1]}\n", + " experiment3_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [12], 'window': [100], 'nh': [2,3], 'sd': [1]}\n", + " experiment4_params = {'layer1': ['TF', 'SSM'], 'layer2': ['TF', 'SSM'], 'd': [12], 'window': [100], 'nh': [1], 'sd': [2,4,8,16]}\n", + " experiment5_params = {'layer1': ['TF-nC'], 'layer2': ['TF-nC'], 'd': [2, 4, 6, 8, 10, 12], 'window': [100], 'nh': [1], 'sd': [1]}" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "501791fd-5cd8-4086-86bf-655500db978c", + "metadata": { + "execution": { + "iopub.execute_input": "2025-11-14T12:22:34.371167Z", + "iopub.status.busy": "2025-11-14T12:22:34.370966Z", + "iopub.status.idle": "2025-11-14T12:22:34.376706Z", + "shell.execute_reply": "2025-11-14T12:22:34.375888Z" + } + }, + "outputs": [], + "source": [ + "# List of commands to run\n", + "commands = []\n", + "\n", + "def make_command(layer1, layer2, embed_dim, window, num_heads, state_dim, run_number=0):\n", + " cmd = f\"python3 train.py --run_number {run_number} --task_name {task_name} --layer1 {layer1} --layer2 {layer2} --embed_dim {embed_dim} --window {window} --num_heads {num_heads} --state_dim {state_dim} --save True\"\n", + " cmd += \" --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True\"\n", + " return cmd\n", + "\n", + "for run_number in range(11):\n", + " for experiment in [experiment2_params]:\n", + " for layer1 in experiment[\"layer1\"]:\n", + " for layer2 in experiment[\"layer2\"]:\n", + " for embed_dim in experiment[\"d\"]:\n", + " for window in experiment[\"window\"]:\n", + " for num_heads in experiment[\"nh\"]:\n", + " for state_dim in experiment[\"sd\"]:\n", + " commands.append(make_command(layer1, layer2, embed_dim, window, num_heads, state_dim, run_number))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "b9e6a6e5-bfbd-44b8-9c76-591e8cd47ec4", + "metadata": { + "execution": { + "iopub.execute_input": "2025-11-14T12:22:34.378665Z", + "iopub.status.busy": "2025-11-14T12:22:34.378539Z", + "iopub.status.idle": "2025-11-14T12:22:34.385242Z", + "shell.execute_reply": "2025-11-14T12:22:34.385038Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True',\n", + " 'python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True']" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "# commands = ['python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 20 --num_heads 1 --state_dim 2 --save True']\n", + "commands" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "30f4f897-7954-4843-a4a3-c1abe3a66ea3", + "metadata": { + "execution": { + "iopub.execute_input": "2025-11-14T12:22:34.386293Z", + "iopub.status.busy": "2025-11-14T12:22:34.386208Z", + "iopub.status.idle": "2025-11-14T12:42:47.145027Z", + "shell.execute_reply": "2025-11-14T12:42:47.132773Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 0 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 1 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 2 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 3 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 4 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 5 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 6 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 7 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 8 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 9 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 TF --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 TF --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 2 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 4 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 6 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 10 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 8 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 12 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 15 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 20 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n", + "[python3 train.py --run_number 10 --task_name var_copy --layer1 SSM --layer2 SSM --embed_dim 24 --window 100 --num_heads 1 --state_dim 1 --save True --p 0.1 --ood_eval True --eval_p 0.5 --force_learn True] exited with 0\n" + ] + } + ], + "source": [ + "def run_command(cmd):\n", + " \"\"\"Run a single shell command and return (cmd, returncode, stdout, stderr).\"\"\"\n", + " result = subprocess.run(cmd, shell=True, capture_output=True, text=True)\n", + " return cmd, result.returncode, result.stdout, result.stderr\n", + "\n", + "max_workers = 20\n", + "\n", + "with ThreadPoolExecutor(max_workers=max_workers) as executor:\n", + " futures = {executor.submit(run_command, cmd): cmd for cmd in commands}\n", + "\n", + " for future in as_completed(futures):\n", + " cmd, returncode, stdout, stderr = future.result()\n", + " print(f\"[{cmd}] exited with {returncode}\")\n", + " if returncode == 1:\n", + " executor.shutdown()\n", + " print(stdout)\n", + " print(stderr)\n", + " assert False" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d4bc2226-523f-42de-9fc1-d46f96103d4d", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "hybrid", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/source/official-code/micro/plt_utils.py b/source/official-code/micro/plt_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..56446cacba7af133bae8073e40f67e3a82a19c09 --- /dev/null +++ b/source/official-code/micro/plt_utils.py @@ -0,0 +1,171 @@ +import numpy as np +import torch +import matplotlib.pyplot as plt +from collections import defaultdict +import os + +# colors = {"TF": {"TF": "blue", "SSM": "orange"}, "SSM": {"TF": "green", "SSM": "red"}, "TF-nC": {"TF-nC": "brown"}} +colors = {"TF_TF": "blue", "TF_SSM": "orange", "SSM_TF": "green", "SSM_SSM": "red", "TF-nC_TF-nC": "brown"} + + + +def Int(s): return int("".join([c for c in s if c.isnumeric()])) +def Empty(): return [] + + + +def get_val_and_bounds(data): + mean = np.mean(data, axis=0) + median = np.median(data, axis=0) + + # return mean, np.min(data, axis=0), np.max(data, axis=0) + # return mean, mean-np.std(data, axis=0), mean+np.std(data, axis=0) + # return median, np.min(data, axis=0), np.max(data, axis=0) + return median, np.quantile(data, 0.10, axis=0), np.quantile(data, 0.90, axis=0) + + +def savefig(taskname, filename): + if "fig" not in os.listdir("results/" + taskname): + os.mkdir("results/" + taskname + "/fig") + + plt.savefig("results/" + taskname + "/fig/" + filename + ".png") + + + +split_array = ['_', 'task_name', 'layer1', 'layer2', 'window', 'dim', 'num_heads', 'state_dim'] +def plot(data, params, ind_var, diff_lines="layers", param_counts=None, x_axis=None): + fig, ax = plt.subplots() + if x_axis == 'epochs': + xs = defaultdict(Empty) + ys = defaultdict(Empty) + ys_lower = defaultdict(Empty) + ys_upper = defaultdict(Empty) + + # Get the relevant data for these params + for k in data.keys(): + d = dict(zip(split_array, k.split('_'))) + if diff_lines != 'layer1' and params['layer1'] != d['layer1']: continue + if diff_lines != 'layer2' and params['layer2'] != d['layer2']: continue + if diff_lines != 'window' and params['window'] != Int(d['window']): continue + if diff_lines != 'dim' and params['dim'] != Int(d['dim']): continue + if diff_lines != 'num_heads' and params['num_heads'] != Int(d['num_heads']): continue + if diff_lines != 'state_dim' and params['state_dim'] != Int(d['state_dim']): continue + + key = Int(d[diff_lines]) + + xs[key] = np.arange(0, data[k].shape[1]) + ys[key], ys_lower[key], ys_upper[key] = get_val_and_bounds(data[k]) + + legend = [] + keys = sorted(list(ys.keys())) + for key in keys: + plt.plot(xs[key], ys[key]) + legend.append(key) + + plt.legend(legend) + + for key in ys.keys(): + plt.fill_between(xs[key], ys_lower[key], ys_upper[key], color='lightblue', alpha=0.08) + + + elif diff_lines == 'layers': + xs = defaultdict(Empty) + ys = defaultdict(Empty) + ys_lower = defaultdict(Empty) + ys_upper = defaultdict(Empty) + + # Get the relevant data for these params + for k in data.keys(): + d = dict(zip(split_array, k.split('_'))) + if ind_var != 'window' and params['window'] != Int(d['window']): continue + if ind_var != 'dim' and params['dim'] != Int(d['dim']): continue + if ind_var != 'num_heads' and params['num_heads'] != Int(d['num_heads']): continue + if ind_var != 'state_dim' and params['state_dim'] != Int(d['state_dim']): continue + + key = d['layer1'] + '_' + d['layer2'] + + if d['layer2'].isnumeric(): + print("Ignoring", key) + continue + + if x_axis == 'params': + xs[key].append(param_counts[k]) + else: + xs[key].append(Int(d[ind_var])) + + r1, r2, r3 = get_val_and_bounds(data[k][:, -1]) + ys[key].append(r1) + ys_lower[key].append(r2) + ys_upper[key].append(r3) + + # Sort the data so it is in order on the x axis + for key in ys.keys(): + ys[key] = [a[1] for a in sorted(zip(xs[key], ys[key]))] + ys_lower[key] = [a[1] for a in sorted(zip(xs[key], ys_lower[key]))] + ys_upper[key] = [a[1] for a in sorted(zip(xs[key], ys_upper[key]))] + xs[key].sort() + + # Plot the lines + legend = [] + for key in ys.keys(): + if key == "SSM_SSM" and ind_var == "num_heads" or key == "TF_TF" and ind_var == "state_dim": + plt.axhline(y=ys[key][0], color=colors[key], linestyle='dashed') + else: + plt.plot(xs[key], ys[key], c=colors[key]) + legend.append(key) + plt.legend(legend) + + # Plot the error bars + for key in ys.keys(): + if key == "SSM_SSM" and ind_var == "num_heads" or key == "TF_TF" and ind_var == "state_dim": + plt.fill_between(ax.get_xlim(), ys_lower[key][0], ys_upper[key][0], color=colors[key], alpha=0.08) + else: + plt.fill_between(xs[key], ys_lower[key], ys_upper[key], color=colors[key], alpha=0.08) + + + elif diff_lines == 'depths': + assert False # TODO: Doesn't plot across depth + xs = defaultdict(Empty) + ys = defaultdict(Empty) + ys_lower = defaultdict(Empty) + ys_upper = defaultdict(Empty) + + # Get the relevant data for these params + for k in data.keys(): + d = dict(zip(split_array, k.split('_'))) + if ind_var != 'window' and params['window'] != Int(d['window']): continue + if ind_var != 'dim' and params['dim'] != Int(d['dim']): continue + if ind_var != 'num_heads' and params['num_heads'] != Int(d['num_heads']): continue + if ind_var != 'state_dim' and params['state_dim'] != Int(d['state_dim']): continue + + key = d['layer1'] + '_' + d['layer2'] + + if x_axis == 'params': + xs[key].append(param_counts[key]) + else: + xs[key].append(Int(d[ind_var])) + + r1, r2, r3 = get_val_and_bounds(data[k][:, -1]) + ys[key].append(r1) + ys_lower[key].append(r2) + ys_upper[key].append(r3) + + # Sort the data so it is in order on the x axis + for key in ys.keys(): + ys[key] = [a[1] for a in sorted(zip(xs[key], ys[key]))] + ys_lower[key] = [a[1] for a in sorted(zip(xs[key], ys_lower[key]))] + ys_upper[key] = [a[1] for a in sorted(zip(xs[key], ys_upper[key]))] + xs[key].sort() + + # Plot the lines + legend = [] + for key in ys.keys(): + plt.plot(xs[key], ys[key], c=colors[key.split("_")[0] + "_" + key.split("_")[0]]) + legend.append(key) + plt.legend(legend) + + # Plot the error bars + for key in ys.keys(): + plt.fill_between(xs[key], ys_lower[key], ys_upper[key], color=colors[key.split("_")[0] + "_" + key.split("_")[0]], alpha=0.08) + + return diff_lines + "_" + ind_var \ No newline at end of file diff --git a/source/official-code/micro/process.ipynb b/source/official-code/micro/process.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..b2784966c63a4709b3d4547547f66767afcbc49f --- /dev/null +++ b/source/official-code/micro/process.ipynb @@ -0,0 +1,376 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 132, + "id": "15e7bc6a-c8fd-4803-9907-6b744a5819be", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "code", + "execution_count": 133, + "id": "2536cab8-1d4d-4d69-8d34-ba1547c892c4", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import torch\n", + "import matplotlib as mpl\n", + "import matplotlib.pyplot as plt\n", + "\n", + "mpl.rcParams.update({\n", + " \"figure.figsize\": (6, 4),\n", + " \"axes.spines.top\": False,\n", + " \"axes.spines.right\": False,\n", + " \"axes.xmargin\": 0,\n", + " \"axes.grid\": True,\n", + " \"grid.linestyle\": \"--\",\n", + " \"grid.linewidth\": 0.5,\n", + " \"axes.titlesize\": 14,\n", + " \"axes.labelsize\": 12,\n", + " \"xtick.labelsize\": 10,\n", + " \"ytick.labelsize\": 10,\n", + " \"font.size\": 11,\n", + " \"lines.linewidth\": 2,\n", + " \"lines.markersize\": 6,\n", + " \"legend.frameon\": True,\n", + "})\n", + "\n", + "# mpl.rcParams.update({\n", + "# \"figure.figsize\": (6, 4),\n", + "# \"axes.spines.top\": False,\n", + "# \"axes.spines.right\": False,\n", + "# \"axes.facecolor\": \"#fafafa\",\n", + "# \"axes.grid\": True,\n", + "# \"grid.color\": \"#dddddd\",\n", + "# \"grid.linestyle\": \"--\",\n", + "# \"axes.prop_cycle\": mpl.cycler(color=[\"#4C72B0\", \"#55A868\", \"#C44E52\",\n", + "# \"#8172B2\", \"#CCB974\", \"#64B5CD\"]),\n", + "# \"font.size\": 11,\n", + "# \"axes.labelsize\": 12,\n", + "# \"axes.titlesize\": 14,\n", + "# \"legend.frameon\": True,\n", + "# \"legend.facecolor\": \"white\",\n", + "# \"legend.edgecolor\": \"#dddddd\",\n", + "# \"lines.linewidth\": 2,\n", + "# })\n", + "\n", + "from plt_utils import plot, savefig\n", + "\n", + "import os\n", + "\n", + "task_name, data_name, default_window, default_token_dim = \"assoc_recall\", \"data_100_30\", 20, 6\n", + "# task_name, data_name, default_window, default_token_dim = \"assoc_recall_mk\", \"data_100_6\", 100, 12\n", + "# task_name, data_name, default_window, default_token_dim = \"var_copy\", \"data_100_5_30\", 20, 12\n", + "# task_name, data_name, default_window, default_token_dim = \"binary_recall_mix\", \"data_100_4\", 100, 12" + ] + }, + { + "cell_type": "code", + "execution_count": 134, + "id": "d84cc6a2-95b6-4091-8434-d157a6605ac6", + "metadata": {}, + "outputs": [], + "source": [ + "dashed_task_name = '-'.join(task_name.split('_'))\n", + "\n", + "all_losses = {}\n", + "all_accs = {}\n", + "all_params = {}" + ] + }, + { + "cell_type": "code", + "execution_count": 135, + "id": "db00c2f6-aad7-4330-b4c0-35edc28bc8ca", + "metadata": {}, + "outputs": [], + "source": [ + "for run_name in os.listdir(\"results/\" + task_name + \"/\" + data_name):\n", + " if len(run_name.split(\"_\")) != 10: continue\n", + "\n", + " for run in os.listdir(\"results/\" + task_name + \"/\" + data_name + \"/\" + run_name):\n", + " if run.startswith(\".\"):\n", + " continue\n", + " \n", + " # print(\"results/\" + task_name + \"/\" + data_name + \"/\" + run_name + \"/\" + run)\n", + " data = torch.load(\"results/\" + task_name + \"/\" + data_name + \"/\" + run_name + \"/\" + run, weights_only=False)\n", + " losses = data[\"losses\"]\n", + " accs = data[\"accs\"]\n", + " # args = data[\"args\"]\n", + " params = data[\"param_count\"]\n", + "\n", + " if run_name not in all_losses.keys():\n", + " all_losses[run_name] = losses.unsqueeze(0)\n", + " all_accs[run_name] = accs.unsqueeze(0)\n", + " all_params[run_name] = params\n", + " else:\n", + " all_accs[run_name] = torch.cat((all_accs[run_name], accs.unsqueeze(0)))\n", + " all_losses[run_name] = torch.cat((all_losses[run_name], losses.unsqueeze(0)))\n", + "\n", + "for run_name in all_losses.keys():\n", + " all_losses[run_name] = all_losses[run_name].detach().numpy()\n", + " all_accs[run_name] = all_accs[run_name].detach().numpy()" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "id": "19ab59e6-0045-45fd-a438-bb35bdf8a6b4", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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237zm98IQPzyl790pbkLkLffflskJSWJ8vJyUV9f77Hv+vXrfa6NO05xv2XLFleaU4B4H8u5LSsrKxhzXZXpunXrfLZdddVVIQuQ++67z+c4zuv27LPP+mybMmWKmDRpkmtdURSRmZkpysrKfJ5FIYR46623fFpBnM+iv98T5zb3F4xgnxN/AiSc74rzWf3ggw98zuHc1tXV5bPNKdACPRdxPImPgjlCefPNN2lpaeGqq67CZDK50i+99FJeeOEFli9fzqmnnupKX7NmDYBHmj96enrYvn075eXlVFRUjEzhgUWLFgXctmrVKpYtW8bq1atpbW3Fbre7thmNxrDLeu211/LHP/6Rv/71r5x88skArFu3jg0bNnDRRReRlZU15DEOHz4MQEZGhs+2UMqzceNGAJYsWeLjVyHLMscffzw7duxg48aNFBcXBzzOhg0bAPwOYz3xxBM9zuXOwoULBy1fsFxwwQU89thjzJw5kwsuuIATTzyRo48+msTExIgcf8OGDSQlJfl9Xgaz79VXX+W///0vs2fP5j//+Q+5ubke27/44gsAmpqafGJuAOzYscP1OXPmTFd6RkYGpaWlPvmLioqC8h8C2LRpE8nJycybN89n23HHHReyI3l1dbVPmtOJM9C21atXu9Zrampob2+noKCA++67zyd/S0sLMHBN3Jk/f75PWlFREQAdHR2utOE8J8P5rgxVPm8ncudvQGtr65DlihMfhnvE4vyRuvTSSz3STz75ZAoLC3nzzTdpa2tzfaE6OzuRJGlI7/LOzk5AGw43kuTl5flNf/XVVzn//PNJSUnhtNNOY/LkySQlJbkcE90dbEMta1VVFUuWLOGNN97g8OHDTJgwgaeeegqAa665JqhjOH8wzWazz7ZQytPV1QUEvg7O++TMN9hxZFkmJyfHZ1teXh6SJPk9RqDzhsrDDz9MaWkpK1as4Ne//jW//vWvMZlMnHfeefzhD38gOzt7WMfv6uoKKMAGu0aff/45drud4447zkd8ALS1tQHw9ttv8/bbbwc8f29vr8d6oOGher3ex/EyEJ2dnQFtCue+pKWl+S3PYNvcRb3zWmzdupWtW7cGPI/3tRjq3IqiuNKG85wM57sSbPmc9Pf3A5CUlBSwPHEGiI+COQLZt28f//3vf4GBtwLnn06n48CBA1gsFl544QXXPhkZGQghAo4CceL8gT1w4EBQZZFl2ePHzB1nheyPQKMu7r33XkwmE+vWrePVV1/lwQcf5L777nOlD6esANdffz0Wi8UV0+Kll16ioqIi6EBYGRkZGAwG1492uOVx/jA2NTX53d7Y2OiRb7DjqKrqekt1p7m5GSGE32NEKqKpXq/nxz/+MVu3buXAgQO8+OKLHHfccTz33HNcfPHFwz5+Wloazc3NfrcNdo3uv/9+Tj/9dB5++GF+/OMf+z0uwCOPPILQurL9/l122WXDtsGb9PR0v/cLAj8PI4nzWpx99tmDXosVK1aEfY7hPCeR+q4Eg/N77U/Qx/ElLkCOQJ555hlUVeXYY4/lqquu8vlz/mi6N+U6m7CdwiUQKSkpTJ8+nYaGBnbt2jVkWTIzM2lubvYRIb29vUHt701dXR3Tpk3z6cI4dOgQ9fX1wyorwPe+9z1ycnJ46qmnePXVV+ns7OTqq68OqYwzZ86koaEBq9UadnmcTeMff/wxQgiPbUIIPv74Y498gZg7dy6A3yGvzrShjhEpCgoKuPDCC3nnnXcoLy/n/fffd71RDoYsy37fRkGzr6+vz9WF6M5g9plMJv75z3/yrW99iz/84Q/86Ec/8ti+ePFigKC7TSLJnDlz6O3tZf369T7bPvnkk1Evz7Rp00hLS2Pt2rXYbLYRP1+oz0mkvivBUFNTA8CsWbOGfawjgbgAOcJwvolIksSzzz7LU0895fP3zDPPcPTRR7N582bWrl0LaG/+Op2Ou+++2ydOiBCCgwcPutZ/8IMfoCgKN9xwg88Pg9ls9nj7X7hwITabjb/97W8ex7vzzjv9NtkORUlJCbW1tR5vO2azmaVLl/r9cQylrKD5kFx++eVs27aNn/3sZxgMhpDnnViyZAkWi4VNmzaFXZ5JkyZx4oknsnXrVp5++mmPfE8++STbt2/npJNOGtT/A3CJzfvuu8+jCbqzs9PVnz8Sb/EAFouFzz77zCe9t7eXnp4eDAYDsjz0T1RWVhb79+/3u81Z9jvvvNPj/u/bt4+HHnoIvV4f8A06ISGB119/nTPOOIOHHnqIW2+91bVt0aJFLF68mJdeeomXX37ZZ19VVfnoo4+GLHs4XHLJJQDcddddHsJry5YtPP/88yNyzsHQ6/UsXbqUPXv28OMf/9jv9+yrr74K2BI1FMN9TiL1XQkGp2/MkiVLhn2sI4G4D8gRxgcffEBDQwNLlixhypQpAfNdccUVfP755yxfvpwFCxYwa9Ysli1bxs0338yMGTM466yzKCkpobGxkY8//phvfetbLFu2DIClS5fy0Ucf8corr1BRUcG3v/1t0tLS2Lt3L++++y7Lly/nrLPOAuDGG29kxYoVXH311bz33nvk5OTwySef0NHRwZw5c/xW0oNx0003cdNNNzF37lzOOecc7HY77733HkIIv8cLpaxOrrvuOn7/+99z8OBBzj77bL8+AoPx3e9+l2XLlvHee+/5OHOGUp6//OUvHHvssVxzzTX861//Yvr06WzdupW33nqLnJwc/vKXvwxZluOPP56bbrqJRx55hJkzZ7qa0V977TX279/PzTffzPHHHx+SfcHS39/PMcccQ2VlJfPnz2fSpEn09PTw73//m8bGRn784x+TkJAw5HFOOukkXnnlFc466yzmzp2LTqfj29/+NrNnz+aSSy7h9ddf580332T27NmcccYZ9Pb28vLLL9PW1sYf/vCHQb8HRqOR1157jXPPPZdly5YhhHA95y+99BInnngiF1xwAcuWLWPevHkkJiayd+9ePv/8c1paWvz6+gyXyy67jBdffJF33nmHuXPncvrpp9PW1sZLL73Eqaeeyr///e+In3Mo7rvvPtavX8+f/vQn3n77bY4//nhyc3M5cOAAW7ZsYdOmTXz++echf1cgMs9JJL4rQyGEYOXKlUybNo3KysphH++IYJRG28SJEi688EKfQEv+6OzsFImJiSI9Pd0jHsWHH34ozjjjDJGVlSWMRqMoKioSZ599tvjf//7nsb+qquKpp54SRx11lEhOThZJSUmioqJCXH/99R7D3YTQYnQsXrxYJCQkiAkTJohLLrlENDU1DToM1z0glPd5H3/8cTFjxgxhMplEfn6+uOqqq0Rzc7Pf44VaVifHHnusAHxiQATL9OnTxfTp0wPaEGx5du/eLa644goxceJEodfrxcSJE8UVV1zhE3BNiMCByIQQ4umnnxYLFy4USUlJIikpSSxcuNDvEEnnMNxAweoGw/v6W61W8dvf/laceuqpoqioSBiNRpGXlyeOP/548eKLL/od0umPQ4cOifPOO09kZ2cLWZZ9nm+bzSZ+//vfi1mzZomEhASRmpoqlixZIt58802fY/kLROYsqzOAnHtwtra2NnH33XeLmTNnisTERJGS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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "params = {}\n", + "params['layer1'] = 'SSM'\n", + "params['layer2'] = 'TF'\n", + "params['window'] = default_window\n", + "params['dim'] = None\n", + "params['num_heads'] = 1\n", + "params['state_dim'] = 1\n", + "\n", + "name = plot(all_accs, params, 'epochs', 'dim', x_axis='epochs')\n", + "plt.ylabel(\"Accuracy through Training (SSM-TF)\")\n", + "plt.xlabel(\"Epoch\")\n", + "plt.title(\"Accuracy (color is token dimension)\")\n", + "savefig(task_name, name)" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "id": "e2999a82-3fa6-480c-bf64-8ac42e66b6f1", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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3n77bQDgxQ937NixY9i2bRvat29f62tXpTF8Bjp27Ii+ffvi6NGjmD17NgDniM61fe88RSqVYsKECThz5gxefvllSCSSBs3fVdsxqi5wP2ZfffVVh+Wt8vJy3jWBq1MVgUCATz75BJMnT8a3336LMWPG8AIoOjoao0aNwt69e/HOO+84+F1xZGZmOsWk8gX//PMPhg0bBrPZjLlz5zbo8npV7r33XrRu3RrLli3DX3/95XTcarW6jIHkKadPn3Y5O8iV1RR5/5FHHoFYLMayZcscfJUsFgtefPFFAGjQvu+3Za8///wTWVlZGDBggMt1XI6JEydi3759WLVqFe+UFR0djaFDh2Lbtm0QCoXo16+fy+SckydPxv79+/HFF1/gn3/+wdChQxEbG4uCggKcO3cOmZmZ+Prrrz1O7Dl16lRMnToV3bt3x4MPPgibzYY//vgDhBCkpaU5Le+8+OKL+OGHH7By5UqcOnUKt912G3JycvDtt99ixIgR2Lx5s4MPQUREBDZs2ICHHnoIaWlpuPPOO9GxY0eYzWZkZ2dj9+7duPXWW7F161aP7PUVU6dOxbZt29CvXz+MGjUKcrkcu3btwo0bNzBw4MA6JbPjBE11sxUdOnTArbfeir179yIzMxO9e/fGokWLsH//fnz11VfYv38/7rrrLshkMly5cgVbt27F33//zf+qWL9+PQYOHIinnnoKX331Ffr06QOTyYTTp0/j6NGjfGA9qVSKqVOn4o033kCPHj1w7733QqvVYvPmzRgwYECtc/j06tULvXr1wrfffou8vDzccsstuHbtGn755RcMHz4c33//vdM5ntrKIRaL8cQTT2Dx4sUAau87wrVvTEwM8vLyEBYWhtTUVP7YoEGDwDAMbt68iQcffLDW165KY/kMPPHEE7wPSXBwMB544AGH4968d54yefJkvPvuu8jNzcXIkSPd+uTUB7Udo+pC//79MXXqVHz44Yfo0qULRo4cCUIIfvjhB+Tk5GDatGno37+/2/MFAgH++9//QigU4r///S8IIfjmm28gFouxYsUKnD9/Hi+88AL/uQgODsb169dx6NAhXLx4EXl5eU6OwvXFpUuXeKdii8XCp7c4efIkRCIR5s+f7yQwGxqZTIbvv/8ed911FwYMGIDBgweja9euEAgEuHr1Kvbs2YOwsDCXm3484Y8//sCcOXPQ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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "params = {}\n", + "params['window'] = default_window\n", + "params['dim'] = None\n", + "params['num_heads'] = 1\n", + "params['state_dim'] = 1\n", + "\n", + "name = plot(all_accs, params, 'dim', 'layers')\n", + "plt.title(\"Average Final Accuracy when Varying Token Dimension\")\n", + "plt.xlabel(\"Token Dimension\")\n", + "plt.ylabel(\"Accuracy\")\n", + "savefig(task_name, name)" + ] + }, + { + "cell_type": "code", + "execution_count": 138, + "id": "8368191b-a58d-470f-b3c8-6cd2af1c474b", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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KyuFUqkUM2bMENdcc4248847xXnnnSe0Wq3Q6XRiw4YNQf1XrVrVpn6Pxu233y4A8fbbbwshhJg1a5ZQKBRi3759rfparVZx/PHHB8Zt0aJF4rbbbhO//e1vhcFgED/88EOgb0lJicjKyhKAOOGEE8Qdd9whbrjhBjFz5kyRlJQUktz79+8XgLjsssuC2ocMGSIyMzPFMcccI0aMGCGuv/56ceONN4pPP/1UCCHEtddeK7KzswO6vuGGG8SYMWMEIH73u9+1Ok+osp588slCqVSKsrKyVsd44YUXBCCefPLJDsfb6/WKlJQUMXr06KD2G2+8UQACEF988UWgfd++fQIQCxYsCLS9/PLLAhBnn3220Gg04pxzzhG33nqrmDJligDE8ccf3+q8nXkG/OM+Y8YMkZKSIk466SSxePFi8dvf/lYAIikpSVRVVXV4nX5uuOEGAYjXX3890ObxeERCQoJYsGCBOHz4sFAoFOKRRx4J2m/cuHECEAcOHAi0+d9V+/fvD7T57x//++WMM84Qt956qzj55JMFIIYNGyZsNlvQsf3vwvj4eHH11VeL22+/XYwaNUpMnDhRZGVltXp2a2pqxLBhwwQgZs6cKe666y4xb948oVKphMFgEN98802g748//igAcf311wcdY/z48QIQMTExwmw2B9pfeuklAYhXXnnlqGN5wgknCECsX7/+qH39HPkuamhoEEuWLGn1uffee4XBYGh1/J56d0Y70kiJAIsXLxaAePPNN4UQvi/32NhYMXjwYOHxeAL9vvzySwGI3//+962OceuttwpAfPzxx4G2f/zjH4GXptPpDLQ7HI6AkbBx48ZAu//LOTY2VmzdurXVORobG8Xhw4dbtX/11VdCqVSKq666Kqj93nvvFYC45pprgtr913GkkVJXVyfi4+NFTk5OK4PnzTffFIBYuHBhq/O3hd9IufXWW1s95H/7298C/ToyUhISEkRJSUmg3Wq1ioKCAqFUKsWhQ4cC7Xa7XZSXl7eSYfv27cJoNIrZs2cHtXfFSHG5XCIjI0MkJiYGXuT+l+a9997bqr//frj00kuF2+0O2tbY2Ciam5sDf0+ePFkA4h//+Eer4xw8eDAkuTsyUgAxZ84cYbVaW+134MCBVvJ5vV5xxRVXCEB8++23QdtClXXFihUCEA888ECrfpMnTxYajUbU1NS02nYk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hIQEnn32WS6//HKmTJnCBRdcQEJCAh9//HEgueKR/PGPf+Trr7/mkUceYc2aNUybNo3S0lLeeecdDAYDL7/8cqsAY78nqLa2lrPPPjto+6xZs/jyyy+D+oXCq6++ym233ca4ceOYNm0a6enpNDY2sm7dOjZv3oxer+dvf/tbh8d49913+eCDD0hLS8PhcLSZRPHyyy8nLy8vKu6bXiPSVtJAwZ9kra1fWC1pamoSer1eJCQkBC0lfu211wK/0v/+9793eIwVK1aI2bNni6SkJBETEyNycnLEzJkzxf/93/+J2traQL+jeVK8Xq944YUXxJgxY4ROpxOZmZniyiuvFDU1NYFfNkdSU1MjrrzySpGamip0Op2YNGmS+M9//iP+9Kc/CUC89957rfYpKSkRV155pRgyZIjQaDQiKSlJjBs3Ttx4442tEqO1R296UoTwLV2cOHGiMBgMIjU1VZx//vli7969nf5F2ZLGxkah1+tFbGxskOejLV588cVWS5Ttdrv405/+JIqKioRerxdGo1GMHj1a3HrrraKhoSFo/6qqKnHTTTeJoUOHCo1GI5KTk8W0adPEU089FdTP4/GIBx54QAwaNEhoNBpRUFAgnnnmmUAis854UoTw3R9XXHGFyM7OFjqdTowbN048//zz7R6vM7L62bNnjwBETk5OK69SqFx00UUCfAn+WuJ0OoXRaGyV48NPZz0pfkJ9BsLhSfnoo48C75bly5e32WfkyJGtvHct6QlPip/33ntPTJo0SWi1WpGeni6uuuoqUV9f3+69VVtbK2688UYxZMgQERMTI1JTU8W5554rtm3b1u415+TkCED85S9/CWr3e/tCeZe0ZPPmzeLBBx8UM2bMCDwrer1eFBYWit///vdi165drfY58nr8905HnyPfUT3x7ox2FEK0WP8nkYSJSy65hNdff50dO3YwatSoSIsj6ce8++67nHfeedx333089NBDkRZHIpF0A2mkSHqUysrKVm7Zr7/+mlNOOYXhw4e3madFIukphBAcd9xxbNy4kX379rWZw0QikfQdZEyKpEc544wz0Ov1FBUVERsby44dO/jss89QqVT85S9/ibR4kn7Ktm3b+Pjjj1mzZg3r1q3j2muvlQaKRNIPkJ4USY/y9NNP8/rrr7N3716am5tJTEzk+OOP5+677+5UtkWJpDMsX76cBQsW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pKSkW9dxpHyff/55wAB75513yM3NbbeAb7QgjRRJyGzdujXSIkiIfj14vB7qbfXUWetQK9XEarqftlylVKFT6wKeFp1ah1d4aXQ0UmWuoqK5gipzVZDREk6iXQe9xuTJkJsbsY+YPLnTIv/1r38lOTmZq6++mqysLIYOHcpNN90UFNgaHx/PsmXLKC0tZe7cuSQmJjJp0iQeffTRVnEdfi688EI2btzI3r17MZvNfPzxx13yUtx+++2ceuqpPPLII4waNYqUlBQuvvhivvnmm05fR0tOPPFE0tPT+c9//gP4jKgLL7yw0/L1NlEeMSORSPoSDreDBlsDVreV2JhYVMrwpNBWKVVBx3Z73bg8LhrsDYHtGqUGfYwejUpDjCoGtVK+7nqcqio4dChip1d0wXs2duxYfvrpJ7788ku++OILvv76a5599llefvll/ve//1FUVATA+eefz6mnnsrHH3/MqlWrWLlyJffeey+vvfYaGzdubLWyaMSIEUyaNIk333yTvLw84uLiOOWUU/joo486JV9cXBxffPEFGzZs4JNPPuHbb7/lnXfe4c033+Qf//gHV111VaeuIzBWCgXz5s3jzTff5Fe/+hXfffcdf/3rXzs9fr2NfGolITNkyJBIiyAhOvUghMDislBvq8crvMRp4no1S6VaqQ4yQvxGi91mRyACRotBYyBGGdNtoyUadRARMjMje/6MjC7tptFoOOOMMzjjjDMA+PzzzznzzDN56KGHAp4GgKSkJC699FIuvfRShBAsWbKEhx9+mGXLlnHjjTe2Ou6FF17ISy+9xJAhQzj//PO7Vedm6tSpTJ06FYD9+/czY8YM7rzzzoCR0pnraCnf008/zZ///GfGjBnDuHHjoqqqdVtII0USMh6PJ9IiSIg+PXi8HkwOE02OJtRKdSDoNZIcabS4PC6cXic2qw2FQoFKoUKj0mCIMRCjiiFGGdMpr0+06SBibNwY0dO7nU7aDsXuHHPmzGHChAkUFxe320ehUHD77bfz8MMPt9tv3rx53H777ZSUlLSanukO+fn5nHfeeTz11FNUV1eT0Y5xdrTrmDRpEkOHDuWZZ57h4Ycf7jH5womMSZGETHl5eaRFkBBdenB6nNRZ62iwN6BT69Cpo7MibYwqBkOMgThtHLExsaiVahweB3XWukCOFv8qJLvbjsfbsRESTToYyHQlLX51dXWrNpvNxsGDB8n82TPU3NzcZg6WXbt2AQT6HUlubi4333wzF110Eccdd1ynZWtPPv+5tVotiYmJ7fY78jra4q677mLu3LlcfPHFXZKvt5GeFIlE0iUsTt/0jtvr7vXpne6gUCh83hNVDOCbqnJ5XdhcNixOCwoUqFVqtCot+hh9YHqoM6uTJNHLuHHjmDt3LnPmzCErK4tDhw7x3HPPUVdXx0033QTAzp07mTt3LpdffjknnHACRqORHTt28Pjjj5OQkMDll1/e7vGfeuqpbsl39dVX43a7OeeccxgxYgQmk4l3332Xjz/+mJtvvjmwoimU62iLK664giuuuKJbMvYm0kiRhMwxxxwTaREkRF4PXuHFZDfRaG9EpVQRp42LqDzdRaFQoFFpAjlc/EaL1WXF7DQHjBadSocuRkeMMoYJRRMiLLUEwGDo/NTiAw88wEcffcTixYupra0lNTWV8ePHs3LlSmbNmgXA8OHDufbaa/niiy/45z//SXNzMzk5OZx88sncc889YY1JuuGGG/jXv/7FY489RmVlJQaDgWHDhrFs2TIuu+yyTl1Hf0AhIpkRKQowmUwkJCTQ1NQkEzQdhe3btzN27NhIizHgiaQeXB4XjfZGmh3NPi/Dz96I/oxXeHF5XLi8LrzCi1KhpGpvFSNGjUCn1gViWvqKJ6kr2O129u/fT35+fqfzfoQTm82GXq+PtBj9nkjqX3pSJCHTXn4ASe8SKT1YXVYabA04PU6MWuOAmf7wJ5bT4nOze4UXu81Os7MZk8Pkmz5SxqCP0aNVaQeE0RItyADm/o80UiQh09lCWZLw0Nt6EMKX6bXB3oBSoezz0zvdRalQEmuMxajx6cHj9eDyujA5THi9XlRKFTGqGPRqPVq1lhilb7mzNFp6nu4s8Y0EXq8Xr7f9wpkqlUreJ0cwMH4KSXqE4cOHR1oECb2rB7fXTZ21jsO2w4EluxLIzcsN/L9lNtx4XXwgG26ToylQd+jIFP6SnqErafEjyUMPPURMTEy7n1deeSXSIkYd0pMiCZktW7Ywbdq0SIsx4OktPdjddupt9dhd9gE1vRMKu3/azehjRre57chsuB6vB6fHSYO9AYFArVSjUWrQqXU+T4vMhttlrFZrn/LwXnPNNfz6179ud3t+fn4vStM3kE+GRCIJQgiB2Wmm3lYPQLxOBpR3B5VShV75S3BnIBuuPTzZcCXRS3Z2NtnZ2ZEWo08hnwRJyAwaNCjSIkgIrx48Xg+N9kZMDhMalQatum+503uLjOyupWOHtlP4Oz2+bLj+7RpVi7pDncyGO5DQaHoi36wkmpFGiiRklErp7o8GwqUHf3FAm9uGIcYgvxg7QKHsueDGlkaLEAK3143D48Dqsga2a9Va9Gp9l1L492dkkGn/RxopkpA5cOBAh+mWJb1DT+vhyOKARo1RvvyPQlV5FclpyT1+3Lay4bq9bmwuG2aHObBdq9KiU+sCFZ4HaryQw+EgJqb/5+oZyEgjRSIZwERjcUDJL7SXwr+jbLgD2WiR9D+kkSIJmfHjx0daBAk9pwenx0mDrQGLy4IhxiCDNTvBsFHDInLe9lL4m11mTE4TSpTEqGJ+WTmkjEGj0vRbz1hX0uJL+hZRaW4///zz5OXlodPpmDZtGhs2bGi378yZM1EoFK0+Z555Zi9KPDDYv39/pEWQ0DN6sDgtVJursbqsxGnipIHSSaoOVkVaBOAXo8WoMRKvjceg8X1pNzubqbXUUmn2VXiut9VjcVpwepz0p0ooDocj0iJIwkzUGSkrVqxg8eLFLFmyhM2bNzNhwgTmzJlDTU1Nm/3/85//UFlZGfhs374dlUrFeeed18uS93+am5sjLYKE7unBK7w02hqptdQCEKftO9WLowmLOTpLRPhT+Bs1RuK0cYHpO5PDFEgsV9Fc4fOgOS24PK4+bbR0Ni1+Wz9oj/wsX76c0tLSdrdv3Lixw3OsXr06pPOUlpayfPnyNrf1pdwv4Sbqfj499dRTXH311SxYsACAF154gU8++YSXXnqJu+66q1X/5OTg4LW33noLg8EgjZQwIAt5RQdd1YPL46LB3oDZYR4wxQHDhU4fPUX2OuLIukP+FP5NjiaEECgVvukhg9qARq3pcyn8O7vSbe3atUF/T58+nUWLFnHRRRcF2oYNGxaoj/XYY4+1qig8atSoDs8xceLEoPNs3ryZG264gZdffpnCwsJAe1ZWVuD/n332GQkJCYG/+1q6/3ASVUaK0+lk06ZN3H333YE2pVLJ7NmzW91c7bFs2TIuuOACYmNj29zucDiCXIQmk6l7Qg8gjvZwSnqHruhhoBYHDBeDhw+OtAhdoq1suC6vK5ANV6VQ/bJySO2LfYnmqcDOVuQ99thjW7UNHjy4VbvfSBkxYkSb+3REfHx80D52ux2AsWPHMnny5Db3mTRpEqmpqZ06z0Ahqu6+uro6PB4PGRnBiZIyMjIoKSk56v4bNmxg+/btLFu2rN0+S5cu5cEHH2zVvnHjRmJjY5k4cSLFxcXYbDbi4uLIz89n69atAAwZMgSv18vBgwcBKCoqYs+ePZjNZmJjYykoKOCHH34AIDc3F5VKxYEDBwBfsGNpaSkmkwmdTseYMWPYtGkT4MtCqNPp2LdvH+C7mcvLy2lsbESj0VBUVBSIy8nMzMRoNLJnzx7A94VVXV1NfX09arWaSZMmsWHDBoQQpKWlkZSUxK5duwAYOXIk9fX11NbWolQqmTJlChs3bsTj8ZCSkkJ6ejrFxcWA7+E0mUxUV1cDMG3aNFatWkVCQgJJSUlkZ2fz008/Ab5fHlarlcrKSgAmT57M9u3bsdvtJCQkMHjwYLZt2wZAXl4ebreb8vJywPero6SkJJDeetiwYfz444+A7+UBUFZWBsCECRPYu3cvZrMZg8FAYWEhmzdvDoy3Wq2mtLQUgHHjxlFWVkZTUxM6nY6xY8cG3LRZWVkYDAb27t0LwJgxY6ioqKChoYGYmBgmTpzI+vXrAd+9Fx8fz+7duwPjXVNTw+HDh1GpVEyePJnvv/8er9dLWloaycnJ7Ny5E4CCggIaGhqora1FoVAwdepUNm3ahNvtJjk5mYyMjMB4Dx8+HLPZTFWVL9Zh6tSpbNmyBafTSWJiIrm5uWzfvh3wGdr5+flUVFQAvhfcTz/9hN1uJz4+nry8vKB7ttneHBjvwnGFHNh1AJvVhj5WT25eLrt/8l1bRnYGCqWCqnKfDMNGDaPqYBUWswWdXsfg4YPZtc13L6VlpqHWqKks8+l8aOFQaipqMJvMaLQahhYOpeRH3zObkp6CzqDjUOkh3z1QkEd9TT2mRhPqGDUFYwso3lKMEIKk1CSM8UYO7vM9Y4OHD8ZUb6KxvhGlSknh+EJKtpbg9XhJTE4kPjmesj2++2PQ0EGYTWYa6hpQKBSMKhrFru27cLvcxCfGk5yeTOku3/2Rk5eD3WrncM1h37hMKGRfyT6cDifGeCPp2ensK/E9j1mDs3A73dRW+abICsYVsGXtFgxGA7HGWDIHZbK32HcvZeZmIryC6grfczNizAjKS8uxWWzoDXpyh+aye7tvvNOz01EqlcHjXV6FpdmCVqclryCPnVt991JqZioajYaKMp/O80fmU1dVR3NTMzGaGIaPHk7xluLAeOsNespLfTrPG5FHfV09pgYTarWagnEFFP9YjPC2Hu+c/BzqGupoqm9CqVQydOxQyorLUAgFcbFxuN1uzGYz4DMQPB4PLpevFpHRaMRisSCEQK1WExMTg83mS1Cn1Wrxer2BvrGxsdhsNl9BRpUKjUYT1FcIgdPpBHzBsXa7PdBXq9VitfpyyAgh0Gq1QX0dDgcejwelUolOpwv01Wh8AcT+H6l+j6TD4cBqtaLX6wPGib+P3W7HbDaj1+txuVy43W4UCgWxsbGBcYiJiUGlUgWMkSP7+rFarTgcjqC+/ukq/zliY2PbHcMjx7vlGLY13i3H8MjxbjmGbY23fwz9fS0WCw6Hg5qaGjQaTdD32v79+xk9uu0SET2BQkTRhGRFRQU5OTmsWbOG6dOnB9rvuOMOvv7668AXR3tce+21rF27NvCCbou2PCmDBg2iqamJ+HiZ/rsj1q9fL2v3RAGh6sHtddNga6DZ2RzIqSHpGXb8sKPd2j39CX8Kf4fdga3OxpAhQ9Dr9SgVShT8EkMRKcxmc7fiNxQKBU8++SS33XZbUHtpaSn5+fmsWLGC3/3ud4F2pVLZ6Smm1atXM2vWLL7//vtWnpTly5ezYMECqqqqSElJCbRHWzVku93O/v37yc/P77T3qrtElSclNTUVlUoV+PXup7q6+qjJqywWC2+99RYPPfRQh/20Wm2fq5wZLeTk5ERaBAmh6cHmstFgb5DFAcNEWmZapEXoFfzZcNVeNXbsoPAFX3uFF4DjpsVwxOsa6L0v14wMAz87pMPCvHnzgv4+5ZRT+PLLL3v8PEd+vz388MPce++9PX6evkhUGSkajYZJkyaxcuVKzjrrLAC8Xi8rV65k4cKFHe77zjvv4HA4uOSSS3pB0oGJrJMRHXSkB1kcsHdQa6Lq1dlrKFAEGbzV1QoOHYrkL/7wnvuPf/wjJ598cuDvcHnbv/zyy6DAWfmD8Bei7klbvHgxl112GZMnT2bq1Kk8/fTTWCyWwGqf+fPnk5OTw9KlS4P2W7ZsGWeddVaQy0zSs+zfv5/09PRIizHgaU8Pbq+bJnuTLA7YC1SWVZKUkhRpMSJORmZXogV6zrBIT/cC4VsJM3To0HaDXXuSCRMmyMDZdog6I2XevHnU1tZy//33U1VVRVFREZ999lkgmLasrKzVnODOnTv59ttv+eKLLyIhskQScWRxQEkkWLe+4zwlAhGUh0WhUAS8Mf7/dyf2wmy2ATKnSH8m6owUgIULF7Y7vbN69epWbSNHjuzTCYn6CuPGjYu0CBKC9SCLA0aGoYVDIy1Cn+BII0QggmJaFApFcBBuJ40Wmbup/yOj6SQh4196LYksfj14vB4a7A3UWetQKpTSQOlFairazoAt6Ri/F8X/Ad997F9F5PK6cHvdeLwevMJ71B+f/uW4kv5LVHpSJNFJY2NjpEWQ4NODLA4YWcwmc6RF6Be05WnxeH+ZQjqap8XtdveqvJLeR77ZJCEjl25HB6oYFdXmatxeN3EaWXsnEmi0cqVbOOis0dLZnCVH0p6nJi8vr8dCCGbOnNnusS6//HIuv/zyHjlPf0UaKZKQGT9+fKRFGNB4hReT3UTKEN8KtjhtXIQlGrjImJTeoZXRIgQe8YvRotaocXvdKFFGPLGcJDzImBRJyHz//feRFmHA4vK4qLPWUW+rp6ykDH2MDBiMJP6U/5Lexe9J8X8cNkeg/pDT48TlcfniWbxHj2fpDm63u91PZyszSzpGelIkkijH6rJSb6vH5XFh1BpR9GJGT4kkqlEQCMBttXLIPyXUQ8udWxIT034F8SFDhgRqiEm6jzRSJCFztNIEkp7FK7w0O5ppsDegVCgD0zsp6TJhYaSROogO1OpfvsKOuty5B42WjrzKMnavZ5FGiiRkYmNjIy3CgMFfHNDsNKNT64hR/fLLTWfo3QJfktZIHUQHCmX7RkYoOVq6mliuN7LQSnzImBRJyOzduzfSIgwIbC4bNZYamh3NxGpigwwUgEOlhyIkmcSP1EF04HKGnielrRwtXuENytESiGkJIUeLpHeQnhSJJEqQxQElkt4jpGy4LVYN9WRMiyR0pJEiCZnRo0dHWoR+S2eKA+YV5PWeYJI2kTqIDnoyX02bOVqEB352qHQ3hb+ka8jpHknIVFVVRVqEfonD7aDOUofJYcIQYzhq9eL6mvpekkzSHlIH0YHHHb7lvj2dwl/SNaQnRRIy9fXyxdyTdLU4oKnR1AvSSTpC6iA68Hg8xND+cuCepLsp/CVdQxopkpDpKDeApHN4vB6aHE002ZuIUcVgiDGEvK86Rj62kUbqIDqIpBFwtGy4/lVDMhtu95DTPZKQmThxYqRF6Bc4PU7qrHU02hvRx+jRqTu3nLVgbEGYJJOEitRBdKDVdS4niUatOernX6/8i9LS0na3b9q4qc1jH5kN12Kx8NBDDzFm7BhiY2NJSUlhypQp/OEPfwiaGjp48CBXXHEF+fn56HQ6srKymD17Nq+99lqgz+rVqwOGTklJ62zH99xzDwqFgry8vE6NR19A/hyQhMz69euZNm1apMXo01icvukdj/B0uThg8ZZiRhWNCoN0klCROogO7DY7On3oRv43334T9PeJJ5zIDQtv4IILLgi0DR02FIvFAsDDjzzMzJkzg/YpHFUY0rkunHchGzZs4M677qSoqIiGhgY2btzI+x+8z5KHlqBUKDE1mTj22GNJSkrigQceYMiQIZSXl/PVV1/x2WefcckllwQd02g08tZbb/HAAw8Etb/11lsYjcYQR6FvIY0UiaQX8BcHbLQ3olKqMGq6/kKRAXqRR+qgbzLt2NY/sgYNGtSq3W+kDB8xvM19jsaePXv47LPPWPbyMi699NJA++/O+R2PPPoICoUCr/Dy9jtvU1FRwdfffM2QIUMCU0QXX3xxm/fYb3/7W958880gI2X9+vUcOHCA888/nzVr1nRa1mhHTvdIQiY9PT3SIvRJWhYH1MXoul0cMCk1qYckk3QVqYPoQKVWRVqENmlsaAQgKzOr1TalUhlYOdTU2IRSqSQ9Iz04sZzHhUd4Wq0cOv/889mzZw+bN28OHO+NN97glFNO6bfvZ2mkSEImISEh0iL0OawuK9WWaixOC0atEbWy+85LY3z/dOv2JaQOogOVMrxGitfrDapw7PV6Q9qvYGQBRqORO+64g08+/gSz2dxmv4kTJ+L1erns0svYsG4DXo/Xt9xZEZwN1+11A5CRmcGMGTN44403AvK9/fbbXHjhhT1zwVGInO6RhMzu3btlTEqItFccsCc4uO8go4+RifUiidSBD9UXx6KwV0fs/F5NOt7T1oft+BdfeHHQ3yeffDKfffHZUfeLj4/n7y/+neuuuY6zzzoblUrF+AnjOeuss7jxphsDddBmnTyLxbcu5uk/P837772PXq/n+OOP58KLL+SSSy5pFbPm8Xo49/xzefyxx1n6+FJWrVpFY2MjZ599Nlu2bOmx644mpJEikfQwHRUHlEj6Ewp7NQpb5OoYKcIcG/TY0seYNWtW4O+4+NB/bJx33nnMnj2bTz75hK9Xf82qr1ax5P4lvPHGG6xbvy5gqDz+x8e59rpr+ejDj/j2229Z9dUqvvzyS1Z+uZLlrywHfMudwbes+ZxzzuHmG2/mm2+/4c033+S0009Db9QH0vl7hbdf5WiRRookZAoLQ4tqH8jYXDbqbfU4PU5iNbGBTJU9yeDhg3v8mJLOIXXgQ+gyIitAmM+fPzSfSZMndXn/pKQkLrnkEi655BKEEDz4wIM89uhjvPzSyyxctPCX8+Tnc+NNN3LjTTdiNpu5cN6FvPH6Gyy+dTHjx48POmZycjKn/upUXnv1Nd5/731e+McLgC+YWyBweVz9KrGcNFIkIVNXVyfjUtrhyOKAPTm9cySmehPGOBkTEUmkDnx4frUuoud3OV29lG+2+ygUCm697VYee/SxNnOd+DEajVx73bV8/vnnlJSUtDJSAOZdMI8Fly3AaDRyxhlnBBkjSoWyX2XDlYGzkpCpq6uLtAhRidvrpt5WT621lhhVDLGa2LCer7G+MazHlxwdqYPowOMJX+2e7tDc3IzNZmvVvnvXbgAyMnweoNra2jaXGu/e7euXmZHZ5vF/85vfMPc3c7nzrjvR6Vrniels3aFoRnpSJCGjVEqb9kjsbjuNtkZsbhuxMbFhX20AoFRJPUQaqQNJR+zauYuzzzqbS+dfyvHHH4/RaKS4uJgnn3iShIQE5l82H4BX//Uqr7/+OhdffDFFRUV4vV7Wrl3Ln578ExMnTeT4E45v8/ixsbG88+47IcvTl1P4SyNFEjJTpkyJtAhRQ1eLA/YEheNlbFCkkTqIDjqTbbY3GTZ8GFddfRVf/vdLXn7pZZqbm8nJyWHmrJncdfddDBkyBIDTTj+NsrIyXn31VR579DG8Xi+DBg/ilsW3cPMtN6NShedHj3/Kx48QAq/w4sFnuPg9MNEwLaQQAzx1oslkIiEhgaamJuLj4yMtTlTz/fffS0OF1sUBO1t7p7uUbC2RX5IRZqDpwOVwcbjiMEPyhrQ5vRApOpsWX3J0BCJoCkqBAofDQdmBMnIH52I0GHvFY+xHelIkIRNqIqP+jNPjpN5aj9VtxRBj6JHkbJ3F65F6iDRSB5L+SqupoZ+NFq/wUmupxeQxoVVr0av1xKhiiFHGhNVoibqJ1eeff568vDx0Oh3Tpk1jw4YNHfZvbGzkhhtuICsrC61WS0FBAZ9++mkvSTuwSE1NjbQIEcXitFBtrsbusROniYuIgQKQmJwYkfNKfkHqIDoI13TI0WiZhfbIT7QG83aVliuCDDEGVEoVNpeNOmsdVc1VVJorqbOEb1FFVHlSVqxYweLFi3nhhReYNm0aTz/9NHPmzGHnzp1t1iVwOp2ceuqppKen8+6775KTk8OBAwdITEzsfeEHAAPVSPEXB2ywN6BWqrtVHLAniE+W05KRRuogOohU7R6DztDutiFDhrB77+5elKb3UCgUxKhi0Kg0gC+WxeV1YXKaSI0Nz/dDVBkpTz31FFdffTULFiwA4IUXXuCTTz7hpZde4q677mrV/6WXXqK+vp41a9YQE+NbLZ+Xl9ebIg8oSkpKBlxafJfHRYO9AbPDjEETmemdIynbUyZTskcYqYPowOlwRiQmZe26te1u02g1vShJZFEoFGhUGhxuR9jOEfk37s84nU42bdrE3XffHWhTKpXMnj2btWvbviE+/PBDpk+fzg033MAHH3xAWloaF110EXfeeWe7bkCHw4HD8cuAmkymnr0QSb/B6rJSb6vH7XFj1BrDkj1WIpH0PbqThVbSOaLGSKmrq8Pj8QSS3PjJyMhoNzvfvn37+Oqrr7j44ov59NNP2bNnD9dffz0ul4slS5a0uc/SpUt58MEHW7Vv3LiR2NhYJk6cSHFxMTabjbi4OPLz89m6dSvgc+N5vV4OHjwIQFFREXv27MFsNhMbG0tBQQE//PADALm5uahUKg4cOADA+PHjKS0txWQyodPpGDNmDJs2bQIgOzsbnU7Hvn37ABg7dizl5eU0Njai0WgoKioKxOZkZmZiNBrZs2cPAKNGjaK6upr6+nrUajWTJk1iw4YNCCFIS0sjKSmJXbt2ATBy5Ejq6+upra1FqVQyZcoUNm7ciMfjISUlhfT0dIqLiwEYMWIEJpOJ6mpf8bBp06YhhGD9+vUkJSWRnZ3NTz/9BMCwYcOwWq1UVlYCMHnyZLZv347dbichIYHBgwezbds2wOfpcrvdlJeXA74qoCUlJVitVoxGI8OGDePHH38EYPBgX+rxsrIyACZMmMDevXsxm80YDAYKCwsDJctzc3NRq9WUlpYCMG7cOMrKymhqakKn0zF27Fg2btwIQFZWFgaDgb179wIwZswYKioqaGhoICYmhqJjilizdg0ur4uElAQSExIp2eG7B4cMH0Lj4UaaGppQqVWMHDeSkh9L8Hq9JKYkEp8YT9len7yDhg7CbDLTUNeAQqlg1IRR7Nq2C7fbTXxSPMmpyZTu9smbm5eLzWrjcM1hn16LRrFnxx5cThdxCXGkZqayf+d+ABJTEqmprKGuyjcPPHL8SEp3leKwO4iNiyUzN5O9xb5ry8zNxOv1UlNR49Pr2BGU7yvHZrWhj9WTm5fL7p9+TjCVnYFCqaCqvMqn11HDqDpYhcVsQafXMXj4YHZt891LaZlpqDVqKst8Oh9aOJSaihrMJjMarYahhUMp+dE3ZinpKegMOg6V+mq85BXkUV9Tj6nRhDpGTcHYAoq3FCOEICk1CWO8kYP7fM/Y4OGDMdWbaKxvRKlSUji+kJKtJXg9XhKTE4lPjqdsTxvjrVAwqmgUu7bvwu1yE58YT3J6MqW7fOOdk5eD3WoPjHfhhEL2lezD6XBijDeSnp3OvhLf85g1OAu3001tVS0ABeMKUCqV7PhhB7HGWDIHBY+38AqqK3zPzYgxIygvLcdmsaE36Mkdmsvu7b7xTs9OR6lUBo93eRWWZgtanZa8gjx2bt0JQGpmKhqNhoqyCgDyR+ZTV1VHc1MzMZoYho8eTvGW4sB46w16ykt9z1jeiDzq6+oxNZhQq9UUjCug+MdihLeN8R42GFOjicbDjSiVSgonFLJz2068Hi/xxniEV2C32QHQaDSBKsHgWw7ssDsQQqBSqVCr1YEfhDGaGIRXtNlXqVQSo4nBYf+5b0wMAoHb9XNfnQ6n04nX623VV6VS4XF7cLlcAGh1WlxOV6CvRqPBbvfJq45Ro0DRZl+FQoFWpw1cm1qtRqFU4HL+3FerDcSbtNVXqVTidDp946LV4HF7fH1RoNX/0lelUqFSq3A6nIEx9Hg9eNyeX8bF5kAg2uzbG+N95BjGaGJw2p24XC4aDzeiilG1ekckD04mXETNEuSKigpycnJYs2YN06dPD7TfcccdfP3116xf37rSZUFBAXa7nf379wc8J0899RRPPvlk4AvzSNrypAwaNEguQQ6B/fv3k5+fH2kxworL46LR3hjVxQErD1aSNSgr0mIMaAaaDqJ1CbLL5QpM9UvCh91u50DpAVKyU4jRth7vZkcz+Unh+W6IGv91amoqKpUq8MvdT3V1NZmZbacGzsrKoqCgIGhqZ9SoUVRVVQWs2iPRarXEx8cHfSShUVNTE2kRworNZaPGUoPZaSZWExuVBgpAQ11DpEUY8EgdRAd+D4Sk/xI1RopGo2HSpEmsXLky0Ob1elm5cmWQZ6Ulxx9/PHv27AnK37Fr1y6ysrLQaAZO8JKkewghaHY0U2Opwe11E6eNi+r4k0hngJRIHUgkvUVUvYkXL17Miy++yCuvvEJxcTG///3vsVgsgdU+8+fPDwqs/f3vf099fT033XQTu3bt4pNPPuGxxx7jhhtuiNQl9Gv648qe3i4O2BOMKhoVaREGPFIH0YHMNtv/iZrAWYB58+ZRW1vL/fffT1VVFUVFRXz22WeBYNqysrKgIneDBg3i888/55ZbbmH8+PHk5ORw0003ceedd0bqEvo1mzdvZuLEiZEWo8ewu+002Bqwu+29VhywJ9i1fRcFYwsiLcaARuogOnDYHWh12kiLIQkjUeVJAVi4cCEHDhzA4XCwfv36oF/vq1evZvny5UH9p0+fzrp167Db7ezdu5c//OEPEctC2N/xR8X3dYQQmJ1maiw1ODwOjJrerUXRXfxR+JLIIXUQHXR13ccbb7zBccceR2pyKilJKYwbO45rr7k2KO7OarXyyMOPMH7ceBLiEshMz2T6sdO57977go6lUWvQqDX84+//aHWeL//7ZWC7f+VhR8w+eXagf3ufK6+4EoARw0a0uf2p/3uqS2MSrUSVJ0US3SQnh2+ZWW/RsjigRqXBENN+5shoJT5RBntHGqmD6KArP0j/9OSfuOcP93DTTTex5IElCCH46aefePPNN6moqAhkN7/g/AvYsGEDd951J0VFRTQ0NrDx+418+OGHPPzIw0HHNBqNvL3iba659pqg9hUrVmA0GjGbzSHJ9uxzz9Jsag78vWjRIgx6A3984o+BttS0XzK7/u6c33HLLbcEHWPwkMGhDUQfIWqWIEcKWQU5dJqbm4mLi4u0GF3G4XbQYGuIaHHAnsBqsWKI7XvGVX9ioOkgWpcg+3N5dIb8IfnMPnU2L/7zxXaPt2fPHkYXjmbZy8u49NJLOzynRq3hwosuZMVbK9i7fy85OTmAL91FbnYuZ/76TN54/Q127dnV6Yzos0+ejdFo5P0P32+1bcSwEZxx5hk88+wznTpmV5BLkCV9gh07dkRahC5jcVqosdREvDhgT+BPSCaJHFIH0YE/0VlnaGhoaDethd/4aGxoBCArs3UunLaMogkTJjCiYATvvP1OoO3//b//hxCC0884vdMySn5BGimSfo1XeGmwNVBj8c01GzVGuXxUIhnATJw4kRf/8SIvLXuJqqqqNvsUjCzAaDRyxx138MnHn4Q0XTNv3jxWrFgR+HvFWyv47Vm/DavnSQjRryswg4xJkXSCYcOGRVqETuH0OGmwNWBxWqKmOGBPkJOXE2kRBjxSBz6OXXYs1ebqo3cMExmxGay7al2n9nn2uWc5/9zzue7a6wDIz8/nzF+fyY033RiYjomPj+fvL/6d6665jrPPOhuVSsX4CeM566yzuPGmG4mNbZ2qYN4F83jowYfYu3cvGRkZfPrJp7z773ex2qzdvs72eOFvL/DC314I/K1SqbA5bGE7XyToH29tSa9gsVhITQ1POe6epj8XB7Rb7SQkJURajAGN1IGPanM1h5oPRez8XQmpHDt2LFu2bmHllyv58ssv+d///sdzf3mOV5a/wspVKykqKgLgvPPOY/bs2XzyySd8vfprVn21iiX3L+GNN95g3fp1rQyVESNGMHHSRFa8tYIheUOIi4vj5FNO5uOPP+6JS22Tc887l1tvvTXwd3/0EksjRRIyVVVVDBkyJNJidIhXeDHZTTQ6GlEqlBi1xkiL1OMcrjlMRk7G0TtKwobUgY8MY2THIN2Q3qX9NBoNp59xeiBe5IvPv+C3v/ktjz7yKO+8+0tcSVJSEpdccgmXXHIJQggefOBBHnv0MV5+6WUWLlrY6rjz5s1j+fLlDBk8hHPPOzfs6TDS0tL6fUVmaaRI+g19oTigRNKfWHdl56Zaehp/deHu8qs5v2L8hPGUlJS020ehUHDrbbfy2KOPtdvvvPPP464772JnyU5WrV7VI7INdKSRIgmZKVOmRFqEdrG5bNTb6nF6nMRqYvvV9M6RFE4ojLQIAx6pg+igK2nxq6urA1nM/dhsNsoPljN69GjAl25BrVaj1+uD+u3etRug1f5+cnNzufHGG6mtq2X6cW3XnJN0DmmkSEJm69atgfnaaEEIQbOzmQabryptnLbv5nEJlX0l+xg+enikxRjQSB1EB11Jiz+xaCJn/vpMTv3VqWRlZnGo4hB/e/5v1NXVsfBG3xTOrp27OPuss7l0/qUcf/zxGI1GiouLefKJJ0lISGD+ZfPbPf6T//dkt65JEow0UiQh43A4Ii1CEG6vmyZ7E02OJnRqHRrVwKh83ZXcEJKeReogOuhK4Ox999/HJx9/wh233UFtbS2pqamMGzeOz7/4nJmzZgIwbPgwrrr6Kr7875e8/NLLNDc3k5OTw8xZM7nr7ruiPjavPyEzzsqMsyGzc+dORo4cGWkxgF+KA9pcNmI1fac4YE9QtreMwcP6V+rrvsZA00G0Zpx1OpxotAPjx0kkiWTGWelJkYTMoEGDIi0CQggsLgv1tnq8wkucNq5fLrvriPTsrq1okPQcUgfRQYxGBsf3d/pvdKGkx9m2bVtEz+/xemiwN1BrqUWlUA3Y7LH7SvZFWoQBj9RBdOCwR9cU9NHwer1BGWKP/AzwiY02kUaKpE/gcDuotdTSaG9EH6NHq+5csJxEIpFEmkcefgSDztDu59V/vRppEaMOOd0jCZn8/PDMOR4Ni9M3veMRHuI0A29650iyBrcueibpXaQOooO+Nt1z1dVXceaZZ7a7PS8/r/eE6SNII0USMk5n765o8AovTfYmGu2NxKhiMMb0v+yxXcHtdEdahAGP1EF0ILwC+lDMfHZ2NtnZ2ZEWo08hp3skIXPoUO/V6HB6nNRaammwNaCP0aNTR8+KgkhTW1UbaREGPANVB9EWM+F2S2OxN4ik3qUnRRJ1tCwOOBBX70gk0YZK7XNX2G32VllYJf0ff/kB/33Qm0gjRRIyEydODOvxA8UB7Y0olf2zOGBPUDCuINIiDHgGmg6UKiX6OD21tT4Pkk6vi44fDwpfDg9JeBBCYLfZqa2tRR+nR6nq/ckXaaRIQqa4uJjx48eH5dj+4oDNjmb0MXpZHLADyvaUMbRwaKTFGNAMRB3Ep/iSXdbU1ERYkl9wu92o1fJrLNzo4/QB/fc2UruSkLHZbOE5bovigEatsV8XB+wJeqryq6TrDEQdKBQKElITiEuKw+P2RFocAPYU72H4KFlDKZyo1KqIeFD8SCNFEjJxcT1bvG8gFgfsCWKNsZEWYcAzkHWgVCkj+qXVEkOsoc007ZL+gzRSJCHTk3lSBmpxwJ4gc1BmpEUY8EgdRAdSD/2f6DCHJX2CrVu39shx7G47tZZamuxNxMbESgOlk+wt3htpEQY8UgfRgdRD/0d6UiS9hhACs9NMg71hwBYHlEgkEknoSCNFEjJDhgzp8r4er4dGeyMmhwmNSoMhxtCDkg0sMnOlizvSSB1EB1IP/R9ppEhCxuv1dmk/h9tBg60Bq9tKbEwsKmUfymMdhQhvdGX9HIhIHUQHUg/9n6iMSXn++efJy8tDp9Mxbdo0NmzY0G7f5cuXo1Aogj46nUyhHg4OHjzY6X0sTgs1lhrsHjtxmjhpoPQA1RXVkRZhwCN1EB1IPfR/os5IWbFiBYsXL2bJkiVs3ryZCRMmMGfOnA4TCMXHx1NZWRn4HDhwoBcllrSFV3hpsDVQY6lBoVBg1Bhl/IlEIpFIOoVCRFnFqGnTpjFlyhSee+45wDfFMGjQIBYtWsRdd93Vqv/y5cu5+eabaWxsDOn4DocDh8MR+NtkMjFo0CCampqIj49MRr2+gsPhQKvVHrWf0+OkwdaAxWnBoDGgVspZxZ7E5XT1uRL1/Q2pg+hA6iE6aHY0k5/UcykqWtKlb4/169czbdq0npYFp9PJpk2buPvuuwNtSqWS2bNns3bt2nb3M5vNDBkyBK/Xy8SJE3nssccYM2ZMm32XLl3Kgw8+2Kp948aNxMbGMnHiRIqLi7HZbMTFxZGfnx9Yeus/h3/ao6ioiD179mA2m4mNjaWgoIAffvgBgNzcXFQqVcCrM378eEpLSzGZTOh0OsaMGcOmTZsAX/lunU7Hvn37ABg7dizl5eU0Njai0WgoKioKTHllZmZiNBrZs2cPAKNGjaK6upr6+nrUajWTJk1iw4YNCCFIS0sjKSmJXbt2ATBy5Ejq6+upra1FqVQyZcoUNm7ciMfjISUlhfT0dIqLiwEYMWIEJpOJ6mqfO3XatGl89913xMbGkpSURHZ2Nj/99BMAw4YNw2q1UllZidvrZlDhIMp2l+F1eTHGG8nIzmBviW+pYNagLNxuN7WVvhogBWMLKNtXht1qx2A0kD04mz07fNeWkZMBQPUhnwzDRw+noqwCq9mKzqBj8NDB7Nruu7a0rDTUajWVByt9MhUOo7qiGrPJjFanJb8gn5KtJQCkZqSi1Wk5dMBX1Tm/IJ/DNYcxNZqI0cQwYswIdvywA4DktGQMRgPl+8t998DwITQebqSpoQmVWsXIcSMp+bEEr9dLYkoi8YnxlO0tA2DQ0EGYTWYa6hpQKBWMmjCKXdt24Xa7iU+KJzk1mdLdpb77JS8Xm9XG4ZrDPr0WjWLPjj24nC7iEuJIzUxl/879gO+ZSE5Ppq6qzqfX8SMp3VWKw+4gNi6WzNzMwNLMzNxMvF4vNRU+T+SIsSMo31eOzWpDH6snNy+X3T/t9o13dgYKpYKq8irfGI4aRtXBKixmCzq9jsHDB7Nr28/jnZmGWqOmssw33kMLh1JTUYPZZEaj1TC0cCglP/rGOyU9BZ1Bx6FS33jnFeRRX1OPqdGEOkZNwdgCircUI4QgKTUJY7yRg/t8z9jg4YMx1ZtorG9EqVJSOL6Qkq0leD1eEpMTiU+Op2xPG+OtUDCqaBS7tu/C7XITnxhPcnoypbt8452Tl4Pdag+Md+GEQvaV7MPpcGKMN5Kenc6+Et/zmDU4C7fTHah8XDCugJ82/4RGqyHWGEvmoODxFl4RmIYYMWYE5aXl2Cw29AY9uUNz2b3dN97p2ekolcrg8S6vwtJsQavTkleQx86tO333bGYqGo2GirIK3z07Mp+6qjqam5qJ0cQwfPRwircUB8Zbb9BTXuq7Z/NG5FFfV4+pwYRaraZgXAHFPxYjvG2M97DBmBpNNB721c8qnFDIzm078bg9JCQlkJiSyIE9vndabn4uVrOV+tp6AEYfM5rdP+3G5XQRnxhPSnoK+3f57tmcITk47A7qqn33bOH4Qvbv2o/D7ujWOwKF776V74jgd0T24GycTmevvSOSBycTLrrkSVEqlQwfPpxLL72Uiy++mKFDe6aGRUVFBTk5OaxZs4bp06cH2u+44w6+/vpr1q9f32qftWvXsnv3bsaPH09TUxN/+tOf+N///sdPP/1Ebm5uq/7Sk9J1OjJOjywOKFfvhI8dP+xg9DGjIy3GgEbqIDqQeogOwulJ6VJMymuvvcaIESN4+OGHGTFiBMcffzwvvPAC9fX1PS3fUZk+fTrz58+nqKiIGTNm8J///Ie0tDT+/ve/t9lfq9USHx8f9JGERmxs26nAXR4Xh62HqbfVo1VrpYESZvQGfaRFGPBIHUQHUg/9ny4ZKRdddBGffPIJFRUVPPPMMwghuP7668nOzuass87i3Xffxel0dvq4qampqFSqwBSDn+rqajIzQ1sPHxMTwzHHHBOYDpH0HAUFrcvT21w2aiw1mJ1mjFqjrF7cC+QObe0hlPQuUgfRgdRD/6dbq3tSU1NZuHAha9asYffu3dxzzz2UlJQwb948MjMzueaaa/j2229DPp5Go2HSpEmsXLky0Ob1elm5cmXQ9E9HeDwetm3bRlZWVqevR9Ix/ngb8GWPNTlMVFuqcXvdxGnjZPXiXsIf0yCJHFIH0YHUQ/+nx75V9Ho9BoMBnU6HEAKFQsEHH3zAjBkzmDJlCjt27AjpOIsXL+bFF1/klVdeobi4mN///vdYLBYWLFgAwPz584MCax966CG++OIL9u3bx+bNm7nkkks4cOAAV111VU9dmuQI3F439bZ66qx1aFQaYjUDtyKsRCKRSMJHt9aGNjc38+677/L666/z9ddfo1QqOf3007n//vuZO3cuSqWS9957j1tvvZUFCxa0Gfh6JPPmzaO2tpb777+fqqoqioqK+Oyzz8jI8K30KCsrQ6n8xbZqaGjg6quvpqqqiqSkJCZNmsSaNWsYPVoGU/U0ubm52N12GmwN2Fw2YjUye2wkSM9Oj7QIAx6pg+hA6qH/06XVPR988AGvv/46H3/8MXa7nSlTpjB//nwuuOACUlJSWvV/8cUXueGGG7oUpxJuTCYTCQkJcnXPURBCUFpeiipehVd4iY2JlcnZIkR9bT3JaeFb8ic5OlIH0YHUQ3QQdXlSzj77bAYNGsQtt9zC/PnzGTlyZIf9J0yYwMUXX9wlASXRgcVlofRAKQXjC+TqnQhTVV4lX8wRRuogOpB66P90yUj56quvmDlzZsj9p06dytSpU7tyKkkU4Pa6abQ3okCBVn30jLMSiUQikfQEUZcWv7eR0z1Hp9HWSL29Hq3QotVJIyXSOOwOqYcII3UQHUg9RAdRl8zt3nvvpaioqN3txxxzTJup5yV9D6fHiclpQqfWBVIhSyJLX9aDEAKz04xXeCMtSrfoyzroT0g99H+6NN3z7rvvcvbZZ7e7/YwzzmDFihUsWbKky4JJooNmRzMerwdDjAFLsyXS4kggavUghKDeVk9Fc8UvH7Pv38rmSt+/5kqsLitKhZJkfTIp+hTfv4aUVv9P0aeQbEgmVZ9Ksj4ZfUz0ZBeNVh0MNKQe+j9dMlLKysoYNmxYu9vz8/MDhfUkfReby0azoznw5SDdqtFBJPTgFV7qrHUBYyNggJiCDRGHx3H0g7U4Xp21LmQZDDEGn/Fi8BkzfuMlYNT83O7/f6IuMWwJBuWzEB1IPfR/umSkGI3GDo2Q/fv3o9PpuiyUJPL4M8qiALXSd5vkFeRFVigJ0PN68Hg91Fprgzwglc2VQcZHpbkSp6d7KQSMGiM5cTmkxaZhdpoDCQGtLmtI+1tdVqwuKwdNB0Pq7/fWtPTYpBpSe8RbI5+F6EDqof/TJSNl5syZ/P3vf+e6664jJycnaNvBgwf5xz/+waxZs3pEQElk8H8htMwmu3PrTllxNArojB7cXjc1lprgKZiWxoi5kipzFW6vu1syJWgTyI7LJisui+y4bHLicnz/N2aTHef7xGnj2tzX5rJRb6vnsO1woFBlna3O12Y9HNR+2Ob7N5SYlp7w1rRlyKQYUmgobWDapGlh9dZIjo58J/V/umSkPPzww0ydOpUxY8Zw5ZVXMmbMGAC2b9/OSy+9hBCChx9+uEcFlfQeHq+HJkcTKqVKvoCjGJfHRZW5KjD10nIqprK5kkPNh6i2VHc7SDVJlxQwNFoaItnGbHLic8g0ZmLUGLt8fH2MnpyYHHLic47eGZ/x0WhvDDZiWhoyLdrC6q1Z27G3pj3PTTTF1kgk0U6XlyBv3bqVRYsW8c033wS1n3TSSTz77LOMHz++RwQMN3IJcmtMDhN1ljritHFBWWVrKmtIz5JpqHsDh9vhM0B+Nj4OmQ4F/n+g/gC19lpqLDUIupdBINWQSpYxK8gIaWmMZBmz+kXyvo68NfXWYM+Nv1+4ViD5vTUdTTu1DCRO0ifJHwvtIN9J0UE4lyB3O09KXV0d+/btA2Do0KGkpqb2iGC9hTRSgvH/OlcqlK0StzUebiQxJTEygvUjbC4blebKXzwf5mDvR2VzJbXW2m6fJ82QRk58DtnGFt6Pn42PnDifB0SnlrFjbeEVXprsTQGj5khvTWVDJc3e5i55azqLUqEkSZfUagoqEEA8gL018p0UHURdWvyWpKam9jnDRNI+ZqcZl8dFvK61wVZRViFfCEfB4rQEpmAONR9qMwj1sO1wt86hQEGGMcNncBh/iQFpORWTacxEo9L00FUNPJQKJUn6JJL0SQxPHt5q+44fdrSKhbC5bDTYG6iz1rWeduqGt8YrvIHjhEpb3pqOPDd91Vsj30n9n24ZKeXl5fzwww80NTXh9bZ+2ObPn9+dw0t6GYfbgclhGjC/wjqL2WluvQLmZ2PEb4g02hu7dQ6lQkmmMbNV4GlLT0j97nrGT+ob06kDCX2MHn2Mnuy47JD6H+mtOVrA8GHrYSyu0PKCdGUlVEfeGv//W7b1h2lASfTTpekeu93OZZddxr///W+8Xi8KhQL/YVrGMHg8np6TNEzI6R4fQgjqrHVYXJZ2gyBtVht6Q/8zYIQQNDubW3s/WqyAOWQ6RLOzuVvnUSvVZBmzggJPs+Ozg1bApMWmBZZ8t0d/1UNfIlI6CNVb03JbOGNrOrO8OxzeGvksRAdRN93zhz/8gf/85z88+uijTJ8+nZkzZ/LKK6+QlZXF008/TUVFBf/61796WlZJGLG5bZid5g5/HdVV1TFo6KBelKr7CCFotDe2WgET8H78bIiE+gu1PTQqTcAACZp6OcIA6YmXdF/UQ38jUjroqrfGHzcTDm9Nuak8pP5+b01bhkxLz01nvDXyWej/dDkt/oIFC7jzzjs5fNg3T5qTk8PJJ5/M7NmzOfnkk3n++ef529/+1qPCSsKDV3gx2U0oFUpUSlW7/ZqbuudJ6Gn8adiDDI42glBtblu3zqNT64JWwPiNj5z4X6ZkUgwpvTanH216GIj0FR20jK0Zltx+lvCW2N32ICOmpYFz5PJuv4HjEUf3mreMrdldvzskWdrz1vj/b62yMkEzIWDkJOoSO3yHSfoeXTJSampqmDp1KgB6vc/VZrH8Yn2fc845PPTQQ9JI6SNYXVZsbttRc13EaGJ6SaK207C3jP3obBr29tCr9W0uv20ZlJqsTw6axow0vakHSdv0Zx3o1LrAMxAKHXlr2goY9k8rh0JI3pqtv/y3M94afx8ZWxPddMlIycjICHhQDAYDSUlJ7Ny5k7lz5wK+OA+73d5zUkrChtvrptHeSIwq5qhfxMNHt17l0BWOlobd/7fL6+rWeWJjYttcgtvyk6BNiCoDJBR6Sg+SriN18At93VujV+s7tbxbemt6ly4ZKdOmTePbb7/lzjvvBGDu3Lk8+eSTZGVl4fV6+fOf/8yxxx7bo4JKwoPZYcbpcRKvPXrQcPGW4qOmoO6tNOzx2viAt6M9QySUa+qLhKIHSXiROugeXfHWmBymoDiaw7bDFO8tRp2o7pa3xua2UW4qDzm2RoEiMOUUSsCw9NZ0jy4ZKTfeeCPvvPMODocDrVbLww8/zNq1a7n00ksBGDZsGM8++2yPCirpeZweJyanKeSEXm6vm4NNB9tMw+7/9GQa9iOX4LYMSO1OGnaJRNK3UCqUJOoSSdQlMoxfvDU7PK3z1fhpy1sTtNzb77lp0RaKt0YgOp23piNvTVuemyRdkvTW/Ey3M8768Xq9bNu2DZVKRWFhIWp1t/PE9QoDeQnyYethTA5Tu4Xf/Hxb9i23fH4LBxoPdDsNe4o+pcMidJnGzKCihpLWVB+qJiMnI9JiDGikDqKDntRDe96ajpLxmZ3mHjn3kShQkKRPCnl5d6S9NVG1BNlqtXLJJZdwzjnncPHFFwfalUolEyZM6FHhJOHD5rLR7Gg+auI2p8fJzZ/dzIGmA0c9Zpohrc0idP5cIJnGTJkorgeQeSEij9RBdNCTemjPW9MRdredBltDsFemh7w1/nw3oaJX6wMGS7L+ZwPG0H6cTV/x1nTaSDEYDHz55Zecfvrp4ZBH0gsIITA5TKDgqInDXvnxlYCBkqZNY+rgqa0r4v5sgBxZ60cSHspLyxmdJOMhIonUQXQQaT3o1DpfIc64rJD6B7w1bRkybQQMd8ZbY3PbONR8iEPNh0Lqf6S35mgBw8n65Ih4ubs0J3PCCSewdu1arr766p6WR9IL+Jf1He2GMzvNPLX2qcDfj014jLNmnBVm6SQSiaR/EuStSeoZb01bBk9ve2vuOv6ukI/RWboUk7Jv3z7mzJnDvHnzuO6668jNzQ2HbL3CQItJ8Xg9VJmr8ArvUadenvjuCZ5c8yQAZxWexTOznsFglFHqkcZqtko9RBipg+hA6qE14fTWtMe+G/eFLSalS0ZKXFwcbrcbp9MJgFqtRqsNdvUrFAqampp6RsowMtCMFJPDRJ2ljjhtXIf5QWottUx5cQoWlwW1Us13V3yHpklDbl7fNUj7C+Wl5VIPEUbqIDqQeugZHG5Ha6+MrY56a/txNi29NeE0Uro03XPOOef0uQRYEnB5XDTZm9CqtUfV31PrngrkGbh0/KUMTRrKjtIdkNcLgko6xNRgknqIMFIH0YHUQ8+gVWs7FVsjhKDJ8UsF73DSJSNl+fLlPSxGMM8//zxPPvkkVVVVTJgwgb/85S+BNPwd8dZbb3HhhRfy29/+lvfffz+sMvZFzE4zLo+LeF3HHqPSxlJe2fIK4Kudcev0WwH6zLLy/o7UQ+SROogOpB4ig0KhCIqtaXaEr5ZV71RE6wQrVqxg8eLFLFmyhM2bNzNhwgTmzJlDTU1Nh/uVlpZy2223ceKJJ/aSpH0Lu9tOk6MJg+bo87ePf/t4ICX9dZOvI8Poy0NQMK4grDJKQkPqIfJIHUQHUg/9ny7FpPzrX/8Kqd/8+fM7LdC0adOYMmUKzz33HOBLEjdo0CAWLVrEXXe1HUHs8Xg46aSTuOKKK/jmm29obGwM2ZMyEGJShBCBNNFHy9S6rXobJ//rZACS9clsvHpjINlb8Y/FjJowKuzySjpG6iHySB1EB1IP0UFUJXMDuPzyy9vd1jLWobNGitPpZNOmTdx9992BNqVSyezZs1m7dm27+z300EOkp6dz5ZVX8s0333R4DofDgcPxS+Vck8nUKRn7Ija3DYvLgl599MRHj3zzSOD/txx7S1A2WuHtkeTEkm4i9RB5pA6iA6mH/k+XjJT9+/e3avN4PJSWlvLXv/6VsrIyXnnllU4ft66uDo/HQ0ZGcJrjjIwMSkpK2tzn22+/ZdmyZWzZsiWkcyxdupQHH3ywVfvGjRuJjY1l4sSJFBcXY7PZiIuLIz8/n61bfbXAhwwZgtfr5eDBgwAUFRWxZ88ezGYzsbGxFBQU8MMPPwCQm5uLSqXiwAFfIrTx48dTWlqKyWRCp9MxZswYNm3aBEB2djY6nY59+/YBMHbsWMrLy2lsbESj0VBUVMSGDRsAyMzMxGg0smfPHgBGjRpFdXU19fX1qNVqJk2axIYNGxBCkJaWRmJiItuKt+EVXvKH52NqNNF4uBGlUknhhEJ2btuJx+0hISmBHfYdfLX/KwByjDmckXYGO37YAcDoY0bjcrnY8cMO4hPjSUlPYf8u332QMyQHh91BXXUdAIXjC9m/az8OuwNjvJGM7Az2luwFIGtQFm63m9rKWgAKxhZQtq8Mu9WOwWgge3A2e3b4rs2f7rr6UDXgqzxbUVaB1WxFZ9AxeOhgdm3fBUBaVhpqtZrKg5UADCscRnVFNWaTGa1OS35BPiVbffdQakYqWp2WQwd8SY/yC/I5XHMYU6OJGE0MI8aMCFx3cloyBqOB8v2+4mNDhg+h8XAjTQ1NqNQqRo4bScmPJXi9XhJTEolPjKdsbxkAg4YOwmwy01DXgEKpYNSEUezatgu32018UjzJqcmU7i713S95udisNg7X+ILQRhWNYs+OPbicLuIS4kjNTGX/Tt946/Q6aiprqKvyjffI8SMp3VWKw+4gNi6WzNxM9hb7xjszNxOv10tNhW+6dMTYEZTvK8dmtaGP1ZObl8vun3zVYjOyM1AoFVSVV/nGcNQwqg5WYTFb0Ol1DB4+mF3bfh7vzDTUGjWVZb7xHlo4lJqKGswmMxqthqGFQyn50TfeKekp6Aw6DpX6xjuvII/6mnpMjSbUMWoKxhZQvKUYIQRJqUkY440c3Od7xgYPH4yp3kRjfSNKlZLC8YWUbC3B6/GSmJxIfHI8ZXvaGG+FglFFo9i1fRdul5v4xHiS05Mp3eUb75y8HOxWe2C8CycUsq9kH06HE2O8kfTsdPaV+J7HrMFZuJ1uaqt+vmfHFeBxe9jxww5ijbFkDgoeb+EVVFf47tkRY0ZQXlqOzWJDb9CTOzSX3dt9452enY5SqQwe7/IqLM0WtDoteQV57Ny603fPZqai0WioKKvw3bMj86mrqqO5qZkYTQzDRw+neEtxYLz1Bj3lpb57Nm9EHvV19ZgaTKjVagrGFVD8YzHC28Z4Dxvc4TsiMSWRA3t877Tc/FysZiv1tb48G6OPGc3un3bjcrp67R2h0Wo4XHNYviOOeEdkD87G6XT22jsieXAy4aLHave05MwzzyQvL4/nn3++U/tVVFSQk5PDmjVrmD59eqD9jjvu4Ouvv2b9+vVB/Zubmxk/fjx//etfAxlwL7/88g6ne9rypAwaNKjfTvc0O5qps9Zh1Bg7XNEjhOC0109jc+VmAJ47/TnmjZ0XfKymZuISOq7zIwk/Ug+RR+ogOpB6iA7COd0TlsDZX//616xYsaLT+6WmpqJSqaiurg5qr66uJjMzs1X/vXv3Ulpayty5c1Gr1ajVav71r3/x4Ycfolar2bt3b6t9tFot8fHxQZ/+itvrpsnRRIwq5qhLjj/e9XHAQBmdOppzR5/bqo//15Ykskg9RB6pg+hA6qH/ExYjZe/evUHeilDRaDRMmjSJlStXBtq8Xi8rV64M8qz4KSwsZNu2bWzZsiXw+c1vfsOsWbPYsmULgwYN6tZ19HXMDjNOjxOdWtdhP7fXzaPfPBr4+56T7ukThackEolE0r/pUkzK//73vzbbGxsb+d///sezzz7LWWed1SWBFi9ezGWXXcbkyZOZOnUqTz/9NBaLhQULFgC+YNycnByWLl2KTqdj7NixQfsnJiYCtGofaDg9TkxO01ENFIA3tr3B3gaf1+nY3GM5deipbfYbPGxwj8oo6RpSD5FH6iA6kHro/3TJSJk5c2ab0wdCCFQqFeeddx5/+ctfuiTQvHnzqK2t5f7776eqqoqioiI+++yzQDBtWVkZSmXUpXeJOpodzXi9XjQxmg77WV1WnvjuicDf9590f7tTQ6ZGE8b4jpcwS8KP1EPkkTqIDqQe+j9dMlJWrVrVqk2hUJCUlMSQIUO6HeexcOFCFi5c2Oa21atXd7hvuLPh9gVsLhvNjuajFhAEeHHzi1RbfDFAZww/gyk5U9rt23i4kezB2T0mp6RrSD1EHqmD6EDqof/TJSNlxowZPS2HpIcQQmBymEDBUeNKGmwNPLv+WcBXQvyek+7psL/0YEUHUg+RR+ogOpB66P90ScP79+/no48+anf7Rx99RGlpaVdlknQDq8uK1WXFEHP09PfPrH/GZ9AAF4y9gIKUjlNMF04o7BEZJd1D6iHySB1EB1IP/Z8uGSm33XYbzz77bLvbn3/++XZT2EvCh8frodHeiFqpRqnoWLWHTIf45+Z/AqBT67jjuDuOevyd23b2iJyS7iH1EHmkDqIDqYf+T5eMlLVr13LqqW2vAAE45ZRTjpqeXtLzmJ2hLTkGeGLNEzg8vmXiVx1zFTnxOUfdx+P2dFtGSfeReog8UgfRgdRD/6dLRkpDQwNxce1n+TMajRw+fLjLQkk6j8vjwuQwoVFpjpq4bWfdTt7a/hYACdoEbpx2Y0jnSEhK6Lacku4j9RB5pA6iA6mH/k+XjJTBgwfz3Xfftbv9m2++ITc3t8tCSTpPs7MZl8eFVq09at9Hv3kUr/ACcOO0G0nSJ4V0jsSUxO6IKOkhpB4ij9RBdCD10P/pkpFy4YUX8uabb/Lss8/i9XoD7R6Ph2eeeYYVK1Zw0UUX9ZiQko5xepyYneaQlhxvOLSB/7fn/wGQaczkqolXhXwef2ExSWSReog8UgfRgdRD/6dLS5Dvvvtuvv32W26++WYeffRRRo4cCcDOnTupra1l5syZ3HNPx8tZJT2HzWXD4/UcdUWPEIKHvn4o8Pcdx90R0iogiUQikUgiQZc8KVqtli+++IJly5YxdepU6urqqKurY+rUqbz00kt8+eWXaLVHn3aQdB+P10OzsxmNquPMsgD/3fdf1h/yVZIenjycC8dd2Klz5ebLKbxoQOoh8kgdRAdSD/2fLnlSwJdEZ8GCBYGaOpLIYHPbcLqdxOs6zvLr8Xp45H+PBP6+58R7UCs7p36r2Up8Yv+tGt1XkHqIPFIH0YHUQ/+nS56U+vp6tm7d2u72bdu20dDQ0GWhJKEhhMDsMKNWHd3YeGfHOxTXFQMwKWsSZ444s9Pnq6+t7/Q+kp5H6iHySB1EB1IP/Z8uGSm33HIL11xzTbvbr732Wm677bYuCyUJDbvbjt1jP2peFLvbzh+/+2Pg7/tOuu+oy5QlEolEIok0XTJSvvrqK37zm9+0u33u3Ll8+eWXXRZKEhpmpxngqNlll29ZTrmpHIBT8k/h+MHHd+l8o48Z3aX9JD2L1EPkkTqIDqQe+j9dMlJqa2tJTU1td3tKSgo1NTVdFkpydBxuBxaXBb2642XHJoeJP6/7MwAKFNx70r1dPufun3Z3eV9JzyH1EHmkDqIDqYf+T5eMlKysLH744Yd2t2/atIm0tLQuCyU5OlaXFSHEUSsdP7fhOeptvnnbc0adw9j0sV0+p8vp6vK+kp5D6iHySB1EB1IP/Z8uGSlnnXUWy5Yt48MPP2y17YMPPuDll1/m7LPP7rZwkrZxeVyYneajZpetMlfx901/ByBGGcNdJ3Sv6KOMoo8OpB4ij9RBdCD10P/p0hLkBx54gC+//JKzzz6bCRMmMHas79f59u3b2bJlC6NHj+bBBx/sUUElv2B323F5XUfNMPvU2qewuqwAXF50OUMSh3TrvCnpKd3aX9IzSD1EHqmD6EDqof/TJU9KQkIC69at495778XlcvHuu+/y7rvv4nK5uP/++9mwYQNCiJ6WVQJ4hTdQSLAj9jbs5V8//guA2JhYbjn2lm6fe/+u/d0+hqT7SD1EHqmD6EDqof/TJSMFIDY2lgcffJBt27ZhtVqxWq18//33jBkzhosuuoisrKyelFPyMzaXDYfHgVbV8VTP0m+W4hG+MuY3TLmBtFgZIySRSCSSvkWXM876EUKwcuVKXn/9dd577z2am5tJTU2VBQbDgBACs9OMSqHqMM/Jj1U/8sHODwBIM6Tx+ym/75Hz5wzJ6ZHjSLqH1EPkkTqIDqQe+j9dNlI2bdrE66+/zltvvUVVVRUKhYILLriAhQsXcuyxx8pkYWHA7rZjc9kwaDouCvjw/x4O/H/x9MUYNcYeOb/D7uiR40i6h9RD5JE6iA6kHvo/nZru2bdvHw8//DCFhYVMnTqVd999l4svvpgVK1YghOCcc85h+vTp0kAJE1aXFRQdJ29bXbqarw98DUBeQh7zJ8zvsfPXVdf12LEkXUfqIfJIHUQHUg/9n5A9KdOnT2fDhg2kpqZy7rnn8s9//pMTTjgBgL1794ZNQIkPp8eJ2WnuMAW+V3iDvCh3n3h3SNWRJRKJRCKJRkI2UtavX09+fj5PPfUUZ555Jmp1t8NZJJ3A6rTi8Xo6rFz8wc4P2FrtK/w4Ln0cZxWe1aMyFI4v7NHjSbqG1EPkkTqIDqQe+j8hT/c899xzZGVlcfbZZ5OZmcm1117LqlWr5FLjXsDtdWN2dZy8zelx8tg3jwX+vveke49a06ezyOV+0YHUQ+SROogOpB76PyF/i11//fV8++237N27l5tvvplvvvmGU045hZycHO6//34UCoWMRQkTdrcdp9vZoZHy2tbXKG0sBeCEwScwK29Wj8shg9SiA6mHyCN1EB1IPfR/Ov1TOz8/n3vvvZcdO3bw/fffc8EFF7B69WqEEFx//fVcc801fPzxx9jt9nDIO+DwJ2+LUcW028fsNPOnNX8K/H3/SfeHxWA0xvfMKiFJ95B6iDxSB9GB1EP/RyF6YL7G6/Xy1Vdf8dprrwVypRgMBsxmc0/IGFZMJhMJCQk0NTURHx99dSCsLivV5mqMGmO7hsf/rfk/Hv/ucQDmFszlpd++FBZZHDYHWn3HSeQk4UfqIfJIHUQHUg/RQbOjmfyk/LAcu0eCFpRKJbNnz2b58uVUV1fz5ptvcsopp3T5eM8//zx5eXnodDqmTZvGhg0b2u37n//8h8mTJ5OYmEhsbCxFRUW8+uqrXT53NOFP3tbRVFplcyXPff8cACqFintOvCds8uwtkau4ogGph8gjdRAdSD30f3o2shLQ6XTMmzePDz74oEv7r1ixgsWLF7NkyRI2b97MhAkTmDNnDjU1NW32T05O5p577mHt2rVs3bqVBQsWsGDBAj7//PPuXEZU4PA4sLqs6NVtFxIUQnDL57dgdvo8VpeMv4RhycN6U0SJRCKRSMJGj0z39CTTpk1jypQpPPeczzvg9XoZNGgQixYt4q677grpGBMnTuTMM8/k4YcfPmrfaJ7uqbfVY7KbMGrbnnd9fdvr3PzZzQBkxGbwzYJvSNInhUUWIQR1tXUkpiSiVChRKpQyUDpCNNQ1kJQaHj1LQkPqIDqQeogOwjndE1XJTpxOJ5s2beLuu+8OtPmnktauXXvU/YUQfPXVV+zcuZM//vGPbfZxOBw4HL9EhJtMpu4LHgZcHhdmZ/vLjstN5dz71b2Bv5+a81TYDBTwBee6XC7cXjde4UUIgaC1fatQKHwGDIqAIXPk35Lu4Xa7Iy3CgEfqIDqQeuj/RJWRUldXh8fjISMjI6g9IyODkpKSdvdramoiJycHh8OBSqXir3/9K6eeemqbfZcuXcqDDz7Yqn3jxo3ExsYyceJEiouLsdlsxMXFkZ+fz9atvgRpQ4YMwev1cvDgQQCKiorYs2cPZrOZ2NhYCgoK+OGHHwDIzc1FpVJx4MABAMaPH09paSkmkwmdTseYMWPYtGkTANnZ2eh0Ovbt2wfA2LFj2XtgL3WH69Dr9AwfPZziLcUApKSnoNPruOq9qwLTPL/N+y25plx2bdtFwbgCin8sRngFSalJGOONHNznk3fwsMGYGk00Hm5EqVRSOKGQndt24nF7SEhKIDElkQN7fPLm5udiNVupr63HK7wMGzeMin0VWA9bSUhKIDMzk+IdxQgEg/MGY7PZqKmqQSAYMXYE+3ftx2F3YIgzkJyZzMHdB0FASnYKHreHhpoG35iOGkJVaRVOuxN9rJ7MQZkc2OmTISM7A4VCQfWhagCGjx5ORVkFVrMVnUHH4KGD2bV9FwBpWWmo1WoqD1YCMKxwGNUV1ZhNZrQ6LfkF+ZRs9d1DqRmpaHVaDh04BEB+QT6Haw5jajQRo4lhxJgR7PhhBwDJackYjAbK95f75B0+hMbDjTQ1NKFSqxg5biQlP5bg9XpJTEkkPjGesr1lAAwaOgizyUxDXQMKpYJRE0axa9su3G438UnxJKcmU7q71DfeebnYrDYO1xwGYFTRKPbs2IPL6SIuIY7UzFT27/TlhHA5XT7PVpUvJfjI8SMp3VWKw+4gNi6WzNxM9hb75uozczPxer3UVPimS0eMHUH5vnJsVhv6WD25ebns/mn3L+OtVFBVXuUbw1HDqDpYhcVsQafXMXj4YHZt+3m8M9NQa9RUlvnGe2jhUGoqajCbzGi0GoYWDqXkx5Jf7lmDjkOlvvHOK8ijvqYeU6MJdYyagrEFFG8pRog27tnhgzHVm2isb0SpUlI4vpCSrSV4PV4SkxOJT46nbE8b461QMKpoFLu278LtchOfGE9yejKlu3zjnZOXg91qD4x34YRC9pXsw+lwYow3kp6dzr4S3/OYNTgLt9NNbVUtAAXjCjiw+wC1lbXEGmPJHBQ83sIrqK7w3bMjxoygvLQcm8WG3qAnd2guu7f7xjs9Ox2lUhk83uVVWJotaHVa8gry2Ll1p++ezUxFo9FQUVbhu2dH5lNXVUdzUzMxmphW7wi9QU95qe+ezRuRR31dPaYGE2q1OizvCIDRx4xm90+7cTldxCfGk5KeEshjkjMkB4fdEUhjXzi+MPCOMMYbycjOCMSXZA3Kwu12U1v583iPLaBsXxl2qx2D0UD24Gz27NgDgNPhRKlUynfEEe+I7MHZOJ3OXntHJA9OJlxE1XRPRUUFOTk5rFmzhunTpwfa77jjDr7++mvWr1/f5n5er5d9+/ZhNptZuXIlDz/8MO+//z4zZ85s1bctT8qgQYOiarrH4/VQZa5CINpMg798y3Ju/+/tAGTHZfPNgm+I14ZHdq/wYnaaSTOksWPLDqZNmxbyvn5vi9/z4hVe3/9btHm8Hp93Bi9ur7tVv7ZuT4VC0a6nZiB4a3b8sIPRx4yOtBgDGqmD6EDqIToYMNM9qampqFQqqqurg9qrq6vJzMxsdz+lUsnw4cMBn3ejuLiYpUuXtmmkaLVatNroXrJmd9txepxtVi8ubSxlyeolgb+fnvN02AwU8KXjj9PEYdQYmThxYqf2bWlMhIrfSPEbMi0NnECb12fQ+I2boD4DYBqqYGxBpEUY8EgdRAdSD/2fqDJSNBoNkyZNYuXKlZx11lmAz0uycuVKFi5cGPJxvF5vkLekLyGEoNnRjEqpavXF6RVebvrsJl81ZOCyCZcxK7/nM8v6cbgdKJVKEnQJKBQKSkpKGDduXNjOBz5jQqVQdWqfjjw1/r8DRo3Xi0d48ApvIL4GQSvDxm9gtWfc9HTJgc5Qtq+MoSOHRuz8EqmDaEHqof8TVUYKwOLFi7nsssuYPHkyU6dO5emnn8ZisbBgwQIA5s+fT05ODkuXLgV8MSaTJ09m2LBhOBwOPv30U1599VX+9re/RfIyuozdbcfmthGriW217Z+b/8mag2sAGJwwmAdmPhA2ObzCi8PjIM2QFqikbLVaw3a+7qBUKEEBKkIzbro6DRUIGo7wNJTdKrM5Rxqpg+hA6qH/E3VGyrx586itreX++++nqqqKoqIiPvvss0AwbVlZGUrlL79iLRYL119/PeXl5ej1egoLC3nttdeYN29epC6hW/iTtx35S31v/V4e+d8jgb+fOe2ZNqeDegqL04JRYwwylozG/pGCOlzTUH5PTU9MQ/nb2jJsDEZDt65f0n2kDqIDqYf+T1QFzkaCaMqT4nA7qDJXoVVrUSt/sR89Xg9z35zL9xXfA3DlMVfy+OzHwyqHR3jIiM0IWgJtt9vR6VoH8kra5mjTUB6vJ+Cp8U9DtTSCjpyGEgiUCiVupxuNVtOmpyaS01ADCafDiUaribQYAx6ph+hgwATODnRsLhte4Q0yUABe2PhCwEDJT8znvpPuC5sMXuHF6XGSYkhplaPlxx9/7NTqnoFOuKahtv60lcKiwqNOQwkhAiUVBvJqqHCwZ8ceuaokCpB66P9IIyVKcHvdNDubWxkGuw7vYum3vvgbBQqePf3ZNuNVegqry4ohxhDWqSRJ24Q6DaVVa0mPTQe6Pg0VmIJqYxrKb7R0dhpKIpFIehpppEQJNpcNt9eNPuaXOj1ur5uFny7E4fGtVLpu8nUcm3ts2GRwepwoUJCoS2zzi3Lw4MFhO7ckdFrqIRyrodqahupoNZR/Gqqt1VD9dRoqIyfj6J0kYUfqof8jjZQowCu8mBymVtM8z214jh+qfBlshycP5+4T7m5r9x5BCIHdZW9zmkfSv+jONFRbnprOroYSQqBUKlEpVMSoYlApWi+3l0gkEpBGSlRgc9laJW/bUbuDJ757AvB9qTx3+nNBXpaexuKyEKuJJU4b126fsrIysrKywiaDJDR6Ww/dWQ3VXt4al8cVSFro8XoC51Er1cQoY1ApO+cd6m2qD1WTkp4SaTEGPFIP/R9ppEQYIQRmpzkogNHlcbHw04W4vC4AFk5dyKTsSWGTwT/Nk6BL6HdueUlk8E9DHc1b40+y5/a6cbgd2N127G67b1oJn4Eeo4pBrVTLe1MiGYBIIyXCODwObC5bkJfk6XVPs61mGwCFqYXccdwdYTu/f5onWZ/cZp2glkyYMCFsckhCpz/pQa1UB6Y5jRpjYJrI7XXj8v7ibbG6rIEpI/8+aqU6YtNEw0cPj8h5JcFIPUQWIXwfrzd855BGSoSxOC0IRMC9/WP1jzy17ikAVAoVz53+XFhjRCwuC4YYA/G6o+eI2bt3L2PGjAmbLJLQ6M96UCgUxKhiiFHFoEdPvDY+ELTr8rgC00QurwuH24EXL0qFMshw6Q0qyirIG5HXK+eStI/UQ2j4jYkjP6Fs83qDjRH/p2VfswuGhWnWTRopEcTpcWJxWQIeDIfbwY2f3ojb6wbglmNvYUJm+H41uzy+6aREfdureY7EbDaHTRZJ6Aw0PSgVSjQqTaA8AxAI1HV5XTg9zoDHxeayIYTP6PcbLeGIb7Gao7NExECjv+mhPYOhI6PC39bSgIC2jYm29vXv3x4tnZUKReuPUgkuZ8+OQ0ukkRJBbC4bbo8bQ4wvtfOf1v6JHXU7ABibPpZbpt8StnMLIbC77STpko46zePHYJApqKMBqQdQKVWolCq0+LyMQgg8woPL4wrEtzg8vhgXj/CgRIlS+YvHpbvxLTqDzLwcDURKD0czJtoyKPx/tzQmjmZEHLlvR/iNiZb/HmlMoADFEdta7tNVwjnrKo2UCOHxeoKSt22u3Myz658FIEYZw3OnPxf0y7Gnsbgs6NX6DlfzHElhYWHY5JGEjtRDaxQKBWrFL9M9cdo4hBC4vK5AjEsgvsVpRSACwb1diW8ZPFTmDIoGOtLD0aYzOjIE2jImWhoU7R33yGO0dUu1ZUS0/Ls9Y2KgrtKXRkqEsLltON1O4nXx2N12Fn66MLCi4bbjbmNMevhiDvzTPAm6hE65wjdv3izT4kcBUg+hoVAogqaJ4rXxgWkif4yLP77F7rYH9gklvmXX9l0yHXsPEWqMRFvTFPtKdjFkxOgOvRNtHdPf1hHteST87dKY6B2kkRIBhBA0O5pRq3zD//i3j7O7fjcARZlF3DjtxrCe2+a2kaxLDmveFYkkGjlymgiCl0H741scbgc2YQMIBObGqGIG9DLozgZetrX9aFMdR/b3/90eLic0Nfn+3168BH5jo40+kuhHGikRwOa24fA4MMQY2HBoA3/9/q8AaFQanjv9ubCuULC6rJ2e5vGTm5sbBokknUXqoWc50mvSchm0f5rI4XEELYNOSE/A5XFFdBl0e3Q28LKtKQ4IPW6i5XnbI5TgS79Xoq0+7eFNSyM2fKXMJFGANFIigMVpAcDutrPo/y0K1EG56/i7GJk6Mmzn9acrT9QldmnFg1otb5doQOohvLRcBg2++Bb/Mmi3143T7cQR4wgE6LaMb+lMmv/OBl52FC8BvW9MtBVP0dsoVfJZ6O9IDfcyDrcjELR6/+r72dewD4Ap2VO4fsr1YTuvEAKry0qSLqnL0zylpaVkZMiCXpFG6qF3EQIQSlRoUCo0xKgNNFTuZHDGCFweNy6PG4fbid1jw+Jx4vZ48ApQKhQoiUEp1ChQ/eKVAAjROGnvi78t4yCUlRxR5vTpNo11lRgTkiIthiSMSCOll/G7jNcdWsc/Nv0DAJ1ax19O/0tY65VYXVZ0ah3x2qMnbZNI+hqdDbw8sm9bKzn8nom2jmm3Q021CiFUgBaIRUkiKq8HhDuQbM4lHHi8drwKLwpArVIRo1SjUqpRKZUDxpiQSLqKNFJ6EZfHhdlpxu11c9P/uynQfs+J9zAseVjYztvdaR4/48aN60GpJF2lP+jB4+n8ao6jGROdDb5s6akIZSVHy7bhw8eh0x1pTCjwvVLVgA6IC8S3uLwuPMIX3+LyOHELK27hRYESNSqf0aKIvviWaCdjUPjem5LoQBopvYh/uePSb5dyoOkAAMfmHss1k64J63ltLhsJuoRA0riuUlZWJnN0RAF9VQ8ej88DYbGAw9G2EdFevITfoOjImPAbEu1t70lqa8sYPPjoOmgV36LxpfkP5G/xuLB77Li9LpzCgVf8nOZf4fO29Faa/75KY101adkyZ01/Rj4BvYTH68HkMLG+fD0vb3kZAEOMgWdPezasyxqtLisalaZHpnma/Gv9JBGlr+nB6QSrFcxm3/9VKtBo2jc6+gJmc9d1oFQo0aq0aFVaiIEEfO8Hv+Hi8jpxuO24vE7sbhsoQIlvGbRKEZ40/30Vh21glYgYiEgjpZewu+3UWeu4/b+3B9qWzFhCflJ+2M7p9rrxeD2kGlN75BeZTidTgUcDfUEPXu8vXhOr1edF0WohLq7vGCIdodX2rA78+Vv8BJZBCzcerxuHx4HT48DusSHc4pd9FD2T5r+voo4JX/FVSXQgjZRewJ+8bem3SznUfAiAEwefyOVFl4f1vFanlQRdAnp1zyRtGzt2bI8cR9I9olkPTqfPOGlu9v1foQCdDvrbqun8/PDqIDBNhG+ayEjwMmiPcGNz23B5nNjcTl/+FoUCtcIX36IeIPEt6bnh+5EniQ4Gpvndy9jcNj7d8ykrfloBgFFj5JnTngnrrx+by4ZWrSVBl9BjL6uNGzf2yHEk3SPa9OD1gs0GdXVQWQmHD/tiSIxG36e/GSgAJSW9rwN/NWhDjIE4TTzphgwyY7PJiM0i1ZBOoiYRtTIGt9eFxW3G7GzG4jLjcNvxeD29Lm9vULG/JNIiSMJMP3x9RBdur5v9Dfv5w8o/BNoemvUQgxIGhe2c/vok6bHpMvBOEjZcrmCvCfRPr0k0o1KqUKEKim8JTvPvwOGx4/Da8bq9LeJbYgb0NJGk7yBfJ2FECEGjrZF7v7qXaks1ACfnn8wl4y4J63ktTkuPrOY5kqysrB49nqRrRFIP/hwhVqsv3sTthpgYiI3tH7EmoZKaGr3PQnCaf2NQfIv752KKvmmiX9L8q5Qqn+HSx6aJ4hJTIy2CJMxIIyWMmJ1m3i1+l/d3vg/4qrD+ec6fw/oSsLlsaNS+1Tw9fR6DoWeNHknXiIQe3G6fcWI2+6Z2FApfIOxAvSW02r5z4cHxLfrAMuhfqkE7g5ZB++NbYvrAMmi1RgbO9nei9+7r4zjcDn6o+oE7v7wz0PboyY+SHZcdtnO2nObx52XoSfbu3UtqqvzlEml6Sw9C+PKZ+L0mLpdvKic29ue06wOYQ4f2kpDQd58Ff3yLRqWBGENgGbRbuHF5XMHLoD02hBCoFKqoWwbdUHOI2LiESIshCSPSSAkDHq+HQ6ZDXPPRNZgcJgB+M/I3zBszL6zntbqsxGvje3yaRzKwaOk1sdt9bRoN6HtmkZgkSgmKb8E3Xe0RvvwtLZdBO7x2PG5PoKjiQF8GLQkvUXlXPf/88+Tl5aHT6Zg2bRobNmxot++LL77IiSeeSFJSEklJScyePbvD/r1Bk72JW7+4lZ2HdwJQkFLAM6c9E9ZpHrvbTowqJizTPH7GjBkTluNKOkc49OD3mjQ2QlUV1NT4gmENBt8KHY2mx0/Zp8nP7//PgkKhQK1Uo1frMWriSNGnkhmbTaYhm3RDJsm6FLQqHUJ4sbmtNDtNmF1m7G4b/7+9N4+O4zjvtZ/u2bEMdmCwEiBBEhQpUeJ6RdGS81nxEp3cyIvs+EqW4uTKJ7EUa7knkmx/luPYjhYvkS3rs2znOk5u5MRWbCW2HNlXoUSJkmmKokRSXACQ4AZgsJHYB7N21/dHTw9mBjPAABgAQ6Cec/p0d3VNd03XTNev33rrrbAejvm7LCSVtXII8nIn5ywpP/nJT7j//vt5+umn2blzJ0888QTve9/7aGtro7Kyckr+vXv38vGPf5xdu3bhdDp57LHHeO9738vx48epra1d9PL7Qj6efOPJmB9Kvi2fH/3RjyiwFyzYNY1+5TAV+RUL0s1j4vV6Wbdu3YKdX5IZ2awHM1S96WsihCFI3HIeymm5dMlLXd3K+y/MJsx/UARARMXOAvm3jA1fosxTl9VzSqYiBAxeUujxqvR4LfR4VXp7VHq6LfT0qHzrh2MLdu2cEynf/OY3ufPOO/nkJz8JwNNPP82vfvUrfvjDH/LQQw9Nyf/MM88k7P/93/89P/vZz9izZw+33377opTZJKSFePHMi3xl31diaU9+4EnWlq1dsGvqQmciNEGJq4R8W/6CXQdgaGhoQc8vyYxs1EMwaIiS+FD1LpexlszM6Kj8L5ikCvMfPwza9G8J6cGsh/n3+0az90VWMONjpgBRowLEgrfbECK9XkOIhIJLM+orp0RKKBTi0KFDfPazn42lqarKjTfeyP79+zM6x8TEBOFwmNLS0pTHg8EgwWAwtj86mp0fuS50Tl06xZ8//+dE9AgAd22/iz9c/4dZOX86fCEfhY7CrAZtS4fNtnBWGknmzLUekkPV67phNVkuoeoXE/lfmB5rktUkVZj/YCRAQJ8a5t+m2jJ+llkW0HK8XAgFMawePRZ6osIj2SIyNpqTnh9AjomUixcvomkaVVVVCelVVVW0tmYWWfDBBx+kpqaGG2+8MeXxRx55hC996UtT0t88eJD8ggK2bNnCyZMn8fv9FBYW0tTUxNGjRwFYtWoVuq7T2dkJwNVXX83p06cZHx8HG3zmzc/E4qHsqNrBpzd8mhNvnwBgzYY19Hb14hvz4XA6aFzXSNtRw2el3FOO3W7He8ELQNP6Ji72XmRsZAyb3UbzFc2cPHwSgLLKMlx5LrrOdaEJjYbmBgYHBjkzdAar1crWrVt54403EEJQUVFBSUkJ7e3tAKxfv57BwUEGBgZQVZXt27fz5ptvomkaZWVlVFZWcvKkcZ21a9cyOjpKX5/xfXbu3AnAgQMHKCkpoaamhuPHjxvfbc0aJiYm6OnpAWDbtm0cO3aMQCBAUVERDQ0NvPPOOwA0NjYSiUTo6uoCYMuWLbS2tjIxMUFBQQFr1qzhyJEjADQ0GLObXrhwAYDNmzfT0dHB+Pg4eXl5tLS08NZbbwFQV1eH1Wrl3LlzAFx55ZVcuHCBkZERnE4nmzZtikVqra6uJi8vj46ODsDw8fB6vQwNDWGz2diyZQsHDhwAjN+e2+3m1KlTAGzYsIH+/n4uXbqExWJh27ZtHDx4EF3XqaiooLS0lLa2qC/SunUMDQ0xMDCAoijs2LGDQ4cOEYlEKC0tpaqqKna/m5ubGR8fp7e31/j97NjB4cOHCYVCFBcXU1dXx7FjxwBYvXo1nZ2deL3G72Xr1q0cP36cQCCA2+2msbEx4TcbDGp0dnYRiUBt7TX097cTifjIyyugrq6ZkycPR79rPYqi0tt7PlqvV9Hbexafbwyn00VDwwba2437XVFRi9Vqp6fnbLRMV9Lf38n4+DB2u4PVq6+itfWg8Zst8+B05tPd3RH9DVzB4GAvo6ODWK021q3bwsmTBxACSkoqKSgoorPzVPQ30MLo6EWGhy+iqiotLdtpbTXud3FxOW53ORcuGM+G+vq1jI+PMDTUj6LAhg07aW9/i0gkjNtdSmmph3PnjP9jbe0aAgEfly4Z97ulZTtnzhwlFApSUFBMZWU9Z868E/29NBGJhBgY6I7W6xYsFisnThwgP78Qj6eJjg7jfns8qxBCp6+vM/o/upqurtP4/eO4XPnU1a3j1Km3AaisrENVLUn3+xw+3ygOh5PGxo20tR0ynhHlNdjtTrzeM8YzomkTFy92MTY2jM1mp7n5ak6efCN2v12uArq6Tkfv9wYGB/ui99vKunVbOXnSeEaUlFRQUFBCZ2d79H6vZ3R0kOHhgdj9bmsznhFFRWUUF1dy/vzJ6H9uLRMTowwOGs+IK67YyalTbxEOh3G7Sygrq+Hs2eOx+x0MTnDxYk/0fm/jTPc7BEN+nK4Cisoq6TrXhi508stK0TWNieFhFBQ8jc0M93oJhwLYnXmUVtbQe8H4bkVlVYwNX2LkklEGT0Mzg/1eQoEJbHYn5TUN9Jwzvpu7pALVYmU4Woaq+jUMX+wj6B/HanNQWdcUi2BbWFyO1e5gqN+o88raJsaGL+H3jWKx2KhuXEtXh/FbKigqxe7MY7DPeKaV16zCNzqMf3wEVbVQ07Se7jOtCKGTV1hMXoGbiz3GM63MU09gYhzf6BCgULdmA96z7eh6BFeBmwJ3KQPecwCUVtURCvgZH7lk3NPVG+g+e5qL/QrDoyWMT5Rx6uQIA/0OhkeK6fFa6O2xMDQ0P4ey/AKdinI/FZVB6upVqqojuPMvUVkVYMNVVTisXqBkXteYDkUshndThni9Xmpra/ntb3/LtddeG0t/4IEHeOWVV2INRzoeffRRHn/8cfbu3ctVV12VMk8qS0p9fT0jJ07g9ngMm7fdPqsxlv6wn3t+fQ8/eOsHAHgKPOy5fQ+V+VN9aLKFP+wHoDK/Eod1cWIFHDhwICZWJEtHJvWg60aXjs9nLLpuBF1zOKTVJBucOHGAK66Q/4VsYw6DTo7fogkt5t9iU22xbqKujhPUrbliqYu9IAgBIyMKPd1qVHCoxna0C8brVenvVYlE5v6HttkF1dU6nhqN6mqd6lodT7VOTa2Gp0anulqn0D2zROgbGuP6qxbGiTmnLCnl5eVYLJbY27tJX18fHo9n2s9+/etf59FHH+W//uu/0goUAIfDgcORolEPh2FkxBje4HAYwSCczsk55dMQ0SP8n6P/JyZQbKqNH/73Hy6oQAlrYTRdoyK/YtEEiuTyID5UfTC4fCf4kyxPEsP8Gz52k/4t4YRh0HrECEg3EfZdlmH+/X6MLpcUXTA9XkOI+P1zFyCKIqioNISHIUC0qCDRqa7Rqa7RKC0TOR/zKKceXXa7na1bt7Jnzx5uvvlmAHRdZ8+ePdx9991pP/f444/z1a9+ld/85jds27Ztbhe3Wo2xlrpueBIODk4+4fPzDeGSNA5TCMHB7oPc/5v7Y2lf/r0vs712+9zKkAGaruGP+ClzlZFvX1hHWXTdGP6h66DrVJWUGP8sVTXuTfJasigkd4emC1VfUCCrZaEoLa2aOZMkK0z6tzgpoDDBv0WUBnFaXVPC/FtV65LOBh0OQ3+fSq9Xxeu10JvCKXVkeH7qoKhYp6ZWx1OtRUVHVIBUa1TX6lRW6SwH16mcEikA999/P3fccQfbtm1jx44dPPHEE/h8vthon9tvv53a2loeeeQRAB577DEefvhhfvzjH9PY2Bjr0y8oKKCgYA7DflXVECZOp9FAmyE3zeEPeXmxV9Pe8V4+8dwn8IV9ANxyxS386TV/mp0bkQIhBL6wjyJHEW7HPMeIRoVHvAhB141/VyRiLOZxIUAI3KGQEUTD/NMnixSr1dg216nEjBQ288YdHR9sBl0bGzPWKz1U/WKSlyfHaC8V8WH+S92VuPNKY2H+w3o4YRh0SATRhY6qqFkbBi0EXLqoTDqeeo0uGHM4bq9XZaBfRdfn/nxzuYTRBWOKD7MLptoUI9qK+Z/nnEj52Mc+xsDAAA8//DC9vb1cffXV/PrXv469PV64cAE1zj713e9+l1AoxEc+8pGE83zxi1/kr//6r+dXGItl8okfiUyO2bRaCdhV/ueL/5OOoajzZcVGvv7ery+oaveFfOTb8il2Fk9/nXjRES9CNM2wEpkCxFzi3ZLixYQpOCwWUBROdXay0+OJiZbYZ83zBAKJx5LLqChTRYvFYizTCZvk9QpGCGhtPUVLy85YqHpzgr8VfmsWla6uU9InJQcw6yExzD+xMP9m/JaEMP8RP4L0Yf7HxxS8UfHh7bbEdcUYXTC9vfMbjmu1Cio9iV0wpi9IdY1hBSkqEvIdLkrOiRSAu+++O233zt69exP2zdEcC47VGuvY14IBHv3d1/jPM78BwG0v5Ifv+y55FueCXd4X8mGz2Ch1lWJBMVonU4BomrGEw8YyBwEyK+LFRqaY4iVe1Oi6IZjij0UnN4utUwmbeGuN1TqzqDHPcRkTH6o+GDTcpxwOGapeIkmHRbUkiA8hBD6/RmdvhK4unQtdGl1dAq9XobfHQp/XSl+PlfHx+an98opoF0zUF8RTo1NTo8V8QcordBmPaBbkpEjJdf7T+wpfOfpUbP//2/ElVofyoK/PsLw4HPMbRhFv+dA0gmE/hEOU2ouxjQ9M6YZBiMnG2GKZ2uWSJTasWjX3D8cLhdn8Q+OtNeba7IYzv3u6a8WLlOT7YoqzmcTNEiKEYfiamDDEiTnBX2PjBgoLl7RoK55VqzYsdREkJNaDphnTOXR1QXc3eL3Gttdr7Hd3KwwMWJlPs1fo1mNdLtXR7hhPtemcanTHyImZs4sUKbPk9PAZPvnSZ4whccD9m/+C9637g8kWZXg46hxgh/zopCc2W2KDJ8Sk9SNecJhdMXFdNJFIiJAepMJVjkvoYIk2oDbbojek/cPDuPMX2Fk3GVNkzUbYJIsaIYwW3tw388QzHz+bLHdHpQpVH2816e7up7BQ+kQsJcPD/eTnyzpYLISAoSFTbEwup04psfTeXuPxOVccDqipgZoaYYiQWo0qT4RyT4ByT5ByT5CCAhEL829VbTkzG/RyRoqUWeAL+fjj//spLgUGAXh37XU8cE20W8r0WnQ4JkcIXbpkNFpmCxOJGOnxviLxjaXZCEb9NHRVYSKiU+qoIN/hXvI3+0sjIzQvwXxIs8a0nMyGTPxsprPaZKE7KtNQ9SMjl6itbZ77/ZHMG1kH2cXnm7R8pLaCGP+NqWRmUlRV8HigttYQInV1xrq2dnK7vNx8xCqAJbrYgbyEMP8hLUhQC8SGQceH+beqtstqGPTlgBQpGaILnXte+zyHBoxoqPUFNXzvhq+nVtLmCCGYdFb1+xO7HUxLSJo3byEE4+FxCm0FuB2FSzKMLhnLcu5InYufDcyuOyrZz0ZR0FEJhFR8AQu+oAWhWrA7VApdFhQBBKdabyyqZfJckiVhWf8Xskw4DD09U60g5uL1GlaS+VBaagiOeBESv11VxbyG4yaG+S+YEuY/EAkQ0oIJw6AtqsWI37LQw6CTnzEzbZMifbbnSN72jc+qyLNBipQM+fvj/8z/PmlMZuiw2Pnh//MtSp0ZhAI2X4dniS/iI8/qosRZnDPKfNv69UtdhNxjjt1RoYBuWE3GBKGQQEHDaQ1hVQQEAH+SE7F5HVVlvbtmcih4/Mgosww57GezXFi/fo7xmJYZug4DA5MWj2TrR3e34ao3n7jmeXmTAiR5qauD6uoUw+5TNajaPBviuG0FsAE2IQALBeSjK04jWi4RwpEgAT1IRJsgJCIIBKBgU2xYFAsWxYISf06zGxpA6KnTE/KkEhczfP/pthOYQ2WNTMz+MxkiRUoGHOx7m3te+3xs/9FrH+bq8isX7HoTET9WxUaJszjrU5vPh4OtrWxvaVnqYly2xCb4m1CZ8BtxFGw2QUF+BtohzlrT2tNOS1WzYbExh8abeeJJ52eT7EScqstKDvueltbWg7S0LFzQxqwzx0Z5dDTaBeMFr1ehq9tYd3sVwwrSqxAKzW84bo1HUFOtU1cjqPFo1NUIaqt1aqo06mp0igp1FOIaZbOcuk5rTzt5BetgNHsCJCUZqCwVo3PIDPlZhBVNKER0lbAwYrgEdR9hoROI+jQqqNhUa0y4JDwIMtqOL0D8zmzPk2Y7U6RIWTou+i/x0d/8GQEtAMBt627htnUfmeFTcyekhdCFTrmr1AgNnUPo8UpekjHhMASCCmPjEAwqKIrA6TAe0BkT52ejK0yJfpySZD8bczt52Heqa6USK8l+NjOJm1y32syjAdO1qH/ZPM8zY6OY7k06k+0ZrhkIgrdXpbvXQnevle6EbQvdfRbGffMTqJVlEWqrNGo90XVVxNj2aNRWaVSURLBYo7+TdL+XifSNqa5HhXq6RjadwF6MhptJzxbzSS6EQBPm/ERhglqIkB4iKCLG81XBECyqBatyeYX5XyikSJkGTde47cW/4NyYMaPp5rKNPPLf/t8Fu15EjxDUQpS7ysizLUI4QU0zAm4MDU3OW2QuyWkjI1ypaVBSYthWzei75nZ+fuL+dMcyaWAvc4SIhqr3K/gmIBIxrSbzD9JUnFecWcZs+NnE74dCsxv2nexEnNwdNVN/eDKL0HBnul2M3ehyS1fGeJ+h+fgPpfvcDI2ppkHfJQvdvRa6eix4+6x09Vrw9lqiQkTl4uD8/GqK3Dq1Ht2wglTr1Hh0aqs1aqt1aqt1qqt0HCn/6mbTPX+KC8sm/f8uA2Ijg7CCxUmBzRAukailRRMagUiAsAjj1/zo6Cgo0aBzliUL87+USJGSiujb5t8cfJzfdL4MQInNzT9e9TB5fZcgooEWQYloMZO7YpreNS2aHoFI3Hb0oS3ig6nFFgVdUQiKEGWOQgoc/YmmePMBn/Kz0WPhcExMJIiNVIspTMbGZnVbsiabrNapYiZ5ST4WL3ZmOraEE1ZEIuAPKIyPG9YTBWGEqnfNo1M+CfdCh2Sf77BvczEtNqm6o5ag4Z52e5Zv3G53KThdWXnbni1CwOCwQnePGl0seHtVurwq3b0q3l6Vnj4VTZt7eRx2ERMbRhdMoiCp9WjMZdaRbLPg/4VFQFEMXxWbajy3Cm2F6EI3ouWKCBEtQkAPGC+xIggCFNUQO2bU3OWMIsR0ry7Ln9HRUYqKihhxOHDHmcL/7xp4/20gFFAE/Pqf4b0dS11aSUbYbOnFTjohZG6nEkLJx5IabyGiUzzFWU2sVoHDvjDuHCe6TnBF3fKcnv5yYSHrYNyHYfHoUenqUfH2GOIjXpD4A3MXIKoq8FTqMRGSygpSVnJ5hGVfSf8FczSROUdRUAsQjusmmpyfKOrfsoj0eQe4/v3XLci5l7cEmw3BYGzzfBH8jw8bAgXgyy8tI4FitUJxMRQVGV03RUXGfqrFzFNcDG43B0+cYHt9vREC1e831vHbPl/6Y+bxdMfM/v1sEA4b1qKRkeydMx67HfLyEHl5CIcLzZkHjnycrjxceS6U/DyEKw+cLkRePsKVF11cRnpsP7rk5SGcrli6jJm9fAmFoKffEBym9cPba4muDTEyPDI/ZVtWok9rBamq0M0ZPiSXEVbV7CYy9s1uoogeQRORmH9LIBKIjiaa9G+xKbbLtptI/lRN1q0Dp5OAXeXDu9u5lGd4K980UML/sl1J8PetYLWAxYqwTk6KJ8whoBYLWC0Ii5nPgjDTzUbHjCwbDRSm6DqRSBiha+SrDqyoUycGNKPTxs93k2oCQVWdWXQUFxvWgDn+WJvXr2fB4rGbo1SmEzoziaDkJf5YOJy9soZCEAqhDA+jYHj1Z7ODSdgdk+IlJnbyEK58hNPFNXYb1sKiqOBxGelxImiKEIqKIDNdjtaZP/Vl9VPSdB0GLil09xhWkO5elW5vohWk/6KCEHNvLPLzRILFo9ZjChKNWo9OtUcnbwXN55SqHlYKyd1EBTZis0Gb4iWgBQjrYSaELzaw2KpaY11Fl4NwkSLF5LnnoLKST+/5DIdaDwPQWNjAt279N8YdC9PvGY56d1e4yrDaFjnc/BwYGh+nZKFEitVqCKCFOn84nCh2ZmntEb4J9PEJtHFjX/FPoAaNteKfQJlPPO4klFAQJRSEkdQRruY75ks4XcYSFUExK45p9Yk7liCQMrEGOV3LUgQJAaNjSqwL5mSHjbERV6xbprtHxdunEg7P/aFvswlqqoyul7oawwoSEyNRK4i7cA7dMPF+QgmLPiVNiXf8TV6I246+QGWc3zx//LQUGeSfvIYAfWp+fXQAa0FZYt7YueKuo+upy5Nw3RTlItHXKqP8cdecVf748gt9av505U/+vrFI5sYxoevoQkPXjUXTI+hCQwgddBF90VJQUVASykCa8k1N77v7gVn+KDNHipQ4vn/sH/mH1n8BwGVx8qP3PEnRAgkUTdfwRwKUOkrIvwwECsDA0BCrq6uXuhhzw2YzFvfs6jMYjDrC+iAcVlBVY/jwlB6ZUAgl4EfxT8CEL7atRAWNEpiIiRsl4E+d7p9A8ftj2/jj0jUta7dCCfhRAn4YHszaOeOJCZ101iCHM250T7oHb/Ye0jPmFwK/ZqcrVEFnsJKucBWdoSo6Qx66wlV0Raq4EK5mXI//n87ud6Sg41EHqLN4qVe91Fu6qFe9NKhd1Cvd1KtdVNGP6tPhtIBT0zTaxN2Xmb7rMqd4qQsgMZAiZeF56+JxPvPa52L737jub9hYujARVoUQ+CITFNndCyaCFoLLwTSYDcwJ/nwTChN+EELBbp9h+LDdjrDbEe6i7BdICAiHYgLmzNl3WFNUPUUEKRNRYZMkgmLpSSIoQSBlMQZOTGQNXcraOedDBAs9VNNJPRdooJP6KdsDVM7rGsUM0cAF6umMreO3a+nGrodBhhqSSGaFFClRPvHqZwhqhvPmn224lVua//uCXcsXmSDflkexo+iyavh3bFje09OHQpNWk1DICLrmcoLFssRvpIoCdofhq1JUTKOnhuzZVTBEUCiY3oozERU+fp8heFJYiVILJL9hVfJPLNhbvQAuUp5SeJjbXmrQ5vGoc+I3zqR0TS5qF/Vqt7Ft8VKgTsQFsEucn8lYStAVEMnHVDVNfgAFMSU97hrxQfOmyz/lmpNpGeWPP3/CNdPlJ5aecP7pvmuq/DN814zLP+vvGy2Pok7Nn2n5Y1NQzOH7Ksn3OIP7k3DdWd6f6DVE0nUFgojQiaCh6RpBwkSEho6ODiiqikW1YlGsMUfdhUCKlChdvl5wwvbKq/mbHQ9m78QJD2eBLzyBTbVQYi/EggA9ArEKTlqLTNNJvT/l7Vik+EyKVzuhp9w/dLaXrU0e4080BfMPkJRGclqKzyrpPpsJafJldD7FCFUfnLSa6JqCzQ4F8SEw9BSfn3L+6a8z57QU12n3trGuJotWPkUBhxPhcCKKS7J3XhMhIBiYFEGByelsZ3pIj/ktdA/Y8Q7Y6e630dlvw9tvp6vfRne/DW+flUBo7j4wFovAU6FTWxPvhJo4HLe0WKAoZUAZsBlIrIMQsDAdZ1kkI5E4U55snCODPDOWdfJ4e08H66rXLEw5Mskzi7KmQ8lGA5/8zJ5yPNWzP5mp54gPu5cHaCJMOOqYG9bCBPQgQV3DNji7mFuzQYqUOCqcpfzv6x/BLkIQMUNex1ecuR1X2fHHE/JOFRLBSBB0jVJXCfbwIBmJDiGiDZVg+oZ7puOkPp6ysU3dwEc0DURk0nEqZRmSkzLMt8iEI0awNZ8PQmHjNrjsYDWDVyb5wYp5iIr5CZepaJEJlHBfUmqqhjrDtFSiM8Nw3BnfFxsIuxNRNBkd1BiOa6Grx4q3JxoZ1QzL3mOsR0bn54RbXqpR44lQVx0NxV49GZa9rjpCZbmWejhu/H85hdlKiwRQwkMzXH1uDcOszzFTA5URl2ejrmkTqOEUkX+zQTYeUzP+pTN5bid/RI8+h8MoIowQYZS4/cm1mRYBEUk6Fp8n/ljieRBh40VahEEPT+bV485BmAul35/b/ckAKVKiqIrCD3Z9jmqbDcLD02dOaIhSbSuJeYMhIiEj1HF5fgUu1QmKZTKfGv85JcU1coPSwgKwXD4hqJMRwrCa+P2G1SSiKdhtgrzCydstzIxTP53ltHTXmfmzbqfDeLjMlHdWAnFq+tRf4NQHatpfafR0ug6dPXZaO5y0dbho7XBy6pyT7l47/ZeszG84rkadJ0RddYhaT5jaqhC11UFqq8LUesLUVIVwOdPdg7jrpriVM9WM22EBfaa3xwy+24z/80zuzyKcI6Pn0WJ830S7g9sZQKhJAw9m++wUAtAmG109vpEOxRrzlI28Pn2exPyhhEY+dZ40n4/Lr2S3szcr1JUt3DxzUqRE+V8t/4PrarMcMU/Xwe9HUxUmCgsoUVzkqy4IaxCMPhnNuU0sFrDk9tDNquIciIM9B8JhCIYMX5NgNFS93QGudKHqM7aGzJM5nrK0oBjUhZ98cjYvkroOnV4rracdtJ2x03baTutpB6fO2pnwz/53bbfp1FRF4qwg4YTtWk8Ed6E+TXtkA2wLZrMrLbRBjk0AmlPE3vZDU97cExv5UMq3+6kNeCipsTbyrNECWMf1JCGQZEnQ0wmBUPQakex0uaw4FFDtoFhxOqRPyoJzx+qbsnvCUBgtOIHfrkJhIUX5pRQ5i412yZznJ6JBKGjYvYPBSR+SBOGSO9FHT3YNsHNt3VIXIyOEgGDIsJr4Jgyric0qyMsTl30Yj3MX+7miZmmCWCWIkQ47bR2zFyOKIqiq0GJio7Y6uvZEBUh1hIpSLafradHrINXbPpE0jXz8m3hksuFO01gn5Enz9p4oLkKkfNuPtxKkMk9JZkRgBdWGUGygJK4Fqdfxx1GNfVQrimoD1Y5qsaFaJtMUiw1Fia7VybXxueS1FRR7inRbtDcgykhy93P2kCIlStZG2QhBZHwMvx5EKSoi311OodONw+KYvIZVBasZo7QAEFHRcvkJl1wjEpl0hA0GFYQAh0Okt5pIUqLrcKHbliBE2jrssxYjjfVhWppDrF8dZH1ziJbmEM2N6bphFpmkvv20az0ERBIa+YpAL45Bd3pzvZ4sBGYw6acVEPFm/hy4Z5cZxmiqycbc2LZH11ZjrcYfS71OSFMzyJMmb/y2JmzowhAXGjZ03YYupkYkNnzIRcKcstbJwOaxY+ZApvh8ywEpUrJIOBQg4BtBdebhLmskv6AEpzUTHw7FEC25JFyEDuEhCF2EUD+ELrHROgE96Uzc041+mW6kTaajZtJ/TgDhiEI4rBAMQkRXsKoClzXq/xmZf1lSO4hmcM5pRxnN7ZzN9hC2sfMZnXPacisKQoe+i1YueG10eW1c6LbR2W2js8dGIKgmnMMNbF1FwkNUCCPAnaciQkNdmIaaCA21YRrqjK4Zhz2+YY1+TgPGk036yW/7kTR9+vH7kWka+ThTfkrhMb+3/RaAhRvQkNNMfdu3pmik7SQ2zlZjO6WVID6vNU0jb4+7xmSesZBGgbMw+nZvn1omLIvq32fG1zNj7MVvCz1ZfCQKD5vdFB6m6Ig7booPJSlWU7LfmbkfNbylPR7bn/INZsif7nqyuyenCWlhghOjqLqgqLyW/JJKHPa8eZ51jsIFTOk9+euP39YDUeExYCzBgeh+XFroIoQukTysIVc9UhTAHl0uj9i98yPb4f+KgfWFwProkg3CwIUsnWsFYDTC1imNe3JjndhIJwuBJOEQEwT29HniP5/QyKfKY4+KiDm+omfa4GW6D4wGRsmzuCePJ0R80EkYPTWP6+kiITo+uq4YUfo1YWRTFBAiNoLeFBQWBezGtG5YrWLymCk84oRI4rWjS/zArZnEVqrjyjQvTDPlh8S6VlKcL9Y7sHBPXilS5kFICxMI+7EGwxS73OSXebAXFjP9G/J8SCFchAYhHwRGwN8LgX4I9IG/D4L9kyIkHBUium+ByiaR5A4Cy2TjqqZryNOY4tP4BBBnQegdnaCqqHwaS4KRP6Gxx5r6uubb/kxvuVlo1Kc9PuNI5nB0mSOzbWQz2B+cGMeTH53vK/n06jQNLiAUdXJmAR10VY2zfCiTykEIFAuoDhU12i5bLWC1KXFdLqBalATLSCye2zy+35Luz6YdiyzcqE8pUqKUn/8b3MOFoFiiDx1L9M3GEn17mEyPCAVNgA0LpcKGLc+NBTf0OqHfGs1vjTod2UC1gK4ZVgwtaPRxawFjrQejaXHr+ONaIEVaXH6Rxdl9AbCArRRsZWArj66N7TPDQVaXmhMAJryypD/dlAfldJ8TaQ/pQhCOQDikEI4Yp7VYBRaVpL766R7MsyiLWe5YjJrpzjNJYmTVOX73ZJLOOeD3Ue7MZ2TMwqVhC5eGLFwcsjI4YmFw2Eo42r2lKJOfS/ZnUBSBogiKCjXKSyKUFUUoLdYoK4lQ4o5gjUXZne/9VNIcs04VAPFv7sR1ERAvJKyTAiA+T0KjP4+3/XQkPcC9wX6K8yrTHs94P3ZbxNTj0zVwya/eyfvJ33/KcSXxnBmNMJ7mO83lLX3abtEMzqkoMDoIlZUJx2PdLEKZ2uUipp4u3rJhs0b9PawkGKCTjdKL14EkUYRYAbNQTcPo6ChFRUWM/ADc8+2hyWWsheCsBGeVsXbEbcfSysFaEjUz6nH/bkDXEOFw9hyMMyQUigZdmzCGEVtUgSPVBH+LTbq/TZb/TroO57tttJ520H7GTmuH6cDqwB/IrCFW1agD65ogLWuCrFsdoqU5SHNjaEGHDs6K2TayU/LPcP4sv2UaMRZn0UjP+61WEnsc6ZPdL5pmxLyJxbxkUn9NcTS1GlEelBSiwxQpkjkSGYOCpgU5tbSkXA4oVmM8usWZuFYdk9vWvCThkSRIrPNXYIePneKaTWuz8IWmRxfGBH8TE+CPGJ4x9mIosC/fZ7euw/kLKq3tVtrbLbS2WWhtt3L6tAV/ILMvraqCpkaN9es0WtZprF8fYf1ajeY1Gs4Ea2zUgydlpONkR7hU1pFUznLJ+eOtYqkCxU2mTe+UnC1mYbmCGX9op89fYO2qhgyvneJcsyxOdt/ds3SuLPwZJy0d01s9zMslWD1scKb3LFesbYoKk6ndLRlbPUwfkMmrzfu7xQqdNbJxrgX6XivJcfapp57ia1/7Gr29vWzevJknn3ySHTt2pMx7/PhxHn74YQ4dOsT58+f5u7/7O+699945Xbd73Q8JVzdgDEnUQI8QiEyga0HsqkKBxYEzHMEiNMh3gtMG6NGIg1osZLARQjgymS6iYYVVqyEqVIcRBCrVekpaVIiouVFNoVC2u5YSCUcMcTI+blhQFAUcDlKHLc8V0s2vlOaYpsGFTkOAtEWX1lM2Tp+2zsoy0tQYpmVtmPVrQ7SsC7N+bZjm1WGc6Yb2mgNZ4l85ow+spI6g6CoxT8pjCdYONTEt1bFYnujEZ/GkapXmxJTWZh6kd9IIawIsGToLZjRvyiKeJ6v3KPV5kke4xK+Tu1wM8aFPGVprsUStHim6XUxD2pnOMIUFyXONpe82zsZ3m/0psnSvc7LTI1omdeFM2zn1+P/JT37C/fffz9NPP83OnTt54okneN/73kdbWxuVlZVT8k9MTLB69WpuueUW7rvvvnldW6gu448kVAJCJYINp7OYEnsBLmxYAkHId0BREbiWc79QeoqLCmfONEt0XRAMgt8PExOCSATsdkF+Xtzbtg6ZvalnYhmYZP5xJyYbWpGUpmlwvstGW7uxtJ6y0XbKxqlTNgLB2VlGWtbrtKzTWLdOo2Wdjt11jrVrGqO5og6ZuBAo0WY1VTdECtEx3bHZiJUVSIG7CmEvX+piLCrJgiO2mCNc4ohZPSzG2qKCw+xysaQWHeaw29lQXD4OrpqpBc0aCyvm5naqbAnVbGF0uS0UOeWTsnPnTrZv3853vvMdAHRdp76+nr/8y7/koYcemvazjY2N3HvvvbO2pJg+Ke8c+DWFxYXoug+XAoVWJy5bHmpEgYiAwkJwu8GSU7pucYhainw+H/l5jqTft+lgmribkMbUY+GIMXJ63KfErCZ2u2k1mW0DaW6neItXkt7i4yfYi/k1mBaF2TfSmgbnL0Bbq0pbu0Jbm7E+dQoCGXfTQFMTtLTA+vWTS3OzYUlKxu/34XKthMHWuctyqoMpomMaR9OY46iS6OthtU4nPBZOz/p8PvLzl0c9SFKTMy1uKBTi0KFDfPazn42lqarKjTfeyP79+7N2nWAwSDAYjO2Pjo4Chie401lMoa0Op2pB1UIwfhEUDYryDSvKSnlxFCLaTRUippJVO8dO97Nz60ZiDX2C82JSY55CRAihEAyBz2c4wmoRYxifMx9UNb7rYeZzLfbbvKbB+fPQ1ja5tLbC6dNGF1UmWCyGGDFFSEsLrFuXXoyk4+zZY1xxxc65fRFJVrgc6iCV8DDFh4kQUx1IbbY4R9MUVo/4vEvNsWPH2Lkzt+tBMj9yRqRcvHgRTdOoqqpKSK+qqqK1tTVr13nkkUf40pe+NCW9rz/ARPAiW9eVcuzMWfx+P4WFhTStXcfRkydBDLGqphhd0+jsHQbFwtWb1nL6bBfjPj/5eS7Wra7j7WOnAKirqcRiUTnfaUwjftUVazjX2cvomA+n08HG9Y0cOtIGQI2nHKfDzpnzXgA2tTTR1XOR4ZEx7HYbV29s5o23TwLgqSyjIN/F6bNdAGxY10jfwCCDQ6NYrVa2XrWON94+iRCCivISSooKaO/oBGB9cwODQ6MMXBpGVVW2X93Cm0fa0DSNsuJCKkvzONnRDcDaphpGfRH6Lo6AorJz539jZPwYBw6foqSkhJqaGo4fPw7AmjVrmJiYoKenB4Bt27Zx7NgxAoEARUVF1NY2cPToO0QiUFLSiKZFGB3tQlFg3botnLvQSiAwQV5eATU1azh9+ki07g3HxL4+IypYc/NmvN4OJibGcTrzaGhoob39LQAqKuqwWq309JyLlulK+vouMD4+gsPhpKlpE62tbwJQXl6Nw5FHd3cHAE1NG7l0ycvo6BCqasNu38J//Vc7Z8+66Okp4exZJ6dPq4RCmT2VLRZBbW2ADRssrFrlw+O5SFNTgN///Ss5f/4QkUgEt7uU0tIqzp07SUcH1NU14/ePc+mS8XvZsGEHp08fJhwOUVhYTHl5HWfPHgMgHA7S39/JxYvG72X9+q2cO3ecYDBAfr4bj6eRjo6jxu/Fswpd1+jvN34va9deQ1dXe9QSUEBdXTOnTh2O3u96FEWlt/d89B5eRW/vWXy+MZxOFw0NG+Ludy1Wq52enrMArF59Jf39nYyPD2O3O1i9+ipaWw8CUFbmwenMj93vxsYrGBzsZXR0EKvVxrp1Wzh58gBCQElJJQUFRXR2Gv+jhoYWRkcvMjx8EVVVaWnZTmvrQXRdp7i4HLe7nAsXjOdDff1axsdHGBrqR1Fgw4adtLe/RSQSjt5vD+fOnQCgtnYNgYAvdr9bWrZz5sxRQqEgBQXFVFbWc+bMOwBUVzcRiYQYGDD+G+vWbWFiYpQTJw6Qn1+Ix9OUcL+F0Onr64ze76vp6jqN3z+Oy5VPXd06Tp16G4DKyjpU1ZJ0v8/h843icDhpbNxIW9uh6G+2Brvdidd7JvpdN3HxYhc+3zAWi526uqs5e/YNAIqKPDgcBQwMnAagrm4Do6N9+HyDWK1WNm3ayrFjbyCEoLy8gpKSEjo62lEUWL9+PUNDgwwMDBjPiO3befPNN41nRFkZlZWVnDx5Mvrd1jI6OkpfnzFvy86dO3nrrbcIh8OzfkY0NDTwzjvvRH8fjUQiEbq6jN/sli1baG1tZWJigoKCAtasWcORI8YzIhAI0NPTw4ULxjNi8+bNdHR0MD4+Tl5eHi0tLbz11lvR+2A8I86dOwfAlVdeyYULFxgZGcHpdLJp0ybefPPNaJ1Xk5eXR0eH8ZvduHEjXq+XoaEhbDYbW7Zs4cCBA9H/TRVut5tTp05F/7sb6O/v59KlS1gsFrZt28bBg8ZvtqKigtLSUtra2qK/pXUMDQ0xMDCAoijs2LGDQ4eMZ0RpaSlVVVWx+93c3Mz4+Di9vcZvdseOHRw+fJhQKERxcTF1dXUcO3Ys+n9cTSAQwOs1nhFbt27l+PHjBAIB3G43jY2NHD1q/GZXrVqFpmmx+33NNdfQ3t6Oz+ejoKCA5uZmDh8+HP3d1aOqKufPG7/Zq666irNnz3LFFVewUORMd4/X66W2tpbf/va3XHvttbH0Bx54gFdeeSX2g0hHpt09qSwp9fX1jBw/jruiwhhSIgQUFxvdO/GvC1o0rknEZ8QsEWLSITbbcRkWGhF1+tXDoIioh5rDGAWkRkNQJzlDDQwMUFFRkdnpBTFfk/FxYyZiqxWcztx4A9M0OHcO2tsNi4hpHZmrZSS+q2bNmtlZRmbL8PAAxcWZ1YNkYch2HUzX3ZKuy0VVjd9gvNUjVWyPXLF6LASzeSZJLk9yxpJSXl6OxWKJqXKTvr4+PB5P1q7jcDhwpGpBNA3GxsDlMgSKyzU1j8VuLNaCaCC2EITHQZsABGZo6ZwULEJERx2FDIGiKKDawO6OG0lkm/YUgQxab00zGvmxscnG3m5PfTsXA1OMxHfTXC5iJB2hUIYFlywYmdRBsq9H8hDbeJLFhc02KUCmdzRdoC94mZDJM0lyeZMzIsVut7N161b27NnDzTffDBiOs3v27OHuu+9e+AIIYYzcKSqaecyrohgNu8UxKVi0QNTCEi9YHEv7FBFaVExFx5+qVrC4wOqaFCWzEFRer5f6+qnT0wthDBmOt5qoqiFMFivoWioxYvqMxBnOpsVigdWrDT+RXBAj6bh40Utl5dR6kCwOQhh1UFJSn7GjqbmYzuHTOZouV6vHQpDumSRZPuSMSAG4//77ueOOO9i2bRs7duzgiSeewOfz8clPfhKA22+/ndraWh555BHAcLY9ceJEbLu7u5vDhw/H+tFmRUUFlJbOXlTECxabO9odFADNB9o4RKcKN6wU00SozAYJDq86Rmh/G9gLo9YSW1ZjrphWE59vspfMbjcGQi0U8WKktXWyu2YuYiR+JE1Li5GWS2JEsrhk4mgKxl9X04x5PjNxNJVWD4lk7uSMT4rJd77znVgwt6uvvppvf/vbMe/td7/73TQ2NvKjH/0IgHPnztHUNDUU7w033MDevXszul4sLP7ICG53FueXFbohFiIBQ6yY1ozJDCk+kyIhkyebGTDI7MKxuIxItKY4ytLTMRKJYLVaCYUMUWIGXbNYDF+TbFpNksVIfDfNXMSIOZJmOYgRTYtgWYlD4edAJsNrzfh26UKpJ1s9jLkAI9hsVik+lhjzmSRZvuScSFlsFkykxGM6qSYmpsiXqioyiJ9tfi5+QsMso2lw+PARGho2MzFh7DschuVkPg9pU4zEC5G5iJE1ayZFiLles8Yo33Kjo+MIa9ZsXupiLCnprB6wOI6mR44cYfPmlV0HuYCsh+WPlKCLgaIa3S2XEUIYviWmr0kgACMjAXw+w2oy25eXbIgRqzW9z8hyFCPpCAaXp7NgKqtHfJTTeNL5ekzX3ZJNq4d02MwNZD0sf6RIkcSIRAxRYnbnhEJGA2GxGP3uRUVuCgpmPsf584YYMX1G5ipGUvmMrCQxko78/AWy+GWB+GGzmS4myVYPU3TkoqPpglldJbNC1sPyR4qUFYyuT7WWaJpxzGabOjrH42mMbUciU31G2tvnLkaSfUakGElPfD3Ml7kIiuk6iGNzDypTl2RhcTk7mjY2Ni51ESTIelgJSJGywjBFiRloLRw2Gh3TWpKXNHdiIGCIkdOn4bXXLjI4WE97O5w6ZZwnE6zW1D4jUozMHiGgo+Mo69fvXHRRkWo+ltkuy4WjR4/KcOw5gKyH5Y8UKcscTZsUJhMThjjRo7HcTFEiBHR1QUdH4nLmDHR2xjdy08cjSBYjZlfNShYjC2GpMId+S1EhkUiWO1KkLDPiHV4DAWMxrSUjI3DhgmEZMUXI6dNw9mzmVhGYFCPJPiNNTZe/GDEFQnJY8lyyVFitq6iqkqJiKVm1atVSF0GCrIeVgBQplynJIyE0zRAa/f2Gb8iZM4YYOX/eECEdHRCd8Dlj3G5jht41awxriMdzie3by3JOjJj3wtyOHxGSLDri88DUhv1y6P5QFA3b9DMYSBYYzXTekiwpsh6WP1Kk5CiaZgRLGxyE4eHJ9dCQsQwOGqJjZMRY9/cbYqS/f3bXcTgMC4gpRNasmVzKyxMb0hMnTrN+fdm8v1smForkmBfmPpjBtIzt+JEdppDINVGRbbq6uqitrV3qYqxoZB3kBrIelj9SpExDvLVC0yaX2e6bgmN42BAVptAYGjLSzHRzPTJiTNAXTo7/NkcUBerrE0WIaSGprZ0+Umxy10YkMrcuEDOqp1kec528JI/2iA+4dbmKColEIpHMDRlxNhpxNj9/BF13J4iS+Lf3y4GyskmLyOrVhoVk9WpoaDAsJqliU8xU+/ENvaaFsNnsGXWDmOLCPEe8yID0okMyM6FQCHsu9betQGQd5AayHpY/0pISxedb6hIYDXdhoeELYq7N7eT0oqLEPMXFRlpyg59OSJjXSxYL8Z9JXk6caGfjxk0JokOy+LS3t7Np06alLsaKRtZBbiDrYfkjRUoUc9K5eEvATCG2ky0H8Z9JniOkoMAQESUlkyKjuDhRYBQUTAqIeAGQ3E0yXVoqy0S2xEQg4Jt1OHxJ9vHlgqJe4cg6yA1kPSx/ZJMT5ec/N4RCqjlCki0RyaG6k4/H7y8nCmaKiS9ZFGQ9LD2yDnIDWQ/LH+mTEvVJOXNmhJISd8pRIJdLqO6FJhgM4nBcXhMlLkdkPSw9sg5yA1kPy59l9q4/d8rKJrtfCgqMSKxOp9EFZLMlOoKuVA4fPrzURZAg6yEXkHWQG8h6WP5IkSKRSCQSiSQnkSJFkjH19dPP3SNZHGQ9LD2yDnIDWQ/LHylSJBmjLjdP4MsUWQ9Lj6yD3EDWw/JH1rAkY86fP7/URZAg6yEXkHWQG8h6WP5IkSKRSCQSiSQnkUOQo0OQR0ZGcLvdS12cnMbv9+NyuZa6GCseWQ9Lj6yD3EDWw/JHWlIkGXP27NmlLoIEWQ+5gKyD3EDWw/JHihRJxoyNjS11ESTIesgFZB3kBrIelj9SpEgyRppVcwNZD0uPrIPcQNbD8kf6pEiflIwJh8PYbLalLsaKR9bD0iPrIDeQ9bD8kZYUSca89dZbS10ECbIecgFZB7mBrIflz4qfBdk0JI2Oji5xSXIfn88n71MOIOth6ZF1kBvIesgdCgsLURZggrsVL1JMxysZXlkikUgkkrnR399PRUVF1s+74n1SdF3H6/UumApcLoyOjlJfX09nZ6f03VlCZD0sPbIOcgNZD7mBWQ/Dw8MUFRVl/fwr3pKiqip1dXVLXYzLBrfbLR8IOYCsh6VH1kFuIOshN1iol3zpOCuRSCQSiSQnkSJFIpFIJBJJTiJFiiQjHA4HX/ziF3E4HEtdlBWNrIelR9ZBbiDrITdY6HpY8Y6zEolEIpFIchNpSZFIJBKJRJKTSJEikUgkEokkJ5EiRSKRSCQSSU4iRYpEIpFIJJKcRIoUSYxHHnmE7du3U1hYSGVlJTfffDNtbW0JeQKBAHfddRdlZWUUFBTw4Q9/mL6+viUq8crg0UcfRVEU7r333liarIfFobu7m9tuu42ysjJcLhdXXnklb775Zuy4EIKHH36Y6upqXC4XN954I6dOnVrCEi8/NE3jC1/4Ak1NTbhcLtasWcOXv/xl4sd8yHrIPq+++ip/+Id/SE1NDYqi8O///u8JxzO554ODg9x666243W6Ki4v5sz/7M8bHx2dVDilSJDFeeeUV7rrrLn73u9/x4osvEg6Hee9734vP54vlue+++/jlL3/Js88+yyuvvILX6+VDH/rQEpZ6eXPw4EG+973vcdVVVyWky3pYeIaGhrjuuuuw2Wy88MILnDhxgm984xuUlJTE8jz++ON8+9vf5umnn+bAgQPk5+fzvve9j0AgsIQlX1489thjfPe73+U73/kOJ0+e5LHHHuPxxx/nySefjOWR9ZB9fD4fmzdv5qmnnkp5PJN7fuutt3L8+HFefPFFnn/+eV599VU+9alPza4gQiJJQ39/vwDEK6+8IoQQYnh4WNhsNvHss8/G8pw8eVIAYv/+/UtVzGXL2NiYWLt2rXjxxRfFDTfcIO655x4hhKyHxeLBBx8Uu3fvTntc13Xh8XjE1772tVja8PCwcDgc4l/+5V8Wo4grgptuukn86Z/+aULahz70IXHrrbcKIWQ9LAaAeO6552L7mdzzEydOCEAcPHgwlueFF14QiqKI7u7ujK8tLSmStIyMjABQWloKwKFDhwiHw9x4442xPC0tLTQ0NLB///4lKeNy5q677uKmm25KuN8g62Gx+MUvfsG2bdu45ZZbqKys5JprruEHP/hB7PjZs2fp7e1NqIeioiJ27twp6yGL7Nq1iz179tDe3g7AkSNHeO211/jABz4AyHpYCjK55/v376e4uJht27bF8tx4442oqsqBAwcyvtaKn2BQkhpd17n33nu57rrr2LRpEwC9vb3Y7XaKi4sT8lZVVdHb27sEpVy+/Ou//itvvfUWBw8enHJM1sPicObMGb773e9y//3387nPfY6DBw/ymc98Brvdzh133BG711VVVQmfk/WQXR566CFGR0dpaWnBYrGgaRpf/epXufXWWwFkPSwBmdzz3t5eKisrE45brVZKS0tnVS9SpEhSctddd3Hs2DFee+21pS7KiqOzs5N77rmHF198EafTudTFWbHous62bdv427/9WwCuueYajh07xtNPP80dd9yxxKVbOfz0pz/lmWee4cc//jEbN27k8OHD3HvvvdTU1Mh6WAHI7h7JFO6++26ef/55Xn75Zerq6mLpHo+HUCjE8PBwQv6+vj48Hs8il3L5cujQIfr7+9myZQtWqxWr1corr7zCt7/9baxWK1VVVbIeFoHq6mquuOKKhLQNGzZw4cIFgNi9Th5VJeshu/zVX/0VDz30EH/8x3/MlVdeySc+8Qnuu+8+HnnkEUDWw1KQyT33eDz09/cnHI9EIgwODs6qXqRIkcQQQnD33Xfz3HPP8dJLL9HU1JRwfOvWrdhsNvbs2RNLa2tr48KFC1x77bWLXdxly3ve8x7eeecdDh8+HFu2bdvGrbfeGtuW9bDwXHfddVOG4Le3t7Nq1SoAmpqa8Hg8CfUwOjrKgQMHZD1kkYmJCVQ1samyWCzoug7IelgKMrnn1157LcPDwxw6dCiW56WXXkLXdXbu3Jn5xebt9itZNvzFX/yFKCoqEnv37hU9PT2xZWJiIpbnz//8z0VDQ4N46aWXxJtvvimuvfZace211y5hqVcG8aN7hJD1sBi88cYbwmq1iq9+9avi1KlT4plnnhF5eXnin//5n2N5Hn30UVFcXCz+4z/+Qxw9elT80R/9kWhqahJ+v38JS768uOOOO0Rtba14/vnnxdmzZ8XPf/5zUV5eLh544IFYHlkP2WdsbEy8/fbb4u233xaA+OY3vynefvttcf78eSFEZvf8/e9/v7jmmmvEgQMHxGuvvSbWrl0rPv7xj8+qHFKkSGIAKZd/+Id/iOXx+/3i05/+tCgpKRF5eXnigx/8oOjp6Vm6Qq8QkkWKrIfF4Ze//KXYtGmTcDgcoqWlRXz/+99POK7ruvjCF74gqqqqhMPhEO95z3tEW1vbEpV2eTI6Oiruuece0dDQIJxOp1i9erX4/Oc/L4LBYCyPrIfs8/LLL6dsD+644w4hRGb3/NKlS+LjH/+4KCgoEG63W3zyk58UY2NjsyqHIkRc2D6JRCKRSCSSHEH6pEgkEolEIslJpEiRSCQSiUSSk0iRIpFIJBKJJCeRIkUikUgkEklOIkWKRCKRSCSSnESKFIlEIpFIJDmJFCkSiUQikUhyEilSJBKJRCKR5CRSpEgkkgVn7969KIrC3r17c/qcEokkt5AiRSKRzMhPf/pTFEXhueeem3Js8+bNKIrCyy+/POVYQ0MDu3btWowiSiSSZYgUKRKJZEZ2794NwGuvvZaQPjo6yrFjx7Barbz++usJxzo7O+ns7GT37t1cf/31+P1+rr/++kUrs0QiufyxLnUBJBJJ7lNTU0NTU9MUkbJ//36EENxyyy1Tjpn7u3fvRlVVnE7nopVXIpEsD6QlRSKRZMTu3bt5++238fv9sbTXX3+djRs38oEPfIDf/e536LqecExRFK677rqU/iPvfve72bRpEydOnOD3fu/3yMvLo7a2lscff3zKtbu6urj55pvJz8+nsrKS++67j2AwmLKczz77LFu3bsXlclFeXs5tt91Gd3d37PgvfvELFEXh6NGjsbSf/exnKIrChz70oYRzbdiwgY997GOzvlcSiSQ7SJEikUgyYvfu3YTDYQ4cOBBLe/3119m1axe7du1iZGSEY8eOJRxraWmhrKws7TmHhoZ4//vfz+bNm/nGN75BS0sLDz74IC+88EIsj9/v5z3veQ+/+c1vuPvuu/n85z/Pvn37eOCBB6ac70c/+hEf/ehHsVgsPPLII9x55538/Oc/Z/fu3QwPD8e+h6IovPrqq7HP7du3D1VVE6xBAwMDtLa2yi4qiWQpERKJRJIBx48fF4D48pe/LIQQIhwOi/z8fPGP//iPQgghqqqqxFNPPSWEEGJ0dFRYLBZx5513CiGEePnllwUgXn755dj5brjhBgGIf/qnf4qlBYNB4fF4xIc//OFY2hNPPCEA8dOf/jSW5vP5RHNzc8I5Q6GQqKysFJs2bRJ+vz+W9/nnnxeAePjhh2NpGzduFB/96Edj+1u2bBG33HKLAMTJkyeFEEL8/Oc/F4A4cuTIvO6bRCKZO9KSIpFIMmLDhg2UlZXFrA1HjhzB5/PFRu/s2rUr5jy7f/9+NE2LOdymo6CggNtuuy22b7fb2bFjB2fOnIml/ed//ifV1dV85CMfiaXl5eXxqU99KuFcb775Jv39/Xz6059O8H+56aabaGlp4Ve/+lUs7V3vehf79u0DYGxsjCNHjvCpT32K8vLyWPq+ffsoLi5m06ZNmd8kiUSSVaRIkUgkGaEoCrt27Yr5nrz++utUVlbS3NwMJIoUcz2TSKmrq0NRlIS0kpIShoaGYvvnz5+nubl5Sr7169cn7J8/fz5lOkBLS0vsOBgipaenh9OnT/Pb3/4WRVG49tprE8TLvn37uO6661BV+ZiUSJYK+e+TSCQZs3v3bkZGRnjnnXdi/igmu3bt4vz583R3d/Paa69RU1PD6tWrpz2fxWJJmS6EyGq5kzHF06uvvsq+ffvYsmUL+fn5MZEyPj7O22+/zbve9a4FLYdEIpkeKVIkEknGxMdLef3117nuuutix7Zu3YrD4WDv3r0cOHAg4dh8WLVqFR0dHVOES1tb25R8qdLNNPM4GEHmGhoa2LdvH/v27YuJkeuvv55z587x7LPPommadJqVSJYYKVIkEknGbNu2DafTyTPPPEN3d3eCJcXhcLBlyxaeeuopfD7fjF09mfIHf/AHeL1e/u3f/i2WNjExwfe///0pZausrOTpp59OGJ78wgsvcPLkSW666aaE/O9617t46aWXeOONN2Ii5eqrr6awsJBHH30Ul8vF1q1bs/IdJBLJ3JAiRSKRZIzdbmf79u3s378fh8MxpRHftWsX+/fvB2b2R8mUO++8k+bmZm6//XYeeughvvWtb3H99deTl5eXkM9ms/HYY49x9OhRbrjhBr71rW/xuc99jo985CM0NjZy3333JeR/17vexYULFwgGg7GyWiwWdu3aRXt7Ozt37sRut2flO0gkkrkhRYpEIpkVZoNudu/EY3bxFBYWsnnz5qxcLy8vjz179vDe976XJ598kq985Svs3r07ZdC3P/mTP+EnP/kJoVCIBx98kO9973t88IMf5LXXXqO4uDghr2k9SY7lYqZLfxSJZOlRxEJ7qEkkEolEIpHMAWlJkUgkEolEkpNIkSKRSCQSiSQnkSJFIpFIJBJJTiJFikQikUgkkpxEihSJRCKRSCQ5iRQpEolEIpFIchIpUiQSiUQikeQkUqRIJBKJRCLJSaRIkUgkEolEkpNIkSKRSCQSiSQnkSJFIpFIJBJJTiJFikQikUgkkpzk/wd6E0L9nKs6KQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "params = {}\n", + "params['window'] = None\n", + "params['dim'] = default_token_dim\n", + "params['num_heads'] = 1\n", + "params['state_dim'] = 1\n", + "\n", + "name = plot(all_accs, params, 'window', 'layers')\n", + "plt.title(\"Average Final Accuracy when Window Size\")\n", + "plt.xlabel(\"Window\")\n", + "plt.ylabel(\"Accuracy\")\n", + "savefig(task_name, name)" + ] + }, + { + "cell_type": "code", + "execution_count": 139, + "id": "9d75f567-d9e7-4156-81a3-89f4fe5f0da5", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAGOCAYAAAB7ZWxSAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAu11JREFUeJzsnXdgVFXaxp87vWXSe09ISEIJPaIoRVbWgg0VGyjWXVddBctaVrDi2pa1LZ8KVkRc167ruiJgoYP0JBAgJCG9l8nUe74/JvdmJjNJJpPJlHvPb3ckc+bce9/nljPvvOc95zCEEAIKhUKhUCgUESIJtAEUCoVCoVAogYI6QhQKhUKhUEQLdYQoFAqFQqGIFuoIUSgUCoVCES3UEaJQKBQKhSJaqCNEoVAoFApFtFBHiEKhUCgUimihjhCFQqFQKBTRQh0hCoVCoVAoooU6QiIkIyMDGRkZfj3m5s2bwTAMVqxY4dfjUvzPO++8A4Zh8M477wTaFEFRXl4OhmFw4403BtqUkEZobVFtbS1uuOEGpKamQiqVgmEYtLa2BtosnzNr1iwwDDMi+w64I3TTTTeBYRhER0fDZDIF2pyQhrtR+nutWrUq0CZ6RVdXF/R6PRiGwZ/+9KdAm0MRAG1tbdBoNIiMjITRaByw7ptvvgmGYXDbbbf5ybrQgWtzVCoVTp065bZOXl7eiH2BUYAbb7wR77//Ps455xw8+uijWL58OVQqVb/1OYf697//fb91OGfxD3/4w0iYHHTIAnnwjo4OfPzxx2AYBs3Nzfj888+xcOHCQJokCJYtWwadTudSfsYZZwAANm7c6G+ThsXHH3+Mjo4OMAyDDz/8EC+++OKADzqFMhjh4eFYsGABPvjgA/z73//Gdddd12/dtWvXAgBuvvlmf5nnluTkZBQXFyM8PDygdrjDZDLh0Ucfxfvvvx9oU0SF2WzG//73P8ydOxfr1q0LtDkhS0AdoQ0bNqCrqwtLly7FqlWrsGbNGuoI+YD77rsPCQkJ/X6enZ3tR2uGz5o1ayCTyXDnnXdi1apV+PTTT3HttdcG2ixKiHPzzTfjgw8+wNq1a/t1hIqLi7F9+3aMGTMGRUVFfrbQGblcjry8vIDa0B/Z2dn48MMPcf/992P8+PGBNkc01NbWgmVZJCUlBdqUkCagXWPcF9wDDzyA2bNnY+PGjU7hVYPBgLCwsAG/uMePHw+1Wo329na+jBCCtWvX4qyzzoJer4dGo8GUKVP4X3aOrFixAgzDYPPmzXjnnXcwadIkaDQazJo1C4A9hP63v/0NM2fORFJSEhQKBZKSkrB48WIcP37crU2NjY247bbbEBcXB41Gg6lTp+Kzzz4bMHfiwIEDuPrqq5GYmAiFQoH09HTcddddaGpq8vBseo67HCHH8/Dhhx9iwoQJUKvVSExMxJ///Gd0d3c71TebzXjllVcwb948pKamQqlUIi4uDpdffjl+++03n9laWlqKX3/9Fb///e9x7733gmEYrFmzpt/6ZrMZf//73zF16lSEhYVBp9OhoKAAS5cuRUtLi1Pd+vp6LFu2DKNHj4ZarUZUVBSKiorwwgsv8HUGyifoL2eDO7+tra248847kZqaCplMxl/3PXv24M4778TYsWMRHh4OtVqNcePG4dlnn4XFYnGrazBbjx07BolEggsuuMDt9h0dHdDpdIN+ke7fvx8Mw+DOO+90Kv/888/BMAyUSiUMBoOL3szMTLf7+/7773HmmWdCo9EgOjoaN9xwQ7/3tKfPgON5Lysrw2WXXYbIyEhotVrMnTsX+/fvH1Ajx8yZM5GdnY1NmzahvLzcbZ2+0aChXruB7oUZM2ZAJpOhpqbG7bEXL14MhmGwbds2F92OcN1TFosFK1asQEZGBpRKJXJzc/H666+73bc3bdRAPPXUU2BZFg8++KBH9R3bm764s8FRe3FxMS666CJEREQgMjIS11xzDRobGwEA27Ztw7nnngu9Xo/IyEjccsst6Orq6teOX375BbNmzUJYWBgiIiKwYMEClJWVua1bX1+Pe++9F6NGjYJSqURMTAwWLFiAQ4cOudQdrA0YiK6uLixfvhx5eXlQqVSIiorChRdeiF9//dWp3qxZs5Ceng4AePfdd/kUiJHOIevo6MDy5csxZswYqNVqREREYN68efjll19c6nrT1v3yyy+YOXMmtFotoqOjsXDhQlRWVrqtazQa8eKLL6KwsBDh4eHQarXIyMjAVVdd5XE7AAAgAeLw4cMEALngggsIIYS8++67BABZvny5U70bbriBACC//vqryz727dtHAJCFCxfyZSzLkmuuuYYAIDk5OeT2228nd911F8nLyyMAyLJly5z2sXz5ct4OtVpNrr76avLggw+Shx9+mBBCyLZt24hC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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "params = {}\n", + "params['window'] = default_window\n", + "params['dim'] = default_token_dim\n", + "params['num_heads'] = None\n", + "params['state_dim'] = 1\n", + "\n", + "name = plot(all_accs, params, 'num_heads', 'layers')\n", + "plt.title(\"Average Final Accuracy when Varying Number of Heads\")\n", + "plt.xlabel(\"Number of Heads\")\n", + "plt.ylabel(\"Accuracy\")\n", + "savefig(task_name, name)" + ] + }, + { + "cell_type": "code", + "execution_count": 140, + "id": "0ed6897c-5a02-4f9f-8b68-e11c4ee395c2", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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AQC9evVCv379sGnTJtTW1kImk+GHH35A165dMXjwYH4d7mANHDgQBw8ebJZd3h5Mr776KpRKJQ4dOoSsrCyXZd98843Ld27/ZWVlHrdVWlrqVsatc/z4cRdFHui88cYbsFgs+OOPP9yEyd69e1ud0OvLL7+Ew+HAxYsXvZ6bH3/8kW8FiIiIAAAUFhY2uu3m1OVees6tfBycKPGEN5sPHDiAjRs3YuzYsfjpp59cHhp79+7F+++/32JbASAjIwNjxozBjz/+iLKyMvz666+orq7GggULmvyrG2B/oX377bcoLCzE9u3bccMNN0AikeC6666DSqXCtm3beJu4FqKW4u97QCqVYvr06XjnnXewevVqzJkzB8uXLwdFUZg5cyZfr7nnjqOx4/5///d/2LFjB1auXInZs2djzZo1yMrKapPEfC15RjUXiqJw1113Yd68eVi4cCG2bt3aJOGzYcMGHD58GA899BAv/ji++eYbrFixoll2cElPKyoqmrVeS+GSMjq/k9oa7nx++OGHfI4hXxMdHY0PP/wQH3zwAfLy8rB161Z8+OGHeOWVVyCTyfDCCy80ap+366qkpMSlXlsQEJmbv/zySzAMg+HDh+Ohhx5y+8yYMQPAtVYhjmnTpsFsNmPdunX44YcfoNfr8cADD7jUCQ0NRffu3XH69OlmN4d548KFC+jevbub6CkuLsbFixddysLCwpCeno7z5897fLDs3r3brSw3NxcAXJoXg4ELFy4gKirKTfQYjUYcPny4VdsmhPDN0w8++KDH62To0KGwWq18y1/Xrl0RFhaGAwcOoLq6usHtc92aTWnS57rNPAkPrhm3OXBdOePGjXP7pfTHH3+0ylaO2bNnw2azYcWKFfj8888hkUhcXuBNgRMza9aswalTp/jWPYVCgaFDh2Lr1q18i1BrX9CBcA/MmjULAJuscN++fTh16hRGjRqFzMxMvk5zz11TufvuuxEbG4vPP/8c3333HWpra722orWWljyjWoqnJKrccfP0q507vp4SHno7vjRNe20ByM3NRWVlJc6dO9dkm1tKeXk5/v3vfwMA7rvvvjbfH0d73jsURaF79+54/PHH8euvvwJgf3w2RP/+/QHAY6buK1eu4MKFC8jMzHRp7fE1fhc+hBD+lxT3UK7/+fLLLzFkyBAcO3bMpdXm/vvvh0QiwVdffcX3GdcX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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "params = {}\n", + "params['window'] = default_window\n", + "params['dim'] = default_token_dim\n", + "params['num_heads'] = 1\n", + "params['state_dim'] = None\n", + "\n", + "name = plot(all_accs, params, 'state_dim', 'layers')\n", + "plt.title(\"Average Final Accuracy when Varying State Dimension\")\n", + "plt.xlabel(\"State Dimension\")\n", + "plt.ylabel(\"Accuracy\")\n", + "savefig(task_name, name)" + ] + }, + { + "cell_type": "code", + "execution_count": 141, + "id": "338c2549-3d14-46c5-a8c4-241112e8d64e", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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5/Cf//wHixcvxpEjR3D11VfjwoUL+PrrrzFu3Dj8+OOPDgF7sbGxWLVqFe644w7k5eXhuuuuQ+/evWE2m1FeXo4tW7bgyiuvxIYNG9plr7+YMWMGfvnlFwwdOhR33nkn5HI5Nm/ejIsXL2L48OGd6kPDCJapU6e6XadXr1648sorsW3bNuzcuRODBw/G/PnzsWPHDqxYsQI7duzA9ddfD5lMhtOnT2PDhg34888/2V8eX375JYYPH46HHnoIK1aswJAhQ2AymXD06FHs37+fffhIpVLMmDEDr7/+OgoKCtgh3x9//BHXXHON20KO7iguLkZxcTG+/vprXLp0CVdccQXOnTuHH374AWPHjnU5ddReW93xyiuvYN++fXj//ffx008/YdiwYYiLi8PFixdx+PBhHDx4ENu3b0dcXBwOHDiA2267DcXFxejTpw8SEhJw8eJFrFu3DkKhEDNnzmyXn7feeivmzZuHHTt24Morr3R4r7a2Fk8//TT7t9VqRW1trUMxxHfeeadLYsxWrVqFESNG4K677sKiRYtQUFAAhUKBc+fOYfv27aipqWFjhcaNG4f09HS89dZbOHLkCPr164fjx49j/fr1uPXWW53OVXh4ON5//31MmTIFRUVFuOuuuxAeHo7169ezxc1aw4g/b4KNP//8c1ZMHD58mF3G3HNDhw7Fgw8+2OY+vDnPTPG+F154AUePHkV4eDgiIiIwffp0r48RAIwcORJff/01brnlFgwcOBAikQg33XQTBgwYgOuuuw5///vfsWDBAmRnZ+O6665DWloaLl++jFOnTmHr1q149dVXkZub26Z/2dnZeOmllzBv3jwMGDAAd955J8RiMf7zn/9gwIABARlV9JVv7njiiSdQUVHBfjcKBAL8+eef2LVrF6644gqnUfbWPPvss/jpp5+wYsUKlJSUYNSoUaiursaaNWtgs9nw2WefISwsrEO2tWTjxo0Qi8W48cYbvd/Y6/wqP8EU1/OUttjY2EgUCgUJDw93SOleuXIlm9r8r3/9q819rFmzhowePZpERkYSiURCkpOTyfDhw8m7775Lampq2PU8pTlSFEUWL15M+vbtS+RyOUlISCAPPPAAqa6uZlOvW1NdXU0eeOABEhMTQ+RyOSksLCRr164l77zzDgFAvvvuO6dtSktLyQMPPEDS0tKIVColkZGRpH///uSJ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d999B7GYvvy5OC119OhR5OXlBdoMv8I1n7nmLxBaPjOjLK1fNrsNNop+nT5+Gqk5qaAIBUIICBzjB2sNtShvKMeZhjMobyjH6frTKKsvw9mGs9j70F70j+8fIO+6Hr6In4cifjt37oRGo0FGRka3T49OSUnBtddei6VLlzq9xxSyO3XqFHJycrB8+XJMnjzZ5ToMAoEA99xzD1atWoVz584hOTkZAB2EHR8fj3HjxmHlypU4c+YM0tPTPdp37733YufOnSgtLXVKu2752e3xA6BHbuRyOfbu3Yv3338fEydOZNe7/vrrERMTg5UrV+KTTz5xEmcMJpMJZ86cCYnz35KdO3dyrj4G13zmmr9A9/CZEMIKlZZTRRShWNFio2wOy1t/TQsFQggFQpQdLkNi70RWwDDi5VTdKZTVlUFv1bu149s7v8X43PFd7W7A4EduPKBWqwNtgs+or693W4yOEQT19fUAXBetc1XFNz8/H3v37sWaNWswa9YsAMB///tfEEIwduxYrFy50iv73NWTafnZ7fGDQSwW4/bbb8eqVatYcVNTU4Nff/0VP/zwA1auXMmpaswMroR8qMM1n7nmLxBYn1uKltYvO2VnRUtrQdMSgUDAChehQAixUAyhQAir3YqzjWdRVlfWLF7qy3Cy5iQub7rslZ1ysRwZERm+dD0o4cWNB5KTk3Hp0qVAm+ETCgsLsXjxYmRkZODGG29EQkKC0zq9evWCWq3G7Nmz8frrr2P48OEeBd7EiROxatUqVtysWrUKt956q9cjHYWFhViwYAH+/ve/45577kHv3r077Edr+/72t7+hvr4ekZGR+Oabb5CSkoIhQ4YAADs9xSXaM5IWanDNZ675C3Sdz+5ECzPaYrVbHUZbWk8RCQQCCCBwEi1CgZAtN0ERChXaCnbUpayefp2uO41zTeechFBbCAVC9AjvgazILGRFZdH/RmYhOyob0Uq6GG1SWJJvD1KQwb2nupccP37c9a+BQYOAykr/G9SShARgz552r/7xxx/j1ltvxbRp0wAAGRkZGDduHGbOnMk+FDQaDT766CNMnz4d48aNg0gkQl5eHm677TY89dRTLtsyTJw4EfPmzUNZWRni4+Oxfv16rFu3DgaDwSt3nnnmGezYsQOvvvoqXn31VURFReG6667DI488gquvvtorP1py9dVXIy4uDmvXrsUDDzzgMIoDcDPm5tChQ0E/fO9ruOYz1/wFvPfZ1WgLM7LS3ikiZrRFJBC5FC2tuWy4zAoXRsScrjuN0w2nYbJ5V7cmShqFXnG9WAGTHZWNrMgspEWkQSqSutzGYrd4JZS6K7y46SiVlcDFi4G2wiv69euHo0eP4tdff8Uvv/yCLVu24P3338cXX3yBP/74A/n5+QDogOJx48Zh/fr1+P3337Fp0ya8+OKLWLlyJfbs2eMkcHJyclBYWIhVq1YhPT0dYWFhGDVqFH788Uev7AsLC8Mvv/yCXbt24aeffsKff/6Jb775BqtWrcKnn36KBx980Cs/GAQCASZMmIBVq1bh2muvxV9//YWPP/64w8eRh4cn+GGmg9o7RcSMtjAjLi2nh1qPtnhCb9HjTMMZJwFTVl+GelO9V36opWp2BCY7MpsVMpmRmTh/7Dz6DOzTrv3YKBssdgtslC3k08ABXtx4JCkpyXXGj4epEL/QARukUiluuOEG3HDDDQCAn3/+GWPHjsX8+fOxdu1aAHQ7ArVajUmTJmHSpEkghGDevHlYsGABlixZgieeeMJpvxMnTsTSpUuRlpaGO++8s1N9mIqLi1FcXAwAOHPmDK655ho899xzrLhprx+t7Vu0aBH+8Y9/oG/fvujfvz/b5V0ikXTY1u5KWlpaoE3wO1zzOVT9bWuKKDoxmk1zZoRMR6aI2oONsuFc47lmAdNiKqlC611xPYlQgozIDHb6KDMqk/1/nCrOrV0JKe6/AwghsNgtsFJWEEIgEoogE8kQKY+ETCxrl0jrzvDixgMU5Wb4zovpoGBmzJgxyMvLQ0lJCbvM1bDrM888gwULFjis15IJEybgmWeeQWlpKbZu3eoz+zIyMnDHHXfgvffeQ1VVFeLj49vtR0sKCwuRmZmJf/7zn1iwYIHDe1xMGLTb7YE2we9wzefu5m9bAbk2ygYrZfU4RaQz6yC1SZuFi1gMkUDU4TYqhBBU6atcCpjyhnKva8WkaFLYUZeWsTCp4akQC73/Om79/WSn7OzoDABIRBKEScMgF8shFUkhEXHnhxwvbjxQWVkZMlkHrsSB0WjE+fPn2WKFWq0WJpMJsbGxDuudOHECANwG76akpOCpp55CTU0NrrzySp/Zx3y2TCZDREREu/1wxZw5c/DDDz/gnnvucVhus4V2MStXXLhwgU3d5wpc8zmY/G09LdTeKSIGZrRFJBS1OUV0vvo8UpJTvLavydzULFxaCBhP6dSuiFJEuRQwGZEZUEp824C5uqIa4THhsNgtsBM7hAIhpCIpNDINZGIZJEIJRMKOj6J3Z3hxwyH69++PcePGYcyYMUhMTMTFixfx4Ycfora2Fk8++SQAOoD6xhtvxNSpUzF06FCo1WocO3YMb7zxBsLDwzFlyhS3+3/vvfc6Zd+0adNgs9kwfvx45OTkoKmpCd9++y3Wr1+Pp556ii2m2B4/XHH//ffj/vvv75SNPDw8zbQu69+emi0URbEjKb6aImoPZpsZ5Q3lLgVMjaHGq30pxApkRmY6CJjsqGxkRmYiShHlU7tb03K6iRnRUkgUUEqU9OiMUBKyDX+9IejEzUcffYS3334blZWVyMvLwwcffMDGX7iioaEBc+fOxdq1a1FXV4e0tDQsWrSIjcXoLLm5ubjYzQKH3fHyyy/jxx9/xKxZs1BTU4OYmBgMGDAAmzZtwogRIwAA2dnZePjhh7Fx40Z8/vnn0Gq1SE5OxsiRIzF37twuncd//PHH8e9//xuvv/46Ll26BKVSiaysLCxZsgT33XefV354g1TqOqsglBk4cGCgTfA7XPO5q/y12C3QW/Qw28ywEZvbKSJ3NVu6MtYjq28Wzjeedylgzjed73A6NZOFxAiZxLBEv8astJxuEkAAiUgCjUyDwoJCqBSqDk1phTpBVaF4zZo1mDx5MhYvXozBgwdj0aJF+Oabb3D8+HGHkvoMFosFV111FeLi4vDCCy8gOTkZZ8+eRURERLtLcHuqUHzo0CFIJJKQq1DbFkajEQqFItBm+I22/A3VCsVHjhxBv379Am2GX+Gaz77212wzQ2+l+xZRhGLFCjNV5K8ve0II6ox1rHBh6sKcrj+N03WnYabMXu0vThXXLF5aCJi20qm7GkIIrJSVTtumKDYYWCmlR2ekIjquiGvXtDcEldx77733MG3aNEydOhUAsHjxYvz0009YunQp5syZ47T+0qVLUVdXh23btrEZL74u4mQ0GjmXTdPdAhE7C9f8BQC93rs4glCAaz77yl+zzQydRQedRQeKUJCL5X4JTNVb9Gw7gZap1GX1ZWgwNXi1L7VU7VLAZEZmIkwW1jUOeAlFKHq6yW4FAIiFYqgkKigkCrfTTVy7pr0haMSNxWLB3r178fzzz7PLhEIhRo8eje3bt7vc5ocffsCQIUPw+OOP4/vvv0dsbCzuvvtuPPfcc25Tkc1mM8zmZmXf1NTUpl1KpW8DwLoDnUnjdgdFUe4zz/73mYGaJ+4Kf4OdUGor0l645nNn/TXZTHSHaYsWIIBcIvf59IfVbsW5pnPsyEtn06lTlCnondDbIZ06OyobscrYoIxDYWrP2Ck7O93EpGpLRVKPwcBcu6a9IWjETW1tLex2u1MWTHx8PEpLS11uc/r0afz222+455578N///henTp3CY489BqvVinnz5rncZuHChXjllVecljPF6QoKClBSUgKj0YiwsDAkJCTg4sWL0Ov1EIlEdDDX/yraKpVKmM1m2O12iEQiyGQytiqvVCqFQCBghVTLdYVCIRQKBau6W6+rUChgtVphs9mc1pVIJBCJRDCZTE7rCgQCqFQq6PV6EEKc1pXL5bDb7bBarU7risViSCQSGI1GAHQGEbMuQN9E7taVyWSgKIpdV6VSwWg00sOpIhGkUin+/ve/Y+HChW7P/yeffIL77rvP6RgCcHm8hUIh5HK52+OtUChgsVhcHm+JRAKhUMiuK5fLYTKZHI4hU9uIEWUHDx4EQMdgVVdX4/LlyxCJRBg0aBB2794NiqIQGxuLqKgoHD9+HADQs2dP1NfXo6amBgKBAMXFxdi7dy9sNhuioqIQHx/Ppq5nZ2dDp9Oh8n9Vr4uLi3HgwAFYLBZEREQgJSUFR44cAQBkZmbCZDKhooJ++BcWFuLo0aMwmUzQaDRIT0/HoUOHANC1Tux2Oy5cuACAjsM4ceIEmpqacPToUWRnZ+PAgQMAgNTUVAiFQpw9exYAMGDAAJw5cwZarRYKhQK5ubnYt28fALotiVQqxZkzZwDQQd7nz59HQ0MDZDIZBgwYgN27dwOgM+xUKhXKysoAAH369EFlZSXq6uogkUhQUFCAnTt3AgDi4uIQHh6OkydPAgB69+6N2tpa1NbWQigUoqioiD3eMTExiImJYZ8POTk5aGxsRHV1NQBg8ODB2LdvH6xWK6KiopCQkMB+TlZWFvR6PXu8i4qKcOjQIZjNZkRERCA1NRWHDx8GQJcjsFgsbOxd62dERkaGw/GmKArnz58HQPdeO3XqFHQ6HVQqFXr27In9+/cDoDMMRSKRw/EuLy9HU1MT5HI5+vbti7179wKg623J5XKcPn0aAF3I8sKFC2hoaIBUKkV+fj527drFHm+1Wo3Gxkbs3LkTubm5qKqqQl1dHcRiMQoLC7Fr1y4QQhAbG4vIyEg2G7Jnz56orq1GVXUVKFBI65OGi8cvgrJTCI8MR0R0BM6eou1NyUiBQWdAXU0dfV4H9sHJoydhtVihidAgOi4aZ06coZ9FsRKcqD2BIxeO4ILhAurF9SitKsVFw0XYiXcjp8lhyUiQJCBVmYo+iX2QEZ4BtUGNOHkcsntlo/pSNQw6A+QyOXok9MCJIydQi1rEJsZCLBbj0nm6nU5W7yxUVVRB16SDTC5DRs8MlB6ir6WY+BjI5DJcPEuf84yeGbhcfRlNDU2QSCXI6ZuDY/uPAQCiYqOgVCtx4Qx9j6Vlp6HhcgMa6xshEovQq38vlB4sBUVRiIiKgCJcgQunL4AQgsS0RJj1Zujr9RAJRew1295nhMlkws6dO7vkGaHX66FWq9v1jOjTp32FBP1J0MTcVFRUIDk5Gdu2bWN7/gDAs88+iy1btrAPpZb07NmTjYlgfn2/9957ePvtt932g3I1cpOamsqJruDtRafT+fwXQUVFBXujuSIjIwPR0dE+/cz20pa/oRpz0x26J/sarvnsjb+EEJhsJugsOugtekBAN1j0ZqSm0dTYPI1UV4ZT9c09kgxW71qxMOnULVOps6KykB6R3mY69bH9x9pdsddf2Ck7ndlkt4GAQCKSQCFW+KT2DNeuaW8ImpGbmJgYiEQiVFVVOSyvqqpyW1slMTGRHZ1gyM3NRWVlJSwWi8ssGJlMxqYU8/iPpKQkJCWFdqM2Hp7uhitRo5Ao2pwO0Zq1+PPcnzhZd5IVMqfrT3c4nbq1gPFHOnVXY7VbnWrPRMgj2j3dxNN5gkbcSKVSFBYWYtOmTbjlllsA0FMCmzZtwvTp011uc9VVV+Grr74CRVEQCulI/RMnTiAxMdFn6b2JiYmcC9riWmo01/wF6OFlrsE1n9vylxACo80IrVkLg9UAgUDgUdRQhMLqI6ux4I8FqDXUtssGkUBEp1O3EjBdlU4dn+S6gnlX07L2DJNJxtSekQglkIqkXRLzw7Vr2huCRtwAwKxZs3Dfffdh0KBBKC4uxqJFi6DX69nsqcmTJyM5OZmN3Xj00Ufx4Ycf4sknn8SMGTNw8uRJvP766y57H3WUYAxC62q45jPX/AXA/hjgElzz2ZW/rkSNSqryKDIOVR3CnF/nYHfFbpfvx6vinQRMdlQ2eoT38Gs6tUDov3vZVasDjUzDTjf5o/YM165pbwgqcTNhwgTU1NTgpZdeQmVlJfLz87FhwwY2yPjcuXMOJzM1NRU///wzZs6ciQEDBiA5ORlPPvkknnvuOZ/ZVFFRETLtF9qL2WzmVPo71/wFgLNnz7qd7g1VuOZzS38pQsFopUWN0WaEUCBsl6hpMDVg4Z8LsezAMocCeDf1ugk35tzIZiSppcGRtVN5oRJRsV03pcVMN1GEglAghEwkQ7g83KH2jD/h2jXtDUElbgBg+vTpbqehNm/e7LRsyJAh2LFjRxdbxcPDw9P96KiocTcFlROVgzdGv4FhacO62vSggKk9Y6NsdKaoUAylRNlm7Rme4CBosqUChacKxQ0NDbh06VLIZcu0RcsYJi7Qlr+hmi3FtSrUALd8pgiFem09LAILjDYjHQMiVrTri9jVFJRSosTTQ57Gw4MeDljV3vZgNpkhk3cuYYSpPWOz2yAUCCERSaCUKNlg4GBqdcCla9pbuPMN1kGY3H8u0TJVngtwzV8AbH0aLsEFn+2UHTqLDpW6Shw/dRxWyoowaRiUEqVHYdNoasScX+fgbyv+5iBsbu51M7Y/sB0zBs8IamEDAJXnK73ehgkG1ll0aDI1wWwzQyqUIlYVi8SwRCSGJSJSEQmlRBlUwgbgxjXdUXhx44FQyZQSCAQeX8uWLUN5eTmUSqXL9/fs2dPmZ2zevLldn1NeXo5ly5a5fC8QFTe52H5Bq9UG2gS/E8o+2yk7tGYtKnWVqNZVw07ZYTPa2iVqKEJh1ZFVuGLJFViyfwkbW5MdlY1v7/gWn9/0OZLCukcZB72ufc9rilAw2UzQmrXQWXSwU3aoJWrEq+ORFJaEhLAEhMnCIBPL/B5H4w2hfE13luCSoUFIqExFtG5hMWTIEMyYMQN33303u4yp2goAr7/+ulOH7dzc3DY/o6CgwOFz9u3bh8cffxxffPEFevfuzS5PTExk/79hwwaEh4ezfweiFQKXpuAYuDiUHYo+2ygbjFYjmsz0iINEJEGYLAwCgQByhedn1+Gqw3ju1+ecpqBmD5mNRwY9EvQjNa1py2eHVgcCASRC71odBCOheE37Cl7ceCAzMzMkpqauuOIKp2U9evRwWs6Im5ycHJfbtIVGo3HYhmn70K9fPwwaNMjlNoWFhYiJifHqc3xNqAhYb/AkVEORUPLZRtlgsBrQZG6CxWaBVCxlRQ1Dj+webrdvNDVi4Z8L8cWBL5yyoOYPn49kTXKX2t9VtPS5Ze0ZQkhzZ215c2ft7h4MHErXtK/h3k9WLzl27FigTeDpYpj+VFyC6RHFJULBZxtlQ6OpEZW6SjaLSSOna6u0/qI+cfiE0/ZMFtSQJUNcTkEtuWlJtxU2AO0zkx2ms+hAQBAmDUOcKg6J6kTEq+PZ6abuLmyA0Limuwp+5IbHJRRFwWazsX8LhcIumb6x2+0OnxPI7uA8PMGK1W5lO3RbKStkIhk0Mu/qb4XaFBRDy1YHdmKHSCiCRqaBTCyDRCjpltNNPJ2HFzceiI+PZ7tft2TQIKDS+8B8n5KQAHiI8e0wEyZMcPh71KhR+PXXX33+Oa0LUC1YsAAvvviizz+nLbjYfiE5ufv+Ou8o3dHnlqLGRtkgFUnbLWpiE2IB0FNQb/z1BpbuX+owBTWu5zgsGLGg243UtNXqQNhDiER1Imd+IHXHa9pf8OLGAxKJxKW4qawELl4MgEF+4s0338TIkSPZv7uqSvOvv/7qEFAciJuVKw/ClnBR0HUnny12S7Oosdsgl8ihkHgXPCqUCLH6yGrM3zLfoallVmQW3hj9BoanD/ex1V1Hy1YHAgjctjowyA2cup+70zXtb3hx44ELFy64/GIPhorXXWlDZmam2yBgX5KXlxfwgGIutl84c+YM4uLiAm2GX+kOPrcUNXbKDplYBqVE6fV+jlQfwRPrnsDhxsPsMqVEiVlDZuGRwkcgE3eu0F1XQwiBlaKnmwgh7W510B3OsS/hmr/ewIubDtJV00E8PDzcw2wzQ2fRQWfRgSIU5GJ5h0RNo6kRb/71pkOwMEBPQc0fMR8pmhRfmu1TmFYHVrsVACAWiqGSqPhWBzwdghc3HujZsycqAx1cw9OlcLFWRP/+/QNtgt8JRp9bihpCCB0EK/J+FJEQgq+Pfo1XtrziNAW1cNRCjMgY0cbWgcNVq4PO1J4JxnPclXDNX2/gxY0HeGET+lit1oAUDwwk58+fR69evQJthl8JJp9NNhN0Zh10VlrUKCSKDpf2P1J9BHN+nYOdF3eyy5QSJe7veT/mXDsnqKagWk43URTF1p6JlEfSozMiSacqAgfTOfYHXPPXG3hx44GmpqYuC6blCQ5apqJzhYaGhkCb4HcC7TMhBGa7GVqzFnorXSxTLpZ3WNQ0mZvwxp9vOE1B3djzRiwYsQBNZU1BIWzslB1Wygqb3QYI6OmmMGkYGwzckZEqdwT6HPsbrvnrDby48UCoRqO7awafnp4OvV4PpdL7+f7WDB8+3O3nTJkyBVOmTOn0Z/gCLrZfkMkC/6XnbwLlMyGEHqmx6KC36AEBoBArOlx/pb1TUKdkp3xif0doWXtGKBBCKpIiQh7R5a0OuHZdc81fbxAQd98+HKGpqQnh4eFobGx0OUJjMBhw9uxZZGRkcKZMPyGEU4F7bflrMplw5syZkDv/FEVxTtT522dG1GgtWhgshk6LGgA4Wn0Uz/36nMMUlEKswKwhs/DooEcdRmr86a+r2jNysRwKscKvrQ64dl1zzV9v4I+KBw4fPux5pRCjrU7oNpvN7au7dtcOlc7v3rB7927PK4UY/vKZEAKD1YBqfTUqdZUwWA1QSBRQS9UdFjZN5ibM/W0uRv17lIOwubHnjdj2wDY8dcVTTlNQpQdLO+WHJ+yU3anVgUamQYI6AUlhSYhTxfm91QHXrmuu+esN/LQUj1e0VQ8mLS0N5eXl/jOGhyeIoAgFk82EJlMTTHYTBBBAJVV1KkCWEIJvjn2Dlze/7DAFlRmZiYWjFmJkxsg2tu4a7JQdeoseQqGQbQPBTDd1xlceHl/CixsPxMTEwGKxBNoMv9KWgGnrl0J3nf/lWgE/wLntBRfoKp8pQrEjGEabEUKBkG4F0MkvendTUDOHzMRjgx7zGCwcHRfdqc93hclmgtVuRbg8HGGysKCrPcO165pr/noDL248oFQqOSdu2prD9UfVYn/DxTlrlUoVaBP8jq99ZkRNk7kJJpsJIqGo0yM1AD0F9eZfb2LJviWwk+ap3rE5Y7FgxAKkhqe2az9ype9ixChCwWAxQCQUIVYVC5VEFVSihoFr1zXX/PUGXtx44Ny5c5xLBedaOwKu+QsAZWVlAW974W985bOdssNoaxY1YqEYaqm601/2hBB8e+xbzNs8zydTUBfLLyI8Mtzzih6w2C0w28xQSVWIkEcEdfdwrl3XXPPXG3hxw8PDw9MOGFHTaGqExW5h67X4YgTjWM0xPPfrc9hxYQe7zJspqK6AEAK9VQ8BBIhSRCFMFsbH1PB0G3hx44Hs7GxUV1cH2gy/wrV2BFzzFwD69OkTaBP8Tkd9tlN2GKwGNJmbYLaZIRFJfDJSA9BTUG/99RY+3/d5p6agXJHeM73D29ooGwxWA5RiJSIUEZCLu0cZBK5d11zz1xt4ceOBmpoazyuFGFxrR8A1fwG6rUhYWFigzfAr3vpso2wwWo1oNDfCYrNAKpYiTOabkRpmCurlLS+jWt/84ykjIgMLRy/EqIxRnf6Muuo6KDO8L8ZptBphp+yIlEdCI9N0WcG9roBr1zXX/PUGXtx4wF1xv1CGa+0IuOYvANTV1QXaBL/TXp+ZUYsmcxOsdiskIgk0ct89A9xNQT11xVN4vOhxn01BNTU0ebU+M0IlEUnooGFp9wtW5dp1zTV/vYEXNx4Qi7l3iIIxC6Ir4Zq/ADfT3z35bLVbm0UNZYVMJEOYzHe/irVmLd766y18tu8zn09BuUIsaf+zy2wzw2w3I0wahgh5hE/7PfkTrl3XXPPXG/joMA/07ds30Cb4BIFA4PG1bNkylJeXQ61Wu3x/z5497fosg8GA+fPno0+fPlAqlYiOjkZRURHmzp3rsN758+dx//33s60NEhMTMXr0aKxcuZJdZ/Pmzeznl5Y6V1ydO3cuBAIB0tPTO3xsuJhOWVBQEGgT/I47n612KxqMDajUVeKy8TKEAiFbmM4XMFNQVyy5Aov3LmaFTUZEBlaNX4VltyzzubABgJ79erbLNp1FBzuxI1YZixhlTLcVNgD3rmuu+esN3BuW8JKDBw+GxLTU9u3bHf4eMmQIZsyYgbvvvptdlpWVxbYieP311zFixAiHbXJzc9v1Wbfffjt27tyJF154AQMHDkR9fT12796NdevW4bXXXgNAd7O94oorEBkZiZdffhlpaWm4cOECfvvtN2zYsAH33nuvwz7VajVWr16Nl19+2WH56tWroVar22WXO3Q6Xaf30d3YuXMnBg8eHGgz/Eprny12CwwWA5osTbDZbZBL5FBIfBtcXlJTgud+fQ7bLzTff8wU1GNFj3VpoG7JgRLk5ru/Z612K4xWI5viHQwdxDsL165rrvnrDby44QhXXHGF07IePXo4LWfETU5OjsttPHHq1Cn83//9H5YvX47Jkyezy8ePH4/XX3+d/fvbb79FRUUFtm/fjh49erDL7733XlAU5bTfm2++GatWrXIQNzt37sTZs2dx5513Ytu2bV7bysNNLHYL9BY9tBYtK2qUEu8Db9vC3RTUDdk3YMHIBegR3qONrX1DWz2R9RY9CAiiFFHQyDV8ijdPyMGLGw9ER0fDarUG2oxuQ319PQAgMTHR6b2WlYDr6+shFAoRFxfX5noMd955J1atWoV9+/axQ7FfffUVRo0a5XIf3sDFeevOHrPuSFRMFOqMddCataAIBbnY96KGEIL/lPwH8zbPc8iCSo9Ix8JRCzE6c7RPP68tImMinZYxfaHkEjki5ZE+H6kKNFy7rrnmrzfwct0DXJuuYKAoyqHjt6vRFFf06tULarUas2fPxvr166HT6VyuV1hYCIqicM8992D79u0eM5aSkpJwzTXXYNWqVax9X3/9NSZOnOidYy7gWho4AISHd75ybXfBbDPjsuEyrBIrGk2NkIrolG5fx5aU1JTg5tU349GfHmWFjVwsx5yhc7B16la/ChsAUGscn10mmwlGmxHh8nDEqeJCTtgA3LquAe756w38yI0Hzp496zrmZsMgwFjpf4NaokgArmtfkK+3TJgwweHvUaNG4ddff/W4nUajwZIlS/Dggw9i3LhxEIlEyMvLw2233YannnqKDd4dOXIknnnmGbz77rtYu3YtFAoFhg4dinvvvReTJk1ymcE0ceJELFiwAG+99RZ+//13NDQ04LbbbsOBAwc65avJZOKciD158mTIz9WbbCZ2+gkEqDlfg74DfZ8goDVr8fa2t/Hp3k8DNgXlivOnz6PPwD4OfaFilDFB2xfKF3Dhum4J1/z1Bl7cdBRjJWC8GGgruow333wTI0c297LxJqj6zjvvxN/+9jesX78ev//+OzZt2oQXX3wRK1euxJ49e1iB89Zbb+HRRx/F999/j61bt2LTpk3YuHEjNm7ciBUrVjjtd/z48Xj88cfx119/YdWqVbjhhhtCItibx3cQQmC2m6E1a6G36kEIgUKigFgohgC+/UInhGBtyVrM2zwPVfoqdnl6RDpeH/U6/pb5N59+Xkdg+kKppWqEy8ODui8UD48v4cWNBzIzM1FbW+v8hiIIWs13oQ2ZmZmd6gAeGRmJSZMmYdKkSSCEYN68eViwYAGWLFmCJ554gl0vIyMDTz31FJ566inodDrccccdWLlyJZ555hkMGDDAYZ9RUVEYM2YMli1bhv/85z/4/PPPO2xfS+Ty7lFa3pf07t070Cb4FEIITDYTdBYd9BY9IKCnhMTC5kdcj2zfjaCU1pbiuV+fw7bzzYHscrEcTw1+Co8XPx7wdgWEEMSmxcJqtyJaGQ21VM2JoOFQu649wTV/vYEXNx5gAmSd6KLpoFBEIBDgmWeewYIFC1BSUuJ2PbVajcceewwbNmxASUmJk7gB6KmpSZMmQa1WY+zYsT6xz2azca5YY21tbUjM17sSNQqJwmXLgKa6JqjDOjf96G4K6vrs67FgxAKkRaR1av++gKmwbGoyISMhI+BCy5+EynUNADYbYLHQL6kUULqIfQ8lf30Nt57oHaC+vp6f+vACrVYLsVjs1IzyxIkTAICEBHq0qaamBjExMU5z/63Xa83NN9+Mm2++GYMHD/bZiAsX2y/U1tYiKysr0GZ0GEIIjDYjtGYtDFYDBAKBW1HD0FDXgKS0pA5/3nel3+Gl318K2ikoADBYDaAoCpHySFQ3VXNK2ADd+7omBLBaaTFjNAImEy1wrFYgLs69uOmu/nY1QSluPvroI7z99tuorKxEXl4ePvjgAxQXF7tcd9myZZg6darDMplMBpPJ5BNbXKUl87jn+PHjGDduHKZMmYKhQ4dCrVbj2LFjeOONNxAeHo4pU6YAAJYvX44VK1Zg0qRJGDhwICiKwrZt2/Dmm2+isLAQQ4cOdbl/lUqFtWvX+tTmUA2ubIvuel23FDVGmxEAoJKq2jXlIhR1zOdgn4ICmvtCSUVSxKhjoJQoOZkF2N2ua4pqHp0xGACzmV4mFNKjNU1NwIYNgEYDTJvmvH1389efBJ24WbNmDWbNmoXFixdj8ODBWLRoEcaMGYPjx4+7zenXaDQ4fvw4+7cvv6z69++PM2fO+Gx/oU52djYefvhh/PLLL/j888+h1WqRnJyMkSNHYu7cuUhLo4ftb7jhBpw9exbLly/HggULQFEUevTogaeffhqzZs3y64OZi+0XioqKAm1CuyGEgCIUTDYTK2qEAiGUEqVXcSS9B3gXn6Cz6PD2X2/j032fwkY1j+5dl30dXh3xalBMQQF0qrvFbkGYNAzh8nA2xb07nWNf0R18ZqabTCZa0Nhs9KiNWAxIJMChQ8CvvwKbNgFMImjv3q7FTXfwN1AISFtlLAPA4MGDUVRUhA8//BAAXc8kNTUVM2bMwJw5c5zWX7ZsGZ566ik0NDR06POampoQHh7utvv37t27oVar2f5HXECv13PqC78tf00mE86cORNy53/37t1B82AkhMBO7KAIBYpQsFP0/62UFTbKBqvdCopQsFE2CAVCKCSKDgXHlh4qbZfAYaag5m2eh0pdc7mH9PB0vDbqNVybda3Xn90VEEKgt+ohFAgRKY+EWqp2+GEXTOfYXwSjzy2nmwyG5ukmoZAWM01NwObNtJj5/XfAXaPvs2eBHq1i4oPR32AhqEZuLBYL9u7di+eff55dJhQKMXr0aKfeSC3R6XRIS0sDRVEoKCjA66+/7rbhpdlshtlsZv9uampq06b2Fq8LJYJM73Y5XPMX8O91zYiWlsLFTuywUTZYbBZW2NiJ3eFcCAQCCAVCCAVCiIViyMXyTo3KUnbPPpfWlmLOr3Pw1/m/2GVysRxPDn4S04unB8UUFNC+vlBcfHYFi892Oy1mzGZa0Fgs9HSTSESP0JSW0mLm11+B/ftpAeSKfv2AYcOAG28EklyEiwWLv8FIUImb2tpa2O12xMfHOyyPj4932REaoCviLl26FAMGDEBjYyPeeecdXHnllTh69ChSUlKc1l+4cCFeeeUVp+VM/ZWCggKUlJTAaDQiLCwMYWFhMJvN0Ov1EIlEIITAYrEAAJRKJcxmM+x2O0QiEWQyGQwGAwBAKpVCIBCwQqrlukKhEAqFgu3j1HpdhUIBq9UKm83mtK5EIoFIJGJjilquKxAIoFKpoNfT9T1aryuXy2G322G1Wp3WFYvFkEgkMBqNbHViZl2AzmTS6/WwWq0O6wJ0jBOzjUgkgkqlYvcjEokglUod1m19DE0mE7tu62MIwOXxFgqFkMvlbo+3QqGAxWJxebwlEgmEQiG7LnOMWh5DprIyRVGgKAoHDx4EQDcPra6uxuXLlyESiTBo0CDs3r0bFEUhNjYWUVFR7BRpz549UV9fj5qaGggEAhQXF2Pv3r2w2WyIiopCfHw8mz2WnZ0NnU6Hykp6pKC4uBgHDhyAxWJBREQEUlJScOTIEQB0mr7JZEJFRQUAutrz0aNHYTKZoNFokJ6ejkOHDgEA0tLSYLfbceHCBQDAwIEDceLECej1ehw9ehTZ2dlsEcTU1FQIhUKcPXsWADBgwACcOXMGWq0WCoUCubm52LdvHwAgOTkZUqkUZ86cASEEffr1wfnz59HY0AiJTIKc3Bwc2ncIBAThMeGQyqWoOl8FQggSMxPRdLkJhiYDxGIxMvtk4vSR0xBAgMiYSKg1apw/fR4Anb7dUNeAhroGCEVC9B7QG6WHSkHZKURERUATpcG5U+do+zNToWvSob62HgKBALn5uThx5ARsVhs0ERoo1Uoc23+Mtj89GSaDCZerLwMAUnJT8Pef/o41Z9Y4ZEFdFXMV5o+Yj0RZIk4fPk2f1/49ce7UOZiMJqjUKiSkJqCspAwAkJCSAEIRVFXQQcc5fXNwofwCjHojFEoFUjJTcPLISQBAXFIchEIhKi/Q5zwrNwuVFyqh1+ohk8uQ3jMdxw/R11JMQgykUikqzlXATuxIykqCqc6Eam01ZDIZ8vPzsWvXLtqGhAT2ft25cydyc3NRVVWFuro6iMViFBYWYteuXXS6eGwsIiMj2UD+Xr16oa6uDjU1NRAKhSgqKsKePXtgt9sRHR2NuLg49prNyclBU1MTqqpoXwcPHox9+/bBarUiMjISSUlJOHr0KO1bVhYMBgMuXboEABg0aBCOHDkCk8mE8PBw9OjRA4cPHwYApKenw2azsddsQUEBSktLYTAYoFarkZWVxd6PTF+6c+foayAiIgJHjx6FTqeDUqlE79692Ws2JSUFYrEY5eXlAOiQg3PnzqGxsRFyuRz9+vXDnj10FmxiYiKUSiXKyujz2rdvX1RUVKC+vh4SiQQFBQXYuXMnAPr7iQ6NOAmKAlJTc1FTU43GRvoZkZk5CEeO7MOuXRrs2xePHTtUuHzZ9chjWBgwaFA9iorqMWoU0Lt3DMrKSiCRAI2Nzs8Is9mMnTt3dtkzQq1Wt+sZ0adPH5f+BJKgmpaqqKhAcnIytm3bhiFDhrDLn332WWzZsoW9mNrCarUiNzeXrWbbGlcjN6mpqW6npWpqalBbWxty0xJt0VZqdFu/nNPS0tgHR3eiLX9DdVqqsbGx3SmkrUdcKELBZrfRU0aUtXlKiaJA0Pw4YUZdhAIhREIR+/9AodPqnFLBCSFYV7oOL21+KainoIDmoGGZWNauvlDenONQwZ8+E+IcDGy3AwIBPTpTUgL89hs9OrNvHz1y44q+fYGRI4HRo4GiInqqqiU6HRARQb9aw8Vz3F6CauQmJiYGIpGI/SXAUFVV5TY1uDUSiQQDBw7EqVOnXL4vk8kgkzkP4brj9OnTnEsFb6sdwe7du91u581xDSa42H6htLQUgwcPZoN1WwoXO2WHnbLDQllgo2zsMkIIK14EAgEEELDCRSwUQyQWBXXm2blT59BnYPMvzOO1xzFn0xz8ee5PdlkwTkEBgNFqhJ3YoZFpEC4PdyhO6A7mHHOJrva55XSTXk/H0hBCTzcZDMDWrbSY+f13oKbG9T7UauCaa4BRo+iXq+mm9sLFc9xegkrcSKVSFBYWYtOmTbjlllsA0NMCmzZtwvTp09u1D7vdjsOHD+OGG27oQku5S2eqFvP4H0a8tBQuFKFgsVtQra+GjbKxyyjS/NOSES/MiItELIFQIAxq8dJedBYd3tn2Dv61918OWVBjssbg1ZGvIj0iPXDGtYLpCyUWiRGriIVSogyJc9CdaFl7xmikg4EBenSmrIyOndm0Cdizx/3oTO/e9MjMqFFAcTGd5s3TtQSVuAGAWbNm4b777sOgQYNQXFyMRYsWQa/Xs7VsJk+ejOTkZCxcuBAAMH/+fFxxxRXIzs5GQ0MD3n77bZw9exYPPvigT+xJS0tzX6U4RAml6Zf20J39bZlp1DpY12q3No+8tArWjUqJgslmYoN1mRGYUCYlI4UtxNdyCiotPA2vj3o9qKagALovlMlmYlO8ve0LlZOT00WWBS++8JmpPWO10qMzzHSTUEiLm23bmgVNdbXrfSiVjqMzLsI/fQIXz3F7CTpxM2HCBNTU1OCll15CZWUl8vPzsWHDBjbI+Ny5cw6Fi+rr6zFt2jRUVlYiMjIShYWF2LZtm88CnJjAUi5ht9s51Y4gmP11lWVEEQpWuxVWOx3vwixzlWkkEtBTRjKhzCHeRVetgzLGRcnTEOV47XHM+mkWdlXvYpfJRDJ2CspT/Io/YVK8BRAgRhnT4b5QjY2NiIqK6gILg5eO+szUnmGym6zW5uymU6foVO1ffwV276aFjit69qSFzOjRwODBgD9m6bl4jttLUAUUBwJPdW527twJjUYTcgGlbaHT6TgVg9KWv10dUNxWsK6NssFGbA7BugQEAgggEAggEog6HKx7bP8xh/iTUEVn0eHdbe9i8d7FQT8FBTT3hVKKlYhQRHQq7mfnzp2ci8dor8/uWh0IBPT/t2+nR2Z++w34X4KXE0olMHRo83RT6xo0vqKtgGIunuP2Epw/V3l4QoTWwoUJ1rVRNlgoi0OwLgUKAtDxFC2zjLoiWDfU4zYIIVh3fB3m/T4Pl3TN305p4Wl4beRrGJM9JoDWuaZlXyiNTBPy04T+xl2rA4EAOHOmuZDezp3NcTWtycpqFjNDhgAc+b3bLeFHbjyM3IRqKjBP+2jv+bfarbDYm8UKk2nUOliXEAKhUOgQrMuMwIS64PAXJy6fwJxf52Drua3sMplIhicGP4EZxTOCagoKoAWw3qKnU7wVkVBKuDNd2NW0bnXwv7JdMJloEfP777SguXjR9fZyOT06w8TOZGT4z3aGtkZueNzDj9x44OjRo1C6ascawvDtF7yDIhRqDDUw2+j6Sa0r6zL/DybxcuLICfTs1zPQZvgUd1NQ12Zdi1dHvArrRWvQCRuTzQSr3YpweTg0Mg3bF8oX7Nu3DwUFBT7bX3dg79596NevAFarY6sDgQAoLwf++IMWMzt2NAud1qSn06Mzo0cDV14JKAJwyTDdwO129zE+ADfPcXvhW4p6wOZufLKb8uWXX6K4uBjh4eHQaDTIzc3Fgw8+iOoWYf96vR7z589Hnz59oFQqER0djaKiIsydO9dhXwIBHfuxePFip8/ZuHEj+357CvsNHz6cXd/di+konp6e7vL9d955p0PHpLODl0arEWabGWqpGmGyMKilaiglSsjFckhEEoiEwVf/xWYNneuaKcR35ZIr8eHuD1lhkxaehpW3rsSXt32JjMiMoPKZEAKdRUdXCVbFIkoR5VNhA4CtLh7q2O103ExDA6DTWXHpEp3FdPkyPTKzYAGduTRyJPDyy3QtmpaHRiYDRowAXn2VFj27dwMLF9IjNf4QNkwxQIMB0Grpl8VCBzNHRAAJCXRtHFdw5Rx3BH7kxgPh4eEh03vorbfewpw5czBz5kzMnz8fhBAcOXIEX375JSoqKtiu65MnT8bu3bvxwgsvYODAgaivr8fu3buxbt06vPbaaw77VKvVWL16NR555BGH5atWrYJarW53ttnHH3/s0Ofrscceg1KpdBAssbGx7P9vv/12zJ4922EfTMdxb+lMplTL5oXBJmDaQhMRGoUpT1w+ged/fR5/nPuDXeZuCipYfG5PXyhfEMpZNEwwsMlECxvmO76mJh5bttCiZts2eh1XpKU1TzUNHUoHB/sLu715ZIai6BRzkYieApPL6QrFYjH98vRICeVz3Fn4mBsPMTeXL19GdXV1SMTcpKSk4Nprr8XSpUud3qMoCkKhEKdOnUJOTg6WL1+OyZMnu1yHQSAQ4J577sGqVatw7tw5JCcnA6BbXMTHx2PcuHFYuXIlzpw5g/T0dK9sHT58ONRqNdavX+/0Xnp6Om688Ua2c3xnYXqDucJTzI3JZkKlrhIKsaJbBYAa9AYoVd13ulVn0eG97e/hkz2fOExB/S3zb3ht5GvIiHQOjgi0z4QQGKwGEBBEyCKgkWu6tB2FVqtFWFhYl+3fn7hrdWAy0SMtW7bQ003/a3nkhFRKTzExqdpZWZ6Fg6/sttmaXwAtZsRiWsjIZM1ixs0jqE1C6Rz7Gn7kxgOnTp0KmfYL9fX1SExMdPkeI1qYgoWu1mspbBjy8/Oxd+9erFmzBrNmzQIA/Pe//wUhBGPHjsXKlSt9ZX6XYTQaO5z6brQaAYJuJWwAoPxEebdMBSeE4IcTP+Dvv/3dIQuqR3gPvD7y9TazoALps42ywWg1trsvlC84duxYt04Tdtfq4Nw5emrpt9/o0ZkWrQIdSElpzmwaOtT91I4voSjHURmAFi1SKd0UUyqlhYxE4htx1d3PcVfCixsOUVhYiMWLFyMjIwM33nijy35dvXr1glqtxuzZs/H666+zIyhtMXHiRKxatYoVN6tWrcKtt97apSNdhBCHeCiBQOB29KWrsFE26Cw6SMV8LXV/cPLyScz5dY7TFNSM4hl4YvATQRcszNCRvlBchBnlaN3qwGSiWxts2UILmjNnXG8vkQD9+zfippvCMXo0XVSvq0dn7HZayNhstP1M00yFgn4xQiZIa4SGNPwh90CPHj3Q0NDgtHzQp4McSrgHggR1AvY8tKfd63/88ce49dZbMW3aNABARkYGxo0bh5kzZ7LTRhqNBv/617/wyCOPYNy4cRCJRMjLy8Ntt92Gp556ymVW0cSJEzFv3jyUlZUhPj4e69evx7p162AwGHzipztfPv74Y/ZvkUjU4eDvjjb8NFqNsFLBl4HTHpLTkwNtQrsghOBc4zksP7gci/cshpVqDqAcnTkar4983eUUlCv87TNFKOgtekhEkoD0hcrKyvLbZ3UUV7Vn7HbgwgV6dGbzZuCvv2ih44qkpOappmHDALvdiq5qks2ILyaLiWmYKZEAGg09KiOR0C8Xg9xdQnc4x4GCFzcecPcFXamrxEWtm+IIQUq/fv1w9OhR/Prrr/jll1+wZcsWvP/++/jiiy/wxx9/ID8/HwAwfvx4XH/99Vi/fj1+//13bNq0CS+++CJWrlyJPXv2OAmcnJwcFBYWYtWqVUhPT0dYWBhGjRqFH3/8sct8ufPOO/HMM8+wf3fmS4Ny1+2urW0IBa1FC4nQtxku/sJkMCE8sou+BToIIQTnm87jYOVBHKg6gEOVh3Cw6iDqTY693XqE96AL8WWN8eq8+9Nns80Ms92MMGkYIuQRPs+Eag96vR4xMTF+/1xPuGp1YDIBe/c2p2qXlbneViymWxswwcC5uY6jM1VVeoSH+8ZnimoelWEeEWIxLWIUimYh057A364iWM9xMMCLGw/U1ta6jLlJUDtP6fibjtgglUpxww03sF3Tf/75Z4wdOxbz58/H2rVrAdDphZGRkZg0aRImTZoEQgjmzZuHBQsWYMmSJXjiiSec9jtx4kQsXboUaWlpuPPOO7t8iig2NtZnHcqtVqvXozcmm4lN/+6OXK6+jPjk+IB9PiEEF5ou4GDVQRysOogDlQdwqOoQ6ox1brfp7BSUP3xu3RcqTBoWsCy6ysrKDmcQ+hJ3rQ4uXqRHZ37/nR6dcTfQGx/fXHdm2DB6lMQdly9XIj6+Yz63DPxlspjEYkClcgz8DaYppmA5x8FIEJ2m7oU300HBzJgxY5CXl4eSkhK36wgEAjzzzDNYsGCB2/UmTJiAZ555BqWlpdi6davLdUIJvUXP1tfhaRtCCCq0FThQecBByFw2Xva4bawyFvkJ+chPyMcdfe5o9xRUIPBlX6juDjPdxIzOmM20qNm3jx6d+f134MQJ19uKREBRUfN0U9++vh8ZYQSXzdZcJE8opAVMeHjzFJNY7L8pJh7fwosbD/Tv3x9n3eUXdjOqqqrY7uoMRqMR58+fR9++fQHQqYWuRl1O/O9J5CoIGaDTzJ966inU1NTgyiuv9LHlXYu31YnNNjP0Vj0U4u4Xa8PQO693l+yXEIJLukvs1NLBSnpkptZQ63HbGGUM8uLzkJ+Qz/6boE7wmYDsKp+B4OwLVVRU5NfPc9XqgBmd+eMP+uVudCYurnmqafhwdDhupndv1z63rC3DBP6KRPSIDDPF1N7aMsGEv89xd4IXNx44fvx4t69vw9C/f3+MGzcOY8aMQWJiIi5evIgPP/wQtbW1ePLJJwHQ/t54442YOnUqhg4dCrVajWPHjuGNN95AeHg4WyXYFe+9956fPPEtRqPRqxYbRqsRhJCg+ALrKKdLTyO7T3an91Opq6RHZFqImRpDjcftohXRyEvIcxAzSWFJXToS5iufW9KyL1SMOiao+kIdOnSIjaPrClrWnmGmm4zG5tGZzZuB0lLX2wqFQGFh83RTv36+GSE5ffoQsrPzWSHD5BgIBLSAUavp+jJMFpOfEyx9Tlef4+4ML248YLFYQkbcvPzyy/jxxx8xa9Ys1NTUICYmBgMGDMCmTZswYsQIAEB2djbuv/9+bN68GZ9//jm0Wi2Sk5MxcuRIzJ07NyTnd70JKLZRNmgt2i6rKusvLGY3pVvboFJXiUNVhxyml6r11R63i1JEYUD8AIcRmeSwZL9P6XXE57Zo2RcqGFO8ze4KwHSClrVnDAb6/5cu0WJmyxZ6lMZdUfKYGLoFwujR9OhMZKRvbGKmmOh+UmZotY61ZZjAX1/VlgkmuuIchwp8hWIPFYqZGJNQqFDcXkwmE2d8Bdr2t3WFYp1Fh2pdNTTy7l3Y8VzZOfTI6uH2/SpdFQ5WHXQQM+0pfRAhj0B+fD4GJAxAfnw+8hLykKpJDYrYJE8+txemL5RYKEakIhIqiSoo/GvN8ePH0atXr07vp3Wrg9ajM8eOud5OIKBHZ5jYmQEDfDM64662jFQKVFYeR05OL87UlvHVOQ5FOHD6O0dCQgIqKwNbz8bfSCTdM725o7TXX4pQ0Jq1AUnr9TVxSXHs/2v0NWzqNTO11LL6rzvCZeHIi8+jp5cS8pAfn48e4T2C8osecPS5o7TsCxWpiIRUFLwFHFNTUzu0HZMCbbHQlYHNZqCigh6VYUZntFrX20ZH000omdGZ6OiO2w84ty9gasuIxY61ZZj2BWp1akC6eAeKjp5jLsCLGw+cOHEiZNovtJfOtCNwB0VRbU7/iESB65zdXn+Z2iXBFFfhLbWGWhysOoiN+zbikvASDlQdQIW2wuN2GpmGFjKMmInPQ3pEetAKGVecLj3d4fYLLftCRSmiurwvlC84fPhwu0vzt2510HJ0ZssW4MgR19sJBEB+fnObg/z8zsWxtKwtY7c3j8pIJM3tC9qqLeONz6EA1/z1Bl7c8PiF+fPn45VXXnH7/hdffNFmsHIwoLPQwQTB/qXGcNlwma0jw2QtXWi64HG7MGmYQ4xMXgItZLqL376GSfFWiBWIkEd0y4rUrXFVe6Z17Exjo+ttIyPp0ZlRo+h/Y2M7bkfrURlGzCiVzh2yeXi8gb9kPJCSkoKmpqZAm+FXOtqOoC0eeugh3HjjjW7fz8gIXP2S9vhrsVtgsBqCtnZJvbGeDfJlxMz5pvMet1NL1RgQP8AhaykjMiMkhUxiD9dNY9vCaDXCRtkQIY+ARqYJuqDhtnB1T9lstJjR6+mA4H37aDGzZQtw+LD7feXlNcfOFBR0bHSmdfsCoLm2jEZDp2UzozQdjc0J5HMkEHDNX2/oPndqgLBarZ5XCjG6IsY8KSkJSUlJPt+vL2iPvyarCRShguLLrcHUwI7EMAXxzjZ6rsWkkqhYIZMpz8TVva9GZmRmSAoZV9gs7e891rIvVJwqzu99oXyBxdKcHWa10oKmogLYsKG57kx9vettw8PpmJnRo+nRmfgOFHZmppiY2jIALV6Y2jItm0r66tC29JkLcM1fbwj8kzrIqaqqgkaj6ZIv/GDFYrFAKg3eQElf05a/hBA63sJmCMgxaTQ1OkwrHaw8iPLGco/bKSVK9I/r75B+nRmZydbmObb/GLKjfFvzJdipqaxBbKLnOZRg6AvlCy5evIjY2BTo9XQxvSVLgGXL3E839evXXHemsND7qaCWozJM+wJ/15a5ePEiUlJSuu4Dggyu+esNvLhpJwaDAQouheHzAKDPOwGBHXaoxV3bR6rJ3ORUR6a8odzjdkqJEv3i+jlMLWVHZXfrIoOBgOkLJRQIEauMhVqq7najNQA9SmI206/SUlrULF8OtJ5dDwujR2eYysBuio+7/YzW7QuYLKaWtWX49gU8gYKvc+Ohzo3VakVtbS0aGhoQFxcHpbL7DU97C0VREHLoieTKX0IIDAYDqqurIVaIIYuU+TRLSmvW4lDVIYc4mdP1pz1upxAraCHTorpvTlSO10LGZrNBzLEozbZ8ttqtMNlMUIgViFREdssijYTQ8TQ6HT1S8/nndvz73yKHonoiEXDHHcDEiXT/pvZWfWhZW4YZlWHaFzCBv8yoTCAfj1arlVOlLLjmrzdw6+nWAUpKStC/f38AQHW152qsoQA/LdWMKkwFm9LWqUBinUVHC5kWcTJl9WUet5OL5egX248uiPe/EZme0T19Evdz7tQ5ZPbO7PR+uhPufG7ZFypMFtbtRrwoihY1Wi0tapYupUdq9PpmP8RiYMIE4KmngPT0tvfXurYM0NwhOyzMsUN2sLUvKCkpwYABAwJtht/gmr/ewIsbDxiNRggEAiQmJiIuLo4TAcYHDx7kVNVLd/5KJBI0mBugtWjbHXSrs+hwuPowLWT+J2ZO1Z0CQdsDpDKRDH3j+rKp1/nx+egZ3bPL4j1MRlOX7DeYae1zMPeFag9M5lNTEx0ovHQp8O9/OzanlEjoUZonnwR6uCnOTFGO8TJMU0mmfYFU2hwvE+yD1kajMdAm+BWu+esNvLjxQFhYGPt/kUjksmN2qBEWFsap9gvu/LXYLdBZdB5HbbaUb8HXR7/GgaoDOHn5pEchIxVJ0Te2r0NBvN4xvf0auKpSe9cJPRRo6XOw94VqC7qHEj1Sw4iaFSucRc1NN9Vh7twotC5iS1F0fRt3tWVaZjF1N1o+r7kA1/z1Bj7mxkPMjdFo5FwgMdd8dudvo6kRlw2X2+wjVd5QjiuXXAkr5XpETyKUoE9sH4eCeL1jege8bL/ZZIZM3v3iSjqD2WSGRCaB3qIP+r5QrmCaVWq1QGUl8PnnwMqV9OgNg1QK3Hsv8MQTQEyMETJZ83VNUc0CSCqlhQxT8bcztWWCCf7ZxcPQDbW5fzl06BDnyltzzWdX/topO7QWLaTitkXIJ3s+YYWNRChBbmyuQ9ZS75jeQRmcWlZS1uFWBN2VUyWnkJqb2i36QjEwmU96PR0ofOkSLWq+/JKuKswgkwGTJtGiJvF/tQqPHTuEPn0GgxBa1BBC15fRaGhh0000nVfwzy4eBl7c8PC4wGQzwWK3IEzqftj3suEyVh1eBYBOx9730D5EKzvZKZDH5zAp3hShEK2MRpgsLOgLFzKZT3o9/Wo5UmM2N68nlwP33QdMn+46ldtgoKeflEpa1CgUoSlqeHhaw4sbD6SlpQXaBL/DNZ9b+0sIgdashUjQdjPPpfuXwmij5wTu6X9PtxI2CSleFDXpxrTsC5WVkYVweXigTWqTlplPJhMdU/PZZ8BXX9FxMgwKBTBlCvD4487Vgwmhtw0PT4NYTHfmVihCY9rJE1x/dvE0w4sbD7TVyTpU4ZrPrf01280w2UxQSt1nzxisBizZvwQAIBKI8MigR7rURl9DqNAPtWvZFypcFo4qbVWgTXKL3d4cT2My0SM1n35Ki5qWCZpKJTB1KvDYY0BcnPN+TCZaBMlkQFgYhYQEbogaBq4/u3ia4dBl3zHOn/fcfDDU4JrPrf3VW/QgIG1OXaw5sgaXjZcBADf1ugk9wt3k2QYpVRXB+0XfWShCQWvWQiAQIE4Vh0h5JERCUVBe11Yr3Q7h0iWgpgYoLwdefpmuHLx8ebOwUSqBGTOAvXvp91sLG7O5uQJxbCw9RVVTc55Twgbgn108zfAjNzw8LbDardBb9W2mf9spOz7e8zH79+PFj/vDNJ520F36QlkszSM1Vis9UvPxx8CaNc2F8wBApQIefBB49FF6esnVfkwmOtspOppevzumcPPw+Bo+FdxDKrjZbIZMFnzZLl0J13xu6W+TuQm1hlpoZO7Tv388/iPu/+F+AMDVPa7G2glr/WKnL7FarJBIg/OLvyO07AsVKY902Rcq0Nd168wniqJjaj76CPj66+YeTQBdPG/aNOCRR4DISOd9Wa20qBGJ6EBhlcq5lUKg/Q0EXPOZa/56Q4cGLXfu3OlrO4KWU6dOBdoEv8M1nxl/memMtlKECSH4aPdH7N/dddTmQvmFQJvgM6x2K7RmLeQiOeJV8QiThbkMBA/Udc1kPtXW0iM0TU3AhQvAnDnANdcAq1Y1CxuNBnj6aWDfPuD5552Fjc1GCyOLBQgPp6efIiJc94ji2n0McM9nrvnrDR0SN0OGDEHPnj2xYMECnD7tudmft3z00UdIT0+HXC7H4MGDsWvXrnZtt3r1aggEAtxyyy0+s0XXsuscR+Caz4y/RqsRZrsZMpH7X0I7Lu7A3kt7AQB9YvpgZPpIv9joa4z60CjbbrAaYLaZEaWIQqwqts2aQv6+rimKHqWpqqJFjV5Pi5rnngOGDXMcrQkPB559lhY1zz1HC5aW2O20qDGZ6FGdhAQgKoouwucOrt3HAPd85pq/3tAhcbNy5Urk5ORgwYIFyMnJwVVXXYXFixejrq6u0watWbMGs2bNwrx587Bv3z7k5eVhzJgxHptWlpeX4+mnn8bVV1/daRtaolJxsEw9x3xWqVQghEBn0XlM//5oV/OozWNFj3Wb6ratUSi7d1VTO2VHk6kJIoEIceo4RCgiPDa89Nd1zQiRykqgupqeirp4EZg9mxY133xDCx+AFjFz5tCi5plnaJHTEoqi92U00lNPCQl0bE17ZiK4dh8D3POZa/56Q6dibmpra7F69Wp89dVX2LFjB6RSKa677jrce++9uOmmmzrUWXrw4MEoKirChx9+CIBOdUtNTcWMGTMwZ84cl9vY7XYMGzYM999/P7Zu3YqGhgasW7euXZ/nKeaGax2yAe75bLFYQAkpVOoqoRAr3H5Jnrh8AlctvQoAkBSWhN3TdneLKreusFqtkLiay+gGMH2hNDKNV32huvq6ttnoIOGmJnraSCKhs5/eew/4/nt6eoohMpIOEn7wQXokpjW+qCrMtfsY4J7PXPPXGzqVKBgTE4Pp06dj27ZtOHnyJObOnYvS0lJMmDABCQkJeOihh/Dnn3+2e38WiwV79+7F6NGjmw0UCjF69Ghs377d7Xbz589HXFwcHnjgAY+fYTab0dTU5PBqi/3797fb/lCBaz7v378fBqsBIGjz1//Hu5szpB4ufLjbChsAOHnkZKBN8BqKUNCZdSCEIFYViyhFlFcNL7vqurZYgIYGOp27tpZedv48XWBv2DBg3bpmYRMdDfz97/RIzcyZzsKGETU6HT06ExdHvzpSWZhr9zHAPZ+55q83+CxpUKFQQKlUQi6XgxACgUCA77//HkuWLEFBQQGWL1+OPn3a7mVTW1sLu92O+FYlN+Pj41FaWupymz///BNLlizBgQMH2mXnwoUL8corrzgt37NnD1QqFQoKClBSUgKj0YiwsDDY7XY2gDotLQ0URbG1BfLz83Hq1CnodDqoVCr07NmTvdhSUlIgEolw9uxZAMCAAQNQXl6OpqYmyOVy9O3bF3v30rEbSUlJkMvlbPxSv379cOHCBTQ0NEAqlSI/P5+NO0pISIBarWYDyXJzc1FVVYW6ujqIxWIUFhZi165d9BdAbCwiIyNx4sQJAECvXr1QV1eHmpoaCIVCFBUVYc+ePbDb7YiOjkZcXBxKSkpQX1+Puro6NDU1oaqKrocyePBg7Nu3D1arFZGRkUhKSsLRo0cBAFlZWTAYDLh06RIAYNCgQThy5AhMJhPCw8PRo0cPHD58GACQnp4Om82GCxfogNaCggKUlpbCYDBArVYjKysLBw8eBAD06EHXjjl37hwAIC8vD2VlZdDpdFAqlejduzf27dvHHm+xWIzy8nIAQP/+/XHu3Dk0NjZCLpejX79+2LNnDwAgMTERSqUSZWVlAACL1YKyk2UwaA2QSqXI6ZuDY/uPAQCiYqOgVCtxsPQgvj7yNQBALVajCEU4fvg4evXvhdKDpaAoChHREdBEaHCujLY3NTMVuiYd6mvrIRAKkJuXixOHT8Bms0ETqUFUTBTKT9L2pqSnwGgw4nI1XTsnNz8Xp46dgtViRVh4GGISYnDm+Bn6eumRBIvFgtpK+pu014BeKD9RDrPJDFWYCgkpCSgroX1LSEkARVGorqCndXP65eDC6QvQNelw5sQZpKSn4ORRWujEJ8VDIBSg8kIlfV5zs1B5vhJ6nR5yhRw9snvgxGH6WopNiIVYKsalc/Q5z+ydieqKauiadJDKpMjsnYnSg/Q9Gx0XDblSjovlF+lroGc66qrr0NTQBLFEjJ79eqLkQAkIIYiMiYRao8b50/Q91iO7B5rqmlB3uQ4QAH3y++DM0TOoIBWIiYlBTEwM+2zIyclBY2MjO4Xd8pqNioqCzWZj7+WsrCzo9XpUVtK+FhUV4dChQzCbzYiIiEBqaip7zWZkZMBiseDixYvsNVtSUgKdzgiZLAzh4Rk4d+4QRCKgsTELH36owsaNjtN+ERFWTJp0GU88EYWKiv04dw6Ii0uBUChCZSX9jEhOHoDq6nJYLE1Qq+Xo378v9u/v+DOivr4eO3fu7JJnBHO8g+0ZYbfbcfToUZ8/I/r27YuKigrU19dDIpGgoKCAvZbi4+Oh0Whw8iR9H+Xm5qK6uhqXL1+GSCTCoEGDsHv3blAUhdjYWERFReH48eMAgJ49e6K+vh41NTUQCAQoLi7G3r17YbPZEBUVhfj4ePZ4Z2dnQ6fTsddscXExGhsbsXPnTkRERCAlJQVHjhyh78fMTJhMJlRUVAAACgsLcfToUZhMJmg0GqSnp+PQoUMA6O81u93OHu+BAwfixIkT0Ov1UKvVyM7OZr9fU1NTIRQKHb7Xzpw54/G7PRB0alpKq9Xi22+/xZdffoktW7ZAKBTi+uuvx+TJkzFu3DgIhUJ89913mD17NhISEjxmWVVUVCA5ORnbtm3DkCFD2OXPPvsstmzZ4rS9VqvFgAED8PHHH+P6668HAEyZMqXNaSmz2Qxzi+YsTU1NSE1NdTstdfHiRSQnJ7f3kIQEXPO57GwZBBpBm+nfr/7xKv65858AgBnFM/DSNS/5y7wuobaqFjHxMYE2wyMWuwVmmxlioRgamaZTfaF8cV0zrQ10OjpAGKBHWI4dA959F/i//3NcPzaWLr43eTIdM+OKllWFw8Ppgn2+KL7HtfsY4J7PXPPXGzo0cvP999/jyy+/xPr162EymVBUVIRFixbhrrvuQnSrSlO333476uvr8fjjnlNmY2JiIBKJ2F8CDFVVVUhw0RWurKwM5eXlGDduHLuMKUctFotx/PhxZGVlOWwjk8m8qgsgErUdpBiKcMlnilAwU2aECd03yNRZdPjiwBcA6M7fDxU+5C/zugxhkJeutdgtMFlNkIgkiJRHQiVVdbogX2eua4qiRYhWSwf3AnQMzJEjwDvvAD//7Lh+XFyzqFG66eJhNtMvqZQWQUolXbfGV3DpPmbgms9c89cbOiRubr31VqSmpmLmzJmYPHkyevXq1eb6eXl5uOeeezzuVyqVorCwEJs2bWLTuSmKwqZNmzB9+nSn9Xv37s0OZTK8+OKL0Gq1+Oc//4nU1NT2O+WGs2fPuhRWoQyXfDbZTKi8UInYuFi366w8tBJNZjo2a3yf8UhQd/9jU3mhElGxUYE2wwlG1IhFYkQponwiahg6cl3b7Y6NLIVCWoQcOAC8/Tbw66+O6yckAE88Adx7Lx0n4wp/VRXm0n3MwDWfueavN3Tolvrtt98wfPjwdq9fXFyM4uLidq07a9Ys3HfffRg0aBCKi4uxaNEi6PV6TJ06FQAwefJkJCcnY+HChew8aUsi/lcgovVyHh5X6C16CAQCtyndVrsVi/csZv9+vKh7Fu0LdrpS1HQEm40WNUzmk0gEqNV0b6e33wZ++81x/aQkWtTccw89ouOKllWFo6JcVxXm4eHxDR0SN94IG2+ZMGECampq8NJLL6GyshL5+fnYsGEDG2R87tw5vw6pDxgwwG+fFSxwxWezzQy9VY+s3llu1/n++Pe4qKUDSUdnjkbvmN7+Mq9Lycp177M/sdqtMNlMEAlFiFTQbRO6StS057q2WulYGqbnk1RKi5pdu+jpp82bHddPTgaeegqYONF97RmbjRY1AgEdU6NWt118z1dw5T5uCdd85pq/3tChgOIXX3wR69evd5uhNHDgQNxyyy2YN29eZ+3rcjzVuSkpKUFubm4ALAscXPG53liPBlMD6s7XIS07zel9QghGLB+BozV0xse6CetwVY+r/G1ml3D21FmXPvuLlqImTBoGlVTV5an1bV3XLXs+2Wy0UJHJgO3baVHzxx+O66em0qLmrrvcCxVmSgugU77V6vYV3/MVXLmPW8I1n7nmrzd0aOTm22+/xa233ur2/RtuuAFr1qzpFuLGE57q4IQiXPDZRtmgs+ggE8ug1+pdrrPl7BZW2OQn5OPK1Cv9aWKX4s7nrqalqImQR/hF1DC0vq6ZRpY6Hf0ihJ5SUiqBv/6ip5/++stxHz160KJmwgT3ooai6Fo1AD31FBbmfqqqK+HCfdwarvnMNX+9oUPi5ty5c05ZSC3JyMhg8+C7O/JAPJUCDBd8NlqNsNqtUEgUkMld/5xu2Wrh8aLHu22rBVe487mrYESNUCBEuDwcaqna70UQmeuaaWTZOvNJJAL+/JMWNa1rhqan00X37rjDfZwMRdH760xVYV/Chfu4NVzzmWv+ekOHxI1arW5TvJw5cyZkDnrfvn0DbYLfCXWfKUJBZ9GxsR3pPdOd1jlcdRibz24GAKSFp+HGnjf60cKux5XPXUEwiBqG3Ny+bDyN0UiLDoWCzoD64w9a1LQuxZWRAcyaBdx+u/uMJkYs2e3NoqYjFYV9Tajfx67gms9c89cbOhSZO3z4cPzrX/9iK3a25Pz58/j0008xYsSIThsXDDBVhLlEqPtssplgtpshF9MC/Pih407rtGy18OigR70q898dcOWzL7FRNujMOljsFoTLw5EYlogoRVRAhI3NRguabdv2oqqKzn5SqejXli3A2LG0eGkpbLKygI8/BrZto+NqXAmbliNAEklzqwSlMvDCBgj9+9gVXPOZa/56Q4ee2AsWLEBxcTH69u2LBx54gFWPR44cwdKlS0EIwYIFC3xqKA+Pr9Bb6HgTd9NMF5ou4LvS7wAAUYooTOw/0W+2dXdslA0mqwkCgQBhsjCopWrIxP6dAmOwWunYF62WFjRAcy+nTZvoQOHW3w05OXT37ltuabugXsuqwoygCfK6iDw8nKJD4qZXr17YunUrZsyYgX/84x8O7w0bNgzvv/9+yERwJyUlBdoEvxPKPpttZhisBnbUBgBiEhzbEPxrz79gJ3YAwP3590MpcVNithvT2ufOwogaCBBwUWM2N4sau50O/NVogNjYJGzcSIua1v0Ge/WiRc1NN7Utarq6qrAvCeX72B1c85lr/npDh8faBwwYgC1btqC2tpZt5paZmYmYmODvV+MNoRI75A2h7LPRagRFKIdpJmmLtJcGUwNWHFoBAJCL5XigwHOn+e6I1EeFVmyUDUarMeAjNUzmE5POTVH0qIpSSb+3YQPw5psJ+F9fQZbcXFrUjBvX9siLxULvXyzu2qrCviSU72N3cM1nrvnrDZ2+PZnOvKHK6dOnERvrvjR/KBKqPtsoG3RWnVPcR8W5CkRERwAAlh1YBr2Vnra6q+9diFGG5rXd0ueO0FLUaGSagIoao5EWNEz6tVxOCw+KAn76iR6poUVNc5pT3760qBk7tm1R07KqcGRk96oqHKr3cVtwzWeu+esNnRI3Fy5cwP79+9HY2Mg2rGzJ5MmTO7N7Hh6fYrKZYLFZoJG77v5ttpnx2b7PAAACCPBI0SP+NK9bYKfsMNro/OlAihom7Zrp+QTQGUoiEf3ejz/SXbqPHnXcrn9/4Omngeuua1vUBKqqMA8Pj2/oUIVik8mE++67D//5z39AURQEAgGY3bQM0rTb7b6ztIvwVKFYr9dDpVIFwLLAEYo+E0JQpauChbI4xdAYDUYolAqsPLQSM3+eCQAYmzMWy25ZFgBL/QPjc3tpKWrUEjXUMrVD3JK/sNub42lMJnqERi6nhQpFAT/8ALz3HlBS4rhdXh4wY4YJN90kbzOTKdBVhX1JKN7HnuCaz1zz1xs6FN//wgsvYO3atXjttdewefNmEEKwfPly/PLLL7j++uuRl5eHgwcP+trWgHDhwoVAm+B3QtFnk80Eo83o8gu5trIWFKEc0r+nFzt3oQ8laitr27WenbJDZ9HBaDVCJVEhQZ2AGFWM34WN1Qo0NgKXLgE1NbQICQtrjqn57jtg2DBg2jRHYTNwIPDll8DGjUBBwVm3woai6Kkto5GeekpIoGNruquwAULzPvYE13zmmr/e0OH2C1OnTsVzzz2Hy5cvAwCSk5MxcuRIjB49GiNHjsRHH32ETz75xKfGBoKGhoZAm+B3QtFng9UAgUAAocBZz2sbtdhYthEn604CAAYnD8agpEH+NtGvaBu1bb7PjtQQQCVVIUwWFpCRGoulOUjYaqXFBjPAarfToua994CTJx23Kyykp59GjWquOaPVNjjtv2VVYaWyuVVCMNSp6SyheB97gms+c81fb+iQuKmurkZxcTEAQKGgh7b1+uZeNePHj8f8+fNDQtz4KqukOxFqPlvsFugsOrdfzhKpBB/u/pD9O9RHbQDaZ1e4EjUykcyvrSfcZT7971EDmw1Yu5YWNWVljtsWFQHPPAMMH+4sUCSS5us6WKsK+5JQu4/bA9d85pq/3tAhcRMfH8+O2CiVSkRGRuL48eMYN24cADqOxcRE+XVz8vPzA22C3wk1n41WI+yU3W2V4cbIRuy4sAMAkBOVg2uzrvWneQEhu0+2w9/BImpMJlrQ6PXNPZqYlGubDfj2W1rUnDnjuO3gwbSoGTbMvUDJzs5nP8NqpfcdHR08FYV9Tajdx+2Baz5zzV9v6FDMzeDBg/Hnn3+yf48bNw5vv/02vvzyS6xYsQL/+Mc/cMUVV/jMyECya9euQJvgd0LJZztlh9aibTOj542Nb7D/f7ToUZdTV6FGyQE6MKV1TE28Oh4xSjqmxl/ChqJoMVNVBVRW0v9XKOgpIrGYFiJffgkMGQLMmOEobIYMoUdxfvwRuOaatkXK0aO7oNXSwcdxcUB8PB1fE4rCBgit+7i9cM1nrvnrDR0auXniiSfwzTffwGw2QyaTYcGCBdi+fTsmTZoEAMjKysL777/vU0N5eDqCyWaC1W6FWqp2+f7p+tP4o/oPAECcKg539LnDn+YFFJ1FBxBAKVUiTBrmV0EDNGcmNTXR01BCIS02mBRtiwVYswb45z+B1n16hw6lY2quusrz5zBVhYHgryrMw8PjGzokboYOHYqhQ4eyf6empqKkpASHDx+GSCRC7969IQ728p3tJCEhIdAm+J1Q8ZkQAq1ZC5FQ5PZLe/GexSCgyxhMK5gWkKBZf0IRCgarAapIFZSSwIgam41O525qogWMREKnXDMmWCzAqlW0qDl/3nHbYcNoUTNkiOfPaV1VGEhge0txgVC5j72Baz5zzV9v8FqBGAwG3HvvvRg/fjzuuecedrlQKEReXp5PjQsG1GrXv/hDmVDx2Ww3w2QzQSl13Ruq1lCLVUdWAQCUEiWm5E/xo3X+hRE1hBAoJUokRiciVhnrV1ED0GKjtra5P1NYWLOoMZuBr76iRc3Fi47bDR9Oi5rBgz1/hruqwjZbaFzX7SVU7mNv4JrPXPPXG7wOLlAqlfj1119hYGqdhzinTp0KtAl+J1R81lv0gABuY2iW7l8Kk40OfJ80YBIi5BF+tM4/UISC3qKHwWqAQqxAvDoecao4nC8/73dhQ1FAQwMtPjSa5pRrkwlYsgQoLgaefdZR2IwcCfz3v8A333gWNjYbHYxssQAREXStmoiI5nYJoXJdtxeu+Qtwz2eu+esNHZ6W2r59O6ZNm+Zre3h4fILVboXeqodM5DqQ2GA1YMn+JQAAkUCEhwsf9qd5XQ5FKBitRhAQKMQKhMnCoBAr/C5oWqLV0sHCzNSQ0QisWAF88AEdSNySv/2NHqkpKPC831CqKszDw+MbOiRuPvzwQ4wZMwYvvvgiHnnkEaSkpPjarqAhNzc30Cb4nVDw2Wij079bt1pgWHV4FeqMdQCAG7NvRGp4qj/N6zIYUUMRio6pcSNq/H2OTSZ61EYup4XIv/9Ni5rqasf1xoyhRU17MlwpqrlZpkrVXIDPHaFwXXsD1/wFuOcz1/z1hg6Jm7y8PNhsNixcuBALFy6EWCyGrNVPJYFAgMbGRp8YGUiqqqpc9pwKZbq7z3bKDq1ZC4nIfaG6xXsWs39PTJ/oL9O6jJaiRiFWQCPXtDlS489zzExHURSwbBmwaBHdQqElN9xAd+keMKB9+zMa6X9bihpPg1Ld/br2Fq75C3DPZ6756w0dEjfjx48P6PC2P6mrqwu0CX6nu/tssplgtpsRJnWdGrP+5HqUN5YDAK5JuwaJJNGP1vkWQggMVkO7RQ2DP89xUxM9wvL558DChY7vjR1Li5r+/T3vp7NVhbv7de0tXPMX4J7PXPPXGzokbpYtW+ZjM4KXUElp94bu7DMhBDqLDiKB6/RvQgg+2vUR+/fjRY9DrOt+/hJC2Kk3NqZGomh3AUJ/nWNmOur0aeCdd5qXjxtHi5q+fT3vw1dVhbvzdd0RuOYvwD2fueavNwgIISTQRgSSpqYmhIeHo7GxkR/eCwFMNhMqtZVQSBQQCZ0rtf11/i/csvoWAEDf2L74/b7fu9UoZGdFjT+x2+npp6Ym4LbbgKNH6eVPPQXMndu+fZhMdPaTTAaEh9OiRhh8rvLw8AQZHZJ9//73v9u13uTJkzuy+6Bi165dbJNQrtCdfTZY6QhTV8IGgNOojUAgQMnBEuTmBXdgHiNqbJQNSrESYYrOiRp/nGOtlp6O+vTTZmGTm0sHDHuCqSoslfquqnB3vq47Atf8BbjnM9f89YYOiZspU6a4fa/lr+BQEDdcHNjqrj5b7VboLDq3faSO1x7HxtMbAQDJYcm4pfctAABCBa+/LUWNQqxAtCLaJyM1XX2OjUZ6OurkSTqAGKArBX/wQdtp2q2rCqtUzY0zO0t3va47Ctf8BbjnM9f89YYOPTbOtG7JC8But6O8vBwff/wxzp07h+XLl3fauGAgNjY20Cb4ne7qs8lmokc23KR/f7S7edTmkUGPsNlUkTGRfrHPG7pK1DB05Tm222lhY7HQU1B2O7185kzAXRFzq5UWRGIxXVVYrfadqGHortd1R+GavwD3fOaav97QocdHWlqay+WZmZkYOXIkxo4diw8//BAfffSRy/W6E5GRwffF19V0R58pQqHJ3ASJ0HX6d6WuEt8e+xYAoJFpcO+Ae9n31JrgKWFOCKGbfVJWyMVyRCmioJQofR5T05XnuKmJFioffQSUltLL+vWjhU5rbDZ6XaGwWdRIXJ/CTtMdr+vOwDV/Ae75zDV/vaFLQvNuvPFGrFmzpit27XdOnDgRaBP8Tnf02WQzwWK3uG18+eneT2GlrACAKflTHLqEnz993uU2/oQQAqPVSGd6CUWIU8UhQZ0AtVTdJcHCXXWODQagsZEWNR9+SC+TSOj/S6XN69ntdKsEk4lO6U5MpMVNVwkboHte152Ba/4C3POZa/56Q5fkkZWVlcFsNnfFrnl4nGDSvwUCgcvMJ61Zi+UH6WlSqUiKaQXB0zaEGamxUTbIxDJEKiK7ZKTGH9hs9HSU2Qw8+SRdZA+gA4iZlG9C6BYMQPuqCvPw8PB0hA6Jmz/++MPl8oaGBvzxxx94//33ccstt3TGrqChV69egTbB73Q3ny12C9sY0hUrDq1Ak7kJAHB7n9uRoE5weL9HVo8ut7E17PST3QqZWIZYVSwUYtfp611BV5xjrZYeifnnPwGmn19+PvDEE83r6PW0mAkPb19VYV/S3a7rzsI1fwHu+cw1f72hQ+Jm+PDhbgukiUQi3HHHHfjggw86bVwwUFdXh4iIiECb4Ve6m88Gq4G+9lwIA6vdin/t/Rf79+NFjzut09TQ5Le4G0IIzHYzLDYLZGIZ4tRxfhU1DL4+x8x01OHDwOL/dbaQyejpKCYw2GKhxUxERGBGa7rbdd1ZuOYvwD2fueavN3RI3Pz+++9OywQCASIjI5GWlhZSxfBqamqQmZkZaDP8Snfy2UbZ2kz//q70O1RoKwAA12Zdi57RPZ3WabjcgKQeSV1qZ2tRE6uKhVKi9LuoYfDlObbZgPp6etRm5kx66gkA5swBmB+WFEVPV0VHB24aqjtd176Aa/4C3POZa/56Q4fEzTXXXONrO4IWIQfLoXYnn43W/6VLS5ynpFy1WnBFV/trspmCRtQw+MpnQugRG7MZeO89gKkSUVQEPPpo83p6PR1jow5gYlp3uq59Adf8BbjnM9f89YYOtV84c+YMjhw5gnHjxrl8/8cff0T//v2Rnp7eWfu6HL79QveFIhQqdZV0KwIX4ua3M79hwrcTAAAFiQXYcM8Gv7ZaaClqNDJNUIgaX6PXA9XVwP79wPjx9DK5HNi8GcjKov82mWgRFB/vmDHFw8PD01V0SPY9/fTTeP/9992+/9FHH2HOnDkdNuqjjz5Ceno65HI5Bg8ejF27drldd+3atRg0aBAiIiKgUqmQn5+PFStWdPizW7Nnzx6f7au70F18NtlMMNvMbtO/XbVacMXxw8d9bpfWrAUAxKpikaBOQJgsLKiEjS/OccvsqJkzm5fPndssbOx2ukBfZGTghU13ua59Bdf8BbjnM9f89YYOiZvt27fjb3/7m9v3R40aha1bt3bIoDVr1mDWrFmYN28e9u3bh7y8PIwZMwbV1dUu14+KisLcuXOxfft2HDp0CFOnTsXUqVPx888/d+jzW2NnyqtyiO7is96id5v+fbDqIP44R2f1pUekY2zOWLf7sdt846/ZZmazsmKUMUhUJwadqGHo7DluOR315pvAuXP08iuuAB56qHk9g4GeilKpOvVxPqG7XNe+gmv+AtzzmWv+ekOHxE19fT3CwsLcvq9Wq3H58uUOGfTee+9h2rRpmDp1Kvr06YPFixdDqVRi6dKlLtcfPnw4br31VuTm5iIrKwtPPvkkBgwYgD///LNDn9+a6Ohon+ynO9EdfDbbzNBb9W5HbT7e/TH7/8cGPdamwAiPDO+ULYQQaM1aEBDEKGOCcqSmNZ09xwYDnfq9Zw+wbBm9TKkE3n+/uWu30UgX5YuI8G/Ktzu6w3XtS7jmL8A9n7nmrzd0SNz06NEDf/31l9v3t27dipSUFK/3a7FYsHfvXowePbrZQKEQo0ePxvbt2z1uTwjBpk2bcPz4cQwbNszlOmazGU1NTQ6vtoiLi/POiRCgO/hstBpBCIFY6BwTf77xPL4v/R4AEK2Ixl397mpzXxHREZ2yRW/VQyFWIEGdAI1M49KmYKMz59hqpbOj9Hpg1qzm5fPmARkZ9P/tdnraqqurDntDd7iufQnX/AW45zPX/PWGDj2FJ06ciAULFqC4uBjTp09nI7btdjs+/PBDrFmzBnPnzvV6v7W1tbDb7YiPj3dYHh8fj1KmSY0LGhsbkZycDLPZDJFIhI8//tjttNnChQvxyiuvOC3fs2cPVCoVCgoKUFJSAqPRiLCwMDQ0NEAkon+Bp6WlgaIonD9Pl+vPz8/HqVOnoNPpoFKp0LNnT+zfvx8AkJKSApFIhLNnzwIABgwYgPLycjQ1NUEul6Nv377Yu3cvACApKQlyuRynT58GAPTr1w8XLlxAQ0MDpFIp8vPz2bijhIQEqNVqnPpflbTc3FxUVVWhrq4OYrEYhYWF2LVrFwghiI2NRWRkJFuiu1evXqirq0NNTQ2EQiGKioqwZ88e2O12REdHIy4uDiUlJaivr0dxcTGamppQVVUFABg8eDD27dsHq9WKyMhIJCUl4ejRowCArKwsGAwGXLp0CQAwaNAgHDlyBCaTCeHh4ejRowcOHz4MAEhPT4fNZsOFCxcAAAUFBSgtLYXBYIBarUZWVhYOHjwIgBbRAHDuf3MeeXl5KCsrQ5O2CZAASRlJOLb/GAAgNjEWYrEYl85fwgfHP4Cd0MO1NyXehIpTFcjomYHSQ/Q1FBMfA5lchotnLwKgr9vI6Eg0NTRBIpUgp28Ou9+o2Cgo1UpcOEPbm5adhobLDWisb4RILEJGnwyUHy2HVCiFId6AqKgoHD9Ox/D07NkT9fX1qKmpgUAgQHFxMfbu3QubzYaoqCjEx8ejpKQEAJCdnQ2dTofKykoAQHFxMQ4cOACLxYKIiAikpKTgyJEjAOgebiaTCRUVdIp7YWEhjh49CpPJBI1Gg/T0dBw6dIi9Zu12O3u8Bw4ciBMnTuDChQtITU1FdnY2Dhw4AABITU2FUCh0uGbPnDkDrVYLhUKB3Nxc7N27D1YroFIlY+HCaFy8SAdyX3WVHSNHnsKxYw2QSmWIixuAixd3o6oKSExMgEqlQllZGQCgT58+qKysRF1dHSQSCQoKCrBz504A9MM6PDwcJ0+eBAD07t0btbW1qK2tZa/Z3bt3g6IoxMTEICYmhn025OTkoLGxkZ3CbnnNRkVFobq6GuL/Fd3JysqCXq9nj3dRUREOHToEs9mMiIgIpKamstdsRkYGLBYLLl68yF6zLZ8RGRkZDsc7WJ4Ru3fvRmRkZJc8I5jjHWzPCLvdjvDwcOh0OiiVSvTu3Rv79u1jj7dYLEZ5eTkAoH///jh37hwaGxshl8vRr18/NoYlMTERSqWSvWb79u2LiooK1NfXO12z8fHx0Gg07DWbm5uL6upqXL58GSKRCIMGDWKv2djYWJ8+I3bs2IHw8PAueUbo9Xqo1ep2PSP69OmDYKND2VJmsxljx47Fb7/9htjYWLZK4vHjx1FTU4Phw4fj//7v/yCTua494o6KigokJydj27ZtGDJkCLv82WefxZYtW9iLqTUUReH06dPQ6XTYtGkTFixYgHXr1mH48OEubW/ZGqKpqQmpqalus6V27tyJwYMHe+VHdyfYfdZZdKjWVUMjdz5fDaYG5C3OYysW7394P6KVbQ/dHtt/DH0Gen9zMtNRUYooRCgivN4+kHT0HOt0QE0NsG0bcO//eo+qVMDWrUBqKv23wQCIRHR2lK87e3eGYL+ufQ3X/AW45zPX/PWGDj16ZDIZfvnlFyxfvhxr165l1W1xcTHGjx+PyZMndyj/PiYmBiKRiP0lwFBVVYWEhAQ3W9FTV9nZ2QDoX0olJSVYuHChS3Ejk8m8El05OTntXjdUCGafCSHQmXUQi1xful8c+AIGqwEAcFe/uzwKGwBIyfB+ChWgp6NUUpVLkRXsdOQcW610dpReT/eLYliwoFnYWK10wb6YmOASNkBwX9ddAdf8BbjnM9f89YYOVwASCoWYOnUqfvzxRxw7dgzHjh3Djz/+iClTpnS4sJBUKkVhYSE2bdrELqMoCps2bXIYyfEERVE+a9zpKSYnFAlmn002E4w2o8tAYpPNhM/2fgYAEAqEeHTQo07ruMKgM3hth9lmhlAgRIQ8ols2ufT2HBNCCxurlRYz/xsZx4gRzSM4hNBBxOHhdHBxsBHM13VXwDV/Ae75zDV/vaFDT+W6ujp2vs4Vhw8fRn19fYcMmjVrFj777DMsX74cJSUlePTRR6HX6zF16lQAwOTJk/H888+z6y9cuBAbN27E6dOnUVJSgnfffRcrVqzAvcwTt5O0HkXiAsHsM5P+7UpQfHP0G9QYagAAY3PGIiMyo137rKup88oGilAw282IlEe6bfsQ7Hh7jvV6ekrqjz+Ar7+ml2k0wKJFzZlQej0taoK1FmYwX9ddAdf8BbjnM9f89YYODRzPnDkTx48fx44dO1y+//DDDyM3NxdLlizxet8TJkxATU0NXnrpJVRWViI/Px8bNmxgg4zPnTvnMDKk1+vx2GOP4cKFC1AoFOjduzdWrlyJCRMmdMQ1niDGYre4Tf+mCIWP9zSnf08vnt5ldhgsBoRJw6CWBrCXgB+xWOjsKJ0OeOaZ5uWvvQYkJTWvwzTFFAVvBjwPDw9H6FBAcWpqKh599FG88MILLt9fuHAhFi9ezEZUBzN8+4XuQ4OxAXXGOpcxLv938v8wed1kAMCQlCH4YeIPXWKDyWYCIQTx6nhIRaHfS4AQoLa2Oe37u+/o5ddeC6xcSQsaQuiaN9HR9JQUDw8PT6Dp0LRUTU0NYmJi3L4fHR3ttqJwd4NJI+QSweiznbJDZ3Xf/fvD3R+y//d21Obk0ZPttsFqtyJSEdnthU17z7FORwuXTZuahU1EBPDuu47TUSoV0EZdz6AgGK/rroRr/gLc85lr/npDh8RNYmIiW6vBFXv37kVsbGyHjQomrFZroE3wO8Hos9FmhNVudSkqdl/cjV0X6RofPaN7YnTmaKd12sJqaZ+/eoseGpkGKkkQ9BLoJO05x2YzPR2l1QLPPde8/I03ACZ50WymKxJHRDRXJg5WgvG67kq45i/APZ+55q83dOhxdMstt2DJkiX44Qfnof/vv/8eX3zxBW699dZOGxcMREZGBtoEvxNsPjPp3yKhyGUfqY92OzbI9DZ7SRPheTrSYDWw3b392Vm8q/B0jimK7h1ls9GNMJluKmPHArfd1ryO2UxXIfaypFVACLbruqvhmr8A93zmmr/e0KGYm8bGRgwdOhTHjh1DXl4e+vXrBwA4cuQIDhw4gD59+uDPP/9ERESEr+31OZ5ibnQ6HdRqbgSOMgSbz0arEVW6KiilSifhUlZXhiFLhoCAIF4Vj70P7fU6g8moN0KhUrh930bZYLQaEaeKg0ra/UdtAM/nuKmJFjQ//ww8+r+M+uhoulgfMyir1dJNMWNigqN3lCeC7bruarjmL8A9n7nmrzd0aOQmPDwcO3bswIsvvgir1Ypvv/0W3377LaxWK1566SW2tHcowJQP5xLB5rPBagAEcDki88meT0BAX2sPFT7UodTsMyfOuH2PEAKD1YBweXjICBug7XNsNtM1berrgRZVF/Dmm83CxmSii/QFS1PM9hBs13VXwzV/Ae75zDV/vaHDs+QqlQqvvPIKDh8+DIPBAIPBgN27d6Nv3764++67kZiY6Es7eTiK1W6F3qqHTOQsWmr0NVh9ZDUAQCVR4b68+3z++QarAXKxHBoZNzLpKIoWNnY78MIL9P8B4JZbgJtvpv9vt9PF/IKpKSYPDw9PSzpdIJ3pxP3ll1/iu+++g1arRUxMDO6++25f2BdwsrKyAm2C3wkmnw3/3955h0lSlnv7rs7dk/Pszs5szoFlo+tHkt0jcFAEVEA4R8SACnuOHoygIqgIAgKSMYAJxIRiRBF2QQSXzTnv7M6m2Z3ZyZ276v3+eLs6T+jJ01X3XHV1T1V1dT1d1VW/ft4nhH2omorHnl7y9kebf0RQlZWoP3zWhyly9S8PuWZiTcb5YTWMQFDiKhkTnb6zobtj3Nkps5/+/Gc5JAXSW3PPPfF1vF6Z8p03xhxZo+m8Hg6MZi8Yz2aj2ZsN/b5ib9y4kWeffZbnn3+exsZGFEXhmmuuYfXq1bzjHe/IiaBLAJ8v+9L8Y53RYrOqqXSFurBb090D3pCXpzc/DYDNYuOTiz/Z7/cJBtJbdQghCEQClLhKcNu7j8cZq2Q6xoGA9NS0tMBXvxqf/93vyngb+ToZPFxUNHaGo3RGy3k9XBjNXjCezUazNxuyGpY6dOgQ3/zmN5k1axbLli3jN7/5Dddddx2//OUvEULw/ve/nxUrVuSMsAE4efLkSO/CsDNabA5EAgTVYMYhqed2PEdrQLb4uGLWFdQUZva+9IXmU81p87xhL26bmwLnKC/e0k9Sj7E+HKVpMu1bb1nzwQ/CJZfI55GIXF5SMvqaYvaF0XJeDxdGsxeMZ7PR7M2GPl+iVqxYwdtvv015eTkf+MAH+OEPf8g555wDEOsKbmIyWAgh6Ap1YVXS078jWoQnNzwZ+/+mpTcN6nuH1BAKCsXuYqwWY/QS6OiQXpkXX4RXX5Xzqqrg29+Wz4WQy0tKRmdTTBMTk2FE09KnUXZh6LO4WbduHZMnT+aBBx7g0ksvxTYWf7r1gyVLloz0Lgw7o8HmoBrEH/ZnHBL6474/0tDeAMAFky5gXuW8Ab3XrAWzYs81oREIByjzlGXsYZUrJB7jQEDWtDlzBm6/Pb7Ogw/KbCiQwsbtHr1NMfvCaDivhxOj2QvGs3nQ7RUis3DRNOm6DYfjLlx9EkKOUU+aNLj7MkD6PCz16KOPMm7cOK644gqqq6v55Cc/yZo1a3Im5bs7duzYMdK7MOyMBpt9YR8CkeY5EULw2Nvxon2rlw68QWZiKrg35CXPkZezw1E6+jFW1Xh21Oc/L9stAFx7LfzHf8jn4bC8fo31ppij4bweToxmLxjP5qzsFUIKk1BI/qLx+eQXvqNDBtqdPg0nTsSnkyehsVHOb26Wv4D8filoLBZwOKS3pqBAbnuU0Wf3y0033cRNN91EfX09zz77LM899xw/+MEPqK6u5l3veheKouRUrI1OIBAY6V0Ydkba5rAapivUldFz8q+j/2Lrqa0AzKucx3kTzxvw++kBxcFIEKvFSrGrOOsqx2MN/Rh3dsrr1W9+A6+/LpfV1MA3vymfCyGXl5ZKz81YZqTP6+HGaPaC8WyO2ZvoSVHV5OeRiJz0+aqaLkYURQoWi0UG1OnPx/A9PeuxpcmTJ/PVr36Vr371q7GMKT2g+KabbuKvf/0rl112GatWrcLlGvtu/SIDtjkeaZsDkQARLZIx/fvRtxMaZC5dPSiCOr8wH01oBNUgFZ6KfhUCHGsUFRXh90uvzalTcOed8WUPPRQffvJ65Y+zsTwcpTPS5/VwYzR7IQdtzjRMpIuUSIQim016WVLX0a+LipIuXJzOwW0Ep6qDt61BpF/tF1LRNI1XX32Vn//857FaNx6Phy7dxz2K6a39gs/nwzPKAqWGmpG0WRMaJztPIhBpnpvdTbs578fSU1NbWMu6j6/LmCaeLUF/kJAlRL4jn3JPeU56IFPp6vLR1eXB74frroO33pLzr78e7r9fPg8G5Q++6uqx0TuqN4z2XTaavTDGbO4ptiXV26LHtuhTVLT4IhE8LldcvOjTUBEOw969sG1bfNq5E3bsgMmTh+59+8GgRAVbLBZWrVrFqlWrePLJJ3nxxRd57rnnBmPTI8727dtZvnz5SO/GsDKSNgciAUKqFBqpJDbI/OSSTw6KsAHYv3s/0xZMo9hVbAhhA7B583Zqapbzi1/EhU1dHdxxh3yuN8UsL88NYQPG+y4bzV4YJTb3FJSrDxOFQulBuYkkCpUehom279rF8jlzhsYOvx9275YCZvt2+bhrl9z3McCgpzy5XC6uvvpqrr766sHetEmOo6d/WxRLmsg42XmSF3a/AECxq5jr5l83KO+pamqsCvFgiaXRjt8vr68nTsBdd8Xnf+97shEmyFjDgoL4/yYmJiQLl0SvSnceF93ToqMPE1mt6cJlJOnqkt4X3Ruzfbv00PRlyGnixKHfv35gjHzuATBplKW3DQcjZXNIDeEL+3Db0iNXv7/x+4S1MAAfWfiRjJ6d/uANeamtq80Y35OLqKpsiFlSMokbb5RCB+DjH4do2SoCAXntLSoa+WvuYGK077LR7IUB2txdbMsoDsqd1J8ejq2tcU+MPh061HvGk6LAtGmwYEF8mjdPplF2dvZr/4cSU9z0QiQSGeldGHZGymZf2AeCtPTvzmAnP9n6EwAcVgcfP/vjg/Z+TpsTVVENMxzV0SHFy7PPuli/Xs6bPDnebkFvillRITM9cwmjfZeNZi90Y3N3w0SJoiW1dktvQbkOx6jIJur1GJ86lTystH07NDT0vmGbDWbOjIuY+fNh7twx5co1xU0vHDt2jJqa/pf2H4uMhM0RLUJXqAuHLf2O+tOtP6UzJH8ZXDX3Kqryqwbl/TRNozy/nO27t1NXWzfgbY52fD5ZquLoUXj4YVnHR1Hg4YfjTTD14aix1hSzLxjtu2wIe1MEybHDh6kpKpL/h0LdB+WCfEwNxB0tw0R95FhTEzUVFdKW48eTvTHbtklx0xtOJ8yZk+yRmTULxni2syluTEYF/rCfiBZJq0gcUkM8tfGp2P83LRl4qwUhBL6wjxJXiWGGoyIR6Y3WNPi//4NQSF68P/UpeMc75Dp+P9jtY7MppkkOkimupSePixAyCr6pSb6+u9iWsX5yaxrU18O2bdSuWSOD57Zvl4X4esPjkV6YRI/MjBnyi59jmOKmFxYtWjTSuzDsDLfNmtDoDHVis6Sfji/sfoGTXbI53MXTLmZ62fQBv58e11PolKn/uX6MhZAem1AIfvQj2LxZzp82DW69VT7X7xOVlTl5nQNy/zinMqrt1avl9hSUmxjbkiko12KR4iVBuCyaM2dsdnXtjkgEDhxI9sZs3x4rJT6+p9cWFycLmQUL5Bj0WC4zngU5dBYMDXv27GH+/PkjvRvDynDbHIgECEaCaUHCQggeX/947P+bl9484PcKq2EEgmJXvClmrh9jn0/G2hw+DPfdJ+dZLIJHHlFwu+NViIuKRl3vu0El149zKqPGXiHi3pZwOF7+XxcwiSTGtlgsUmln4W3Z09DA/ClThsCIYSAYhD17kmNkdu6Un1VvVFQki5gFC6C2dux7qQaAKW56wefzjfQuDDvDbbM35M3YvuOV+lfY3bwbgCXjlrC8ZmD1K4QQ+MN+St2lScNfuXyMIxFZhVjT4DOfkfcWgGuuOcmSJfJ3n88nh90LC3P7WpjLxzkTI2ZvovclUcjoacWKEq+Ua7UO6knnGyvtF3w+KVwShcyePfEvaE9MmBATMHuLipj5nvdAVVVuf3n7gSlueiF/DEWHDxbDaXMwEsQb9mbsI5VYtO/mZTcPOKPJG5ZNMQtdyZWoc/UY68NRwSB8//vyGgoyVvDmm9uA8bGmmCUlueXNz0SuHufuGBZ7E+NfQiF5soVC6ULG4Rh0IZOJ/NHoeuzokF++xPTr/fvTvVaZmDw52Rszfz6UlcUWRw4fliXETdLI8cvZwJk6depI78KwM5w2+8N+hBBp8TZbG7fyRsMbAEwpmcIl0y4Z0PsEI0EsiiVjU8xcPcY+nyw/cfAgPPCAnGe1wqOPwqRJU3KqKWZfyNXj3B2Dbm+ikAmHpUcmHI7HxegBvHa7PKFGwJMwdXyPUShDT3Nzeg2Zw4d7f53FIgN7dQGj15DppanbiNurM5a7ghuVrVu3jnw572FmuGyOaBE6Q504rOnp34+ujzfIvGnJTWm1b7JBb4pZ7inP2BQzF49xOCyzoyIR+Oxn5SPI52edBbt2baWubjkej0z9NgK5eJx7YkD2Jgb36h6ZcDgeJ5MYzOtyjZohka0HDgxdO4JEhIDGxuRhpW3bZDp2b9jtMHt2crDvnDn9CngbNntT0Qti6efDKMxCMMWNyYgRiAQIq+G0YaIjbUf4w94/AFDuKeequVcN6H18IR8FjoJBq2o82hFCesLDYXjsMdkOBmQNrltuia+jKDKhwiDJEybdkZqlFAjEa8Tov8h1IePxjJkaMIOGELLwXWrGkp5y3hNut/ziJQqZWbPGXoVMTZMXFH0cW1GkDcXF8tEUN2OPurrcL+6WynDYLISgM9iJzZp+Cj658Uk0IcejP372x9Nq32RDIBLAarFS5CpKG47SybVj7PVKcbN3ryzQB/K+9Oij8jqkaVBYWEdx8Ziv05UVuXaceyOjvXoKtj4Fg/H276oaH1oao0KmrmqABT5VVbYiSBQx27bJ4LXeyM9PHlZasEDWWxjCYLYB29sdQsTFjF6t2WaTbl6XS4oZu33UeOwyYYobkxEhEAkQVINpRfRa/C08t112lPfYPdxw9g39fg9VUwmrYSryKjIOfeUi4bDMjlJVmR2lxyx+/vNyCB9kLI7LZZzhKMOi36AyCRn9xNAL3LlcxnPhhcOwb1+yR2bHDvkF6Y3S0nQhM2nSmBODSehDkHowuM0mPU9ud9w7M4bsM8VNLzQ0NDCuP83JxjDDYXNXSBahSvWmPLPlGdljCvjQvA9R6i7t93v4wnI4Ks/ecy+BXDnGQkhhEw7LDt/79sn5Z50F//u/8nkwKK9Pra0NWCxj3+ZsyJXj3C0pKdgN+/czTvfI6K0G7PacFjINp04xLiGbKEYgALt3JwuZ3bvlF6I3qqvTM5ZqakaF16Jbe/uCHjejp59brVLEeDxxMTOGzxNT3JgMO3r379T0b3/Yz482/QiQoufTSz7d7/fwh/3YrXaKXEWGaYrp9crCpTt3ylgbkNeoRx+V1ylNk9fyigo4eXJk99VkgCQGdHZXS0YIeQLkeo5/Kl1d0gOT2Cxyz574Z9MTdXXp7QmGauhnuEmMm9G0eGZbSYk8T3LsXMkdS4aIs846a6R3YdgZapt9IR+qpqalf/9q569o8skgvffOeC8Tiyf2a/sRLUJEi1CZV4nd2nugWy4c41Aonh31mc/E40C/9CUZvwhS/BQUyNCAXLA5W8aszX1NwU6pJXPWjBk5dbPKSFtbUrbS0q1bZcxMb6nJigJTpyZ7ZObNkzf6McRZ06Z1vzAxbkZV4567wkJZQHEMxM0MhBw/8wfOwYMHmTt37kjvxrAylDarmkpXuCstJVvVVB7fEG+1sHrZ6n5tX69CXOgs7HNTzLF+jPVifaoK3/2uvLYDLF4MN0X7jOpNMYuL5bVsrNvcH8aEzfqv696ETB9SsA+eOMHcSZOGb9+HmtOn0+NjjhxJWiVjRIjVKhX+vHnJQiYHijqmHeNEMQPyS+/xyLgZXcyMobiZgWCKm17oijYoMxJDabM/4icUCaWlf7904CUOtcq78v+r/X8srF7Yr+37wj6cNmdWw1Fj/Rh3dclifdu3y0rEIO97jz4q74GqKqeKinjG5li3uT+MOpv7moKtx8lk+Qu7a6y2mxBC1otJLYbX2NjrSzW7HcvcuckemVmzcrZKZZfXK3+56OLXapVeGY8nLmbGcNzMQDDFTS94RmM57yFmqGwWQtAV7MqY/p3aaqE/hNUwQghKXCUZO4x3x1g+xqGQ9Mzrxfr0e+Jtt8ksVJDDUalNMceyzf1lRG1OTMEOh9Mzl/RGkYOYgu0ZC3n+miYr+KamXre09P5ajyfujYnGyex0OJg/Y8aQ7/aIoWlJAthjs8VTtPWhplwfiuwjihCjr27yY489xn333UdjYyNnnXUWjzzyCMuWLcu47g9+8AN++tOfsmPHDgAWL17Mt7/97W7XT6Wjo4OioiLa29spzFDqOhwOYx+FBYqGkqGy2R/209jVSJ4jLylLat2xdbznF+8BYFb5LF7/yOtZBwELIegMdVLiKqHEnd24+Vg9xpomq717vfDNb8Izz8j5y5fDiy/KH2w+n3ysqkq+5o1VmwfCsNncUy2Z1BRsm23IflmHIxHso+VGp6qyEN7Bg/Fp714pZjo7e399YWF61+spU9I+u1Fl82Cgx82EQvFhSb29hdNJWFGwj1Cri9HOqDsLfvnLX3LLLbfw5JNPsnz5ch566CEuuugi9u7dS2VlZdr6a9eu5UMf+hDvfOc7cblcfOc73+Hd7343O3fupKamZsD7s2nTJkOVbIehs9kX9qEoSlr6d5LXZmn/GmR6w148Ng+Fzp57sWRirB5jPTtq06a4sPF4ZOE+qzV+Ly0vT/8xN1ZtHghDYrMQ8YBf/SakZy6NcC2ZTfv2DW9pfiGk2j54EA4ckMFf+vPDh+Vn0xfKy9OFTF1dn27gw27zYKMLY73ejH7u5OfL80dP0Y5+FpvWrTPc97ivjDpx88ADD/CJT3yCG26QxduefPJJ/vznP/P000/z5S9/OW39Z599Nun/H/7wh/z2t7/llVde4cMf/vCw7LNJ74TUEF2hLpzW5EDiAy0HeOnASwCMyx/HlbOv7Ne2FRSK3cUD6kE1lggGZXZUKAT/93/x+V/7mvxBK4T02pSU9KtljUl3pNSSyZiCbbPJIYJc8iAk4vXGhUvq1JdKvonU1CSnXi9YIOvKGMkToQtjvQFcYvE8u10KGoMEAQ8mo+rbFwqF2LhxI7feemtsnsViYdWqVbz11lt92obP5yMcDlNamrn4WzAYJJhQuKmjo6PH7U2YMKFP75tLDIXN/rAfTWhpqdmPr38cgRwZvXHxjVlXEhZCEAgHKPOUpdXN6Stj7Rhrmoyz0TT49rfh2DE5/5xz4KMflc+9XilqumsqPNZsHgyytjkxBTu1eaReFM9mS0vBHi1MqKjo/4sTh5FSvTAnTmS3LadTKu4pU2T69bRp8cdurtP9ZUA2DxepTSf1c6iwMO6Z6aMw7vacFlp8IuW5FgEs4CgadefsYDKqxE1zczOqqlKVUjSpqqqKPXv29GkbX/rSlxg/fjyrVq3KuPzuu+/mzjvvTJu/YcMG8vLyWLRoEbt378bv91NQUEBBQQHr1q0DYOLEiWiaxtGjRwFYuHAhBw4coKuri7y8PGbMmMHmzZsBedJZrVaORFMVFyxYwOHDh+no6MDlcjF37lw2btwIwPjx43G5XByK5vDOmzePY8eO0dbWhsPhYOHChbz99tsAVFdXk5+fz4EDBwCYPXs2p06doqWlBZvNxuLFi3n77bcRQlBRUUFJSQn7oqVqZ86cSUtLC01NTVgsFpYuXcqGDRtQVZWysjIqKyvZvXs3wWAQt9tNR0cHp06dAmD58uVs2rSJcDhMSUkJ48ePZ+fOnQBMnToVn8/HyWhluCVLlrBjxw4CgQBFRUVMmDCBzVvk51JTV0MkEqHpZBMtwRZ+tfNXAHisHi7Iv4BQMMSBXdK2qhp5Hpw6Lvdh2pxpnGg4ga/Lh8vjom5KHbu378aqWLFPtBOwBzh8+DAA8+fPp6Ghgfb2dlwuF/PmzWPDhg0AjBs3Do/Hw8GDB+X7VFWxb98+WltbsdvtLFq0KHbMq6qqKCwsZP/+/bHP+/Tp05w5cwar1cqSJUtYv349mqZRUVFBaWkpe/fuBWDGjBm0trbS1NSEoigsW7aMjRs3EolEKC0tpaqqit27d0vbpk2jq6uLxmhGyLJly9iyZQuhUIji4mImTJgQiyurqprCmTMBXn3Vy89+JovYeDwqq1dv4+hRF+Xlk6iv34bTCTARVVU5FlVAZ599Nvv27aOlpYW2tjamTZvGli1bAKitrcVisSSds/X19XR2duJ2u5k9ezabNm2Sx7GmBofDQX19fezzPnr0KG1tbTidThYsWMD69etj52xeXl7s854zZw6NjY20tLSkfd6VlZUUFRXFPu9Zs2bR3NxMc3Nz7JzVP+/y8nLKy8tj14bp06fT3t7O6dOn087Z0tJS7HZ77H2mTp2K1+uNfd5LFy1i27ZtBAMBivPyqC0pYXt9PQjB5LIyQqrK8fZ2UBQWzZzJ7oYG/IEABXl5TK6uZlv0OzaxuhpNCI5GvzcLp0/nwLFjdPn95LndzJgwgc1R2yZUVmK1WDgS3YcFU6dyuLGRDq8Xl9PJ3EmT2Bg9l8aXl+NyODgUFRbzJk/mWHMzbZ2dOOx2Fk6bxtvRc6m6rIx8t5uDJ05wrKmJ2ZMmcaqlhZaODnmNmDGDt3fvRmgaVUJQduoUTZs24Tp6lIrmZsTBg9iOHsWiV67tA0JRUCZMoKO6Gt+ECVimT6dgwQL22GyEKiuZWleHLxjkZHMzAEtmzWJHfT2BxkaK8vOpq6pie/T8mDRuHJFIhGPRxpSLZsxgT0MDvkCAfI+HqePHszV6/dN7KzVEP+/xFRXsPHyYLp8Pj8vFrLo6NkWPzYSKCmw2G4ej16n5U6fScOoU7V1duJxO5k2ezIbouTSuvByP08nBaJfvuZMnc+LMGVo7OuQ5O30666IdaatKSyn0eNgf/Y7NnjiR021tnGlvl9eI6dNZv2cPmqpSkZdHaX4+e5uawGplxtSptHZ10XTyZO/XiKlT6erqjJ6zgmWLF3Lk8CGONRymuCifCdWl7NhzCARMqasgEAxx4lQrIFg8byI7958kEAxRmO9iUm012zbvAUVh4sTM1wiv10t+fn6frhFzRuFQ4KgKKD5x4gQ1NTW8+eabrFixIjb/i1/8Iq+99lrswtQd99xzD/feey9r165lwYIFGdfJ5Lmpra3tNqB4nQHHNAfbZm/IyynvKQocBUnxNN/+57d58N8PAjLW5o4L7shqu8FIEFWoVOVVpdXNyYaxdIwDATh1Sg45rVwZrzR8//1w/fXSodDZKX8QFxd3v52xZPNgEbM5MQU7sZZMYuaSXkvGZhuzv27X7dol408yDSMdOCAfe/Fcp1FSIj0uqV6YyZNHRbp1zOaRpLumk253etNJIQDRs5dFiwBqyjoChGDdtnqWnzUZhCK3p1gA/dEiH1MbBmshuQ33+PRlOcSo8tyUl5djtVpj3gKdU6dOUV1d3eNr77//fu655x7+8Y9/dCtsAJxOJ05n/2+EJtkhhKAr1IVVsSYJm65QF89skVGwNouNGxffmNV2NaERVINUeCoGJGzGEpomQxqEgDvvjAubCy4APbzM64W8vO6HowxB4u+11BTs06cz15IZo12wY0QicPRoXLQcOsSsrVtlbZiBDCMlDiFNnTrow0g5Q2rTSasV3E5wOsBuA5tVVhgUGmg+CEZARECoJIub6Dmpn8KKQkykoIBiSxAu0f9tZgfcTIwqceNwOFi8eDGvvPIKl19+OQCapvHKK6+wenX3FWvvvfde7rrrLv72t7+xZMmSQd2n+fPnD+r2xgKDaXNQDeIP+/E4kqNan9v+HG2BNgCunH0l4wvGZ7Vdb8hLgaOAfMfAq4yOlWPc0SHFy5v/Evzyl1IoFhQIHnpAoAgIBsCCoLgALAJQSb/RR5k/e3Zy9kqqA7en//u7LPV/PZso0//9XZbp/aJVDOdXVMRLNY9FISMENDVlDuStr483QIxS1NO2FAUmTJCCRZ90AVNTM2YLv82fOnXoNp7oZVHDEIp6/NDAooDNAnkOsFvkndUSBoKgCQgK0H/bZfKyKDZ5PmbpSZk/ewjtHeOMKnEDcMstt3D99dezZMkSli1bxkMPPYTX641lT334wx+mpqaGu+++G4DvfOc73H777Tz33HNMmjQpNoaen59P/iCU125oaGCW3pzHIAymzd6QF4FISv+OaBGe3PBk7P+bl2ZXtC8QCWCz2AatKeawHGMhZECq7jXI8uYdCEB7swVfF3zulgpA3ny++bk2aqx+tBMQ9CpUlKo4z+i//roXFg0nTzKrJ2/oYIxW63U5uiObZYn/Z7NM76djtcrj3N8OysOJPoyUGsjbn2Gk0lIpWBK9MKNoGGmwaTh1ill1ddm9SAhiw0FJw0ICNBWISDETDkA4AmoErIr0xnjc0jNjd4DNTrKXxZLsZRkCGo6fYta0LO01CKNO3Fx99dU0NTVx++2309jYyMKFC3nppZdiQcYNDQ1YEn5xPfHEE4RCIT7wgQ8kbefrX/86d9xxx4D3pz3b1MYcYLBsDqthvGFvWhbTH/b+gaMdMij7wskXMqei72PkqqYSVsNU5FVknVnVHUN2jPVqooGADJJJLMSVxQ1a1RTa2iwITXDHd4s53SyFzapzA1x7ZRAUCz4fFBRCfpE1/guxh/doD4WSc8R7Egg5Qvtoar+QOoyUOPV3GCnFC7MxEmFxQuyiEYgd40QvS6pwQcg4lm6HhUR0ODMMERXUaFsDu1NWAna4wOGUEyP7XWnvyOKcDrWD7yh4D8vH6Z8EV3rtuFxh1IkbgNWrV3c7DLV27dqk//XsmKHCNRZKmA8yg2WzP+InokWSGlgKIXj07Udj/69eml2DTG/IS5GriDx73qDsIwzyMU4UNF6vdFsLMaChkM52BZ+m8Nrbdn77F/lru6hQ48Fv+VAcdgJBsLqhqEyg9FHvuZzOsTcsM0Bcwx1rlziMlKmoXRbZSCgK1NZmTqeuqcl4LG3R7KOcohcvi8smIHCKWNBtoqBJQkn2qihWOYwb0UCNBgHb86DAmdJBe3R9Z1yu6DktNAg2ge+YFC5Jj9HnkZRK0JXn5LS4GVXZUiNBb+0XVFXFOkbHn/vLYNisCY2TnScRiCTPzetHXuf9v3o/AAuqFvCP//5Hn4eWfGEfVsVKVX5VVr2jemPA9mpavMS+1xuPZRmEAlx+P5xqUujqUnjXFcU0t8htPX5vJx+8LISqgs+vUFGmZdXkWNU0rAYTN0Nms9cb97row0n6//0dRkqNhZk0KethpDFzjLPxsujzEr0sCahCkYU8YyKkm4whiAeaJzaddDjA7YkONdlhtBQF1cLgP5EmXoTvGIr/GPiOgxbsfTuJvOPHMOX6Idnd0cCo9NyMJjZs2GC4lNnBsNkf9hNSQ2kBv0lem2Wr+yxsIlpE1jbJLx9UYQP9tFdV0z00IC+I+fmDMrSjqtDeoSAE3PbtvJiwuWRliA+8Vwoor0+hqFCQl6Uja8OePSOfMjvMDMjmSCS9N5LuhdHT1vqKy5W5qN0gZyON+DHuSyyLFiFrLwsWsNjJFMuyYf8xlk/vprCdpqUXYXQ45PdVL56XoanvsBDxSoGS6HXxJwgZfyOgpb2sT1cZxQ6eGvDUgmcCuMaBZzxUnDPYVowqTHFjMujo6d8WxZIkXnae3smaw2sAqCuq470z3tvn7fnCPkpcJUlDXMOOqkrvjB5Dowsa/QI5yLEqHZ0KPr/CK6/b+ePfpPu5tFjj/ju7UBTwB8DpFBQWiFwNkxle9GGkhHTq2POBDCMlipcehpHGDKk1WfrpZUmvxWLtV8ZQ9/uZUG8mselkWiXgIf7yCAGh1gShkjJc5DsOoTP9374tTwoX94S4gEl8dFUmf6aJdW5yGFPc9MK4ceNGeheGnYHaHFSD+CN+3LZkN/rj6x+PPf/Ukk/12QPjC/tw29z9aorZF3q0Vxc0fr+cwuH4RXIIBI2O3w/tHdDZBV/6Rtwtc8/tXirLRdSjrlBZrtGfRtfjyssHcW/HBjGbE4eRUr0wfelQnUjqMJIuZPoxjDTYZH2MsxItA/eyDDpCMK7QI394JBbPy8uTcTO6oBlsMSM0GeeTFuuS8Kj6+r99Z3lUuCSKFjkda3cxoW563z5bIeTx0yJjW1z3EVPc9ILHgF0HB2qzL+wDQVITy+Mdx3lhzwsAlLhKuHbetX3aVlgNIxAUu4auKWaavXpBLr9fXigjEXnxGCIPTSqqCq3t8j1u/VY+re3yQnTZxUGu+M+QbIrpVyguyn44SseTq4UshZCt0tvb5XTiREy8VO/ZA0eODGwYKdELM8qL2sWOccbhoWiWUL9Fi31wvSz9JbGRqaLgsSryeLmiKdoOx8D3UQ2C/3i6YInNOw4iC69eEhZwj0v3tuiP7hqwdX89dmnt6dcjIRKOafS4xjIorTKOyOpipDO9hhpT3PTCwYMHKTfYr9yB2BxWw3hDXhy25LSd72/8PhFNdr294ewbyHP0flcWQuAP+yl1l+K2D92v4IMHD1JeXJzuodHH5F2uYU2P7uhUCAQUXnrVzl9fkZ9jeanGd273AuDzg8slKCrsfy7AwePHKS/qsczbyKBpyeKkvV16U/TnHR09P+/oSK8TFKXHRDJ9GKm7onaj8ZduLzEtB48dptxZnb4MjYS73egULd2R2MxUbzqpDzXZbBzcWU/5jCybZ4a7oqJFHzZKETGB06SLvT5icSXHu3gmJHth3OOinq1+IDQO1h+jvMgRF6uAPKZWOVldYHXE/1ds0cfcFjZgihuTQSYQCRDWwklipCPYwU+3/RQAp9XJx87+WJ+25Q178dg9FDiHqLx4OBzv9nzihLxwKop0YY/QkILPJ4OI2zsUbrsrLgDvv9NLeamIhQ+UFInRWURW0+JiJFFwZCNOhjKBM3EYKbWo3Wgq+xATI2qaaEkOxE2pz5K0DVX+glcs0V/swzQ8NJjofcD0Pk0WiyyYV1QUT8+2JYiDVNOEgGBzSqzL0eR4l3Bb//fPXpgQ75LB++KsGPjnrQ8lJcYxQXS7Qh5XS558jIkYq2FETHeY4qYX5s6dO9K7MOz012ZNaHSGOrGn/BL5yZaf0BWSxaaunns1lXm911YIqSEUFIrdgzwcFQ5LMePzycDgSIS5VVXxOjQjSCQih6MURfDFb+TT3iF/Pb//PUEu/Q85HBUIKpQUiwFrr7mTJ2deoKpSnGQSJn0RJ52dQytOMmGzyZtdYaF8THxeXh4TMl3jx5M/foSDKLOJa4n9Gu8pELd70TK3ziF/tY8lhJBVgCMJTSf1+LbEejO6itEiSYJloa0eNv0wwQtzHFR///fHWZlhuChByNgHKQ5Qj4fRBWnSUJJ+nJ3RyRYTL3Pnl4B7FHpgRwGmuOmFEydOMGPGjJHejWGlvzYHIgGCkWBS+ndIDfH9Td8HQEHhpqU39bodTWgEI0HKPGVp1Y37RSgkJ59PDjmparymhcfDiWPHmDHCZfmFkMNRoZDCH/7m4B+vyZtSZYXG3V+Vw1FeH7hdgoL8HsSDLk56ESPqyZNSTaWuk21A7WBgt3cvTrp7nvjo8fTpF+qJY8cYsm9y4hCRUBmUYFzFMaBf3ydaOpkxfgy0m9DTs/Wmk4kdtC0RCJ8G/x5oyxDz4j8R/bwlWUWSKTaZMeTpxuvironGpgwi+vmhi5ikoSRdxHikKE0QMXJKHyo80XiYGYWmuMmEKW56obW1daR3Ydjpr83ekBdFUZLSv3+7+7c0dsl+X5dMu4Sppb03evOGvOQ58vrfFFNPAU300Ogubaczmv4ZpzXbQmtDgMyOUjjTpPK1b8fdMg9ft46qt/ehtrZT2N5OodqO1duDB6WPLQYG9XJot0Nxcbrw6Ks4cbuHxX3er+OcVa2WRG9LIiMT19LqHYDHYqBo0do1mhZ1PiX+n9D7LNIJkVOgNoFohuBJCJ6IB+sGm/q/D1ZPunBJineplqJhKIgJGDV6niQMJcXiYfLB6hzQUJIR7099xRQ3vWDvT57tGKc/NgcjQbxhb1L6tyY0Hnv7sdj/Ny/rvUGm3hSz2FWc1GyzVxIFjdcrH1VVCpkMgiaRIT/GQsg6KVu2wN690NaWJEhEeweO1nbqOtr5pP8FOnk3AB/hGa5+6KNDu28gPVi9iZFM4kR/PswB1/0l6ThnLVr6UqvFBhYHUsyM/Odhtw3Cjbs7kaLPg/RhyJjtAtRWCDVGp5PyURcwgRPpLQGywVGSVtvlULOVKbOWyf8dpUN7HJKGkvSsJF3EJAwZ2vR4mARPzCANtRvx/tRXzPYLvbRfMOkbrf5W2gJtScG/fz/4d6574ToAlo5fyl+u+0uP21A1FV/YR7mnvG9BxELEh5y8Xumh0cuoO52MWMTtyZOwebOctmyRU1tbry97ihv5FE8BUMMxdjCPYtp7fz+Xq/9DOro4ySX6FNcS6btoSfO8jEG0RFEStTdRuEDmWCm9yatFHyqzgCX6v0XIIaNgIwSOS7ESOC69LoFj4D+ZfUuA+BuDq7r7WBfPBLD107ObLUlDSYkiJiHuSbFLYWuxpQwnjdKsMwNgem56Yd26dYZrv5CtzREtQleoC6ctecT7sfVxr83qZb03yPSFfeQ78nsejtIFTaKHRoj4OH0/BM26Xbv6X6a+pUWKF13IbN4Mp05ltQnN6eZQ3jw+1/pA7B77xLJncE69kg5PEVp+Ifnji7CVZhAnhYX9Eifrdu1ieVVV1q8bUfRfyv0sMrfuYDPLp1YkCJVRmkEU8wiEpU1aWD7XopMaij6GQYTi/2uhhPUjHDzTytQSV3Q7eoxH1CslIvFHRUtYJ5wg/sJJ20t6jHjjDSr7g8URjXfJUNvFM0Eus2QfDL1u0y6WL+rndzlJwOjdwkWCgElNrU4UMSNz/hjx/tRXTHFjMmACkQBhNTn9e/PJzbx59E0AppZM5eJpF/e4DX/Yj91qp9hVnN5vSoj0xpSaJmM9+ilo+kVXF2zblixm+tKVvqICFi6Es8+G+fOhshKKigh7CjkVLEK1OvnIpwrxvi1dzP/9wQArvnkTnZrsHVVeJrD1FEQ8lkkq0Z9hCKi/wbjCJm/aaLGbsl20QdgWv3FrqTfwTDfzcMK6qa8Lp9/4M75OX6e714WTX9/vgnDJTAUYqXAyW36KxyUx5iVDS4DhItNQUmI8jMXWTWq1LSpyRpEINukRU9z0QtVY+3U7CGRjsyY0OoOd2K3JY7+Pro83yLx56c09xs+omooqVCrcFfHtaFp6Y0rdQ+PxDGpRtapMVWaDQdi5M3l4ad++zK77RAoKpJDRxczZZ8sicCkXRSGgo1UhHFJ4/rdO/hUVNrXjVb7xJT07SiE/T5CfN/jCJqPNg0VqwbheBYtIXi4EhFvAdyg+BaJdj2MCIlEodCM8UlgE0Dh0Zuc8ij1647fLlORYplEG74u9aESEQFVF9LyOiZiE8ywptdomC+xZUrKSLLYxNZRkxPtTXzHFTS8YMQ4nG5uDkSBBNZjU0PJw22H+tO9PAFR4Kvjg3A/2uA1vyEuRqwiP1SXThnQPjS5o9Bo0Q1QlttDphF27koeWdu3qvVGiyyU9MYlCZsqUPu2n1ytTv0+dVvjmd+Of3UN3dZGfL5ti2u2C4qKhaYpZmG1Nn54ESywmIdXDosey9OBlibSB92BUxBwAb3SKtA3UxNGJ4oh7B5LEQjRmQw9K7us6qcsTYj+8AZW8vIKUZQnb6eX18ffSg2FHodci5dwrdBMNUlbiIiatSq919NqTJUa8P/UVU9z0wv79+w03ppmNzXpxvkTPzBMbnkATciz+44s+3mOtGl+wC2dEUOTXUFobpbdGb3g3FIJGCKivj4uYzZsp2rpVeoh6wmaD2bOlgNHFzMyZ9KdrZTgMbR2yWN9nvlqAPyAvsjdcG+C8FRFUFVRVoaKsf00x+8L+Y8dYPntW+lBPasZQ7OaRuB70OiyEXQae6v+H26Vo8e0H7/64iAn3oxuyknCjTrr5JggCRR9SsCO7Tdtp8UUozcuLr6vYkx8Tb/DW6I3dGi2EZ3WCzRm98UfXsznlo9UJ1qgosDm7EQgDq1nTH3Zs2sXyuf2MPxltxNKqI+lDSXrslCWP/UePs7x6Sr9Tq8caRrw/9RVT3Jj0m5Aawhf2JYmXM74z/GL7LwDw2D3csPCG9BeqKoRCRPxetI5Wyh3F2Kxdg9+YUojkzKWtWzNmLqVF7CiKLM2fKGTmzh2UlgxCQFu7Qjis8PNfO3l7k1Qvk2pVbv9cfDiqqFD0r2ByWqZQBsGiqXKIJ9DIgARLJiKd0KV7YPZHvTH7IZRFvRJHBeRNB880yItOnimyLkimm5WqgqpJu1Q1PnRosch4rGiGz/76RpbPrIuWBVCkLanZQImPOd5YcNTRlyq9Vke0Sm9KqwE9tdpi67HRpIlxMMVNL8yePXukd2HY6avNvpAPTWjYLPHT6Jktz+CPyOJh182/jhJ3iVygqvGgYL8fEQrhU32UeMrwFJYPjqBpaUkeWtq8GU6f7vVlWk0NlkWL4kNLZ50lY2eGAK8XurwKx08q3PWgvAgriuB73+4iP082xXQ6ZVNM2TpGj0NJTW3W41cSa7KkrpcptVfetGePL0kQLHq6cxbHIOIF38GoFybqifEdkGnBfcVeliBepsef24szr6/3GVJTRIzu6bPZIC9PPlqt8ceoV3G2Ox8K+tlGfQwye/rEkd6FzKSmVscyrhKr9Lqlt8ua2i+pZ0+u0a7XRrM3G0xx0wunT5823LhmX2xWNZWucBeOhN41/rCfH23+EQBWxcqnFn4iXiHY75c3pmivGK9TwWMro9DdT2HT1RX3xOiC5siR3l9XUREXMdHA30PBINNqarLfhywJhaK9o9D4zFeKCIak3Tf+t5d3Lu5ADWqIMJQURLBpEQjoReQSC851J1gSBUrvFXBPd52hML8PAk71R0XMgYThpP2yCFtfsRVJT0xeVMB4psnnjm6CmjVNihddzCSKGF20eDyyYaLNGp/Xy43v9Jk2Cg0kbkbc3tTUaqERO0eHKLXaaNdro9mbDaa46YUzZ84wbdq0kd6NYaUvNvsjfkKREIWu+Bfrlzt/SbOvGYDLJl1EXcABnafljdbhkIX1FIWQGgJNodhZ1LemmIGAzFxKFDJ9yVwqLEzPXBo/Pu3CeWbXroGLm1QBkuJBEZpGxxkVEVR5+rkSNm2Tw1FT6gJ89ab9KEFBUB+OsgtQEyvfDn7J/jOdfqZVJ8xQgwlBvQnemMAxMgqqTNgKk4eS9KElRzcCVggpXhLFDMRFjMUqPWg2O1gtcU9MP6u7nmlpZ9qkoRexo4VhsTdjanX0OFr0IaPU1Gpb8lDSIGK067XR7M0GU9z0gnWkqtyOIL3ZLISgK9iFzRo9fSIRVL+Px//9SGydm6ddK29EKQXmhBAE1CClzpLMgcaRiGxRkDi8tHt375lLbrfMXEqMk5k8uU8Byb0e47RS/QkpzFpEFk/rsUy/wOuz4O2ycuSEi+88LruiWyyCx+5qxJ2fh9cLzjwoKBIZgoAGES0EvnrKA+uh/kxcyPiP0ueCbNa89KGkvOngqOxZxOjDSYkixmIBqw08TnA4pYjRPTGDfPMz2ne5b+d1Qvp90nO6WRadn3iYY3EvKanVsRTr4UutNo+xiY7ZfsFsv5A1/rCfxtaj5GHHEghCIMAfj/ydj775JQDOHfcOXrjkxxlf2xXuwm1zU+Eux4IChw4lx8js2CGHsnrCZoM5c9Izl3roH9UtGXsMRauTatEia6g9CBcl4QKupDxKQiFoOqOgqvDeG+rYtkuKutU3tHDH55oJhyAcgYpygSurtsY9oIXBfyQ6jLQvHhPjOyLt6QsWD+RNTR5KypsGznHdixhdvOhCBhJETLQTu8Mh/9c9MVYrZvBuL/QoRDI8h2QhIoh/xLHn0RmKEn2eGHel/5/oQYw+tySc40nDSeYxNBk9mJ6bXli/fj1Lly4d6d0YVrq1WQjw+fCdOYrSeQaLIvs3CbuNx/Y/F1vt5vkfy/ja8PGj5G3dTsnueixbt0tR095L7yRFgenTk4eW5s7tW8uB3oRLtCDc+oONLJ1cLucTjQuQb05S6fV+lOrXNOjoUohEFJ78eUlM2MyYEuTLq88gBARCCqXF/RQ2WgQCDSkxMQfAf5g+V7q1uGQ2UmpMjGt897+6dfGii5nEDCW9Wane3ysxuHcERcz6LXtYunDW0L5Jj16P7p5H108VIdC7EFH07LX0XljrN+9i6eL5yev39fkYFSpGu14bzd5sMMVNL2haH131OURGm/1+6Ogg1NlGV6AFlzsfHPJG/e/GDWxs2grAnJIZXFhzDkpLK7at27Ft3Y5963as23ZgbWru/c0nTowLmYULYcGC7jOXYmIlcUhIS6mAm1hiXZ+Sf5VqAlmrZAh6DPn8Cl1ehUMNDu5/sgwAq1Xw6F2NuJwCbxd43H2oQixU8B9Lj4nxHeq7iFEcUREzjaOBSmrrFkdFTI0Ub5noLc3a6ZSemEQBo6dajzLSzutehQcZlkXn9eYNgb4JkVRvSKrYyLSdPgoRTbGB3VjeaKNdr41mbzaY4qYXKioqRnoXhp0km4NBmZnU2QmA32lFVRzYHHHPyWNbnoo9/9xGJ6X3r8J69Hjvb1RZmZa5RJkUAEnCRfV3I1wSPDFpQ0V9b45YUZTf/c19AARD0NYOiiL4369WE4nI9//Mx1pYND9IKCTDSooKRTw0SGiyu3JijRjvAZmx1NcOy4odPJPSY2JctTIOAgifaoHyhGwlTYOI2r2IsdlkDaJUT8xwxVNkOywTOx3iQqSixC3r8PTJG9KHYZk+eUNI/n8YPSKGv3YZAKPZmw2muOmF0qHswTNKKS0tlQGgXV1y2EgIcLtRFehsaSB/915cO/Zi27qd/fWb+NtlRwGY0A7//fPtWDP8mNAKZc8ly9mLokJmAYyrhKQic2EINmUhXBRZ0GuAHpfS/MEv+qVp0N6hoKnwyI/L2LlPjjnNmR7kc59qQVMFEW8j5c59OBv3J4iZQ6D1EnMUwypFTFJMzHRw10UFXTc7pqqUOqyy6E53adZ2e7KQGQ4RExtGTOnMnORty8IboiTGPimUVrrAVZR5OzkyLJOIYa9dBsJo9maDKW56Ye/evcYqb61p7N25k+UTJ8oMJZdL3uh270bc9x1qXvobSjgSW/17l8Vf+tl/g10D4XYTmTeLyIK5hObNomP2ZEpmziXf7iApXTR4mh6FizI8Jev3nmhm+fQJg7pNr0/B51fYf8jOr37j5z/m/50FdTu45b/WUXFkL1b/ASzC28etWaRg0WNi9BRrzySZnZKJxDTrDLVi9p5uZ/nsScm1YgaQZt1nElOHSRSwEBcsqenDUQ9cTMT2T4jsPbDTUN9lw127MJ7NRrM3G0xxYyKJBgvT0SGHokDGuuzaBfffD3/8Y9rJcjIffrZAPi9UbVzzntW03rYAdWotWOUNpyPURZEjnzwljAxuSazbkkMZFkJAqBl8B4h07Ec5c4Dq0AFKfQdp+F57fD0N6NYxo8iho8ShpLzp4J4cjQnq5n0Tg3tFdHgmsVZMXl56mnVjOxSXDPKHkLBPqbVPlEQBowdpp9Y/sSYsGzudmU1MTEYfprjphRkzZoz0Lgw9gYAUNV4vWCzMmDgB9u+EB74Hf/pr0qpaWTGh85YRmTeD+6r2EWr+OwDXz3s/zrMvR00YJvCrIRyOYgo9ZSjdDZOMAmaMK+v7ympQZif5DsuMJF+9fO47FOtkbQPyo6u7umlHpTlqsOQnCJhY/6RuXpCYZq17ZICkNGuPJx7cmzhlCO6dMbW27zZ3tz/dFW/Th4ZitU9spPUCGoHUYUN8lxMwmr1gPJuNZm82mOKmF1pbWykpGaJfuCNNKCQDhTvaZcaN0wq7NmG/52F49fWkVbXyUlo/9n7EdVeBx0NXxM/TL1wBgN1i48Y51yV5FyJahIimUukuxT6KhQ1AqzdASX6CqBAaBE+mCxj/YQgcJ3korWcammvZdWIu8xZNoHjcVDq06bhKplBS5smkOSTdpVnrYsXlklNisG+Wadat7V2UFPXSfiGxI3hS1hnxeJa04m2WERUwPZHT3+UMGM1eMJ7NRrM3G0xx0wtNTU1MmTJlpHdjcIlEoLMd2poh7AeHkFWBv/d9eGlNzOsAQGUF6qdv4MQVF2DLK8Aezbb5+YE/0h6SGVTvn3wR1Z541L4QAl/YT7GzEI9t4J20h4xwK/gOI05uBm9bXMD4j/Q9M0nHUYnqnoZPmU7ANoObvnUuf9twFp3+Qr76mSaWzm2lzS81SGFxtCmmnmatRtJrxSSmWScWuxukNOum5lam1I1LEC76lBDAHesBZEmvPpskYkaPgOmJnPwu94DR7AXj2Ww0e7PBFDe9oIyRC3efiAShsxVaT0OwExwWOFgPDz8NL72SvG5lBdz8CbjuKrzWCGF/C249jViL8NTuX8ZWvXnOtUkv9UUCuGxOCh35I//5qQEpVlI9ML56iMhYmKkAbX3YljVfBvG6J0cfJ4FnMrgnoip5NLcoBINwz+Pl/OafMoth0Xw/qz/SQsQfQfMLSovD2AJ6752oiLHbpScm0QszmGnWaQJGQ0GFcGeCgLFGxUuigEmMgxn734MRPxeHGaPZC8az2Wj2ZoPZfiGX2y8IIXsJqUHoaoGOZvB7we6Eg0fhwafgbymipioqaq69CtwuVE2l0d+MQOCKDjv9tv5vfOqNOwBYVfNOfnHhd2MvD2sRgmqQKnc57ky9o4bEThUCJ8FfnyJgDsvhpSyGkVDs4K5NFzCeSWAv6/Ym396h0NqusH23g/d9tA4hFJwOjTU/2cP0ySG6gjaKi6G40hlPsx7MWjFJw0d6EG/U9FQBo9hyVsCYmJiYgOm56ZWNGzeyePHikd6NviO0uKCJeMHfCV2d4A+C1QENZ+DBxzOLmtU3woc+yMYTLSx2S2ESUIMEI0EKHHKwSgjBIzufjb1s9Zzr4m8tBIFIgBJn0eALGyHkMFImD4z/SN+r9Oo4q2MC5qivhNrahVLAOMfHCt31SjQuxu/VaG8SaKrCZ74mhQ3ArZ9pZcaSPHyhIlwVVgqqbTAQHZMawKsLGCCpaKHVJY91LH1aFzbxNO8xd14PAkaz2Wj2gvFsNpq92WCKm16IRCK9rzTS6J2p1QCoPlkMLxQCX1BOihUON8JDT6SLmurKuKcm2twoEs3EEULQFfZhtdhi7s/XTq5nZ+t+ABaWzeadVWfHNuWN+HHbXBTY8/pvi+oDf0O6B8ZfD5GO7LZlK0zxwEyKDiPVgTVeuO/E/mPUlvVS5yaxZkxCppKq2OgIO6HYxd0PlFF/TH6Gy5aE+fT/CMJaHkJAUanMxO6RbovYRYkF8Nql90UXMPqEpc91asbEeT3IGM1mo9kLxrPZaPZmw6gTN4899hj33XcfjY2NnHXWWTzyyCMsW7Ys47o7d+7k9ttvZ+PGjRw5coQHH3yQz372s4O6P6O2AqQWloIm7AMtIAUO0TRsvwadfulZ2H8YHn4S/v5q8uurq2D1J+BDHyS1Y2NpNHMoqIbwRwJJXpjHdiV4beZeFxM9ITWMAhQ7CrH2doPVIhA8kVnABBuz+xwUO7gnRkXLpAQBMwnsJX0aailNypRKqBuTWPxObwjp8cRrxthsdHlt+FULW7ba+eHPZPaR2yV4+IFOLBZZOqikBNyuhO0nFrBLrcKbKGAseRmGjwZnGGvUntdDiNFsNpq9YDybjWZvNowqcfPLX/6SW265hSeffJLly5fz0EMPcdFFF7F3714qKyvT1vf5fEyZMoUPfvCD/N///d+Q7FNVVdWQbDdr9PgZLSSHm7Rg9MZokS0IbE55J+1sl0X49h2ER56Cl9ckb6e6Cv7nRrjmA2miRqeqWA5B+SJ+gJhY2d6yj7Un3wZgUn4N76m9AABNaATUAGXOElw2Z3x/w2eiNWDqkwWM/2g/hpHGZ/DATAbXOPrdFypaxbfKbU9uRWC1gtUmixjqFXxttrRMJX8A2jshElH4zOfjOWZf/bKXaZNDeLtU3A6NArcKkT5W4R1EAdMTo+a8HkaMZrPR7AXj2Ww0e7NhVImbBx54gE984hPccMMNADz55JP8+c9/5umnn+bLX/5y2vpLly6NtXvPtHww2L1798iVtxaajJ1Rg9HhplC0+qxVChqrDRCyY3dni3zcvQ8e+wH8Y23ytqqr4H8+CR/6ADi7KdkfZfexJhZNraIr4sNhja/7+K7nYs8/NecaKXpUH+HOfZSGT1EQaY5mJkU9MmpXdvbaipI9MAnZSFgHGMOjN4ZUI/FKvtFspd2n2lg+Z3JcwPShboyqQXubQBERvnV3AQ1HpcB653I/N17fTDhkQVGsFJfYsThGXxXeET2vRwij2Ww0e8F4NhvN3mwYNeImFAqxceNGbr311tg8i8XCqlWreOuttwbtfYLBIMFgvIZJR0eWcRxDTab4GZDDL1ZP8g0xFJRF+Lxe2LEbHv8hvPJa8vbGVUtRc837exU1iQQiQSJqBI/TDVqEE63b+d3hlwEoszn4ZPgVCjb+BGu4OTv7LE4pVlIFjGeSHEYaDBKHlfT6MfqwksMh68ckCpnGdigq7nmbQiPWjVxT6eoQBH0Kb2/y8JNnpdcmzyP43sOgucbh91kpq7LiLDIzkExMTEyGm1Ejbpqbm1FVNc3NVlVVxZ49ewbtfe6++27uvPPOtPkbNmwgLy+PRYsWsXv3bvx+PwUFBdTW1rJu3ToAJk6ciKZpHD0qu2AvXLiQAwcO0NXVRV5eHjNmzGDz5s0ATJgwAavVypEjRwBYsGABhw8fpqOjA5fLxdy5c9m4cSMIwfhxVbgcVg7VHwahMW9aFcdOddDW6cfhdLJw7jTe3rwbgOrKMvJddg4cOgaRCHNPHUN57Ifk/StZAAYrK+j4+EewfegD7DvTCQ2nmTm+nJYuH00dPiyKwtJpNWw4eAJV0ygrcFNZmMeBhj2UeP9NeO9xyvwN2IPHcKmNfLtJRY2OrNxcGKK4a0u3n7FAIWSrwm+dgOaaSH7JDA52FhOwTWD8uOlEVDjW0gEqLKoYx54TzfhOe8l3hZlaXcrWwzLupq68CICGZlmP5qxJ1RxsbKErEMLjtDNrXBmbDp0AARMK3dgUONzmBUVh/oQKGtq8tAdCuFxO5s2YyIZdhwAYV1WOxw0HD8tjUzOugn2HjtHa1oHdbmfRvCms27QbEFSVFVCY72L/kSZAYfb0Oo6d8nKqqYNg0MVnvzQxZvdn/6+Z8ko7O3fvxWqFouIZHDrUSlNTE4qisGzZMjZu3EgkEqG0tJSqqip275bHddq0aXR1ddHYKG1ftmwZW7ZsIRQKUVxczIQJE9ixYwcAU6ZMIRAIcOLECQAWL17Mzp07CQQCFBYWMmnSJLZt2xY7Z1VV5dixYwCcffbZ7Nu3j1AoxM6dO5k2bRpbtshjWVtbi8ViSTpn6+vr6ezsxO12M3v2bDZt2iQ/s5oaHA4H9fX1AMyfP5+jR4/S1taG0+lkwYIFrF+/Xp6z1dXk5eVx8OBBAObMmUNjYyMtLS3y8160KPYdq6yspKioiP37ZdD6rFmzaG5uprm5GYvFwtKlS1m/fj2aplFeXk55eXns+jB9+nTa29s5ffo0AMuXL2fTpk2Ew2FKS0sZP3587H2mTp2K1+uNfd5Lly5l27ZtBINBiouLqa2tZfv27QBMnjyZUCjE8ePHAdKuEZMnT076vAf9GgGMHz8el8vFoUPyHJ43bx7Hjh2jra0Nh8PBwoULefvtt2Ofd35+PqFQiHXr1jF79mxOnTpFS0sLNpuNxYsX8/bbbyOEoKKigpKSEvbt2wfAzJkzaWlpoampKfZ5b9iwAVVVKSsro7KyMnbOTp8+nY6ODk6dOpX2eZeUlDB+/Hh27twZ+7x9Ph8nT54EYMmSJezYsYNAIEBRURF1dXWxz3vSpElEIpHYObto0SL27NmDz+cjPz+fqVOnsnXrVnmNqKuT14iGhtj/O3fupKurC4/Hw6xZs2Ln7IQJE7DZbBw+fDh2zjY0NNDe3o7L5WLevHls2LABgHHjxuHxeGLn7Ny5czlx4gStra1p52xVVRWFhYWxc3b27NmcPn2aM2fOYLVaWbJkSeycraiooLS0lL179wKyfUJra/+vEUII1q1bNyTXCK/XS35+fp+uEXPmzGG0MWrq3Jw4cYKamhrefPNNVqxYEZv/xS9+kddeey12InXHpEmT+OxnP9trQHEmz01tbW23dW6OHDnCxIkT0+YPiG7jZ/RCat20K9BU6aXp7IQNm+GJH8HaN5LXGT8O/veTcNWVvXpqNKGhCQ010IjS/HeszX/H0rEVJaUuTJsKtfXQJcClQMMkqLCBaitCc03Elj8NJdED46rrvtFjf9G7XCc2iIR4fIzDLgN9u4mP6f5DiHDkWCMTx5cgg3yJ9muygeIAm0tmJilWUGxENCunT8td+fKX4Re/kJs57zz49a9lkpoQUFUlnUSjlSE5r0c5RrPZaPaC8Ww2mr3ZMGo8N+Xl5Vit1tivAJ1Tp05RXV09aO/jdDpxOvt+421sbByck0dT4/Vnuo2f6QahRYOFO2H9Jjn8lCpqasbLQOEEUSOEQBWqFDC6kBEaITWEFjyFvWUN7pY1OLt2pAma2FtbnDzemU+XOAPAdRMWYz/r0xy3VyBsRVQNRVPMxPgYfVhJ73KtZyzZ7X2Oj4l+GNHspEh0im5TUWhsamNi3QQpyHQho/dJSqGjTcZrv/VWXNjk58NDD0VjqMNQUTG6hQ0M4nk9hjCazUazF4xns9HszYZRI24cDgeLFy/mlVde4fLLLwdA0zReeeUVVq9ePbI7118yxs8o0Rolnj4ElArZsbuzE95cB4//CF7/V/IaE8ajrv44kfdfhmq3oIkQ4YCPiFAJa5GYuBFCYA234Gl7g/zW13B2bc8oaCLuSRy3vJPiuneguurwW4v43u8/AICCwicWfYlg3nhCET8VzoKBN8VMjY8BKTpstnhbgkQR05MIjH0oWlzIaCooeq8k6X3BVhit1BsVMdaT4CrvdbM+n2yeHgjALbfE53/jG1BbKw9TQQHkDaDMj4mJiYnJwBk14gbglltu4frrr2fJkiUsW7aMhx56CK/XG8ue+vCHP0xNTQ133303IIOQd+3aFXt+/PhxtmzZEhsnHAy6q7GTESHi9WciftD80fozFjnUZM3ve4n7aLCw9sab8OgPsLzx76TFak01nZ/6Lzovfzea3YoWaUNENBQUFMWCRbFgVSw4Ix142v6J68yr2Dq3ZBY0romEylYSLFuJ6pmCRwjC0f38zYE/ctovvTb/WXc+Uwtr6Qh1UuQoIM/mSdtWjyQOK+lCRu+vpHe6TmwQ2ZeCdHqgrxYN9lUEsaq8FjvYCqSAsdgShpeSj8GyPmQbRCLQ2ip39+tfB93BeOGF8F//JRPV7HYoKhobXQyyOq9zBKPZbDR7wXg2G83ebBhV4ubqq6+mqamJ22+/ncbGRhYuXMhLL70UCzJuaGjAYol7O06cOMHZZ8cr5N5///3cf//9nH/++axdu3ZQ9mnLli1J75FGLH4mCBFfNH5GQwoaB9h7FgBJQ0eaihoOonk70V57A/fjP8H51sak9cM11bR/6lq877sIq8uJTbFiQUkqnKeEWnCeWYuj5RXsHZu7ETR1cUHjnpJ0Rz5wvIPpE4rQhJaU/r16znX4IgGcVidFjoLum7bp8TF6Rd/uCuHZEoRMX9KihRoVMRFkfIyIdqy2yVRxiwOs0eq9Sh/FEb0fYyGgPVo+6I03ZGwNQGEhPPhg3PFUWSkFzlig1/M6BzGazUazF4xns9HszYZRJW4AVq9e3e0wVKpgmTRpEkMdDx0KhdJnJsXPeKW3RmjRomyupKJyQohorEtcwGhCENbChNQQqqahoqKpEYTPh+ONtyl94ue4121Nekt1wjh8N3+E4BX/CXYbqSMfSrgFZ8taHGdejQoaLW23paC5MCpopnbrYghH5GtfPvYv9rUfBmB55VksLJtFIBKk3FOMTe+/pGlxb4we6KsoUY9MtBBeYqPIvgT6psXHaPI1Fkt0SC8v2npAFzF9FEfdkPEYJ5A4HPX5z8fnf/vbMG4cdHVJoePJ0pE1kvRmcy5iNJuNZi8Yz2aj2ZsNo07cjDaKi4vlEy0ivTJqANTocJMQYLGjWVyouoiJBKVgESohNUREU1GFnBKFmIIih44sFhyBMM7X15H36DM4/r0p6f3V2vFS1Fx+CdiTD1dfBI3qqiVYtpJg6UpUT/eCJpECj3Q/PJrgtbl59rX4Qj5KrHl4wkAgWqAvMdA3Pz9ZxPQ50DcSj49BS+hibYsOKyV2srYN+rhP7BhnIByWw1E2G3zlK9DUJOdfdBFcdZUUPk7n2BmO0unJ5lzFaDYbzV4wns1GszcbTHHTHdH4mQlVJQjfKVTVi6qG0ASoihUNKyEtTETzxQSMEAL9z4KCRbFiUSzYFCsOiz2951IwgO3VN/B874c41m1OWqTW1UhR876Lk0SNEm5NEDSbuhE0EwiW6jE007K+65YXudjYtJN/n94CwPSCOs4pnIUrDIVOj7ybOxzJhfD6FR8DMsBaj4/Ji6bCdx8fMxRMmJDcNFMfVYtEpHgJhWDNGvj97+XykhL47nfjI24lJVGH1Bgi1WYjYDSbjWYvGM9mo9mbDWPskjz0qJEQgeAZ1HAXkYiP7TtPMG1GSUzQiIT4FUtC4K7d4sSiWLqPQ0kkHMK29l94Hvx+n0SNEm7F0fIazpZXsbdvQkFN32/XBIKl0SEnz/T+iQIhIByh/lg7jx7+SWz2J+dcg1JcSnFRFVZ3YR+FTEp8jLQkGh/jjKa/Zx8fM9gIAdu27eDss5cTiUghEwhIj40e8+zzwRe/GH/NPffI+JrOTigtBbc787ZHMzt27DBc2Xaj2Ww0e8F4NhvN3mwwxU0KwXA7p1v2gsWOYnEgFCvY8nAoFqyKtW/ipTvUCLY1b+B54KluRM0NBN93EdhtKOE2HKdew9nySveCxllDUI+h8czIXtBExQyRcDzo12bjWOgUfz4h6+hUesr5z/nvozivCrerKPN2dBEjIoCQhfD0+BiLO6EQ3sDjYwaK7pFJFDKBAEQLp8ay0PUODULA//wPtLTI5e95D1xxhayl6PHIkCITExMTk9GFKW5SENEMnAK3rHsyocaK0zrAimxCk8NP330is6hZLUWNIrw4W/+C88wr2Ns3Dr6g6UbM4HbL7CW7HGL685ZHYx6q6+ddTYmziEJnQXJ8jNCDh4k3hLTmxwvhWfRhpZETMnoWky5kgkHpkdGHk/TkrfHjp5DfTZb+Cy/An/8sn5eVwb33ym0oChQXR8OKxiBTpkwZ6V0Ydoxms9HsBePZbDR7s8EUN70QCkcG8GohRc19j+N4O0XUTJyAb/UNhP5zOY6Of1G4//PY2zd0I2jGx4ec8mb2XdD0UcwkDgk1+1v47cE/AuCxufmvWZdRYrVhUb3E4mOi3qyRiI/pjkQhEw7Hh5YSE7j0WGeXK3lXOzoCGXe9sVG2WNC57z4pcLq65KNrgI3KR5JAIDDSuzDsGM1mo9kLxrPZaPZmgylueqG5qZPKym6GY3rAvvYNPN95DHuqqJlUi+9/roF3WHG2/p38rd9GEZkEzTiCpRcSKltJJG9W34RDgpgJRIK0hTpp03y0iQDtWoA21UtruJP2YCdtwQ7agu20BTpoD7bTFmiX/wc7CGtS0F098z1MKpmM012REB8Treo7gujlcxI9MqFQvDagXhcwk5DJRHPzCSoraxECTp+GI0egoQF+9jNoa5PrXHEFvPe9Utjk5Y394agTJ05QW1s70rsxrBjNZqPZC8az2Wj2ZoMpbgYTIbC/9iaeex/FnjL8FJk9gfD/LMJae4r8zgdQDmcQNI5qgmW6oJlNWKi0BTto72igLdRJa6hDCpNQh5yCnXFREuqkPdxFW7iLtlAHAXVg9Q+sipXVK75AftHUER1aShQykYj0yIRCybUBdSHjdEph0xM+nxQuR47A4cPycefOGbS0yOd+f/prKipkEHEwKLdfXNz7+5iYmJiYjByjpiv4SNHR0UFRUVGsK7jXd5rTLXso8MiqyKqqYbX2cifTRc13Hk321HggdHEJrZcU02E/Qpuq0apCiwatKrRq0IyHM7ZqWixFtGpKXLSEOvFGfENoeTL5jnyKnEUUuYoodhZz7fxr+cTiT+AYaLxRFiSmYIfDUkwEg/FixxZLPE7GZsssMDRNDifpwiV1On06u32yWKQHZ9Uq6bWpqBj7XhuASCSCbazlrw8Qo9lsNHvBeDYbzd5sMD+VXjhcf5opU6voDHXRGvWStOtDOv52Ovdsp+tfr9PedprWidA6B1pLoaVAodUqaNda4XhrD+/gAw4Nyr56bC6KnIWUOAspchZS7CqiyFlEsauUIncRhc4iCpxFFLpKKHQWUugspNhVTJGrCKfVidVixWaxcWTvEebNnzekwiZRyEQi6UIG4kLG7U4O3O3shL170z0wR47A0aPSs5MtTifU1clp4kSYNEk+zpsn5+lNMfPzB8P6kWfnzp2cddZZI70bw4rRbDaavWA8m41mbzaY4iaBe964h43H13Gq8zhd4QBtwQ7OeFvoesmLJtKL5cWYmmmmIEN9vV5xWOwUOwootufLR0dUpLiLKXEXU+QqpNhVSLEzn2JnAcXOQopcxRQ5i7HZ3KiKDU1RUIWCUCyxISVZDdmKVbFit9hx2BxYo0UG9fl6nZ76cD1u++AVbxEiHvAbDsdTsDMJGZdLrn/8eGbPy5Ej8bTsbKmqigsXXcRMnAih0CbOPXdRt0NNelPM4uKxVYW4J4wYiGg0m41mLxjPZqPZmw2muEng5UMv82r9qwPejhUotUKJ1UqRs5gizziK3OOkN8VRQIkj6lmx51NszaPY4qbYnk+RPR+3Mw/FGc1ksgI2JXZH1YRAFaBZrKhIESMUK0KxElHsaNaoeFGs5Nkc2C32JPFitUgB0xuFhYUDsj9TLRm9IbhOV5cUMMeOxQN4E70vanpIUq94PHHBkjrV1nbf++nIEXe3wmYsNsXsCwM9xmMRo9lsNHvBeDYbzd5sMMVNAiWukthzBYWi6PBOiauIEq9G+cHjlEXaKamAkmootUOJFUosUTFjgUJXGY7ylYTKVxLJn5ccjJspNdtqBbsF7A6wgapoqBYF2U5TQdMsCKsdRbGhWO1YLQ4sVjsuqx2HxYHNaotWSbbGRMyACg0iG5L2FVWN145JTMH2+6V4OXo0LmIaGuIipqMj+/1SFKipSfa66MNHdXUyHqY/pldXTwKkF0mLNhvXn4fDsm/UWGqK2ReyOca5gtFsNpq9YDybjWZvNpgBxQkBxW2ijU7vKSL+04wrnoIFhVM/+SUztzyNraIBFgAZfr2r9vJot+0LieTPjwuaNDEjEAqoNoFms6JaFVSbBWHRi+A5sVicWK1OLFY7Dqsbh92VJl763Oahn6xbty5jSe/UonjHjsGhQzLmpaFBCpmjR+Xzkyfj+i0bCgrigiV1mjBBxsb0BSGSRUrqc31SFKivX8eUKdJePWhZr4tjt0txk2sxe90d41zGaDYbzV4wns1GszcbcuySPTDqiurw2l00hZrJX/MQrt3PU17bARenr6vaywiVrSRYeiGRgqigiYoZLexDU0OoIoKqaGg2C8JpA5sDxeHCYndjsbiw293k2dzYrE6sFgdWqy0pDmYk0TTpXTlwQE4HD0J9fXwI6ejRzGnTvWG1yiGiRNFSVxcXNN3FtehiRI/TySRWEtG3kShW7Hb5/nrquKLIZSdPQnV18rr6o4mJiYnJ2MMUNzqaCoefw3noZ9SdehWLCKUFCmtaAcFxFxEsW0kwby4aoAb9qB3NCDWIEBpYLSgOJ5b8PKyOYlyuQuyuQilgopPFYutz/MtQomnyxp4qYPbtO5tjx7JPm9YpLU33uuhBvDU18Z5NmTwrPl92YkVPCdcfdWGS6Xl3YmXKlIljutpwf5g4ceJI78KwYzSbjWYvGM9mo9mbDaa40VEssPUr2LyHk2aLTisBy9m0LbyWQN6s6DBTEKXtOFaLHavNjstTgM0zAZurEKsrH6vTg8Vix2pxogxztbdAAJqa4tPp05kfm5vlsFIwmGkrPaeAOxzxuBfd66L/P2GCrODbnWdF9/YMpVjJFrU/0ctjHNPm3Mdo9oLxbDaavdlgihsdRYG6q2D3vaj2EryVKwkGZ7OzZAGzKi04rDbyVCtWVx5WZwGWvGKszjysrnywOZP6Mw0WQsju04liRRcoukjRp+ZmOXV1Dc57V1bGxUtdnRQt+mNlZbqwSBQrmjayYiVbjh07Rk1Nzci8+Qhh2pz7GM1eMJ7NRrM3G0xxk8j0T6JWXkDQU4fDYsetOHBtOkD1+KngzgOHGxwusPUvJ1gIGceS6EFJ9bCkCpahKmNQWBiv+1JbG58mTABVXc/cuUuB9ABbmy0etzJaxYqJiYmJibExs6VS2i8gNNDCse7XoXAYhyPzMI2mQWtruijJJFqam+VjODz4NiiKDMQtLU2eysrij4lTeXm8D1NiKwNdlKhqCKfTkRZcm6tiJRQKdXuMcxXT5tzHaPaC8Ww2mr3ZYHpuEohE4MwZC01Nzpg42bq1Gbt9fEbhcuZM/4rN9YbVCiUlmUVKeXlcpFRUyKmsTMbB6BlAqYIk9f/eMoF27NjHvHnzBt+wUcq+fcayF0ybjYDR7AXj2Ww0e7PBFDdRJk2CtrZMtVnGD3jbdnuyUEkUKeXlUqBUVsbFSmmpFDi9iZSh8qR4vd6h2fAoxWj2gmmzETCavWA8m41mbzaY4iZKa0+9LVNwudKHefRJFymJz4uK0mNRRnMdlfxc6Q7ZR4xmL5g2GwGj2QvGs9lo9maDGXMTjbmprW2nsrIw5knRH0tKwowbZ495VSorZRXdofaejCTBYBBnX0sB5wBGsxdMm42A0ewF49lsNHuzYWSryI0iduyADRvgpZfgZz+DBx+E226DRYs2cfnl8P/+H8yYIQN3EzOFcpEtW7aM9C4MK0azF0ybjYDR7AXj2Ww0e7PBFDcmJiYmJiYmOYUpbnqhtrZ2pHdh2DGazUazF0ybjYDR7AXj2Ww0e7PBFDe9YBnm9gmjAaPZbDR7wbTZCBjNXjCezUazNxvMT6YXjhw5MtK7MOwYzWaj2QumzUbAaPaC8Ww2mr3ZYIobExMTExMTk5zCTAVPbb+Qgt/vx+12j8CejRxGs9lo9oJpsxEwmr1gPJuNZm82mJ6bXqivrx/pXRh2jGaz0ewF02YjYDR7wXg2G83ebDDFTS90dnaO9C4MO0az2Wj2gmmzETCavWA8m41mbzaY4qYXjOjyM5rNRrMXTJuNgNHsBePZbDR7s8GMuekl5iYcDmO320dgz0YOo9lsNHvBtNkIGM1eMJ7NRrM3G0zPTS9s2rRppHdh2DGazUazF0ybjYDR7AXj2Ww0e7PB8F3BdcdVR0dHxuVer7fbZbmK0Ww2mr1g2mwEjGYvGM/m0WRvQUEByihquGh4caMHZJllrE1MTExMTPpHd6EdI4XhY240TePEiRMZVWdHRwe1tbUcPXp0VB20ocRoNhvNXjBtNoLNRrMXjGfzaLPX9NyMMiwWCxMmTOhxncLCwlFx8gwnRrPZaPaCabMRMJq9YDybjWZvXzEDik1MTExMTExyClPcmJiYmJiYmOQUprjpAafTyde//nWcTudI78qwYTSbjWYvmDYbAaPZC8az2Wj2ZovhA4pNTExMTExMcgvTc2NiYmJiYmKSU5jixsTExMTExCSnMMWNiYmJiYmJSU5hihsTExMTExOTnMJw4uaOO+5AUZSkadasWbHlgUCAm2++mbKyMvLz83n/+9/PqVOnkrbR0NDApZdeisfjobKyki984QtEIpHhNqVbXn/9dd773vcyfvx4FEXh97//fdJyIQS3334748aNw+12s2rVKvbv35+0TktLC9dddx2FhYUUFxfzsY99jK6urqR1tm3bxrnnnovL5aK2tpZ77713qE3LSG/2fuQjH0k75hdffHHSOmPJXoC7776bpUuXUlBQQGVlJZdffjl79+5NWmewzuW1a9eyaNEinE4n06ZN48c//vFQm5dGX+y94IIL0o7zpz71qaR1xoq9AE888QQLFiyIFWlbsWIFf/3rX2PLc+n4Qu/25trxzcQ999yDoih89rOfjc3LteM8bAiD8fWvf13MnTtXnDx5MjY1NTXFln/qU58StbW14pVXXhEbNmwQ73jHO8Q73/nO2PJIJCLmzZsnVq1aJTZv3iz+8pe/iPLycnHrrbeOhDkZ+ctf/iK+8pWviBdeeEEA4ne/+13S8nvuuUcUFRWJ3//+92Lr1q3isssuE5MnTxZ+vz+2zsUXXyzOOuss8e9//1v885//FNOmTRMf+tCHYsvb29tFVVWVuO6668SOHTvEL37xC+F2u8VTTz01XGbG6M3e66+/Xlx88cVJx7ylpSVpnbFkrxBCXHTRReKZZ54RO3bsEFu2bBH/+Z//Kerq6kRXV1dsncE4lw8dOiQ8Ho+45ZZbxK5du8QjjzwirFareOmll0adveeff774xCc+kXSc29vbx6S9Qgjxhz/8Qfz5z38W+/btE3v37hW33XabsNvtYseOHUKI3Dq+fbE3145vKm+//baYNGmSWLBggfjMZz4Tm59rx3m4MKS4OeusszIua2trE3a7Xfz617+Ozdu9e7cAxFtvvSWEkDdS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RPGJT3wiKW1SiLFlrxAio72AeOaZZ2LrDNa5vGbNGrFw4ULhcDjElClTkt5juOjN3oaGBnHeeeeJ0tJS4XQ6xbRp08QXvvCFpDooQowde4UQ4qMf/aiYOHGicDgcoqKiQqxcuTImbITIreMrRM/25uLx7Y5UcZNrx3m4UIQQYvj8RCYmJiYmJiYmQ4vhY25MTExMTExMcgtT3JiYmJiYmJjkFKa4MTExMTExMckpTHFjYmJiYmJiklOY4sbExMTExMQkpzDFjYmJiYmJiUlOYYobExMTExMTk5zCFDcmJiYmJiYmOYUpbkxMTExMTExyClPcmJiMMn784x+jKEpscrlczJgxg9WrV6d19s013nzzTe644460LshGZteuXdxxxx0cPnx4pHfFxGTMYIobE5NRyje+8Q1+9rOf8eijj/LOd76TJ554ghUrVuDz+UZ614aMN998kzvvvNMUNwns2rWLO++80xQ3JiZZYBvpHTAxMcnMJZdcwpIlSwD4+Mc/TllZGQ888AAvvvgiH/rQh/q9XU3TCIVCuFyuwdrVUY/P58Pj8Yz0bpiYmAwTpufGxGSMcOGFFwJQX18PwP3338873/lOysrKcLvdLF68mN/85jdpr1MUhdWrV/Pss88yd+5cnE4nL730Ur+28etf/5o5c+bgdrtZsWIF27dvB+Cpp55i2rRpuFwuLrjggoxehnXr1nHxxRdTVFSEx+Ph/PPP51//+lds+R133MEXvvAFACZPnhwblkvc1s9//nMWL16M2+2mtLSUa665hqNHjya9zwUXXMC8efPYuHEj5513Hh6Ph9tuu63Hz3bPnj1cddVVVFRU4Ha7mTlzJl/5yleS1tm8eTOXXHIJhYWF5Ofns3LlSv79738nrXPHHXegKEra9vWhxkRbJk2axHve8x7eeOMNli1bhsvlYsqUKfz0pz9Net0HP/hBAN71rnfFPpO1a9f2aI+JidExPTcmJmOEgwcPAlBWVgbA9773PS677DKuu+46QqEQzz//PB/84Af505/+xKWXXpr02ldffZVf/epXrF69mvLyciZNmpT1Nv75z3/yhz/8gZtvvhmAu+++m/e85z188Ytf5PHHH+emm26itbWVe++9l49+9KO8+uqrSe9/ySWXsHjxYr7+9a9jsZGCQGcAAAeySURBVFh45plnuPDCC/nnP//JsmXLuPLKK9m3bx+/+MUvePDBBykvLwegoqICgLvuuouvfe1rXHXVVXz84x+nqamJRx55hPPOO4/NmzdTXFwce78zZ85wySWXcM011/Bf//VfVFVVdfu5btu2jXPPPRe73c6NN97IpEmTOHjwIH/84x+56667ANi5cyfnnnsuhYWFfPGLX8Rut/PUU09xwQUX8Nprr7F8+fJsDycABw4c4AMf+AAf+9jHuP7663n66af5yEc+wuLFi5k7dy7nnXce//u//8vDDz/MbbfdxuzZswFijyYmJt0gTExMRhXPPPOMAMQ//vEP0dTUJI4ePSqef/55UVZWJtxutzh27JgQQgifz5f0ulAoJObNmycuvPDCpPmAsFgsYufOnWnvlc02nE6nqK+vj8176qmnBCCqq6tFR0dHbP6tt94qgNi6mqaJ6dOni4suukhompb03pMnTxb/8R//EZt33333Jb1W5/Dhw8JqtYq77roraf727duFzWZLmn/++ecLQDz55JNp9mbivPPOEwUFBeLIkSNJ8xP39fLLLxcOh0McPHgwNu/EiROioKBAnHfeebF5X//610Wmy6p+TBPtmjhxogDE66+/Hpt3+vRp4XQ6xec+97nYvF//+tcCEGvWrOmTPSYmJkKYw1ImJqOUVatWUVFRQW1tLddccw35+fn87ne/o6amBgC32x1bt7W1lfb2ds4991w2bdqUtq3zzz+fOXPmpM3PZhsrV66MeXyAmLfi/e9/PwUFBWnzDx06BMCWLVvYv38/1157LWfOnKG5uZnm5ma8Xi8rV67k9ddfR9O0Hj+LF154AU3TuOqqq2Kvb25uprq6munTp7NmzZqk9Z1OJzfccEOP2wRoamri9ddf56Mf/Sh1dXVJy/ThJVVV+fvf/87ll1/OlClTYsvHjRvHtddeyxtvvEFHR0ev75WJOXPmcO6558b+r6ioYObMmbHPzsTEpH+Yw1ImJqOUxx57jBkzZmCz2aiqqmLmzJlYLPHfI3/605/41re+xZYtWwgGg7H5mWI+Jk+enPE9stlG6s2/qKgIgNra2ozzW1tbAdi/fz8A119/fbe2tre3U1JS0u3y/fv3I4Rg+vTpGZfb7fak/2tqanA4HN1uT0cXEfPmzet2naamJnw+HzNnzkxbNnv2bDRN4+jRo8ydO7fX90sl9TMFKCkpiX12JiYm/cMUNyYmo5Rly5bFsqVS+ec//8lll13Geeedx+OPP864ceOw2+0888wzPPfcc2nrJ3po+rsNq9WacV+6my+EAIh5Ze677z4WLlyYcd38/PyM83U0TUNRFP76179mfL/U12eydzjIJApBen8y0dtnZ2Ji0j9McWNiMgb57W9/i8vl4m9/+xtOpzM2/5lnnhnWbfSFqVOnAlBYWMiqVat6XLc7cTB16lSEEEyePJkZM2YM2r7pw0w7duzodp2Kigo8Hg979+5NW7Znzx4sFkvMe6V7n9ra2pICnI8cOdLvfezuMzExMekeM+bGxGQMYrVaURQlySNw+PBhfv/73w/rNvrC4sWLmTp1Kvfffz9dXV1py5uammLP8/LyANKK+F155ZVYrVbuvPPONK+GEIIzZ870a98qKio477zzePrpp2loaEjbLsjP6d3vfjcvvvhiUir3qVOneO655zjnnHMoLCwE4kLu9ddfj63n9Xr5yU9+0q/9g+4/ExMTk+4xPTcmJmOQSy+9lAceeICLL76Ya6+9ltOnT/PYY48xbdo0tm3bNmzb6AsWi4Uf/vCHXHLJJcydO5cbbriBmpoajh8/zpo1aygsLOSPf/wjIIUQwFe+8hWuueYa7HY7733ve5k6dSrf+ta3uPXWWzl8+DCXX345BQUF1NfX87vf/Y4bb7yRz3/+8/3av4cffphzzjmHRYsWceONNzJ58mQOHz7Mn//8Z7Zs2QLAt771LV5++WXOOeccbrrpJmw2G0899RTBYJB77703tq13v/vd1NXV8bGPfYwvfOELWK1Wnn76aSoqKtLEU19ZuHAhVquV73znO7S3t+N0OrnwwguprKzs1/ZMTAzBCGZqmZiYZEBPG16/fn2P6/3oRz8S06dPF06nU8yaNUs888wzGVORAXHzzTcP+jbq6+sFIO67776k+WvWrBGA+PWvf500f/PmzeLKK68UZWVlwul0iokTJ4qrrrpKvPLKK0nrffOb3xQ1NTXCYrGkpU//9re/Feecc47Iy8sTeXl5YtasWeLmm28We/fuja1z/vnni7lz5/b42aWyY8cOccUVV4ji4mLhcrnEzJkzxde+9rWkdTZt2iQuuugikZ+fLzwej3jXu94l3nzzzbRtbdy4USxfvlw4HA5RV1cnHnjggW5TwS+99NK0159//vni/PPPT5r3gx/8QEyZMkVYrVYzLdzEpA8oQpiRayYmJiYmJia5gxlzY2JiYmJiYpJTmOLGxMTExMTEJKcwxY2JiYmJiYlJTmGKGxMTExMTE5OcwhQ3JiYmJiYmJjmFKW5MTExMTExMcgpT3JiYmJiYmJjkFKa4MTExMTExMckpTHFjYmJiYmJiklOY4sbExMTExMQkpzDFjYmJiYmJiUlOYYobExMTExMTk5zi/wOJ+7GffXV9AgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "params = {}\n", + "params['window'] = default_window\n", + "params['dim'] = None\n", + "params['num_heads'] = 1\n", + "params['state_dim'] = 1\n", + "\n", + "name = plot(all_accs, params, 'dim', 'layers', param_counts=all_params, x_axis='params')\n", + "plt.title(\"Average Final Accuracies (1 head, 1 state dimension)\")\n", + "plt.xlabel(\"Parameter count\")\n", + "plt.ylabel(\"Accuracy\")\n", + "savefig(task_name, name)" + ] + }, + { + "cell_type": "code", + "execution_count": 142, + "id": "a5d13fe7-d71a-4017-a83a-c30b2badd116", + "metadata": {}, + "outputs": [], + "source": [ + "# params = {}\n", + "# params['window'] = None\n", + "# params['dim'] = 20\n", + "# params['num_heads'] = 1\n", + "# params['state_dim'] = 1\n", + "\n", + "# name = plot(all_accs, params, 'window', 'layers', param_counts=all_params, x_axis='params')\n", + "# plt.title(\"Average Final Accuracies (dim 20, 1 head, 1 state dimension)\")\n", + "# plt.xlabel(\"Parameter count\")\n", + "# plt.ylabel(\"Accuracy\")\n", + "# savefig(task_name, name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "36c7b32d-4bcd-45a2-b309-ae1c751939e9", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ea3f8447", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "hybrid", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/source/official-code/micro/process_ood.ipynb b/source/official-code/micro/process_ood.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..f66f1ad8336f060e30953997ee10d0e69c8e405e --- /dev/null +++ b/source/official-code/micro/process_ood.ipynb @@ -0,0 +1,186 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 14, + "id": "17ebc670", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "989b4b5b", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import torch\n", + "import matplotlib.pyplot as plt\n", + "\n", + "from plt_utils import plot, savefig\n", + "\n", + "import os\n", + "\n", + "task_name, data_name = \"var_copy\", \"data_100_5_30\"" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "e0f9f46f", + "metadata": {}, + "outputs": [], + "source": [ + "dashed_task_name = '-'.join(task_name.split('_'))\n", + "\n", + "all_losses = {}\n", + "all_accs = {}\n", + "all_params = {}\n", + "all_eval_losses = {}\n", + "all_eval_accs = {}" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "f708d8a0", + "metadata": {}, + "outputs": [], + "source": [ + "for run_name in os.listdir(\"results_ood/\" + task_name + \"/\" + data_name):\n", + " if len(run_name.split(\"_\")) != 10: continue\n", + "\n", + " for run in os.listdir(\"results_ood/\" + task_name + \"/\" + data_name + \"/\" + run_name):\n", + " if run.startswith(\".\"):\n", + " continue\n", + " \n", + " # print(\"results_ood/\" + task_name + \"/\" + data_name + \"/\" + run_name + \"/\" + run)\n", + " data = torch.load(\"results_ood/\" + task_name + \"/\" + data_name + \"/\" + run_name + \"/\" + run, weights_only=False)\n", + " losses = data[\"losses\"]\n", + " accs = data[\"accs\"]\n", + " # args = data[\"args\"]\n", + " params = data[\"param_count\"]\n", + " eval_loss = data[\"eval_loss\"]\n", + " eval_acc = data[\"eval_acc\"].item()\n", + "\n", + " if run_name not in all_losses.keys():\n", + " all_losses[run_name] = losses.unsqueeze(0)\n", + " all_eval_losses[run_name] = [eval_loss]\n", + " all_accs[run_name] = accs.unsqueeze(0)\n", + " all_eval_accs[run_name] = [eval_acc]\n", + " all_params[run_name] = params\n", + " else:\n", + " all_accs[run_name] = torch.cat((all_accs[run_name], accs.unsqueeze(0)))\n", + " all_eval_accs[run_name].append(eval_acc)\n", + " all_eval_losses[run_name].append(eval_loss)\n", + " all_losses[run_name] = torch.cat((all_losses[run_name], losses.unsqueeze(0)))\n", + "\n", + "for run_name in all_losses.keys():\n", + " all_losses[run_name] = all_losses[run_name].detach().numpy()\n", + " all_accs[run_name] = all_accs[run_name].detach().numpy()\n", + " all_eval_losses[run_name] = np.array(all_eval_losses[run_name])\n", + " all_eval_accs[run_name] = np.array(all_eval_accs[run_name])" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "2833ca7a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "run_var-copy_SSM_SSM_w100_d12_nh1_sd1_nn5_nv30 0.43282261 0.39877721514891495\n", + "run_var-copy_SSM_SSM_w100_d15_nh1_sd1_nn5_nv30 0.61931986 0.5685863576152108\n", + "run_var-copy_TF_SSM_w100_d2_nh1_sd1_nn5_nv30 0.060773052 0.10188358480280096\n", + "run_var-copy_TF_SSM_w100_d12_nh1_sd1_nn5_nv30 0.21031484 0.24504086121239446\n", + "run_var-copy_TF_TF_w100_d2_nh1_sd1_nn5_nv30 0.03534364 0.02636057697236538\n", + "run_var-copy_TF_TF_w100_d15_nh1_sd1_nn5_nv30 0.41554186 0.5049803880127993\n", + "run_var-copy_SSM_TF_w100_d6_nh1_sd1_nn5_nv30 0.11954223 0.1465694470839067\n", + "run_var-copy_SSM_SSM_w100_d10_nh1_sd1_nn5_nv30 0.6125856 0.5405284464359283\n", + "run_var-copy_SSM_TF_w100_d8_nh1_sd1_nn5_nv30 0.45219678 0.4328746416352012\n", + "run_var-copy_SSM_SSM_w100_d2_nh1_sd1_nn5_nv30 0.0787262 0.11496004902503708\n", + "run_var-copy_TF_SSM_w100_d4_nh1_sd1_nn5_nv30 0.1014059 0.13624397258866916\n", + "run_var-copy_SSM_TF_w100_d20_nh1_sd1_nn5_nv30 0.67468256 0.6649037870493802\n", + "run_var-copy_SSM_TF_w100_d15_nh1_sd1_nn5_nv30 0.57955116 0.5650092546235431\n", + "run_var-copy_TF_TF_w100_d8_nh1_sd1_nn5_nv30 0.24238192 0.3181798972866752\n", + "run_var-copy_SSM_SSM_w100_d4_nh1_sd1_nn5_nv30 0.38514006 0.3294621326706626\n", + "run_var-copy_SSM_SSM_w100_d24_nh1_sd1_nn5_nv30 0.72951454 0.6708598299459978\n", + "run_var-copy_TF_SSM_w100_d10_nh1_sd1_nn5_nv30 0.26325858 0.29859892143444583\n", + "run_var-copy_SSM_TF_w100_d4_nh1_sd1_nn5_nv30 0.08546053 0.12569612569429658\n", + "run_var-copy_TF_TF_w100_d20_nh1_sd1_nn5_nv30 0.53927666 0.6394596750086005\n", + "run_var-copy_SSM_TF_w100_d12_nh1_sd1_nn5_nv30 0.55815214 0.45932409302754834\n", + "run_var-copy_TF_TF_w100_d24_nh1_sd1_nn5_nv30 0.69330955 0.7885203632441434\n", + "run_var-copy_TF_SSM_w100_d15_nh1_sd1_nn5_nv30 0.3340461 0.3105349088595672\n", + "run_var-copy_SSM_TF_w100_d24_nh1_sd1_nn5_nv30 0.78975546 0.6099584522572431\n", + "run_var-copy_SSM_SSM_w100_d20_nh1_sd1_nn5_nv30 0.029622627 0.019936622882431202\n", + "run_var-copy_TF_SSM_w100_d6_nh1_sd1_nn5_nv30 0.1267125 0.14985936405983838\n", + "run_var-copy_TF_TF_w100_d6_nh1_sd1_nn5_nv30 0.09642029 0.14757748219099912\n", + "run_var-copy_TF_SSM_w100_d20_nh1_sd1_nn5_nv30 0.46733 0.3361467854543166\n", + "run_var-copy_SSM_SSM_w100_d8_nh1_sd1_nn5_nv30 0.55762124 0.5054087720134042\n", + "run_var-copy_TF_TF_w100_d4_nh1_sd1_nn5_nv30 0.06929611 0.08527342568744313\n", + "run_var-copy_SSM_TF_w100_d2_nh1_sd1_nn5_nv30 0.06488876 0.10887749154459346\n", + "run_var-copy_SSM_SSM_w100_d6_nh1_sd1_nn5_nv30 0.31115448 0.3066261898387562\n", + "run_var-copy_TF_SSM_w100_d8_nh1_sd1_nn5_nv30 0.22431688 0.2580069218846885\n", + "run_var-copy_TF_SSM_w100_d24_nh1_sd1_nn5_nv30 0.48085716 0.3478721175342798\n", + "run_var-copy_TF_TF_w100_d10_nh1_sd1_nn5_nv30 0.26761094 0.3145741671323776\n", + "run_var-copy_SSM_TF_w100_d10_nh1_sd1_nn5_nv30 0.6060383 0.5851903490044854\n", + "run_var-copy_TF_TF_w100_d12_nh1_sd1_nn5_nv30 0.2751147 0.3406459783965891\n" + ] + } + ], + "source": [ + "for run_name in all_losses.keys():\n", + " layer1 = run_name.split(\"_\")[2]\n", + " layer2 = run_name.split(\"_\")[3]\n", + " # if layer1 == \"SSM\" and layer2 == \"SSM\":\n", + " print(run_name, np.mean(all_accs[run_name][:,-1]), np.mean(all_eval_accs[run_name]))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2f1f9878", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "hybrid", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/source/official-code/micro/results/assoc_recall/fig/dim_epochs.png b/source/official-code/micro/results/assoc_recall/fig/dim_epochs.png new file mode 100644 index 0000000000000000000000000000000000000000..7edb37d2ca365957d8f4bbfd6b4fe566dbc8aacf Binary files /dev/null and b/source/official-code/micro/results/assoc_recall/fig/dim_epochs.png differ diff --git a/source/official-code/micro/results/assoc_recall/fig/layers_dim.png b/source/official-code/micro/results/assoc_recall/fig/layers_dim.png new file mode 100644 index 0000000000000000000000000000000000000000..7baa67bade0910ad319aa1bdaa2c6573ecbe9c1d Binary files /dev/null and b/source/official-code/micro/results/assoc_recall/fig/layers_dim.png differ diff --git a/source/official-code/micro/results/assoc_recall/fig/layers_num_heads.png b/source/official-code/micro/results/assoc_recall/fig/layers_num_heads.png new file mode 100644 index 0000000000000000000000000000000000000000..7966cd92f84805378a5d04c660e1c3cfc81b0c66 Binary files /dev/null and b/source/official-code/micro/results/assoc_recall/fig/layers_num_heads.png differ diff --git a/source/official-code/micro/results/assoc_recall/fig/layers_state_dim.png b/source/official-code/micro/results/assoc_recall/fig/layers_state_dim.png new file mode 100644 index 0000000000000000000000000000000000000000..3af080d61902ece2a99406860798d663b02e4e2a Binary files /dev/null and b/source/official-code/micro/results/assoc_recall/fig/layers_state_dim.png differ diff --git a/source/official-code/micro/results/assoc_recall/fig/layers_window.png b/source/official-code/micro/results/assoc_recall/fig/layers_window.png new file mode 100644 index 0000000000000000000000000000000000000000..e97480d9a81b73f211031aa24cbd293da92fefc4 Binary files /dev/null and b/source/official-code/micro/results/assoc_recall/fig/layers_window.png differ diff --git a/source/official-code/micro/results/assoc_recall_mk/fig/dim_epochs.png b/source/official-code/micro/results/assoc_recall_mk/fig/dim_epochs.png new file mode 100644 index 0000000000000000000000000000000000000000..8e18843a16ee19f9ffd248b7c24761632422815f Binary files /dev/null and b/source/official-code/micro/results/assoc_recall_mk/fig/dim_epochs.png differ diff --git a/source/official-code/micro/results/assoc_recall_mk/fig/layers_dim.png b/source/official-code/micro/results/assoc_recall_mk/fig/layers_dim.png new file mode 100644 index 0000000000000000000000000000000000000000..d79805126d5fe4f259cc8694320e4f281a61d943 Binary files /dev/null and b/source/official-code/micro/results/assoc_recall_mk/fig/layers_dim.png differ diff --git a/source/official-code/micro/results/assoc_recall_mk/fig/layers_num_heads.png b/source/official-code/micro/results/assoc_recall_mk/fig/layers_num_heads.png new file mode 100644 index 0000000000000000000000000000000000000000..8843715fb71edcee380c7ce99c632e2c027750f5 Binary files /dev/null and b/source/official-code/micro/results/assoc_recall_mk/fig/layers_num_heads.png differ diff --git a/source/official-code/micro/results/assoc_recall_mk/fig/layers_state_dim.png b/source/official-code/micro/results/assoc_recall_mk/fig/layers_state_dim.png new file mode 100644 index 0000000000000000000000000000000000000000..149994019b65bf5d9656a5685ef5a76437b67521 Binary files /dev/null and b/source/official-code/micro/results/assoc_recall_mk/fig/layers_state_dim.png differ diff --git a/source/official-code/micro/results/assoc_recall_mk/fig/layers_window.png b/source/official-code/micro/results/assoc_recall_mk/fig/layers_window.png new file mode 100644 index 0000000000000000000000000000000000000000..1a523aa8c00853265b10d169a0cfc90aef2f0ada Binary files /dev/null and b/source/official-code/micro/results/assoc_recall_mk/fig/layers_window.png differ diff --git a/source/official-code/micro/results/binary_recall_mix/fig/dim_epochs.png b/source/official-code/micro/results/binary_recall_mix/fig/dim_epochs.png new file mode 100644 index 0000000000000000000000000000000000000000..2c458048805612b823e9b166217497ec89825598 Binary files /dev/null and b/source/official-code/micro/results/binary_recall_mix/fig/dim_epochs.png differ diff --git a/source/official-code/micro/results/binary_recall_mix/fig/layers_dim.png b/source/official-code/micro/results/binary_recall_mix/fig/layers_dim.png new file mode 100644 index 0000000000000000000000000000000000000000..0fc994d0a3e3238fc0f5fe55e445f75805cf3169 Binary files /dev/null and b/source/official-code/micro/results/binary_recall_mix/fig/layers_dim.png differ diff --git a/source/official-code/micro/results/binary_recall_mix/fig/layers_num_heads.png b/source/official-code/micro/results/binary_recall_mix/fig/layers_num_heads.png new file mode 100644 index 0000000000000000000000000000000000000000..7a47874fcaa2d2515db768fb74d88b2735c46731 Binary files /dev/null and b/source/official-code/micro/results/binary_recall_mix/fig/layers_num_heads.png differ diff --git a/source/official-code/micro/results/binary_recall_mix/fig/layers_state_dim.png b/source/official-code/micro/results/binary_recall_mix/fig/layers_state_dim.png new file mode 100644 index 0000000000000000000000000000000000000000..c2bb49b56b33130b81720da0ca08c46bb155085e Binary files /dev/null and b/source/official-code/micro/results/binary_recall_mix/fig/layers_state_dim.png differ diff --git a/source/official-code/micro/results/binary_recall_mix/fig/layers_window.png b/source/official-code/micro/results/binary_recall_mix/fig/layers_window.png new file mode 100644 index 0000000000000000000000000000000000000000..9fc5a28874b7d8c5938f5e1e89563600263ad202 Binary files /dev/null and b/source/official-code/micro/results/binary_recall_mix/fig/layers_window.png differ diff --git a/source/official-code/micro/results/var_copy/fig/dim_epochs.png b/source/official-code/micro/results/var_copy/fig/dim_epochs.png new file mode 100644 index 0000000000000000000000000000000000000000..5677cee2782a915deddcda3e887ac6e827a07360 Binary files /dev/null and b/source/official-code/micro/results/var_copy/fig/dim_epochs.png differ diff --git a/source/official-code/micro/results/var_copy/fig/layers_dim.png b/source/official-code/micro/results/var_copy/fig/layers_dim.png new file mode 100644 index 0000000000000000000000000000000000000000..df9d3df149e5f2f770a3c3e2deda29112905b668 Binary files /dev/null and b/source/official-code/micro/results/var_copy/fig/layers_dim.png differ diff --git a/source/official-code/micro/results/var_copy/fig/layers_num_heads.png b/source/official-code/micro/results/var_copy/fig/layers_num_heads.png new file mode 100644 index 0000000000000000000000000000000000000000..5f51807ae8a11a8fa427e052a9c65d399e59dc52 Binary files /dev/null and b/source/official-code/micro/results/var_copy/fig/layers_num_heads.png differ diff --git a/source/official-code/micro/results/var_copy/fig/layers_state_dim.png b/source/official-code/micro/results/var_copy/fig/layers_state_dim.png new file mode 100644 index 0000000000000000000000000000000000000000..eb6a6301f28a8d8ed9664da94db51d5700d91480 Binary files /dev/null and b/source/official-code/micro/results/var_copy/fig/layers_state_dim.png differ diff --git a/source/official-code/micro/results/var_copy/fig/layers_window.png b/source/official-code/micro/results/var_copy/fig/layers_window.png new file mode 100644 index 0000000000000000000000000000000000000000..91f71dafbcafd0279cbe115f5fa9cf6dd3f0f446 Binary files /dev/null and b/source/official-code/micro/results/var_copy/fig/layers_window.png differ diff --git a/source/official-code/micro/train.py b/source/official-code/micro/train.py new file mode 100644 index 0000000000000000000000000000000000000000..3b9ccd3b76734d8ac804a3b23e377393ee7f5d4d --- /dev/null +++ b/source/official-code/micro/train.py @@ -0,0 +1,74 @@ +import argparse +from train_utils import train, choose_lr +from generate import set_task_specific_parameters +import torch + +def parse_args(): + parser = argparse.ArgumentParser() + + # Data parameters + parser.add_argument('--task_name', required=True, help="Task to train the model") + parser.add_argument('--run_number', required=True, type=int, help="Which run we currently are on") + + parser.add_argument('--sequence_len', default=100, type=int, help="Length of the sequences to train on") + parser.add_argument('--batch_size', default=64, type=int, help="Size of the training and testing batches") + parser.add_argument('--batches_per_epoch', default=1000, type=int, help="Number of training batches seen per epoch") + + parser.add_argument("--ood_eval", default=False, type=bool, help="If true, perform OOD evaluation after each epoch") + parser.add_argument("--eval_batches_per_epoch", default=100, type=int, help="Number of evaluation batches per epoch") + + parser.add_argument('--num_vocab', default=30, help="Number of vocab. Can be modified based on task") + parser.add_argument('--num_numbers', default=5, help="Number of number tokens. Can be modified based on task") + parser.add_argument('--p', default=0.1, type=float, help="Probability, based on the task") + parser.add_argument('--num_bits', default=4, type=float, help="Number of bits, based on the task") + + parser.add_argument('--eval_num_vocab', default=30, help="Number of vocab. Can be modified based on task. Ignored if ood_data is false") + parser.add_argument('--eval_num_numbers', default=5, help="Number of number tokens. Can be modified based on task. Ignored if ood_data is false") + parser.add_argument('--eval_p', default=0.1, type=float, help="Probability, based on the task. Ignored if ood_data is false") + parser.add_argument('--eval_num_bits', default=4, type=float, help="Number of bits, based on the task. Ignored if ood_data is false") + + # Model parameters + parser.add_argument("--num_epochs", default=10, type=int, help="Number of epochs to train for") + + parser.add_argument('--layer1', choices=['SSM', 'TF'], default='SSM', help="First layer of the 2-layer model") + parser.add_argument('--layer2', choices=['SSM', 'TF'], default='TF', help="Second layer of the 2-layer model") + + parser.add_argument('--embed_dim', default=12, type=int, help="Embedding dimension of the tokens") + parser.add_argument('--num_heads', default=1, type=int, help="Number of heads for the transformer layers") + parser.add_argument('--state_dim', default=1, type=int, help="State dimension fo the mamba layers") + parser.add_argument('--window', default=20, type=int, help="Width of the windowing for the transformer attention") + + parser.add_argument('--lr', default=0, type=float, help="Model learning rate. Defaults to hyperparameter tuning") + parser.add_argument('--lr_epochs', default=3, type=int, help="The number of epochs to train the model to determine the lr") + parser.add_argument('--lr_low', default=1e-3, type=float, help="Smallest lr tried. Unused if lr defined") + parser.add_argument('--lr_high', default=1e-0, type=float, help="Largest lr tried. Unused if lr defined") + parser.add_argument('--lr_num', default=13, type=int, help="Number of lrs tried. Unused if lr defined") + + parser.add_argument('--pytorch_transformer', default=False, type=bool, help="If true, use a pytorch TF. Otherwise, use a handwritten one") + parser.add_argument('--positional_encoding', default='learned', choices=["learned", "sine", "none"], help="If true, use a pytorch TF. Otherwise, use a handwritten one") + + parser.add_argument("--save", default=False, type=bool, help="If true, will save the resuls data") + parser.add_argument("--save_path", default="", help="Path to save the model. No path provided does not save the model") + + parser.add_argument('--lr_only', default=False, type=bool, help="If true, will not train a model, just determine the best learning rate") + parser.add_argument("--train_only", default=False, type=bool, help="If true, will train the model and not save it") + parser.add_argument("--lr_no_save", default=False, type=bool, help="If true, find a new lr but also not save it") + parser.add_argument("--force_learn", default=False, type=bool, help="If true, overwrite the existing results when saving") + + parser.add_argument("--expand", type=int, help="The expand parameter for the SSM") + + return parser.parse_args() + +args = parse_args() +args.layers = [args.layer1, args.layer2] +args.run_name = "run%d.pt" % args.run_number +set_task_specific_parameters(args) + +if args.lr == 0: + args.lr = choose_lr(args) + +if (not args.lr_only) or args.train_only: + model = train(args) + +if len(args.save_path) > 0: + torch.save(model, "saved_models/" + args.save_path) \ No newline at end of file diff --git a/source/official-code/micro/train_utils.py b/source/official-code/micro/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..756ebda952b7c4845c0f137d0c5a5ed12ea513c9 --- /dev/null +++ b/source/official-code/micro/train_utils.py @@ -0,0 +1,276 @@ +import torch +import torch.optim as optim +import torch.nn as nn +from torch.utils.data import Dataset, DataLoader + +import json +import os +import numpy as np +import math + +from generate import generate_data +from models.hybrid import HybridModel +from models.transformer import generate_mask + + + +def get_ident_name(args): + dashed_task_name = "-".join(args.task_name.split("_")) + return "run_%s_%s_%s_w%d_d%d_nh%d_sd%d_nn%d_nv%d" % (dashed_task_name, args.layer1, args.layer2, args.window, args.embed_dim, \ + args.num_heads, args.state_dim, args.num_numbers, args.num_vocab) + +def get_task_dir_name(args): + return args.task_name + "/" + args.data_name + "/" + get_ident_name(args) + +def make_dir(args): + if args.ood_eval: + if 'results_ood' not in os.listdir('.'): + os.mkdir('results_ood') + base_path = 'results_ood' + else: + if 'results' not in os.listdir('.'): + os.mkdir('results') + base_path = 'results' + + if args.task_name not in os.listdir(base_path + ''): + os.mkdir(base_path + '/' + args.task_name) + + if args.data_name not in os.listdir(base_path + '/' + args.task_name): + os.mkdir(base_path + '/' + args.task_name + "/" + args.data_name) + + if get_ident_name(args) not in os.listdir(base_path + '/' + args.task_name + "/" + args.data_name): + os.mkdir(base_path + '/' + args.task_name + "/" + args.data_name + "/" + get_ident_name(args)) + + + +class CustomDataset(Dataset): + def __init__(self, data_in, data_out): + self.data_in = data_in + self.data_out = data_out + + def __len__(self): + return len(self.data_in) + + def __getitem__(self, idx): + sample_in = self.data_in[idx] + sample_out = self.data_out[idx] + + return sample_in, sample_out + + + +def get_scheduler(args, optimizer): + total_steps = args.batches_per_epoch * args.num_epochs + warmup_steps = args.batches_per_epoch // 10 # Make the warmup be 10% of an epoch + + def lr_lambda(step): + if step < warmup_steps: + return step / warmup_steps + progress = (step - warmup_steps) / (total_steps - warmup_steps) + return 0.5 * (1 + math.cos(math.pi * progress)) + + return optim.lr_scheduler.LambdaLR(optimizer, lr_lambda) + + + +def train_epoch(model, optimizer, lr_scheduler, criterion, mask, train_loader, args, device="cuda"): + model.train() + + avg_loss = 0 + avg_acc = 0 + + # for itr in range(args.batches_per_epoch): + # print("Batch:", itr) + # input_seqs, target_seqs = generate_data(args) + + for itr, (input_seqs, target_seqs) in enumerate(train_loader): + + input_seqs = input_seqs.to(device) + target_seqs = target_seqs.type(torch.LongTensor).to(device) + + outputs = model(input_seqs, mask) # (batch, seq-1, vocab) + + # Masked loss, ignore positions which have null tokens (== vocab_size-1) + loss_mask = (target_seqs != args.vocab_size-1) + loss = loss_mask.reshape(-1) * criterion(outputs.view(-1, args.vocab_size), target_seqs.reshape(-1)) + loss = loss.sum() / loss_mask.sum() + + acc = torch.sum(loss_mask & ((torch.argmax(outputs, dim=-1) - target_seqs) == 0)).item() + acc /= loss_mask.sum() + + optimizer.zero_grad() + loss.backward() + optimizer.step() + lr_scheduler.step() + + avg_loss += loss.item() + avg_acc += acc + + avg_loss /= args.batches_per_epoch + avg_acc /= args.batches_per_epoch + + return avg_loss, avg_acc + + +def eval_epoch(model, criterion, mask, eval_loader, args, device="cuda"): + model.eval() + + avg_loss = 0 + avg_acc = 0 + + for itr, (input_seqs, target_seqs) in enumerate(eval_loader): + + input_seqs = input_seqs.to(device) + target_seqs = target_seqs.type(torch.LongTensor).to(device) + + outputs = model(input_seqs, mask) # (batch, seq-1, vocab) + + # Masked loss, ignore positions which have null tokens (== vocab_size-1) + loss_mask = (target_seqs != args.vocab_size-1) + loss = loss_mask.reshape(-1) * criterion(outputs.view(-1, args.vocab_size), target_seqs.reshape(-1)) + loss = loss.sum() / loss_mask.sum() + + acc = torch.sum(loss_mask & ((torch.argmax(outputs, dim=-1) - target_seqs) == 0)).item() + acc /= loss_mask.sum() + + avg_loss += loss.item() + avg_acc += acc + + avg_loss /= args.batches_per_epoch + avg_acc /= args.batches_per_epoch + + return avg_loss, avg_acc + + + +def choose_lr(args): + # If found already, use what is cached + ident_name = get_ident_name(args) + with open('models/lrs.json') as f: + d = json.load(f) + if (not args.lr_no_save) and ident_name in d.keys(): + return d[ident_name] + + train_dataset = CustomDataset(*generate_data(args, all_at_once=True)) + train_loader = DataLoader(train_dataset, batch_size=args.batch_size, shuffle=True) + + assert args.window <= args.sequence_len + + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + + print("Starting to find lr for results/" + args.data_name + "/" + args.run_name) + + lrs = np.geomspace(args.lr_low, args.lr_high, args.lr_num) + criterion = nn.CrossEntropyLoss(reduction='none') + all_losses = np.zeros_like(lrs) + + for itr, lr in enumerate(lrs): + curr_losses = [] + print("- Current learning rate: %.4f" % lr) + for run in range(3): + model = HybridModel(args).to(device) + + optimizer = optim.AdamW(model.parameters(), lr=lr, weight_decay=1e-2) + lr_scheduler = get_scheduler(args, optimizer) + + mask = generate_mask(args.sequence_len, window=args.window).to(device) + + # Training loop + for epoch in range(args.lr_epochs): + loss, acc = train_epoch(model, optimizer, lr_scheduler, criterion, mask, train_loader, args, device) + + print(f"- - Loss: {loss:.4f}, Acc: {acc:.4f}") + + curr_losses.append(loss) + + all_losses[itr] = np.median(np.array(curr_losses)) + + all_losses = np.nan_to_num(all_losses, nan=100) # Nan needs to be a big number + lr = lrs[np.argmin(all_losses)] + print("Loss array:", all_losses) + print("Determined a lr of", lr) + + if not args.lr_no_save: + # Saving the lr + with open('models/lrs.json') as f: + d = json.load(f) + d[ident_name] = lr + with open('models/lrs.json', 'w') as f: + json.dump(d, f, indent=4) + + return lr + + + +def train(args): + assert args.window <= args.sequence_len + + if args.save: + dir_name = get_task_dir_name(args) + if not args.force_learn: + if args.ood_eval: + if os.path.isdir("results_ood/" + dir_name) and "run%d.pt" % args.run_number in os.listdir("results_ood/" + dir_name): + return + else: + if os.path.isdir("results/" + dir_name) and "run%d.pt" % args.run_number in os.listdir("results/" + dir_name): + return + + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + + train_dataset = CustomDataset(*generate_data(args, all_at_once=True)) + train_loader = DataLoader(train_dataset, batch_size=args.batch_size, shuffle=True) + + print("Starting work for results/" + args.data_name + "/" + args.run_name) + + model = HybridModel(args).to(device) + criterion = nn.CrossEntropyLoss(reduction='none') + + optimizer = optim.AdamW(model.parameters(), lr=args.lr, weight_decay=1e-2) + lr_scheduler = get_scheduler(args, optimizer) + + mask = generate_mask(args.sequence_len, window=args.window).to(device) + + # Training loop + losses = [] + accs = [] + + for epoch in range(args.num_epochs): + loss, acc = train_epoch(model, optimizer, lr_scheduler, criterion, mask, train_loader, args, device) + + losses.append(loss) + accs.append(acc) + + print(f"Loss: {losses[-1]:.4f}, Acc: {accs[-1]:.4f}") + + losses = torch.Tensor(losses) + accs = torch.Tensor(accs) + + # Evaluation + if args.ood_eval: + args.num_vocab = args.eval_num_vocab + args.num_numbers = args.eval_num_numbers + args.p = args.eval_p + args.num_bits = args.eval_num_bits + + eval_dataset = CustomDataset(*generate_data(args, all_at_once=True)) + eval_loader = DataLoader(eval_dataset, batch_size=args.batch_size, shuffle=True) + + eval_loss, eval_acc = eval_epoch(model, criterion, mask, eval_loader, args, device) + print(f"Eval - Loss: {eval_loss:.4f}, Acc: {eval_acc:.4f}") + + # Save the model + if args.save and not args.train_only: + make_dir(args) + dir_name = get_task_dir_name(args) + if args.ood_eval: + run_filename = "results_ood/" + dir_name + "/run%d.pt" % args.run_number + else: + run_filename = "results/" + dir_name + "/run%d.pt" % args.run_number + + # Count of the parameters + params = sum(p.numel() for p in model.parameters() if p.requires_grad) + + torch.save({"args": args, "losses": losses, "accs": accs, "param_count": params, "eval_loss": eval_loss, "eval_acc": eval_acc}, run_filename) + print("Saved and finished for %s" % run_filename) + + return model \ No newline at end of file diff --git a/source/official-code/micro_hf/cmds.txt b/source/official-code/micro_hf/cmds.txt new file mode 100644 index 0000000000000000000000000000000000000000..52ae7be5524444c02578b143563410d86dde9001 --- /dev/null +++ b/source/official-code/micro_hf/cmds.txt @@ -0,0 +1,3 @@ +python3 main.py --train_task var-copy --eval_task var-copy --layer1 SSM --layer2 TF --lr 1e-2 --hidden_size 4 + +jupyter nbconvert --execute --to notebook --inplace run.ipynb & \ No newline at end of file diff --git a/source/official-code/micro_hf/data_utils.py b/source/official-code/micro_hf/data_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..b4e665a3f872693603c9c3c46fa31c427931a10b --- /dev/null +++ b/source/official-code/micro_hf/data_utils.py @@ -0,0 +1,276 @@ +import numpy as np +import torch +from torch.utils.data import Dataset +import string +from generate import generate_seq + +from transformers import AutoTokenizer + +################################################################# + +# Tokenizer +class Tokenizer: + def __init__(self, TO_TOKEN, vocab_tokens, number_tokens): + + self.TO_TOKEN = TO_TOKEN + self.TO_STR = {v:k for k, v in TO_TOKEN.items()} + + self.vocab = np.array(list(TO_TOKEN.keys())) + + self.vocab_tokens = vocab_tokens + self.number_tokens = number_tokens + self.num_vocab = len(self.vocab_tokens) + self.num_numbers = len(self.number_tokens) + + self.bos_token = self.TO_TOKEN[''] + self.eos_token = self.TO_TOKEN[''] + self.null = '' + + # Human readible printing + vocab_part = {self.TO_TOKEN[k]: v for (k, v) in zip(self.vocab_tokens, string.ascii_lowercase[:self.num_vocab])} + number_part = {self.TO_TOKEN[t]: t[1:] for t in self.number_tokens} + + self.TO_STRING = {**vocab_part, **number_part} + self.TO_STRING[self.bos_token] = "$" + self.TO_STRING[self.eos_token] = "." + self.TO_STRING[self.TO_TOKEN[self.null]] = "_" + + def __call__(self, x): + encoded = [self.TO_TOKEN[c] for c in x] + return torch.tensor(encoded, dtype=torch.int64) + + def decode(self, x): + x = x.detach().cpu().numpy() + decoded = [str(t) if t not in self.TO_STR else self.TO_STR[t] for t in x] + return decoded + + def __len__(self): + return len(self.TO_TOKEN) + + # def to_string(self, x, pytorch=True): + # if pytorch: + # return "".join([self.TO_STRING[t.item()] for t in x]) + # else: + # return "".join([self.TO_STRING[self.TO_TOKEN[t]] for t in x]) + + +def get_tokenizer(args): + if args.model == "pretrained": + tokenizer = AutoTokenizer.from_pretrained(args.pretrained_model) + return tokenizer + + # Vocab tokens look like 'V' + number + vocab_tokens = ["V%d" % i for i in range(args.num_vocab)] + + # Create number tokens. Variable copy tasks start with 5, not 0 + if args.train_task.startswith("var-copy"): + number_tokens = ["#%d" % (5+i) for i in range(args.num_numbers)] + else: + number_tokens = ["#%d" % i for i in range(args.num_numbers)] + + vocab = vocab_tokens + number_tokens + ["", "", ""] + + TO_TOKEN = dict(zip(vocab, range(len(vocab)))) + + tokenizer = Tokenizer(TO_TOKEN, vocab_tokens, number_tokens) + + return tokenizer + + +################################################################# + +# Datasets + +class TrainDataset(Dataset): + def __init__(self, + tokenizer, + task="var_copy", + sequence_length=220, + min_subseq_length=20, + max_subseq_length=50, + num_examples=1000, + batch_size=8, + p=0.2, + pack_examples=False, + mixed=False): + + self.tokenizer = tokenizer + self.task = task + self.num_vocab = self.tokenizer.num_vocab + self.num_numbers = self.tokenizer.num_numbers + + self.sequence_length = sequence_length + self.min_subseq_length = min_subseq_length + self.max_subseq_length = max_subseq_length + self.num_examples = num_examples + self.batch_size = batch_size + self.p = p + self.pack_examples = pack_examples + self.mixed = mixed + + def __len__(self): + return self.num_examples + + def __getitem__(self, idx): + if idx >= self.num_examples: + raise IndexError("Index out of range in dataset") + batch = {'input': [], 'input_ids': [], 'output': [], 'output_ids': [], 'mask': []} + + for _ in range(self.batch_size): + + # Fill the context with subsequences of the desired task + prospective_len = 0 + input_seq = [] + output_seq = [] + mask = [] + + if self.pack_examples: + while prospective_len < self.sequence_length: + # Sample for the task + length = np.random.randint(self.min_subseq_length, self.max_subseq_length+1) + input_sample, output_sample = generate_seq_and_mask(self.tokenizer, length, self.task, self.p, mixed=self.mixed) + + input_sample = [""] + input_sample + [""] + output_sample = [""] + output_sample + [""] + mask_sample = [0 if i in ["", "", ""] else 1 for i in output_seq] + + # Add the sample to the context + if prospective_len + len(input_sample) <= self.sequence_length: + prospective_len += len(input_sample) + input_seq += input_sample + output_seq += output_sample + mask += mask_sample + # Not enough room for another sample + else: + remaining_len = self.sequence_length - prospective_len + remaining_mask_len = self.sequence_length - prospective_len + input_seq += input_sample[:remaining_len] + output_seq += output_sample[:remaining_len] + mask += [0] * (remaining_mask_len) # Just mask it + break + + else: + input_seq, output_seq = generate_seq(self.tokenizer, self.sequence_length, self.task, self.p, mixed=self.mixed) + mask = [0 if i in ["", "", ""] else 1 for i in output_seq] + + # Add the sequence to the sampled dataset + assert len(input_seq) == len(mask) + input_ids = self.tokenizer(input_seq) + output_ids = self.tokenizer(output_seq) + mask = torch.tensor(mask) + + batch['input'].append(input_seq) + batch['input_ids'].append(input_ids) + batch['output'].append(output_seq) + batch['output_ids'].append(output_ids) + batch['mask'].append(mask) + + batch['input_ids'] = torch.stack(batch['input_ids'], dim=0) + batch['output_ids'] = torch.stack(batch['output_ids'], dim=0) + batch['mask'] = torch.stack(batch['mask'], dim=0) + return batch + + +class EvalDataset(Dataset): + def __init__(self, + tokenizer, + train_task="var_copy", + sequence_length=220, + min_subseq_length=20, + max_subseq_length=50, + num_examples=1000, + batch_size=8, + p=0.2, + mixed=False): + + self.tokenizer = tokenizer + self.train_task = train_task + + self.sequence_length = sequence_length + self.min_subseq_length = min_subseq_length + self.max_subseq_length = max_subseq_length + self.num_examples = num_examples + self.batch_size = batch_size + self.p = p + self.mixed = mixed + + def __len__(self): + return self.num_examples + + def __getitem__(self, idx): + batch = {'input': [], 'input_ids': [], 'output': [], 'output_ids': [], 'mask': []} + + for _ in range(self.batch_size): + + # Fill the context with subsequences of the desired task + prospective_len = 0 + input_seq = [] + output_seq = [] + mask = [] + + # Sample for the task + length = np.random.randint(self.min_subseq_length, self.max_subseq_length+1) + input_seq, output_seq = generate_seq(self.tokenizer, length, self.train_task, self.p, mixed=self.mixed) + mask = [0 if i in ["", "", ""] else 1 for i in output_seq] + + # DO NOT REPLACE + # Fill the context with null tokens + input_seq += [""] * (self.sequence_length - len(input_seq)) + output_seq += [""] * (self.sequence_length - len(output_seq)) + mask += [0] * (self.sequence_length - len(mask)) + + # Add the sequence to the sampled dataset + assert len(input_seq) == len(mask) + input_ids = self.tokenizer(input_seq) + output_ids = self.tokenizer(output_seq) + mask = torch.tensor(mask) + + batch['input'].append(input_seq) + batch['input_ids'].append(input_ids) + batch['output'].append(output_seq) + batch['output_ids'].append(output_ids) + batch['mask'].append(mask) + + batch['input_ids'] = torch.stack(batch['input_ids'], dim=0) + batch['output_ids'] = torch.stack(batch['output_ids'], dim=0) + batch['mask'] = torch.stack(batch['mask'], dim=0) + return batch + + +################################################################# + +# Util functions + +def get_train_dataset(args, tokenizer): + train_dataset = TrainDataset( + tokenizer=tokenizer, + task=args.train_task, + + sequence_length=args.sequence_length, + min_subseq_length=args.min_train_length, + max_subseq_length=args.max_train_length, + num_examples=args.num_examples, + batch_size=args.train_batch_size, + p=args.p, + pack_examples=args.pack_examples, + mixed=args.mixed + ) + + return train_dataset + + +def get_eval_dataset(args, tokenizer, min_length, max_length): + eval_dataset = EvalDataset( + tokenizer=tokenizer, + train_task=args.train_task, + + sequence_length=args.sequence_length, + min_subseq_length=min_length, + max_subseq_length=max_length, + num_examples=args.num_eval_examples, + batch_size=args.eval_batch_size, + p=args.eval_p, + mixed=args.mixed + ) + + return eval_dataset diff --git a/source/official-code/micro_hf/generate.py b/source/official-code/micro_hf/generate.py new file mode 100644 index 0000000000000000000000000000000000000000..23a8dd3f45e8acfdb8b7df778d25f3ff80cae22c --- /dev/null +++ b/source/official-code/micro_hf/generate.py @@ -0,0 +1,239 @@ +# Sequence Generation +import numpy as np +import math +from collections import defaultdict + + +task_choices = ["var-copy", "var-copy-rep", "decode-recall", "decode-recall-last", "assoc-recall", "assoc-recall-mk", "needle"] + + +def force_args(args): + if args.train_task in ["var-copy", "var-copy-rep"]: + pass + + if args.train_task in ["decode-recall", "decode-recall-last"]: + args.num_numbers = 2 + args.num_vocab = int(2 ** math.floor(math.log(args.num_vocab) / math.log(2))) + + if args.train_task == "assoc-recall": + args.num_numbers = 0 + + if args.train_task == "assoc-recall-mk": + args.num_numbers = 0 + # args.num_vocab = 1 + int(args.num_vocab ** (1./size_key)) + + if args.train_task == "needle": + args.num_numbers = 2 + + +def generate_seq(tokenizer, length, task, p=0.2, mixed=False): + num_vocab = tokenizer.num_vocab + num_numbers = tokenizer.num_numbers + + if task == "var-copy": + # Start with num_numbers vocab tokens + if mixed: + if np.random.rand() < 0.5: + # Hard for the TF + input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=0.03) + else: + # Hard for the SSM + input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=0.2) + input_seq[-1] = np.random.choice(tokenizer.number_tokens) + else: + input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=p) + # input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers) + + nums = [(i, int(c[1:])) for (i, c) in enumerate(input_seq) if c in tokenizer.number_tokens] + + # The real task, if not degenerate + if len(nums) > 0: + output_seq = [""] * nums[0][0] + + for i in range(len(nums)-1): + if nums[i][0]-nums[i][1] < 0: + if nums[i+1][0]-nums[i][1] < 0: + output_seq += [""] * (nums[i+1][0]-nums[i][0]) + else: + output_seq += [""] * (nums[i][1]-nums[i][0]) + output_seq += input_seq[:nums[i+1][0]-nums[i][1]] + else: + output_seq += input_seq[nums[i][0]-nums[i][1]:nums[i+1][0]-nums[i][1]] + + if nums[-1][0]-nums[-1][1] < 0: + output_seq += [""] * (nums[-1][1]-nums[-1][0]) + output_seq += input_seq[:-nums[-1][1]] + else: + output_seq += input_seq[nums[-1][0]-nums[-1][1]:-nums[-1][1]] + else: + output_seq = [""] * length + + # output_seq = [""] + output_seq[:length] + [""] + + elif task == "var-copy-rep": + # Start with num_numbers vocab tokens + # input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=p) + input_seq = rand_seq_special(tokenizer, length, num_vocab, num_numbers, p_numbers=p, special_type="repetitive_vocab") + + nums = [(i, int(c[1:])) for (i, c) in enumerate(input_seq) if c in tokenizer.number_tokens] + + # The real task, if not degenerate + if len(nums) > 0: + output_seq = [""] * nums[0][0] + + for i in range(len(nums)-1): + if nums[i][0]-nums[i][1] < 0: + if nums[i+1][0]-nums[i][1] < 0: + output_seq += [""] * (nums[i+1][0]-nums[i][0]) + else: + output_seq += [""] * (nums[i][1]-nums[i][0]) + output_seq += input_seq[:nums[i+1][0]-nums[i][1]] + else: + output_seq += input_seq[nums[i][0]-nums[i][1]:nums[i+1][0]-nums[i][1]] + + if nums[-1][0]-nums[-1][1] < 0: + output_seq += [""] * (nums[-1][1]-nums[-1][0]) + output_seq += input_seq[:-nums[-1][1]] + else: + output_seq += input_seq[nums[-1][0]-nums[-1][1]:-nums[-1][1]] + else: + output_seq = [""] * length + + input_seq = [""] + input_seq + [""] + output_seq = [""] + output_seq + [""] + # output_seq = [""] + output_seq[:length] + [""] + + elif task == "decode-recall": + input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=p) + output_seq = [None for _ in range(len(input_seq))] + + assoc = {v: "" for v in tokenizer.vocab} + s = 0 + for i in range(len(output_seq)): + if i != 0: + assoc[input_seq[i-1]] = input_seq[i] + + if input_seq[i][0] == '#': + # s = (2 * s + int(input_seq[i][1:])) % num_numbers + s = (2 * s + int(input_seq[i][1:])) % num_vocab + + # if i-s < 0: + # output_seq[i] = "" + # else: + # output_seq[i] = input_seq[i-s] + + output_seq[i] = assoc["V%d" % s] + + elif task == "decode-recall-last": + input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=0) + output_seq = ["" for _ in range(len(input_seq))] + + n_bits = int(math.log(num_vocab)/math.log(2)) + + target = np.random.randint(0, num_vocab) + temp = target + for i in range(length-1, length-1-n_bits, -1): + input_seq[i] = "#%d" % (temp % 2) + temp = temp // 2 + + try: + i = length-2-n_bits - input_seq[-2-n_bits::-1].index("V%d" % target) + output_seq[-1] = input_seq[i+1] + except ValueError: + pass + + elif task == "assoc-recall": + input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=0.2) + output_seq = [None for _ in range(len(input_seq))] + + assoc = {v: "" for v in tokenizer.vocab} + + for i in range(len(output_seq)): + if i != 0: + assoc[input_seq[i-1]] = input_seq[i] + + output_seq[i] = assoc[input_seq[i]] + + elif task == "assoc-recall-mk": + size_key = 2 + + input_seq = rand_seq(tokenizer, length, num_vocab, 0, p_numbers=0.0) + output_seq = ["" for _ in range(len(input_seq))] + + assoc = defaultdict(lambda: "") + + for i in range(len(output_seq)): + if i > size_key: + key = tuple(input_seq[i-size_key:i]) + assoc[key] = input_seq[i] + + if i+1 > size_key: + key = tuple(input_seq[i-size_key+1:i+1]) + output_seq[i] = assoc[key] + + elif task == "needle": + needle_length = 1 + input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=0) + input_seq[-needle_length:] = ["#1" for _ in range(needle_length)] + + # Needle position + needle_pos = np.random.randint(0, length // 2) + input_seq[needle_pos] = "#0" + needle = input_seq[needle_pos + 1:needle_pos + needle_length + 1] + + # Ask for the needle at the end + output_seq = ["" for _ in range(len(input_seq))] + output_seq[needle_pos:] = [needle[-1] for i in range(len(input_seq) - needle_pos)] + # output_seq[-needle_length:] = needle + + else: + print("Task name:", task) + assert False # Not implemented + + return input_seq, output_seq + +################################################################################################ + +# SEQUENCE GENERATION HELPERS + +def rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=-1): + if p_numbers == -1: + p_numbers = num_numbers / (num_vocab + num_numbers) + + if num_numbers != 0: + props = {"V": (1-p_numbers)/num_vocab, "#": p_numbers/num_numbers, "<": 0} + else: + props = {"V": 1/num_vocab, "#": 0, "<": 0} + props = np.array([props[i[0]] for i in tokenizer.vocab]) + + return np.random.choice(tokenizer.vocab, size=length, p=props).tolist() + + +# For other special generations +def rand_seq_special(tokenizer, length, num_vocab, num_numbers, p_numbers=-1, special_type=None): + if special_type == "repetitive_vocab": + if p_numbers == -1: + p_numbers = num_numbers / (num_vocab + num_numbers) + + if num_numbers != 0: + props = {"V": 0, "#": p_numbers/num_numbers, "<": 0} + else: + props = {"V": 0, "#": 0, "<": 0} + if num_numbers != 0: + props_V0 = (1-p_numbers) + else: + props_V0 = 1 + props = np.array([props[i[0]] if i != "V0" else props_V0 for i in tokenizer.vocab]) + + tile_length = 3 + + props_tile = {"V": 1./num_vocab, "#": 0, "<": 0} + props_tile = np.array([props_tile[i[0]] for i in tokenizer.vocab]) + + ret_seq = np.random.choice(tokenizer.vocab, size=length, p=props) + ret_seq2 = np.tile(np.random.choice(tokenizer.vocab, size=tile_length, p=props_tile), (length // tile_length + 1))[:length] + + return np.where(ret_seq == "V0", ret_seq2, ret_seq).tolist() + + else: + assert False, "Not implemented" \ No newline at end of file diff --git a/source/official-code/micro_hf/main.py b/source/official-code/micro_hf/main.py new file mode 100644 index 0000000000000000000000000000000000000000..335439b5caf1368d8382f5f31dd969bffb7ae912 --- /dev/null +++ b/source/official-code/micro_hf/main.py @@ -0,0 +1,249 @@ +import json +import argparse +import os +import numpy as np + +from model_utils import get_model +from data_utils import get_train_dataset, get_tokenizer +from train_utils import train, save_model, make_dir, get_ident_name, get_data_ident_name, get_task_dir_name, get_lrs, add_lr +from test_utils import evaluation +from generate import force_args, task_choices + +def count_parameters(model): + return sum(p.numel() for p in model.parameters() if p.requires_grad) + + +def parse_args(): + parser = argparse.ArgumentParser() + + parser.add_argument('--run_number', default=-1, type=int, help="The current run number. Will not save if the run has already been saved") + + # Task parameters + parser.add_argument('--train_task', choices=task_choices, + required=True, help="Task to train the model") + parser.add_argument('--eval_task', choices=task_choices, + required=True, help="tasks to evaluate the model") + + parser.add_argument('--num_vocab', default=26, type=int, help="vocabulary size in the strings. maximum is 26.") + parser.add_argument('--num_numbers', default=5, type=int, help="vocabulary (number) size in the strings. maximum is 9.") + parser.add_argument('--min_number', default=0, type=int, help="The smallest number token") + + parser.add_argument('--ood_eval', default=False, type=bool, help="If true, perform out-of-distribution evaluation.") + parser.add_argument('--p', default=0.2, type=float, help="proportion, depends on task") + parser.add_argument('--eval_p', default=None, type=float, help="proportion, depends on task") + + parser.add_argument('--mixed', default=False, type=bool, help="If true, use mixed distribution when generating data.") + + # Model + parser.add_argument('--nope', default=False, type=bool, help="If true, use the no positional encoding version of the hybrid model") + + parser.add_argument('--model', type=str, choices=['hybrid', 'TF', 'SSM'], default=None, help='The model architecture. Cannot specify layers.') + parser.add_argument('--num_layers', type=int, default=None, help="Number of layers in the model. Cannot specify layers.") + + parser.add_argument('--layer1', type=str, choices=['TF', 'SSM'], default=None, help='The first layer of the trained model. Cannot specify a model.') + parser.add_argument('--layer2', type=str, choices=['TF', 'SSM'], default=None, help='The second layer of the trained model. Cannot specify a model.') + parser.add_argument('--layer3', type=str, choices=['TF', 'SSM'], default=None, help='The (optional) third layer of the trained model. Cannot specify a model.') + + parser.add_argument('--hidden_size', default=8, type=int, help="Hidden size of the models") + parser.add_argument('--heads', default=1, type=int, help="Number of heads in the transformer models.") + parser.add_argument('--num_masked_heads', default=1, type=int, help='''Only when model = ''T_hard_alibi''. + Number of heads where we apply hard alibi. The remaining heads are set to nope.''') + parser.add_argument('--state_dim', default=1, type=int, help='''Only when model = ''mamba'' or ''hybrid''. + Sets the state dimension of the model.''') + + # Optimization + parser.add_argument('--lr', default=1e-3, type=float, help="choice of learning rate") + parser.add_argument('--auto_lr', default=False, type=bool, help="If true, find the best lr with some training") + parser.add_argument('--force_do_lr', default=False, type=bool, help="If true, learn a new lr") + + parser.add_argument('--epochs', default=4, type=int, help="number of epochs") + parser.add_argument('--num_examples', default=1000, type=int, help="number of samples for each epoch") + parser.add_argument('--num_eval_examples', default=100, type=int, help="number of evaluation examples per length") + parser.add_argument('--window', default=20, type=int, help="width of the sliding window attention") + + parser.add_argument('--train_batch_size', default=8, type=int, help="training batch size") + parser.add_argument('--eval_batch_size', default=8, type=int, help="evaluation batch size") + parser.add_argument('--eval_num_batches', default=1, type=int, help='''number of batches to use for evaluation. + useful to have a mean + std over results.''') + + parser.add_argument('--pack_examples', default=False, type=bool, help='If true, fill context with multiple examples, deliniated') + parser.add_argument('--min_train_length', default=97, type=int, help="minimum length of a training example") + parser.add_argument('--max_train_length', default=98, type=int, help="maximum length of a training example") + parser.add_argument('--min_eval_length', default=97, type=int, help="minimum length of an evaluation example") + parser.add_argument('--max_eval_length', default=98, type=int, help="maximum length of an evaluation example") + + parser.add_argument('--gradient_accumulation_steps', default=1, type=int, help="number of gradient accumulation steps") + + # Context length + parser.add_argument('--sequence_length', default=100, type=int, help="context length during training") + parser.add_argument('--eval_sequence_length', default=100, type=int, help="context length at evaluation time") + + # Saving parameters + parser.add_argument('--save_model', default=False, type=bool, help="If true, save the model after training") + parser.add_argument('--save_results', default=False, type=bool, help="If true, save the results after training") + parser.add_argument('--run_anyways', default=False, type=bool, help="If true, run even if the results have already been saved") + + # Visual parameters + parser.add_argument('--print', default=False, type=bool, help="If true, show helpful print statements") + parser.add_argument('--progress_bar', default=False, type=bool, help="If true, show the process of each epoch") + parser.add_argument('--num_log_steps', default=50, type=int, help="number of steps between each log when training") + + parser.add_argument("--test_generate", default=False, type=bool, help="If true, test the synthetic tasks generation") + + return parser.parse_args() + +args = parse_args() + + +# Check the user is specifying either model or layers +do_layers = args.layer1 and args.layer2 +do_model = args.model and args.num_layers +if do_model and (args.layer1 or args.layer2): + assert False, "Cannot specify both model and layers" +if do_layers and (args.model or args.num_layers): + assert False, "Cannot specify both model and layers" +if not do_layers and not do_model: + assert False, "Must specify either model or layers" + + +# Set the layers based on either the model or the specified layers +if do_model: + if args.model in ['TF', 'SSM']: + args.layers = [args.model] * args.num_layers + elif args.model == 'hybrid': + args.layers = ['SSM', 'TF'] * (args.num_layers // 2) + if args.num_layers % 2 == 1: + args.layers.append('SSM') +else: + if args.layer3 is not None: + args.layers = [args.layer1, args.layer2, args.layer3] + else: + args.layers = [args.layer1, args.layer2] + +# Set the eval dataset to be the same as the train dataset if not specified +if args.eval_p is None: + args.eval_p = args.p + +# Force task specific arguments +force_args(args) + +if not args.auto_lr and args.save_results and args.run_number >= 0 and not args.run_anyways: + result_filename = 'results/' + get_task_dir_name(args) + '/%d.json' % args.run_number + if os.path.exists(result_filename): + exit(0) + +args.data_name = get_data_ident_name(args) + +if args.print: + print(args) + + +## Get train dataset & tokenizer +tokenizer = get_tokenizer(args) +train_dataset = get_train_dataset(args, tokenizer) + +batch = next(iter(train_dataset)) + +if args.print: + print("v"*100) + print("EXAMPLE:", batch['input'][0]) + # print("STRUNG:", tokenizer.to_string(batch['input_ids'][0])) + print("-"*100) + print("TOKENIZED:", batch['input_ids'][0][batch['mask'][0]==1]) + print("^"*100) + +if args.test_generate: + i = batch['input'][0].index("#0") + print(batch['input'][0][i]) + print(batch['input'][0][i+1]) + print(batch['output'][0][-1]) + exit(0) + + +## Find the best LR +if args.auto_lr: + lrs = get_lrs(args) + key = get_data_ident_name(args) + "_" + get_ident_name(args) + if args.print: + print(key) + + if key not in lrs.keys() or (args.force_do_lr and args.run_number == 0): + losses = [] + for itr in range(2): + for lr in np.geomspace(1e-4, 1e-0, num=9): + model = get_model(args, tokenizer) + args.lr = lr + if args.print: + print("Testing LR:", lr) + # _, final_loss = train(args, model, tokenizer, train_dataset) + _, final_loss = train(args, model, tokenizer, train_dataset, one_epoch=True) + if args.print: + print("Final loss:", final_loss) + + losses.append((final_loss, lr)) + losses.sort() + best_lr = losses[0][1] + add_lr(args, best_lr) + + args.lr = best_lr + else: + args.lr = lrs[key] + +if args.save_results and args.run_number >= 0 and not args.run_anyways: + result_filename = 'results/' + get_task_dir_name(args) + '/%d.json' % args.run_number + if os.path.exists(result_filename): + exit(0) + +## Get model +model = get_model(args, tokenizer) + +if args.print: + print() + print("v"*100) + print(model) + print(f"Number of parameters of the model: {count_parameters(model)}") + print("^"*100) + print() + + +## train the model +accs, final_loss = train(args, model, tokenizer, train_dataset) + +## save model +if args.save_model: + save_model(args, model) + +## evaluation of the model +if args.print: + print("###EVALUATION") + +model.eval() + +str_acc_mean_list, str_acc_std_list, char_accuracy_list = evaluation(args, model, tokenizer) + +if args.print: + print(args) + + print("DONE") + + print("String") + print(str_acc_mean_list) + print("Char") + print(char_accuracy_list) + + +if args.save_results and args.run_number >= 0: + # assert False, "Decide what we want to actually save" + results = { + "train_accs": accs, + "final_acc": char_accuracy_list, + "final_loss": final_loss, + "params": count_parameters(model), + "args": vars(args) + } + + make_dir(args) + + save_path = 'results/' + get_task_dir_name(args) + with open(save_path + '/%d.json' % args.run_number, 'w') as f: + json.dump(results, f) diff --git a/source/official-code/micro_hf/model_utils.py b/source/official-code/micro_hf/model_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..8b4a6989736c9a6b81083d56ab268a7f1f5ebfc5 --- /dev/null +++ b/source/official-code/micro_hf/model_utils.py @@ -0,0 +1,41 @@ +from models import ( + HybridNoPEForCausalLM, + HybridForCausalLM, + HybridNoPEConfig, + HybridConfig + ) + +def get_model(args, tokenizer): + if not args.nope: + config = HybridConfig( + layers=args.layers, + bos_token_id=0, + eos_token_id=0, + hidden_size=args.hidden_size, + intermediate_size=args.hidden_size*4, + num_attention_heads=args.heads, + d_model=args.hidden_size, + ssm_cfg={"d_state": args.state_dim}, + vocab_size=len(tokenizer), + ) + if args.nope: + config = HybridNoPEConfig( + layers=args.layers, + bos_token_id=0, + eos_token_id=0, + hidden_size=args.hidden_size, + intermediate_size=args.hidden_size*4, + num_attention_heads=args.heads, + d_model=args.hidden_size, + ssm_cfg={"d_state": args.state_dim}, + vocab_size=len(tokenizer), + ) + + if not args.nope: + model = HybridForCausalLM(config) + if args.nope: + model = HybridNoPEForCausalLM(config) + + return model + + diff --git a/source/official-code/micro_hf/models/__init__.py b/source/official-code/micro_hf/models/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1f1c3db74e860f45e1c2e28e3fb918291ab0c3bd --- /dev/null +++ b/source/official-code/micro_hf/models/__init__.py @@ -0,0 +1,6 @@ +from .hard_alibi_model import * +from .nope import * +from .rope import * +from .hybrid import * +from .hybrid_nope import * +from .mamba import * \ No newline at end of file diff --git a/source/official-code/micro_hf/models/hard_alibi_model.py b/source/official-code/micro_hf/models/hard_alibi_model.py new file mode 100644 index 0000000000000000000000000000000000000000..a00c51febc28eb13e3365cfb4f0bbffcbd625a04 --- /dev/null +++ b/source/official-code/micro_hf/models/hard_alibi_model.py @@ -0,0 +1,593 @@ +""" """ + +from typing import Optional, Tuple, Union + +import torch +import torch.utils.checkpoint +from torch import nn +from torch.nn import BCEWithLogitsLoss, CrossEntropyLoss, MSELoss + +from transformers.activations import ACT2FN +from transformers.modeling_outputs import ( + BaseModelOutputWithPast, + CausalLMOutputWithPast, + QuestionAnsweringModelOutput, + SequenceClassifierOutputWithPast, + TokenClassifierOutput, +) +from transformers.modeling_utils import PreTrainedModel +from transformers.utils import logging + +from transformers.models.gpt_neox.configuration_gpt_neox import GPTNeoXConfig + +from transformers.models.gpt_neox.modeling_gpt_neox import GPTNeoXPreTrainedModel, GPTNeoXMLP + +logger = logging.get_logger(__name__) + + + + +class GPTHardAlibiAttention(nn.Module): + def __init__(self, config): + super().__init__() + self.config = config + self.num_attention_heads = config.num_attention_heads + self.hidden_size = config.hidden_size + if self.hidden_size % self.num_attention_heads != 0: + raise ValueError( + "The hidden size is not divisble by the number of attention heads! Make sure to update them" + ) + self.head_size = self.hidden_size // self.num_attention_heads + self.rotary_ndims = int(self.head_size * config.rotary_pct) + self._init_bias(config.max_position_embeddings) + + self.register_buffer("masked_bias", torch.tensor(-1e9), persistent=False) + self.norm_factor = self.head_size**-0.5 + self.query_key_value = nn.Linear(config.hidden_size, 3 * config.hidden_size) + self.dense = nn.Linear(config.hidden_size, config.hidden_size) + self.attention_dropout = nn.Dropout(config.attention_dropout) + + def _init_bias(self, max_positions, device=None): + self.register_buffer( + "bias", + torch.tril(torch.ones((max_positions, max_positions), dtype=torch.bool)).view( + 1, 1, max_positions, max_positions + ), + persistent=False, + ) + if device is not None: + self.bias = self.bias.to(device) + + def forward( + self, + hidden_states: torch.FloatTensor, + attention_mask: torch.FloatTensor, + position_ids: torch.LongTensor, + head_mask: Optional[torch.FloatTensor] = None, + layer_past: Optional[Tuple[torch.Tensor]] = None, + use_cache: Optional[bool] = False, + output_attentions: Optional[bool] = False, + ): + has_layer_past = layer_past is not None + + # Compute QKV + # Attention heads [batch, seq_len, hidden_size] + # --> [batch, seq_len, (np * 3 * head_size)] + qkv = self.query_key_value(hidden_states) + + # [batch, seq_len, (num_heads * 3 * head_size)] + # --> [batch, seq_len, num_heads, 3 * head_size] + new_qkv_shape = qkv.size()[:-1] + (self.num_attention_heads, 3 * self.head_size) + qkv = qkv.view(*new_qkv_shape) + + # [batch, seq_len, num_attention_heads, 3 * head_size] --> 3 [batch, num_attention_heads, seq_len, head_size] + query = qkv[..., : self.head_size].permute(0, 2, 1, 3) + key = qkv[..., self.head_size : 2 * self.head_size].permute(0, 2, 1, 3) + value = qkv[..., 2 * self.head_size :].permute(0, 2, 1, 3) + + # Compute rotary embeddings on rotary_ndims + query_rot = query[..., : self.rotary_ndims] + query_pass = query[..., self.rotary_ndims :] + key_rot = key[..., : self.rotary_ndims] + key_pass = key[..., self.rotary_ndims :] + + # Compute token offset for rotary embeddings (when decoding) + seq_len = key.shape[-2] + if has_layer_past: + seq_len += layer_past[0].shape[-2] + query = torch.cat((query, query_pass), dim=-1) + key = torch.cat((key, key_pass), dim=-1) + + # Cache QKV values + if has_layer_past: + past_key = layer_past[0] + past_value = layer_past[1] + key = torch.cat((past_key, key), dim=-2) + value = torch.cat((past_value, value), dim=-2) + present = (key, value) if use_cache else None + + # Compute attention + attn_output, attn_weights = self._attn(query, key, value, attention_mask, head_mask) + + # Reshape outputs + attn_output = self._merge_heads(attn_output, self.num_attention_heads, self.head_size) + attn_output = self.dense(attn_output) + + outputs = (attn_output, present) + if output_attentions: + outputs += (attn_weights,) + + return outputs + + @classmethod + def _split_heads(cls, tensor, num_attention_heads, attn_head_size): + """ + Splits hidden dim into attn_head_size and num_attention_heads + """ + # tensor: [bs, seq_len, hidden_size] + new_shape = tensor.size()[:-1] + (num_attention_heads, attn_head_size) + # -> [bs, seq_len, num_attention_heads, attn_head_size] + tensor = tensor.view(new_shape) + # -> [bs, num_attention_heads, seq_len, attn_head_size] + tensor = tensor.permute(0, 2, 1, 3) + return tensor + + @classmethod + def _merge_heads(cls, tensor, num_attention_heads, attn_head_size): + """ + Merges attn_head_size dim and num_attn_heads dim into hidden dim + """ + # tensor [bs, num_attention_heads, seq_len, attn_head_size] + tensor = tensor.permute(0, 2, 1, 3).contiguous() + # -> [bs, seq_len, num_attention_heads, attn_head_size] + tensor = tensor.view(tensor.size(0), tensor.size(1), num_attention_heads * attn_head_size) + # -> [bs, seq_len, hidden_size] + return tensor + + def _attn(self, query, key, value, attention_mask=None, head_mask=None): + # q, k, v: [bs, num_attention_heads, seq_len, attn_head_size] + # compute causal mask from causal mask buffer + batch_size, num_attention_heads, query_length, attn_head_size = query.size() + key_length = key.size(-2) + + # dynamically increase the causal mask with the key length, if needed. + if key_length > self.bias.shape[-1]: + self._init_bias(key_length, device=key.device) + causal_mask = self.bias[:, :, key_length - query_length : key_length, :key_length] + + query = query.view(batch_size * num_attention_heads, query_length, attn_head_size) + key = key.view(batch_size * num_attention_heads, key_length, attn_head_size) + attn_scores = torch.zeros( + batch_size * num_attention_heads, + query_length, + key_length, + dtype=query.dtype, + device=key.device, + ) + attn_scores = torch.baddbmm( + attn_scores, + query, + key.transpose(1, 2), + beta=1.0, + alpha=self.norm_factor, + ) + attn_scores = attn_scores.view(batch_size, num_attention_heads, query_length, key_length) + + mask_value = torch.finfo(attn_scores.dtype).min + # Need to be a tensor, otherwise we get error: `RuntimeError: expected scalar type float but found double`. + # Need to be on the same device, otherwise `RuntimeError: ..., x and y to be on the same device` + mask_value = torch.tensor(mask_value, dtype=attn_scores.dtype).to(attn_scores.device) + attn_scores = torch.where(causal_mask, attn_scores, mask_value) + + if attention_mask is not None: + # Apply the attention mask + attn_scores = attn_scores + attention_mask + + + #masking + new_attn_scores = attn_scores.clone() + for i in range(self.config.num_masked_heads): + mask_head = torch.ones_like(attn_scores[:,0]) * mask_value + for j in range(i+1): + mask_head[:,range(j,mask_head.shape[1]), range(0,mask_head.shape[2]-j)] = 0 + new_attn_scores[:,i] = attn_scores[:,i] + mask_head + + attn_weights = nn.functional.softmax(new_attn_scores, dim=-1) + attn_weights = attn_weights.to(value.dtype) + + # Mask heads if we want to + if head_mask is not None: + attn_weights = attn_weights * head_mask + + attn_weights = self.attention_dropout(attn_weights) + + attn_output = torch.matmul(attn_weights, value) + return attn_output, attn_weights + + + +class GPTNeoXHardAlibiLayer(nn.Module): + def __init__(self, config): + super().__init__() + self.use_parallel_residual = config.use_parallel_residual + self.input_layernorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.post_attention_layernorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.post_attention_dropout = nn.Dropout(config.hidden_dropout) + self.post_mlp_dropout = nn.Dropout(config.hidden_dropout) + self.attention = GPTHardAlibiAttention(config) + self.mlp = GPTNeoXMLP(config) + + def forward( + self, + hidden_states: Optional[torch.FloatTensor], + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + use_cache: Optional[bool] = False, + layer_past: Optional[Tuple[torch.Tensor]] = None, + output_attentions: Optional[bool] = False, + ): + attention_layer_outputs = self.attention( + self.input_layernorm(hidden_states), + attention_mask=attention_mask, + position_ids=position_ids, + layer_past=layer_past, + head_mask=head_mask, + use_cache=use_cache, + output_attentions=output_attentions, + ) + attn_output = attention_layer_outputs[0] # output_attn: attn_output, present, (attn_weights) + attn_output = self.post_attention_dropout(attn_output) + outputs = attention_layer_outputs[1:] + + if self.use_parallel_residual: + # pseudocode: + # x = x + attn(ln1(x)) + mlp(ln2(x)) + mlp_output = self.mlp(self.post_attention_layernorm(hidden_states)) + mlp_output = self.post_mlp_dropout(mlp_output) + hidden_states = mlp_output + attn_output + hidden_states + else: + # pseudocode: + # x = x + attn(ln1(x)) + # x = x + mlp(ln2(x)) + attn_output = attn_output + hidden_states + mlp_output = self.mlp(self.post_attention_layernorm(attn_output)) + mlp_output = self.post_mlp_dropout(mlp_output) + hidden_states = mlp_output + attn_output + + if use_cache: + outputs = (hidden_states,) + outputs # hidden_states, present, (attn_weights) + else: + outputs = (hidden_states,) + outputs[1:] # hidden_states, (attn_weights) + + return outputs + + + +class GPTNeoXHardAlibiModel(GPTNeoXPreTrainedModel): + def __init__(self, config): + super().__init__(config) + self.config = config + + self.embed_in = nn.Embedding(config.vocab_size, config.hidden_size) + self.emb_dropout = nn.Dropout(config.hidden_dropout) + self.layers = nn.ModuleList([GPTNeoXHardAlibiLayer(config) for _ in range(config.num_hidden_layers)]) + self.final_layer_norm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + + self.gradient_checkpointing = False + + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self): + return self.embed_in + + def set_input_embeddings(self, value): + self.embed_in = value + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, BaseModelOutputWithPast]: + r""" + past_key_values (`tuple(tuple(torch.FloatTensor))` of length `config.n_layers` with each tuple having 4 tensors of shape `(batch_size, num_heads, sequence_length - 1, embed_size_per_head)`): + Contains precomputed key and value hidden states of the attention blocks. Can be used to speed up decoding. + If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that + don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all + `decoder_input_ids` of shape `(batch_size, sequence_length)`. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see + `past_key_values`). + """ + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + use_cache = use_cache if use_cache is not None else self.config.use_cache + + if input_ids is not None and inputs_embeds is not None: + raise ValueError("You cannot specify both input_ids and inputs_embeds at the same time") + elif input_ids is not None: + self.warn_if_padding_and_no_attention_mask(input_ids, attention_mask) + input_shape = input_ids.size() + elif inputs_embeds is not None: + input_shape = inputs_embeds.size()[:-1] + else: + raise ValueError("You have to specify either input_ids or inputs_embeds") + + batch_size, seq_length = input_shape + + if past_key_values is None: + past_length = 0 + past_key_values = tuple([None] * self.config.num_hidden_layers) + else: + past_length = past_key_values[0][0].size(-2) + + if position_ids is None: + device = input_ids.device if input_ids is not None else inputs_embeds.device + position_ids = torch.arange(past_length, seq_length + past_length, dtype=torch.long, device=device) + position_ids = position_ids.unsqueeze(0) + + # Attention mask. + if attention_mask is not None: + assert batch_size > 0, "batch_size has to be defined and > 0" + attention_mask = attention_mask.view(batch_size, -1) + # We create a 3D attention mask from a 2D tensor mask. + # Sizes are [batch_size, 1, 1, to_seq_length] + # So we can broadcast to [batch_size, num_heads, from_seq_length, to_seq_length] + # this attention mask is more simple than the triangular masking of causal attention + # used in OpenAI GPT, we just need to prepare the broadcast dimension here. + attention_mask = attention_mask[:, None, None, :] + + # Since attention_mask is 1.0 for positions we want to attend and 0.0 for + # masked positions, this operation will create a tensor which is 0.0 for + # positions we want to attend and the dtype's smallest value for masked positions. + # Since we are adding it to the raw scores before the softmax, this is + # effectively the same as removing these entirely. + attention_mask = attention_mask.to(dtype=self.dtype) # fp16 compatibility + attention_mask = (1.0 - attention_mask) * torch.finfo(self.dtype).min + + # Prepare head mask if needed + # 1.0 in head_mask indicate we keep the head + # attention_probs has shape bsz x n_heads x N x N + # input head_mask has shape [num_heads] or [num_hidden_layers x num_heads] + # and head_mask is converted to shape [num_hidden_layers x batch x num_heads x seq_length x seq_length] + head_mask = self.get_head_mask(head_mask, self.config.num_hidden_layers) + + if inputs_embeds is None: + inputs_embeds = self.embed_in(input_ids) + + hidden_states = self.emb_dropout(inputs_embeds) + + if self.gradient_checkpointing and self.training: + if use_cache: + logger.warning( + "`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`..." + ) + use_cache = False + + presents = () if use_cache else None + all_attentions = () if output_attentions else None + all_hidden_states = () if output_hidden_states else None + for i, (layer, layer_past) in enumerate(zip(self.layers, past_key_values)): + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if self.gradient_checkpointing and self.training: + outputs = self._gradient_checkpointing_func( + layer.__call__, + hidden_states, + attention_mask, + position_ids, + head_mask[i], + use_cache, + None, + output_attentions, + ) + else: + outputs = layer( + hidden_states, + attention_mask=attention_mask, + position_ids=position_ids, + head_mask=head_mask[i], + layer_past=layer_past, + use_cache=use_cache, + output_attentions=output_attentions, + ) + hidden_states = outputs[0] + if use_cache is True: + presents = presents + (outputs[1],) + if output_attentions: + all_attentions = all_attentions + (outputs[2 if use_cache else 1],) + + hidden_states = self.final_layer_norm(hidden_states) + # Add last hidden state + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if not return_dict: + return tuple(v for v in [hidden_states, presents, all_hidden_states, all_attentions] if v is not None) + + return BaseModelOutputWithPast( + last_hidden_state=hidden_states, + past_key_values=presents, + hidden_states=all_hidden_states, + attentions=all_attentions, + ) + + +class GPTNeoXHardAlibiForCausalLM(GPTNeoXPreTrainedModel): + _tied_weights_keys = ["embed_out.weight"] + + def __init__(self, config): + super().__init__(config) + + self.gpt_neox = GPTNeoXHardAlibiModel(config) + self.embed_out = nn.Linear(config.hidden_size, config.vocab_size, bias=False) + + # Initialize weights and apply final processing + self.post_init() + + def get_output_embeddings(self): + return self.embed_out + + def set_output_embeddings(self, new_embeddings): + self.embed_out = new_embeddings + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None, + labels: Optional[torch.LongTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, CausalLMOutputWithPast]: + r""" + past_key_values (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`): + Tuple of `tuple(torch.FloatTensor)` of length `config.n_layers`, with each tuple having 2 tensors of shape + `(batch_size, num_heads, sequence_length, embed_size_per_head)`) and 2 additional tensors of shape + `(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)`. The two additional tensors are + only required when the model is used as a decoder in a Sequence to Sequence model. + + Contains pre-computed hidden-states (key and values in the self-attention blocks that can be used (see + `past_key_values` input) to speed up sequential decoding. + + If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that + don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all + `decoder_input_ids` of shape `(batch_size, sequence_length)`. + labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*): + Labels for computing the left-to-right language modeling loss (next word prediction). Indices should be in + `[-100, 0, ..., config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are + ignored (masked), the loss is only computed for the tokens with labels n `[0, ..., config.vocab_size]`. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see + `past_key_values`). + + Returns: + + Example: + + ```python + >>> from transformers import AutoTokenizer, GPTNeoXForCausalLM, GPTNeoXConfig + >>> import torch + + >>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-neox-20b") + >>> config = GPTNeoXConfig.from_pretrained("EleutherAI/gpt-neox-20b") + >>> config.is_decoder = True + >>> model = GPTNeoXForCausalLM.from_pretrained("EleutherAI/gpt-neox-20b", config=config) + + >>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt") + >>> outputs = model(**inputs) + + >>> prediction_logits = outputs.logits + ```""" + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + outputs = self.gpt_neox( + input_ids, + attention_mask=attention_mask, + position_ids=position_ids, + head_mask=head_mask, + inputs_embeds=inputs_embeds, + past_key_values=past_key_values, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + + hidden_states = outputs[0] + lm_logits = self.embed_out(hidden_states) + + lm_loss = None + if labels is not None: + # move labels to correct device to enable model parallelism + labels = labels.to(lm_logits.device) + # we are doing next-token prediction; shift prediction scores and input ids by one + shift_logits = lm_logits[:, :-1, :].contiguous() + labels = labels[:, 1:].contiguous() + loss_fct = CrossEntropyLoss() + lm_loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), labels.view(-1)) + + if not return_dict: + output = (lm_logits,) + outputs[1:] + return ((lm_loss,) + output) if lm_loss is not None else output + + return CausalLMOutputWithPast( + loss=lm_loss, + logits=lm_logits, + past_key_values=outputs.past_key_values, + hidden_states=outputs.hidden_states, + attentions=outputs.attentions, + ) + + def prepare_inputs_for_generation( + self, input_ids, past_key_values=None, attention_mask=None, inputs_embeds=None, **kwargs + ): + input_shape = input_ids.shape + # cut decoder_input_ids if past is used + if past_key_values is not None: + past_length = past_key_values[0][0].shape[2] + + # Some generation methods already pass only the last input ID + if input_ids.shape[1] > past_length: + remove_prefix_length = past_length + else: + # Default to old behavior: keep only final ID + remove_prefix_length = input_ids.shape[1] - 1 + + input_ids = input_ids[:, remove_prefix_length:] + + position_ids = kwargs.get("position_ids", None) + if attention_mask is not None and position_ids is None: + # create position_ids on the fly for batch generation + position_ids = attention_mask.long().cumsum(-1) - 1 + position_ids.masked_fill_(attention_mask == 0, 1) + if past_key_values: + position_ids = position_ids[:, -input_ids.shape[1] :] + + # if model is used as a decoder in encoder-decoder model, the decoder attention mask is created on the fly + if attention_mask is None: + attention_mask = input_ids.new_ones(input_shape) + + # if `inputs_embeds` are passed, we only want to use them in the 1st generation step + if inputs_embeds is not None and past_key_values is None: + model_inputs = {"inputs_embeds": inputs_embeds} + else: + model_inputs = {"input_ids": input_ids} + model_inputs.update( + { + "attention_mask": attention_mask, + "past_key_values": past_key_values, + "position_ids": position_ids, + } + ) + + return model_inputs + + def _reorder_cache(self, past_key_values, beam_idx): + reordered_past = () + for layer_past in past_key_values: + reordered_past += ( + tuple(past_state.index_select(0, beam_idx.to(past_state.device)) for past_state in layer_past[:2]) + + layer_past[2:], + ) + return reordered_past + + diff --git a/source/official-code/micro_hf/models/hybrid.py b/source/official-code/micro_hf/models/hybrid.py new file mode 100644 index 0000000000000000000000000000000000000000..5402643038ec28ba883c8fcfba5d0406bb8bc028 --- /dev/null +++ b/source/official-code/micro_hf/models/hybrid.py @@ -0,0 +1,504 @@ +""" PyTorch GPTNeoX model.""" + +from typing import Optional, Tuple, Union + +import torch +from torch import nn +from torch.nn import CrossEntropyLoss + +from transformers.activations import ACT2FN +from transformers.modeling_utils import PreTrainedModel +from transformers.utils import ( + ModelOutput, + logging, +) +from transformers.configuration_utils import PretrainedConfig +from transformers.generation import GenerationMixin + +from .rope import GPTNeoXLayer +from .mamba import MambaBlock, MambaCache + +import math +from dataclasses import dataclass +from typing import Optional, Union + +logger = logging.get_logger(__name__) + + +class HybridConfig(PretrainedConfig): + + model_type = "hybrid" + + def __init__( + self, + layers=[], + + vocab_size=50432, + hidden_size=6144, + num_attention_heads=64, + intermediate_size=24576, + hidden_act="silu", + hidden_dropout_prob=0.1, + attention_probs_dropout_prob=0.1, + rotary_pct=0.25, + rotary_emb_base=10000, + max_position_embeddings=2048, + initializer_range=0.02, + layer_norm_epsilon=1e-5, + use_cache=True, + bos_token_id=0, + pad_token_id=0, + eos_token_id=2, + tie_word_embeddings=False, + + state_size=16, + expand=2, + conv_kernel=4, + use_bias=False, + use_conv_bias=True, + residual_in_fp32=True, + time_step_rank="auto", + time_step_scale=1.0, + time_step_min=0.001, + time_step_max=0.1, + time_step_init_scheme="random", + time_step_floor=1e-4, + rescale_prenorm_residual=False, + use_mambapy=False, + + **kwargs + ): + self.layers = layers + + self.vocab_size = vocab_size + self.max_position_embeddings = max_position_embeddings + self.hidden_size = hidden_size + self.num_hidden_layers = len(layers) + self.num_attention_heads = num_attention_heads + self.intermediate_size = intermediate_size + self.hidden_act = hidden_act + self.hidden_dropout_prob = hidden_dropout_prob + self.attention_probs_dropout_prob = attention_probs_dropout_prob + self.rotary_pct = rotary_pct + self.rotary_emb_base = rotary_emb_base + self.initializer_range = initializer_range + self.layer_norm_eps = layer_norm_epsilon + self.use_cache = use_cache + self.tie_word_embeddings = tie_word_embeddings + + self.state_size = state_size + self.layer_norm_epsilon = layer_norm_epsilon + self.conv_kernel = conv_kernel + self.expand = expand + self.intermediate_size = int(expand * self.hidden_size) + self.bos_token_id = bos_token_id + self.eos_token_id = eos_token_id + self.pad_token_id = pad_token_id + self.use_bias = use_bias + self.use_conv_bias = use_conv_bias + self.time_step_rank = math.ceil(self.hidden_size / 16) if time_step_rank == "auto" else time_step_rank + self.time_step_scale = time_step_scale + self.time_step_min = time_step_min + self.time_step_max = time_step_max + self.time_step_init_scheme = time_step_init_scheme + self.time_step_floor = time_step_floor + self.rescale_prenorm_residual = rescale_prenorm_residual + self.residual_in_fp32 = residual_in_fp32 + self.use_mambapy = use_mambapy + + super().__init__(bos_token_id=bos_token_id, eos_token_id=eos_token_id, pad_token_id=pad_token_id, **kwargs) + + +class HybridPreTrainedModel(PreTrainedModel): + """ + An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained + models. + """ + + config_class = HybridConfig + base_model_prefix = "hybrid" + supports_gradient_checkpointing = True + _no_split_modules = ["GPTNeoXLayer", "MambaBlock"] + + def _init_weights(self, module): + """Initialize the weights""" + if isinstance(module, nn.Linear): + module.weight.data.normal_(mean=0.0, std=self.config.initializer_range) + if module.bias is not None: + module.bias.data.zero_() + elif isinstance(module, nn.Embedding): + module.weight.data.normal_(mean=0.0, std=self.config.initializer_range) + if module.padding_idx is not None: + module.weight.data[module.padding_idx].zero_() + elif isinstance(module, nn.LayerNorm): + module.bias.data.zero_() + module.weight.data.fill_(1.0) + + def _set_gradient_checkpointing(self, module, value=False): + if isinstance(module, HybridModel): + module.gradient_checkpointing = value + + + +@dataclass +class HybridOutput(ModelOutput): + last_hidden_state: Optional[torch.FloatTensor] = None + past_key_values: Optional[torch.FloatTensor] = None + hidden_states: Optional[tuple[torch.FloatTensor]] = None + attentions: Optional[torch.FloatTensor] = None + cache_params: Optional[MambaCache] = None + + +@dataclass +class HybridCausalLMOutput(ModelOutput): + loss: Optional[torch.FloatTensor] = None + logits: Optional[torch.FloatTensor] = None + cache_params: Optional[MambaCache] = None + hidden_states: Optional[tuple[torch.FloatTensor]] = None + past_key_values: Optional[torch.FloatTensor] = None + last_hidden_state: Optional[torch.FloatTensor] = None + attentions: Optional[torch.FloatTensor] = None + + + +class HybridModel(HybridPreTrainedModel): + def __init__(self, config): + super().__init__(config) + self.config = config + + self.embed_in = nn.Embedding(config.vocab_size, config.hidden_size) + self.emb_dropout = nn.Dropout(config.hidden_dropout_prob) + + layer_types = [MambaBlock, GPTNeoXLayer] + + modules = [] + for idx, layer in enumerate(config.layers): + if layer == "SSM": + modules.append(MambaBlock(config, layer_idx=idx)) + elif layer == "TF": + modules.append(GPTNeoXLayer(config)) + else: + raise NotImplementedError + + self.layers = nn.ModuleList(modules) + self.final_layer_norm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + + self.gradient_checkpointing = False + + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self): + return self.embed_in + + def set_input_embeddings(self, value): + self.embed_in = value + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + + cache_params: Optional[MambaCache] = None, # From Mamba + cache_poisition: Optional[torch.LongTensor] = None, # From Mamba + # cache_position: Optional[torch.LongTensor] = None, # From Mamba + ) -> Union[Tuple, HybridOutput]: + r""" + past_key_values (`tuple(tuple(torch.FloatTensor))` of length `config.n_layers` with each tuple having 4 tensors of shape `(batch_size, num_heads, sequence_length - 1, embed_size_per_head)`): + Contains precomputed key and value hidden states of the attention blocks. Can be used to speed up decoding. + If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that + don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all + `decoder_input_ids` of shape `(batch_size, sequence_length)`. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see + `past_key_values`). + """ + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + use_cache = use_cache if use_cache is not None else self.config.use_cache + + if input_ids is not None and inputs_embeds is not None: + raise ValueError("You cannot specify both input_ids and inputs_embeds at the same time") + elif input_ids is not None: + self.warn_if_padding_and_no_attention_mask(input_ids, attention_mask) + input_shape = input_ids.size() + elif inputs_embeds is not None: + input_shape = inputs_embeds.size()[:-1] + else: + raise ValueError("You have to specify either input_ids or inputs_embeds") + + batch_size, seq_length = input_shape + + if past_key_values is None: + past_length = 0 + past_key_values = tuple([None] * self.config.num_hidden_layers) + else: + past_length = past_key_values[0][0].size(-2) + + if position_ids is None: + device = input_ids.device if input_ids is not None else inputs_embeds.device + position_ids = torch.arange(past_length, seq_length + past_length, dtype=torch.long, device=device) + position_ids = position_ids.unsqueeze(0) + + # Attention mask. + if attention_mask is not None: + assert batch_size > 0, "batch_size has to be defined and > 0" + # attention_mask = attention_mask.view(batch_size, -1) + # # We create a 3D attention mask from a 2D tensor mask. + # # Sizes are [batch_size, 1, 1, to_seq_length] + # # So we can broadcast to [batch_size, num_heads, from_seq_length, to_seq_length] + # # this attention mask is more simple than the triangular masking of causal attention + # # used in OpenAI GPT, we just need to prepare the broadcast dimension here. + # attention_mask = attention_mask[:, None, None, :] + + # # Since attention_mask is 1.0 for positions we want to attend and 0.0 for + # # masked positions, this operation will create a tensor which is 0.0 for + # # positions we want to attend and -10000.0 for masked positions. + # # Since we are adding it to the raw scores before the softmax, this is + # # effectively the same as removing these entirely. + attention_mask = attention_mask.to(dtype=self.dtype) # fp16 compatibility + attention_mask = (1.0 - attention_mask) * -10000.0 + + # Prepare head mask if needed + # 1.0 in head_mask indicate we keep the head + # attention_probs has shape bsz x n_heads x N x N + # input head_mask has shape [num_heads] or [num_hidden_layers x num_heads] + # and head_mask is converted to shape [num_hidden_layers x batch x num_heads x seq_length x seq_length] + head_mask = self.get_head_mask(head_mask, self.config.num_hidden_layers) + + if inputs_embeds is None: + inputs_embeds = self.embed_in(input_ids) + + hidden_states = self.emb_dropout(inputs_embeds) + + if self.gradient_checkpointing and self.training: + if use_cache: + logger.warning( + "`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`..." + ) + use_cache = False + + # From Mamba + if use_cache: + if cache_params is None: + cache_params = MambaCache( + self.config, inputs_embeds.size(0), device=inputs_embeds.device, dtype=inputs_embeds.dtype + ) + cache_position = torch.arange(0, self.config.conv_kernel, device=inputs_embeds.device) + elif cache_position is None: + # cases when we do manual forward instead of using `model.generate` which will initiate + # `cache_position` and makes sure it is not None, throw error here instead of doing some + # hack to conjecture the current cache position + raise ValueError( + "You have to specify the `cache_position` manually when `use_cache=True` and `cache_params` is passed, " + "you don't have to pass a `cache_params` if you are in prefilling stage because in that case it will " + "be initialized for you automatically" + ) + else: + cache_params = None + + + + presents = () if use_cache else None + all_attentions = () if output_attentions else None + all_hidden_states = () if output_hidden_states else None + for i, (layer, layer_past) in enumerate(zip(self.layers, past_key_values)): + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if isinstance(layer, GPTNeoXLayer): + outputs = layer( + hidden_states, + attention_mask=attention_mask, + head_mask=head_mask[i], + layer_past=layer_past, + use_cache=use_cache, + output_attentions=output_attentions, + ) + hidden_states = outputs[0] + if use_cache is True: + presents = presents + (outputs[1],) + if output_attentions: + all_attentions = all_attentions + (outputs[2 if use_cache else 1],) + + + elif isinstance(layer, MambaBlock): + hidden_states = layer( + hidden_states, + cache_params=cache_params, + cache_position=cache_position, + # attention_mask=attention_mask, + ) + + if use_cache is True: + presents = presents + (None,) + if output_attentions: + all_attentions = all_attentions + (None,) + + else: + assert False, "Unexpected Layer" + + + hidden_states = self.final_layer_norm(hidden_states) + # Add last hidden state + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if not return_dict: + return tuple(v for v in [hidden_states, presents, all_hidden_states, all_attentions, cache_params] if v is not None) + + return HybridOutput( + last_hidden_state=hidden_states, + past_key_values=presents, + hidden_states=all_hidden_states, + attentions=all_attentions, + cache_params=cache_params + ) + + + +class HybridForCausalLM(HybridPreTrainedModel, GenerationMixin): + _tied_weights_keys = ["embed_out.weight"] + + def __init__(self, config): + super().__init__(config) + + self.hybrid = HybridModel(config) + self.embed_out = nn.Linear(config.hidden_size, config.vocab_size, bias=False) + + # Initialize weights and apply final processing + self.post_init() + + def get_output_embeddings(self): + return self.embed_out + + def set_output_embeddings(self, new_embeddings): + self.embed_out = new_embeddings + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None, + labels: Optional[torch.LongTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + + cache_params: Optional[MambaCache] = None, # From Mamba + cache_position: Optional[torch.LongTensor] = None, # From Mamba + **kwargs, # for now we need this for generation + ) -> Union[Tuple, HybridOutput]: + + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + outputs = self.hybrid( + input_ids, + attention_mask=attention_mask, + position_ids=position_ids, + head_mask=head_mask, + inputs_embeds=inputs_embeds, + past_key_values=past_key_values, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + cache_params=cache_params, + cache_poisition=cache_position, + ) + + hidden_states = outputs[0] + lm_logits = self.embed_out(hidden_states) + + lm_loss = None + if labels is not None: + # move labels to correct device to enable model parallelism + labels = labels.to(lm_logits.device) + # we are doing next-token prediction; shift prediction scores and input ids by one + shift_logits = lm_logits[:, :-1, :].contiguous() + labels = labels[:, 1:].contiguous() + loss_fct = CrossEntropyLoss() + lm_loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), labels.view(-1)) + + if not return_dict: + output = (lm_logits,) + outputs[1:] + return ((lm_loss,) + output) if lm_loss is not None else output + + return HybridCausalLMOutput( + loss=lm_loss, + logits=lm_logits, + cache_params=outputs.cache_params, + hidden_states=outputs.hidden_states, + past_key_values=outputs.past_key_values, + last_hidden_state=outputs.last_hidden_state, + attentions=outputs.attentions, + ) + + def prepare_inputs_for_generation( + self, + input_ids, + inputs_embeds=None, + use_cache=None, + cache_params: Optional[MambaCache] = None, + cache_position: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.LongTensor] = None, + **kwargs, + ): + # Overwritten -- uses `cache_params` as opposed to `past_key_values` + model_inputs = {"input_ids": input_ids.contiguous()} + if use_cache and cache_params is None: + # we initialize the `cache_position` to full size of `conv_states` at prefill stage + # considering padding will be applied when input length is shorter, and truncation + # will be applied when it is longer, so it will be equivalent to always have it match + # the length of `cache_params.conv_states`, which is `config.conv_kernel` + cache_position = torch.arange(0, self.hybrid.config.conv_kernel, device=input_ids.device) + if inputs_embeds is not None: + model_inputs = {"inputs_embeds": inputs_embeds} + max_batch_size = inputs_embeds.size(0) + else: + max_batch_size = input_ids.size(0) + cache_params = MambaCache(self.hybrid.config, max_batch_size, device=self.device, dtype=self.dtype) + + if use_cache and cache_position[0] > 0: + model_inputs["input_ids"] = input_ids[:, -1].unsqueeze(-1).contiguous() + attention_mask = None + + if not use_cache and inputs_embeds is not None: + model_inputs = {"inputs_embeds": inputs_embeds} + + model_inputs.update( + { + "cache_params": cache_params, + "use_cache": use_cache, + "cache_position": cache_position, + "attention_mask": attention_mask, + } + ) + return model_inputs + + + def _reorder_cache(self, past_key_values, beam_idx): + reordered_past = () + for layer_past in past_key_values: + reordered_past += ( + tuple(past_state.index_select(0, beam_idx.to(past_state.device)) for past_state in layer_past[:2]) + + layer_past[2:], + ) + return reordered_past + + diff --git a/source/official-code/micro_hf/models/hybrid_nope.py b/source/official-code/micro_hf/models/hybrid_nope.py new file mode 100644 index 0000000000000000000000000000000000000000..0e24d11cf0813de448407fbfda6bed11b8615e73 --- /dev/null +++ b/source/official-code/micro_hf/models/hybrid_nope.py @@ -0,0 +1,510 @@ +""" PyTorch GPTNeoX model.""" + +from typing import Optional, Tuple, Union + +import torch +from torch import nn +from torch.nn import CrossEntropyLoss + +from transformers.activations import ACT2FN +from transformers.modeling_utils import PreTrainedModel +from transformers.utils import ( + ModelOutput, + logging, +) +from transformers.configuration_utils import PretrainedConfig +from transformers.generation import GenerationMixin + +from .nope import GPTNeoXNoPELayer +from .mamba import MambaBlock, MambaCache + +import math +from dataclasses import dataclass +from typing import Optional, Union + +logger = logging.get_logger(__name__) + + +class HybridNoPEConfig(PretrainedConfig): + + model_type = "hybrid" + + def __init__( + self, + layers=[], + + vocab_size=50432, + hidden_size=6144, + num_attention_heads=64, + intermediate_size=24576, + hidden_act="silu", + hidden_dropout_prob=0.1, + attention_probs_dropout_prob=0.1, + rotary_pct=0.25, + rotary_emb_base=10000, + max_position_embeddings=2048, + initializer_range=0.02, + layer_norm_epsilon=1e-5, + use_cache=True, + bos_token_id=0, + pad_token_id=0, + eos_token_id=2, + tie_word_embeddings=False, + + state_size=16, + expand=2, + conv_kernel=4, + use_bias=False, + use_conv_bias=True, + residual_in_fp32=True, + time_step_rank="auto", + time_step_scale=1.0, + time_step_min=0.001, + time_step_max=0.1, + time_step_init_scheme="random", + time_step_floor=1e-4, + rescale_prenorm_residual=False, + use_mambapy=False, + use_parallel_residual=False, + + **kwargs + ): + self.layers = layers + + self.vocab_size = vocab_size + self.max_position_embeddings = max_position_embeddings + self.hidden_size = hidden_size + self.num_hidden_layers = len(layers) + self.num_attention_heads = num_attention_heads + self.intermediate_size = intermediate_size + self.hidden_act = hidden_act + + self.hidden_dropout_prob = hidden_dropout_prob + self.hidden_dropout = self.hidden_dropout_prob + self.attention_dropout = self.hidden_dropout_prob + + self.attention_probs_dropout_prob = attention_probs_dropout_prob + self.rotary_pct = rotary_pct + self.rotary_emb_base = rotary_emb_base + self.initializer_range = initializer_range + self.layer_norm_eps = layer_norm_epsilon + self.use_cache = use_cache + self.tie_word_embeddings = tie_word_embeddings + + self.state_size = state_size + self.layer_norm_epsilon = layer_norm_epsilon + self.conv_kernel = conv_kernel + self.expand = expand + self.intermediate_size = int(expand * self.hidden_size) + self.bos_token_id = bos_token_id + self.eos_token_id = eos_token_id + self.pad_token_id = pad_token_id + self.use_bias = use_bias + self.use_conv_bias = use_conv_bias + self.time_step_rank = math.ceil(self.hidden_size / 16) if time_step_rank == "auto" else time_step_rank + self.time_step_scale = time_step_scale + self.time_step_min = time_step_min + self.time_step_max = time_step_max + self.time_step_init_scheme = time_step_init_scheme + self.time_step_floor = time_step_floor + self.rescale_prenorm_residual = rescale_prenorm_residual + self.residual_in_fp32 = residual_in_fp32 + self.use_mambapy = use_mambapy + self.use_parallel_residual = use_parallel_residual + + super().__init__(bos_token_id=bos_token_id, eos_token_id=eos_token_id, pad_token_id=pad_token_id, **kwargs) + + +class HybridNoPEPreTrainedModel(PreTrainedModel): + """ + An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained + models. + """ + + config_class = HybridNoPEConfig + base_model_prefix = "hybrid" + supports_gradient_checkpointing = True + _no_split_modules = ["GPTNeoXNoPELayer", "MambaBlock"] + + def _init_weights(self, module): + """Initialize the weights""" + if isinstance(module, nn.Linear): + module.weight.data.normal_(mean=0.0, std=self.config.initializer_range) + if module.bias is not None: + module.bias.data.zero_() + elif isinstance(module, nn.Embedding): + module.weight.data.normal_(mean=0.0, std=self.config.initializer_range) + if module.padding_idx is not None: + module.weight.data[module.padding_idx].zero_() + elif isinstance(module, nn.LayerNorm): + module.bias.data.zero_() + module.weight.data.fill_(1.0) + + def _set_gradient_checkpointing(self, module, value=False): + if isinstance(module, HybridNoPEModel): + module.gradient_checkpointing = value + + + +@dataclass +class HybridNoPEOutput(ModelOutput): + last_hidden_state: Optional[torch.FloatTensor] = None + past_key_values: Optional[torch.FloatTensor] = None + hidden_states: Optional[tuple[torch.FloatTensor]] = None + attentions: Optional[torch.FloatTensor] = None + cache_params: Optional[MambaCache] = None + + +@dataclass +class HybridNoPECausalLMOutput(ModelOutput): + loss: Optional[torch.FloatTensor] = None + logits: Optional[torch.FloatTensor] = None + cache_params: Optional[MambaCache] = None + hidden_states: Optional[tuple[torch.FloatTensor]] = None + past_key_values: Optional[torch.FloatTensor] = None + last_hidden_state: Optional[torch.FloatTensor] = None + attentions: Optional[torch.FloatTensor] = None + + + +class HybridNoPEModel(HybridNoPEPreTrainedModel): + def __init__(self, config): + super().__init__(config) + self.config = config + + self.embed_in = nn.Embedding(config.vocab_size, config.hidden_size) + self.emb_dropout = nn.Dropout(config.hidden_dropout_prob) + + layer_types = [MambaBlock, GPTNeoXNoPELayer] + + modules = [] + for idx, layer in enumerate(config.layers): + if layer == "SSM": + modules.append(MambaBlock(config, layer_idx=idx)) + elif layer == "TF": + modules.append(GPTNeoXNoPELayer(config)) + else: + raise NotImplementedError + + self.layers = nn.ModuleList(modules) + self.final_layer_norm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + + self.gradient_checkpointing = False + + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self): + return self.embed_in + + def set_input_embeddings(self, value): + self.embed_in = value + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + + cache_params: Optional[MambaCache] = None, # From Mamba + cache_poisition: Optional[torch.LongTensor] = None, # From Mamba + # cache_position: Optional[torch.LongTensor] = None, # From Mamba + ) -> Union[Tuple, HybridNoPEOutput]: + r""" + past_key_values (`tuple(tuple(torch.FloatTensor))` of length `config.n_layers` with each tuple having 4 tensors of shape `(batch_size, num_heads, sequence_length - 1, embed_size_per_head)`): + Contains precomputed key and value hidden states of the attention blocks. Can be used to speed up decoding. + If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that + don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all + `decoder_input_ids` of shape `(batch_size, sequence_length)`. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see + `past_key_values`). + """ + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + use_cache = use_cache if use_cache is not None else self.config.use_cache + + if input_ids is not None and inputs_embeds is not None: + raise ValueError("You cannot specify both input_ids and inputs_embeds at the same time") + elif input_ids is not None: + self.warn_if_padding_and_no_attention_mask(input_ids, attention_mask) + input_shape = input_ids.size() + elif inputs_embeds is not None: + input_shape = inputs_embeds.size()[:-1] + else: + raise ValueError("You have to specify either input_ids or inputs_embeds") + + batch_size, seq_length = input_shape + + if past_key_values is None: + past_length = 0 + past_key_values = tuple([None] * self.config.num_hidden_layers) + else: + past_length = past_key_values[0][0].size(-2) + + if position_ids is None: + device = input_ids.device if input_ids is not None else inputs_embeds.device + position_ids = torch.arange(past_length, seq_length + past_length, dtype=torch.long, device=device) + position_ids = position_ids.unsqueeze(0) + + # Attention mask. + if attention_mask is not None: + assert batch_size > 0, "batch_size has to be defined and > 0" + # attention_mask = attention_mask.view(batch_size, -1) + # # We create a 3D attention mask from a 2D tensor mask. + # # Sizes are [batch_size, 1, 1, to_seq_length] + # # So we can broadcast to [batch_size, num_heads, from_seq_length, to_seq_length] + # # this attention mask is more simple than the triangular masking of causal attention + # # used in OpenAI GPT, we just need to prepare the broadcast dimension here. + # attention_mask = attention_mask[:, None, None, :] + + # # Since attention_mask is 1.0 for positions we want to attend and 0.0 for + # # masked positions, this operation will create a tensor which is 0.0 for + # # positions we want to attend and -10000.0 for masked positions. + # # Since we are adding it to the raw scores before the softmax, this is + # # effectively the same as removing these entirely. + attention_mask = attention_mask.to(dtype=self.dtype) # fp16 compatibility + attention_mask = (1.0 - attention_mask) * -10000.0 + + # Prepare head mask if needed + # 1.0 in head_mask indicate we keep the head + # attention_probs has shape bsz x n_heads x N x N + # input head_mask has shape [num_heads] or [num_hidden_layers x num_heads] + # and head_mask is converted to shape [num_hidden_layers x batch x num_heads x seq_length x seq_length] + head_mask = self.get_head_mask(head_mask, self.config.num_hidden_layers) + + if inputs_embeds is None: + inputs_embeds = self.embed_in(input_ids) + + hidden_states = self.emb_dropout(inputs_embeds) + + if self.gradient_checkpointing and self.training: + if use_cache: + logger.warning( + "`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`..." + ) + use_cache = False + + # From Mamba + if use_cache: + if cache_params is None: + cache_params = MambaCache( + self.config, inputs_embeds.size(0), device=inputs_embeds.device, dtype=inputs_embeds.dtype + ) + cache_position = torch.arange(0, self.config.conv_kernel, device=inputs_embeds.device) + elif cache_position is None: + # cases when we do manual forward instead of using `model.generate` which will initiate + # `cache_position` and makes sure it is not None, throw error here instead of doing some + # hack to conjecture the current cache position + raise ValueError( + "You have to specify the `cache_position` manually when `use_cache=True` and `cache_params` is passed, " + "you don't have to pass a `cache_params` if you are in prefilling stage because in that case it will " + "be initialized for you automatically" + ) + else: + cache_params = None + + + + presents = () if use_cache else None + all_attentions = () if output_attentions else None + all_hidden_states = () if output_hidden_states else None + for i, (layer, layer_past) in enumerate(zip(self.layers, past_key_values)): + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if isinstance(layer, GPTNeoXNoPELayer): + outputs = layer( + hidden_states, + attention_mask=attention_mask, + head_mask=head_mask[i], + layer_past=layer_past, + use_cache=use_cache, + output_attentions=output_attentions, + ) + hidden_states = outputs[0] + if use_cache is True: + presents = presents + (outputs[1],) + if output_attentions: + all_attentions = all_attentions + (outputs[2 if use_cache else 1],) + + + elif isinstance(layer, MambaBlock): + hidden_states = layer( + hidden_states, + cache_params=cache_params, + cache_position=cache_position, + attention_mask=attention_mask, + ) + + if use_cache is True: + presents = presents + (None,) + if output_attentions: + all_attentions = all_attentions + (None,) + + else: + assert False, "Unexpected Layer" + + + hidden_states = self.final_layer_norm(hidden_states) + # Add last hidden state + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if not return_dict: + return tuple(v for v in [hidden_states, presents, all_hidden_states, all_attentions, cache_params] if v is not None) + + return HybridNoPEOutput( + last_hidden_state=hidden_states, + past_key_values=presents, + hidden_states=all_hidden_states, + attentions=all_attentions, + cache_params=cache_params + ) + + + +class HybridNoPEForCausalLM(HybridNoPEPreTrainedModel, GenerationMixin): + _tied_weights_keys = ["embed_out.weight"] + + def __init__(self, config): + super().__init__(config) + + self.hybrid = HybridNoPEModel(config) + self.embed_out = nn.Linear(config.hidden_size, config.vocab_size, bias=False) + + # Initialize weights and apply final processing + self.post_init() + + def get_output_embeddings(self): + return self.embed_out + + def set_output_embeddings(self, new_embeddings): + self.embed_out = new_embeddings + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None, + labels: Optional[torch.LongTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + + cache_params: Optional[MambaCache] = None, # From Mamba + cache_position: Optional[torch.LongTensor] = None, # From Mamba + **kwargs, # for now we need this for generation + ) -> Union[Tuple, HybridNoPEOutput]: + + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + outputs = self.hybrid( + input_ids, + attention_mask=attention_mask, + position_ids=position_ids, + head_mask=head_mask, + inputs_embeds=inputs_embeds, + past_key_values=past_key_values, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + cache_params=cache_params, + cache_poisition=cache_position, + ) + + hidden_states = outputs[0] + lm_logits = self.embed_out(hidden_states) + + lm_loss = None + if labels is not None: + # move labels to correct device to enable model parallelism + labels = labels.to(lm_logits.device) + # we are doing next-token prediction; shift prediction scores and input ids by one + shift_logits = lm_logits[:, :-1, :].contiguous() + labels = labels[:, 1:].contiguous() + loss_fct = CrossEntropyLoss() + lm_loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), labels.view(-1)) + + if not return_dict: + output = (lm_logits,) + outputs[1:] + return ((lm_loss,) + output) if lm_loss is not None else output + + return HybridNoPECausalLMOutput( + loss=lm_loss, + logits=lm_logits, + cache_params=outputs.cache_params, + hidden_states=outputs.hidden_states, + past_key_values=outputs.past_key_values, + last_hidden_state=outputs.last_hidden_state, + attentions=outputs.attentions, + ) + + def prepare_inputs_for_generation( + self, + input_ids, + inputs_embeds=None, + use_cache=None, + cache_params: Optional[MambaCache] = None, + cache_position: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.LongTensor] = None, + **kwargs, + ): + # Overwritten -- uses `cache_params` as opposed to `past_key_values` + model_inputs = {"input_ids": input_ids.contiguous()} + if use_cache and cache_params is None: + # we initialize the `cache_position` to full size of `conv_states` at prefill stage + # considering padding will be applied when input length is shorter, and truncation + # will be applied when it is longer, so it will be equivalent to always have it match + # the length of `cache_params.conv_states`, which is `config.conv_kernel` + cache_position = torch.arange(0, self.hybrid.config.conv_kernel, device=input_ids.device) + if inputs_embeds is not None: + model_inputs = {"inputs_embeds": inputs_embeds} + max_batch_size = inputs_embeds.size(0) + else: + max_batch_size = input_ids.size(0) + cache_params = MambaCache(self.hybrid.config, max_batch_size, device=self.device, dtype=self.dtype) + + if use_cache and cache_position[0] > 0: + model_inputs["input_ids"] = input_ids[:, -1].unsqueeze(-1).contiguous() + attention_mask = None + + if not use_cache and inputs_embeds is not None: + model_inputs = {"inputs_embeds": inputs_embeds} + + model_inputs.update( + { + "cache_params": cache_params, + "use_cache": use_cache, + "cache_position": cache_position, + "attention_mask": attention_mask, + } + ) + return model_inputs + + + def _reorder_cache(self, past_key_values, beam_idx): + reordered_past = () + for layer_past in past_key_values: + reordered_past += ( + tuple(past_state.index_select(0, beam_idx.to(past_state.device)) for past_state in layer_past[:2]) + + layer_past[2:], + ) + return reordered_past + + diff --git a/source/official-code/micro_hf/models/mamba.py b/source/official-code/micro_hf/models/mamba.py new file mode 100644 index 0000000000000000000000000000000000000000..99093a32a0eb88c6c9f75c9c65228f89654c88a8 --- /dev/null +++ b/source/official-code/micro_hf/models/mamba.py @@ -0,0 +1,834 @@ +"""PyTorch MAMBA model.""" + +import math +from dataclasses import dataclass +from typing import Any, Optional, Union + +import torch +import torch.utils.checkpoint +from torch import nn +from torch.nn import CrossEntropyLoss + +from transformers.activations import ACT2FN +from transformers.configuration_utils import PretrainedConfig +from transformers.generation import GenerationMixin +from transformers.modeling_layers import GradientCheckpointingLayer +from transformers.modeling_utils import PreTrainedModel +from transformers.utils import ( + ModelOutput, + auto_docstring, + logging, +) +from transformers.utils.import_utils import is_causal_conv1d_available, is_mamba_ssm_available, is_mambapy_available +from transformers.models.mamba.configuration_mamba import MambaConfig + + +logger = logging.get_logger(__name__) + +if is_mambapy_available(): + from mambapy.pscan import pscan +else: + pscan = None + +if is_mamba_ssm_available(): + from mamba_ssm.ops.selective_scan_interface import mamba_inner_fn, selective_scan_fn + from mamba_ssm.ops.triton.selective_state_update import selective_state_update +else: + selective_state_update, selective_scan_fn, mamba_inner_fn = None, None, None + +if is_causal_conv1d_available(): + from causal_conv1d import causal_conv1d_fn, causal_conv1d_update +else: + causal_conv1d_update, causal_conv1d_fn = None, None + + +class MambaCache: + """ + Cache for mamba model which does not have attention mechanism and key value states. + + Arguments: + config (`PretrainedConfig): + The configuration file defining the shape-related attributes required to initialize the static cache. + max_batch_size (`int`): + The maximum batch size with which the model will be used. Note that a new instance must be instantiated if a smaller batch size is used. + dtype (`torch.dtype`, *optional*, defaults to `torch.float16`): + The default `dtype` to use when initializing the layer. + device (`torch.device` or `str`, *optional*): + The device on which the cache should be initialized. Should be the same as the layer. + + Example: + + ```python + >>> from transformers import AutoTokenizer, MambaForCausalLM, MambaCache + + >>> model = MambaForCausalLM.from_pretrained("state-spaces/mamba-130m-hf") + >>> tokenizer = AutoTokenizer.from_pretrained("state-spaces/mamba-130m-hf") + + >>> inputs = tokenizer(text="My name is Mamba", return_tensors="pt") + + >>> # Prepare a cache class and pass it to model's forward + >>> past_key_values = MambaCache(config=model.config, max_batch_size=1, device=model.device, dtype=model.dtype) + >>> outputs = model(**inputs, past_key_values=past_key_values, use_cache=True) + >>> outputs.past_key_values + MambaCache() + ``` + """ + + is_compileable = True + + # TODO (joao): add layer_device_map arg and update code in `generate` accordingly + def __init__( + self, + config: PretrainedConfig, + max_batch_size: int, + dtype: torch.dtype = torch.float16, + device: Union[torch.device, str, None] = None, + ): + self.max_batch_size = max_batch_size + self._dtype = dtype + self.intermediate_size = config.intermediate_size + self.ssm_state_size = config.state_size + self.conv_kernel_size = config.conv_kernel + + self.conv_states: list[torch.Tensor] = [] + self.ssm_states: list[torch.Tensor] = [] + device = torch.device(device) if device is not None else None + for _ in range(config.num_hidden_layers): + conv_state: torch.Tensor = torch.zeros( + self.max_batch_size, + self.intermediate_size, + self.conv_kernel_size, + device=device, + dtype=self._dtype, + ) + ssm_state: torch.Tensor = torch.zeros( + self.max_batch_size, + self.intermediate_size, + self.ssm_state_size, + device=device, + dtype=self._dtype, + ) + + torch._dynamo.mark_static_address(conv_state) + torch._dynamo.mark_static_address(ssm_state) + self.conv_states.append(conv_state) + self.ssm_states.append(ssm_state) + + def update_conv_state( + self, layer_idx: int, new_conv_state: torch.Tensor, cache_position: torch.LongTensor + ) -> torch.Tensor: + # This `if` blocks is only reached in multigpu and if `layer_device_map` is not passed. It is used + # when the cache is initialized in the forward pass (e.g. Mamba) + if self.conv_states[layer_idx].device != new_conv_state.device: + self.conv_states[layer_idx] = self.conv_states[layer_idx].to(new_conv_state.device) + + conv_state = self.conv_states[layer_idx] + cache_position = cache_position.clamp(0, self.conv_kernel_size - 1) + + conv_state = conv_state.roll(shifts=-1, dims=-1) + conv_state[:, :, cache_position] = new_conv_state.to(device=conv_state.device, dtype=conv_state.dtype) + self.conv_states[layer_idx].zero_() + self.conv_states[layer_idx] += conv_state + return self.conv_states[layer_idx] + + def update_ssm_state(self, layer_idx: int, new_ssm_state: torch.Tensor): + self.ssm_states[layer_idx].zero_() + self.ssm_states[layer_idx] += new_ssm_state.to(self.ssm_states[layer_idx].device) + return self.ssm_states[layer_idx] + + def reset(self): + for layer_idx in range(len(self.conv_states)): + # In-place ops prevent breaking the static address + self.conv_states[layer_idx].zero_() + self.ssm_states[layer_idx].zero_() + + +class MambaMixer(nn.Module): + """ + Compute ∆, A, B, C, and D the state space parameters and compute the `contextualized_states`. + A, D are input independent (see Mamba paper [1] Section 3.5.2 "Interpretation of A" for why A isn't selective) + ∆, B, C are input-dependent (this is a key difference between Mamba and the linear time invariant S4, + and is why Mamba is called **selective** state spaces) + """ + + def __init__(self, config: MambaConfig, layer_idx: int): + super().__init__() + self.config = config + self.hidden_size = config.hidden_size + self.ssm_state_size = config.state_size + self.conv_kernel_size = config.conv_kernel + self.intermediate_size = config.intermediate_size + self.time_step_rank = int(config.time_step_rank) + self.layer_idx = layer_idx + self.use_conv_bias = config.use_conv_bias + self.conv1d = nn.Conv1d( + in_channels=self.intermediate_size, + out_channels=self.intermediate_size, + bias=config.use_conv_bias, + kernel_size=config.conv_kernel, + groups=self.intermediate_size, + padding=config.conv_kernel - 1, + ) + + self.activation = config.hidden_act + self.act = ACT2FN[config.hidden_act] + + self.use_mambapy = config.use_mambapy + + # projection of the input hidden states + self.in_proj = nn.Linear(self.hidden_size, self.intermediate_size * 2, bias=config.use_bias) + # selective projection used to make dt, B and C input dependent + self.x_proj = nn.Linear(self.intermediate_size, self.time_step_rank + self.ssm_state_size * 2, bias=False) + # time step projection (discretization) + self.dt_proj = nn.Linear(self.time_step_rank, self.intermediate_size, bias=True) + + # S4D real initialization. These are not discretized! + # The core is to load them, compute the discrete states, then write the updated state. Keeps the memory bounded + A = torch.arange(1, self.ssm_state_size + 1, dtype=torch.float32)[None, :] + A = A.expand(self.intermediate_size, -1).contiguous() + + self.A_log = nn.Parameter(torch.log(A)) + self.D = nn.Parameter(torch.ones(self.intermediate_size)) + self.out_proj = nn.Linear(self.intermediate_size, self.hidden_size, bias=config.use_bias) + self.use_bias = config.use_bias + + self.warn_slow_implementation() + + def warn_slow_implementation(self): + is_fast_path_available = all( + (selective_state_update, selective_scan_fn, causal_conv1d_fn, causal_conv1d_update, mamba_inner_fn) + ) + if not is_fast_path_available: + if self.use_mambapy: + if is_mambapy_available(): + logger.warning_once( + "The fast path is not available because one of `(selective_state_update, selective_scan_fn, causal_conv1d_fn, causal_conv1d_update, mamba_inner_fn)`" + " is None. Falling back to the mamba.py backend. To install follow https://github.com/state-spaces/mamba/#installation and" + " https://github.com/Dao-AILab/causal-conv1d" + ) + else: + raise ImportError( + "use_mambapy is set to True but the mambapy package is not installed. To install it follow https://github.com/alxndrTL/mamba.py." + ) + else: + logger.warning_once( + "The fast path is not available because one of `(selective_state_update, selective_scan_fn, causal_conv1d_fn, causal_conv1d_update, mamba_inner_fn)`" + " is None. Falling back to the sequential implementation of Mamba, as use_mambapy is set to False. To install follow https://github.com/state-spaces/mamba/#installation and" + " https://github.com/Dao-AILab/causal-conv1d. For the mamba.py backend, follow https://github.com/alxndrTL/mamba.py." + ) + + def cuda_kernels_forward( + self, + hidden_states: torch.Tensor, + cache_params: Optional[MambaCache] = None, + cache_position: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.LongTensor] = None, + ): + # 1. Gated MLP's linear projection + projected_states = self.in_proj(hidden_states).transpose(1, 2) + + if self.training and cache_params is None: # Doesn't support outputting the states -> used for training + contextualized_states = mamba_inner_fn( + projected_states, + self.conv1d.weight, + self.conv1d.bias if self.use_conv_bias else None, + self.x_proj.weight, + self.dt_proj.weight, + self.out_proj.weight, + self.out_proj.bias.float() if self.use_bias else None, + -torch.exp(self.A_log.float()), + None, # input-dependent B + None, # input-dependent C + self.D.float(), + delta_bias=self.dt_proj.bias.float(), + delta_softplus=True, + ) + + else: + hidden_states, gate = projected_states.chunk(2, dim=1) + + # if attention_mask is not None: + # hidden_states = hidden_states * attention_mask.unsqueeze(1) + + # 2. Convolution sequence transformation + conv_weights = self.conv1d.weight.view(self.conv1d.weight.size(0), self.conv1d.weight.size(2)) + if cache_params is not None and cache_position[0] > 0: + hidden_states = causal_conv1d_update( + hidden_states.squeeze(-1), + cache_params.conv_states[self.layer_idx], + conv_weights, + self.conv1d.bias, + self.activation, + ) + hidden_states = hidden_states.unsqueeze(-1) + else: + if cache_params is not None: + conv_states = nn.functional.pad( + hidden_states, (self.conv_kernel_size - hidden_states.shape[-1], 0) + ) + cache_params.update_conv_state(self.layer_idx, conv_states, cache_position) + hidden_states = causal_conv1d_fn( + hidden_states, conv_weights, self.conv1d.bias, activation=self.activation + ) + + # if attention_mask is not None: + # hidden_states = hidden_states * attention_mask.unsqueeze(1) + + # 3. State Space Model sequence transformation + # 3.a. input varying initialization of time_step, B and C + ssm_parameters = self.x_proj(hidden_states.transpose(1, 2)) + time_step, B, C = torch.split( + ssm_parameters, [self.time_step_rank, self.ssm_state_size, self.ssm_state_size], dim=-1 + ) + discrete_time_step = self.dt_proj.weight @ time_step.transpose(1, 2) + + A = -torch.exp(self.A_log.float()) + # 3.c perform the recurrence y ← SSM(A, B, C)(x) + time_proj_bias = self.dt_proj.bias.float() if hasattr(self.dt_proj, "bias") else None + if cache_params is not None and cache_position[0] > 0: + scan_outputs = selective_state_update( + cache_params.ssm_states[self.layer_idx], + hidden_states[..., 0], + discrete_time_step[..., 0], + A, + B[:, 0], + C[:, 0], + self.D, + gate[..., 0], + time_proj_bias, + dt_softplus=True, + ).unsqueeze(-1) + else: + scan_outputs, ssm_state = selective_scan_fn( + hidden_states, + discrete_time_step, + A, + B.transpose(1, 2), + C.transpose(1, 2), + self.D.float(), + gate, + time_proj_bias, + delta_softplus=True, + return_last_state=True, + ) + if ssm_state is not None and cache_params is not None: + cache_params.update_ssm_state(self.layer_idx, ssm_state) + + # 4. Final linear projection + contextualized_states = self.out_proj(scan_outputs.transpose(1, 2)) + return contextualized_states + + # fmt: off + def slow_forward(self, input_states, cache_params: Optional[MambaCache]=None, cache_position:Optional[torch.LongTensor]=None, attention_mask: Optional[torch.LongTensor] = None): + batch_size, seq_len, _ = input_states.shape + dtype = input_states.dtype + # 1. Gated MLP's linear projection + projected_states = self.in_proj(input_states).transpose(1, 2) # [batch, 2 * intermediate_size, seq_len] + hidden_states, gate = projected_states.chunk(2, dim=1) + + if attention_mask is not None: + hidden_states = hidden_states * attention_mask.unsqueeze(1) + + # 2. Convolution sequence transformation + if cache_params is not None: + ssm_state = cache_params.ssm_states[self.layer_idx].clone() + ssm_state = ssm_state.to(hidden_states.device) + # use `cache_position.shape[0]` to check whether we are in prefill + # stage, it's equivalent to check `cache_position[0] == 0`, which + # breaks dynamo fullgraph constraints + if cache_position.shape[0] == self.conv_kernel_size: + conv_state = nn.functional.pad( + hidden_states, + (self.conv_kernel_size - hidden_states.shape[-1], 0) + ) + + cache_params.update_conv_state(self.layer_idx, conv_state, cache_position) + hidden_states = self.act(self.conv1d(hidden_states)[..., :seq_len]) # [batch, intermediate_size, seq_len] + else: + conv_state = cache_params.update_conv_state(self.layer_idx, hidden_states, cache_position) + conv_state = conv_state.to(self.conv1d.weight.device) + hidden_states = torch.sum(conv_state * self.conv1d.weight[:, 0, :], dim=-1) + if self.use_conv_bias: + hidden_states += self.conv1d.bias + hidden_states = self.act(hidden_states).to(dtype).unsqueeze(-1) # [batch, intermediate_size, 1] : decoding + else: + ssm_state = torch.zeros( + (batch_size, self.intermediate_size, self.ssm_state_size), + device=hidden_states.device, dtype=dtype + ) + hidden_states = self.act(self.conv1d(hidden_states)[..., :seq_len]) # [batch, intermediate_size, seq_len] + + if attention_mask is not None: + hidden_states = hidden_states * attention_mask.unsqueeze(1) + + # 3. State Space Model sequence transformation + # 3.a. Selection: [batch, seq_len, self.time_step_rank + self.ssm_state_size * 2] + ssm_parameters = self.x_proj(hidden_states.transpose(1, 2)) + time_step, B, C = torch.split( + ssm_parameters, [self.time_step_rank, self.ssm_state_size, self.ssm_state_size], dim=-1 + ) + discrete_time_step = self.dt_proj(time_step) # [batch, seq_len, intermediate_size] + discrete_time_step = nn.functional.softplus(discrete_time_step).transpose(1, 2) # [batch, intermediate_size, seq_len] + + # 3.b. Discretization: B and C to [batch, seq_len, intermediate_size, ssm_state_size] (SRAM) + A = -torch.exp(self.A_log.float()) # [intermediate_size, ssm_state_size] + discrete_A = torch.exp(A[None, :, None, :] * discrete_time_step[:, :, :, None]) # [batch, intermediate_size, seq_len, ssm_state_size] + discrete_B = discrete_time_step[:, :, :, None] * B[:, None, :, :].float() # [batch, intermediate_size, seq_len, ssm_state_size] + deltaB_u = discrete_B * hidden_states[:, :, :, None].float() + + # 3.c perform the recurrence y ← SSM(A, B, C)(x) + if self.use_mambapy and self.training and cache_params is None: + hs = pscan(discrete_A.transpose(1, 2), deltaB_u.transpose(1, 2)) # [batch, seq_len, intermediate_size, ssm_state_size] + + scan_output = (hs @ C.unsqueeze(-1)).squeeze(3).transpose(1, 2) # [batch, intermediate_size, seq_len] + scan_output = scan_output + hidden_states * self.D[None, :, None] + scan_output = scan_output * self.act(gate) + else: + scan_outputs = [] + for i in range(seq_len): + ssm_state = discrete_A[:, :, i, :] * ssm_state + deltaB_u[:, :, i, :] # [batch, intermediate_size, ssm_state] + scan_output = torch.matmul(ssm_state.to(dtype), C[:, i, :].unsqueeze(-1)) # [batch, intermediate_size, 1] + scan_outputs.append(scan_output[:, :, 0]) + scan_output = torch.stack(scan_outputs, dim=-1) # [batch, intermediate_size, seq_len] + scan_output = scan_output + (hidden_states * self.D[None, :, None]) + scan_output = (scan_output * self.act(gate)) + + if cache_params is not None: + cache_params.ssm_states[self.layer_idx].copy_(ssm_state) + + # 4. Final linear projection + contextualized_states = self.out_proj(scan_output.transpose(1, 2)) # [batch, seq_len, hidden_size] + return contextualized_states + # fmt: on + + def forward( + self, + hidden_states, + cache_params: Optional[MambaCache] = None, + cache_position: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.LongTensor] = None, + ): + is_fast_path_available = all( + (selective_state_update, selective_scan_fn, causal_conv1d_fn, causal_conv1d_update, mamba_inner_fn) + ) + if is_fast_path_available and "cuda" in self.x_proj.weight.device.type and not torch._dynamo.is_compiling(): + return self.cuda_kernels_forward(hidden_states, cache_params, cache_position, attention_mask) + return self.slow_forward(hidden_states, cache_params, cache_position, attention_mask) + + +class MambaRMSNorm(nn.Module): + def __init__(self, hidden_size, eps=1e-6): + """ + MambaRMSNorm is equivalent to T5LayerNorm and LlamaRMSNorm + """ + super().__init__() + self.weight = nn.Parameter(torch.ones(hidden_size)) + self.variance_epsilon = eps + + def forward(self, hidden_states): + input_dtype = hidden_states.dtype + hidden_states = hidden_states.to(torch.float32) + variance = hidden_states.pow(2).mean(-1, keepdim=True) + hidden_states = hidden_states * torch.rsqrt(variance + self.variance_epsilon) + return self.weight * hidden_states.to(input_dtype) + + def extra_repr(self): + return f"{self.weight.shape[0]}, eps={self.variance_epsilon}" + + +class MambaBlock(GradientCheckpointingLayer): + def __init__(self, config, layer_idx): + super().__init__() + self.config = config + self.layer_idx = layer_idx + self.residual_in_fp32 = config.residual_in_fp32 + self.norm = MambaRMSNorm(config.hidden_size, eps=config.layer_norm_epsilon) + self.mixer = MambaMixer(config, layer_idx=layer_idx) + + def forward( + self, + hidden_states, + cache_params: Optional[MambaCache] = None, + cache_position: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.LongTensor] = None, + ): + residual = hidden_states + hidden_states = self.norm(hidden_states.to(dtype=self.norm.weight.dtype)) + if self.residual_in_fp32: + residual = residual.to(torch.float32) + + hidden_states = self.mixer( + hidden_states, cache_params=cache_params, cache_position=cache_position, attention_mask=attention_mask + ) + hidden_states = residual + hidden_states + return hidden_states + + +@auto_docstring +class MambaPreTrainedModel(PreTrainedModel): + config: MambaConfig + base_model_prefix = "backbone" + _no_split_modules = ["MambaBlock", "MambaMixer"] + supports_gradient_checkpointing = True + _is_stateful = True + + def _init_weights(self, module): + """Initialize the weights.""" + std = self.config.initializer_range + if isinstance(module, MambaMixer): + # S4D real initialization. These are not discretized! + # The core is to load them, compute the discrete states, then write the updated state. Keeps the memory bounded + A = torch.arange(1, module.ssm_state_size + 1, dtype=torch.float32)[None, :] + A = A.expand(module.intermediate_size, -1).contiguous() + module.A_log.copy_(torch.log(A)) + module.A_log._no_weight_decay = True + module.D._no_weight_decay = True + module.D.data.fill_(1.0) + + dt_init_std = self.config.time_step_rank**-0.5 * self.config.time_step_scale + if self.config.time_step_init_scheme == "constant": + nn.init.constant_(module.dt_proj.weight, dt_init_std) + elif self.config.time_step_init_scheme == "random": + nn.init.uniform_(module.dt_proj.weight, -dt_init_std, dt_init_std) + + dt = torch.exp( + torch.rand(self.config.intermediate_size) + * (math.log(self.config.time_step_max) - math.log(self.config.time_step_min)) + + math.log(self.config.time_step_min) + ).clamp(min=self.config.time_step_floor) + # # Inverse of softplus: https://github.com/pytorch/pytorch/issues/72759 + inv_dt = dt + torch.log(-torch.expm1(-dt)) + module.dt_proj.bias.copy_(inv_dt) + module.dt_proj.bias._no_reinit = True + + nn.init.kaiming_uniform_(module.conv1d.weight, a=math.sqrt(5)) + if module.conv1d.bias is not None: + if not getattr(module.conv1d.bias, "_no_reinit", False): + nn.init.zeros_(module.conv1d.bias) + nn.init.kaiming_uniform_(module.out_proj.weight, a=math.sqrt(5)) + + if self.config.rescale_prenorm_residual: + # Reinitialize selected weights subject to the OpenAI GPT-2 Paper Scheme: + # > A modified initialization which accounts for the accumulation on the residual path with model depth. Scale + # > the weights of residual layers at initialization by a factor of 1/√N where N is the # of residual layers. + # > -- GPT-2 :: https://openai.com/blog/better-language-models/ + # + # Reference (Megatron-LM): https://github.com/NVIDIA/Megatron-LM/blob/main/megatron/model/gpt_model.py + # Special Scaled Initialization --> There are 2 Layer Norms per Transformer Block + # Following Pytorch init, except scale by 1/sqrt(2 * n_layer) + # We need to reinit p since this code could be called multiple times + # Having just p *= scale would repeatedly scale it down + p = module.out_proj.weight + p /= math.sqrt(self.config.num_hidden_layers) + + if isinstance(module, nn.Linear): + if not getattr(module.weight, "_no_reinit", False): + nn.init.normal_(module.weight, std=std) + if module.bias is not None: + if not getattr(module.bias, "_no_reinit", False): + nn.init.zeros_(module.bias) + elif isinstance(module, MambaRMSNorm): + module.weight.data.fill_(1.0) + elif isinstance(module, nn.Embedding): + nn.init.normal_(module.weight, std=std) + + +@dataclass +@auto_docstring( + custom_intro=""" + Class for the MAMBA model outputs. + """ +) +class MambaOutput(ModelOutput): + r""" + cache_params (`MambaCache`): + The state of the model at the last time step. Can be used in a forward method with the next `input_ids` to + avoid providing the old `input_ids`. + + Includes both the State space model state matrices after the selective scan, and the Convolutional states + """ + + last_hidden_state: Optional[torch.FloatTensor] = None + cache_params: Optional[MambaCache] = None + hidden_states: Optional[tuple[torch.FloatTensor]] = None + + +@dataclass +@auto_docstring( + custom_intro=""" + Base class for causal language model (or autoregressive) outputs. + """ +) +class MambaCausalLMOutput(ModelOutput): + r""" + loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided): + Language modeling loss (for next-token prediction). + logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`): + Prediction scores of the language modeling head (scores for each vocabulary token before SoftMax). + cache_params (`MambaCache`): + The state of the model at the last time step. Can be used in a forward method with the next `input_ids` to + avoid providing the old `input_ids`. + + Includes both the State space model state matrices after the selective scan, and the Convolutional states + """ + + loss: Optional[torch.FloatTensor] = None + logits: Optional[torch.FloatTensor] = None + cache_params: Optional[MambaCache] = None + hidden_states: Optional[tuple[torch.FloatTensor]] = None + + +@auto_docstring +class MambaModel(MambaPreTrainedModel): + def __init__(self, config): + super().__init__(config) + + self.embeddings = nn.Embedding(config.vocab_size, config.hidden_size) + self.layers = nn.ModuleList([MambaBlock(config, layer_idx=idx) for idx in range(config.num_hidden_layers)]) + + self.gradient_checkpointing = False + self.norm_f = MambaRMSNorm(config.hidden_size, eps=config.layer_norm_epsilon) + # Initialize weights and apply final processing + self._register_load_state_dict_pre_hook(self.load_hook) + self.post_init() + + def load_hook(self, state_dict, prefix, *args): + for k in state_dict: + if "embedding." in k: + state_dict[k.replace("embedding.", "embeddings.")] = state_dict.pop(k) + break + + def get_input_embeddings(self): + return self.embeddings + + def set_input_embeddings(self, new_embeddings): + self.embeddings = new_embeddings + + @auto_docstring + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + inputs_embeds: Optional[torch.LongTensor] = None, + cache_params: Optional[MambaCache] = None, + use_cache: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + cache_position: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.LongTensor] = None, + ) -> Union[tuple, MambaOutput]: + r""" + cache_params (`MambaCache`, *optional*): + If passed along, the model uses the previous state in all the blocks (which will give the output for the + `input_ids` provided as if the model add `state_input_ids + input_ids` as context). + use_cache (`bool`, *optional*): + If set to `True`, the `cache_params` is returned and can be used to quickly generate the next logits. + """ + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + use_cache = use_cache if use_cache is not None else (self.config.use_cache if not self.training else False) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + if (input_ids is None) ^ (inputs_embeds is not None): # ^ is python for xor + raise ValueError("You must specify exactly one of input_ids or inputs_embeds") + + if inputs_embeds is None: + inputs_embeds = self.embeddings(input_ids) + + if self.gradient_checkpointing and self.training and use_cache: + use_cache = False + + if use_cache: + if cache_params is None: + cache_params = MambaCache( + self.config, inputs_embeds.size(0), device=inputs_embeds.device, dtype=inputs_embeds.dtype + ) + cache_position = torch.arange(0, self.config.conv_kernel, device=inputs_embeds.device) + elif cache_position is None: + # cases when we do manual forward instead of using `model.generate` which will initiate + # `cache_position` and makes sure it is not None, throw error here instead of doing some + # hack to conjecture the current cache position + raise ValueError( + "You have to specify the `cache_position` manually when `use_cache=True` and `cache_params` is passed, " + "you don't have to pass a `cache_params` if you are in prefilling stage because in that case it will " + "be initialized for you automatically" + ) + else: + cache_params = None + + hidden_states = inputs_embeds + all_hidden_states = () if output_hidden_states else None + for mixer_block in self.layers: + hidden_states = mixer_block( + hidden_states, + cache_params=cache_params, + cache_position=cache_position, + attention_mask=attention_mask, + ) + + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + hidden_states = self.norm_f(hidden_states) + + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if not return_dict: + return tuple(v for v in [hidden_states, cache_params, all_hidden_states] if v is not None) + + return MambaOutput( + last_hidden_state=hidden_states, + cache_params=cache_params if use_cache else None, + hidden_states=all_hidden_states, + ) + + +@auto_docstring( + custom_intro=""" + The MAMBA Model transformer with a language modeling head on top (linear layer with weights tied to the input + embeddings). + """ +) +class MambaForCausalLM(MambaPreTrainedModel, GenerationMixin): + _tied_weights_keys = ["lm_head.weight"] + + def __init__(self, config): + super().__init__(config) + self.backbone = MambaModel(config) + self.lm_head = nn.Linear(config.hidden_size, config.vocab_size, bias=False) + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self): + return self.backbone.get_input_embeddings() + + def set_input_embeddings(self, new_embeddings): + return self.backbone.set_input_embeddings(new_embeddings) + + def _update_model_kwargs_for_generation( + self, outputs: ModelOutput, model_kwargs: dict[str, Any], num_new_tokens: int = 1, **kwargs + ) -> dict[str, Any]: + model_kwargs["cache_params"] = outputs.get("cache_params", None) + if ( + model_kwargs.get("use_cache", True) + and "cache_position" in model_kwargs + and model_kwargs["cache_position"] is not None + ): + model_kwargs["cache_position"] = model_kwargs["cache_position"][-1:] + num_new_tokens + + if "attention_mask" in model_kwargs: + attention_mask = model_kwargs["attention_mask"] + model_kwargs["attention_mask"] = torch.cat( + [attention_mask, attention_mask.new_ones((attention_mask.shape[0], 1))], dim=-1 + ) + + return model_kwargs + + def prepare_inputs_for_generation( + self, + input_ids, + inputs_embeds=None, + use_cache=None, + cache_params: Optional[MambaCache] = None, + cache_position: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.LongTensor] = None, + **kwargs, + ): + # Overwritten -- uses `cache_params` as opposed to `past_key_values` + model_inputs = {"input_ids": input_ids.contiguous()} + if use_cache and cache_params is None: + # we initialize the `cache_position` to full size of `conv_states` at prefill stage + # considering padding will be applied when input length is shorter, and truncation + # will be applied when it is longer, so it will be equivalent to always have it match + # the length of `cache_params.conv_states`, which is `config.conv_kernel` + cache_position = torch.arange(0, self.backbone.config.conv_kernel, device=input_ids.device) + if inputs_embeds is not None: + model_inputs = {"inputs_embeds": inputs_embeds} + max_batch_size = inputs_embeds.size(0) + else: + max_batch_size = input_ids.size(0) + cache_params = MambaCache(self.backbone.config, max_batch_size, device=self.device, dtype=self.dtype) + + if use_cache and cache_position[0] > 0: + model_inputs["input_ids"] = input_ids[:, -1].unsqueeze(-1).contiguous() + attention_mask = None + + if not use_cache and inputs_embeds is not None: + model_inputs = {"inputs_embeds": inputs_embeds} + + model_inputs.update( + { + "cache_params": cache_params, + "use_cache": use_cache, + "cache_position": cache_position, + "attention_mask": attention_mask, + } + ) + return model_inputs + + @auto_docstring + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.LongTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + cache_params: Optional[MambaCache] = None, + labels: Optional[torch.LongTensor] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + use_cache: Optional[bool] = None, + cache_position: Optional[torch.Tensor] = None, + **kwargs, # for now we need this for generation + ) -> Union[tuple, MambaCausalLMOutput]: + r""" + cache_params (`MambaCache`, *optional*): + If passed along, the model uses the previous state in all the blocks (which will give the output for the + `input_ids` provided as if the model add `state_input_ids + input_ids` as context). + labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*): + Labels for language modeling. Note that the labels **are shifted** inside the model, i.e. you can set + `labels = input_ids` Indices are selected in `[-100, 0, ..., config.vocab_size]` All labels set to `-100` + are ignored (masked), the loss is only computed for labels in `[0, ..., config.vocab_size]` + use_cache (`bool`, *optional*): + If set to `True`, the `cache_params` is returned and can be used to quickly generate the next logits. + """ + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + mamba_outputs = self.backbone( + input_ids, + cache_params=cache_params, + inputs_embeds=inputs_embeds, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + use_cache=use_cache, + cache_position=cache_position, + attention_mask=attention_mask, + ) + hidden_states = mamba_outputs[0] + + logits = self.lm_head(hidden_states.to(self.lm_head.weight.dtype)).float() + + loss = None + if labels is not None: + # move labels to correct device to enable model parallelism + labels = labels.to(logits.device) + # Shift so that tokens < n predict n + shift_logits = logits[..., :-1, :].contiguous() + shift_labels = labels[..., 1:].contiguous() + # Flatten the tokens + loss_fct = CrossEntropyLoss() + loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), shift_labels.view(-1)) + + if not return_dict: + output = (logits,) + mamba_outputs[1:] + return ((loss,) + output) if loss is not None else output + + return MambaCausalLMOutput( + loss=loss, + logits=logits, + cache_params=mamba_outputs.cache_params, + hidden_states=mamba_outputs.hidden_states, + ) + + +__all__ = ["MambaForCausalLM", "MambaModel", "MambaPreTrainedModel", "MambaCache"] \ No newline at end of file diff --git a/source/official-code/micro_hf/models/nope.py b/source/official-code/micro_hf/models/nope.py new file mode 100644 index 0000000000000000000000000000000000000000..cf8683890e8cf3c0a0b3883ec22bc58c947fb4f4 --- /dev/null +++ b/source/official-code/micro_hf/models/nope.py @@ -0,0 +1,584 @@ +""" PyTorch GPTNeoX model.""" + +from typing import Optional, Tuple, Union + +import torch +import torch.utils.checkpoint +from torch import nn +from torch.nn import BCEWithLogitsLoss, CrossEntropyLoss, MSELoss + +from transformers.activations import ACT2FN +from transformers.modeling_outputs import ( + BaseModelOutputWithPast, + CausalLMOutputWithPast, + QuestionAnsweringModelOutput, + SequenceClassifierOutputWithPast, + TokenClassifierOutput, +) +from transformers.modeling_utils import PreTrainedModel +from transformers.utils import logging + +from transformers.models.gpt_neox.configuration_gpt_neox import GPTNeoXConfig + +from transformers.models.gpt_neox.modeling_gpt_neox import GPTNeoXPreTrainedModel, GPTNeoXMLP + +logger = logging.get_logger(__name__) + + + + +class GPTNoPEAttention(nn.Module): + def __init__(self, config): + super().__init__() + self.config = config + self.num_attention_heads = config.num_attention_heads + self.hidden_size = config.hidden_size + if self.hidden_size % self.num_attention_heads != 0: + raise ValueError( + "The hidden size is not divisble by the number of attention heads! Make sure to update them" + ) + self.head_size = self.hidden_size // self.num_attention_heads + self.rotary_ndims = int(self.head_size * config.rotary_pct) + self._init_bias(config.max_position_embeddings) + + self.register_buffer("masked_bias", torch.tensor(-1e9), persistent=False) + self.norm_factor = self.head_size**-0.5 + self.query_key_value = nn.Linear(config.hidden_size, 3 * config.hidden_size) + self.dense = nn.Linear(config.hidden_size, config.hidden_size) + self.attention_dropout = nn.Dropout(config.attention_dropout) + + def _init_bias(self, max_positions, device=None): + self.register_buffer( + "bias", + torch.tril(torch.ones((max_positions, max_positions), dtype=torch.bool)).view( + 1, 1, max_positions, max_positions + ), + persistent=False, + ) + if device is not None: + self.bias = self.bias.to(device) + + def forward( + self, + hidden_states: torch.FloatTensor, + attention_mask: torch.FloatTensor, + position_ids: torch.LongTensor, + head_mask: Optional[torch.FloatTensor] = None, + layer_past: Optional[Tuple[torch.Tensor]] = None, + use_cache: Optional[bool] = False, + output_attentions: Optional[bool] = False, + ): + has_layer_past = layer_past is not None + + # Compute QKV + # Attention heads [batch, seq_len, hidden_size] + # --> [batch, seq_len, (np * 3 * head_size)] + qkv = self.query_key_value(hidden_states) + + # [batch, seq_len, (num_heads * 3 * head_size)] + # --> [batch, seq_len, num_heads, 3 * head_size] + new_qkv_shape = qkv.size()[:-1] + (self.num_attention_heads, 3 * self.head_size) + qkv = qkv.view(*new_qkv_shape) + + # [batch, seq_len, num_attention_heads, 3 * head_size] --> 3 [batch, num_attention_heads, seq_len, head_size] + query = qkv[..., : self.head_size].permute(0, 2, 1, 3) + key = qkv[..., self.head_size : 2 * self.head_size].permute(0, 2, 1, 3) + value = qkv[..., 2 * self.head_size :].permute(0, 2, 1, 3) + + # Compute rotary embeddings on rotary_ndims + query_rot = query[..., : self.rotary_ndims] + query_pass = query[..., self.rotary_ndims :] + key_rot = key[..., : self.rotary_ndims] + key_pass = key[..., self.rotary_ndims :] + + # Compute token offset for rotary embeddings (when decoding) + seq_len = key.shape[-2] + if has_layer_past: + seq_len += layer_past[0].shape[-2] + query = torch.cat((query, query_pass), dim=-1) + key = torch.cat((key, key_pass), dim=-1) + + # Cache QKV values + if has_layer_past: + past_key = layer_past[0] + past_value = layer_past[1] + key = torch.cat((past_key, key), dim=-2) + value = torch.cat((past_value, value), dim=-2) + present = (key, value) if use_cache else None + + # Compute attention + attn_output, attn_weights = self._attn(query, key, value, attention_mask, head_mask) + + # Reshape outputs + attn_output = self._merge_heads(attn_output, self.num_attention_heads, self.head_size) + attn_output = self.dense(attn_output) + + outputs = (attn_output, present) + if output_attentions: + outputs += (attn_weights,) + + return outputs + + @classmethod + def _split_heads(cls, tensor, num_attention_heads, attn_head_size): + """ + Splits hidden dim into attn_head_size and num_attention_heads + """ + # tensor: [bs, seq_len, hidden_size] + new_shape = tensor.size()[:-1] + (num_attention_heads, attn_head_size) + # -> [bs, seq_len, num_attention_heads, attn_head_size] + tensor = tensor.view(new_shape) + # -> [bs, num_attention_heads, seq_len, attn_head_size] + tensor = tensor.permute(0, 2, 1, 3) + return tensor + + @classmethod + def _merge_heads(cls, tensor, num_attention_heads, attn_head_size): + """ + Merges attn_head_size dim and num_attn_heads dim into hidden dim + """ + # tensor [bs, num_attention_heads, seq_len, attn_head_size] + tensor = tensor.permute(0, 2, 1, 3).contiguous() + # -> [bs, seq_len, num_attention_heads, attn_head_size] + tensor = tensor.view(tensor.size(0), tensor.size(1), num_attention_heads * attn_head_size) + # -> [bs, seq_len, hidden_size] + return tensor + + def _attn(self, query, key, value, attention_mask=None, head_mask=None): + # q, k, v: [bs, num_attention_heads, seq_len, attn_head_size] + # compute causal mask from causal mask buffer + batch_size, num_attention_heads, query_length, attn_head_size = query.size() + key_length = key.size(-2) + + # dynamically increase the causal mask with the key length, if needed. + if key_length > self.bias.shape[-1]: + self._init_bias(key_length, device=key.device) + causal_mask = self.bias[:, :, key_length - query_length : key_length, :key_length] + + query = query.view(batch_size * num_attention_heads, query_length, attn_head_size) + key = key.view(batch_size * num_attention_heads, key_length, attn_head_size) + attn_scores = torch.zeros( + batch_size * num_attention_heads, + query_length, + key_length, + dtype=query.dtype, + device=key.device, + ) + attn_scores = torch.baddbmm( + attn_scores, + query, + key.transpose(1, 2), + beta=1.0, + alpha=self.norm_factor, + ) + attn_scores = attn_scores.view(batch_size, num_attention_heads, query_length, key_length) + + mask_value = torch.finfo(attn_scores.dtype).min + # Need to be a tensor, otherwise we get error: `RuntimeError: expected scalar type float but found double`. + # Need to be on the same device, otherwise `RuntimeError: ..., x and y to be on the same device` + mask_value = torch.tensor(mask_value, dtype=attn_scores.dtype).to(attn_scores.device) + attn_scores = torch.where(causal_mask, attn_scores, mask_value) + + if attention_mask is not None: + # Apply the attention mask + attn_scores = attn_scores + attention_mask + + attn_weights = nn.functional.softmax(attn_scores, dim=-1) + attn_weights = attn_weights.to(value.dtype) + + # Mask heads if we want to + if head_mask is not None: + attn_weights = attn_weights * head_mask + + attn_weights = self.attention_dropout(attn_weights) + + attn_output = torch.matmul(attn_weights, value) + return attn_output, attn_weights + + + +class GPTNeoXNoPELayer(nn.Module): + def __init__(self, config): + super().__init__() + self.use_parallel_residual = config.use_parallel_residual + self.input_layernorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.post_attention_layernorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.post_attention_dropout = nn.Dropout(config.hidden_dropout) + self.post_mlp_dropout = nn.Dropout(config.hidden_dropout) + self.attention = GPTNoPEAttention(config) + self.mlp = GPTNeoXMLP(config) + + def forward( + self, + hidden_states: Optional[torch.FloatTensor], + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + use_cache: Optional[bool] = False, + layer_past: Optional[Tuple[torch.Tensor]] = None, + output_attentions: Optional[bool] = False, + ): + attention_layer_outputs = self.attention( + self.input_layernorm(hidden_states), + attention_mask=attention_mask, + position_ids=position_ids, + layer_past=layer_past, + head_mask=head_mask, + use_cache=use_cache, + output_attentions=output_attentions, + ) + attn_output = attention_layer_outputs[0] # output_attn: attn_output, present, (attn_weights) + attn_output = self.post_attention_dropout(attn_output) + outputs = attention_layer_outputs[1:] + + if self.use_parallel_residual: + # pseudocode: + # x = x + attn(ln1(x)) + mlp(ln2(x)) + mlp_output = self.mlp(self.post_attention_layernorm(hidden_states)) + mlp_output = self.post_mlp_dropout(mlp_output) + hidden_states = mlp_output + attn_output + hidden_states + else: + # pseudocode: + # x = x + attn(ln1(x)) + # x = x + mlp(ln2(x)) + attn_output = attn_output + hidden_states + mlp_output = self.mlp(self.post_attention_layernorm(attn_output)) + mlp_output = self.post_mlp_dropout(mlp_output) + hidden_states = mlp_output + attn_output + + if use_cache: + outputs = (hidden_states,) + outputs # hidden_states, present, (attn_weights) + else: + outputs = (hidden_states,) + outputs[1:] # hidden_states, (attn_weights) + + return outputs + + + +class GPTNeoXNoPEModel(GPTNeoXPreTrainedModel): + def __init__(self, config): + super().__init__(config) + self.config = config + + self.embed_in = nn.Embedding(config.vocab_size, config.hidden_size) + self.emb_dropout = nn.Dropout(config.hidden_dropout) + self.layers = nn.ModuleList([GPTNeoXNoPELayer(config) for _ in range(config.num_hidden_layers)]) + self.final_layer_norm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + + self.gradient_checkpointing = False + + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self): + return self.embed_in + + def set_input_embeddings(self, value): + self.embed_in = value + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, BaseModelOutputWithPast]: + r""" + past_key_values (`tuple(tuple(torch.FloatTensor))` of length `config.n_layers` with each tuple having 4 tensors of shape `(batch_size, num_heads, sequence_length - 1, embed_size_per_head)`): + Contains precomputed key and value hidden states of the attention blocks. Can be used to speed up decoding. + If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that + don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all + `decoder_input_ids` of shape `(batch_size, sequence_length)`. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see + `past_key_values`). + """ + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + use_cache = use_cache if use_cache is not None else self.config.use_cache + + if input_ids is not None and inputs_embeds is not None: + raise ValueError("You cannot specify both input_ids and inputs_embeds at the same time") + elif input_ids is not None: + self.warn_if_padding_and_no_attention_mask(input_ids, attention_mask) + input_shape = input_ids.size() + elif inputs_embeds is not None: + input_shape = inputs_embeds.size()[:-1] + else: + raise ValueError("You have to specify either input_ids or inputs_embeds") + + batch_size, seq_length = input_shape + + if past_key_values is None: + past_length = 0 + past_key_values = tuple([None] * self.config.num_hidden_layers) + else: + past_length = past_key_values[0][0].size(-2) + + if position_ids is None: + device = input_ids.device if input_ids is not None else inputs_embeds.device + position_ids = torch.arange(past_length, seq_length + past_length, dtype=torch.long, device=device) + position_ids = position_ids.unsqueeze(0) + + # Attention mask. + if attention_mask is not None: + assert batch_size > 0, "batch_size has to be defined and > 0" + # attention_mask = attention_mask.view(batch_size, -1) + # We create a 3D attention mask from a 2D tensor mask. + # Sizes are [batch_size, 1, 1, to_seq_length] + # So we can broadcast to [batch_size, num_heads, from_seq_length, to_seq_length] + # this attention mask is more simple than the triangular masking of causal attention + # used in OpenAI GPT, we just need to prepare the broadcast dimension here. + # attention_mask = attention_mask[:, None, None, :] + + # Since attention_mask is 1.0 for positions we want to attend and 0.0 for + # masked positions, this operation will create a tensor which is 0.0 for + # positions we want to attend and the dtype's smallest value for masked positions. + # Since we are adding it to the raw scores before the softmax, this is + # effectively the same as removing these entirely. + attention_mask = attention_mask.to(dtype=self.dtype) # fp16 compatibility + attention_mask = (1.0 - attention_mask) * torch.finfo(self.dtype).min + + # Prepare head mask if needed + # 1.0 in head_mask indicate we keep the head + # attention_probs has shape bsz x n_heads x N x N + # input head_mask has shape [num_heads] or [num_hidden_layers x num_heads] + # and head_mask is converted to shape [num_hidden_layers x batch x num_heads x seq_length x seq_length] + head_mask = self.get_head_mask(head_mask, self.config.num_hidden_layers) + + if inputs_embeds is None: + inputs_embeds = self.embed_in(input_ids) + + hidden_states = self.emb_dropout(inputs_embeds) + + if self.gradient_checkpointing and self.training: + if use_cache: + logger.warning( + "`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`..." + ) + use_cache = False + + presents = () if use_cache else None + all_attentions = () if output_attentions else None + all_hidden_states = () if output_hidden_states else None + for i, (layer, layer_past) in enumerate(zip(self.layers, past_key_values)): + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if self.gradient_checkpointing and self.training: + outputs = self._gradient_checkpointing_func( + layer.__call__, + hidden_states, + attention_mask, + position_ids, + head_mask[i], + use_cache, + None, + output_attentions, + ) + else: + outputs = layer( + hidden_states, + attention_mask=attention_mask, + position_ids=position_ids, + head_mask=head_mask[i], + layer_past=layer_past, + use_cache=use_cache, + output_attentions=output_attentions, + ) + hidden_states = outputs[0] + if use_cache is True: + presents = presents + (outputs[1],) + if output_attentions: + all_attentions = all_attentions + (outputs[2 if use_cache else 1],) + + hidden_states = self.final_layer_norm(hidden_states) + # Add last hidden state + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if not return_dict: + return tuple(v for v in [hidden_states, presents, all_hidden_states, all_attentions] if v is not None) + + return BaseModelOutputWithPast( + last_hidden_state=hidden_states, + past_key_values=presents, + hidden_states=all_hidden_states, + attentions=all_attentions, + ) + + +class GPTNeoXNoPEForCausalLM(GPTNeoXPreTrainedModel): + _tied_weights_keys = ["embed_out.weight"] + + def __init__(self, config): + super().__init__(config) + + self.gpt_neox = GPTNeoXNoPEModel(config) + self.embed_out = nn.Linear(config.hidden_size, config.vocab_size, bias=False) + + # Initialize weights and apply final processing + self.post_init() + + def get_output_embeddings(self): + return self.embed_out + + def set_output_embeddings(self, new_embeddings): + self.embed_out = new_embeddings + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None, + labels: Optional[torch.LongTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, CausalLMOutputWithPast]: + r""" + past_key_values (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`): + Tuple of `tuple(torch.FloatTensor)` of length `config.n_layers`, with each tuple having 2 tensors of shape + `(batch_size, num_heads, sequence_length, embed_size_per_head)`) and 2 additional tensors of shape + `(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)`. The two additional tensors are + only required when the model is used as a decoder in a Sequence to Sequence model. + + Contains pre-computed hidden-states (key and values in the self-attention blocks that can be used (see + `past_key_values` input) to speed up sequential decoding. + + If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that + don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all + `decoder_input_ids` of shape `(batch_size, sequence_length)`. + labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*): + Labels for computing the left-to-right language modeling loss (next word prediction). Indices should be in + `[-100, 0, ..., config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are + ignored (masked), the loss is only computed for the tokens with labels n `[0, ..., config.vocab_size]`. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see + `past_key_values`). + + Returns: + + Example: + + ```python + >>> from transformers import AutoTokenizer, GPTNeoXForCausalLM, GPTNeoXConfig + >>> import torch + + >>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-neox-20b") + >>> config = GPTNeoXConfig.from_pretrained("EleutherAI/gpt-neox-20b") + >>> config.is_decoder = True + >>> model = GPTNeoXForCausalLM.from_pretrained("EleutherAI/gpt-neox-20b", config=config) + + >>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt") + >>> outputs = model(**inputs) + + >>> prediction_logits = outputs.logits + ```""" + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + outputs = self.gpt_neox( + input_ids, + attention_mask=attention_mask, + position_ids=position_ids, + head_mask=head_mask, + inputs_embeds=inputs_embeds, + past_key_values=past_key_values, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + + hidden_states = outputs[0] + lm_logits = self.embed_out(hidden_states) + + lm_loss = None + if labels is not None: + # move labels to correct device to enable model parallelism + labels = labels.to(lm_logits.device) + # we are doing next-token prediction; shift prediction scores and input ids by one + shift_logits = lm_logits[:, :-1, :].contiguous() + labels = labels[:, 1:].contiguous() + loss_fct = CrossEntropyLoss() + lm_loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), labels.view(-1)) + + if not return_dict: + output = (lm_logits,) + outputs[1:] + return ((lm_loss,) + output) if lm_loss is not None else output + + return CausalLMOutputWithPast( + loss=lm_loss, + logits=lm_logits, + past_key_values=outputs.past_key_values, + hidden_states=outputs.hidden_states, + attentions=outputs.attentions, + ) + + def prepare_inputs_for_generation( + self, input_ids, past_key_values=None, attention_mask=None, inputs_embeds=None, **kwargs + ): + input_shape = input_ids.shape + # cut decoder_input_ids if past is used + if past_key_values is not None: + past_length = past_key_values[0][0].shape[2] + + # Some generation methods already pass only the last input ID + if input_ids.shape[1] > past_length: + remove_prefix_length = past_length + else: + # Default to old behavior: keep only final ID + remove_prefix_length = input_ids.shape[1] - 1 + + input_ids = input_ids[:, remove_prefix_length:] + + position_ids = kwargs.get("position_ids", None) + if attention_mask is not None and position_ids is None: + # create position_ids on the fly for batch generation + position_ids = attention_mask.long().cumsum(-1) - 1 + position_ids.masked_fill_(attention_mask == 0, 1) + if past_key_values: + position_ids = position_ids[:, -input_ids.shape[1] :] + + # if model is used as a decoder in encoder-decoder model, the decoder attention mask is created on the fly + if attention_mask is None: + attention_mask = input_ids.new_ones(input_shape) + + # if `inputs_embeds` are passed, we only want to use them in the 1st generation step + if inputs_embeds is not None and past_key_values is None: + model_inputs = {"inputs_embeds": inputs_embeds} + else: + model_inputs = {"input_ids": input_ids} + model_inputs.update( + { + "attention_mask": attention_mask, + "past_key_values": past_key_values, + "position_ids": position_ids, + } + ) + + return model_inputs + + def _reorder_cache(self, past_key_values, beam_idx): + reordered_past = () + for layer_past in past_key_values: + reordered_past += ( + tuple(past_state.index_select(0, beam_idx.to(past_state.device)) for past_state in layer_past[:2]) + + layer_past[2:], + ) + return reordered_past + + diff --git a/source/official-code/micro_hf/models/rope.py b/source/official-code/micro_hf/models/rope.py new file mode 100644 index 0000000000000000000000000000000000000000..f2fdf57cf8f3024c095f34b9361ca11c00eec1a1 --- /dev/null +++ b/source/official-code/micro_hf/models/rope.py @@ -0,0 +1,557 @@ +""" PyTorch GPTNeoX model.""" + +import torch +import torch.utils.checkpoint +from torch import nn +from torch.nn import CrossEntropyLoss + +from transformers.activations import ACT2FN +from transformers.file_utils import ( + add_code_sample_docstrings, + add_start_docstrings, + add_start_docstrings_to_model_forward, + replace_return_docstrings, +) +from transformers.modeling_outputs import BaseModelOutputWithPast, CausalLMOutputWithPast +from transformers.modeling_utils import PreTrainedModel +from transformers.utils import logging +from transformers.models.gpt_neox.configuration_gpt_neox import GPTNeoXConfig + +from transformers.generation import GenerationMixin + + +logger = logging.get_logger(__name__) + +_CHECKPOINT_FOR_DOC = "gpt-neox-20b" +_CONFIG_FOR_DOC = "GPTNeoXConfig" +_TOKENIZER_FOR_DOC = "GPTNeoXTokenizerFast" + + +class GPTNeoXPreTrainedModel(PreTrainedModel): + """ + An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained + models. + """ + + config_class = GPTNeoXConfig + base_model_prefix = "gpt_neox" + supports_gradient_checkpointing = True + _no_split_modules = ["GPTNeoXLayer"] + + def _init_weights(self, module): + """Initialize the weights""" + if isinstance(module, nn.Linear): + module.weight.data.normal_(mean=0.0, std=self.config.initializer_range) + if module.bias is not None: + module.bias.data.zero_() + elif isinstance(module, nn.Embedding): + module.weight.data.normal_(mean=0.0, std=self.config.initializer_range) + if module.padding_idx is not None: + module.weight.data[module.padding_idx].zero_() + elif isinstance(module, nn.LayerNorm): + module.bias.data.zero_() + module.weight.data.fill_(1.0) + + def _set_gradient_checkpointing(self, module, value=False): + if isinstance(module, GPTNeoXModel): + module.gradient_checkpointing = value + + +class GPTNeoXAttention(nn.Module): + def __init__(self, config): + super().__init__() + self.num_attention_heads = config.num_attention_heads + self.hidden_size = config.hidden_size + self.head_size = self.hidden_size // self.num_attention_heads + self.rotary_ndims = int(self.head_size * config.rotary_pct) + max_positions = config.max_position_embeddings + self.register_buffer( + "bias", + torch.tril(torch.ones((max_positions, max_positions), dtype=torch.uint8)).view( + 1, 1, max_positions, max_positions + ), + ) + self.register_buffer("masked_bias", torch.tensor(-1e9)) + self.rotary_emb = RotaryEmbedding(self.rotary_ndims, base=config.rotary_emb_base) + self.norm_factor = torch.sqrt(torch.tensor(self.head_size, dtype=torch.float32)).to(torch.get_default_dtype()) + self.query_key_value = nn.Linear(config.hidden_size, 3 * config.hidden_size) + self.dense = nn.Linear(config.hidden_size, config.hidden_size) + + def forward( + self, + hidden_states, + attention_mask, + head_mask=None, + layer_past=None, + use_cache=False, + output_attentions=False, + ): + has_layer_past = layer_past is not None + + # Compute QKV + # Attention heads [batch, seq_len, hidden_size] + # --> [batch, seq_len, (np * 3 * head_size)] + qkv = self.query_key_value(hidden_states) + + # [batch, seq_len, (num_heads * 3 * head_size)] + # --> [batch, seq_len, num_heads, 3 * head_size] + new_qkv_shape = qkv.size()[:-1] + (self.num_attention_heads, 3 * self.head_size) + qkv = qkv.view(*new_qkv_shape) + + # [batch, seq_len, num_attention_heads, 3 * head_size] --> 3 [batch, num_attention_heads, seq_len, head_size] + query = qkv[..., : self.head_size].permute(0, 2, 1, 3) + key = qkv[..., self.head_size : 2 * self.head_size].permute(0, 2, 1, 3) + value = qkv[..., 2 * self.head_size :].permute(0, 2, 1, 3) + + # Compute rotary embeddings on rotary_ndims + query_rot = query[..., : self.rotary_ndims] + query_pass = query[..., self.rotary_ndims :] + key_rot = key[..., : self.rotary_ndims] + key_pass = key[..., self.rotary_ndims :] + + # Compute token offset for rotary embeddings (when decoding) + seq_len = key.shape[-2] + offset = 0 + if has_layer_past: + offset = layer_past[0].shape[-2] + seq_len += offset + cos, sin = self.rotary_emb(value, seq_len=seq_len) + query, key = apply_rotary_pos_emb(query_rot, key_rot, cos, sin, offset=offset) + query = torch.cat((query, query_pass), dim=-1) + key = torch.cat((key, key_pass), dim=-1) + + # Cache QKV values + if has_layer_past: + past_key = layer_past[0] + past_value = layer_past[1] + key = torch.cat((past_key, key), dim=-2) + value = torch.cat((past_value, value), dim=-2) + present = None if use_cache else (key, value) + + # Compute attention + attn_output, attn_weights = self._attn(query, key, value, attention_mask, head_mask) + + # Reshape outputs + attn_output = self._merge_heads(attn_output, self.num_attention_heads, self.head_size) + attn_output = self.dense(attn_output) + + outputs = (attn_output, present) + if output_attentions: + outputs += (attn_weights,) + + return outputs + + @classmethod + def _split_heads(cls, tensor, num_attention_heads, attn_head_size): + """ + Splits hidden dim into attn_head_size and num_attention_heads + """ + # tensor: [bs, seq_len, hidden_size] + new_shape = tensor.size()[:-1] + (num_attention_heads, attn_head_size) + # -> [bs, seq_len, num_attention_heads, attn_head_size] + tensor = tensor.view(new_shape) + # -> [bs, num_attention_heads, seq_len, attn_head_size] + tensor = tensor.permute(0, 2, 1, 3) + return tensor + + @classmethod + def _merge_heads(cls, tensor, num_attention_heads, attn_head_size): + """ + Merges attn_head_size dim and num_attn_heads dim into hidden dim + """ + # tensor [bs, num_attention_heads, seq_len, attn_head_size] + tensor = tensor.permute(0, 2, 1, 3).contiguous() + # -> [bs, seq_len, num_attention_heads, attn_head_size] + tensor = tensor.view(tensor.size(0), tensor.size(1), num_attention_heads * attn_head_size) + # -> [bs, seq_len, hidden_size] + return tensor + + def _attn(self, query, key, value, attention_mask=None, head_mask=None): + # q, k, v: [bs, num_attention_heads, seq_len, attn_head_size] + # compute causal mask from causal mask buffer + batch_size, num_attention_heads, query_length, attn_head_size = query.size() + key_length = key.size(-2) + + causal_mask = self.bias[:, :, key_length - query_length : key_length, :key_length].bool() + + query = query.view(batch_size * num_attention_heads, query_length, attn_head_size) + key = key.view(batch_size * num_attention_heads, key_length, attn_head_size) + attn_scores = torch.einsum("bik,bjk->bij", query, key) / self.norm_factor + attn_scores = attn_scores.view(batch_size, num_attention_heads, query_length, key_length) + + attn_scores = torch.where(causal_mask, attn_scores, self.masked_bias.to(attn_scores.dtype)) + + if attention_mask is not None: + # Apply the attention mask + attn_scores = attn_scores + attention_mask + + attn_weights = nn.functional.softmax(attn_scores, dim=-1) + attn_weights = attn_weights.to(value.dtype) + + # Mask heads if we want to + if head_mask is not None: + attn_weights = attn_weights * head_mask + + attn_output = torch.matmul(attn_weights, value) + return attn_output, attn_weights + + +def attention_mask_func(attention_scores, ltor_mask): + attention_scores.masked_fill_(~ltor_mask, -10000.0) + return attention_scores + + +class RotaryEmbedding(torch.nn.Module): + def __init__(self, dim, base=10000, device=None): + super().__init__() + inv_freq = 1.0 / (base ** (torch.arange(0, dim, 2).float().to(device) / dim)) + self.dim = dim + self.register_buffer("inv_freq", inv_freq) + self.max_seq_len_cached = None + self.cos_cached = None + self.sin_cached = None + + def forward(self, x, seq_len=None): + # x: [bs, num_attention_heads, seq_len, head_size] + if self.max_seq_len_cached is None or (seq_len > self.max_seq_len_cached): + self.max_seq_len_cached = seq_len + t = torch.arange(self.max_seq_len_cached, device=x.device, dtype=self.inv_freq.dtype) + freqs = torch.einsum("i,j->ij", t, self.inv_freq) + # Different from paper, but it uses a different permutation in order to obtain the same calculation + emb = torch.cat((freqs, freqs), dim=-1).to(x.device) + + # Added: to allow for smaller attention patterns + if self.dim % 2 == 1: + emb = emb[:,:-1] + + self.cos_cached = emb.cos()[None, None, :, :] + self.sin_cached = emb.sin()[None, None, :, :] + return self.cos_cached[:seq_len, ...], self.sin_cached[:seq_len, ...] + + +def rotate_half(x): + """Rotates half the hidden dims of the input.""" + x1 = x[..., : x.shape[-1] // 2] + x2 = x[..., x.shape[-1] // 2 :] + return torch.cat((-x2, x1), dim=-1) + + +def apply_rotary_pos_emb(q, k, cos, sin, offset: int = 0): + cos = cos[..., offset : q.shape[-2] + offset, :] + sin = sin[..., offset : q.shape[-2] + offset, :] + q_embed = (q * cos) + (rotate_half(q) * sin) + k_embed = (k * cos) + (rotate_half(k) * sin) + return q_embed, k_embed + + +class GPTNeoXMLP(nn.Module): + def __init__(self, config): + super().__init__() + self.dense_h_to_4h = nn.Linear(config.hidden_size, config.intermediate_size) + self.dense_4h_to_h = nn.Linear(config.intermediate_size, config.hidden_size) + self.act = ACT2FN[config.hidden_act] + + def forward(self, hidden_states): + hidden_states = self.dense_h_to_4h(hidden_states) + hidden_states = self.act(hidden_states) + hidden_states = self.dense_4h_to_h(hidden_states) + return hidden_states + + +class GPTNeoXLayer(nn.Module): + def __init__(self, config): + super().__init__() + self.input_layernorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.post_attention_layernorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.attention = GPTNeoXAttention(config) + self.mlp = GPTNeoXMLP(config) + + def forward( + self, + hidden_states, + attention_mask=None, + head_mask=None, + use_cache=False, + layer_past=None, + output_attentions=False, + ): + residual = hidden_states + ln_out = self.input_layernorm(hidden_states) + attention_layer_outputs = self.attention( + ln_out, + attention_mask=attention_mask, + layer_past=layer_past, + head_mask=head_mask, + use_cache=use_cache, + output_attentions=output_attentions, + ) + attn_output = attention_layer_outputs[0] # output_attn: a, present, (attentions) + outputs = attention_layer_outputs[1:] + + mlp_output = self.mlp(self.post_attention_layernorm(hidden_states)) + hidden_states = mlp_output + attn_output + residual + + if use_cache: + outputs = (hidden_states,) + outputs + else: + outputs = (hidden_states,) + outputs[1:] + + return outputs # hidden_states, present, (attentions) + + +class GPTNeoXModel(GPTNeoXPreTrainedModel): + def __init__(self, config): + super().__init__(config) + self.config = config + + self.embed_in = nn.Embedding(config.vocab_size, config.hidden_size) + self.layers = nn.ModuleList([GPTNeoXLayer(config) for _ in range(config.num_hidden_layers)]) + self.final_layer_norm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self): + return self.embed_in + + def set_input_embeddings(self, value): + self.embed_in = value + + def forward( + self, + input_ids=None, + attention_mask=None, + head_mask=None, + inputs_embeds=None, + past_key_values=None, + use_cache=None, + output_attentions=None, + output_hidden_states=None, + return_dict=None, + ): + r""" + past_key_values (`tuple(tuple(torch.FloatTensor))` of length `config.n_layers` with each tuple having 4 tensors of shape `(batch_size, num_heads, sequence_length - 1, embed_size_per_head)`): + Contains precomputed key and value hidden states of the attention blocks. Can be used to speed up decoding. + If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that + don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all + `decoder_input_ids` of shape `(batch_size, sequence_length)`. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see + `past_key_values`). + """ + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + use_cache = use_cache if use_cache is not None else self.config.use_cache + + if input_ids is not None and inputs_embeds is not None: + raise ValueError("You cannot specify both input_ids and inputs_embeds at the same time") + elif input_ids is not None: + input_shape = input_ids.size() + elif inputs_embeds is not None: + input_shape = inputs_embeds.size()[:-1] + else: + raise ValueError("You have to specify either input_ids or inputs_embeds") + + batch_size, seq_length = input_shape + + if past_key_values is None: + past_key_values = tuple([None] * self.config.num_hidden_layers) + + # Attention mask. + if attention_mask is not None: + assert batch_size > 0, "batch_size has to be defined and > 0" + # attention_mask = attention_mask.view(batch_size, -1) + # # We create a 3D attention mask from a 2D tensor mask. + # # Sizes are [batch_size, 1, 1, to_seq_length] + # # So we can broadcast to [batch_size, num_heads, from_seq_length, to_seq_length] + # # this attention mask is more simple than the triangular masking of causal attention + # # used in OpenAI GPT, we just need to prepare the broadcast dimension here. + # attention_mask = attention_mask[:, None, None, :] + + # # Since attention_mask is 1.0 for positions we want to attend and 0.0 for + # # masked positions, this operation will create a tensor which is 0.0 for + # # positions we want to attend and -10000.0 for masked positions. + # # Since we are adding it to the raw scores before the softmax, this is + # # effectively the same as removing these entirely. + attention_mask = attention_mask.to(dtype=self.dtype) # fp16 compatibility + attention_mask = (1.0 - attention_mask) * -10000.0 + + # Prepare head mask if needed + # 1.0 in head_mask indicate we keep the head + # attention_probs has shape bsz x n_heads x N x N + # input head_mask has shape [num_heads] or [num_hidden_layers x num_heads] + # and head_mask is converted to shape [num_hidden_layers x batch x num_heads x seq_length x seq_length] + head_mask = self.get_head_mask(head_mask, self.config.num_hidden_layers) + + if inputs_embeds is None: + inputs_embeds = self.embed_in(input_ids) + + hidden_states = inputs_embeds + + presents = () if use_cache else None + all_attentions = () if output_attentions else None + all_hidden_states = () if output_hidden_states else None + for i, (layer, layer_past) in enumerate(zip(self.layers, past_key_values)): + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + outputs = layer( + hidden_states, + attention_mask=attention_mask, + head_mask=head_mask[i], + layer_past=layer_past, + use_cache=use_cache, + output_attentions=output_attentions, + ) + hidden_states = outputs[0] + if use_cache is True: + presents = presents + (outputs[1],) + if output_attentions: + all_attentions = all_attentions + (outputs[2 if use_cache else 1],) + + hidden_states = self.final_layer_norm(hidden_states) + # Add last hidden state + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if not return_dict: + return tuple(v for v in [hidden_states, presents, all_hidden_states, all_attentions] if v is not None) + + return BaseModelOutputWithPast( + last_hidden_state=hidden_states, + past_key_values=presents, + hidden_states=all_hidden_states, + attentions=all_attentions, + ) + + +class GPTNeoXForCausalLM(GPTNeoXPreTrainedModel, GenerationMixin): + + _keys_to_ignore_on_load_missing = [r"position_ids", r"predictions.decoder.bias"] + + def __init__(self, config): + super().__init__(config) + + self.gpt_neox = GPTNeoXModel(config) + self.embed_out = nn.Linear(config.hidden_size, config.vocab_size, bias=False) + + # Initialize weights and apply final processing + self.post_init() + + def get_output_embeddings(self): + return self.embed_out + + def set_output_embeddings(self, new_embeddings): + self.embed_out = new_embeddings + + def forward( + self, + input_ids=None, + attention_mask=None, + inputs_embeds=None, + head_mask=None, + past_key_values=None, + labels=None, + use_cache=None, + output_attentions=None, + output_hidden_states=None, + return_dict=None, + ): + r""" + past_key_values (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`): + Tuple of `tuple(torch.FloatTensor)` of length `config.n_layers`, with each tuple having 2 tensors of shape + `(batch_size, num_heads, sequence_length, embed_size_per_head)`) and 2 additional tensors of shape + `(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)`. The two additional tensors are + only required when the model is used as a decoder in a Sequence to Sequence model. + + Contains pre-computed hidden-states (key and values in the self-attention blocks that can be used (see + `past_key_values` input) to speed up sequential decoding. + + If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that + don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all + `decoder_input_ids` of shape `(batch_size, sequence_length)`. + labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*): + Labels for computing the left-to-right language modeling loss (next word prediction). Indices should be in + `[-100, 0, ..., config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are + ignored (masked), the loss is only computed for the tokens with labels n `[0, ..., config.vocab_size]`. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see + `past_key_values`). + + Returns: + + Example: + + ```python + >>> from transformers import GPTNeoXTokenizer, GPTNeoXForCausalLM, GPTNeoXConfig + >>> import torch + + >>> tokenizer = GPTNeoXTokenizer.from_pretrained("gpt-neox-20b") + >>> config = GPTNeoXConfig.from_pretrained("gpt-neox-20b") + >>> config.is_decoder = True + >>> model = GPTNeoXForCausalLM.from_pretrained("gpt-neox-20b", config=config) + + >>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt") + >>> outputs = model(**inputs) + + >>> prediction_logits = outputs.logits + ```""" + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + outputs = self.gpt_neox( + input_ids, + attention_mask=attention_mask, + head_mask=head_mask, + inputs_embeds=inputs_embeds, + past_key_values=past_key_values, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + + hidden_states = outputs[0] + lm_logits = self.embed_out(hidden_states) + + lm_loss = None + if labels is not None: + # we are doing next-token prediction; shift prediction scores and input ids by one + shift_logits = lm_logits[:, :-1, :].contiguous() + labels = labels[:, 1:].contiguous() + loss_fct = CrossEntropyLoss() + lm_loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), labels.view(-1)) + + if not return_dict: + output = (lm_logits,) + outputs[1:] + return ((lm_loss,) + output) if lm_loss is not None else output + + return CausalLMOutputWithPast( + loss=lm_loss, + logits=lm_logits, + past_key_values=outputs.past_key_values, + hidden_states=outputs.hidden_states, + attentions=outputs.attentions, + ) + + def prepare_inputs_for_generation(self, input_ids, past=None, attention_mask=None, **model_kwargs): + input_shape = input_ids.shape + + # if model is used as a decoder in encoder-decoder model, the decoder attention mask is created on the fly + if attention_mask is None: + attention_mask = input_ids.new_ones(input_shape) + + # cut decoder_input_ids if past is used + if past is not None: + input_ids = input_ids[:, -1:] + + return {"input_ids": input_ids, "attention_mask": attention_mask, "past_key_values": past} + + def _reorder_cache(self, past, beam_idx): + reordered_past = () + for layer_past in past: + reordered_past += ( + tuple(past_state.index_select(0, beam_idx) for past_state in layer_past[:2]) + layer_past[2:], + ) + return reordered_past \ No newline at end of file diff --git a/source/official-code/micro_hf/plt_utils.py b/source/official-code/micro_hf/plt_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..07bb9e8843abf643cac821aa8a0c83af3316643d --- /dev/null +++ b/source/official-code/micro_hf/plt_utils.py @@ -0,0 +1,183 @@ +import numpy as np +import torch +import matplotlib.pyplot as plt +from collections import defaultdict +import os + +# colors = {"TF": {"TF": "blue", "SSM": "orange"}, "SSM": {"TF": "green", "SSM": "red"}, "TF-nC": {"TF-nC": "brown"}} +colors = {"TF-TF": "blue", "TF-SSM": "orange", "SSM-TF": "green", "SSM-SSM": "red", "TF~nC-TF~nC": "brown", "TF-TF-TF": "blue", "SSM-SSM-SSM": "red", "SSM-SSM-TF": "green"} + +colors.update({"hybrid": "green", "TF": "blue", "SSM": "red"}) + + +def Int(s): return int("".join([c for c in s if c.isnumeric()])) +def Empty(): return [] + + + +def get_val_and_bounds(data): + mean = np.mean(data, axis=0) + median = np.median(data, axis=0) + + # return mean, np.min(data, axis=0), np.max(data, axis=0) + # return mean, mean-np.std(data, axis=0), mean+np.std(data, axis=0) + # return median, np.min(data, axis=0), np.max(data, axis=0) + return mean, np.quantile(data, 0.10, axis=0), np.quantile(data, 0.90, axis=0) + # return median, np.quantile(data, 0.10, axis=0), np.quantile(data, 0.90, axis=0) + + +def savefig(taskname, filename): + if "fig" not in os.listdir("results/" + taskname): + os.mkdir("results/" + taskname + "/fig") + + plt.savefig("results/" + taskname + "/fig/" + filename + ".png") + + + +split_array = ['_', 'task_name', 'layers', 'window', 'dim', 'num_heads', 'state_dim'] +def plot(data, params, ind_var, diff_lines="layers", param_counts=None, x_axis=None, num_layers=2): + fig, ax = plt.subplots() + if x_axis == 'epochs': + xs = defaultdict(Empty) + ys = defaultdict(Empty) + ys_lower = defaultdict(Empty) + ys_upper = defaultdict(Empty) + + # Get the relevant data for these params + for k in data.keys(): + d = dict(zip(split_array, k.split('_'))) + # if diff_lines != 'layer1' and params['layer1'] != d['layer1']: continue + # if diff_lines != 'layer2' and params['layer2'] != d['layer2']: continue + if diff_lines != 'window' and params['window'] != Int(d['window']): continue + if diff_lines != 'dim' and params['dim'] != Int(d['dim']): continue + if diff_lines != 'num_heads' and params['num_heads'] != Int(d['num_heads']): continue + if diff_lines != 'state_dim' and params['state_dim'] != Int(d['state_dim']): continue + + key = Int(d[diff_lines]) + + xs[key] = np.arange(0, data[k].shape[1]) + ys[key], ys_lower[key], ys_upper[key] = get_val_and_bounds(data[k]) + + legend = [] + keys = sorted(list(ys.keys())) + for key in keys: + plt.plot(xs[key], ys[key]) + legend.append(key) + + plt.legend(legend) + + for key in ys.keys(): + plt.fill_between(xs[key], ys_lower[key], ys_upper[key], color='lightblue', alpha=0.08) + + + if diff_lines == 'layers': + xs = defaultdict(Empty) + ys = defaultdict(Empty) + ys_lower = defaultdict(Empty) + ys_upper = defaultdict(Empty) + + # Get the relevant data for these params + for k in data.keys(): + d = dict(zip(split_array, k.split('_'))) + if ind_var != 'window' and params['window'] != Int(d['window']): continue + if ind_var != 'dim' and params['dim'] != Int(d['dim']): continue + if ind_var != 'num_heads' and params['num_heads'] != Int(d['num_heads']): continue + if ind_var != 'state_dim' and params['state_dim'] != Int(d['state_dim']): continue + + key = d['layers'] + + # print(k) + # print(d['layers']) + if d['layers'].split("-")[1].isnumeric() or len(d['layers'].split("-")) != num_layers: + # print("Ignoring", key) + continue + + if x_axis == 'params': + xs[key].append(param_counts[k]) + else: + xs[key].append(Int(d[ind_var])) + + r1, r2, r3 = get_val_and_bounds(data[k]) + ys[key].append(r1) + ys_lower[key].append(r2) + ys_upper[key].append(r3) + + # Sort the data so it is in order on the x axis + for key in ys.keys(): + ys[key] = [a[1] for a in sorted(zip(xs[key], ys[key]))] + ys_lower[key] = [a[1] for a in sorted(zip(xs[key], ys_lower[key]))] + ys_upper[key] = [a[1] for a in sorted(zip(xs[key], ys_upper[key]))] + xs[key].sort() + + # Plot the lines + legend = [] + for key in ys.keys(): + if key == "SSM-SSM" and (ind_var in ["num_heads", "window"]) or key == "TF-TF" and ind_var == "state_dim": + plt.axhline(y=np.mean(ys[key]), color=colors[key], linestyle='dashed') + # plt.axhline(y=ys[key][0], color=colors[key], linestyle='dashed') + else: + plt.plot(xs[key], ys[key], c=colors[key]) + legend.append(key) + plt.legend(legend) + + # Plot the error bars + for key in ys.keys(): + if key == "SSM-SSM" and (ind_var in ["num_heads", "window"]) or key == "TF-TF" and ind_var == "state_dim": + plt.fill_between(ax.get_xlim(), np.mean(ys_lower[key]), np.mean(ys_upper[key]), color=colors[key], alpha=0.08) + # plt.fill_between(ax.get_xlim(), ys_lower[key][0], ys_upper[key][0], color=colors[key], alpha=0.08) + else: + plt.fill_between(xs[key], ys_lower[key], ys_upper[key], color=colors[key], alpha=0.08) + + + elif diff_lines == 'depths': + # assert False # TODO: Doesn't plot across depth + xs = defaultdict(Empty) + ys = defaultdict(Empty) + ys_lower = defaultdict(Empty) + ys_upper = defaultdict(Empty) + + # Get the relevant data for these params + for k in data.keys(): + d = dict(zip(split_array, k.split('_'))) + if ind_var != 'window' and params['window'] != Int(d['window']): continue + if ind_var != 'dim' and params['dim'] != Int(d['dim']): continue + if ind_var != 'num_heads' and params['num_heads'] != Int(d['num_heads']): continue + if ind_var != 'state_dim' and params['state_dim'] != Int(d['state_dim']): continue + # print(d['layers']) + if not d['layers'].split("-")[1].isnumeric(): continue + # print("Here") + + key = d['layers'].split("-")[0] #+ "-" + d['layers'].split("-")[-1] + + if x_axis == 'params': + xs[key].append(param_counts[key]) + else: + xs[key].append(Int(d[ind_var])) + + r1, r2, r3 = get_val_and_bounds(data[k]) + ys[key].append(r1) + ys_lower[key].append(r2) + ys_upper[key].append(r3) + + # Sort the data so it is in order on the x axis + for key in ys.keys(): + ys[key] = [a[1] for a in sorted(zip(xs[key], ys[key]))] + ys_lower[key] = [a[1] for a in sorted(zip(xs[key], ys_lower[key]))] + ys_upper[key] = [a[1] for a in sorted(zip(xs[key], ys_upper[key]))] + xs[key].sort() + + # Plot the lines + legend = [] + for key in ys.keys(): + plt.plot(xs[key], ys[key], c=colors[key.split("-")[0]]) + legend.append(key.split("-")[0]) + plt.legend(legend) + + # Plot the error bars + for key in ys.keys(): + plt.fill_between(xs[key], ys_lower[key], ys_upper[key], color=colors[key.split("-")[0]], alpha=0.08) + + if num_layers == 2: + return diff_lines + "_" + ind_var + if num_layers == 3: + return diff_lines + "_" + ind_var + "_3" \ No newline at end of file diff --git a/source/official-code/micro_hf/process.ipynb b/source/official-code/micro_hf/process.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..5cbc64d35be369e9f09e7122b248c02ce131b8fe --- /dev/null +++ b/source/official-code/micro_hf/process.ipynb @@ -0,0 +1,1458 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 61, + "id": "15e7bc6a-c8fd-4803-9907-6b744a5819be", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "2536cab8-1d4d-4d69-8d34-ba1547c892c4", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import json\n", + "import matplotlib as mpl\n", + "import matplotlib.pyplot as plt\n", + "\n", + "mpl.rcParams.update({\n", + " \"figure.figsize\": (12, 8),\n", + " \"axes.spines.top\": False,\n", + " \"axes.spines.right\": False,\n", + " \"axes.xmargin\": 0,\n", + " \"axes.grid\": True,\n", + " \"grid.linestyle\": \"--\",\n", + " \"grid.linewidth\": 1,\n", + " \"axes.titlesize\": 30,\n", + " \"axes.labelsize\": 24,\n", + " \"xtick.labelsize\": 20,\n", + " \"ytick.labelsize\": 20,\n", + " \"font.size\": 22,\n", + " \"lines.linewidth\": 4,\n", + " \"lines.markersize\": 10,\n", + " \"legend.frameon\": True,\n", + "})\n", + "\n", + "# mpl.rcParams.update({\n", + "# \"figure.figsize\": (6, 4),\n", + "# \"axes.spines.top\": False,\n", + "# \"axes.spines.right\": False,\n", + "# \"axes.facecolor\": \"#fafafa\",\n", + "# \"axes.grid\": True,\n", + "# \"grid.color\": \"#dddddd\",\n", + "# \"grid.linestyle\": \"--\",\n", + "# \"axes.prop_cycle\": mpl.cycler(color=[\"#4C72B0\", \"#55A868\", \"#C44E52\",\n", + "# \"#8172B2\", \"#CCB974\", \"#64B5CD\"]),\n", + "# \"font.size\": 11,\n", + "# \"axes.labelsize\": 12,\n", + "# \"axes.titlesize\": 14,\n", + "# \"legend.frameon\": True,\n", + "# \"legend.facecolor\": \"white\",\n", + "# \"legend.edgecolor\": \"#dddddd\",\n", + "# \"lines.linewidth\": 2,\n", + "# })\n", + "\n", + "from plt_utils import plot, savefig\n", + "\n", + "import os\n", + "\n", + "# task_name, data_name, default_window, default_token_dim = \"var-copy\", \"data_100_5_26\", 20, 8 # 20, 24\n", + "# task_name, data_name, default_window, default_token_dim = \"assoc-recall-mk\", \"data_100_0_8\", 100, 16\n", + "# task_name, data_name, default_window, default_token_dim = \"decode-recall\", \"data_100_2_32\", 100, 8\n", + "\n", + "# task_name, data_name, default_window, default_token_dim = \"assoc-recall-mk\", \"data_100_0_8\", 20, 8\n", + "# task_name, data_name, default_window, default_token_dim = \"assoc-recall-mk\", \"data_100_0_8\", 20, 16\n", + "# task_name, data_name, default_window, default_token_dim = \"decode-recall-last\", \"data_100_2_32\", 100, 24\n", + "# task_name, data_name, default_window, default_token_dim = \"var-copy\", \"data_100_5_200\", 20, 8 # 20, 24\n", + "# task_name, data_name, default_window, default_token_dim = \"var-copy\", \"data_100_5_1000\", 20, 8 # 20, 24\n", + "# task_name, data_name, default_window, default_token_dim = \"needle\", \"data_500_2_100\", 100, 8 # 20, 24\n", + "# task_name, data_name, default_window, default_token_dim = \"needle\", \"data_100_2_100\", 100, 8 # 20, 24\n", + "task_name, data_name, default_window, default_token_dim = \"needle\", \"data_100_2_100\", 20, 8 # 20, 24\n", + "\n", + "mixed = False" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "d84cc6a2-95b6-4091-8434-d157a6605ac6", + "metadata": {}, + "outputs": [], + "source": [ + "dashed_task_name = '-'.join(task_name.split('_'))\n", + "\n", + "all_losses = {}\n", + "all_accs = {}\n", + "all_train_accs = {}\n", + "all_params = {}" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "db00c2f6-aad7-4330-b4c0-35edc28bc8ca", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.0, 0.007936508394777775, 0.0, 0.002016128972172737, 0.0, 0.012827897444367409, 0.08114035427570343, 0.0, 0.04670329764485359, 0.0029761905316263437]\n", + "[0.0850694477558136, 0.0, 0.08219178020954132, 0.0, 0.0533333346247673, 0.0, 0.030700424686074257, 0.0, 0.0, 0.0016666667070239782]\n", + "[0.04440789297223091, 0.11813186854124069, 0.0, 0.009803921915590763, 0.01666666753590107, 0.0, 0.0, 0.007894736714661121, 0.0, 0.0]\n", + "[0.11363636702299118, 0.0, 0.0, 0.0, 0.0013157895300537348, 0.01024590153247118, 0.0, 0.0, 0.0260416679084301, 0.0]\n", + "[0.0, 0.023600904271006584, 0.009036144241690636, 0.0, 0.016761362552642822, 0.0, 0.07211538404226303, 0.0, 0.0014367816038429737, 0.0016025641234591603]\n", + "[0.0, 0.0, 0.0, 0.1269230842590332, 0.003246753243729472, 0.0, 0.012195121496915817, 0.0, 0.0, 0.0]\n", + "[0.0, 0.0, 0.0, 0.1158854141831398, 0.14880050718784332, 0.1227678582072258, 0.36801114678382874, 0.0, 0.12295082211494446, 0.46090131998062134]\n", + "[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.003968254197388887, 0.0]\n", + "[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.11239427328109741, 0.03079710155725479, 0.016822317615151405]\n", + "[0.0, 0.125, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\n", + "[0.0022727272007614374, 0.025154639035463333, 0.014708646573126316, 0.1170647069811821, 0.125895157456398, 0.31086820363998413, 0.31013259291648865, 0.18369466066360474, 0.21283027529716492, 0.1306699961423874]\n", + "[0.041233714669942856, 0.0, 0.151078999042511, 0.14625918865203857, 0.2817351222038269, 0.20976635813713074, 0.33175793290138245, 0.2879599332809448, 0.22934533655643463, 0.2105589359998703]\n", + "[0.0021186440717428923, 0.06825881451368332, 0.2806858718395233, 0.04347805678844452, 0.11492312699556351, 0.08158329874277115, 0.3494309186935425, 0.26145073771476746, 0.0843108519911766, 0.17541258037090302]\n", + "[0.01884794607758522, 0.012609649449586868, 0.07837769389152527, 0.054761216044425964, 0.12343339622020721, 0.11629758030176163, 0.11622779071331024, 0.21719907224178314, 0.24378758668899536, 0.2300432026386261]\n", + "[0.018667979165911674, 0.008281147107481956, 0.06720085442066193, 0.22807146608829498, 0.2971227169036865, 0.301225483417511, 0.2691325843334198, 0.28946441411972046, 0.2755208909511566, 0.27829277515411377]\n", + "[0.0022321429569274187, 0.4625253677368164, 0.530422568321228, 0.9198776483535767, 0.9848665595054626, 0.9855155944824219, 0.9852311611175537, 0.9851679801940918, 0.9868021011352539, 0.9866132140159607]\n", + "[0.004824561532586813, 0.7365248799324036, 0.9868840575218201, 0.9869757294654846, 0.9865914583206177, 0.9860329031944275, 0.9852352738380432, 0.9868972301483154, 0.985245406627655, 0.987440824508667]\n", + "[0.0, 0.2445257306098938, 0.2519228160381317, 0.9851862192153931, 0.9852420091629028, 0.9851200580596924, 0.9854222536087036, 0.986382007598877, 0.9845066666603088, 0.9844436645507812]\n", + "[0.0024038462433964014, 0.8642634153366089, 0.986799418926239, 0.9855139851570129, 0.9865112900733948, 0.9852520227432251, 0.98660808801651, 0.986038088798523, 0.9860482811927795, 0.9857691526412964]\n", + "[0.1095716804265976, 0.4502856135368347, 0.7437176704406738, 0.9854722619056702, 0.9855340123176575, 0.985626220703125, 0.9855007529258728, 0.9849438667297363, 0.9862571358680725, 0.9857325553894043]\n", + "[0.0, 0.004464285913854837, 0.013153518550097942, 0.006442275829613209, 0.0, 0.0, 0.0024509804788976908, 0.0024999999441206455, 0.0016025641234591603, 0.2610471248626709]\n", + "[0.0, 0.005834471434354782, 0.004983412101864815, 0.0026315790601074696, 0.24264705181121826, 0.3211183547973633, 0.37028181552886963, 0.8388398885726929, 0.8593258857727051, 0.9862939715385437]\n", + "[0.0, 0.3712673485279083, 0.8568704724311829, 0.8627898097038269, 0.982572615146637, 0.9849404096603394, 0.9868080019950867, 0.9822224378585815, 0.9862265586853027, 0.9853953719139099]\n", + "[0.0022321429569274187, 0.0030780781526118517, 0.004311626777052879, 0.2448100596666336, 0.12142857164144516, 0.6521275043487549, 0.484771728515625, 0.6667517423629761, 0.8866413831710815, 0.8515896797180176]\n", + "[0.0015243901871144772, 0.020108696073293686, 0.465861976146698, 0.737869918346405, 0.8644667267799377, 0.9867923855781555, 0.9852065443992615, 0.9853119850158691, 0.9870482087135315, 0.9861565828323364]\n", + "[0.0, 0.047632575035095215, 0.003947368357330561, 0.0, 0.0, 0.24684524536132812, 0.12250000238418579, 0.11454582214355469, 0.35800644755363464, 0.3707042336463928]\n", + "[0.0, 0.0, 0.0, 0.06665383279323578, 0.061742424964904785, 0.09547135978937149, 0.2552361488342285, 0.20189231634140015, 0.14630548655986786, 0.14708508551120758]\n", + "[0.0, 0.043209876865148544, 0.0, 0.0, 0.0, 0.0, 0.12339743226766586, 0.0, 0.12222222238779068, 0.0]\n", + "[0.0, 0.0, 0.0, 0.0017361111240461469, 0.032967034727334976, 0.12377451360225677, 0.15583068132400513, 0.0, 0.12541402876377106, 0.2561090588569641]\n", + "[0.01293103490024805, 0.0, 0.0, 0.0, 0.01424050610512495, 0.0, 0.0, 0.0, 0.0, 0.0]\n", + "[0.0, 0.011363636702299118, 0.0, 0.022068800404667854, 0.006223359145224094, 0.010214371606707573, 0.02764067053794861, 0.028475116938352585, 0.0126459626480937, 0.03309043124318123]\n", + "[0.02083333395421505, 0.032534245401620865, 0.0, 0.026228535920381546, 0.07554321736097336, 0.10561453551054001, 0.1620188057422638, 0.19352008402347565, 0.2283574640750885, 0.2671760618686676]\n", + "[0.006859744433313608, 0.0013586956774815917, 0.009615384973585606, 0.01135149598121643, 0.001923076924867928, 0.01179245300590992, 0.01791323348879814, 0.003947368357330561, 0.03473798185586929, 0.01914113387465477]\n", + "[0.11315789818763733, 0.013433441519737244, 0.045447394251823425, 0.007953466847538948, 0.0057043652050197124, 0.01368843112140894, 0.025462962687015533, 0.0, 0.0, 0.018990345299243927]\n", + "[0.0012886597542092204, 0.012354066595435143, 0.0, 0.07738813757896423, 0.057787276804447174, 0.164332315325737, 0.12456046044826508, 0.3035653233528137, 0.4218360185623169, 0.18873558938503265]\n", + "[0.0, 0.005376344081014395, 0.0, 0.004716981202363968, 0.009244458749890327, 0.006666666828095913, 0.006147541105747223, 0.0, 0.01369441393762827, 0.012268650345504284]\n", + "[0.0, 0.0, 0.003821839112788439, 0.0013020833721384406, 0.013471322134137154, 0.007263681851327419, 0.015500795096158981, 0.009296339005231857, 0.01245915051549673, 0.0]\n", + "[0.03541666641831398, 0.008341759443283081, 0.024537544697523117, 0.08189655095338821, 0.01923076994717121, 0.0, 0.03755185008049011, 0.014705882407724857, 0.00909090880304575, 0.029493087902665138]\n", + "[0.0, 0.0038773147389292717, 0.0028579826466739178, 0.0021551724057644606, 0.06086166203022003, 0.004687500186264515, 0.0, 0.008333333767950535, 0.0476190485060215, 0.007978723384439945]\n", + "[0.0013297871919348836, 0.007352941203862429, 0.0, 0.009259259328246117, 0.06678082048892975, 0.022270984947681427, 0.043103449046611786, 0.021648643538355827, 0.0062989043071866035, 0.012048192322254181]\n", + "[0.018708335235714912, 0.01308025885373354, 0.7579535245895386, 0.9870380759239197, 0.9870198965072632, 0.9859370589256287, 0.9848654270172119, 0.9856873154640198, 0.9865489602088928, 0.986274242401123]\n", + "[0.020005792379379272, 0.02982022985816002, 0.9874762892723083, 0.9870303869247437, 0.9868748188018799, 0.9846282005310059, 0.9867821335792542, 0.9859787225723267, 0.9878085851669312, 0.9861332774162292]\n", + "[0.07708690315485, 0.8049917817115784, 0.9860748052597046, 0.9849476218223572, 0.9852988123893738, 0.9862266182899475, 0.984907329082489, 0.9871466159820557, 0.9870058298110962, 0.9847174286842346]\n", + "[0.01410185918211937, 0.06303056329488754, 0.012379501946270466, 0.5755159258842468, 0.9878360033035278, 0.985573947429657, 0.9873868823051453, 0.9855835437774658, 0.9854490756988525, 0.9874995946884155]\n", + "[0.015404781326651573, 0.05547194555401802, 0.9833568334579468, 0.9852582216262817, 0.9872482419013977, 0.9862983226776123, 0.9877318739891052, 0.9861084818840027, 0.9860341548919678, 0.987307071685791]\n", + "[0.0013736264081671834, 0.0017605633474886417, 0.24372562766075134, 0.7386399507522583, 0.123511902987957, 0.3714946508407593, 0.8626170754432678, 0.9878899455070496, 0.9846363663673401, 0.9872024059295654]\n", + "[0.010908231139183044, 0.12339743226766586, 0.3699163794517517, 0.49152031540870667, 0.5744124054908752, 0.9841797351837158, 0.9830965995788574, 0.9853249788284302, 0.9866093397140503, 0.9849339127540588]\n", + "[0.0015822785208001733, 0.005330630578100681, 0.2447088360786438, 0.36409279704093933, 0.971410870552063, 0.9755405783653259, 0.9731467962265015, 0.9750576019287109, 0.975233793258667, 0.9740148186683655]\n", + "[0.008333333767950535, 0.0, 0.36890846490859985, 0.9864002466201782, 0.9859678745269775, 0.9864475131034851, 0.9878214597702026, 0.9831315875053406, 0.9854018688201904, 0.9856312274932861]\n", + "[0.0015432098880410194, 0.1223958358168602, 0.2481483519077301, 0.0, 0.27902740240097046, 0.0, 0.09301150590181351, 0.23771756887435913, 0.33754006028175354, 0.36559197306632996]\n", + "[0.0, 0.026941020041704178, 0.0013440860202535987, 0.0, 0.0, 0.0013020833721384406, 0.0, 0.0, 0.0016025641234591603, 0.018198037520051003]\n", + "[0.0026881720405071974, 0.0, 0.0015822785208001733, 0.0, 0.0, 0.0, 0.12280701845884323, 0.12333333492279053, 0.12544284760951996, 0.24793784320354462]\n", + "[0.0, 0.0, 0.0, 0.09268789738416672, 0.16198354959487915, 0.14452441036701202, 0.354828417301178, 0.5878533124923706, 0.6135146617889404, 0.49307847023010254]\n", + "[0.05649717524647713, 0.04374999925494194, 0.0, 0.009943181648850441, 0.029703281819820404, 0.0052083334885537624, 0.0, 0.10606060922145844, 0.0, 0.0]\n", + "[0.06818182021379471, 0.0, 0.0036231884732842445, 0.0, 0.01959703303873539, 0.0078125, 0.0, 0.0013888889225199819, 0.0078125, 0.01676829345524311]\n", + "[0.0, 0.002358490601181984, 0.00574066024273634, 0.0, 0.036170318722724915, 0.007488628849387169, 0.0045731705613434315, 0.004348155111074448, 0.00748062040656805, 0.014639241620898247]\n", + "[0.0, 0.006849315017461777, 0.0, 0.0, 0.0, 0.20561105012893677, 0.30274131894111633, 0.24172738194465637, 0.006939421407878399, 0.34015581011772156]\n", + "[0.02688850834965706, 0.004216270055621862, 0.0, 0.006370192393660545, 0.20843595266342163, 0.25788891315460205, 0.24711692333221436, 0.3354482054710388, 0.4904027283191681, 0.7898315787315369]\n", + "[0.0, 0.0, 0.005077329929918051, 0.10648148506879807, 0.3262534737586975, 0.5738165974617004, 0.8624109625816345, 0.9826398491859436, 0.8627711534500122, 0.984968364238739]\n", + "[0.00496446480974555, 0.0015625000232830644, 0.013600412756204605, 0.4889637529850006, 0.37040963768959045, 0.736833393573761, 0.8185268044471741, 0.9846682548522949, 0.9871423840522766, 0.986822247505188]\n", + "[0.0033716955222189426, 0.10139903426170349, 0.22469761967658997, 0.14852532744407654, 0.23242101073265076, 0.2866201400756836, 0.26855969429016113, 0.32915690541267395, 0.3459884226322174, 0.37961339950561523]\n", + "[0.014719203114509583, 0.0021929824724793434, 0.16983836889266968, 0.10235745459794998, 0.28658008575439453, 0.3555121123790741, 0.15586577355861664, 0.32816821336746216, 0.25201189517974854, 0.15902985632419586]\n", + "[0.038231261074543, 0.03593749925494194, 0.11886458843946457, 0.23914834856987, 0.27705997228622437, 0.3076108694076538, 0.25783371925354004, 0.3114160895347595, 0.27237027883529663, 0.2768411636352539]\n", + "[0.011920959688723087, 0.05064960941672325, 0.10077128559350967, 0.19312891364097595, 0.1744949370622635, 0.2909924387931824, 0.2749044895172119, 0.27752262353897095, 0.48372137546539307, 0.13577944040298462]\n", + "[0.004827301017940044, 0.07020337879657745, 0.18323858082294464, 0.11761953681707382, 0.2859959602355957, 0.25164276361465454, 0.37261462211608887, 0.3955759108066559, 0.34438952803611755, 0.42277854681015015]\n", + "[0.0, 0.0027777778450399637, 0.0, 0.0016666667070239782, 0.0013297871919348836, 0.007462686393409967, 0.0, 0.0, 0.04629756510257721, 0.005095381289720535]\n", + "[0.0018939394503831863, 0.0, 0.0, 0.3743499517440796, 0.24772727489471436, 0.0022321429569274187, 0.2464594841003418, 0.0, 0.24654355645179749, 0.3705671429634094]\n", + "[0.0, 0.016509434208273888, 0.0, 0.004310344811528921, 0.009501689113676548, 0.0714285746216774, 0.0037878789007663727, 0.0, 0.001623376621864736, 0.02604166604578495]\n", + "[0.0013888889225199819, 0.12331309169530869, 0.06768249720335007, 0.0016447368543595076, 0.0, 0.22807970643043518, 0.12397059053182602, 0.14328548312187195, 0.4079284369945526, 0.49335014820098877]\n", + "[0.0, 0.0, 0.019886363297700882, 0.0, 0.010080644860863686, 0.15291553735733032, 0.0, 0.12573932111263275, 0.0, 0.3580041825771332]\n", + "[0.0, 0.3361598551273346, 0.9849907159805298, 0.9837591052055359, 0.9869114756584167, 0.984915554523468, 0.9856274724006653, 0.9871832132339478, 0.9852880835533142, 0.9859734773635864]\n", + "[0.014768158085644245, 0.9857458472251892, 0.9865612983703613, 0.9823353886604309, 0.984523594379425, 0.9873684644699097, 0.9851140379905701, 0.9847368001937866, 0.9856749773025513, 0.9848615527153015]\n", + "[0.011254197917878628, 0.6124919056892395, 0.985727071762085, 0.9844649434089661, 0.9871129393577576, 0.9879831075668335, 0.9852865934371948, 0.986655056476593, 0.9849381446838379, 0.9851772785186768]\n", + "[0.011723373085260391, 0.05698229372501373, 0.9856759309768677, 0.9848016500473022, 0.983762800693512, 0.9862010478973389, 0.9875844120979309, 0.9857978224754333, 0.9866526126861572, 0.9867449402809143]\n", + "[0.12855790555477142, 0.2598334848880768, 0.9871134161949158, 0.9854599237442017, 0.9856026768684387, 0.9865246415138245, 0.9855383038520813, 0.9866757392883301, 0.9847739934921265, 0.9857177138328552]\n", + "[0.0, 0.05892857164144516, 0.0, 0.3777046203613281, 0.624039351940155, 0.7348597049713135, 0.8537905812263489, 0.770494818687439, 0.9835342764854431, 0.9815034866333008]\n", + "[0.0, 0.13671603798866272, 0.39860695600509644, 0.439757764339447, 0.39079469442367554, 0.452355295419693, 0.5225459337234497, 0.45874616503715515, 0.46305426955223083, 0.4550228416919708]\n", + "[0.0, 0.0, 0.7331138253211975, 0.4355670213699341, 0.9844223260879517, 0.9897404313087463, 0.9866161942481995, 0.9858543276786804, 0.9840738773345947, 0.9866099953651428]\n", + "[0.0, 0.20055362582206726, 0.4249623715877533, 0.4786720871925354, 0.7699368000030518, 0.9732877612113953, 0.8775507211685181, 0.9859122633934021, 0.9887728095054626, 0.9853229522705078]\n", + "[0.06033950671553612, 0.2237188220024109, 0.3719008266925812, 0.6092373728752136, 0.5178465247154236, 0.6858223080635071, 0.6821704506874084, 0.904456615447998, 0.9809650182723999, 0.9752926826477051]\n", + "[0.09380953758955002, 0.15879060328006744, 0.9862962961196899, 0.9878233075141907, 0.9861907362937927, 0.9853025078773499, 0.9854430556297302, 0.9877703189849854, 0.9841119050979614, 0.9854967594146729]\n", + "[0.0, 0.01171875, 0.16013401746749878, 0.623176097869873, 0.9778410792350769, 0.9730164408683777, 0.9798163175582886, 0.983927845954895, 0.9834867715835571, 0.9838562607765198]\n", + "[0.16579188406467438, 0.13740964233875275, 0.5115936398506165, 0.7665532231330872, 0.9858664274215698, 0.9857873916625977, 0.9870966672897339, 0.9861412048339844, 0.985432505607605, 0.9879225492477417]\n", + "[0.0728686973452568, 0.28041356801986694, 0.940889835357666, 0.9848939776420593, 0.987548291683197, 0.9866437911987305, 0.9867614507675171, 0.9846787452697754, 0.986930787563324, 0.9893073439598083]\n", + "[0.14326126873493195, 0.14821183681488037, 0.11703896522521973, 0.5530058145523071, 0.9847431182861328, 0.9876421093940735, 0.9852448105812073, 0.9878459572792053, 0.9853633046150208, 0.9860589504241943]\n", + "[0.4847215414047241, 0.6514401435852051, 0.9858443140983582, 0.9875690937042236, 0.9863218069076538, 0.9853572249412537, 0.9881324768066406, 0.985124945640564, 0.986035168170929, 0.9859744906425476]\n", + "[0.5262608528137207, 0.4853436052799225, 0.48355597257614136, 0.5215088129043579, 0.4679250717163086, 0.546218991279602, 0.49717429280281067, 0.5068612098693848, 0.5554611086845398, 0.48982465267181396]\n", + "[0.42227011919021606, 0.988193154335022, 0.9870888590812683, 0.9864351153373718, 0.986170768737793, 0.9890939593315125, 0.9853003621101379, 0.9849607944488525, 0.9874529242515564, 0.9850578308105469]\n", + "[0.44312411546707153, 0.9866742491722107, 0.9553177356719971, 0.9865952134132385, 0.9863835573196411, 0.9887212514877319, 0.9848319292068481, 0.9853662848472595, 0.9845618605613708, 0.9841546416282654]\n", + "[0.3173278570175171, 0.786024808883667, 0.9854939579963684, 0.9863436818122864, 0.9872422814369202, 0.9865641593933105, 0.983884334564209, 0.9870083332061768, 0.9857162237167358, 0.985808789730072]\n", + "[0.00832048524171114, 0.06310202926397324, 0.15006761252880096, 0.1158871278166771, 0.01507328636944294, 0.014609252102673054, 0.013565057888627052, 0.015284421853721142, 0.9886752367019653, 0.985498309135437]\n", + "[0.13522489368915558, 0.014373798854649067, 0.01478841807693243, 0.01319325901567936, 0.014220462180674076, 0.015217196196317673, 0.015096878632903099, 0.01465195044875145, 0.05722469463944435, 0.014850896783173084]\n", + "[0.06256060302257538, 0.013864465057849884, 0.015027152374386787, 0.013500279746949673, 0.013529996387660503, 0.013018021360039711, 0.110207699239254, 0.0126983392983675, 0.014706915244460106, 0.014589190483093262]\n", + "[0.13175669312477112, 0.013299698941409588, 0.014160837978124619, 0.01263948529958725, 0.030833443626761436, 0.01270216703414917, 0.015140881761908531, 0.013172154314815998, 0.9874845147132874, 0.9871146082878113]\n", + "[0.0, 0.10681062936782837, 0.01569107174873352, 0.015576845034956932, 0.01394396461546421, 0.014667412266135216, 0.014810432679951191, 0.985313355922699, 0.9856001138687134, 0.983921229839325]\n", + "[0.0, 0.0, 0.0, 0.11184210330247879, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\n", + "[0.0, 0.0, 0.0, 0.07401315867900848, 0.0, 0.08090842515230179, 0.0, 0.0013586956774815917, 0.0, 0.00147058826405555]\n", + "[0.030241934582591057, 0.0, 0.0, 0.017241379246115685, 0.01785714365541935, 0.0, 0.0, 0.0, 0.0, 0.0]\n", + "[0.0, 0.0, 0.0, 0.08203125, 0.0, 0.0, 0.0, 0.0013888889225199819, 0.04828460142016411, 0.0]\n", + "[0.0452127642929554, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.046875, 0.0]\n", + "[0.0, 0.03789806365966797, 0.0, 0.010670731775462627, 0.05582099035382271, 0.0014534883666783571, 0.05687779188156128, 0.003821839112788439, 0.009841954335570335, 0.012511895038187504]\n", + "[0.0, 0.0, 0.0016447368543595076, 0.0015625000232830644, 0.0029761905316263437, 0.028350815176963806, 0.007057597860693932, 0.004033290781080723, 0.0049019609577953815, 0.0]\n", + "[0.0, 0.0029411765281111, 0.06209077686071396, 0.0024999999441206455, 0.006701229140162468, 0.7295887470245361, 0.9725430011749268, 0.954204261302948, 0.9020503759384155, 0.9471144676208496]\n", + "[0.011488094925880432, 0.0, 0.0, 0.04254862666130066, 0.04380150884389877, 0.0212253388017416, 0.018556559458374977, 0.018276922404766083, 0.01324074063450098, 0.0020491802133619785]\n", + "[0.0, 0.015625, 0.0, 0.0013020833721384406, 0.0, 0.012048192322254181, 0.0, 0.012047728523612022, 0.0021186440717428923, 0.01345011219382286]\n", + "[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\n", + "[0.0, 0.0, 0.0, 0.1265103667974472, 0.016393441706895828, 0.0, 0.06557376682758331, 0.0, 0.0014204545877873898, 0.0]\n", + "[0.125, 0.0, 0.0, 0.0, 0.0, 0.024725275114178658, 0.0, 0.0, 0.0, 0.0]\n", + "[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\n", + "[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\n", + "[0.0, 0.0, 0.4354878067970276, 0.0, 0.12496218830347061, 0.36959344148635864, 0.22267165780067444, 0.7035235166549683, 0.624171793460846, 0.6183722019195557]\n", + "[0.1171875, 0.21233248710632324, 0.0, 0.0013020833721384406, 0.0, 0.2454409897327423, 0.49475276470184326, 0.6155356764793396, 0.8583871126174927, 0.7987553477287292]\n", + "[0.12331558018922806, 0.03918400779366493, 0.05818965658545494, 0.3691253364086151, 0.6158638000488281, 0.6209887862205505, 0.6184380650520325, 0.9879711270332336, 0.9849624633789062, 0.9872632026672363]\n", + "[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.125, 0.0]\n", + "[0.15264058113098145, 0.0, 0.0, 0.12365591526031494, 0.0018939394503831863, 0.24386250972747803, 0.14324644207954407, 0.3558356463909149, 0.4150296747684479, 0.6222711205482483]\n", + "[0.0, 0.048076923936605453, 0.0, 0.01809210516512394, 0.0026884828694164753, 0.049743376672267914, 0.0013020833721384406, 0.0, 0.0026044491678476334, 0.02083333395421505]\n", + "[0.0014367816038429737, 0.04236778989434242, 0.010057471692562103, 0.0, 0.1129641979932785, 0.030304277315735817, 0.0, 0.0, 0.0, 0.029829544946551323]\n", + "[0.0019841270986944437, 0.0, 0.009511866606771946, 0.06932885199785233, 0.0, 0.07138949632644653, 0.0, 0.0014534883666783571, 0.017287233844399452, 0.0022321429569274187]\n", + "[0.013130765408277512, 0.006465517450124025, 0.006605113856494427, 0.016678862273693085, 0.08046860247850418, 0.0644269809126854, 0.043902505189180374, 0.016781968995928764, 0.03659290820360184, 0.056448377668857574]\n", + "[0.0017857142956927419, 0.0, 0.003844086080789566, 0.0013157895300537348, 0.0, 0.0044429912231862545, 0.0, 0.0, 0.0014880952658131719, 0.13472120463848114]\n", + "[0.009219824336469173, 0.003846153849735856, 0.8761691451072693, 0.9841268062591553, 0.986129879951477, 0.9866873621940613, 0.9857959151268005, 0.9863741993904114, 0.9841137528419495, 0.9882586598396301]\n", + "[0.017494335770606995, 0.08183175325393677, 0.0535714291036129, 0.951867401599884, 0.9859729409217834, 0.9854965209960938, 0.9864404201507568, 0.9873283505439758, 0.9848035573959351, 0.9873802065849304]\n", + "[0.012034705840051174, 0.24661138653755188, 0.6611295342445374, 0.9860899448394775, 0.9857954382896423, 0.9858352541923523, 0.985133171081543, 0.9836118817329407, 0.9850722551345825, 0.9865601658821106]\n", + "[0.011545797809958458, 0.6428908109664917, 0.9867641925811768, 0.9852275252342224, 0.9863148331642151, 0.9872736930847168, 0.9842520952224731, 0.986901044845581, 0.9849505424499512, 0.9848519563674927]\n", + "[0.0, 0.0, 0.9846481680870056, 0.9865013957023621, 0.987693727016449, 0.985521674156189, 0.9865835309028625, 0.9858750700950623, 0.986259937286377, 0.9864569902420044]\n", + "[0.0, 0.10718445479869843, 0.10082720220088959, 0.0029411765281111, 0.03075450472533703, 0.02734375, 0.01168336533010006, 0.03011224791407585, 0.0014044943964108825, 0.0]\n", + "[0.0012886597542092204, 0.02360842376947403, 0.0, 0.00778565276414156, 0.13537397980690002, 0.0, 0.010542168281972408, 0.05574324354529381, 0.04921941086649895, 0.0034497524611651897]\n", + "[0.0, 0.0049019609577953815, 0.031152524054050446, 0.1080436035990715, 0.005761775188148022, 0.1371556967496872, 0.09234258532524109, 0.2517203986644745, 0.6129792928695679, 0.4091365337371826]\n", + "[0.12345679104328156, 0.011759909801185131, 0.016826923936605453, 0.0, 0.0033333334140479565, 0.056415826082229614, 0.008012820966541767, 0.01805555634200573, 0.05711864307522774, 0.0]\n", + "[0.0, 0.01424050610512495, 0.026119403541088104, 0.12845946848392487, 0.06044013053178787, 0.02564935013651848, 0.0, 0.023984374478459358, 0.0, 0.00810960028320551]\n", + "[0.04789184033870697, 0.00147058826405555, 0.016915254294872284, 0.02365121617913246, 0.031806617975234985, 0.015077921561896801, 0.07914374023675919, 0.13366465270519257, 0.02783563919365406, 0.014822939410805702]\n", + "[0.0, 0.0, 0.05457746610045433, 0.0028709382750093937, 0.0, 0.12951511144638062, 0.002717712428420782, 0.013150831684470177, 0.00288729602470994, 0.0]\n", + "[0.08943066000938416, 0.016791045665740967, 0.0019841270986944437, 0.02440476231276989, 0.007246376946568489, 0.007894736714661121, 0.0, 0.0, 0.003947368357330561, 0.002659574383869767]\n", + "[0.07524211704730988, 0.052192650735378265, 0.02364177256822586, 0.015887552872300148, 0.1725601851940155, 0.015412642620503902, 0.0730108916759491, 0.022429557517170906, 0.014166466891765594, 0.014564387500286102]\n", + "[0.006105870008468628, 0.017018213868141174, 0.9869938492774963, 0.9863764047622681, 0.9885721206665039, 0.9848671555519104, 0.9891579151153564, 0.9876126050949097, 0.9852911829948425, 0.9837905168533325]\n", + "[0.008053342811763287, 0.0024038462433964014, 0.37619099020957947, 0.9847071766853333, 0.9872496724128723, 0.9859867691993713, 0.9872063994407654, 0.9852122664451599, 0.9868660569190979, 0.9864214658737183]\n", + "[0.0, 0.07158079743385315, 0.017241379246115685, 0.027517085894942284, 0.009145021438598633, 0.003592390101402998, 0.01225490216165781, 0.007894736714661121, 0.018169330433011055, 0.004237891640514135]\n", + "[0.0017857142956927419, 0.011236424557864666, 0.004108297638595104, 0.16791072487831116, 0.0, 0.2745109796524048, 0.7634576559066772, 0.6238877177238464, 0.7277878522872925, 0.8745290637016296]\n", + "[0.024066880345344543, 0.12316176295280457, 0.12571465969085693, 0.3695259988307953, 0.38934844732284546, 0.36939120292663574, 0.36800509691238403, 0.00331196584738791, 0.7359703779220581, 0.7391866445541382]\n", + "[0.05025792121887207, 0.0015822785208001733, 0.49142980575561523, 0.9858660697937012, 0.9851318597793579, 0.9865024089813232, 0.9892880916595459, 0.9854004383087158, 0.9844581484794617, 0.9870021343231201]\n", + "[0.09740670025348663, 0.010638297535479069, 0.10292022675275803, 0.003246753243729472, 0.0, 0.0, 0.0, 0.0013440860202535987, 0.00147058826405555, 0.030376551672816277]\n", + "[0.0, 0.012185354717075825, 0.0029411765281111, 0.003289473708719015, 0.0, 0.029440898448228836, 0.0, 0.0, 0.05758427083492279, 0.0]\n", + "[0.0, 0.004166666883975267, 0.04545454680919647, 0.0, 0.0, 0.005769230891019106, 0.0, 0.08192478865385056, 0.020618556067347527, 0.027960525825619698]\n", + "[0.0017857142956927419, 0.0, 0.0, 0.0, 0.006355931982398033, 0.0, 0.0, 0.0, 0.0, 0.0]\n", + "[0.0, 0.0, 0.01508620660752058, 0.0, 0.1026785746216774, 0.0, 0.0, 0.019152047112584114, 0.02563965879380703, 0.0017605633474886417]\n", + "[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\n", + "[0.0, 0.0, 0.0, 0.0, 0.035087719559669495, 0.0, 0.0, 0.0, 0.0, 0.003953488543629646]\n", + "[0.0, 0.0, 0.0015432098880410194, 0.023255813866853714, 0.03180386871099472, 0.04105454310774803, 0.0, 0.030299972742795944, 0.0, 0.0]\n", + "[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.125, 0.0, 0.0]\n", + "[0.0, 0.023706896230578423, 0.0, 0.0, 0.0, 0.028532609343528748, 0.0, 0.0, 0.0, 0.0]\n", + "[0.021783089265227318, 0.0029411765281111, 0.0, 0.04230113700032234, 0.0, 0.011066274717450142, 0.0, 0.0, 0.09470760822296143, 0.06847084313631058]\n", + "[0.014024389907717705, 0.0, 0.0, 0.0027173913549631834, 0.08799996227025986, 0.0, 0.0, 0.06407387554645538, 0.12782829999923706, 0.0]\n", + "[0.003865979379042983, 0.002577319508418441, 0.0016025641234591603, 0.0014204545877873898, 0.01764943078160286, 0.017132464796304703, 0.021559027954936028, 0.015299998223781586, 0.01550881564617157, 0.04887827858328819]\n", + "[0.0, 0.003947368357330561, 0.021169355139136314, 0.0022321429569274187, 0.003919956274330616, 0.0, 0.016240529716014862, 0.00390625, 0.0, 0.05416666716337204]\n", + "[0.0013157895300537348, 0.024011949077248573, 0.042585406452417374, 0.008798929862678051, 0.0, 0.0, 0.0017361111240461469, 0.003968254197388887, 0.002577319508418441, 0.0068542566150426865]\n", + "[0.011815587989985943, 0.0, 0.0, 0.0018115942366421223, 0.07463930547237396, 0.015757853165268898, 0.00549801392480731, 0.005855855997651815, 0.009369106963276863, 0.017530005425214767]\n", + "[0.01198630128055811, 0.03033020906150341, 0.07185238599777222, 0.006609577685594559, 0.00887784082442522, 0.01225005742162466, 0.025436624884605408, 0.02227247878909111, 0.0706704780459404, 0.04373527690768242]\n", + "[0.04493952915072441, 0.0037202383391559124, 0.013798000290989876, 0.0032051282469183207, 0.013127148151397705, 0.05094485729932785, 0.014949509873986244, 0.019322345033288002, 0.006827446166425943, 0.0]\n", + "[0.005597014911472797, 0.0, 0.02801724150776863, 0.07798899710178375, 0.008823529817163944, 0.07876157760620117, 0.17094537615776062, 0.1434934288263321, 0.11878334730863571, 0.0711633488535881]\n", + "[0.0, 0.002577319508418441, 0.0022321429569274187, 0.039484888315200806, 0.032895490527153015, 0.03239167854189873, 0.03809086233377457, 0.00822133757174015, 0.04210991412401199, 0.008848940953612328]\n", + "[0.010795455425977707, 0.0, 0.028080949559807777, 0.0245229322463274, 0.01212908886373043, 0.03065004199743271, 0.014795755967497826, 0.5193727612495422, 0.4609698951244354, 0.5425168871879578]\n", + "[0.007563886232674122, 0.20208582282066345, 0.4941922128200531, 0.9864346981048584, 0.9845967292785645, 0.9856429100036621, 0.9852061867713928, 0.9847428798675537, 0.9842973947525024, 0.9863812923431396]\n", + "[0.0, 0.13104234635829926, 0.392396479845047, 0.9844487905502319, 0.9842340350151062, 0.9845496416091919, 0.9855182766914368, 0.9850683212280273, 0.9851669073104858, 0.9861564636230469]\n", + "[0.008444324135780334, 0.12455908209085464, 0.09457671642303467, 0.5740633606910706, 0.9818336963653564, 0.9661718010902405, 0.9860066771507263, 0.9871302247047424, 0.9880651235580444, 0.9860337972640991]\n", + "[0.008928408846259117, 0.0058823530562222, 0.4909631013870239, 0.6150288581848145, 0.984516978263855, 0.9835497140884399, 0.9878145456314087, 0.9846280813217163, 0.9856452345848083, 0.9853423833847046]\n", + "[0.0, 0.0, 0.0, 0.0055555556900799274, 0.807187557220459, 0.5686562061309814, 0.7784489989280701, 0.7454930543899536, 0.6965779066085815, 0.9635612368583679]\n", + "[0.02500000037252903, 0.13167431950569153, 0.029920168220996857, 0.3541809022426605, 0.7395338416099548, 0.8082019686698914, 0.7266327738761902, 0.6602815389633179, 0.8907732963562012, 0.9864125847816467]\n", + "[0.0017361111240461469, 0.02253986895084381, 0.2580639123916626, 0.8044652342796326, 0.9000829458236694, 0.6898488402366638, 0.9058989882469177, 0.9881867170333862, 0.9845075607299805, 0.9866348505020142]\n", + "[0.0982142835855484, 0.06911898404359818, 0.0018939394503831863, 0.16144180297851562, 0.6084651350975037, 0.6080327033996582, 0.7155272960662842, 0.6133944392204285, 0.9829792976379395, 0.9669327735900879]\n", + "[0.014709552749991417, 0.0015243901871144772, 0.12616431713104248, 0.0960526317358017, 0.2606276273727417, 0.025689896196126938, 0.2689182162284851, 0.3827724754810333, 0.2738294303417206, 0.3559679388999939]\n", + "[0.1816842257976532, 0.8624107837677002, 0.988542914390564, 0.9843522310256958, 0.9862734079360962, 0.985626220703125, 0.9864542484283447, 0.9868114590644836, 0.9841594099998474, 0.9874797463417053]\n", + "[0.12157534062862396, 0.9836265444755554, 0.9856410026550293, 0.9863110780715942, 0.986860990524292, 0.9862357378005981, 0.9859731793403625, 0.9864346981048584, 0.9867345690727234, 0.9857397079467773]\n", + "[0.08428030461072922, 0.5774198770523071, 0.9858426451683044, 0.9832573533058167, 0.9865278601646423, 0.9848375916481018, 0.9848192930221558, 0.9853919744491577, 0.9864042401313782, 0.9854008555412292]\n", + "[0.21149075031280518, 0.9719780683517456, 0.9861737489700317, 0.9853874444961548, 0.9848939180374146, 0.9870914816856384, 0.9859405755996704, 0.9841117858886719, 0.9873288869857788, 0.9856505990028381]\n", + "[0.24933676421642303, 0.9406012892723083, 0.9873293042182922, 0.9864165186882019, 0.9869334697723389, 0.9865924715995789, 0.9872738718986511, 0.9873428344726562, 0.9860742688179016, 0.9857296347618103]\n", + "[0.0, 0.0, 0.015650160610675812, 0.0014204545877873898, 0.0, 0.0012886597542092204, 0.010416666977107525, 0.004200696013867855, 0.0049019609577953815, 0.051809921860694885]\n", + "[0.0017361111240461469, 0.0036231884732842445, 0.01056338008493185, 0.002590743126347661, 0.061488259583711624, 0.0036262348294258118, 0.004760881885886192, 0.009949514642357826, 0.006329114083200693, 0.0]\n", + "[0.012619349174201488, 0.0637340322136879, 0.010135134682059288, 0.02421959862112999, 0.0, 0.008653846569359303, 0.0031403186731040478, 0.04171572998166084, 0.012416532263159752, 0.004126409068703651]\n", + "[0.0035211266949772835, 0.03941229730844498, 0.0029761905316263437, 0.002314814832061529, 0.05322900786995888, 0.02802044339478016, 0.0027777778450399637, 0.009454643353819847, 0.0014367816038429737, 0.04573274031281471]\n", + "[0.0021929824724793434, 0.0, 0.03010033443570137, 0.0019841270986944437, 0.0, 0.024242423474788666, 0.018963266164064407, 0.08235036581754684, 0.019611142575740814, 0.014986710622906685]\n", + "[0.0, 0.7393060326576233, 0.24481825530529022, 0.4932118058204651, 0.36982059478759766, 0.4937894940376282, 0.7396558523178101, 0.4940032958984375, 0.6154583692550659, 0.7398623824119568]\n", + "[0.09674320369958878, 0.0, 0.4954282343387604, 0.36442723870277405, 0.3689316213130951, 0.6160496473312378, 0.49356764554977417, 0.6173617839813232, 0.49385663866996765, 0.6163339614868164]\n", + "[0.02298619970679283, 0.0018939394503831863, 0.5064983367919922, 0.851052463054657, 0.9720171093940735, 0.9854270219802856, 0.9840412139892578, 0.9849295616149902, 0.9859216213226318, 0.9850192070007324]\n", + "[0.0, 0.012672370299696922, 0.271382212638855, 0.4850398898124695, 0.6100450754165649, 0.8511541485786438, 0.9793238043785095, 0.9871455430984497, 0.9863572120666504, 0.9872621893882751]\n", + "[0.004687500186264515, 0.0623672679066658, 0.34826114773750305, 0.975425124168396, 0.9853388071060181, 0.9861491322517395, 0.9853987693786621, 0.9852745532989502, 0.9865105152130127, 0.9854521751403809]\n", + "[0.0, 0.23060083389282227, 0.30058950185775757, 0.28780415654182434, 0.2609388828277588, 0.26332494616508484, 0.24441669881343842, 0.28834637999534607, 0.27417489886283875, 0.33722639083862305]\n", + "[0.007499999832361937, 0.2572248578071594, 0.6917272806167603, 0.7370665669441223, 0.9671854972839355, 0.9803118705749512, 0.9864932298660278, 0.985450267791748, 0.9844902157783508, 0.985694408416748]\n", + "[0.07619024068117142, 0.8634242415428162, 0.9756997227668762, 0.985453188419342, 0.988286018371582, 0.986503541469574, 0.9862903356552124, 0.9864816665649414, 0.9864159226417542, 0.9868448376655579]\n", + "[0.016393441706895828, 0.12319587916135788, 0.2471735179424286, 0.2728261351585388, 0.7425347566604614, 0.44694551825523376, 0.7388291954994202, 0.8645411133766174, 0.9851792454719543, 0.9857721924781799]\n", + "[0.02407211996614933, 0.10895735770463943, 0.09556613117456436, 0.9856218695640564, 0.9859011173248291, 0.9866758584976196, 0.986325204372406, 0.9893423318862915, 0.9859268069267273, 0.9851421117782593]\n", + "[0.0, 0.1205357164144516, 0.0625, 0.004391989670693874, 0.0, 0.0022321429569274187, 0.0, 0.06805555522441864, 0.2222558706998825, 0.0]\n", + "[0.05191921815276146, 0.0, 0.0, 0.0, 0.0, 0.12228260934352875, 0.1252128630876541, 0.0, 0.3490845859050751, 0.005319148767739534]\n", + "[0.0, 0.0, 0.0, 0.009328357875347137, 0.0, 0.001623376621864736, 0.0035714285913854837, 0.0, 0.048076923936605453, 0.009259259328246117]\n", + "[0.0, 0.0, 0.0, 0.009020618163049221, 0.0, 0.008333333767950535, 0.0, 0.0, 0.013888888992369175, 0.0]\n", + "[0.048507463186979294, 0.0, 0.0, 0.0, 0.0, 0.0, 0.04561541974544525, 0.002577319508418441, 0.06640625, 0.0]\n", + "[0.005514706019312143, 0.010638297535479069, 0.0, 0.07058823853731155, 0.021929824724793434, 0.16712632775306702, 0.2647576928138733, 0.44780433177948, 0.26691359281539917, 0.1513894498348236]\n", + "[0.0, 0.036472149193286896, 0.0, 0.014705882407724857, 0.10186688601970673, 0.12808595597743988, 0.2974715232849121, 0.24639134109020233, 0.0, 0.2957148551940918]\n", + "[0.013888888992369175, 0.0, 0.004120879340916872, 0.013835195451974869, 0.005811403505504131, 0.0, 0.0, 0.009518678300082684, 0.0038659791462123394, 0.0]\n", + "[0.0, 0.018656715750694275, 0.12767437100410461, 0.12352941185235977, 0.16829466819763184, 0.35636043548583984, 0.5632724165916443, 0.6164112091064453, 0.45829275250434875, 0.5025465488433838]\n", + "[0.0, 0.015625, 0.0018656715983524919, 0.06697613000869751, 0.009599557146430016, 0.030700424686074257, 0.0, 0.0, 0.0012886597542092204, 0.15248315036296844]\n", + "[0.0, 0.0, 0.0, 0.0, 0.0, 0.12318840622901917, 0.0, 0.006262089125812054, 0.0, 0.0]\n", + "[0.0, 0.0, 0.0, 0.125, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0015243901871144772]\n", + "[0.0, 0.0, 0.0, 0.0, 0.004870129749178886, 0.0, 0.0034246575087308884, 0.0027933833189308643, 0.0, 0.0]\n", + "[0.0, 0.0, 0.0028409091755747795, 0.0, 0.0, 0.0, 0.0, 0.12254901975393295, 0.0, 0.12371134012937546]\n", + "[0.125, 0.0, 0.0, 0.0, 0.125, 0.0, 0.0, 0.0, 0.0, 0.0]\n", + "[0.0053903693333268166, 0.0158526748418808, 0.01360867079347372, 0.003940769005566835, 0.987667977809906, 0.9856138825416565, 0.9859278202056885, 0.9855846166610718, 0.9862544536590576, 0.9853401184082031]\n", + "[0.01280079036951065, 0.06692571192979813, 0.015468807891011238, 0.01932457834482193, 0.013102862052619457, 0.9858671426773071, 0.9863399267196655, 0.986853301525116, 0.9855417609214783, 0.9869223237037659]\n", + "[0.008030333556234837, 0.0, 0.015141217038035393, 0.014931106008589268, 0.013949926942586899, 0.014628664590418339, 0.01562996208667755, 0.013558587990701199, 0.013957211747765541, 0.050967615097761154]\n", + "[0.0, 0.7378039956092834, 0.869845986366272, 0.9856486916542053, 0.9868615865707397, 0.9849185943603516, 0.9871415495872498, 0.9858550429344177, 0.9856381416320801, 0.9860892295837402]\n", + "[0.008046037517488003, 0.011422161012887955, 0.21373800933361053, 0.986122727394104, 0.9868612885475159, 0.9850434064865112, 0.9856688380241394, 0.9850432276725769, 0.987087070941925, 0.9869924783706665]\n", + "[0.004099462181329727, 0.47623777389526367, 0.8640455007553101, 0.986361026763916, 0.9869934320449829, 0.9828608632087708, 0.9865188598632812, 0.9858403205871582, 0.9861331582069397, 0.9869093894958496]\n", + "[0.0, 0.4955238699913025, 0.8624215126037598, 0.9854227900505066, 0.9865087270736694, 0.985228955745697, 0.9854110479354858, 0.9912283420562744, 0.9862467050552368, 0.9868481159210205]\n", + "[0.0744047611951828, 0.20151099562644958, 0.2508578300476074, 0.5298788547515869, 0.986215353012085, 0.9859352707862854, 0.9855910539627075, 0.9847356081008911, 0.9855045676231384, 0.9851242303848267]\n", + "[0.10961538553237915, 0.49568814039230347, 0.49437642097473145, 0.785367488861084, 0.9862770438194275, 0.9860227108001709, 0.9858983755111694, 0.9889035224914551, 0.9877556562423706, 0.985747218132019]\n", + "[0.0, 0.48315224051475525, 0.592218279838562, 0.9817864894866943, 0.9897228479385376, 0.9875315427780151, 0.9867125153541565, 0.9863101840019226, 0.985201358795166, 0.9845952987670898]\n", + "[0.0, 0.0, 0.10204541683197021, 0.0, 0.0, 0.02213541604578495, 0.1469269096851349, 0.054347824305295944, 0.0, 0.0]\n", + "[0.0, 0.0, 0.08785266429185867, 0.0, 0.0012886597542092204, 0.0, 0.011575927026569843, 0.0012886597542092204, 0.002358490601181984, 0.004032257944345474]\n", + "[0.0, 0.0357142873108387, 0.0, 0.048728812485933304, 0.0, 0.0, 0.0015822785208001733, 0.005571161396801472, 0.014150943607091904, 0.006813226733356714]\n", + "[0.009146341122686863, 0.0, 0.012904124334454536, 0.0, 0.056985292583703995, 0.024865591898560524, 0.0, 0.0, 0.10060975700616837, 0.02119012176990509]\n", + "[0.0, 0.0, 0.0012886597542092204, 0.0659722238779068, 0.09000000357627869, 0.016231268644332886, 0.0326823927462101, 0.027743685990571976, 0.0731382966041565, 0.006793478038161993]\n", + "[0.4854128360748291, 0.5002992153167725, 0.5375816822052002, 0.9843990206718445, 0.9872744679450989, 0.9841782450675964, 0.9860014319419861, 0.9842829704284668, 0.9875227808952332, 0.9876668453216553]\n", + "[0.18431225419044495, 0.9868860840797424, 0.9869492053985596, 0.9843789339065552, 0.9843645691871643, 0.9872263669967651, 0.9866195917129517, 0.987209141254425, 0.9865444302558899, 0.9847243428230286]\n", + "[0.5023729205131531, 0.6373277902603149, 0.9873254299163818, 0.9861320853233337, 0.9858675003051758, 0.9860378503799438, 0.9868304133415222, 0.9861491918563843, 0.9854822158813477, 0.9861258864402771]\n", + "[0.31383371353149414, 0.986362636089325, 0.9861884713172913, 0.98613440990448, 0.98530113697052, 0.9842153787612915, 0.9873538017272949, 0.9859517812728882, 0.9847425222396851, 0.9846914410591125]\n", + "[0.12586167454719543, 0.9839453101158142, 0.9882500767707825, 0.9872754812240601, 0.9862422943115234, 0.9864475131034851, 0.9875005483627319, 0.9857574105262756, 0.987661600112915, 0.9842569828033447]\n", + "[0.03515625, 0.0, 0.05850232020020485, 0.041895605623722076, 0.019736841320991516, 0.022058824077248573, 0.002358490601181984, 0.036227863281965256, 0.041874226182699203, 0.07680611312389374]\n", + "[0.0, 0.003959551453590393, 0.008570234291255474, 0.06478279083967209, 0.06296553462743759, 0.10897000879049301, 0.18673072755336761, 0.1518338918685913, 0.15099667012691498, 0.2256316840648651]\n", + "[0.0625, 0.00937500037252903, 0.0020491802133619785, 0.022261906415224075, 0.03223814070224762, 0.02286585420370102, 0.09084148705005646, 0.05266031250357628, 0.09755051136016846, 0.04238162934780121]\n", + "[0.0, 0.0377604179084301, 0.02604166604578495, 0.072265625, 0.10776391625404358, 0.0958869606256485, 0.08638840168714523, 0.10669656097888947, 0.19580239057540894, 0.21921350061893463]\n", + "[0.0, 0.0, 0.08395257592201233, 0.0, 0.07439019531011581, 0.0668444111943245, 0.06466081738471985, 0.055452849715948105, 0.021652622148394585, 0.02097153104841709]\n", + "[0.008771929889917374, 0.0, 0.0013157895300537348, 0.0021551724057644606, 0.02777777798473835, 0.014084506779909134, 0.013718732632696629, 0.003246753243729472, 0.01155149471014738, 0.05985584482550621]\n", + "[0.03970588371157646, 0.0, 0.012500000186264515, 0.022407028824090958, 0.0037313431967049837, 0.004389881156384945, 0.010961510241031647, 0.007865803316235542, 0.0, 0.04173430800437927]\n", + "[0.0, 0.02976190485060215, 0.003049223218113184, 0.0, 0.0038752914406359196, 0.0012886597542092204, 0.0016891892300918698, 0.0020491802133619785, 0.02911994606256485, 0.0]\n", + "[0.0, 0.0015243901871144772, 0.012048192322254181, 0.0015060240402817726, 0.006076622288674116, 0.04449967294931412, 0.0, 0.0, 0.016726255416870117, 0.0029778785537928343]\n", + "[0.0, 0.0379464291036129, 0.0069444444961845875, 0.0018115942366421223, 0.005409189499914646, 0.004807692486792803, 0.031468283385038376, 0.004076086916029453, 0.007781689986586571, 0.02006417140364647]\n", + "[0.024140842258930206, 0.032593805342912674, 0.007037346716970205, 0.015200836583971977, 0.01027788408100605, 0.029103316366672516, 0.026735227555036545, 0.02895215153694153, 0.02539813332259655, 0.012985510751605034]\n", + "[0.033867333084344864, 0.023407384753227234, 0.04780910164117813, 0.06331495195627213, 0.01762263849377632, 0.03815174847841263, 0.03558750078082085, 0.043429769575595856, 0.03553811460733414, 0.014404812827706337]\n", + "[0.01494140550494194, 0.021961646154522896, 0.016914794221520424, 0.022730274125933647, 0.0014880952658131719, 0.24435900151729584, 0.06299197673797607, 0.2613259553909302, 0.10380550473928452, 0.36814919114112854]\n", + "[0.02592880092561245, 0.015531765297055244, 0.012188808061182499, 0.6155945062637329, 0.8638708591461182, 0.8646803498268127, 0.9859310388565063, 0.986066460609436, 0.983393669128418, 0.9868146777153015]\n", + "[0.023341933265328407, 0.007532751653343439, 0.008088953793048859, 0.009652778506278992, 0.08105944097042084, 0.0064298370853066444, 0.05887116491794586, 0.02951827645301819, 0.011306521482765675, 0.17269454896450043]\n", + "[0.004067460540682077, 0.007531516253948212, 0.021736392751336098, 0.0016447368543595076, 0.035919539630413055, 0.0021551724057644606, 0.2446337193250656, 0.24474793672561646, 0.005406190641224384, 0.1286274790763855]\n", + "[0.0066234576515853405, 0.0035479324869811535, 0.01131293922662735, 0.1254470944404602, 0.46966490149497986, 0.9542548060417175, 0.9837248921394348, 0.9879832863807678, 0.9862670302391052, 0.9866085052490234]\n", + "[0.0, 0.011251915246248245, 0.2607962191104889, 0.9871118664741516, 0.9851865172386169, 0.9868802428245544, 0.9863816499710083, 0.9872486591339111, 0.9894760251045227, 0.9845710396766663]\n", + "[0.0017361111240461469, 0.02049180306494236, 0.0, 0.12259615212678909, 0.24252761900424957, 0.2461753934621811, 0.3693775534629822, 0.41389966011047363, 0.8439815044403076, 0.43317973613739014]\n", + "[0.00566253624856472, 0.0027173913549631834, 0.12801535427570343, 0.03099404275417328, 0.6426171064376831, 0.7383710145950317, 0.13116130232810974, 0.7519444227218628, 0.9671201109886169, 0.9259066581726074]\n", + "[0.0036231884732842445, 0.0, 0.0, 0.0, 0.0, 0.009920635260641575, 0.12050987780094147, 0.13997505605220795, 0.16634748876094818, 0.14425912499427795]\n", + "[0.1316637396812439, 0.9862926006317139, 0.9847860932350159, 0.9867717027664185, 0.9857593178749084, 0.9864583015441895, 0.9870297908782959, 0.9887022376060486, 0.9863443970680237, 0.985501229763031]\n", + "[0.0, 0.07604293525218964, 0.16170111298561096, 0.565303385257721, 0.9871676564216614, 0.9862795472145081, 0.9861062169075012, 0.9879150986671448, 0.9868402481079102, 0.9855852127075195]\n", + "[0.0029761905316263437, 0.0, 0.0, 0.0, 0.007246376946568489, 0.012865259312093258, 0.07396765053272247, 0.27168285846710205, 0.1408863514661789, 0.18234890699386597]\n", + "[0.02083333395421505, 0.0, 0.0016025641234591603, 0.013675406575202942, 0.025280285626649857, 0.12260620296001434, 0.09992314130067825, 0.1450880467891693, 0.16375592350959778, 0.1388404369354248]\n", + "[0.0, 0.03085855208337307, 0.0, 0.004464285913854837, 0.0, 0.0, 0.0, 0.0029761905316263437, 0.0, 0.0]\n", + "[0.0, 0.0, 0.013297872617840767, 0.0, 0.0, 0.0, 0.0, 0.03765060380101204, 0.0, 0.0]\n", + "[0.0, 0.11516854166984558, 0.05000000074505806, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\n", + "[0.0, 0.0, 0.0, 0.0, 0.0, 0.002016128972172737, 0.0, 0.0, 0.12183544039726257, 0.0]\n", + "[0.0, 0.004716981202363968, 0.0047404468059539795, 0.07774390280246735, 0.0, 0.0, 0.0, 0.0, 0.0, 0.24333855509757996]\n", + "[0.007544133346527815, 0.014534631744027138, 0.012748980894684792, 0.014486752450466156, 0.981070339679718, 0.9844290614128113, 0.9863739013671875, 0.9864477515220642, 0.9864632487297058, 0.9844657182693481]\n", + "[0.01332130003720522, 0.013389701955020428, 0.9858815670013428, 0.9852272272109985, 0.9843870401382446, 0.986178457736969, 0.9847160577774048, 0.9877339005470276, 0.9843893051147461, 0.9868962168693542]\n", + "[0.12542100250720978, 0.16841569542884827, 0.9852681159973145, 0.9850261211395264, 0.9850730299949646, 0.98594731092453, 0.9869518280029297, 0.9852191805839539, 0.9857814311981201, 0.9841486215591431]\n", + "[0.010125016793608665, 0.013036339543759823, 0.016043365001678467, 0.0630592554807663, 0.9870176911354065, 0.9859804511070251, 0.9862853288650513, 0.9857335686683655, 0.9853147268295288, 0.9868506193161011]\n", + "[0.013604437001049519, 0.13426873087882996, 0.9849945306777954, 0.9851160049438477, 0.984540581703186, 0.9864262938499451, 0.9864909052848816, 0.9846110343933105, 0.9852945804595947, 0.9858809113502502]\n", + "[0.0, 0.0014367816038429737, 0.0017361111240461469, 0.08259527385234833, 0.0, 0.0016447368543595076, 0.0, 0.0, 0.012640449218451977, 0.0]\n", + "[0.0, 0.0, 0.007083696313202381, 0.0, 0.0027173913549631834, 0.0, 0.004120879340916872, 0.0013157895300537348, 0.0, 0.0530824214220047]\n", + "[0.0, 0.0, 0.0033886213786900043, 0.0012886597542092204, 0.0, 0.013333333656191826, 0.0, 0.0, 0.03954990953207016, 0.0]\n", + "[0.0, 0.0, 0.0, 0.0014367816038429737, 0.0, 0.011886253952980042, 0.0, 0.0, 0.0029069767333567142, 0.0]\n", + "[0.0, 0.007352941203862429, 0.001623376621864736, 0.0, 0.0357142873108387, 0.06897096335887909, 0.0037313431967049837, 0.07661290466785431, 0.0032421350479125977, 0.0]\n", + "[0.0, 0.0, 0.0, 0.0, 0.03938356041908264, 0.0, 0.07399425655603409, 0.06136363744735718, 0.027439024299383163, 0.0]\n", + "[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.12345679104328156, 0.125, 0.0]\n", + "[0.0, 0.0, 0.0, 0.0, 0.1773187518119812, 0.0, 0.0, 0.0, 0.0, 0.0]\n", + "[0.0, 0.0, 0.0, 0.0, 0.03246753290295601, 0.029411764815449715, 0.0, 0.0, 0.12096773833036423, 0.0]\n", + "[0.0, 0.0013157895300537348, 0.004716981202363968, 0.0, 0.06833333522081375, 0.0013440860202535987, 0.11490704119205475, 0.042134832590818405, 0.0018382353009656072, 0.14194443821907043]\n", + "[0.0, 0.003834707196801901, 0.00147058826405555, 0.12028302252292633, 0.4604049026966095, 0.8657926321029663, 0.986079752445221, 0.9864907264709473, 0.9866479635238647, 0.985639750957489]\n", + "[0.0, 0.0013157895300537348, 0.018427230417728424, 0.0013157895300537348, 0.0091447364538908, 0.12365623563528061, 0.48859694600105286, 0.4072146713733673, 0.369899719953537, 0.7380138635635376]\n", + "[0.0, 0.1205357164144516, 0.023148147389292717, 0.4348108172416687, 0.6120909452438354, 0.8324406743049622, 0.8708188533782959, 0.9864151477813721, 0.9895514249801636, 0.9864075183868408]\n", + "[0.0, 0.02464788779616356, 0.12337662279605865, 0.3656156063079834, 0.12310606241226196, 0.7391478419303894, 0.48919475078582764, 0.8629938960075378, 0.741015613079071, 0.7380231618881226]\n", + "[0.019396550953388214, 0.0, 0.11088709533214569, 0.0012886597542092204, 0.0012886597542092204, 0.02044399455189705, 0.0029778489843010902, 0.04285714402794838, 0.0, 0.0]\n", + "[0.032692309468984604, 0.004385964944958687, 0.014889039099216461, 0.0, 0.05985915660858154, 0.12585976719856262, 0.38734328746795654, 0.394419401884079, 0.5151539444923401, 0.5793551206588745]\n", + "[0.010564145632088184, 0.0028409091755747795, 0.0, 0.0, 0.0, 0.04532967135310173, 0.00872093066573143, 0.009034042246639729, 0.01907757669687271, 0.04031549394130707]\n", + "[0.0, 0.0, 0.002747252816334367, 0.0012886597542092204, 0.2277243584394455, 0.36603888869285583, 0.41726598143577576, 0.5241129994392395, 0.6175702214241028, 0.7137040495872498]\n", + "[0.0, 0.0, 0.0258620698004961, 0.0027777778450399637, 0.0, 0.006410256493836641, 0.016685206443071365, 0.0768469050526619, 0.6874576807022095, 0.24138560891151428]\n", + "[0.07180319726467133, 0.0, 0.02286585420370102, 0.011543789878487587, 0.08685057610273361, 0.12424398958683014, 0.4456785321235657, 0.593747615814209, 0.35922378301620483, 0.537430465221405]\n", + "[0.7394952774047852, 0.9857900738716125, 0.9862698912620544, 0.9852349162101746, 0.9849107265472412, 0.9864976406097412, 0.9854305982589722, 0.9855124950408936, 0.9866925477981567, 0.9849549531936646]\n", + "[0.008883694186806679, 0.4892595410346985, 0.9713172912597656, 0.9715436697006226, 0.9866321086883545, 0.9848635196685791, 0.986152172088623, 0.9854901432991028, 0.9857739806175232, 0.9839893579483032]\n", + "[0.009230189956724644, 0.24981805682182312, 0.8465439081192017, 0.9842815399169922, 0.9862749576568604, 0.9846423864364624, 0.9852795600891113, 0.9837672710418701, 0.9859681129455566, 0.9844387173652649]\n", + "[0.08998512476682663, 0.9856327176094055, 0.9862881898880005, 0.9877266883850098, 0.9857620000839233, 0.986670970916748, 0.9862975478172302, 0.9849473834037781, 0.9864704012870789, 0.9857891798019409]\n", + "[0.27940133213996887, 0.983977198600769, 0.9868652820587158, 0.9885355234146118, 0.984497606754303, 0.985194742679596, 0.9865453243255615, 0.9852925539016724, 0.9864423871040344, 0.9852741360664368]\n", + "[0.04196665436029434, 0.9867512583732605, 0.9870502948760986, 0.9842510223388672, 0.986014723777771, 0.9858130216598511, 0.9867210984230042, 0.9854609370231628, 0.9869746565818787, 0.9857970476150513]\n", + "[0.041802991181612015, 0.1344694048166275, 0.985729455947876, 0.9835219979286194, 0.9874073266983032, 0.9871125817298889, 0.9856661558151245, 0.9857755303382874, 0.9857383370399475, 0.9866244792938232]\n", + "[0.008426966145634651, 0.9863455295562744, 0.9837397336959839, 0.9868595004081726, 0.9863588809967041, 0.9861602187156677, 0.9844245314598083, 0.9864282608032227, 0.9850327968597412, 0.9865316152572632]\n", + "[0.0920138880610466, 0.9828723669052124, 0.9857286810874939, 0.9859145283699036, 0.9859828352928162, 0.9869601130485535, 0.9861388206481934, 0.9874390959739685, 0.9841228127479553, 0.9870478510856628]\n", + "[0.12212646007537842, 0.18390026688575745, 0.9873210787773132, 0.9851709604263306, 0.9861828684806824, 0.9851144552230835, 0.9857142567634583, 0.9853030443191528, 0.9884970188140869, 0.9871176481246948]\n", + "[0.052648261189460754, 0.014893942512571812, 0.07087394595146179, 0.054014578461647034, 0.8537778854370117, 0.985954225063324, 0.9851803779602051, 0.9866021871566772, 0.9867295622825623, 0.9846962690353394]\n", + "[0.0024509804788976908, 0.9859805703163147, 0.9855311512947083, 0.9867442846298218, 0.9867357015609741, 0.9861743450164795, 0.9853377938270569, 0.9862059950828552, 0.9868395328521729, 0.9872848391532898]\n", + "[0.985305666923523, 0.9868053197860718, 0.9847664833068848, 0.9860287308692932, 0.9836115837097168, 0.9855090975761414, 0.9844112396240234, 0.9864311814308167, 0.9861600995063782, 0.9859958291053772]\n", + "[0.015895770862698555, 0.981940507888794, 0.984060525894165, 0.9864605069160461, 0.9856805801391602, 0.9850022196769714, 0.9853745698928833, 0.9871739149093628, 0.9853941202163696, 0.9851561188697815]\n", + "[0.0038554747588932514, 0.9855430722236633, 0.9867851734161377, 0.984561562538147, 0.9840114116668701, 0.9857656359672546, 0.9876862168312073, 0.9850670695304871, 0.985284149646759, 0.9855219721794128]\n", + "[0.0030120480805635452, 0.024726159870624542, 0.0024038462433964014, 0.0026041667442768812, 0.003865979379042983, 0.011752507649362087, 0.013516920618712902, 0.003367992816492915, 0.04415987804532051, 0.010162604972720146]\n", + "[0.10999926924705505, 0.02054794505238533, 0.0, 0.054574526846408844, 0.0, 0.08985867351293564, 0.023286588490009308, 0.007467018906027079, 0.0026881720405071974, 0.0]\n", + "[0.0, 0.012968749739229679, 0.025927109643816948, 0.008541666902601719, 0.01702488772571087, 0.0018939394503831863, 0.012011151760816574, 0.008830426260828972, 0.007110442966222763, 0.01945478655397892]\n", + "[0.04252886027097702, 0.0012886597542092204, 0.014367816969752312, 0.0, 0.008771929889917374, 0.026490937918424606, 0.030750425532460213, 0.0074752094224095345, 0.021713189780712128, 0.02588459849357605]\n", + "[0.0, 0.002314814832061529, 0.012634774670004845, 0.00489732064306736, 0.0108010433614254, 0.02545328624546528, 0.010068251751363277, 0.019960414618253708, 0.03510134294629097, 0.028307050466537476]\n", + "[0.005588286556303501, 0.041824668645858765, 0.7407107949256897, 0.9833105802536011, 0.9874252080917358, 0.984756350517273, 0.9867883920669556, 0.9872007369995117, 0.9851965308189392, 0.9862418174743652]\n", + "[0.0, 0.00811278261244297, 0.23193098604679108, 0.6163225769996643, 0.9835614562034607, 0.9852320551872253, 0.9840517640113831, 0.9859848618507385, 0.9865573644638062, 0.9868625998497009]\n", + "[0.006431069225072861, 0.2931586802005768, 0.9870093464851379, 0.9875290989875793, 0.9859606623649597, 0.9878708720207214, 0.9876031875610352, 0.9865221977233887, 0.9861905574798584, 0.9851698875427246]\n", + "[0.01361893955618143, 0.4904075860977173, 0.9868686199188232, 0.9869121313095093, 0.9846189022064209, 0.9871591925621033, 0.9843396544456482, 0.9870145320892334, 0.9859715104103088, 0.9882605075836182]\n", + "[0.0, 0.0, 0.647487998008728, 0.7285071611404419, 0.9823309183120728, 0.9854720830917358, 0.9874488115310669, 0.9881208539009094, 0.9860537648200989, 0.9877204298973083]\n", + "[0.01778641901910305, 0.06952977925539017, 0.01732417196035385, 0.5022264122962952, 0.9864218235015869, 0.9847519397735596, 0.9870765209197998, 0.9851924180984497, 0.986319899559021, 0.9873027801513672]\n", + "[0.017725462093949318, 0.6203130483627319, 0.9893311858177185, 0.9864777326583862, 0.986235499382019, 0.985442578792572, 0.9863168001174927, 0.98511803150177, 0.9854781031608582, 0.9853243231773376]\n", + "[0.25097742676734924, 0.9859964847564697, 0.986095130443573, 0.9850870966911316, 0.9862729907035828, 0.9850621223449707, 0.9890916347503662, 0.9862828254699707, 0.9849686622619629, 0.9872490763664246]\n", + "[0.0035026685800403357, 0.7763934135437012, 0.9864642024040222, 0.9884198307991028, 0.9866592884063721, 0.9851570129394531, 0.9850673079490662, 0.9866430163383484, 0.984935462474823, 0.9844953417778015]\n", + "[0.07895477861166, 0.4975973665714264, 0.9854884147644043, 0.9848262071609497, 0.9870865345001221, 0.9865111112594604, 0.9845198392868042, 0.9870240688323975, 0.9854475855827332, 0.9849141836166382]\n", + "[0.0049567027017474174, 0.0022727272007614374, 0.0, 0.6150845289230347, 0.6160503625869751, 0.40187740325927734, 0.8622419834136963, 0.8648116588592529, 0.863868772983551, 0.9844921231269836]\n", + "[0.009219417348504066, 0.0033275713212788105, 0.0024038462433964014, 0.0, 0.24518488347530365, 0.126374289393425, 0.0, 0.12083332985639572, 0.06775343418121338, 0.16844405233860016]\n", + "[0.1268707811832428, 0.3645409643650055, 0.9851202964782715, 0.9863166213035583, 0.9860314130783081, 0.9853174686431885, 0.982604444026947, 0.9861096739768982, 0.9866542816162109, 0.9869957566261292]\n", + "[0.012574317865073681, 0.0054168361239135265, 0.08843894302845001, 0.008127860724925995, 0.6267722249031067, 0.9834815263748169, 0.9872822761535645, 0.9856472611427307, 0.9865051507949829, 0.9856202006340027]\n", + "[0.01173254381865263, 0.006127070635557175, 0.0, 0.6125780344009399, 0.6744579076766968, 0.778885006904602, 0.8931699991226196, 0.9478309750556946, 0.984941840171814, 0.9822656512260437]\n", + "[0.009994826279580593, 0.011789665557444096, 0.12416666001081467, 0.1220632791519165, 0.004695349372923374, 0.3685667812824249, 0.8613132834434509, 0.7385556101799011, 0.493670254945755, 0.9556978940963745]\n", + "[0.0033808480948209763, 0.24838800728321075, 0.9836763143539429, 0.9846946001052856, 0.9847387075424194, 0.9864788055419922, 0.9883121252059937, 0.9859012961387634, 0.9866890907287598, 0.984140932559967]\n", + "[0.01277232263237238, 0.011908764019608498, 0.06688493490219116, 0.005250576417893171, 0.0, 0.010122544132173061, 0.24192161858081818, 0.3706718981266022, 0.24978959560394287, 0.11954133212566376]\n", + "[0.0014204545877873898, 0.0031250000465661287, 0.12254901975393295, 0.9178972840309143, 0.9856526851654053, 0.9846123456954956, 0.9850509762763977, 0.9843958616256714, 0.9841237664222717, 0.9870086908340454]\n", + "[0.0, 0.1256493479013443, 0.6087061166763306, 0.9868992567062378, 0.9840846657752991, 0.9863449931144714, 0.9847156405448914, 0.9863820672035217, 0.9858458042144775, 0.9863767623901367]\n" + ] + } + ], + "source": [ + "for run_name in os.listdir(\"results/\" + task_name + \"/\" + data_name):\n", + " if len(run_name.split(\"_\")) != 7: continue\n", + "\n", + " # if int(run_name.split(\"_\")[4][1:]) > 50: # Filter for large dimension runs\n", + " # continue\n", + "\n", + " if mixed:\n", + " if run_name.split(\"_\")[0] == \"run\": continue\n", + " else:\n", + " if run_name.split(\"_\")[0] == \"run-mixed\": continue\n", + "\n", + " for run in os.listdir(\"results/\" + task_name + \"/\" + data_name + \"/\" + run_name):\n", + " if run.startswith(\".\"):\n", + " continue\n", + "\n", + " # print(\"results/\" + task_name + \"/\" + data_name + \"/\" + run_name + \"/\" + run)\n", + " # data = torch.load(\"results/\" + task_name + \"/\" + data_name + \"/\" + run_name + \"/\" + run, weights_only=False)\n", + " with open(\"results/\" + task_name + \"/\" + data_name + \"/\" + run_name + \"/\" + run) as infile:\n", + " data = json.load(infile)\n", + " loss = data[\"final_loss\"]\n", + " accs = data[\"train_accs\"]\n", + " print(accs)\n", + " acc = data[\"final_acc\"]\n", + " # args = data[\"args\"]\n", + " params = data[\"params\"]\n", + "\n", + " if run_name not in all_losses.keys():\n", + " all_losses[run_name] = [loss]\n", + " all_accs[run_name] = [acc[-1]]\n", + " all_params[run_name] = params\n", + " all_train_accs[run_name] = [accs]\n", + " else:\n", + " all_losses[run_name].append(loss)\n", + " all_accs[run_name].append(acc[-1])\n", + " all_train_accs[run_name].append(accs)\n", + "\n", + "for run_name in all_losses.keys():\n", + " all_losses[run_name] = np.array(all_losses[run_name])\n", + " all_accs[run_name] = np.array(all_accs[run_name])\n", + " all_train_accs[run_name] = np.array(all_train_accs[run_name])" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "19ab59e6-0045-45fd-a438-bb35bdf8a6b4", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABBsAAALyCAYAAACb2dy0AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnXecFGXSx3/dkzYHwpKz5CxJUEQMmEXUMyvoeXqmO+/0zPn09F7Dnd555oB6RsRwiooBEJCsgkQByUvaZePMTuh+6v2jZ4bpiT2zMzu9u/X1szLd/aTu6n66n3rqqZKIiMAwDMMwDMMwDMMwDJMm5Gw3gGEYhmEYhmEYhmGYlgUrGxiGYRiGYRiGYRiGSSusbGAYhmEYhmEYhmEYJq2wsoFhGIZhGIZhGIZhmLTCygaGYRiGYRiGYRiGYdIKKxsYhmEYhmEYhmEYhkkrrGxgGIZhGIZhGIZhGCatsLKBYRiGYRiGYRiGYZi0wsoGhmEYhmEYhmEYhmHSCisbGIZhmIzw3//+F5IkQZIkdOvWDW63O9tNyhivvfZa8FwlScJrr72W7SZlje3bt+uuxYwZM7LdpBZH6PU97rjjst0cJoRkZDNjxgxd+u3btzdJG5ns0rNnz6DMe/bsme3mNBlCCAwePDh47k8//XS2m8Q0AaxsYBiGYdJOfX09br311uD2Aw88gJycnCy2iGEYhmGYbCHLMh566KHg9v3334/KysostohpCljZwDAp8sUXX+hmJCRJwuTJk7PdLIYxBY888gjKy8sBAH379sX06dOz3CKGYRiGYbLJtGnTMHr0aABAVVUV7rvvviy3iMk0rGxgmBSJZia9YMEC7Nixo+kbwzAm4uDBg3jqqaeC27fccgssFksWW8QwxmCzdoZhmMwSavX44osvYufOnVlsDZNpWNnAMClQU1ODjz/+OGI/EWHmzJlZaBHDmIdHH30UTqcTANChQwe2amAYhmEYBgBw7rnnok+fPgAAr9erW1rBtDxY2cAwKfDOO+/EdHb3+uuvN3FrGMY8VFdX44UXXghuX3HFFXA4HFlsEdPU9OzZE0QU/GvNzjIZJh6vvfaa7llpTc4CWzPbt28Pyrw1Wk/Jsozf/e53we2ZM2di//79WWwRk0lY2cAwKRD68SxJEo4++ujg9tatW7Fw4cIstIphss/LL7+M+vp6ANqzcdVVV2W5RQzDMAzDmIkZM2bAarUC0KwbnnvuuSy3iMkUrGxgmCT55ZdfsHTp0uD20Ucfjdtvv12XhpdSMK2VZ599Nvh7/PjxQVNJhmEYhmEYQFtiOWXKlOD2Cy+8ACFEFlvEZApWNjBMkoSbBF966aU45ZRT0K5du+C+999/Hy6Xq4lbxjDZZcmSJdi6dWtw+5xzzsliaxiGYRiGMSvTpk0L/i4vL8e3336bxdYwmcKa7QYwTHNCCIE33ngjuG2323H++efDarXiggsuwDPPPAMAqK2txYcffohLLrmk0XUSEdasWYONGzfi4MGDqKmpQV5eHjp27IiBAwdi6NChKXv6V1UVK1euxNatW1FRUYG6ujoUFBSgS5cuGDRoEAYOHAhJkhp9Dk3FypUrsWXLFuzduxdutxs9evTAxRdfHDfPtm3bsG7dOuzcuRM1NTWwWq1o06YNevTogaOOOgoFBQVpa5/X68WyZcuwY8cOHDx4EC6XC4WFhejRoweGDBnS7K0A3nrrLd321KlTG11mpq6ZEALLly/H5s2bceDAAaiqirKyMvTq1QsTJkyAzWZrdNuTxev1YsmSJdi2bRsOHDgAi8WCsrIy9O3bF2PHjoUsp3d+wOPxYPHixdi9ezf27t0Li8WCMWPGYNKkSWmtJ1l++eUXrF69Gnv37kVdXR2sVivy8/PRpUsX9OnTB4MGDQqa3zYXDhw4gO+//x779u3DoUOHUFxcjA4dOmDcuHHo1q1btpuXkMB7aMOGDThw4ACcTifatWuHrl27YuLEiWntJwHNCfN3332HLVu2oKGhAW3btsURRxyBY445Jms+YFauXIl169Zh7969sFqt6NGjByZMmIAuXbpkpT3RWLFiBTZv3ow9e/ZAlmX06dMHkydPRnFxcdx8brcbixYtwoYNG1BXV4fS0lIMGDAAEydOTMuz5nK5sHjxYuzZs0fXtw0aNAhHHnlk2r8zNm3ahGXLlqG8vDxY19ixYzFw4MBGlWumvmnnzp1Yvnw59u/fj5qaGrRp0wYdO3bE0Ucfjfbt26e9vkxc07POOgtXX301iAiA9g1x4oknpqvJjFkghmEMM3fuXAIQ/Dv77LODx5YsWaI7duKJJzaqrh07dtA111xDZWVlunLD/0pLS+mSSy6h7777znDZa9eupYsvvpiKi4vjlt2xY0e65ppr6KeffopZVmj6SZMmJXWO06dP1+Xftm1bzLSvvvqqLu2rr75KREQul4sefPBB6tWrV0T7i4uLI8ppaGigWbNm0cUXX0wdO3aMe/4Wi4WmTJlC8+bNS+q8wvn+++/pzDPPpLy8vLj19ezZk2655RbasmWLLn/4vXXSSSel1I6nnnpKV86tt97aqPMKJ1QG3bp1a1RZjb1msdi/fz9df/311LZt25hlFhYW0uWXX07bt2833N5Y96cRfv31V7r00kupsLAwZpvatWtHN954Ix08eNBwubGer127dtHVV19NJSUlEfVMnTrVcPmx2LZtm67M6dOnJ8zjdrvp0UcfpT59+sSVNwDKzc2l448/np599tlGt5UoUnZG/3r06JGw7A8//JDGjRtHkiTFLGfo0KH02muvkaqqhtucSr/r9Xrpsssu0+Vt3749LV++PGaeAwcO0J/+9Cfq1KlTzPbb7XY666yzaPXq1YbbP2nSJF0ZAcrLy+mKK64gu90eta78/Hy66667qL6+3nBdjeWVV16JeV9KkkRTpkzRnXsysknmHThv3jxd2vvuu4+IiBRFoaeeeor69u0btY15eXn0l7/8hRoaGiLKrK2tpVtvvZWKioqi5m3fvj299NJLqVw2IiJatGgRnXrqqeRwOGLeP2VlZXTPPfdQbW2toTLj9S9ffvkljR49OmZdAwcOpE8++SSpc8hE39SjR4+k+pEAqqrSyy+/TEOGDInZBlmW6aijjkrqPJv6moYyePDgYFkdOnQgIUTKZTHmhJUNDJMEF198sa6TnTVrlu546MtIlmXatWtX0nUIIej++++P+bEV7y8RXq+Xrr32WpJlOW0f1al89AZorLJh+/btNGjQoJjtjqZsGDVqVNLXFQBdf/315PP5kjq/2tpaOvfcc5OuK9p1HDZsWPC4JElxr1UsQj9QJEmizZs3J11GLDZt2qQ7h0suuSSlctJ5zcJ599134w7ow/8cDgf9+9//NtTuVJUN//jHP5J61ouKiuiDDz4wVHa05+urr76Kq2TMhrJhx44dNGDAgJSey2SfyWhkQtlQXV1NU6ZMSaq8MWPGUHl5uaE2J3vv19bW0kknnaTL16dPn7h9wEsvvZTU8yLLMj3wwAOG2h9N2fDdd99RmzZtDF+ryspKQ3WlSkNDA51xxhmG2mO32+mtt94ioqZVNtTX10fINdbfxIkTyeVyBcvbsmVLTAVF+N9NN92U1LWrr6+n3/zmN0nd/x07doyr+AoQq3/5y1/+YriuBx980NB5ZKpvSkXZsHv3bjryyCOTasOpp55qSInTlNc0nOuuu05XzqpVq1IqhzEvrGxgGIPU1NRQbm5usEMsLi4mt9utS3PvvffqOs2HH344qTq8Xi+dd955MT9m+vTpQ2PHjqXBgwdHnZWMR3V1NR177LFRy87NzaV+/frRuHHjaODAgVRQUKA7bkZlw1NPPUX9+vXT7SsrK6ORI0fSoEGDKD8/P6qyIVSLHvjr3LkzDRkyhI466igaOnRozMHYFVdcYfjcdu3aFbUuQJs5HzBgAI0dO5b69+9POTk5Ca/jf/7zH12au+++23BbiCKtIyZPnpxU/kS89NJLuvL/8Y9/JF1Guq9ZKC+88EJUJVtBQQENHjyYRowYEfWZAmBoAJWKsuHuu++OWl9JSQkNHz6chgwZEvEsAprFzSuvvJKw/PDna/bs2RGWIj169KDRo0dTnz59yGazNbmyweVyRR3wyLJMPXr0oFGjRtHYsWNpwIABUa+FGZUNlZWVNGLEiKh5unfvTqNHj6bevXtHvR979eplyKImmXt/7969NHLkSF2e0aNH0/79+2PmiXVvFhUV0eDBg2ns2LHUs2fPqGn+8Ic/JGx/uLJh5cqVlJ+fr5N/4H3Xt2/fqJYhZ555ZsJ6UsXn89Fpp50W9fy6du0afGZCZWi1WiMUAplUNtx7770RypDOnTvT6NGjadCgQWSxWCLa/rvf/Y6INAuv7t27B/dLkkS9e/emMWPGUO/evaOe95tvvmno2u3fvz+mUr9r1640atQoGjFiBJWWlkYcz8vLo4ULF8YtP1r/ctttt+n2FRYW0uDBg2n06NHUvn37qG1JpLTNZN+UrLLh119/1ckrtC29e/em0aNH68oM/Rs1ahQdOnTIFNc0Gi+//LKujFS+HRhzw8oGhjHIiy++qOsQf/vb30ak+eWXX3Rp+vXrl1QdN910U0TnPWLECPrggw+imo1u3ryZ/vnPf9KYMWMIiP84T5s2LaLsSZMm0RdffBGhNFFVldauXUsPP/wwDRw40JTKhg4dOgR/X3DBBREmvF6vl+bMmRNRzuDBg6l79+5088030zfffEM1NTURaYQQtHr1arr22msjPthmz56d8Lw8Hg+NHTs24nqfffbZtHDhQlIURZfe5/PRihUr6K677qLu3btHvY41NTW6D5ouXbpElBOPK6+8UteWwCxcurj22mt15X/11VdJ5c/ENQuwatUqstlsunK7d+9O7733nu7eVxSFvvjii6gKj2j3UijJKhs++eSTiDqGDBlCX3zxhe5cPR4Pvffee9StWzddWrvdntBsPfz5CjwzOTk5dPfdd9Pu3bt16auqqmjBggVxyzRCMsqG//u//9Olbd++Pb3wwgtRP46FELRlyxZ67rnnaMqUKSRJUlqUDeXl5fTVV1/RV199FWGN8OabbwaPhf8tWrQoannRLHN+97vfRSz12bNnD91+++1ktVp1aSdMmJDw2Tba727YsCFCKXDKKafEXYbwyiuv6NJLkkSXX345rVixImKpx549e+iOO+6IeL7efffduO0PVzYEBrht2rShJ598kioqKiLqmTFjRtLPZao88sgjEXVdeOGFtGHDBl26vXv30p133hmUYfi1zqSyIbSuiy66iNavX69LX1FRETFrLEkSrVmzhk4++eRgX3DvvffS3r17dXk3btwYMTnRsWNH8nq9cc9HVVWaPHlyxDP92GOPRdShqiotWrSIjj/+eF36rl27Rsg/lPD+JXT53rhx42ju3Lm6fkEIQfPmzYuwUOjSpUvc/iOTfVMyygafz0fjxo3TtcVqtdLtt99Oe/bs0aXdsmULXXXVVRH37gUXXBC3jqa6ptFYvny5roxUrSIZ88LKBoYxyDHHHKPrEGOt4w8fMH3//feGyv/iiy8iXhB/+MMfDK/j/frrr2Mee+655yI+OB577DFD5Qoh6Ntvv415PJkPq3Aao2wI/P3zn/9Mqs7vvvsuqUH63LlzdetNx44dmzDP7bffrmtjqIltIrxeb0z/G7/73e905RpdJ1lbW6ubNWzbtm2EgqmxHH300bq27dy5M6n8mbpmQggaOnSoruzhw4dTVVVVzPLcbnfEB3CnTp10JsjhJKNscDqdOmUZoPnhiCeTQ4cORZzHiBEjYqYniny+AM2SI9HMYWNJRtkQUJQC2rKV8MFcPDZs2JD29b3J9EnRmDVrVsQ1T7Tm/bPPPosYrCea3TPS7y5evDhiWcIVV1wRdzCwdetWnfVLbm6uoQH9ggULdJZ/ZWVlUX0EBAhXNgDa4DmR75XwPjDUb1K62L59e4Tl1EMPPRQ3z5w5cyJkaOSd2BhlQ+Dv8ccfj1vHFVdcoUs/cODAYF8Qz9eT0+kMpg38ffjhh3HrevTRR3Xpx40bF9eChkhTOtxwww0R3z6xCO9fAn8zZsyI+24/cOAAde7cWZfno48+ipk+k31TMsqGxx9/POLd+Pnnn8fN88ILL0Rcn3iya6prGo3a2lpd/iFDhiSVnzE/rGxgGANs2bJF1xl269Yt5ovk6aef1qW95pprDNUxfvx4Xb6LL744LW33+XwR5nd33nlnWsomyq6y4cILL2xc4w0SblK8bt26mGkrKyt1A3sA9MILL6SlHStXrtSVa9SM+Pnnn9flS3b9rRFCPzhkWU5qdiOT1+zLL7/UlZuXl0c7duxImK+6ujrCgWi8QWMyyoZweXTu3DmqhU0427Zt0w3oAMRVMkZTNjz33HMJ62ksySgbQpcsnXLKKRlvWyIaq2wI78dvuOEGQ/nCB2k9evSI+5GfqN+dPXt2xIDZyNKra665Rpfn7bffNtR+IqJnnnlGl/fFF1+MmTZc2WCxWGjFihUJ6zh06JDuvPLy8pJyrGmEcMXnGWecYSjfQw89FPG8ZVrZkGjGmkizCom2ZMdIH/vWW2/p8lx99dUx0zqdTp1yq1OnTob9aiiKQkcddVQwb0FBQUyFcLSB8ejRoxNaXRARPfvss4a/zzLZNxlVNiiKEmHVlki5FOD3v/+9Lt8xxxwTM21TXdNYhFptFhYWJp2fMTesbGAYA4QPNm+77baYaQ8cOKAziy0pKYk7w0NEtGzZMl35hYWFcWdek+Hdd9/Vld27d29DLxCjJPNhFU5jlQ3pdHAYj40bNxr+iP773/+uSztx4sS0tiXUK7TFYokwhU+UB4ivLEkFn8+n+5jt0KFDUvkzec3CnZTdddddhvOGWwTFs2pJRtkQOmOW6H4KJ3wgdP7558dMG/58de/ePe0Ds2gko2wIdY6ZyTX4RmmMsmHdunW6vPn5+Yb7ca/XGzGoiGdREK/ffeaZZ3TPo8ViMaRkqqys1Cmzxo8fb6jtoecQGj0p3gAtXNkQ7z4O56yzzspYfyaEiFAyGi3f7XZH5M2kskGSJNq0aZOhtoVbXCZSZgWoq6vT3UtjxoyJmTZ80Pn8888baluAjz/+WJf/nXfeiZou2sDY6HKayspKXb5455PJvsmosuGzzz6LkJtRRX5lZWWEj57wpTYBmuqaxiLcN0a6vn8Zc5DeoN0M0wIhIrzxxhu6fZdeemnM9O3bt8eUKVOC29XV1fj444/j1jF37lzd9uWXX46SkpLkG2ug7GuvvRY2my0tZWeTMWPG4IgjjmiSunr16qXb/vHHH2OmDb/ef/jDH9LalmuuuSb4W1VVvPrqq3HTr169GitXrgxuT5gwAYMGDUprm+rq6iCECG4XFBQklT+T1+y7777TbV9xxRWG81500UXIzc0Nbq9atQoul6tR7amvr8cPP/wQ3M7Ly8OFF15oOP+VV16p2164cKHhvBdccAFk2Vyv/c6dOwd/f/fdd9i5c2cWW9M4FixYoNs+55xzDPfjNpsNl112mW5f+L1rhDvvvBPXX3998HnMzc3FBx98oOs3YjF//nw0NDQEt8PbkwibzYbJkycHt7///ntdvxCPCy64wHA9I0aM0G3v2rXLcN5EbNy4Efv27Qtujxo1ynB/6XA4knqWG8uwYcPQr18/Q2mHDBmi2542bRosFkvCfAUFBejZs2dwO97zOWfOnOBvq9Wa9LU44YQTdP2T0b6tuLgYJ598sqG0bdq0Qffu3YPb8e4dM/RN4X3K5ZdfDqvVaihvmzZtcPbZZ+v2Ge1TMnVNYxH+zVBTU5N0GYx5MddXB8OYkHnz5mHHjh3B7WHDhkW8uMO55JJLdNuvvfZa3PThL9XTTjstuUZmqexsMnbs2EaXsXz5ctx555047bTT0Lt3b7Rp0wY2mw2SJOn+HA6HLl9FRUXU8hRFwdKlS4PbsizjlFNOaXQ7Q7noootQVFQU3H755ZdBRDHTv/jii7rt3/3ud2ltD4CIAXjoAD0Rmbxm27dvx/79+4PbPXr0QJ8+fQznLyoqwujRo4PbqqpixYoVjWrTypUroapqcHvMmDFJKWf69u2Lbt26Bbf37t2r65/ikY5nJt2cdNJJwd81NTWYPHky3n//ffh8viy2KjWWLVum2z7++OOTyn/CCSfotkOfi0T4fD5Mnz4djzzySHBf27Zt8c0332Dq1KmGygh/V4Te+0YJHXTU1tZiz549hvIlU1dZWZluO50Dk+XLl+u2jzvuuKTyJ5u+MYwaNcpw2rZt2+q2jzzyyJTy1tbWRk1DRFi8eHFwu1+/frr3lBHy8/N1dW3YsMFQviOPPDIpJWro/RPv3jFD35StPiVT1zQWeXl5um2n05l0GYx5YWUDwyQgXFEQz6ohwNlnn60bQHz11VfYu3dvzPRbt27VbafykReLX3/9Nfg7Pz8fAwcOTFvZ2STc2iAZFi5ciOHDh2PcuHF45JFH8Pnnn2Pbtm2oqqqCoigJ81dXV0fdv2/fPt1Lsn///knP8iciPz9fN+O4fft2fPXVV1HTNjQ04L///W9wu6ioCOeff35a2xONeMqPcDJ5zcIH4cOGDUu6jOHDh+u2Gzu7lc02NeaZyRR/+ctfdB+av/76K84//3yUlZXhwgsvxHPPPYc1a9YYniHPJo2Vbapyra+vxxlnnIHXX389uK9nz55YvHgxxo8fb7j+8MHd2LFjIxSvif4ee+wxXRmHDh0yVHe4AiEe+fn5uu1Qa4zGsm3bNt12oomFcIYOHZq2tiSiffv2htOGD+ZSzRvrWu/fv18n6/Xr1yd970iShIMHDwbLyMS9A+jvn3j3jhn6pmz1KZm6prFI5puBaX6wsoFh4lBfX4/Zs2cHt2VZxsUXX5wwX15eHqZNmxbcVlU1YilGKKEvVUmS0K5duxRbrKe2tlY3eG7Xrh0kSUpL2dkm2VmTAM8//zwmTZqENWvWpFy3x+OJuj/84yjZF7ZRwk2iX3rppajpZs2apVOMXHLJJREfnekgvEy32204byavWVVVlW47lecqPE94mc2pTak+M5mkb9++mDVrVkTbqqur8e677+Laa6/F8OHD0a5dO5x77rl4++230zq4TCeNlW2bNm10s4lG5bpq1SrdUqRevXphyZIl6N+/f1L1V1ZWJpXeCEZnOXNyclKuI50DlXBFcrhFQCKSTd8YGnPNGpM3Gs313omHGfqm0D5AlmW0adMmqfypvisydU1jEX7dwhWKTPPG2MIfhmmlvP/++7pZ1379+mHDhg2GzPt69+6t2545cyZuvfXWqGnr6uqCv/Py8tK2rjq0XCD5tfRmJhW/E/PmzcO1116r+zi1Wq045phjMG7cOPTo0QNlZWXIycmJWDoRalIZi6a63kOHDsWECRPw/fffAwA+/vhjHDx4MGK2qimWUABAYWEhZFkOzvCEX4d4ZPKa1dfX67ZT+YAJz5PMuZmtTWb11XLqqadi3bp1+Otf/4q33nor4hoB2kfy7NmzMXv2bLRv3x733HMPbrjhBlMpTxsrW0mSkJubG3znGJWrw+HQKUB37NiBL7/8EtOnT0+q/lgWW42hOVikhBIuw2SVs611kNRS751s902h9aUyUZDu91emCL+uxcXFWWoJkwlY2cAwcZg5c6Zue+PGjYYGndFYv349VqxYgTFjxkQcKywsDGqcXS4XhBBpUTgUFhbqtqO9KFsTN998s07RcPrpp+O5555D165d4+aLZckQTlNe72uuuSaobPB6vZg5cyZuueWW4PFNmzbp1mCPGjUKI0eOzEhbrFYrOnXqFFyfXVFRAUVRDDmyyuQ1C1dcpLIONDxPeHtbQpvMQNeuXfH888/jySefxNdff4358+fju+++w+rVq3U+LgDg4MGD+MMf/oAFCxbg3XffNeTorimIJttkZrqJSDfDZ1SuRx11FCZPnoz7778fgDZIu+KKK+D1epNSMIYPZl599dWEfWMiws24zU744CxZh7Ctda15+L0zaNAgPPXUU40qMxnfP5kkm31TQUFB0MIjFefEzeVdEbrMuLCwMG0O0hlzwMoGhonBtm3bUvIGHo+ZM2dGVTa0adMmqGwgIlRUVKTFnLyoqAhWqzW4lKKiogJEZJrZwMZ69k+GX375RRdFYsiQIZg9ezbsdnvCvEbXjoabOB44cCC5RibB+eefj5tuuil437z00ks6ZUP40opMWTUE6NmzZ1DZIIRAeXm5zllcLDJ5zUpLS3XbqZj6hjsDDS+zJbTJTOTn52Pq1KlBp4a1tbVYtGgRPvvsM7z99ts6M+APPvgATzzxREyLsaYmmmyNPAMBDh06pJvNTUau9913HxwOB+644w4A2nvkmmuugcfjwQ033GCojHCT60GDBpnSqWgmCR/kxHIGHItMLCdoDoTfO0SEE088MUutyQzZ6JtKS0uDygYhBKqqqpLqF5rDu6K2tlY3yRAa/YRpGbDPBoaJwcyZM9PutObtt9+G1+uN2N+3b1/ddmiowsYSGh7S6XQa9vBslNC1fcmuVwx1BpVpwr0wX3XVVYYUDQCwbt06Q+k6duyom93ctGlTxqwbcnJydGbSmzZtCirHApYOAfLz8w35GmkM4Y6rNm3aZChfJq9Zjx49dNurV69OuozwPOFltoQ2mZmioiKcdtppeOaZZ7Br166I0KX/+Mc/TONcrLGybaxcb7/9dvzjH/8IbhMRbrzxRjz55JOG8oc7EN2yZUtS9bcEwpc/rl27Nqn8jfEF1Jzp2LGjzhJhx44dzTKiTDI0Rd+U7T6lKdi4caNuOxWnyYy5YWUDw0SBiHSevQEtBjkRJf0XGnro0KFD+N///hdR38SJE3XbofGqG0smywb0TudCwwwmQgiBH374Ia1tiUd425Jxnvbtt98aSme1WnXe34UQ+OKLLwzXkyzhjiIDPhoCPhwCXHjhhRk3nwwPw/bzzz8bypfJa9azZ0906NAhuL1jxw5ddJZE1NXV6RR/Vqu10ZFiRo8erTOtXbFiRVLKlS1btujimHfq1Cmp2fPmTH5+Pl544QXdzNe+ffvSOigOX76WzGDhqKOO0m0b7TdipQ8vzwg33XQTnnnmGZ312s0336wLiRmLyZMnx21PayDc8nDBggVJ5U82fUvBZrPh6KOPDm67XK6IsI0tmUz1TWboUzJN+LdCOqOxMeaAlQ0ME4XvvvtOFwKrc+fOEYN2o1x00UW67fBQmgBwyimn6LbfeOONtDlcCi/72WefTeuMQ6imfOfOnYaXHHz++ecxY3ZngvBBQzQLk2h4PB688sorhusJv95PP/204bzJMmDAAEyaNCm4PWvWLFRVVTX5EgogUqm1atUqw3kzec1Crw8Q/fmLRbh38dGjRzc6mkdBQYFOMeNyufDee+8Zzh9+L4afX0vHarVi3Lhxun3JmrrHozFr9sNl8eGHHxr2qO/z+SIiFqUq2+uuuw4vvviiTnFy5513Bn06xOLEE0/U+Vl55513Wt2ygIEDB+oUlKtWrcL69esN5fV4PHj77bcz1TTTE96P/+tf/8pSS7JDJvqm8D7gzTffNBSeG9AcV3744Ye6fccee2yj2pMJwr8VzNhGpnGwsoFhohDuGPKCCy5I2WHjOeecozPX/+KLLyLWpR955JE45phjgtu1tbW4/vrrU6ovnKlTp+q07b/++mvCj85kOPLII4O/iQjvv/9+wjw+nw/33Xdf2tpghI4dO+q2Fy1aZCjfPffck5TFxpVXXqmzIli4cGFEVIh08vvf/z742+1246GHHsJXX30V3Dd06NCID6BM0K9fP919loy/k0xes6uuukq3/eSTT2L37t0J89XW1kY8J+lS2oS36d577zVk3bBjx44Ip2tNoUgyG5lchxzuQyRU6ZyIgQMHYsKECcHt+vp6w/3cU089hZ07dwa3e/bsmbIzYgD47W9/i9dee01nRfPAAw8EfTpEo0OHDrjsssuC206nM23voeaCJEmYMWOGbt9tt91mKO/jjz+e1LuipXHVVVfpfF7MmjULn332WfYalAXS3TdNmTJFZ7m2bds2/Pvf/zaU95577tEpSydOnIgBAwY0qj2ZINQaqKysLGOOrJnswcoGhgnD5XJh1qxZun0XXnhhyuWVlpbi5JNPDm4rioI333wzIt19992nM3196623cNNNNxk24/3mm2+i7rdYLLj77rt1+x555BE88cQThsolIsybNy/m8dNOO023/eCDD8b1xaAoCq6++uqkZr7TQeggAACee+65hCaOzz//PB5//PGk6ikpKcEf//hH3b4bbrgB77zzjqH8Pp9PF0UiEeecc44u5OWTTz6pu2eacjB6+umnB3/v3r3bsAlpJq/ZiSeeqFsD6nQ6MXXq1Lgzzl6vF7/5zW90HrI7deqUNr8Xl1xyiW72dM+ePTj//PPjWttUV1dj6tSpuo/HkSNH4vjjj09Lm7LBhg0bcO211yZlarxixQrMnz8/uF1SUhKxzr4xDB48WLcd/i5IxM0336zbfvrppyOW5IXz5Zdf4q677tLtu+mmmxodkeiyyy7DW2+9pbNWePTRR/HnP/85Zp67775bZ73z7rvv4pprrjFsCQZoywUfeuihqEsGmwO///3vdaGPP/30U/ztb3+Lm+eLL77AAw88kOmmmZri4mKdYkYIgYsuugiffPJJUuWsWrUKF1xwQbqblxRm6ZssFkvEu/H222+P+b0X4JVXXsF//vMf3b7wvskMHDhwQOdH7NRTTzWNA3MmjRDDMDpmzpxJAIJ/ffr0aXSZ//3vf3VlDhs2LGq6m2++WZcOAI0cOZI++OADqq+vj0i/efNm+uc//0mjRo2iRI/zeeedF1H25MmT6csvvyS3261Lq6oqrV27lh5++GHq378/9ejRI2a5Pp+PunTpoit34MCBNG/ePBJC6NLNnTuXxo0bF0zXq1cvXb5t27bFrOfVV1/VpX311Vfjnm80xo8fryujU6dO9N5775HP59Ol++mnn+j888/XnU9ovkmTJsWtx+v10lFHHRVxvc855xxatGgRKYqiS+/z+WjlypV01113Ubdu3RKWH86tt94aURcAysnJoUOHDiVVVmNYvHixrv7HHnvMcN5MXrNVq1aRzWbTlduzZ0+aNWsWeTyeYDpVVWnu3Lk0dOjQiHZ8/vnncduf7P35ySefRNQxfPhwmjt3LqmqGkzn8Xho1qxZ1KNHD11au91Oq1evjlvH9OnTDT9f6WTbtm26eqdPnx413Y8//kgASJZlOvbYY+npp5+mn3/+OULWREQHDhygJ554ggoLC3Vl//GPf0xr2/fv3x9xr0ybNo1efvllmjNnDn311VfBv0WLFkUt49xzz9XllySJrrnmGtq6dasuXXl5Od1xxx1ktVp16SdMmBD1GoSSTH/04Ycfkt1u1+W57rrrdP1zKG+//XbEvdmvXz964YUXaN++fRHphRC0ZcsWev3112natGmUm5ub8BmYNGmSrvxkSMe7IBEPPfRQxDW46KKLaMOGDbp0+/bto7vuuisow549eyYlm2Se0Xnz5unS3nfffYbP57777tPlnTdvnuG8ychKVVU67bTTIu7/adOm0TfffBPxrUFE1NDQQMuWLaOHH36YjjzyyIT1GO1fGnM+me6bQvvzeN9XRESKoui+mwCQzWajO++8k8rLy3Vpt27dSldffTVJkqRLf8EFF8StoymuaTRefPFFXb4vv/wyqXqZ5gErGxgmjOOPP17X+d15552NLrO+vp7y8vJ05f7www8R6Xw+n26QGz646Nu3L40bN46GDBlCJSUlEWniUVNTE/FCCPzl5eVR//79ady4cTRo0CAqKCjQHU/0Mpw1a1bUcsvKymj06NE0dOjQiBfx7bffntSHVjo+MBcvXhwxkABABQUFNHLkSBo1ahR16NBBdyw/P59++OGHpD4giYh2795NgwcPjnpdCgsLadCgQTRu3DgaMGAA5eTkJF1+KFu2bIn4uABAl156adLXqLH07t07WP/48eOTypvJa/bCCy+QLMtRyx06dCiNGDGCSktLo9b9wAMPJGx7Kvfn3XffHbW+0tJSGjFiRNTnJvAB/MorryQsv7koG8L/cnNz6YgjjqAxY8bQmDFjqEePHlHv7759+1JtbW3a23/llVdGbVf4X6x+sbKykoYPHx41T8+ePWnMmDHUp0+fqPdjr169aPv27QnbmGx/8emnn5LD4dDlu+qqq3SKrVCeeOKJqO0DQN26daORI0fSmDFjqG/fvlHv0UTPgNmVDV6vl04++eSY5z9mzBg64ogjyGKxBPdbrdYIhUBrUzYQEVVXV9Nxxx0X9do5HA7q168fjRs3joYPH049evTQXUMj9TSlsiFTfVMyygYiTYnQvXv3qO+CPn360JgxYyIUXYG/I488MuGk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wfDhw3HNNdfgq6++ynYTuyX19fV48803ceutt2L27NkYOnQo8vPzYbfb0bNnT8yZMwePPPIIqqqqst1UIoY77rjDvMYJgoDPP/88203qdkSe/5b+5syZk+2mdnsOHDiAe++9F6eeeip69OgBp9OJ/v37Y9asWbjnnnuwadOmbDexWzBnzpykfzd0bcseoVAIL774Ir7xjW+gT58+5phtxIgRuOaaa7Bs2bJsN7FbEwgE8Mc//hFnnHEGevToAbvdjtLSUpxzzjl48803214xJyzDv//9b56Xl8cBxP0bPnw437lzZ7ab2a1I1BcA+FVXXZXt5nVrZs2a1WL/GH/f+973eDAYzHZzuxWffvppUn1TUlLCP/7442w3l9ApLy/nsixH9dHixYuz3axuRzK/HQB89uzZ2W5qt+aZZ57hHo+nxT66+eabs93MbsHs2bOT/t0A4KIo8kOHDmW72d2Kffv28TFjxrTaNzfddBNnjGW7ud2Obdu28REjRrTYN2eddRZvaGhIuW65TQoFkXHKy8tx2WWXwe/3IycnB3feeSfmzp0Lv9+PN998Ey+88AJ27NiBc889F6tXr0Zubm62m9ztKCsrw8iRI/HJJ59kuykEgCNHjgAASktLcemll2LWrFkoKyuDqqpYvnw5Hn/8cRw+fBivvvoqwuEw/vrXv2a5xd2L/v37Y+7cuTjllFPQv39/9OnTB4wxHDp0CO+88w7effddVFZW4oILLsDKlStx0kknZbvJ3RrGGH7wgx9AURT07NkTx48fz3aTuj0//vGP8ZOf/CThdo/H04GtISJ54IEHcPfddwMAhg8fju9///uYNGkS8vPzUVVVhfLycrz33nsQRTIg7gj+8pe/wOv1tlhmy5YtuOyyywAAZ5xxBvr27dsRTSMAhMNhnHvuudi8eTMAYPz48bjlllswYsQINDQ04KuvvsLjjz8Or9eLZ599FqWlpfjFL36R5VZ3H44fP4558+bh4MGDAIBLL70UV111FUpLS3HkyBEsXLgQb7/9Nj755BPMnz8fH3zwQWoHaAdxhGgDxlNaWZb5smXLmm1/5JFHTGXp3nvv7fgGdlPuuece/v777/OKigrOOed79+4lywaLcO655/K33nqLK4oSd/uJEyf48OHDzf5asmRJB7ew+5KoTyJ57733zL65+OKLO6BVREs8+eSTHAAfOXIk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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "params = {}\n", + "params['layer1'] = 'SSM'\n", + "params['layer2'] = 'TF'\n", + "params['window'] = default_window\n", + "params['dim'] = None\n", + "params['num_heads'] = 1\n", + "params['state_dim'] = 1\n", + "\n", + "name = plot(all_train_accs, params, 'epochs', 'dim', x_axis='epochs')\n", + "plt.ylabel(\"Accuracy through Training (SSM-TF)\")\n", + "plt.xlabel(\"Epoch\")\n", + "plt.title(\"Accuracy (color is token dimension)\")\n", + "savefig(task_name, name)" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "7a68dc44", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'run_needle_TF-TF_w100_d8_nh1_sd1': array([[0. , 0.00793651, 0. , 0.00201613, 0. ,\n", + " 0.0128279 , 0.08114035, 0. , 0.0467033 , 0.00297619],\n", + " [0.08506945, 0. , 0.08219178, 0. , 0.05333333,\n", + " 0. , 0.03070042, 0. , 0. , 0.00166667],\n", + " [0.04440789, 0.11813187, 0. , 0.00980392, 0.01666667,\n", + " 0. , 0. , 0.00789474, 0. , 0. ],\n", + " [0.11363637, 0. , 0. , 0. , 0.00131579,\n", + " 0.0102459 , 0. , 0. , 0.02604167, 0. ],\n", + " [0. , 0.0236009 , 0.00903614, 0. , 0.01676136,\n", + " 0. , 0.07211538, 0. , 0.00143678, 0.00160256]]),\n", + " 'run_needle_SSM-SSM_w100_d4_nh1_sd1': array([[0. , 0. , 0. , 0.12692308, 0.00324675,\n", + " 0. , 0.01219512, 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0.11588541, 0.14880051,\n", + " 0.12276786, 0.36801115, 0. , 0.12295082, 0.46090132],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0.00396825, 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0.11239427, 0.0307971 , 0.01682232],\n", + " [0. , 0.125 , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ]]),\n", + " 'run_needle_TF-TF_w20_d32_nh1_sd1': array([[0.00227273, 0.02515464, 0.01470865, 0.11706471, 0.12589516,\n", + " 0.3108682 , 0.31013259, 0.18369466, 0.21283028, 0.13067 ],\n", + " [0.04123371, 0. , 0.151079 , 0.14625919, 0.28173512,\n", + " 0.20976636, 0.33175793, 0.28795993, 0.22934534, 0.21055894],\n", + " [0.00211864, 0.06825881, 0.28068587, 0.04347806, 0.11492313,\n", + " 0.0815833 , 0.34943092, 0.26145074, 0.08431085, 0.17541258],\n", + " [0.01884795, 0.01260965, 0.07837769, 0.05476122, 0.1234334 ,\n", + " 0.11629758, 0.11622779, 0.21719907, 0.24378759, 0.2300432 ],\n", + " [0.01866798, 0.00828115, 0.06720085, 0.22807147, 0.29712272,\n", + " 0.30122548, 0.26913258, 0.28946441, 0.27552089, 0.27829278]]),\n", + " 'run_needle_SSM-TF_w100_d20_nh1_sd1': array([[0.00223214, 0.46252537, 0.53042257, 0.91987765, 0.98486656,\n", + " 0.98551559, 0.98523116, 0.98516798, 0.9868021 , 0.98661321],\n", + " [0.00482456, 0.73652488, 0.98688406, 0.98697573, 0.98659146,\n", + " 0.9860329 , 0.98523527, 0.98689723, 0.98524541, 0.98744082],\n", + " [0. , 0.24452573, 0.25192282, 0.98518622, 0.98524201,\n", + " 0.98512006, 0.98542225, 0.98638201, 0.98450667, 0.98444366],\n", + " [0.00240385, 0.86426342, 0.98679942, 0.98551399, 0.98651129,\n", + " 0.98525202, 0.98660809, 0.98603809, 0.98604828, 0.98576915],\n", + " [0.10957168, 0.45028561, 0.74371767, 0.98547226, 0.98553401,\n", + " 0.98562622, 0.98550075, 0.98494387, 0.98625714, 0.98573256]]),\n", + " 'run_needle_SSM-SSM_w100_d8_nh1_sd1': array([[0. , 0.00446429, 0.01315352, 0.00644228, 0. ,\n", + " 0. , 0.00245098, 0.0025 , 0.00160256, 0.26104712],\n", + " [0. , 0.00583447, 0.00498341, 0.00263158, 0.24264705,\n", + " 0.32111835, 0.37028182, 0.83883989, 0.85932589, 0.98629397],\n", + " [0. , 0.37126735, 0.85687047, 0.86278981, 0.98257262,\n", + " 0.98494041, 0.986808 , 0.98222244, 0.98622656, 0.98539537],\n", + " [0.00223214, 0.00307808, 0.00431163, 0.24481006, 0.12142857,\n", + " 0.6521275 , 0.48477173, 0.66675174, 0.88664138, 0.85158968],\n", + " [0.00152439, 0.0201087 , 0.46586198, 0.73786992, 0.86446673,\n", + " 0.98679239, 0.98520654, 0.98531199, 0.98704821, 0.98615658]]),\n", + " 'run_needle_SSM-TF_w20_d8_nh1_sd1': array([[0. , 0.04763258, 0.00394737, 0. , 0. ,\n", + " 0.24684525, 0.1225 , 0.11454582, 0.35800645, 0.37070423],\n", + " [0. , 0. , 0. , 0.06665383, 0.06174242,\n", + " 0.09547136, 0.25523615, 0.20189232, 0.14630549, 0.14708509],\n", + " [0. , 0.04320988, 0. , 0. , 0. ,\n", + " 0. , 0.12339743, 0. , 0.12222222, 0. ],\n", + " [0. , 0. , 0. , 0.00173611, 0.03296703,\n", + " 0.12377451, 0.15583068, 0. , 0.12541403, 0.25610906],\n", + " [0.01293103, 0. , 0. , 0. , 0.01424051,\n", + " 0. , 0. , 0. , 0. , 0. ]]),\n", + " 'run_needle_TF-TF_w20_d24_nh1_sd1': array([[0. , 0.01136364, 0. , 0.0220688 , 0.00622336,\n", + " 0.01021437, 0.02764067, 0.02847512, 0.01264596, 0.03309043],\n", + " [0.02083333, 0.03253425, 0. , 0.02622854, 0.07554322,\n", + " 0.10561454, 0.16201881, 0.19352008, 0.22835746, 0.26717606],\n", + " [0.00685974, 0.0013587 , 0.00961538, 0.0113515 , 0.00192308,\n", + " 0.01179245, 0.01791323, 0.00394737, 0.03473798, 0.01914113],\n", + " [0.1131579 , 0.01343344, 0.04544739, 0.00795347, 0.00570437,\n", + " 0.01368843, 0.02546296, 0. , 0. , 0.01899035],\n", + " [0.00128866, 0.01235407, 0. , 0.07738814, 0.05778728,\n", + " 0.16433232, 0.12456046, 0.30356532, 0.42183602, 0.18873559]]),\n", + " 'run_needle_TF-TF_w20_d12_nh1_sd1': array([[0. , 0.00537634, 0. , 0.00471698, 0.00924446,\n", + " 0.00666667, 0.00614754, 0. , 0.01369441, 0.01226865],\n", + " [0. , 0. , 0.00382184, 0.00130208, 0.01347132,\n", + " 0.00726368, 0.0155008 , 0.00929634, 0.01245915, 0. ],\n", + " [0.03541667, 0.00834176, 0.02453754, 0.08189655, 0.01923077,\n", + " 0. , 0.03755185, 0.01470588, 0.00909091, 0.02949309],\n", + " [0. , 0.00387731, 0.00285798, 0.00215517, 0.06086166,\n", + " 0.0046875 , 0. , 0.00833333, 0.04761905, 0.00797872],\n", + " [0.00132979, 0.00735294, 0. , 0.00925926, 0.06678082,\n", + " 0.02227098, 0.04310345, 0.02164864, 0.0062989 , 0.01204819]]),\n", + " 'run_needle_SSM-SSM_w100_d48_nh1_sd1': array([[0.01870834, 0.01308026, 0.75795352, 0.98703808, 0.9870199 ,\n", + " 0.98593706, 0.98486543, 0.98568732, 0.98654896, 0.98627424],\n", + " [0.02000579, 0.02982023, 0.98747629, 0.98703039, 0.98687482,\n", + " 0.9846282 , 0.98678213, 0.98597872, 0.98780859, 0.98613328],\n", + " [0.0770869 , 0.80499178, 0.98607481, 0.98494762, 0.98529881,\n", + " 0.98622662, 0.98490733, 0.98714662, 0.98700583, 0.98471743],\n", + " [0.01410186, 0.06303056, 0.0123795 , 0.57551593, 0.987836 ,\n", + " 0.98557395, 0.98738688, 0.98558354, 0.98544908, 0.98749959],\n", + " [0.01540478, 0.05547195, 0.98335683, 0.98525822, 0.98724824,\n", + " 0.98629832, 0.98773187, 0.98610848, 0.98603415, 0.98730707]]),\n", + " 'run_needle_SSM-SSM_w20_d8_nh1_sd1': array([[0.00137363, 0.00176056, 0.24372563, 0.73863995, 0.1235119 ,\n", + " 0.37149465, 0.86261708, 0.98788995, 0.98463637, 0.98720241],\n", + " [0.01090823, 0.12339743, 0.36991638, 0.49152032, 0.57441241,\n", + " 0.98417974, 0.9830966 , 0.98532498, 0.98660934, 0.98493391],\n", + " [0.00158228, 0.00533063, 0.24470884, 0.3640928 , 0.97141087,\n", + " 0.97554058, 0.9731468 , 0.9750576 , 0.97523379, 0.97401482],\n", + " [0.00833333, 0. , 0.36890846, 0.98640025, 0.98596787,\n", + " 0.98644751, 0.98782146, 0.98313159, 0.98540187, 0.98563123],\n", + " [0.00154321, 0.12239584, 0.24814835, 0. , 0.2790274 ,\n", + " 0. , 0.09301151, 0.23771757, 0.33754006, 0.36559197]]),\n", + " 'run_needle_TF-SSM_w100_d8_nh1_sd1': array([[0. , 0.02694102, 0.00134409, 0. , 0. ,\n", + " 0.00130208, 0. , 0. , 0.00160256, 0.01819804],\n", + " [0.00268817, 0. , 0.00158228, 0. , 0. ,\n", + " 0. , 0.12280702, 0.12333333, 0.12544285, 0.24793784],\n", + " [0. , 0. , 0. , 0.0926879 , 0.16198355,\n", + " 0.14452441, 0.35482842, 0.58785331, 0.61351466, 0.49307847],\n", + " [0.05649718, 0.04375 , 0. , 0.00994318, 0.02970328,\n", + " 0.00520833, 0. , 0.10606061, 0. , 0. ],\n", + " [0.06818182, 0. , 0.00362319, 0. , 0.01959703,\n", + " 0.0078125 , 0. , 0.00138889, 0.0078125 , 0.01676829]]),\n", + " 'run_needle_TF-SSM_w20_d16_nh1_sd1': array([[0. , 0.00235849, 0.00574066, 0. , 0.03617032,\n", + " 0.00748863, 0.00457317, 0.00434816, 0.00748062, 0.01463924],\n", + " [0. , 0.00684932, 0. , 0. , 0. ,\n", + " 0.20561105, 0.30274132, 0.24172738, 0.00693942, 0.34015581],\n", + " [0.02688851, 0.00421627, 0. , 0.00637019, 0.20843595,\n", + " 0.25788891, 0.24711692, 0.33544821, 0.49040273, 0.78983158],\n", + " [0. , 0. , 0.00507733, 0.10648149, 0.32625347,\n", + " 0.5738166 , 0.86241096, 0.98263985, 0.86277115, 0.98496836],\n", + " [0.00496446, 0.0015625 , 0.01360041, 0.48896375, 0.37040964,\n", + " 0.73683339, 0.8185268 , 0.98466825, 0.98714238, 0.98682225]]),\n", + " 'run_needle_TF-TF_w20_d48_nh1_sd1': array([[0.0033717 , 0.10139903, 0.22469762, 0.14852533, 0.23242101,\n", + " 0.28662014, 0.26855969, 0.32915691, 0.34598842, 0.3796134 ],\n", + " [0.0147192 , 0.00219298, 0.16983837, 0.10235745, 0.28658009,\n", + " 0.35551211, 0.15586577, 0.32816821, 0.2520119 , 0.15902986],\n", + " [0.03823126, 0.0359375 , 0.11886459, 0.23914835, 0.27705997,\n", + " 0.30761087, 0.25783372, 0.31141609, 0.27237028, 0.27684116],\n", + " [0.01192096, 0.05064961, 0.10077129, 0.19312891, 0.17449494,\n", + " 0.29099244, 0.27490449, 0.27752262, 0.48372138, 0.13577944],\n", + " [0.0048273 , 0.07020338, 0.18323858, 0.11761954, 0.28599596,\n", + " 0.25164276, 0.37261462, 0.39557591, 0.34438953, 0.42277855]]),\n", + " 'run_needle_TF-SSM_w20_d8_nh1_sd1': array([[0. , 0.00277778, 0. , 0.00166667, 0.00132979,\n", + " 0.00746269, 0. , 0. , 0.04629757, 0.00509538],\n", + " [0.00189394, 0. , 0. , 0.37434995, 0.24772727,\n", + " 0.00223214, 0.24645948, 0. , 0.24654356, 0.37056714],\n", + " [0. , 0.01650943, 0. , 0.00431034, 0.00950169,\n", + " 0.07142857, 0.00378788, 0. , 0.00162338, 0.02604167],\n", + " [0.00138889, 0.12331309, 0.0676825 , 0.00164474, 0. ,\n", + " 0.22807971, 0.12397059, 0.14328548, 0.40792844, 0.49335015],\n", + " [0. , 0. , 0.01988636, 0. , 0.01008064,\n", + " 0.15291554, 0. , 0.12573932, 0. , 0.35800418]]),\n", + " 'run_needle_SSM-SSM_w100_d24_nh1_sd1': array([[0. , 0.33615986, 0.98499072, 0.98375911, 0.98691148,\n", + " 0.98491555, 0.98562747, 0.98718321, 0.98528808, 0.98597348],\n", + " [0.01476816, 0.98574585, 0.9865613 , 0.98233539, 0.98452359,\n", + " 0.98736846, 0.98511404, 0.9847368 , 0.98567498, 0.98486155],\n", + " [0.0112542 , 0.61249191, 0.98572707, 0.98446494, 0.98711294,\n", + " 0.98798311, 0.98528659, 0.98665506, 0.98493814, 0.98517728],\n", + " [0.01172337, 0.05698229, 0.98567593, 0.98480165, 0.9837628 ,\n", + " 0.98620105, 0.98758441, 0.98579782, 0.98665261, 0.98674494],\n", + " [0.12855791, 0.25983348, 0.98711342, 0.98545992, 0.98560268,\n", + " 0.98652464, 0.9855383 , 0.98667574, 0.98477399, 0.98571771]]),\n", + " 'run_needle_SSM-TF_w100_d12_nh1_sd1': array([[0. , 0.05892857, 0. , 0.37770462, 0.62403935,\n", + " 0.7348597 , 0.85379058, 0.77049482, 0.98353428, 0.98150349],\n", + " [0. , 0.13671604, 0.39860696, 0.43975776, 0.39079469,\n", + " 0.4523553 , 0.52254593, 0.45874617, 0.46305427, 0.45502284],\n", + " [0. , 0. , 0.73311383, 0.43556702, 0.98442233,\n", + " 0.98974043, 0.98661619, 0.98585433, 0.98407388, 0.98661 ],\n", + " [0. , 0.20055363, 0.42496237, 0.47867209, 0.7699368 ,\n", + " 0.97328776, 0.87755072, 0.98591226, 0.98877281, 0.98532295],\n", + " [0.06033951, 0.22371882, 0.37190083, 0.60923737, 0.51784652,\n", + " 0.68582231, 0.68217045, 0.90445662, 0.98096502, 0.97529268]]),\n", + " 'run_needle_SSM-TF_w20_d24_nh1_sd1': array([[0.09380954, 0.1587906 , 0.9862963 , 0.98782331, 0.98619074,\n", + " 0.98530251, 0.98544306, 0.98777032, 0.98411191, 0.98549676],\n", + " [0. , 0.01171875, 0.16013402, 0.6231761 , 0.97784108,\n", + " 0.97301644, 0.97981632, 0.98392785, 0.98348677, 0.98385626],\n", + " [0.16579188, 0.13740964, 0.51159364, 0.76655322, 0.98586643,\n", + " 0.98578739, 0.98709667, 0.9861412 , 0.98543251, 0.98792255],\n", + " [0.0728687 , 0.28041357, 0.94088984, 0.98489398, 0.98754829,\n", + " 0.98664379, 0.98676145, 0.98467875, 0.98693079, 0.98930734],\n", + " [0.14326127, 0.14821184, 0.11703897, 0.55300581, 0.98474312,\n", + " 0.98764211, 0.98524481, 0.98784596, 0.9853633 , 0.98605895]]),\n", + " 'run_needle_SSM-TF_w100_d48_nh1_sd1': array([[0.48472154, 0.65144014, 0.98584431, 0.98756909, 0.98632181,\n", + " 0.98535722, 0.98813248, 0.98512495, 0.98603517, 0.98597449],\n", + " [0.52626085, 0.48534361, 0.48355597, 0.52150881, 0.46792507,\n", + " 0.54621899, 0.49717429, 0.50686121, 0.55546111, 0.48982465],\n", + " [0.42227012, 0.98819315, 0.98708886, 0.98643512, 0.98617077,\n", + " 0.98909396, 0.98530036, 0.98496079, 0.98745292, 0.98505783],\n", + " [0.44312412, 0.98667425, 0.95531774, 0.98659521, 0.98638356,\n", + " 0.98872125, 0.98483193, 0.98536628, 0.98456186, 0.98415464],\n", + " [0.31732786, 0.78602481, 0.98549396, 0.98634368, 0.98724228,\n", + " 0.98656416, 0.98388433, 0.98700833, 0.98571622, 0.98580879]]),\n", + " 'run_needle_SSM-SSM_w100_d16_nh1_sd1': array([[0.00832049, 0.06310203, 0.15006761, 0.11588713, 0.01507329,\n", + " 0.01460925, 0.01356506, 0.01528442, 0.98867524, 0.98549831],\n", + " [0.13522489, 0.0143738 , 0.01478842, 0.01319326, 0.01422046,\n", + " 0.0152172 , 0.01509688, 0.01465195, 0.05722469, 0.0148509 ],\n", + " [0.0625606 , 0.01386447, 0.01502715, 0.01350028, 0.01353 ,\n", + " 0.01301802, 0.1102077 , 0.01269834, 0.01470692, 0.01458919],\n", + " [0.13175669, 0.0132997 , 0.01416084, 0.01263949, 0.03083344,\n", + " 0.01270217, 0.01514088, 0.01317215, 0.98748451, 0.98711461],\n", + " [0. , 0.10681063, 0.01569107, 0.01557685, 0.01394396,\n", + " 0.01466741, 0.01481043, 0.98531336, 0.98560011, 0.98392123]]),\n", + " 'run_needle_TF-TF_w100_d4_nh1_sd1': array([[0. , 0. , 0. , 0.1118421 , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0.07401316, 0. ,\n", + " 0.08090843, 0. , 0.0013587 , 0. , 0.00147059],\n", + " [0.03024193, 0. , 0. , 0.01724138, 0.01785714,\n", + " 0. , 0. , 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0.08203125, 0. ,\n", + " 0. , 0. , 0.00138889, 0.0482846 , 0. ],\n", + " [0.04521276, 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0.046875 , 0. ]]),\n", + " 'run_needle_TF-SSM_w20_d12_nh1_sd1': array([[0. , 0.03789806, 0. , 0.01067073, 0.05582099,\n", + " 0.00145349, 0.05687779, 0.00382184, 0.00984195, 0.0125119 ],\n", + " [0. , 0. , 0.00164474, 0.0015625 , 0.00297619,\n", + " 0.02835082, 0.0070576 , 0.00403329, 0.00490196, 0. ],\n", + " [0. , 0.00294118, 0.06209078, 0.0025 , 0.00670123,\n", + " 0.72958875, 0.972543 , 0.95420426, 0.90205038, 0.94711447],\n", + " [0.01148809, 0. , 0. , 0.04254863, 0.04380151,\n", + " 0.02122534, 0.01855656, 0.01827692, 0.01324074, 0.00204918],\n", + " [0. , 0.015625 , 0. , 0.00130208, 0. ,\n", + " 0.01204819, 0. , 0.01204773, 0.00211864, 0.01345011]]),\n", + " 'run_needle_SSM-TF_w20_d4_nh1_sd1': array([[0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0.12651037, 0.01639344,\n", + " 0. , 0.06557377, 0. , 0.00142045, 0. ],\n", + " [0.125 , 0. , 0. , 0. , 0. ,\n", + " 0.02472528, 0. , 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ]]),\n", + " 'run_needle_SSM-TF_w100_d8_nh1_sd1': array([[0. , 0. , 0.43548781, 0. , 0.12496219,\n", + " 0.36959344, 0.22267166, 0.70352352, 0.62417179, 0.6183722 ],\n", + " [0.1171875 , 0.21233249, 0. , 0.00130208, 0. ,\n", + " 0.24544099, 0.49475276, 0.61553568, 0.85838711, 0.79875535],\n", + " [0.12331558, 0.03918401, 0.05818966, 0.36912534, 0.6158638 ,\n", + " 0.62098879, 0.61843807, 0.98797113, 0.98496246, 0.9872632 ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0.125 , 0. ],\n", + " [0.15264058, 0. , 0. , 0.12365592, 0.00189394,\n", + " 0.24386251, 0.14324644, 0.35583565, 0.41502967, 0.62227112]]),\n", + " 'run_needle_TF-SSM_w100_d24_nh1_sd1': array([[0. , 0.04807692, 0. , 0.01809211, 0.00268848,\n", + " 0.04974338, 0.00130208, 0. , 0.00260445, 0.02083333],\n", + " [0.00143678, 0.04236779, 0.01005747, 0. , 0.1129642 ,\n", + " 0.03030428, 0. , 0. , 0. , 0.02982954],\n", + " [0.00198413, 0. , 0.00951187, 0.06932885, 0. ,\n", + " 0.0713895 , 0. , 0.00145349, 0.01728723, 0.00223214],\n", + " [0.01313077, 0.00646552, 0.00660511, 0.01667886, 0.0804686 ,\n", + " 0.06442698, 0.04390251, 0.01678197, 0.03659291, 0.05644838],\n", + " [0.00178571, 0. , 0.00384409, 0.00131579, 0. ,\n", + " 0.00444299, 0. , 0. , 0.0014881 , 0.1347212 ]]),\n", + " 'run_needle_SSM-SSM_w20_d20_nh1_sd1': array([[0.00921982, 0.00384615, 0.87616915, 0.98412681, 0.98612988,\n", + " 0.98668736, 0.98579592, 0.9863742 , 0.98411375, 0.98825866],\n", + " [0.01749434, 0.08183175, 0.05357143, 0.9518674 , 0.98597294,\n", + " 0.98549652, 0.98644042, 0.98732835, 0.98480356, 0.98738021],\n", + " [0.01203471, 0.24661139, 0.66112953, 0.98608994, 0.98579544,\n", + " 0.98583525, 0.98513317, 0.98361188, 0.98507226, 0.98656017],\n", + " [0.0115458 , 0.64289081, 0.98676419, 0.98522753, 0.98631483,\n", + " 0.98727369, 0.9842521 , 0.98690104, 0.98495054, 0.98485196],\n", + " [0. , 0. , 0.98464817, 0.9865014 , 0.98769373,\n", + " 0.98552167, 0.98658353, 0.98587507, 0.98625994, 0.98645699]]),\n", + " 'run_needle_TF-SSM_w100_d20_nh1_sd1': array([[0. , 0.10718445, 0.1008272 , 0.00294118, 0.0307545 ,\n", + " 0.02734375, 0.01168337, 0.03011225, 0.00140449, 0. ],\n", + " [0.00128866, 0.02360842, 0. , 0.00778565, 0.13537398,\n", + " 0. , 0.01054217, 0.05574324, 0.04921941, 0.00344975],\n", + " [0. , 0.00490196, 0.03115252, 0.1080436 , 0.00576178,\n", + " 0.1371557 , 0.09234259, 0.2517204 , 0.61297929, 0.40913653],\n", + " [0.12345679, 0.01175991, 0.01682692, 0. , 0.00333333,\n", + " 0.05641583, 0.00801282, 0.01805556, 0.05711864, 0. ],\n", + " [0. , 0.01424051, 0.0261194 , 0.12845947, 0.06044013,\n", + " 0.02564935, 0. , 0.02398437, 0. , 0.0081096 ]]),\n", + " 'run_needle_TF-SSM_w100_d48_nh1_sd1': array([[0.04789184, 0.00147059, 0.01691525, 0.02365122, 0.03180662,\n", + " 0.01507792, 0.07914374, 0.13366465, 0.02783564, 0.01482294],\n", + " [0. , 0. , 0.05457747, 0.00287094, 0. ,\n", + " 0.12951511, 0.00271771, 0.01315083, 0.0028873 , 0. ],\n", + " [0.08943066, 0.01679105, 0.00198413, 0.02440476, 0.00724638,\n", + " 0.00789474, 0. , 0. , 0.00394737, 0.00265957],\n", + " [0.07524212, 0.05219265, 0.02364177, 0.01588755, 0.17256019,\n", + " 0.01541264, 0.07301089, 0.02242956, 0.01416647, 0.01456439],\n", + " [0.00610587, 0.01701821, 0.98699385, 0.9863764 , 0.98857212,\n", + " 0.98486716, 0.98915792, 0.98761261, 0.98529118, 0.98379052]]),\n", + " 'run_needle_TF-SSM_w20_d24_nh1_sd1': array([[0.00805334, 0.00240385, 0.37619099, 0.98470718, 0.98724967,\n", + " 0.98598677, 0.9872064 , 0.98521227, 0.98686606, 0.98642147],\n", + " [0. , 0.0715808 , 0.01724138, 0.02751709, 0.00914502,\n", + " 0.00359239, 0.0122549 , 0.00789474, 0.01816933, 0.00423789],\n", + " [0.00178571, 0.01123642, 0.0041083 , 0.16791072, 0. ,\n", + " 0.27451098, 0.76345766, 0.62388772, 0.72778785, 0.87452906],\n", + " [0.02406688, 0.12316176, 0.12571466, 0.369526 , 0.38934845,\n", + " 0.3693912 , 0.3680051 , 0.00331197, 0.73597038, 0.73918664],\n", + " [0.05025792, 0.00158228, 0.49142981, 0.98586607, 0.98513186,\n", + " 0.98650241, 0.98928809, 0.98540044, 0.98445815, 0.98700213]]),\n", + " 'run_needle_TF-TF_w100_d12_nh1_sd1': array([[0.0974067 , 0.0106383 , 0.10292023, 0.00324675, 0. ,\n", + " 0. , 0. , 0.00134409, 0.00147059, 0.03037655],\n", + " [0. , 0.01218535, 0.00294118, 0.00328947, 0. ,\n", + " 0.0294409 , 0. , 0. , 0.05758427, 0. ],\n", + " [0. , 0.00416667, 0.04545455, 0. , 0. ,\n", + " 0.00576923, 0. , 0.08192479, 0.02061856, 0.02796053],\n", + " [0.00178571, 0. , 0. , 0. , 0.00635593,\n", + " 0. , 0. , 0. , 0. , 0. ],\n", + " [0. , 0. , 0.01508621, 0. , 0.10267857,\n", + " 0. , 0. , 0.01915205, 0.02563966, 0.00176056]]),\n", + " 'run_needle_TF-TF_w20_d4_nh1_sd1': array([[0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0. , 0.03508772,\n", + " 0. , 0. , 0. , 0. , 0.00395349],\n", + " [0. , 0. , 0.00154321, 0.02325581, 0.03180387,\n", + " 0.04105454, 0. , 0.03029997, 0. , 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0.125 , 0. , 0. ],\n", + " [0. , 0.0237069 , 0. , 0. , 0. ,\n", + " 0.02853261, 0. , 0. , 0. , 0. ]]),\n", + " 'run_needle_TF-SSM_w100_d32_nh1_sd1': array([[0.02178309, 0.00294118, 0. , 0.04230114, 0. ,\n", + " 0.01106627, 0. , 0. , 0.09470761, 0.06847084],\n", + " [0.01402439, 0. , 0. , 0.00271739, 0.08799996,\n", + " 0. , 0. , 0.06407388, 0.1278283 , 0. ],\n", + " [0.00386598, 0.00257732, 0.00160256, 0.00142045, 0.01764943,\n", + " 0.01713246, 0.02155903, 0.0153 , 0.01550882, 0.04887828],\n", + " [0. , 0.00394737, 0.02116936, 0.00223214, 0.00391996,\n", + " 0. , 0.01624053, 0.00390625, 0. , 0.05416667],\n", + " [0.00131579, 0.02401195, 0.04258541, 0.00879893, 0. ,\n", + " 0. , 0.00173611, 0.00396825, 0.00257732, 0.00685426]]),\n", + " 'run_needle_TF-TF_w20_d20_nh1_sd1': array([[0.01181559, 0. , 0. , 0.00181159, 0.07463931,\n", + " 0.01575785, 0.00549801, 0.00585586, 0.00936911, 0.01753001],\n", + " [0.0119863 , 0.03033021, 0.07185239, 0.00660958, 0.00887784,\n", + " 0.01225006, 0.02543662, 0.02227248, 0.07067048, 0.04373528],\n", + " [0.04493953, 0.00372024, 0.013798 , 0.00320513, 0.01312715,\n", + " 0.05094486, 0.01494951, 0.01932235, 0.00682745, 0. ],\n", + " [0.00559701, 0. , 0.02801724, 0.077989 , 0.00882353,\n", + " 0.07876158, 0.17094538, 0.14349343, 0.11878335, 0.07116335],\n", + " [0. , 0.00257732, 0.00223214, 0.03948489, 0.03289549,\n", + " 0.03239168, 0.03809086, 0.00822134, 0.04210991, 0.00884894]]),\n", + " 'run_needle_TF-SSM_w20_d32_nh1_sd1': array([[0.01079546, 0. , 0.02808095, 0.02452293, 0.01212909,\n", + " 0.03065004, 0.01479576, 0.51937276, 0.4609699 , 0.54251689],\n", + " [0.00756389, 0.20208582, 0.49419221, 0.9864347 , 0.98459673,\n", + " 0.98564291, 0.98520619, 0.98474288, 0.98429739, 0.98638129],\n", + " [0. , 0.13104235, 0.39239648, 0.98444879, 0.98423404,\n", + " 0.98454964, 0.98551828, 0.98506832, 0.98516691, 0.98615646],\n", + " [0.00844432, 0.12455908, 0.09457672, 0.57406336, 0.9818337 ,\n", + " 0.9661718 , 0.98600668, 0.98713022, 0.98806512, 0.9860338 ],\n", + " [0.00892841, 0.00588235, 0.4909631 , 0.61502886, 0.98451698,\n", + " 0.98354971, 0.98781455, 0.98462808, 0.98564523, 0.98534238]]),\n", + " 'run_needle_SSM-TF_w20_d16_nh1_sd1': array([[0. , 0. , 0. , 0.00555556, 0.80718756,\n", + " 0.56865621, 0.778449 , 0.74549305, 0.69657791, 0.96356124],\n", + " [0.025 , 0.13167432, 0.02992017, 0.3541809 , 0.73953384,\n", + " 0.80820197, 0.72663277, 0.66028154, 0.8907733 , 0.98641258],\n", + " [0.00173611, 0.02253987, 0.25806391, 0.80446523, 0.90008295,\n", + " 0.68984884, 0.90589899, 0.98818672, 0.98450756, 0.98663485],\n", + " [0.09821428, 0.06911898, 0.00189394, 0.1614418 , 0.60846514,\n", + " 0.6080327 , 0.7155273 , 0.61339444, 0.9829793 , 0.96693277],\n", + " [0.01470955, 0.00152439, 0.12616432, 0.09605263, 0.26062763,\n", + " 0.0256899 , 0.26891822, 0.38277248, 0.27382943, 0.35596794]]),\n", + " 'run_needle_SSM-TF_w100_d24_nh1_sd1': array([[0.18168423, 0.86241078, 0.98854291, 0.98435223, 0.98627341,\n", + " 0.98562622, 0.98645425, 0.98681146, 0.98415941, 0.98747975],\n", + " [0.12157534, 0.98362654, 0.985641 , 0.98631108, 0.98686099,\n", + " 0.98623574, 0.98597318, 0.9864347 , 0.98673457, 0.98573971],\n", + " [0.0842803 , 0.57741988, 0.98584265, 0.98325735, 0.98652786,\n", + " 0.98483759, 0.98481929, 0.98539197, 0.98640424, 0.98540086],\n", + " [0.21149075, 0.97197807, 0.98617375, 0.98538744, 0.98489392,\n", + " 0.98709148, 0.98594058, 0.98411179, 0.98732889, 0.9856506 ],\n", + " [0.24933676, 0.94060129, 0.9873293 , 0.98641652, 0.98693347,\n", + " 0.98659247, 0.98727387, 0.98734283, 0.98607427, 0.98572963]]),\n", + " 'run_needle_TF-TF_w20_d16_nh1_sd1': array([[0. , 0. , 0.01565016, 0.00142045, 0. ,\n", + " 0.00128866, 0.01041667, 0.0042007 , 0.00490196, 0.05180992],\n", + " [0.00173611, 0.00362319, 0.01056338, 0.00259074, 0.06148826,\n", + " 0.00362623, 0.00476088, 0.00994951, 0.00632911, 0. ],\n", + " [0.01261935, 0.06373403, 0.01013513, 0.0242196 , 0. ,\n", + " 0.00865385, 0.00314032, 0.04171573, 0.01241653, 0.00412641],\n", + " [0.00352113, 0.0394123 , 0.00297619, 0.00231481, 0.05322901,\n", + " 0.02802044, 0.00277778, 0.00945464, 0.00143678, 0.04573274],\n", + " [0.00219298, 0. , 0.03010033, 0.00198413, 0. ,\n", + " 0.02424242, 0.01896327, 0.08235037, 0.01961114, 0.01498671]]),\n", + " 'run_needle_TF-TF_w100_d48_nh1_sd1': array([[0. , 0.73930603, 0.24481826, 0.49321181, 0.36982059,\n", + " 0.49378949, 0.73965585, 0.4940033 , 0.61545837, 0.73986238],\n", + " [0.0967432 , 0. , 0.49542823, 0.36442724, 0.36893162,\n", + " 0.61604965, 0.49356765, 0.61736178, 0.49385664, 0.61633396],\n", + " [0.0229862 , 0.00189394, 0.50649834, 0.85105246, 0.97201711,\n", + " 0.98542702, 0.98404121, 0.98492956, 0.98592162, 0.98501921],\n", + " [0. , 0.01267237, 0.27138221, 0.48503989, 0.61004508,\n", + " 0.85115415, 0.9793238 , 0.98714554, 0.98635721, 0.98726219],\n", + " [0.0046875 , 0.06236727, 0.34826115, 0.97542512, 0.98533881,\n", + " 0.98614913, 0.98539877, 0.98527455, 0.98651052, 0.98545218]]),\n", + " 'run_needle_SSM-TF_w20_d20_nh1_sd1': array([[0. , 0.23060083, 0.3005895 , 0.28780416, 0.26093888,\n", + " 0.26332495, 0.2444167 , 0.28834638, 0.2741749 , 0.33722639],\n", + " [0.0075 , 0.25722486, 0.69172728, 0.73706657, 0.9671855 ,\n", + " 0.98031187, 0.98649323, 0.98545027, 0.98449022, 0.98569441],\n", + " [0.07619024, 0.86342424, 0.97569972, 0.98545319, 0.98828602,\n", + " 0.98650354, 0.98629034, 0.98648167, 0.98641592, 0.98684484],\n", + " [0.01639344, 0.12319588, 0.24717352, 0.27282614, 0.74253476,\n", + " 0.44694552, 0.7388292 , 0.86454111, 0.98517925, 0.98577219],\n", + " [0.02407212, 0.10895736, 0.09556613, 0.98562187, 0.98590112,\n", + " 0.98667586, 0.9863252 , 0.98934233, 0.98592681, 0.98514211]]),\n", + " 'run_needle_TF-SSM_w100_d4_nh1_sd1': array([[0. , 0.12053572, 0.0625 , 0.00439199, 0. ,\n", + " 0.00223214, 0. , 0.06805556, 0.22225587, 0. ],\n", + " [0.05191922, 0. , 0. , 0. , 0. ,\n", + " 0.12228261, 0.12521286, 0. , 0.34908459, 0.00531915],\n", + " [0. , 0. , 0. , 0.00932836, 0. ,\n", + " 0.00162338, 0.00357143, 0. , 0.04807692, 0.00925926],\n", + " [0. , 0. , 0. , 0.00902062, 0. ,\n", + " 0.00833333, 0. , 0. , 0.01388889, 0. ],\n", + " [0.04850746, 0. , 0. , 0. , 0. ,\n", + " 0. , 0.04561542, 0.00257732, 0.06640625, 0. ]]),\n", + " 'run_needle_TF-TF_w100_d24_nh1_sd1': array([[0.00551471, 0.0106383 , 0. , 0.07058824, 0.02192982,\n", + " 0.16712633, 0.26475769, 0.44780433, 0.26691359, 0.15138945],\n", + " [0. , 0.03647215, 0. , 0.01470588, 0.10186689,\n", + " 0.12808596, 0.29747152, 0.24639134, 0. , 0.29571486],\n", + " [0.01388889, 0. , 0.00412088, 0.0138352 , 0.0058114 ,\n", + " 0. , 0. , 0.00951868, 0.00386598, 0. ],\n", + " [0. , 0.01865672, 0.12767437, 0.12352941, 0.16829467,\n", + " 0.35636044, 0.56327242, 0.61641121, 0.45829275, 0.50254655],\n", + " [0. , 0.015625 , 0.00186567, 0.06697613, 0.00959956,\n", + " 0.03070042, 0. , 0. , 0.00128866, 0.15248315]]),\n", + " 'run_needle_SSM-SSM_w20_d4_nh1_sd1': array([[0. , 0. , 0. , 0. , 0. ,\n", + " 0.12318841, 0. , 0.00626209, 0. , 0. ],\n", + " [0. , 0. , 0. , 0.125 , 0. ,\n", + " 0. , 0. , 0. , 0. , 0.00152439],\n", + " [0. , 0. , 0. , 0. , 0.00487013,\n", + " 0. , 0.00342466, 0.00279338, 0. , 0. ],\n", + " [0. , 0. , 0.00284091, 0. , 0. ,\n", + " 0. , 0. , 0.12254902, 0. , 0.12371134],\n", + " [0.125 , 0. , 0. , 0. , 0.125 ,\n", + " 0. , 0. , 0. , 0. , 0. ]]),\n", + " 'run_needle_SSM-SSM_w20_d24_nh1_sd1': array([[0.00539037, 0.01585267, 0.01360867, 0.00394077, 0.98766798,\n", + " 0.98561388, 0.98592782, 0.98558462, 0.98625445, 0.98534012],\n", + " [0.01280079, 0.06692571, 0.01546881, 0.01932458, 0.01310286,\n", + " 0.98586714, 0.98633993, 0.9868533 , 0.98554176, 0.98692232],\n", + " [0.00803033, 0. , 0.01514122, 0.01493111, 0.01394993,\n", + " 0.01462866, 0.01562996, 0.01355859, 0.01395721, 0.05096762],\n", + " [0. , 0.737804 , 0.86984599, 0.98564869, 0.98686159,\n", + " 0.98491859, 0.98714155, 0.98585504, 0.98563814, 0.98608923],\n", + " [0.00804604, 0.01142216, 0.21373801, 0.98612273, 0.98686129,\n", + " 0.98504341, 0.98566884, 0.98504323, 0.98708707, 0.98699248]]),\n", + " 'run_needle_SSM-TF_w100_d16_nh1_sd1': array([[0.00409946, 0.47623777, 0.8640455 , 0.98636103, 0.98699343,\n", + " 0.98286086, 0.98651886, 0.98584032, 0.98613316, 0.98690939],\n", + " [0. , 0.49552387, 0.86242151, 0.98542279, 0.98650873,\n", + " 0.98522896, 0.98541105, 0.99122834, 0.98624671, 0.98684812],\n", + " [0.07440476, 0.201511 , 0.25085783, 0.52987885, 0.98621535,\n", + " 0.98593527, 0.98559105, 0.98473561, 0.98550457, 0.98512423],\n", + " [0.10961539, 0.49568814, 0.49437642, 0.78536749, 0.98627704,\n", + " 0.98602271, 0.98589838, 0.98890352, 0.98775566, 0.98574722],\n", + " [0. , 0.48315224, 0.59221828, 0.98178649, 0.98972285,\n", + " 0.98753154, 0.98671252, 0.98631018, 0.98520136, 0.9845953 ]]),\n", + " 'run_needle_TF-TF_w100_d16_nh1_sd1': array([[0. , 0. , 0.10204542, 0. , 0. ,\n", + " 0.02213542, 0.14692691, 0.05434782, 0. , 0. ],\n", + " [0. , 0. , 0.08785266, 0. , 0.00128866,\n", + " 0. , 0.01157593, 0.00128866, 0.00235849, 0.00403226],\n", + " [0. , 0.03571429, 0. , 0.04872881, 0. ,\n", + " 0. , 0.00158228, 0.00557116, 0.01415094, 0.00681323],\n", + " [0.00914634, 0. , 0.01290412, 0. , 0.05698529,\n", + " 0.02486559, 0. , 0. , 0.10060976, 0.02119012],\n", + " [0. , 0. , 0.00128866, 0.06597222, 0.09 ,\n", + " 0.01623127, 0.03268239, 0.02774369, 0.0731383 , 0.00679348]]),\n", + " 'run_needle_SSM-TF_w100_d32_nh1_sd1': array([[0.48541284, 0.50029922, 0.53758168, 0.98439902, 0.98727447,\n", + " 0.98417825, 0.98600143, 0.98428297, 0.98752278, 0.98766685],\n", + " [0.18431225, 0.98688608, 0.98694921, 0.98437893, 0.98436457,\n", + " 0.98722637, 0.98661959, 0.98720914, 0.98654443, 0.98472434],\n", + " [0.50237292, 0.63732779, 0.98732543, 0.98613209, 0.9858675 ,\n", + " 0.98603785, 0.98683041, 0.98614919, 0.98548222, 0.98612589],\n", + " [0.31383371, 0.98636264, 0.98618847, 0.98613441, 0.98530114,\n", + " 0.98421538, 0.9873538 , 0.98595178, 0.98474252, 0.98469144],\n", + " [0.12586167, 0.98394531, 0.98825008, 0.98727548, 0.98624229,\n", + " 0.98644751, 0.98750055, 0.98575741, 0.9876616 , 0.98425698]]),\n", + " 'run_needle_SSM-TF_w20_d12_nh1_sd1': array([[0.03515625, 0. , 0.05850232, 0.04189561, 0.01973684,\n", + " 0.02205882, 0.00235849, 0.03622786, 0.04187423, 0.07680611],\n", + " [0. , 0.00395955, 0.00857023, 0.06478279, 0.06296553,\n", + " 0.10897001, 0.18673073, 0.15183389, 0.15099667, 0.22563168],\n", + " [0.0625 , 0.009375 , 0.00204918, 0.02226191, 0.03223814,\n", + " 0.02286585, 0.09084149, 0.05266031, 0.09755051, 0.04238163],\n", + " [0. , 0.03776042, 0.02604167, 0.07226562, 0.10776392,\n", + " 0.09588696, 0.0863884 , 0.10669656, 0.19580239, 0.2192135 ],\n", + " [0. , 0. , 0.08395258, 0. , 0.0743902 ,\n", + " 0.06684441, 0.06466082, 0.05545285, 0.02165262, 0.02097153]]),\n", + " 'run_needle_TF-TF_w20_d8_nh1_sd1': array([[0.00877193, 0. , 0.00131579, 0.00215517, 0.02777778,\n", + " 0.01408451, 0.01371873, 0.00324675, 0.01155149, 0.05985584],\n", + " [0.03970588, 0. , 0.0125 , 0.02240703, 0.00373134,\n", + " 0.00438988, 0.01096151, 0.0078658 , 0. , 0.04173431],\n", + " [0. , 0.0297619 , 0.00304922, 0. , 0.00387529,\n", + " 0.00128866, 0.00168919, 0.00204918, 0.02911995, 0. ],\n", + " [0. , 0.00152439, 0.01204819, 0.00150602, 0.00607662,\n", + " 0.04449967, 0. , 0. , 0.01672626, 0.00297788],\n", + " [0. , 0.03794643, 0.00694444, 0.00181159, 0.00540919,\n", + " 0.00480769, 0.03146828, 0.00407609, 0.00778169, 0.02006417]]),\n", + " 'run_needle_TF-SSM_w20_d48_nh1_sd1': array([[0.02414084, 0.03259381, 0.00703735, 0.01520084, 0.01027788,\n", + " 0.02910332, 0.02673523, 0.02895215, 0.02539813, 0.01298551],\n", + " [0.03386733, 0.02340738, 0.0478091 , 0.06331495, 0.01762264,\n", + " 0.03815175, 0.0355875 , 0.04342977, 0.03553811, 0.01440481],\n", + " [0.01494141, 0.02196165, 0.01691479, 0.02273027, 0.0014881 ,\n", + " 0.244359 , 0.06299198, 0.26132596, 0.1038055 , 0.36814919],\n", + " [0.0259288 , 0.01553177, 0.01218881, 0.61559451, 0.86387086,\n", + " 0.86468035, 0.98593104, 0.98606646, 0.98339367, 0.98681468],\n", + " [0.02334193, 0.00753275, 0.00808895, 0.00965278, 0.08105944,\n", + " 0.00642984, 0.05887116, 0.02951828, 0.01130652, 0.17269455]]),\n", + " 'run_needle_TF-SSM_w20_d20_nh1_sd1': array([[0.00406746, 0.00753152, 0.02173639, 0.00164474, 0.03591954,\n", + " 0.00215517, 0.24463372, 0.24474794, 0.00540619, 0.12862748],\n", + " [0.00662346, 0.00354793, 0.01131294, 0.12544709, 0.4696649 ,\n", + " 0.95425481, 0.98372489, 0.98798329, 0.98626703, 0.98660851],\n", + " [0. , 0.01125192, 0.26079622, 0.98711187, 0.98518652,\n", + " 0.98688024, 0.98638165, 0.98724866, 0.98947603, 0.98457104],\n", + " [0.00173611, 0.0204918 , 0. , 0.12259615, 0.24252762,\n", + " 0.24617539, 0.36937755, 0.41389966, 0.8439815 , 0.43317974],\n", + " [0.00566254, 0.00271739, 0.12801535, 0.03099404, 0.64261711,\n", + " 0.73837101, 0.1311613 , 0.75194442, 0.96712011, 0.92590666]]),\n", + " 'run_needle_SSM-TF_w20_d48_nh1_sd1': array([[0.00362319, 0. , 0. , 0. , 0. ,\n", + " 0.00992064, 0.12050988, 0.13997506, 0.16634749, 0.14425912],\n", + " [0.13166374, 0.9862926 , 0.98478609, 0.9867717 , 0.98575932,\n", + " 0.9864583 , 0.98702979, 0.98870224, 0.9863444 , 0.98550123],\n", + " [0. , 0.07604294, 0.16170111, 0.56530339, 0.98716766,\n", + " 0.98627955, 0.98610622, 0.9879151 , 0.98684025, 0.98558521],\n", + " [0.00297619, 0. , 0. , 0. , 0.00724638,\n", + " 0.01286526, 0.07396765, 0.27168286, 0.14088635, 0.18234891],\n", + " [0.02083333, 0. , 0.00160256, 0.01367541, 0.02528029,\n", + " 0.1226062 , 0.09992314, 0.14508805, 0.16375592, 0.13884044]]),\n", + " 'run_needle_TF-SSM_w20_d4_nh1_sd1': array([[0. , 0.03085855, 0. , 0.00446429, 0. ,\n", + " 0. , 0. , 0.00297619, 0. , 0. ],\n", + " [0. , 0. , 0.01329787, 0. , 0. ,\n", + " 0. , 0. , 0.0376506 , 0. , 0. ],\n", + " [0. , 0.11516854, 0.05 , 0. , 0. ,\n", + " 0. , 0. , 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0.00201613, 0. , 0. , 0.12183544, 0. ],\n", + " [0. , 0.00471698, 0.00474045, 0.0777439 , 0. ,\n", + " 0. , 0. , 0. , 0. , 0.24333856]]),\n", + " 'run_needle_SSM-SSM_w100_d32_nh1_sd1': array([[0.00754413, 0.01453463, 0.01274898, 0.01448675, 0.98107034,\n", + " 0.98442906, 0.9863739 , 0.98644775, 0.98646325, 0.98446572],\n", + " [0.0133213 , 0.0133897 , 0.98588157, 0.98522723, 0.98438704,\n", + " 0.98617846, 0.98471606, 0.9877339 , 0.98438931, 0.98689622],\n", + " [0.125421 , 0.1684157 , 0.98526812, 0.98502612, 0.98507303,\n", + " 0.98594731, 0.98695183, 0.98521918, 0.98578143, 0.98414862],\n", + " [0.01012502, 0.01303634, 0.01604337, 0.06305926, 0.98701769,\n", + " 0.98598045, 0.98628533, 0.98573357, 0.98531473, 0.98685062],\n", + " [0.01360444, 0.13426873, 0.98499453, 0.985116 , 0.98454058,\n", + " 0.98642629, 0.98649091, 0.98461103, 0.98529458, 0.98588091]]),\n", + " 'run_needle_TF-TF_w100_d20_nh1_sd1': array([[0. , 0.00143678, 0.00173611, 0.08259527, 0. ,\n", + " 0.00164474, 0. , 0. , 0.01264045, 0. ],\n", + " [0. , 0. , 0.0070837 , 0. , 0.00271739,\n", + " 0. , 0.00412088, 0.00131579, 0. , 0.05308242],\n", + " [0. , 0. , 0.00338862, 0.00128866, 0. ,\n", + " 0.01333333, 0. , 0. , 0.03954991, 0. ],\n", + " [0. , 0. , 0. , 0.00143678, 0. ,\n", + " 0.01188625, 0. , 0. , 0.00290698, 0. ],\n", + " [0. , 0.00735294, 0.00162338, 0. , 0.03571429,\n", + " 0.06897096, 0.00373134, 0.0766129 , 0.00324214, 0. ]]),\n", + " 'run_needle_SSM-TF_w100_d4_nh1_sd1': array([[0. , 0. , 0. , 0. , 0.03938356,\n", + " 0. , 0.07399426, 0.06136364, 0.02743902, 0. ],\n", + " [0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0.12345679, 0.125 , 0. ],\n", + " [0. , 0. , 0. , 0. , 0.17731875,\n", + " 0. , 0. , 0. , 0. , 0. ],\n", + " [0. , 0. , 0. , 0. , 0.03246753,\n", + " 0.02941176, 0. , 0. , 0.12096774, 0. ],\n", + " [0. , 0.00131579, 0.00471698, 0. , 0.06833334,\n", + " 0.00134409, 0.11490704, 0.04213483, 0.00183824, 0.14194444]]),\n", + " 'run_needle_TF-SSM_w100_d12_nh1_sd1': array([[0. , 0.00383471, 0.00147059, 0.12028302, 0.4604049 ,\n", + " 0.86579263, 0.98607975, 0.98649073, 0.98664796, 0.98563975],\n", + " [0. , 0.00131579, 0.01842723, 0.00131579, 0.00914474,\n", + " 0.12365624, 0.48859695, 0.40721467, 0.36989972, 0.73801386],\n", + " [0. , 0.12053572, 0.02314815, 0.43481082, 0.61209095,\n", + " 0.83244067, 0.87081885, 0.98641515, 0.98955142, 0.98640752],\n", + " [0. , 0.02464789, 0.12337662, 0.36561561, 0.12310606,\n", + " 0.73914784, 0.48919475, 0.8629939 , 0.74101561, 0.73802316],\n", + " [0.01939655, 0. , 0.1108871 , 0.00128866, 0.00128866,\n", + " 0.02044399, 0.00297785, 0.04285714, 0. , 0. ]]),\n", + " 'run_needle_TF-TF_w100_d32_nh1_sd1': array([[0.03269231, 0.00438596, 0.01488904, 0. , 0.05985916,\n", + " 0.12585977, 0.38734329, 0.3944194 , 0.51515394, 0.57935512],\n", + " [0.01056415, 0.00284091, 0. , 0. , 0. ,\n", + " 0.04532967, 0.00872093, 0.00903404, 0.01907758, 0.04031549],\n", + " [0. , 0. , 0.00274725, 0.00128866, 0.22772436,\n", + " 0.36603889, 0.41726598, 0.524113 , 0.61757022, 0.71370405],\n", + " [0. , 0. , 0.02586207, 0.00277778, 0. ,\n", + " 0.00641026, 0.01668521, 0.07684691, 0.68745768, 0.24138561],\n", + " [0.0718032 , 0. , 0.02286585, 0.01154379, 0.08685058,\n", + " 0.12424399, 0.44567853, 0.59374762, 0.35922378, 0.53743047]]),\n", + " 'run_needle_SSM-SSM_w100_d20_nh1_sd1': array([[0.73949528, 0.98579007, 0.98626989, 0.98523492, 0.98491073,\n", + " 0.98649764, 0.9854306 , 0.9855125 , 0.98669255, 0.98495495],\n", + " [0.00888369, 0.48925954, 0.97131729, 0.97154367, 0.98663211,\n", + " 0.98486352, 0.98615217, 0.98549014, 0.98577398, 0.98398936],\n", + " [0.00923019, 0.24981806, 0.84654391, 0.98428154, 0.98627496,\n", + " 0.98464239, 0.98527956, 0.98376727, 0.98596811, 0.98443872],\n", + " [0.08998512, 0.98563272, 0.98628819, 0.98772669, 0.985762 ,\n", + " 0.98667097, 0.98629755, 0.98494738, 0.9864704 , 0.98578918],\n", + " [0.27940133, 0.9839772 , 0.98686528, 0.98853552, 0.98449761,\n", + " 0.98519474, 0.98654532, 0.98529255, 0.98644239, 0.98527414]]),\n", + " 'run_needle_SSM-TF_w20_d32_nh1_sd1': array([[0.04196665, 0.98675126, 0.98705029, 0.98425102, 0.98601472,\n", + " 0.98581302, 0.9867211 , 0.98546094, 0.98697466, 0.98579705],\n", + " [0.04180299, 0.1344694 , 0.98572946, 0.983522 , 0.98740733,\n", + " 0.98711258, 0.98566616, 0.98577553, 0.98573834, 0.98662448],\n", + " [0.00842697, 0.98634553, 0.98373973, 0.9868595 , 0.98635888,\n", + " 0.98616022, 0.98442453, 0.98642826, 0.9850328 , 0.98653162],\n", + " [0.09201389, 0.98287237, 0.98572868, 0.98591453, 0.98598284,\n", + " 0.98696011, 0.98613882, 0.9874391 , 0.98412281, 0.98704785],\n", + " [0.12212646, 0.18390027, 0.98732108, 0.98517096, 0.98618287,\n", + " 0.98511446, 0.98571426, 0.98530304, 0.98849702, 0.98711765]]),\n", + " 'run_needle_SSM-SSM_w20_d48_nh1_sd1': array([[0.05264826, 0.01489394, 0.07087395, 0.05401458, 0.85377789,\n", + " 0.98595423, 0.98518038, 0.98660219, 0.98672956, 0.98469627],\n", + " [0.00245098, 0.98598057, 0.98553115, 0.98674428, 0.9867357 ,\n", + " 0.98617435, 0.98533779, 0.986206 , 0.98683953, 0.98728484],\n", + " [0.98530567, 0.98680532, 0.98476648, 0.98602873, 0.98361158,\n", + " 0.9855091 , 0.98441124, 0.98643118, 0.9861601 , 0.98599583],\n", + " [0.01589577, 0.98194051, 0.98406053, 0.98646051, 0.98568058,\n", + " 0.98500222, 0.98537457, 0.98717391, 0.98539412, 0.98515612],\n", + " [0.00385547, 0.98554307, 0.98678517, 0.98456156, 0.98401141,\n", + " 0.98576564, 0.98768622, 0.98506707, 0.98528415, 0.98552197]]),\n", + " 'run_needle_TF-SSM_w100_d16_nh1_sd1': array([[0.00301205, 0.02472616, 0.00240385, 0.00260417, 0.00386598,\n", + " 0.01175251, 0.01351692, 0.00336799, 0.04415988, 0.0101626 ],\n", + " [0.10999927, 0.02054795, 0. , 0.05457453, 0. ,\n", + " 0.08985867, 0.02328659, 0.00746702, 0.00268817, 0. ],\n", + " [0. , 0.01296875, 0.02592711, 0.00854167, 0.01702489,\n", + " 0.00189394, 0.01201115, 0.00883043, 0.00711044, 0.01945479],\n", + " [0.04252886, 0.00128866, 0.01436782, 0. , 0.00877193,\n", + " 0.02649094, 0.03075043, 0.00747521, 0.02171319, 0.0258846 ],\n", + " [0. , 0.00231481, 0.01263477, 0.00489732, 0.01080104,\n", + " 0.02545329, 0.01006825, 0.01996041, 0.03510134, 0.02830705]]),\n", + " 'run_needle_SSM-SSM_w20_d16_nh1_sd1': array([[0.00558829, 0.04182467, 0.74071079, 0.98331058, 0.98742521,\n", + " 0.98475635, 0.98678839, 0.98720074, 0.98519653, 0.98624182],\n", + " [0. , 0.00811278, 0.23193099, 0.61632258, 0.98356146,\n", + " 0.98523206, 0.98405176, 0.98598486, 0.98655736, 0.9868626 ],\n", + " [0.00643107, 0.29315868, 0.98700935, 0.9875291 , 0.98596066,\n", + " 0.98787087, 0.98760319, 0.9865222 , 0.98619056, 0.98516989],\n", + " [0.01361894, 0.49040759, 0.98686862, 0.98691213, 0.9846189 ,\n", + " 0.98715919, 0.98433965, 0.98701453, 0.98597151, 0.98826051],\n", + " [0. , 0. , 0.647488 , 0.72850716, 0.98233092,\n", + " 0.98547208, 0.98744881, 0.98812085, 0.98605376, 0.98772043]]),\n", + " 'run_needle_SSM-SSM_w20_d32_nh1_sd1': array([[0.01778642, 0.06952978, 0.01732417, 0.50222641, 0.98642182,\n", + " 0.98475194, 0.98707652, 0.98519242, 0.9863199 , 0.98730278],\n", + " [0.01772546, 0.62031305, 0.98933119, 0.98647773, 0.9862355 ,\n", + " 0.98544258, 0.9863168 , 0.98511803, 0.9854781 , 0.98532432],\n", + " [0.25097743, 0.98599648, 0.98609513, 0.9850871 , 0.98627299,\n", + " 0.98506212, 0.98909163, 0.98628283, 0.98496866, 0.98724908],\n", + " [0.00350267, 0.77639341, 0.9864642 , 0.98841983, 0.98665929,\n", + " 0.98515701, 0.98506731, 0.98664302, 0.98493546, 0.98449534],\n", + " [0.07895478, 0.49759737, 0.98548841, 0.98482621, 0.98708653,\n", + " 0.98651111, 0.98451984, 0.98702407, 0.98544759, 0.98491418]]),\n", + " 'run_needle_SSM-SSM_w20_d12_nh1_sd1': array([[0.0049567 , 0.00227273, 0. , 0.61508453, 0.61605036,\n", + " 0.4018774 , 0.86224198, 0.86481166, 0.86386877, 0.98449212],\n", + " [0.00921942, 0.00332757, 0.00240385, 0. , 0.24518488,\n", + " 0.12637429, 0. , 0.12083333, 0.06775343, 0.16844405],\n", + " [0.12687078, 0.36454096, 0.9851203 , 0.98631662, 0.98603141,\n", + " 0.98531747, 0.98260444, 0.98610967, 0.98665428, 0.98699576],\n", + " [0.01257432, 0.00541684, 0.08843894, 0.00812786, 0.62677222,\n", + " 0.98348153, 0.98728228, 0.98564726, 0.98650515, 0.9856202 ],\n", + " [0.01173254, 0.00612707, 0. , 0.61257803, 0.67445791,\n", + " 0.77888501, 0.89317 , 0.94783098, 0.98494184, 0.98226565]]),\n", + " 'run_needle_SSM-SSM_w100_d12_nh1_sd1': array([[0.00999483, 0.01178967, 0.12416666, 0.12206328, 0.00469535,\n", + " 0.36856678, 0.86131328, 0.73855561, 0.49367025, 0.95569789],\n", + " [0.00338085, 0.24838801, 0.98367631, 0.9846946 , 0.98473871,\n", + " 0.98647881, 0.98831213, 0.9859013 , 0.98668909, 0.98414093],\n", + " [0.01277232, 0.01190876, 0.06688493, 0.00525058, 0. ,\n", + " 0.01012254, 0.24192162, 0.3706719 , 0.2497896 , 0.11954133],\n", + " [0.00142045, 0.003125 , 0.12254902, 0.91789728, 0.98565269,\n", + " 0.98461235, 0.98505098, 0.98439586, 0.98412377, 0.98700869],\n", + " [0. , 0.12564935, 0.60870612, 0.98689926, 0.98408467,\n", + " 0.98634499, 0.98471564, 0.98638207, 0.9858458 , 0.98637676]])}" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all_train_accs" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "e2999a82-3fa6-480c-bf64-8ac42e66b6f1", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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TV7Xoc+l+udrO9HnkgcCaZQA+PSTmZnZ0FVttDwd93vuucfn7XAcJ8yePdvj9ubMmSNwHBe8F9OIBaKdli9f7vM5t3z58qC+nsZm6NChPh3Xu+++WzCZTB63RedS8ASqnehcCq6NGzf6dGzj4+OFX375xeO2FixYILAs63YbN998s2AwGOrplTUegWijrKwsn8+jBQsW1O8LbOT2798vyOVyh2OclZXltjx9LjUMf9qJPpfck4M0ag8++CAeeught8t1Ol091qbpSklJQXp6OjZs2OD3us8//zyWLVsGAOjVqxeefvpppKWl4fTp0/j3v/+N/fv345NPPkHz5s3x8ssvB7rqTUpd2snm119/RWJiotvlSUlJtd52U5SXlwcASExMxG233YahQ4ciJSUFHMdhx44deOONN3Dp0iV8/vnnsFgs+Oqrr9xui86l4AlkO9nQuRQcycnJGDFiBPr06YPk5GS0atUKPM/j4sWLWLVqFVavXo3CwkJMmDABu3fvRo8ePZy28eGHH2LRokUAgLS0NDz33HPo1q0b8vLysHTpUmRlZWHdunWYNWuWT21NHAWijWw+/fRT9OvXz+3yhISEYLyEJonnedx3332wWq1ISEjA1atXva5Dn0v1rzbtZEOfSzU0dCSDBAco0tzgXnzxRWHt2rVCfn6+IAiCkJub6/ed7uPHj0sR0759+wp6vd5heWVlpdC3b18BgCCXy4WTJ08G+mU0eoFoJ/todW5ubvAq2wTdfPPNwsqVKwWr1epyeUFBgdCxY0fp+G/evNllOTqXgitQ7UTnUnC5ax97P/zwg9QGkyZNclpeVFQkREdHCwCElJQUoaCgwGkf48eP9+luLHEWiDay75FAx7/+vPnmmwIAIT09XZg/f77XNqDPpYbhbzvR55J7lCOBkCBZtGgRxo0bhxYtWtR6G2+99RasVisA4J133oFGo3FYrtVq8c477wAArFYr3nzzzdpXuIkKRDuR4Pnpp59w++23QyaTuVweHx+PN954Q/p71apVLsvRuRRcgWonElzu2sfeLbfcgk6dOgEAtm7d6rT8k08+QWlpKQDg1VdfRXx8vNM+3nvvPWlfr732Wl2r3aQEoo1I/Tt//jz+8Y9/AAA++OADKJVKr+vQ51L9q007EfcokEBIiBIEAT/++CMAID09HQMHDnRZbuDAgdIXih9//BGC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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "params = {}\n", + "params['window'] = default_window\n", + "params['dim'] = None\n", + "params['num_heads'] = 1\n", + "params['state_dim'] = 1\n", + "\n", + "name = plot(all_accs, params, 'dim', 'layers')\n", + "plt.title(\"Average Accuracy across Token Dimensions\")\n", + "plt.xlabel(\"Token Dimension\")\n", + "plt.ylabel(\"Accuracy\")\n", + "savefig(task_name, name)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "8368191b-a58d-470f-b3c8-6cd2af1c474b", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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3vP58+c7TRscHMy7CSwsLORdhDtie5Pp6kvZ+kZXpVIhKSnJZd6O1KtXz/L/c+fOubVNaGgomjVr5vG+rGVnZ2PmzJl47LHH0KpVK8TExCA4OBgikcjusWzZMst2Go0GWq3WYZ62F3DWFxnucDf9qVOneBfdHTp08Gg/ABAfH8977u5774mrV6/yGnKio6MrvCC0Pb9tz0dbto0tgwYN8rCU/snbnzp06OB2Y5ozZ86cwYcffoihQ4eiSZMmlhtDR5+fW7duWbZzdFFl5uv3u1+/fryb9eXLl6OkpMRp+gULFvBuqJ944gmIxb69hPBFvVTd53FKSorbaQ8cOMB77mljmu1Nk6MbOZlMxruZTk9PR58+fbBlyxZwHOfR/qx16tSJ1zizatUqjBo1CqdOnap0nt5g23DgqCHH+ga6U6dOvEYdM+tGi6NHj0KtVvNet21watSoEeLi4ipd7op48j1n3VAKwGkj1ZEjR3jnQPfu3SGRSNzeT+/evd1OWx3nOlAef+tj+Pvvv+3SWN/Ux8XFoWnTpqhduzbvuqqi7QDPj8ETSqUSb731Fq5evYq9e/figw8+QL9+/SpsEM3Ozsb999+P1atX+6xstt5++20sX77c8jwmJgabNm1CZGSk021s62VfXccNGDDA8n+TyYT7778fs2fPhkaj8Xh/xA/83dWDEDPbNenN6367olarecv8SSQSdvPmTafpd+/ezduHq/HC2dnZvOEnjRo1clmWyqxN7+oRERHhdF/W6Vq2bFnh++RMbm4umzRpksPlpdx9OHu/bdfBdhUXR2zHyDobHuJopvOqPjydlNEd7777Lm8fzz//vFvb2a5ff+DAAadp+/Xr53ZaT9mutOLJ5H3u8NfwkBdffLHSZT558qTT5Ujdebha9ci67lGpVD6Zc8N2dvpffvnFadqmTZta0onFYqereniDL+slX35GGLM/F90dp88YYxMnTuRtW5khFtbz80gkEofnje3kjOZHTEwMmzBhAps3b57HQ+wYs5/g1fxo1qwZe+WVV9iqVauqZe4la4cPH7Y7RlvWddu7777rMJ/c3FxePlu3buW9bht3d4YKVGV4yE8//VRh/tast+3du7db+3BnmXFrer2e95l1Vo9zHMc7/8LCwjzaD2OMrVy50u33u0OHDpZ04eHhdnN0PProo5bXx48fb/m79UShDz74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aTyMqbEwnsbCeBoL42k8eoypJCK9NYmIiIiIiIiIdISVFkRERERERESkS0xaEBEREREREZEuMWlBRERERERERLrEpAURERERERER6RKTFv2soaEB//RP/4QlS5Zg3LhxsFqtcDqdqK6uxj333IM1a9b0arwPPvgAt9xyizbWuHHjcMstt+CDDz7op2dAEe3t7Vi2bBm+973vYdGiRZg8eTKKi4thsVgwcuRIXH311fi3f/s3nDt3LqPx1q1bh69+9auoqqqCzWbD6NGjcd111+GNN97o52dCmfiHf/gHSJKk/axatarH+/D9mX/RMUv3c/XVV/c4FuOpP01NTXjiiScwZ84clJWVwWazoaKiAgsXLsTjjz+OXbt2pb0/Y5o/V199dcbvz0z2u4ylfvj9frz00ku47rrrMGbMGO2z7tSpU3HPPfdg3bp1GY3DmOqD1+vFf//3f+Oaa65BWVkZLBYLysvLccMNN2DZsmUZj8PPuf3rzJkzeO+99/D444/j+uuvx4gRI7R959e//vVej5eL918wGMQLL7yAhQsXoqysDHa7HZMmTcIDDzyAzz77rNfbFENQv1m4cKEA0OPPXXfdJXw+X9qxQqGQuO+++9KOc//994tQKDRAz27o+eijjzKK54gRI8Sf//zntGM98cQTQpbllGPceOONwuPxDNAzo3hbt24VJpMpJiYrV65MuT7fn/qRyXsUgFi0aFHKMRhPffr5z38uHA5H2rg89NBDSe/LmObfokWLMn5/AhCyLItjx44ljMNY6svRo0fFjBkzeozngw8+KFRVTToGY6ofe/fuFVOnTk0biyVLloiOjo604/Bzbv9LF6O7774743Fy9f5raWkRc+fOTTmG1WoVL774Yt+fb5/vST2aNGmSACDKy8vFQw89JH73u9+JjRs3ivXr14vnn39ejB07VgvkHXfckXasRx99VFt39uzZ4o033hAbN24Ub7zxhpg9e7a27LHHHhugZzf0fPTRR6KiokLcdddd4mc/+5l4++23xfr168XatWvFm2++KW699VahKIoAICwWi9i2bVvScV544QUtXpMmTRIvv/yy2Lhxo3j33XfF4sWLM/6doP4RCoW0ne7IkSMzSlrw/akfkdf629/+tti5c2fKn8OHD6ccg/HUnx/96Efa615dXS2effZZsWrVKrF161bx8ccfi2effVYs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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "params = {}\n", + "params['window'] = None\n", + "params['dim'] = default_token_dim\n", + "params['num_heads'] = 1\n", + "params['state_dim'] = 1\n", + "\n", + "name = plot(all_accs, params, 'window', 'layers')\n", + "plt.title(\"Average Accuracy across Window Sizes\")\n", + "plt.xlabel(\"Window\")\n", + "plt.ylabel(\"Accuracy\")\n", + "savefig(task_name, name)" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "9d75f567-d9e7-4156-81a3-89f4fe5f0da5", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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lLt48aJ46623bE4MO3bsaNPn1fbQQw/ZPO+vvvrK7vvXaDSK/fv3i3feeUcMGjRItG3bts56U1NTJfWOGDFCrFu3ThiNRpuypaWlYvPmzeKFF14QHTp0aNREghBCvPXWW5J19V0iebkkEmre25GRkeK9996zSYBu27ZNdOvWTbJNnz59xOHDhy1fZJKSksTy5csll8oYjUbx9ddf2ySHH3/8cYfts/6SWvu5dezYUfz444/CYDBYyldUVIivv/7aJukRHBxs9xyqNpPJJEaMGGFzfjR37lxx9uxZm7KbNm2yvJ9rHm3btrVcXinn+dT+/OjTp4/4/fffJc9HiKrLcd3xI8WJEydsjn/z5s3FZ599ZvN+37x5s91Rdh999JFNvWVlZeKPP/6wPKxHQr399tuS9TWPM2fOuPychPBuIqGxzhtDQkJEcnKyePHFF8XmzZuFXq+3KWMymcSWLVtsElMajUbWaJn09HSbRG7v3r3F2rVrJe3T6/ViwYIFlmSqVqu1eb/VxXqEt1arFc8995zIzc21W/7cuXPi22+/FZMmTRJBQUFMJFDjsO786vpSYH0t2ubNm+us89SpU5JfQDp16iS7Penp6ZL9jBkzps6yy5YtszmhO3z4cL37sD6pqe9k2LqzBKquW3R08mht3759Tv16d+nSJZtM//79+x1u8+9//1tSPjw8vN57S3z44Yd2n199J2Njx46VlH/ggQdEZWWlw20KCgpsriNbvny5w21cZZ3NrSurf9ttt0nKffnll7Lq37t3r80vlbfccovNl8667Ny5UxQWFtpdt2rVKpvX5dFHH5X967qjIfDeSiTUPB577DGn9rl582ankjsZGRmiWbNmlv3FxsbanHBa+/jjjyVtVKlUYu7cubL2ZzabxV9//WV3nfWvFtbDmx3VWTsJodVqbU7QXdUY/ZIn3yPWsVhznL799ltZdW/fvt3mZHDmzJn1tic8PFyyzfTp0+ssX/vEuWXLlk4d77quWd+/f79k/yNGjJDdL5hMJpGVlSW7DXI5+vJfWlpqc7mdo37jckkkAFVfbh29B/Ly8my+PNWM2hw6dKjD+wX89ddfku1atmzp8HO2rl+7e/fuLYqKiurc7sKFCyIpKUmyzbhx4xweC+sfjPr3719vbJtMJpvLQh999FGnn8+tt95ab3/uKutLyuLi4ur8AidE1XOzTgoEBwc7/CFMCOc+T93B+lj+97//tZu4kPOwrqu+REJjnTc6ewwXL14sqb+++xCZTCab+zuNGzfO4XPJzc21O0oJqPur91NPPSUp58xlR/n5+Y16CXENJhIU5vDhwzYdZV2ZPusvqdOmTXNY91VXXSUpL/e682nTpkm2q+sLndlsFsnJyZIOW04SoUbta/pUKpXDEyvrN31UVJTbT+jtyc7OliRknnrqKYfla4/kACAWLVokaz/2hk45OhmzvgHn1VdfLXtkwdmzZyU33xo8eLCs7RpCp9NJhq8FBQXVedL2008/SZ6TowRWbXfeeadkuyFDhrjtZpLWN9aZMGGCW+oVwruJhEGDBnl8JIoQVdcf197vL7/8UmdZg8Eg4uPjJeUdXefqjLNnz0q+SHfr1k3Wdr///rukPbVvgutNzvZLnnyP2EskPPvss7K3t27bNddcI2s76yR2SEiI3WRHQUGBpNw//vEP2W1zZMWKFZJ65dyU0dPq+/L/f//3f5L1AwcObHBdtXk7kfDbb7/Vuw/rL91A1fBnOecR1udSjn7EsffFOzg4uM6RRrXt3bvX5iajdZ0X6fV6SaK2devWsm/sZjQaxYABAyzbhoaG2ozkcPR8OnTo4NLNXuU4dOiQJMGoVqvrvRxHiKrPEesRKC+88ILDbbydSHDnw1EiwdfPG2ufB2u12jqT10LY/sjTunVrWTcQ3bhxo93jVpfrr79e8j6xN9rM1zg31xBd9hYtWiRZnjBhQp1T89xxxx3Qav83Q+jXX39tM/9tbffcc49kecmSJfW2p6KiAl9//bVlOTw8HDfccIPdsr///jsOHTpkWZ4+fTo6duxY7z5qvPDCC5b/CyGwYsUK2ds+/PDDiImJkV2+oRITE9GvXz/L8ubNm+ssu2XLFskc3SkpKZg0aZKs/bz++utOTTX23nvvSZbfffdd2VM6xcTE4P7777csp6en4/z587L37YxvvvkGpaWlluXrrrsOYWFhdsuOHTsWLVq0sCz/8ccfOH36tMP6z549i2+++cayrFarsXDhQqenbbNn+/bt2LJli2U5LCzMMg3r5e6VV15plOkS77jjDsk0mI7eP8uXL8eJEycsyx06dMBLL73klnbExMTg+uuvtyzv3bsX27Ztq3e7zz77TLI8depUt7THVc70S558j9gTHByM5557TlbZwsJCfP/995ZllUqFefPmydr29ttvx4ABAyzLer3e7rSGZWVlkmVHU5o6w1P1etLUqVPRrl07y/KWLVvwyy+/eK9BbjBo0CCMHTu23nLXXXedzd8eeughWecRtfsOAMjIyJDfQFSdr8THx9dbrmvXrjbnDAsXLrRbdsmSJbh06ZJl+aWXXkKzZs1ktUej0UjeoyUlJfj9999lbQsAM2bMaNA0i85YsGCBZFrGO++8U9Ln1UWr1WLu3LmSv3322Wec4hG+f95YMyU4UDVV7Y4dO+osa/2+eOGFF+o8t6xtyJAhdX6nsad2P69Wqz32uelOvt9CchshBL744gvJ32q/kay1bNkSV111lWW5sLAQP/74Y53lb7zxRoSHh1uWv/76a1RUVDhs008//YTCwkLL8m233VbnB8avv/4qWb777rsd1m2te/fukg/xjRs3yt72zjvvdGpfrqg9h66jE4hNmzZJlh0lhazFxcVh+PDhssqazWasWrXKstyvXz907txZ1rY1ascR4Nyxd8bixYsly47i28/PD7fddptl2Ww247///a/D+tesWQOTyWRZvvrqq5GYmNjA1kqtXr1asjxp0iRERka6pW5vatWqFUaOHNko+woJCUF0dLRl2dH7x/p4P/jgg279cjZt2jTJsnWSwFpeXh5++ukny3JcXJysLyyNRW6/5Mn3iD3jx4+XfO44smXLFlRWVlqWhwwZgqSkJNn7mjJlimR5w4YNNmVatGgBf39/y/LPP/+MoqIi2fuoS5s2bSTLS5cudblOT/P398esWbMkf3vhhRcu6y9Zt956q6xySUlJkjgAgFtuuUXWtt26dZMs1054yiH3BwXA9gegdevW2S1X+/xLq9XijjvucKpNo0aNknwpknsOoNFoJJ/TnrJ+/XrJsvV73ZErr7wSbdu2tSyfP38e2dnZbmvb5ehyOG+s/ZkGOP5cq/2+8PPzcyr+J0+eLLts7X5ep9Nh5cqVsrf1FiYSFGTt2rU4fvy4Zbl79+7o2rWrw23uuusuybL1iIbagoKCJB1+YWGh5MTYHusvftYfarXV7kRCQkKQnJzssG574uLiLP8/ePCgrG3CwsKQkpLi9L5qO3/+PD744APcdddd6NatG1q1aoWgoCCoVCqbx1dffWXZrrS01OaXqBo7d+6ULA8aNMipNsktv3fvXsmJcJ8+fZzaDwCbX0fkHntn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To547733RFpamsMPKCGE6Nevn6Te2NhY8cMPP0hOwM1ms9iyZYsYO3as5LnJPfFxNZEghBB33nmnpI7w8HDxySefiLKyMkm57Oxs8eCDD1q+GEZHR4vmzZtLTgTrc8stt9gc7xEjRojff//d5ouvyWQS+/btE7NnzxadO3d26suBEEJ8+OGHdk8qAIgDBw44VVdDNGa/5Kn3iDtOwu29x26++Waxd+9eSblLly6JuXPniuDgYJvnYe+9KIQQK1asEEBVkvvqq68W8+fPF1lZWXb7xxMnTogXX3xR+Pn5Sep/9913bcpOnz5dABARERFi0qRJYvny5eLMmTN225CRkSFuv/12SZ1qtVrs3LnT6WPliCuJhJycHKHVaut8P9RX1759+2wSQtdcc43IycmRlNPpdGLhwoWibdu2AoBo1qyZiIyMlN1HXG6JhNr77Nixo/jpp5+EwWCwlK+oqBDffPON5XjUPIKCgsThw4cdtstkMolx48bZ9CE33nijWLNmjd1EYVlZmdi2bZuYPXu2JJHjjufubidPnpTERs05wIIFC2ze71u2bBHDhg2ziduPPvqo3v0oKZHg6fPGyspKmy/SSUlJYvXq1ZK6zWazSE9PF6NHj7aUs04M1BdrGzZssPmhJy0tTaxdu1ayL71eLxYuXChatGghAAitVmuTUKhLzWduSkqKmDlzpti8ebPd5HFpaan45ptvRGJioqTeHj16OHwOnsBEQhM2cuRISYDNmDHD5TpLSkpsTqp2795dZ/msrKw6TxT69+/foDZUVlaK2267zW6dWq1WdOzYUfTt21f06tVLtG/f3uYXezkdYO1yDfniW1lZafnl3/pkrnPnzqJ///6iU6dOQqPR2LxGzp64mM1mcf/999d5nO09HnnkEZsvfPX9KieEEHv27LH5UKh5REREiNTUVNG/f3/RpUsX0bp1a7vl3JVImDJliqTeCRMmuFyn2Wy2+VBavny53bLWv4jVPDQajejQoYPo27ev6N69u2jZsqVTsWcwGOqMb39/f5GYmCj69+8vunbtanPS4+gDSgghtm3bZhNzAERkZKTo3bu36Nmzp2jWrJlk3Z133unUiY87EgmHDx8W4eHhNu0MDAwU3bt3F3379rU5EdZoNOLXX391+uS9qKjI5gtRzSM4ONjyfk1NTRWhoaGS9c4mEnQ6nU0dAMSQIUOc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jEacysuDwWj0dlOIPIZxTkrAOCclYJyTEjDOfRcTCUREREREREQkGxMJRERERERERCQbEwlEREREREREJBsTCUTVAv390TkuDoH+/t5uCpHHMM5JCRjnpASMc1ICxrnvUgkhhLcbQbZ0Oh0iIiJQlJ2N8KgobzeHiIiIiIiImjqjEaisBOLjHRbjiASiagajERcKCnhXWGrSGOekBIxzUgLGOSkB49x3MZFAVE1fXo4tBw5wnlpq0hjnpASMc1ICxjkpAePcdzGRQERERERERESyMZFARERERERERLIxkUBEREREREREsjGRQFRNrVYjJDAQajXfFtR0Mc5JCRjnpASMc1ICxrnv4vSPPorTPxIREREREVGj4vSPRERERERERORuTCQQVSvS6/Hbtm0o0uu93RQij2GckxIwzkkJGOekBIxz38VEAlE1IQQqjUbwah9qyhjnpASMc1ICxjkpAePcdzGRQERERERERESyMZFARERERERERLIxkUBEREREREREsnH6Rx/F6R8bn9Fkgk6vR3hICLQajbebQ+QRjHNSAsY5KQHjnJSAce4FMqd/1DZSc4h8nlajQbPwcG83g8ijGOekBIxzUgLGOSkB49x38dIGomplFRXYd+wYyioqvN0UIo9hnJMSMM5JCRjnpASMc9/FRAJRtQqDAUfOnEGFweDtphB5DOOclIBxTkrAOCclYJz7LiYSiIiIiIiIiEg2JhKIiIiIiIiISDYmEoiIiIiIiIhINiYSiKr5+/mhXUwM/P38vN0UIo9hnJMSMM5JCRjnpASMc9+lEkIIbzeCbOl0OkRERKAoOxvhUVHebg4RERERERE1dUYjUFkJxMc7LMYRCUTVjCYTCktKYDSZvN0UIo9hnJMSMM5JCRjnpASMc9+l9XYDqB633QZo3fQy3XADMG2a4zKffAL88IN79lfjt98cr8/LAyZNcu8+p04FbrrJcZnZs4FNm/63bDLBXFoKBAcDGo3z+2zeHPjvfx2XOXAAeOIJ5+t25LnngGHDHJf517+AQ4fct8/kZODddx2X2bABmDPHffsEgHnzgNRUx2UmTgQuXnTfPocMAZ5/3nGZ5cuBzz5z3z4BYMkSoGVLx2Wuvtr5eh3FOfsIKes+wlXsI6Q82EeUlJVh/d9/Y3iPHogMDZWWYR/RcOwjpLzdR7h63lJDgX2EQ+wjGs4T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nJSAce67mEggqlZpMCD33DlUGgzebgqRxzDOSQkY56QEjHNSAsa572IigYiIiIiIiIhkYyKBiIiIiIiIiGRjIoGIiIiIiIiIZGMigahagJ8fOrZpgwA/P283hchjGOekBIxzUgLGOSkB49x3qYQQwtuNIFs6nQ4REREoys5GeFSUt5tDRERERERETZ3RCFRWAvHxDotxRAJRNaPJhEs6HYwmk7ebQuQxjHNSAsY5KQHjnJSAce67mEggqlZSVoaNe/eipKzM200h8hjGOSkB45yUgHFOSsA4911MJBARERERERGRbEwkEBEREREREZFsTCQQERERERERkWxMJBBVU6lU8NdqoVKpvN0UIo9hnJMSMM5JCRjnpASMc9/F6R99FKd/JCIiIiIiokbF6R+JiIiIiIiIyN2YSCCqpistxZ+7dkFXWurtphB5DOOclIBxTkrAOCclYJz7LiYSiKqZzWboy8thNpu93RQij2GckxIwzkkJGOekBIxz38VEAhERERERERHJxkQCEREREREREcnGRAIRERERERERycbpH30Up39sfAajEQXFxYgKC4OfVuvt5hB5BOOclIBxTkrAOCclYJx7gczpH5lI8FFMJBAREREREVGjkplI4KUNRNXKKytx6MQJlFdWerspRB7DOCclYJyTEjDOSQkY576LiQSiauWVlcg6eZIdFTVpjHNSAsY5KQHjnJSAce67mEggIiIiIiIiItmYSCAiIiIiIiIi2ZhIICIiIiIiIiLZmEggquan1aJty5acWoaaNMY5KQHjnJSAcU5KwDj3XZz+0Udx+kciIiIiIiJqVJz+kcg5JrMZJWVlMJnN3m4KkccwzkkJGOekBIxzUgLGue9iIoGoWnFpKdbs3o3i0lJvN4XIYxjnpASMc1ICxjkpAePcdzGRQERERERERESyMZFARERERERERLIxkUBEREREREREsjGRQERERERERESycfpHH8XpH4mIiIiIiKhRcfpHIiIiIiIiInI3JhKIqhWXlmLDnj2cXoaaNMY5KQHjnJSAcU5KwDj3XUwkEFUzmc0oKC6GyWz2dlOIPIZxTkrAOCclYJyTEjDOfRcTCUREREREREQkGxMJRERERERERCQbEwlEREREREREJBsTCUTVggMC0DsxEcEBAd5uCpHHMM5JCRjnpASMc1ICxrnvUgkhhLcbQbZ0Oh0iIiJQlJ2N8KgobzeHiIiIiIiImjqjEaisBOLjHRbjiASiahUGA46ePYsKg8HbTSHyGMY5KQHjnJSAcU5KwDj3XUwkEFUrq6jA3qNHUVZR4e2mEHkM45yUgHFOSsA4JyVgnPsuJhKIiIiIiIiISDYmEoiIiIiIiIhINiYSiIiIiIiIiEg2JhKIqmk1GrSMjIRWo/F2U4g8hnFOSsA4JyVgnJMSMM59l8vTP+7btw9du3Z1V3uoGqd/JCIiIiIiokbVWNM/du/eHQMHDsSCBQug1+tdrY7Ia4QQMBiNcDG3RuTTGOekBIxzUgLGOSkB49x3ueXShu3bt+OBBx5A69atMXXqVGzdutUd1RI1qiK9Hr9u24YiJsSoCWOckxIwzkkJGOekBIxz3+VyIiE4OBhCCAghUFJSgoULF2Lw4MHo1q0b3n//fVy6dMkd7SQiIiIiIiIiH+ByIuHcuXP49NNPMWDAAACwJBUOHDiAxx9/HLGxsbjzzjvx559/utxYZx0/fhxPPPEEkpOTERISgmbNmqFv376YO3cuSktL3bqvP//8E5MnT0anTp0QEhKCiIgIJCUl4ZZbbsFHH32EkpISt+6PiIiIiIiIyBtcTiSEhobi/vvvx+bNm7F//37861//QsuWLS0JhYqKCnzzzTcYM2YMOnTogNdeew2nT592R9sdWrlyJbp374533nkHWVlZKC0tRUFBAXbu3Imnn34avXr1wuHDh13eT0FBAW644QZceeWVWLx4MY4cOYLS0lLodDrk5OTg+++/x0MPPeSWfRERERERERF5m1unf0xJScG8efNw+vRpfPvtt7j66quhVqstSYXjx49j1qxZaNeuHcaPH48ffvgBJpPJnU0AAGRkZOD222+HTqdDaGgoZs+ejc2bN2PNmjWYOnUqACA7Oxvjx49HcXFxg/dTVFSEK6+8Ej/++CMA4MYbb8TSpUuxdetW7NixA8uXL8f06dPRtm1btzwvIiIiIiIiIm9zefrH+pw+fRqff/45Fi1ahKNHj/5vxyoVACA6Ohr33HMP7rvvPiQmJrpln8OGDcPGjRuh1WqxYcMGDBw4ULJ+7ty5ePrppwEAs2bNwksvvdSg/UyaNAlffPEFAgIC8M033+C6666zW04IAZPJBK1WK7tuTv/Y+MxmMwwmE/w0GqjVbs2xEfkMxjkpAeOclIBxTkrAOPcCmdM/ejyRUNtff/2FBQsWYMWKFSgvL/9fI6qTCkOGDMEDDzyAW2+9Ff7+/g3ax/bt29G/f38AwLRp0/Dxxx/blDGbzejatSsOHjyIyMhIXLhwAX5+fk7tZ9OmTRg6dCiAqsTEk08+2aD21oWJBCIiIiIiImpUMhMJjZrWGTlyJJYuXYqcnBzLl/2aJIIQAps2bcKkSZMQGxuLmTNnorCw0Ol9/PDDD5b/33vvvXbLqNVqTJo0CQBQWFiItWvXOr2f//u//wMARERE4J///KfT25Pv0ZeVYduBA9CXlXm7KUQewzgnJWCckxIwzkkJGOe+q1ETCdu2bcMDDzyA1NRUbN++XZJEqPlXCIGLFy9i9uzZ6Ny5M3755Ren9rFp0yYAQEhICNLS0uosN3z4cMv/09PTndpHZWWl5b4IV155JQIDAwEAJpMJJ0+eRG5urmTEBV0eDCYTzhUUwOCB+3YQ+QrGOSkB45yUgHFOSsA4910eTyRcvHgR7777Lrp27YpBgwZhwYIFKC4utiQNUlNT8d577+HEiRP4/PPPLZcLCCGQl5eHG2+8EVu3bpW9v4MHDwIAOnXq5PCeBMnJyTbbyPX3339bEgXdunWDTqfDY489hhYtWiA+Ph7t27dHREQErrzySqxbt86puomIiIiIiIh8mfy7/zlBCIHff/8dCxYswMqVK2EwGCx/B4CgoCDcdtttmDp1KgYNGmTZ7p577sE999yDjIwMPPLII9i8eTOMRiPmzJljGQHgSHl5OfLz8wGg3pkSoqKiEBISAr1ej5MnTzr1/A4cOGD5v9lsRp8+fZCTkyMpU1lZiT///BNr1qzBnDlz8Mwzzziss6KiAhUVFZZlnU4HACjU62Gudf8GP60WIYGBMJnNKC4ttaknMjQUAFBcWgqT2SxZFxwQAH8/P1QYDCirtS8A0Go0CA0KghACRXq9Tb3hwcFQq9XQl5XZZAQD/f0R6O+PSqMRpVYjMTRqNcKCg6ueS0mJTb1hQUHQaDQoLS9HpdEoWRfg54eggAAYjEborepVq1QIDwkBAOj0epitbvUREhgIP60WZRUVqKiOvxr+Wi2CAwNhMplQXGuYlPXxtHsMAwPhr9WivLIS5ZWVknV+Gg1CgoJgNpuhs/PaRISEQKVSoaSsDEarYxgUEIAAPz9UGgwotXpt6j2GwcHQqNXQl5fDYHUMa14bu8dQrUZ4db1Fej2sb5cSGhQErUZj/xj6+SE4IABGkwklVkPNVAAiquNQV1oKs9UxrHlt7B7D6vh25Ri6FN+uHMOSEljfcKbmGJZWVKDS6hjWxLfdY6hSIaImvht4DOvqI2pYv1cB9hE16uojajjsZ9lHAPB+H1FzjGq/B9hHVOF5RJWm0EfUvH7FpaXsI6rxPKJKU+ojareBfUQjnUeYTIiUcf9AtyYScnNzsXDhQixatAinT58GAEmn0r17d0ydOhUTJ05EREREnfX06tULa9asQWJiIk6dOiX70oPaUzmGVr9AjtQkEkrsBJ0jly5dsvz/zTffRHl5OcaOHYtXXnkF3bt3h06nw/fff49nn30WRUVFePbZZ5GcnIzrr7++zjrnzJmDl19+2ebv6QcPIrj6hQWAti1bIi0pCWUVFVj/99825a8fPBgAkHH4MAqsprbsnZiIuOhonM7Px95aM2gAQMvISAzq0gVGk8luvWP79UOAWo19x47hXEGBZF2Xdu3QKTYWeYWF2JmVJVkXERKCK3r2BABs3LPH5k04olcvhAcHI+vkSZy4cEGyLjE2Fqnt2qFIr0f6vn2SdYH+/hjTty8AYMuBAzZvtMFdu6JFRASOnT2LnOpYrBEfHY1eiYnQ13EMa+zKzrbp6Pp07ozYFi1wKi8P+3NzJetioqLQPzUVhjqO4bj+/eGn1WLP0aPIs7r/R7cOHdChdWucLyjAbqukVFRYGIZ17w4Adusd1bs3QoOCcOjECZzKy5Os6xwXh+T4eBQUF2NLrQQYUNUBjq6+/Gfzvn02nevQbt3QLDwcR86cwZEzZyTr2sXEoEfHjigpK7Npk1ajwfgBAwAAOw8dsulA+yUno3Xz5jhx4QIOHj8uWdemeXP0TU5GhcFg97leM3AgNCoVMg8fxsXqZFuNnh07IiEmBucuXkTmkSOSdc3DwzGkWzeYhbBb71V9+iAoIAAHcnNx5uJFybqUhAQktW2L/KIibD90SLIuLCgII3v3BgBs2rfPptMe3qMHIkNDkXPqFHLPnZOs69imDbq2bw+dXo+Ne/dK1vlrtbi6+j4y2w8etPlwG5iaiuioKOSeO4csq0RofX3E8B49AACHTp60OUFgH1HFUR+hVqlwbXUCnH2E7/YR2dXvi9rHin1EFZ5HVGlKfcTunBz2EdV4HlGlqfURNdhHNN55xPW9etnUb83lWRsqKyvx/fffY8GCBVi3bp3kfgdA1Zf122+/HVOnTrXcYFGue++9F4sXL4ZKpYJJxnUxJ0+eRHz13SXvvvtuLFmyxGH5+Ph4nDx5Eh07dsThw4dlt+u1117Diy++aFm+8sor8dtvv0Gj0UjKbdq0CcOHD4fZbEZKSgr2799vuS+ENXsjEuLi4nA8IwPhkZGWv/talhBoOr8kVBoMOF9QgMS2bRHo7++7WUIr/CWhCn9JqFJfHxHo749TeXmICg216bPYR1S57H9JsKLEPuKiTocz+floFRUF/+pfVdhHVOF5RJWm0EfUnLe0iopCRGgo+wjwPKJGU+ojKg0GXCouRruYGKjVavYRjTkiwdPTPzZv3twyu0Ltqnr27IkHHngAd911F8LCwhpU97/+9S+8//77shMJeXl5iI6OBgDcfvvtWLZsmcPyrVq1woULF9C1a1fstcrkOfL222/jqaeesizv3r0bverI2tx666347rvvAFTdW6F7dbanPpz+kYiIiIiIiBpVY03/WFA99EQIgdDQUEydOhXbt2/H7t278Y9//KPBSQSg6oaJw4cPx7Bhw2SVr70vOZcr6KuzYXIug6hrPy1btqwziQAAY8aMsfx/x44dTu2HGlel0YjT+fk22UqipoRxTkrAOCclYJyTEjDOfZdbZm3o3bs3PvnkE5w9exaffPIJ+vTp445q8fDDD2Pt2rVYu3atrPKBgYFo3rw5AODUqVMOyxYUFFgSCXFxcU61q3b5+m7qWLtsntV1Z+RbSsvLsTMry+5N6IiaCsY5KQHjnJSAcU5KwDj3XS7fbHH37t3oWX2DC1+QmpqKjRs34vDhwzAajXVOAXmo1s1OUlJSnNpHly5dLP+v75KL2usdTUdJREREREREdDlweUSCLyURAGDIkCEAqi5b2LVrV53l1q9fb/n/4Oq7j8qVkJBgualjbm6uzc1lajtS666vsbGxTu2HiIiIiIiIyNe45dIGX3LDDTdY/v/555/bLWM2my0zOkRGRmLEiBFO7+fmm28GUHVTxDVr1tRZbvny5Zb/1yQ5iIiIiIiIiC5XbkkkzJgxA48//jjefvttp7Z7++238fjjj2PmzJnuaAYAoF+/fhg6dCgAYMGCBdiyZYtNmXnz5uHgwYMAgOnTp8OvemqoGuvWrYNKpYJKpcLkyZPt7uexxx5DYGAgAODxxx+HzmouWgD473//i3Xr1gEAxo8f7/S9GKhxadRqRISEQKNucvk1IgvGOSkB45yUgHFOSsA4910uT//4119/YfTo0VCpVJg7dy4ef/xx2dvOmzcPTz31FFQqFTZs2OD0JQZ1ycjIwODBg1FWVobQ0FDMmDEDI0aMQFlZGZYtW4ZPP/0UAJCUlISdO3fazCyxbt06yyiFe+65B4sWLbK7n7lz5+Lpp58GAHTu3BnPPPMMunfvDp1Oh+XLl+Ojjz6CyWRCeHg4du7cicTERNnPgdM/EhERERERUaOSOf2jy3f/++mnnwAAarUaEydOdGrbiRMn4plnnoEQAitWrHBbIqFXr174+uuvMXHiROh0OsyYMcOmTFJSEn755ReXpqd86qmncOnSJbz55pvIysrClClTbMpER0fjhx9+cCqJQEREREREROSrXB4jsnXrVgBVMxlER0c7tW2rVq3QtWtXALB7CYIrrr32WuzZswf/+te/kJSUhODgYERGRqJPnz548803kZGRgU6dOrm8nzlz5iA9PR1333032rVrh4CAAERERKBv37549dVXkZ2djYEDB7rhGZGnFZaUYOXmzSgsKfF2U4g8hnFOSsA4JyVgnJMSMM59l8sjEg4fPgyVSiWZEtEZqamp2LNnDw4fPuxqU2wkJCTgnXfewTvvvOPUdldccYXDmRisDRw4kMmCJsLs2pU+RJcFxjkpAeOclIBxTkrAOPdNLo9IqLnJYHh4eIO2j4iIAAAUFRW52hQiIiIiIiIi8jCXEwmhoaEAGp4IqNkuICDA1aYQERERERERkYe5nEiIjo6GEAIZGRkN2r5mO2fvr0BEREREREREjc/lREL//v0BANnZ2di5c6dT227fvh1ZWVlQqVTo06ePq00hcklYUBBG9OqFsKAgbzeFyGMY56QEjHNSAsY5KQHj3He5nEi45pprLP9/8MEHUVpaKms7vV6PBx980G49RN6g0WgQHhwMjUbj7aYQeQzjnJSAcU5KwDgnJWCc+y6XEwk333wzEhMTAQC7d+/GyJEjkZWV5XCbrKwsjBw5EhkZGVCpVGjfvj3uuOMOV5tC5JLS8nJk5OSgtLzc200h8hjGOSkB45yUgHFOSsA4910uT/+oVqsxf/58jB49GkajETt27ECXLl0watQojBgxAh06dEBoaChKSkpw7Ngx/PXX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zp070axZswr35zLdulVtf6NGAZMn22+TkACsXl21x71vRmELWVmAaRbSstpWodGjR+Pdd98FcPeN8blz5/D888+jd+/eqFmzZrn6evLJJ/Huu++ipKQEFy9eRPv27fH666/j8ccfR3R0NCQSSaXjHT9+PD755BPo9XqsXLkS06dPN9tu+nRdpVJh1KhRlT7e/UaPHo1NmzYBANavX4+4uDi8/PLL6Nu3L+rVq1euvvr3749atWohJycHubm5iI2NxWuvvYahQ4eidevWVXIry6hRozBlyhRoNBosXboUnTp1Mtu+cuVKsbA5fvz4Sh+PiOwzFR+dcYUZERERwbMmWxQEQTh8+LA4gdmkSZOstjEYDEKLFi0EAEJISIjdCeXsSU5OFvz9/QUAQnBwsJCamlqZ0M088MkWgar9N3Vq2cecOrXqj1uWK1dsttXpdMKdO3cEnU7n+HlzUFFRkfDwww+LuVn6X5MmTYQnn3xS+Ne//iUcPnxYMBqNZfaXkJBgta/g4GChV69ewttvvy2sX79eUKvVZfZ1/2SLJvHx8QIAISYmxuK51KhRQwAgPPfcc+L3q3KyRaPRKDz55JNWn2P9+vWFwYMHC//4xz+EpKQkhybHXLt2reDj42PRl0qlEh5++GHhjTfeENasWSNkZ2eX2df9ky2ajB07VhxT7n/tmcabnj17it9z1WSLd+7cEdavXy/cuXOnQsckqg6ys28K69evF7Kzb7o6FCKn4XhO3oB57r487taGLl26oEePHgCAJUuWWKx5CwDz588X152dPHky5HK52fakpCRIJBJIJBKMGzfO6nFOnDiBxx57DIWFhfD398eWLVvQsWPHqn0y5DF8fX2xe/duvPXWWxZL7mVkZOCXX37B9OnTERsbiyZNmiAhIcFi+aDS3njjDaxfv15chtAkLy8PSUlJmDdvHoYNG4awsDCMHz8ely5dKnfMpsv109LSzF5H69atE2+ncNakgRKJBGvWrMGcOXNQo0YNs23Xrl3Dpk2b8Pe//x29evVCgwYNMHv2bLsTrA4fPhxJSUno0KGD2fc1Gg0OHjyIL774AiNHjkS9evXw5JNP4vTp0+WO2XQucnNzsW7dOvH7hw4dEscbV06ySERERERUVTyukADcvXTctK5q//79MWfOHKSkpCAxMRGTJk0SL9OOjo7Gm2++We7+L1y4gAED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888dipOIyJuxkEBERB5l+vTp+Prrr8v1aXiTJk1w6tQpLFy4EGvXrsW5c+eg1WpRv3599OjRAy+//LLZXArVTVBQEDZu3Iiff/4ZK1aswKlTp3Dz5k2EhISgbdu2eOaZZ/Dcc8+ZTZ5nz9NPP42hQ4di9erV2L59O44cOYJbt26hoKAA/v7+aNCgAVq0aIEePXpg0KBBiI6OdvIztC8sLAy7d+/Gr7/+ijVr1uDAgQO4ceMGdDodQkND0b59ewwbNgzPPvusywoeD5KPjw8+/PBDvP7661i5ciV27dqFs2fPIjs7GzqdDkFBQYiIiECbNm3Qu3dvDBo0yGxpxtLCwsJw8OBBLF68GKtXr8bp06eh0WgQGhqK5s2bY+TIkXjmmWegUqkcLiQAd29Defjhh7Fw4UJs2rQJly5dgkQiQcOGDdG3b1+8/PLLaNGihc3bFUr3Y7oCIzk5GSdPnsRff/0l3sYSHByM6OhodO/eHc899xxatmzpcIxERN5MIlSHaZeJiIiIiIiIyC1wskUiIiIiIiIichgLCURERERERETkMBYSiIiIiIiIiMhhLCQQERERERERkcNYSCAiIiIiIiIih7GQQEREREREREQOYyGBiIiIiIiIiBzGQgIREREREREROYyFBCIiIiIiIiJyGAsJREREREREROQwFhKIiIiIiIiIyGEsJBARERERERGRw1hIICIiIiIiIiKHsZBARERERERERA5jIYGIiIiIiIiIHMZCAhERERERERE57P8BQu7MBp5g0lAAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "params = {}\n", + "params['window'] = default_window\n", + "params['dim'] = default_token_dim\n", + "params['num_heads'] = None\n", + "params['state_dim'] = 1\n", + "\n", + "name = plot(all_accs, params, 'num_heads', 'layers')\n", + "plt.title(\"Average Accuracy across Number of Heads\")\n", + "plt.xlabel(\"Number of Heads\")\n", + "plt.ylabel(\"Accuracy\")\n", + "savefig(task_name, name)" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "id": "0ed6897c-5a02-4f9f-8b68-e11c4ee395c2", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABBIAAALyCAYAAABnzPd+AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd4FNXeB/DvbjbJZtNDgECA0AKh10Bohq6oNEURLiCgWLCAilxBRfRarhcb3HtBBWkW4IqAoFSBUEKv0kJNgpRAEtKTTbac94+w+2a2ZTfJZpPs9/M8+8Bmzpw5O3P27MxvzpwjE0IIEBERERERERHZQe7qAhARERERERFR9cFAAhERERERERHZjYEEIiIiIiIiIrIbAwlEREREREREZDcGEoiIiIiIiIjIbgwkEBEREREREZHdGEggIiIiIiIiIrsxkEBEREREREREdmMggYiIiIiIiIjsxkACERERERFVOXFxcZDJZMbX3LlzXV0kqgRz586VHPe4uDhXF4ksULi6AERERERUvRUVFeHPP//E+fPnkZGRgZycHCiVSvj5+aFhw4Zo2rQpIiMjoVDw1JOIqCZga+7mtm7diiFDhkj+1rdvX+zevdtFJSKqOAkJCWjVqpXkb02aNMHVq1chk8lcVCoiopojLi4OCxcuxMaNG1FYWGgzrY+PDzp16oTevXtjyJAh6NWrFzw9PSuppFQWSUlJaNKkic00MpkM3t7e8PHxQZ06dVCvXj1ERUWhffv26NOnD9q2bVtJpSWiysRHG9zc8uXLzf62Z88eJCcnV35hiCqYpfqdmJiIffv2VX5hiIhqkPT0dDz11FPo168ffv7551KDCABQUFCAAwcO4F//+hf69euHhQsX2kxfXbo3T5w4UVLOpKQkVxepUgkhoFarkZGRgYsXLyIuLg5ff/01pk6dinbt2qFJkyZ45513cPv2bVcXlYgqEAMJbiwrKwu//vqr2d+FEFixYoULSkRUcfR6PX744QeLyywFGIiIyD7p6eno168f1qxZY7ZMoVCgefPm6Nq1Kzp37ozGjRtbfZxBCOHsolIVkJSUhI8++ghNmjTB22+/jYKCAlcXiYgqAB9tcGOrV6+GWq22uGzlypWYM2dOJZeIqOLs2LEDN2/etLhs7dq1+M9//gOVSlXJpSIiqv7GjBmDM2fOSP726KOP4qWXXkK/fv3g7e0tWaZWq3Hy5En88ccf+Pnnn83Wpeplx44dZn/Lz89HZmYmMjMzcf78eRw6dAhnz56FTqczpiksLMTHH3+MLVu24Ndff0XDhg1L3Vbfvn0ZcHJDc+fO5cCa1QADCW6s5F1ZmUyGnj17Ij4+HgBw9epV7Nu3D3369HFR6YjKx7TXQe/evbF//34AQE5ODn755ReMHz/eBSUjIqq+Nm3aJLmQlMlkWLx4MZ555hmr6yiVSvTo0QM9evTAu+++i5MnT+LLL780CzhQ9TBw4EC70t25cwf//e9/sWjRIqSlpRn/fvLkSfTt2xf79+9HvXr1nFVMInIyPtrgpi5duoRDhw4Z3/fq1QtvvfWWJA0fb6DqKisrCxs2bDC+b9SokdmzuKzfRESOM207n3vuOZtBBEs6deqElStX4sUXX6zIolEVU7duXXzwwQc4f/48BgwYIFl27do1jBkzBnq93kWlI6LyYiDBTZnerR03bhweeughhIaGGv/2888/Iz8/v5JLRlR+a9askTy2M3bsWLRr1w4dOnQw/m337t3466+/XFE8IqJqy7Rb+/PPP++iklB1Ubt2bWzfvh0jRoyQ/H3Pnj1YunSpawpFROXGRxvckF6vx/fff2987+XlhSeffBIKhQKjR4/Gf//7XwBAdnY21q9fj7/97W+uKqpdioqKcOjQISQlJSE1NRV6vR61a9dGZGQkYmJi4OHhUaHbu3nzJo4fP45bt24hPT0dQUFBGDlyJOrXr291nczMTJw9exYXL15ERkYGioqKEBQUhDp16iA6OhoREREVUja1Wo29e/ciMTERaWlp8PPzQ4sWLdCnTx/4+flVyDZKunv3Lg4dOoSUlBSkp6fDz88PderUQbdu3UqdLsqZTO+YjRs3zvjv6dOnARR/D1auXIm33367QrZ58eJF/Pnnn0hLS8O9e/egVCpRu3ZttGrVCh06dICXl1eZ8hVC4M8//0RCQgJSU1ORlZUFlUqFsLAwtGrVCu3atavwOu5MZ8+exYULF3D79m3k5uaibt26mDBhgs0p4G7cuIFz584hMTERWVlZAICQkBCEh4ejR48eCA4OrrDy6XQ6HDt2DFevXkVaWhpycnLg5+eH8PBwtG7dGq1ataoxU4dWVrtk4KzviIFOpzP+Fty+fRs6nQ5t2rTBo48+anO9zMxMxMfH49atW8Z2s06dOujUqRNatGhRrjLp9XqcP38ef/75J1JTU5GTkwMvLy/4+fmhYcOGaN68OVq2bAm53LH7OgUFBTh9+jTOnz+PjIwMFBQUwMfHBwEBAWjcuDGioqLsev7cUTk5OcjOzpb8LSoqqsK340yJiYk4d+4crl+/jqysLCgUCoSEhCAiIgIxMTFO+a0sK0P7f+HCBdy9exd5eXkIDQ1FgwYNnPa77ixyuRzLli3D6dOnkZiYaPz7Bx98gEmTJlXa79jNmzdx9OhR3LhxAzk5Oahbty569eqFli1blrru2bNncfToUdy5cwdeXl5o2LAh+vfvj1q1apW7XJV9rLOysrB3715cuXIFBQUFqFWrFpo3b47evXuX65Gje/fu4cSJE7hy5QqysrKg1WqhUqkQGhqKJk2aoE2bNhX6m21Lfn4+9u/fj7/++gupqalQKpWoU6cO2rRpI7mxVFHcYZ+aEeR2tm/fLgAYXyNGjDAuO3jwoGTZwIEDbeb10ksvSdIvWbKkTGXq27evJJ+jR4+Wus6ZM2fEE088Ifz8/CTrlnwFBQWJl19+Wdy5c8fuspRcPzY21vj33377TfTv31/I5XKz7axfv94snxMnToiZM2eKjh07CplMZrWMAETTpk3F/PnzRX5+vt3lLCkzM1O8/PLLwt/f32L+SqVSPP/88yItLU0IIcTu3bsly9977z27t6XT6cSKFStE165dbX6uVq1aiWXLlgmdTlemz1RWly5dkpSjY8eOxmU3b96UHL/IyMhybSs1NVXMnDlTNGzY0Obx9fX1FSNGjBC///670Ov1duWdnJwsnn/+eVGnTh2beQcHB4u//e1vYu/evVbzioiIMKaPiIhw6DO+9957ku3t3r3balpr9Uqj0YgFCxaINm3aWPwMGRkZknw0Go3YsmWLeOaZZyRlt/SSyWSiR48eYv369XbvW0vOnj0rxo4dKwIDA21uLywsTDz//PPi1KlTkvX/+usv4eHhYUzXokWLMpXj119/lWzvySefLPNnsqQy2yUhKvY7Yq0upqenixkzZoiwsDCzfDt06GC1bHv27BH9+/cXCoXCarmaN28uvvjiC1FYWOjQ587KyhKzZs0S9erVs/m5AYiAgADx6KOPitWrV5ea7+XLl8X48eOFr69vqfnWr19fTJo0SRw8eNChstty8+ZNs+3k5ORUWP5CmLcjjrwsKSgoEGvXrhVjx461WEdKvjw8PMTgwYNttnMGy5YtK1MZ7WmD7969K1577TWb9cfLy0sMGzZMnD592sE97JjExES79rO9li9fbpbfr7/+ajW9o+cr1n7vDh48KIYMGSJpp0u++vXrJ86fP28xz7Vr14rWrVtbrTMTJ040nl85ylnHOjY21uIxu3Xrlpg0aZLw8vKy2ha//fbbIjc316HP8ccff4hBgwZZPEcu+ZLJZCIqKkr8/e9/F9evX7eanyPnHqZOnTolhg8fLpRKpdVyhIeHi3fffdeh9qu671NnYCDBDY0dO1ZSAdeuXStZ3qxZM+MyuVwu/vrrL6t5HTlyRJLXAw884HB5kpKSJCe0rVu3tpleo9GIl19+udQvVsmXv7+/+O233+wqT8n1YmNjhV6vFy+//LLN/E0DCf/+97/LdILRunVrcfnyZYf236lTp+w6WTU0nGfPni1zIOHSpUuiQ4cODn2mmJgYcffuXYc+U3nMnj1bsv3PPvtMsnzAgAGS5fHx8WXaztdff20ziGXtlZiYaDNfvV4v5s6da/UHydbLGlcGEu7duyd69+5ts9ymgYTHH3+8TN+fxx57zOEf6qKiIvHiiy861J5Y24/Dhg2TpNmzZ49DZRFCiEcffVSSxx9//OFwHtZUZrskRMV/RyzVxZMnT4r69etbzctSIKGwsFCMHz/eoTJFRkaKCxcu2PW5T506ZbNM1l7h4eE28125cqXw9vZ2ON+//e1vdpXbHnl5eWb579ixo8LyF6LiAwldunQpU14vvfSS0Gg0VsvprEDCkiVLrN4UsPSSy+Xi/fffL88ut6miAwlqtdosQD5p0iSr6SsikLBw4UKrAYSSr4CAAMk5gU6nE1OmTLHrOLRs2VKkpKQ4tC+ceawtXfTu3btXhISE2LWt6OhokZ6eXup27DlHtvZavHix1XzLEkjQ6/Vi5syZDv2eh4WFiX379rnFPnUGBhLcTFZWlvDx8TFWuMDAQKFWqyVp5syZI6mUH330kc08W7VqZUwrk8lKvVAy9cEHH0i29+mnn1pNm5eXJx588EGrjUHHjh1F586dLd7F9fDwEP/73/9KLU/JdWJjY8Vbb70l+ZuPj4+IiooSXbp0Md7dMA0kzJs3z2z7/v7+omXLlqJbt26ic+fOVu/QhYWF2d2D4vz58yI0NNQsD4VCISIjI0XXrl3NttOgQQOxZs0ayd/sCSQcOnTI4rY8PDxE8+bNRbdu3UTr1q0tRoCbNWtWKcEEnU4n+bxyuVzcvHlTkmbp0qWSsk2ZMsXh7UybNs3isfPw8BBNmjQR0dHRol27dqJ27dpmaWx9P4qKisSoUaMs5u3l5SWaNWsmunXrJtq0aSOCgoLM0ljjqkDC22+/bRZECA4OFu3btxft27c33v03DSQ88sgjZp+tdu3aonXr1qJ79+6iQ4cOFusiADFgwAC7e8FkZmaKBx54wGI+Pj4+okWLFqJ79+6iVatWZhfElvbj5s2bJWnGjRvnwJ4W4saNG5KT3aZNm5arl4WpymqXhHDOd8S0Lq5cudKsrQ8PDxddunQRLVq0EEql0iyQoFarxcCBAy2WrV69eqJr166iRYsWwtPT02x5rVq1xIkTJ2x+7pSUFFGrVi2LbXKzZs1EdHS0iI6ONpbPtOzWbN++3WIPEpVKJVq3bi1iYmJEp06dROPGjc1OoisykCCEEI0bN5bkHxMTY3YeUR4VHUiw1BOqfv36om3btiImJka0a9fOak8kWxe4zggkvPPOOxbXCQgIEG3atBHdunUz2/+G16uvvlreXW9RRQcShBBi0qRJkvwaN25sNW15Awlr1qyRfHf8/PxE27ZtRefOnS3+jtatW9d4sff8889LloWGhopOnTqJdu3aWTzXKa0Xb0nOPtamF73Hjh2T9GSSy+XGc4rIyEiL7cvQoUPL/DlCQkJEhw4djN8xSze8KjKQoNfrxYQJEyyWJTQ0VHTu3Fm0atXK4nHz8fERW7durfH71BkYSHAzixcvllS4Z555xiyNadfw0rro/vOf/5Sk/+CDDxwqU2RkpORLaHrhV5JpI+Hn5yfeffddce3aNbO0p06dMrso8/f3L/XOWsn0tWvXNp6URUZGip9//lkUFBRI0p85c0ZcvXpV8rd58+YJb29v8eSTT4qVK1eK5ORki9tKS0sTixYtMrt7NWzYMJtlFKK4Z0bnzp0l6/n6+op//etfZhHPy5cvi8mTJxvTNWnSxKEf5tu3b5udsLdv316sWrXKrFtYQUGBWLNmjaRnCwDx8MMPV+hFkSU7duyQbHPAgAFmaSwF00yPqS1fffWVWcPdtGlTsXz5cnHv3j2z9NevXxeLFy8W/fv3F4DtQML06dPN8u7YsaP45ZdfLN5pv3z5svjqq69EdHS0AKpeIKFu3bqSE6z4+HjJRb5erxc7duwwuwh55JFHRGhoqJg6dar4/fffRWpqqsXtXb58WcyaNcvsxOCLL76w67ONHDnSbH/HxsaKrVu3mpVJp9OJs2fPio8++ki0atXK4n7U6XSSEz+lUmmxTlhjGlT9+OOP7V7XHpXRLgnhvO+IaV001C8PDw/x4osvmrXt+fn5ZnfLX3/9dbOyjRgxwqzLcHp6uvjXv/4laSuA4qCora6wU6dONfvcq1atsvj91Wq14ty5c+KLL74QPXv2FA0aNLCar2m36n79+om4uDih1WrN0ubn54sDBw6Id955RzRt2rTCAwmmjzQa2qnNmzdXyKNs9+7dEzt27BA7duww6zny2WefGZdZelnSpk0b0ahRI/HGG2+InTt3iqysLLM0er1enD59Wrz44otmd67XrVtnMd9bt24Ztzt48GDJOj/88IPVMu7fv99ifqZBbplMJiZMmCCOHj1qtl9v3rwpZs2aZRbwWrNmjYN7u3TOCCR8/fXXZnlaayvLE0gICgoyBolatGgh1q9fL3lMSavVijVr1ojg4GDJNmbMmCFWrVplfD948GBx6NAhyTlMbm6umDt3rtnF4saNG0v9/JVxrE0veps2bSqA4ovRL774wuxRjJs3b4qJEyeaHZfNmzdb3caNGzfMyvX8889bfUTk3r174rfffhMvvPCCCAwMrNBAwoIFC8zK3qdPHxEfHy85bjk5OWLx4sVmvQhCQkJsXn8IUf33qTMwkOBmTO8OWvtiduvWTZLuwIEDVvO8ceOG5A5I8+bN7S5PfHy8ZDsPPvig1bSrV682O6G7cuVKqdv417/+5dDJsOkX3tAYOfIc1dmzZx26e3fv3j2z7pfnzp2zuY5poxkQEFDq2BILFy60+PlK+2F+6KGHJOmfe+45UVRUZHOdjIwM0bNnT7tOyCrKuHHjJNtbtmyZxXRPPvmkJN1PP/1kV/5nzpwxa+BHjRpl9924Y8eOiczMTIvLtm7danZcXn31VbtPzG11gXdVIMHwmj59ukPbPHDggEPBnZMnT0pOCsLDw212SRbC/ERWJpOJefPm2bU9vV4vdu3aZXHZRx99JMl3wYIFdudZMgihUCjE7du37VrXXpXRLjnzO2JaFw376eeff7Yr7yNHjpid9M+ZM6fU8gQEBEjWmTZtmtX0JQOutWvXdmh/WztRPHfunGT7/fr1s7td0Ol04uLFi3aXwR7Xrl2z+uhV3bp1xfjx48WiRYvE8ePHS/2dKE15npM22Lt3r8WAizXbt2+XPELSrVu3Utd5+umnJeV0tGfm1atXhUqlMq7v4+Nj82LDYM+ePZJgV506dRxqO+3hjEDC0aNHzfI8fvy4xbTlCSQYXr169bIYQDKIi4uTpA8KCjL2OJ0+fbrNmyCmdXT48OE2y1dZx9r0ohco7vlR2nmz6aMcJcdRM/Xf//7Xofa0pJycnAobI+Gvv/4yC/o+/fTTNo9bYmKiCA8Pd+jYVfd96gwMJLiRK1euSCpnw4YNrX7JTC9Sn3/+eZt5m0bj7X3u3LTbmLULOr1eL6KioozpVCqVXUEEgyeeeEJywWDrxMq0kQgODq7wE3pLLl26JAnIvPnmmzbTl+zJAUAsX77cru2YXmyX9sNsOgDnkCFD7O5ZcPv2bcnzf7169bJrvbLIzs42+3HOzs62mHbjxo2Sz2QrgFXSmDFjJOv17t27wgaT7NGjhyTvsWPHVki+Qrg2kNCzZ0+n90QRovhZ05Lb/f33362m1Wg0olGjRpL0s2fPrpBy3L59W3Ih3a5dO7vW27Ztm90nGpXJ0XbJmd8RS4GEt956y+71Tcv26KOP2rWeaRDb19fXYrAjIyNDku6FF16wu2y2rF+/XpKvPYMyOtt3331ndiwsvZRKpejZs6eYPXu2iIuLc7gtqIhAQlmYdi0uLYBW3kCC6bnQqlWr7F7X9MKjou9IOiOQYClPa+NYlTeQEBwcXOqdZiHMb5jY234VFBRIHo3x8fGxGbiqrGNtetHr4eFh10Dm9+7dk/TyU6lUVveB6SNsjo4RYYsj3/1Zs2ZJ0nbo0KHUmwlCFN+0KBlclslk4tKlS1bTV/d96gwMJLgR0x/Gv//971bT3r17VzKSdVBQkM3I548//ijJu7TAgxDFz6qWfD4tICDA6ujgW7ZskeQ/a9as0j9wCadPn5as/89//tNqWtMfknfeecehbZVHTEyMcbu2LroPHDggKWOrVq3sPkG7fv262TO0tn6YR48eLUmbkJDg0Gd67bXXKqVRNL2QHD16tNW0RUVFkmfs5XK5uHHjhs38b926JenyKpfLbf7gOOLw4cOSsvv7+5uNG1AergwkVORggbbk5uZKjs/bb79tNa3pGCFNmzYt953TkkwfqTp06JDD69gKhFQ2e9slZ35HhDCviyqVyuZdxpIyMjIkd9FLCyibKrkPAIiFCxeapbl165YkzSuvvGJ3/rb89NNPknx/+eWXCsm3vP73v/+VOsuJ6atx48bis88+s3sWDFcFEhISEuy+YBOifIGE9PR0yd3UHj16OFTWoqIiSU+Yhx56yKH1S+OMQIJp0A2wHiArbyDB3iCxpR6b9v5+lbxZBVgPPFXmsTa96HVkBiDTgYOtfZ7nnntOks6egQTtZe93X6/Xmz1668gAsE899ZRk3ZkzZ1pNW933qTM4NnExVVtCCHz//feSv40bN85q+tq1a2Pw4MHG95mZmfj111+tph85ciQCAgKM79esWYPCwkKbZdq4cSMyMzON75988kn4+PhYTLt582bJ+/Hjx9vM21T79u0RFhZmfL9v3z671x0zZoxD2yqPJk2aGP9/8uRJq+n2798veT927Fi757Zv2LAhYmNj7Uqr1+uxdetW4/tu3brZNddySSXrEeDYvnfEihUrJO9t1W9PT088+eSTxvd6vR4//PCDzfx37twJnU5nfD9kyBBERkaWsbRS27dvl7yfMGECgoKCKiRvV6pbty769+9fKdvy9fVFnTp1jO9tfX9M9/eLL74IT0/PCivL888/L3m/ePFim+lTU1OxceNG4/uGDRvioYceqrDylJe97ZIzvyOWPPLII5LfHVsOHjyIoqIi4/vevXujRYsWdm9r8uTJkvd79+41SxMaGgovLy/j+99++w1ZWVl2b8Oa+vXrS97/+OOP5c6zIjzxxBO4du0a3nrrLdStW9eudZKSkjBjxgy0adMGp0+fdnIJy65knQds1/vyiouLQ0FBgfG9o+c3np6e6Nevn/H9gQMHoNfrK6x8zuDn52f2t5Lfz4r0xBNP2JWubdu2kvfBwcF2/361a9dO8v769esW07nyWI8ePdru7XTs2FHy/q+//rKYzrRtKu08yhkSEhJw9+5d4/tGjRphwIABdq9vT9tuTU3dp45gIMFN7N69G8nJycb37du3N2s0Tf3tb3+TvF++fLnVtD4+PpILs8zMTMmJsSWmF35PP/201bQlLz59fX0RFRVlM29LGjZsaPz/hQsX7FrH398frVq1cnhbJd25cwf//ve/8be//Q3t2rVD3bp14ePjA5lMZvZatWqVcb38/HzJD05Jx44dk7zv2bOnQ2Wy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2VJcuHChtF1hpNPpxPr168XMmTPtXscWvV4vmjVrJinTmjVrypXnK6+8IsnvlVdeMUtz7tw54e3tLUn3xBNPCLVabdc2jh49KjIzMy0u27Fjh9lxmTZtmtDr9Xbl/ccff1hddvr0aUm+vr6+4tKlSzbze+eddyzWyd27d1tdZ/fu3Q7VK1O5ubmSOu3h4SHi4+NtrrNp0yazYwJARERE2FxvyZIlkvQymUx89tlndpVTr9eLXbt22fuxhBBCdOjQweL+BCBef/11h/Iqi8psl5z1HXnvvffsrovW8pbL5ZI8/vGPf9hc5+TJkyIwMFCyzvTp0y2m3blzp/j73/8ubt68aXeZ1q1bJ8m7devWZmm++uor8Z///Efk5eXZne+rr74qyXfq1Kl2r1saAKJRo0biv//9r9VjZYlWqxXTpk0zq0/fffed1XUOHz4sSdu3b1+7t3f58mXJuv7+/uLy5cs21/n666/N2mF7zgXWrFkjSf/000/bXU4hhLh69apQqVSSPJ577jlRWFhodx7p6eniH//4h9i4caND2y5NYmKi2f6wV0pKipgzZ44IDQ01y6NFixbizp07pebh6O9KRESE3b8DJZl+TkeO4bJlyyTrLlu2zGrayjrWsbGxZTpmQtj/eaZOnSo2btxo93mKWq0W0dHRkrz/97//WUzrSHv/119/CR8fH0n6Z5991ma5kpOTJdcpAMSIESNslr+671NnYCChhlqxYoWkUjVr1qzcef7444+SPNu3b28z/ezZsyXplUql5H1CQoLDZXj++efNfoz69+8vNm3aJHJzc83SFxUViVOnTokvv/xS9O7d23iCYOtE2JGTB0u++eYbswuUN954w+wHMzU1VXz22WfGk1SZTCZatmxp9wm7EEL84x//MNsf9erVE2+88YZYtWqV+P3338WyZcvE+PHjJfv/hRdecOiH+c6dO2YNrkqlEtOmTROnTp2y2ODdu3dP7NixQ0yfPt24bln2pyV79uyRlMXPz0/k5+eXK8/4+HhJnqGhoaKoqMgs3b///W+zfd6sWTOxfPlyce/ePbP0f/31l1i8eLHo27dvqcf0jTfeMMu7U6dO4pdffrFYvy9fviy++uor0aVLl1J/1Lp16ybJNzw8XGzYsEFotVpjGr1eLw4ePCgeeughyWez98e8vIEEIYQYM2aMJI+AgADxzTffiIKC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+/btC5lMBoVCAV9fXygUCrP87H0ZJCUlObzuxIkT7S6zu1G4ugAVbf/+/bhy5YrxfVpamvH/V65cMZv+sayVo3///njqqaewevVqbNy4EYMGDcL06dNRv359nDlzBh999BGuX78OAPj0008RHBxcpu1Q5dHpdMjLy4Ovr69x3liimob1nNyBTqNBXloafOvWhYe3t6uLQ+QUbM9rhry8PLzwwgv44YcfzJZpNBqkpKQgJSUFhw4dwnfffQcA2Lx5M4YMGWIxv5UrV2LatGnIzMw0W5aZmYnMzEycO3cO69evBwA8+eSTWLNmjV1lXbp0KV544YVS0+n1eqxcudKuPKn6qnGBhCVLlmDFihUWl8XHxyM+Pl7yt/JEmZYuXYrs7Gxs3rwZu3fvxu7duyXL5XI53n33XTz33HNl3gZVnpycHOzZswexsbEICgpydXGInIL1nNxBTm4u9pw8idjevRHEQALVUGzPqz+tVoshQ4Zg3759AIoHZ3/00UfRp08f1K9fHzKZDGlpaThz5gz27t2LCxcuAIBZT2iDb775RnKh365dOwwbNgwtWrSASqVCTk4Orly5giNHjmDv3r0oKiqymldJCoUCWq0WR48exblz59CmTRub6bdt22Z89NuwrqM+/PBDpKWlQafTQa1WQ6lUSgJmzz33HFJTU42fu06dOg7lX7t2bXz77belpmvUqJFjBXcjNS6QUJl8fHzw+++/46effsLy5ctx+vRpZGZmom7duujTpw9efvll9OjRw9XFJCIiIiKiKmbRokXGIELjxo2xefNmtGrVymr6y5cvY8mSJRYDRykpKXj99deN7xcuXIgXX3zRal45OTlYu3Ytbt68WWo5Bw4ciF27dqGoqAhLly7F559/bjP90qVLAQBhYWGIiIjA4cOHS92Gqd69ewMoDrbk5ubCz88PCsX/X7pOnz7d+P/BgwejcePGDuWvUqkwYsQIh8tF/6/GBRKWL19u9viCoyZOnOhQT4WxY8di7Nix5domERERERG5j++//974/0WLFtkMIgBAZGQkPv30U4vL1q1bh/z8fADA6NGjbQYRgOLB4ydNmmRXOWvVqoVhw4Zh7dq1+OGHH/DPf/7T6mx06enp2LhxIwBg/PjxOHDggF3boOqHgy0SERERERFVsoSEBOP/Y2Njq0xelkyePBkAcPfuXfz2229W0/3w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VRtKSkr0/vvva/bs2VqyZInHfAdS+SBz9dVX67bbbnNPsOirm2++WfPmzZPFYvGq1lRl3759ysjIkCRdf/31euONN2psn5GRoX379qljx47asWOHz3H9z//8j/785z+7f77ooov02WefKerUtx4Vli9fruHDh8vlcqlbt2766aef3PNCnK6qKxLatWunPXv2eKzaEG5VQilyvkkoKSnR4cOHlZWVpfj4+LCuElbGNwnl+CahXG1jRHx8vPbv369GjRp5jVmMEeUi4ZuEysw4Rhw/ckQHd+9Wi3btFJuQIIkx4vRzyOeIhj9GVHxuadGihdLS0hgj6nEOK2OMKBduY0RJSYlOnDih9u3by2q1MkaE0RUJfhcSmjRp4j5g5a569+6t22+/Xdddd507sLq677779NJLL/lcSDh69KiaN28uSbr66qs1f/78Gtu3aNFCR44cUc+ePb2qZjV57rnn9NBDD7l/Xrdunfr06VNl2yuvvFLvvfeepPK5Fc4++2yfjsHyjwAA1BPLPwIAEFR+T7ZYcUmLYRhKTk7WbbfdpjVr1mjdunW68847611EkMonTBw+fLj7UovaVD6WL7crVFSefLkNorrjNGvWrNoigiT3JTGS9P3339fpODizSkpKdODAAa9qJRBJyHOYQUlpqQ4cO6YSZvlGBGM8hxmQ5+ErIKs29O3bV6+++qp++eUXvfrqq+rfv38gutXvfvc7LV68WIsXL/apfXx8vJo0aSJJXvd4ne7kyZPuQkK7du3qFFfl9rVN6li57en3qiC8OBwOZWdnVzkJHRApyHOYgcPhUPbWreQ5IhrjOcyAPA9ffl/vt27dOvXu3TsAoQRG9+7dtWzZMu3YsUNOp7PaJSC3bNniftytW7c6HaNHjx7ux7XdclF5e03LUQIAAAAA0BD4fUVCOBURJOn888+XVH7bwtq1a6ttV3mmyyFDhtTpGJmZme5JHXfv3u01MUpllWepbdOmTZ2OAwAAAABAuAnIrQ3hZMKECe7Hc+bMqbKNy+Vyr+iQnp6ukSNH1vk4V1xxhaTySREXLVpUbbsPPvjA/biiyAEAAAAAQEMVkELC1KlTdf/99+u5556r037PPfec7r//fj322GOBCENS+dqyQ4cOlSTNnj3ba81bSXr++efd685OmTJFMTExHtuXLFkii8Uii8Wim266qcrj3HvvvYqPj5ck3X///VUuwfHWW29pyZIlkqRx48bVeS4GnFlRUVFKS0vzWhIPiCTkOcwgympVWlKSoqwR930J4MZ4DjMgz8OX38s/fvPNN7rwwgtlsVg0Y8YM3X///T7v+/zzz+uhhx6SxWLRt99+W+dbDKqTk5OjIUOGqLCwUMnJyZo6dapGjhypwsJCzZ8/X6+99pokqXPnzsrOzvZaWWLJkiXuqxRuvPFGzZ07t8rjzJgxQw8//LAkqUuXLnrkkUd09tlny2az6YMPPtA//vEPlZWVKTU1VdnZ2crKyvL5ObD8IwAA9cTyjwAABJXf/7p+8sknkiSr1apJkybVad9JkybpkUcekWEY+vDDDwNWSOjTp4/efvttTZo0STabTVOnTvVq07lzZy1cuNCv5SkfeughnThxQs8884y2bt2qyZMne7Vp3ry5PvroozoVEQAAAAAACFd+X/O3evVqSeUrGTRv3rxO+7Zo0UI9e/aUpCpvQfDH+PHjtWHDBt13333q3LmzEhMTlZ6erv79++uZZ55RTk6OOnXq5Pdxpk+frhUrVuj6669X+/btFRcXp7S0NA0YMEB/+ctftG3bNg0ePDgAzwjBlpubqwULFig3NzfUoQBBQ57DDHLz8rRg5Url5uWFOhQgaBjPYQbkefjy+4qEHTt2yGKxeCyJWBfdu3fXhg0btGPHDn9D8ZKZmamZM2dq5syZddpvxIgRNa7EcLrBgwdTLIgQLpcr1CEAQUeewwxc/t25CTQIjOcwA/I8PPl9RULFJIP1vY8/LS1NkpTHtwYAAAAAAIQ9vwsJycnJkupfCKjYLy4uzt9QAAAAAABAkPldSGjevLkMw1BOTk699q/Yr67zKwAAAAAAgDPP70LCoEGDJEnbtm1TdnZ2nfZds2aNtm7dKovFov79+/sbCuCXlJQUjRw50q+VPIBwR57DDFKSkzWyTx+lnLpqEohEjOcwA/I8fPldSLj00kvdj++66y45HA6f9rPb7brrrruq7AcIhaioKKWmpioqKirUoQBBQ57DDKKiopSamEieI6IxnsMMyPPw5Xch4YorrlBWVpYkad26dRo1apS2bt1a4z5bt27VqFGjlJOTI4vForPOOksTJ070NxTALw6HQzk5OT4Xw4CGiDyHGTgcDuVs306eI6IxnsMMyPPw5ffyj1arVbNmzdKFF14op9Op77//Xj169NAFF1ygkSNHqkOHDkpOTlZBQYF27dqlb775RosWLXIvrxgdHa1Zs2ZRZULIlZSUaO/evTrrrLOUmJgY6nCAoCDPYQYlpaXae+SIzurcWWQ5IhXjOcyAPA9ffhcSJGno0KGaN2+eJk+erOLiYrlcLn399df6+uuvq2xfUUSIi4vT7NmzNWLEiECEAQAAAAAAgszvWxsqTJw4UStWrNDgwYMllRcLqvtPkoYMGaKVK1fq2muvDVQIAAAAAAAgyAJyRUKFPn36aPny5VqzZo0+//xzrV69WocPH1Z+fr5SUlLUokULnXvuuRozZowGDBgQyEMDAAAAAIAzIKCFhAoDBw7UwIEDg9E1EDRxcXHKyspSXFxcqEMBgoY8hxnExcUpq00b8hwRjfEcZkCehy+LUXGvAcKKzWZTWlqa8vLylJqaGupwAABoOJxOKTdXSk+XooPynQkAAKYWsDkSgIautLRUx44dU2lpaahDAYKGPIcZlDqdOpaXp1KnM9ShAEHDeA4zIM/DF4UE4BS73a4VK1bIbreHOhQgaMhzmIHdbteKjRvJc0Q0xnOYAXkevoJ2vd+BAwd07Ngx5efny+Vy+bTPsGHDghUOAAAAAAAIgIAWElauXKmXX35ZixYt0vHjx+u0r8VikZNLEAEAAAAACGsBKSS4XC79/ve/1z/+8Q9JEvM3AgAAAAAQmQJSSHjwwQf197//3f1zt27dlJeXp4MHD8pisWjYsGHKz8/X3r17dezYMUnlVyAkJSWpX79+gQgB8JvValV8fLysVqYOQeQiz2EGVotF8bGxslosoQ4FCBrGc5gBeR6+/F7+cfPmzerZs6ckqVmzZlqwYIEGDBige+65R3/7299ksVhUVlbm0f7vf/+7XnnlFblcLt122216+eWXFRMT498ziTAs/wgAQD2x/CMAAEHld2nn9ddfd9/KMHv2bA0YMKDG9t26ddPLL7+sJUuWKCUlRa+//rqmTJnibxgAAAAAAOAM8LuQsGzZMklSmzZtNG7cOJ/3GzJkiF577TUZhqFXX31Vy5cv9zcUwC82m01ffPGFbDZbqEMBgoY8hxnYbDZ98f335DkiGuM5zIA8D19+FxL27Nkji8XidSWCpdJ9iaWlpVXue9VVV+mss86SJM2dO9ffUAC/uFwuFRUV+bxcKdAQkecwA5dhqKikRC4mf0YEYzyHGZDn4cvvQkJubq4kqXnz5h6/j4uLcz8uKCiodv/BgwfLMAytWLHC31AAAAAAAECQ+V1IiI+PlySPCRUlKS0tzf1437591e4fGxsrSTp48KC/oQAAAEgVV0WyagMAAEHhdyGhdevWkv7vyoQKHTt2dD/+/vvvq91/27ZtkiSn0+lvKAAAAFLFMmEsFwYAQFD4/S9sjx49ZBiGtm/f7vH7/v37ux/PmTOnyn2///57rVq1ShaLRRkZGf6GAvglKSlJQ4YMUVJSUqhDAYKGPIcZkOcwA/IcZkCehy+/CwlDhw6VJG3atMljLoSsrCz16dNHhmFo1apVuv3223Xs2DH39mXLlmnixInupSNHjx7tbyiAX2JiYtS0aVPFxMSEOhQgaMhzmAF5DjMgz2EG5Hn48ruQcMkll0gqvzXhiy++8Nj25JNPuh/Pnj1brVq1Ups2bdS4cWONGDFCu3fvliQlJibq/vvv9zcUwC+FhYXatGmTCgsLQx0KEDTkOcyAPIcZkOcwA/I8fPldSOjatat+85vfaODAgVq3bp3HtnHjxumxxx6TYRgyDENlZWU6dOiQcnNz3b9LSEjQv/71L2VmZvobCuCX4uJibd++XcXFxaEOBQga8hxmQJ7DDMhzmAF5Hr6iA9HJO++8U+22xx9/XEOGDNGMGTP07bffqqSkRFL5qg5jx47Vn/70J3Xr1i0QYQAAAAAAgCALSCGhNhdddJEuuugiuVwuHTt2TFarVU2aNJGFZZkAAAAAAGhQzkghoYLValXz5s3P5CEBAAAAAEAA+V1I6Nu3ryQpISFBS5YsYUZNNFixsbHKyMhQbGxsqEMBgoY8hxmQ5zAD8hxmQJ6HL4tRsf5iPUVFRUmSxo4dqwULFgQkKEg2m01paWnKy8tTampqqMMBAAAAAEBSAFZtaNKkiSSpdevWfgcDhFJZWZlsNpvKyspCHQoQNOQ5zIA8hxmQ5zAD8jx8+V1IaNu2rSQpLy/P72CAUMrPz9fixYuVn58f6lCAoCHPYQbkOcyAPIcZkOfhy+9CwtixY2UYhlasWBGIeAAAAAAAQBjzu5AwefJkxcfH6+DBg/rnP/8ZiJgAAAAAAECY8ruQ0KFDB7344osyDEO/+93vNH/+/EDEBQAAAAAAwpDfyz/u3btXl1xyiZ599llNnTpV1113nV566SVNnDhR/fr1U7NmzZSQkOBTXxkZGf6GA/jFavW7tgaEPfIcZkCewwzIc5gBeR6e/F7+0Wq1ymKxuH82DMPjZ58DsVjkdDr9CSWisPwjAAAAACAc+X1FQoWKAkJFEcHP+gQAAAAAAAhDfhcSMjIy6nUFAhBu8vPztXbtWvXr108pKSmhDgcICvIcZkCewwzIc5gBeR6+/C4k7N69OwBhAKFXVlamvLw8lZWVhToUIGjIc5gBeQ4zIM9hBuR5+GLmCgAAAAAA4DMKCQAAAAAAwGcUEgAAAAAAgM/8Xv4RwcHyj2deSUmJjh49qmbNmik2NjbU4QBBQZ7DDMhzmAF5DjMgz8OX34WEvXv3BioWZWRkBKyvho5CAgAAAAAgHPm9akP79u0DsvyjxWKR0+n0ux+gvoqKirR//361bdtW8fHxoQ4HCAryHGZAnsMMyHOYAXkevgI2R4JhGH7/B4RSUVGRfvrpJxUVFYU6FCBoyHOYAXkOMyDPYQbkefjy+4qEjIwMn65IcLlcysvLk81mk1R+BUJsbKxatmzpbwgAAAAAAOAM8buQsHv37jq137dvn95++209/fTTys3N1eTJk/XnP//Z3zAAAAAAAMAZcMaXf2zXrp0efPBBrV+/XpmZmXr88cc1bdq0Mx0GAAAAAACohzNeSKjQtm1b/etf/5JhGHrqqaf0/fffhyoUQJIUExOjli1bKiYmJtShAEFDnsMMyHOYAXkOMyDPw5ffyz/6q1+/flq/fr1uuukmzZ49O5ShhBWWfwQAAAAAhKOQXZFQ4eyzz5ZhGPr2229DHQpMzuVyqbi4WC6XK9ShAEFDnsMMyHOYAXkOMyDPw1fICwlRUVGSpIMHD4Y4EpidzWbT559/7l5ZBIhE5DnMgDyHGZDnMAPyPHyFvJCwfv16SVJcXFxoAwEAAAAAALUKaSHhgw8+0Lp162SxWNS5c+dQhgIAAAAAAHwQHYqDbt++XXPnztXMmTPdv/v1r38dilAAAAAAAEAd+F1I6NChg89tnU6nTp48KYfDIUmqWDCiQ4cOuueee/wNBQAAAAAABJnfyz9arVZZLBaf259+uHPOOUcffvih2rdv708YEYflH888wzDkdDoVHR1dp5wGGhLyHGZAnsMMyHOYAXkevgJya0NdaxGNGzfWoEGDdO2112rixInulRuAULJYLIqJiQl1GEBQkecwA/IcZkCewwzI8/DldyFh165dPreNiYlRamqqkpOT/T0sEHAFBQXasGGDzj77bHIUEYs8hxmQ5zAD8hxmQJ6HL78LCZmZmYGIAwg5p9Opo0ePyul0hjoUIGjIc5gBeQ4zIM9hBuR5+Arp8o8AAAAAAKBhoZAAAAAAAAB8RiEBAAAAAAD4zO9Cgs1mU+vWrdW4cWNdccUVddr317/+tRo3bqzMzEwVFhb6Gwrgl4SEBPXq1UsJCQmhDgUIGvIcZkCewwzIc5gBeR6+/C4kvPfeezp06JDy8vI0efLkOu178803Kzc3V/v379d7773nbyiAX+Li4tShQwfFxcWFOhQgaMhzmAF5DjMgz2EG5Hn48ruQ8OWXX0qSUlNTdfHFF9dp30suuUSpqamSpM8//9zfUAC/lJSUaN++fSopKQl1KEDQkOcwA/IcZkCewwzI8/DldyFh/fr1slgs6tevn6Kj67aaZExMjPr16yfDMLR+/Xp/QwH84nA4tG7dOjkcjlCHAgQNeQ4zIM9hBuQ5zIA8D19+FxIOHDggScrIyKjX/pmZmZKk/fv3+xsKAAAAAAAIMr8LCRWXmcTExNRr/4qrGJhsEQAAAACA8Od3IaFx48aSpF9++aVe+1fs16hRI39DAQAAAAAAQeZ3ISEzM1OGYWjFihUqKyur075Op1MrVqyQxWJR27Zt/Q0F8EtUVJQaNWqkqKioUIcCBA15DjMgz2EG5DnMgDwPX34XEkaOHClJys3N1euvv16nfV9//XXl5uZKkkaMGOFvKIBfUlJSNGzYMKWkpIQ6FCBoyHOYAXkOMyDPYQbkefjyu5Bw7bXXymKxSJIefPBBrVy50qf9VqxYoYceesijHwAAAL8ZLsnpKP8/AAAIOL8LCb169dKVV14pwzDkcDg0atQoPfroozp48GCV7Q8ePKhHH31UF1xwgRwOhywWiy6//HL169fP31AAv+Tm5urjjz92XyUDRCLyHGaQe/KkPl74lXJPngx1KEDQMJ7DDMjz8BUdiE5effVVrV+/Xtu2bVNJSYmefvppPf3008rKylKHDh2UnJysgoIC7dq1S9u2bZMkGYYhScrKytKsWbMCEQYAAAAAAAiygBQS0tLStHjxYl155ZVauXKlu0iwfft2bd++3aNtxTZJOu+88/T2228rPT09EGEAAAAAAIAg8/vWhgqtWrXS0qVL9dprr6lr166SyosGp/8nSd26ddPrr7+upUuXqk2bNoEKAQAAAAAABFlArkioEBUVpVtvvVW33nqr9u7dq9WrV+vw4cPKz89XSkqKWrRooXPPPVcZGRmBPCwAAAAAADhDLEblew0QNmw2m9LS0pSXl6fU1NRQh2MKZWVlKiwsVEJCAmvVImKR5zCDstJiFdqOKCG1uaJi4kIdDhAUjOcwA/I8fAX0igSgIYuKilJycnKowwCCijyHGURFRSk5KUHiQyciGOM5zIA8D18BmyMBaOjsdrvWrl0ru90e6lCAoCHPYQZ2h0NrN2yT3eEIdShA0DCewwzI8/AVkCsSpk6dqqKiIrVu3VoPPvigz/s999xzOnjwoJKTk/Xkk08GIhSg3kpLS7V//3517Ngx1KEAQUOewwxKS0q1/5ej6tipNNShAEHDeA4zIM/Dl9+FhG+++UZPP/20LBaLZsyYUad9LRaLXnzxRVksFl188cUaMmSIv+EAAAAAAIAg8vvWhk8++aS8I6tVkyZNqtO+kyZNktVaHsKHH37obygAAAAAACDI/C4krF69WpLUo0cPNW/evE77tmjRQj179pQkrVq1yt9QAAAAAABAkPldSNixY4csFot69OhRr/27d+8uwzC0Y8cOf0PxsmfPHj3wwAPq2rWrkpKS1LhxYw0YMEAzZsyQI0gTMDkcDnXo0EEWi0UWi0Xt27cPynEQePHx8erSpYvi4+NDHQoQNOQ5zCA+Pk5dOrZTfDxLPyJyMZ7DDMjz8OX3HAk2m02SlJqaWq/909LSJEl5eXn+huJhwYIFmjRpkjs+qfyP/OzsbGVnZ2vWrFlauHChOnXqFNDjPvbYY9q1a1dA+8SZER8fr65du4Y6DCCoyHOYQXx8vLp2ypBi+eCJyMV4DjMgz8OX31ckVKzrWd9CQMV+cXGB+9YgJydHV199tWw2m5KTk/XUU09p5cqVWrRokW677TZJ0rZt2zRu3Djl5+cH9Lgvvvii4uPjlZKSErB+cWaUlpbqyJEjKi1llm9ELvIcZlBaWqojx06S54hojOcwA/I8fPldSGjevLkMw1BOTk699q/Yr67zK9RkypQpKiwsVHR0tL788ktNnTpVgwcP1qhRo/Taa6/p2WeflVReTHj++ecDcsyysjLddtttKisr09SpU9W4ceOA9Iszx263a9WqVaxTi4hGnsMM7HaHVq3dJLs9OLcxAuGA8RxmQJ6HL78LCYMGDZJU/kd5dnZ2nfZds2aNtm7dKovFov79+/sbirvPZcuWSZJuueUWDR482KvNAw88oG7dukmSXnrppYBUuF566SWtXbtWXbp00SOPPOJ3fwAAAAAAhCO/CwmXXnqp+/Fdd93l8ySGdrtdd911V5X9+OOjjz5yP7755purbGO1WnXDDTdIknJzc7V48WK/jrlnzx499thjkqRXXnlFsbGxfvUHAAAAAEC48ruQcMUVVygrK0uStG7dOo0aNUpbt26tcZ+tW7dq1KhRysnJkcVi0VlnnaWJEyf6G4okafny5ZKkpKQk9evXr9p2w4cPdz9esWKFX8f87W9/K7vdruuvv14jRozwqy8AAAAAAMKZ36s2WK1WzZo1SxdeeKGcTqe+//579ejRQxdccIFGjhypDh06KDk5WQUFBdq1a5e++eYbLVq0SIZhlAcQHa1Zs2YpKirK7ycjSZs3b5YkderUSdHR1T+9yrN/VuxTH/Pnz9d///tfNWrUKGDzLSA0rFarkpKSZLX6XV8DwhZ5DjOwRlmVlBAvaxR5jsjFeA4zIM/Dl8Wo+IveT/Pnz9fkyZNVXFwswzBksViqbVtxyLi4OM2ePVvXXnttIEJQUVGREhISJEnjxo3Tp59+WmP75ORk2e12nXvuuVq1alWdj3fy5El169ZNhw8f1quvvqrbb7/dva19+/bas2ePMjMztXv37jr3bbPZlJaWpry8vHovrQkAgCm5nFJJrhSbLln9/s4EAACcJmD/uk6cOFFdunTRPffco5UrV6q2+sSQIUP0v//7v+rTp0+gQvBYyrFiWcqaJCUlyW63q6CgoF7He+ihh3T48GENHjzYvaxkfRUXF6u4uNj9s81mk1Q+h4PL5XL/PiYmRklJSSorK6ty6cr09HRJ5eeirKzMY1tiYqJiY2NVXFyswsJCj23R0dFKTk6WYRhVLuWZmpoqq9Uqu93uNTllfHy84uPjVVJS4jVHRlRUlHspzNzcXK9+U1JSFBUVJYfDoZKSEo9tcXFxSkhIUGlpqddMrVar1V1gsdlsHudIKn9tY2JiVFhY6HFeJSk2NlaJiYl+ncOioiIVFRV5bKt4bVwul/v1qywtLU0Wi0UFBQVyOp0e2xISEhQXF+fXOazptantHObl5Xm9Z5OTkxUdHV3jOXQ6nV7vH4vForS0NEk1vzbBOofBym9/zmFN+R2sc8gYwRhRwbRjRFGBFG2RrOVXPDJGeJ5DxgjGiAqmHSP4HMEYwRghqepzWBFjTQJapu/Tp4+WL1+uNWvW6PPPP9fq1at1+PBh5efnKyUlRS1atNC5556rMWPGaMCAAYE8tCR5nGxfJjyMi4uTJK9E98W3336rf/7zn4qOjtYrr7xS4xUYvpg+fbqeeOIJr9+vWLFCiYmJ7p/btm2rfv36qbCwUEuXLvVqf9lll0kqX1bz5MmTHtv69u2rdu3a6cCBA/rxxx89tjVr1kznnXeenE5nlf1ecskliouL08aNG3Xo0CGPbT169FCnTp109OhRr5U70tLS3PNGLFu2zOtNOHLkSKWmpmrr1q3au3evx7asrCx1795deXl5XvNYxMfH6+KLL5YkrVq1yuuNNmTIEDVt2lS7du3S9u3bPbZlZGSoT58+stvtVT7XESNGKC0tTWvXrvUa6Pr37682bdpo//79+umnnzy2tWzZUoMGDVJpaWmV/Y4dO1YxMTHasGGDjh496rGtV69e6tChgw4fPqx169Z5bGvUqJGGDRsmSVX2e8EFFyg5OVlbtmzR/v37PbZ16dJFXbt21cmTJ72uuklKStKFF14oSVq5cqXX4Dp06FA1btxYO3fu1M6dOz22tW/fXuecc44KCgq8YoqOjta4ceMkSdnZ2V4D6MCBA9WqVSvt3bvX67ai1q1ba8CAASouLq7yuV566aWKiorS+vXrdfz4cY9tvXv3VmZmpg4dOqT169d7bGvSpInOP/98uVyuKvsdPXq0EhIStGnTJh08eNBjW7du3dS5c2cdO3ZMa9as8diWkpKiUaNGSSqfn+X0QXv48OFKT0/X9u3bva5M6tixo3r27CmbzeZeaaZCbGysxowZI6l8JZrT/3EbPHiwmjdvrt27d3vNSVPbGDFixAitXLlS8fHxXv8IMUaUq2mMsFqtGj9+vCQxRoTxGJG9br3Xa8MYUY7PEeUYI/6PGccIPkc0rDEiKipKQ4cOVUFBAWPEGRojKl7nmgTs1gZ/OBwOvffee+6VFOrr6NGjat68uSTp6quv1vz582ts36JFCx05ckQ9e/b0SvaaFBcX65xzztHWrVv1wAMP6LnnnvNqU9dbG6q6IqFdu3bas2ePx60NVAnLBaNKmJ+fr3Xr1rkH7XCuElbGNwnl+CahXG1jhFT+j8SAAQM8ipQSY0SFSPgmoTIzjhEH9+/X92vXqm+f3kpJLT8WY4TnOeRzRMMfIyo+t/Tt21fNmzdnjKjHOayMMaJcuI0RlT+fJyYmMkaE0RUJIS0kLFmyRPPmzdP7778vu93udSLr6kzNkfDYY4/pL3/5i9q1a6fNmzcrKSnJqw1zJDQ8ubm5Wrp0qbuQAEQi8hxmkHviuJYuW67hQ89XeuMmoQ4HCArGc5gBeR6+zvgMRDt27NAbb7yhN9980315SW2TM/oqPj5eTZo00fHjx70uzTrdyZMn3ZWndu3a1ek4zzzzjCTpwgsv1IIFC6psU9G33W53XxnRvHlz9+VLAAAAAAA0RGekkGCz2fT2229r3rx57m/+T78QomK+An91795dy5Yt044dO+R0OqtdAnLLli3ux926davTMSoui5kzZ47mzJlTY9tjx47pmmuukVR+nxOFBAAAAABAQxa0BTkNw9Dnn3+ua665Rq1atdKdd96pVatWyTAMdxHBYrFo2LBheu2117wmJqmv888/X1L5lQBr166ttl3lCSqGDBkSkGOjYUtOTtbQoUN9WvEDaKjIc5hBcnKShg7qpeRk71sPgUjBeA4zIM/DV8DnSPjpp580b948/etf/3LPuHn6IXr27KlJkybpmmuuqfNtBbVZs2aNBg0aJEm644479Morr3i1cblc6tmzpzZv3qz09HQdOXJEMTExAY2DORIAAAgRl1MqyZVi0yXrGb+LEwCAiBeQKxKOHz+ul19+Wf3799fZZ5+t559/Xr/88ovX1QcWi0UDBw7Uhg0b9PDDDwe8iCCVLwkzdOhQSdLs2bOrnETx+eefdy8XM2XKFK8iwpIlS9zx3nTTTQGPEeGpsLBQGzdurNdyoEBDQZ7DDAoLC7Vxyy7yHBGN8RxmQJ6Hr3oXEpxOpz766CNdfvnlatOmje69917l5OR4FA/i4+N19dVX69NPP3X/zmoN2t0Ubi+99JJ7OZTRo0dr+vTpWr16tRYvXqw77rhDDz/8sCSpc+fOeuCBB4IeDxqG4uJi7dy502sJFyCSkOcwg+LiEu3cc1DFxSW1NwYaKMZzmAF5Hr7qfL3f2rVrNW/ePP3nP//RiRMnJHneulAx78ENN9yg3/zmN+41Kc+kPn366O2339akSZNks9k0depUrzadO3fWwoULQxIfAAAAAAANlc+FhBkzZmjevHnuWwJOn/ega9euuv7663XdddcpIyMjsFHWw/jx47Vhwwa99NJLWrhwofbv36/Y2Fh16tRJV155pe6++24lJiaGOkwAAAAAABoUnwsJjzzyiCwWi0cBoVmzZpo4caKuv/569e/fPygB+iMzM1MzZ87UzJkz67TfiBEjvAoldVWfCRYBAAAAAAh39ZrKODExUc8995xuv/32MzLnAXAmxMbGqn379oqNjQ11KEDQkOcwg9jYWLVv15I8R0RjPIcZkOfhy+flH61WqywWy//taLFoxIgRuv7663XFFVfUurZnxf6DBg3SypUr/YvaBFj+EQCAemL5RwAAgsrnywmuvfZaJSQkuFdlcLlcWrx4sSZPnqwWLVro2muv1WeffSaXyxXMeIGgcTqdys3NldPpDHUoQNCQ5zADp7NMubYCOZ1loQ4FCBrGc5gBeR6+fC4kvPXWWzp06JBmzZqlYcOGuedLMAxDhYWFevvtt3XppZeqdevWuv/++7Vu3bpgxg0EXEFBgZYuXaqCgoJQhwIEDXkOMygoKNDSVT+Q54hojOcwA/I8fNVpgoPk5GRNnjxZS5Ys0c6dOzVt2jR16NBBktxFhSNHjuill17SgAED1KNHDz3zzDPat29fUIIHAAAAAABnVr1nSmzfvr2mTZumHTt26Ntvv9XkyZPd9/JXFBW2bNmiqVOn6qyzzgpYwAAAAAAAIHQCsuTC+eefr1mzZunQoUN66623NHr0aFmtVo/5FCpuhVi7dq0mTJig9957T8XFxYE4PAAAAAAAOEMCunZjfHy8rr32Wn3++efau3evpk+frm7dukkqv0rBYrHI6XRqwYIFuvrqq9WiRQvdcsst+uabbwIZBlAvFotF0dHRHquTAJGGPIcZWCxSdFSUSHNEMsZzmAF5Hr58Xv7RH9nZ2Zo7d67mz5+vEydOeAZwKilat27NXAqVsPwjAAD1xPKPAAAE1RkpJFQoLS3Vp59+qnnz5umzzz5TaWnp/wVisaisjGWaKlBIAACgnigkAAAQVAG9taE2MTExuvzyy/XRRx/pwIEDeuGFF9SnT58zGQJQLZvNpm+++UY2my3UoQBBQ57DDGz5+fpm+TrZ8vNDHQoQNIznMAPyPHyd0UJCZU2bNtWUKVO0du1a/fDDD7r//vtDFQogSXK5XMrPz5fL5Qp1KEDQkOcwA1eZS/n2QrnKyHNELsZzmAF5Hr5CVkiorFevXpoxY0aowwAAAAAAALUIi0ICAAAAAABoGCgkAAAAAAAAn53RVRvgO1ZtOPNKS0t17NgxNW3aVDExMaEOBwgK8hxmUFpcqGOH96ppiwzFxCWEOhwgKBjPYQbkefiikBCmKCQAAFBPLP8IAEBQcWsDcEpRUZG2bdumoqKiUIcCBA15DjMoKirStp/3k+eIaIznMAPyPHxRSABOKSoq0ubNmxmoENHIc5hBUVGxNm/fo6Ki4lCHAgQN4znMgDwPXxQSAAAAAACAzygkAAAAAAAAn1FIAAAAAAAAPqOQAJwSExOj1q1bs7QMIhp5DjOIiYlR6xZNyHNENMZzmAF5Hr5Y/jFMsfwjAAD1xPKPAAAEFVckAKe4XC4VFhbK5XKFOhQgaMhzmIHL5VJhUTF5jojGeA4zIM/DF4UE4BSbzaYvv/xSNpst1KEAQUOewwxstnx9uTRbNlt+qEMBgobxHGZAnocvCgkAAAAAAMBnFBIAAAAAAIDPKCQAAAAAAACfUUgAAAAAAAA+Y/nHMMXyj2eeYRhyuVyyWq2yWCyhDgcICvIcZmCUlcpVfFLWuEayRLH2OCIT4znMgDwPXyyuDJxisVgUFRUV6jCAoCLPYQYWi0VRVqvEh05EMMZzmAF5Hr64tQE4paCgQMuXL1dBQUGoQwGChjyHGRQUFGj5mh/Jc0Q0xnOYAXkevigkAKc4nU4dP35cTqcz1KEAQUOewwyczjIdP2mT01kW6lCAoGE8hxmQ5+GLQgIAAAAAAPAZhQQAAAAAAOAzCgkAAAAAAMBnFBKAUxISEtS7d28lJCSEOhQgaMhzmEFCQoJ69+hIniOiMZ7DDMjz8GUxDMMIdRDwZrPZlJaWpry8PKWmpoY6HAAAGg6XUyrJlWLTJSsrXQMAEGhckQCcUlxcrD179qi4uDjUoQBBQ57DDIqLS7Rn/yEVF5eEOhQgaBjPYQbkefiikACcUlhYqPXr16uwsDDUoQBBQ57DDAoLC7X+p53kOSIa4znMgDwPXxQSAAAAAACAzygkAAAAAAAAn1FIAAAAAAAAPqOQAJwSHR2tJk2aKDqaGb4RuchzmEF0dJSaNEpVdHRUqEMBgobxHGZAnocvln8MUyz/CABAPbH8IwAAQcUVCcAphmGorKxM1NYQychzmIFhGCpzuchzRDTGc5gBeR6+KCQAp+Tl5enTTz9VXl5eqEMBgoY8hxnk5dn06VerlJdnC3UoQNAwnsMMyPPwRSEBAAAAAAD4jEICAAAAAADwGYUEAAAAAADgMwoJAAAAAADAZyz/GKZY/vHMc7lcKi4uVlxcnKxWamyITOQ5zMDlLFFxwVHFJTeTNTo21OEAQcF4DjMgz8MXiysDp1itViUkJIQ6DCCoyHOYgdVqVUJ8nMSHTkQwxnOYAXkevvgXFjjFbrfr+++/l91uD3UoQNCQ5zADu92h79dvkd3uCHUoQNAwnsMMyPPwRSEBOKW0tFQHDx5UaWlpqEMBgoY8hxmUlpbq4OHj5DkiGuM5zIA8D18UEgAAAAAAgM8oJAAAAAAAAJ9RSAAAAAAAAD6jkACcEh8fr27duik+Pj7UoQBBQ57DDOLj49QtK1Px8XGhDgUIGsZzmAF5Hr4shmEYoQ4C3mw2m9LS0pSXl6fU1NRQhwMAQMPhckoluVJsumRlpWsAAAKNKxKAU0pLS/XLL78wKywiGnkOMygtLdUvR1i1AZGN8RxmQJ6HLwoJwCl2u11r1qxhnVpENPIcZmC3O7QmZ4vsdkeoQwGChvEcZkCehy8KCQAAAAAAwGcUEgAAAAAAgM8oJAAAAAAAAJ9RSABOsVqtSklJkdXK2wKRizyHGVijrEpJSpA1ijxH5GI8hxmQ5+GL5R/DFMs/AgBQTyz/CABAUFHaAQAAAAAAPqOQAJySl5enhQsXKi8vL9ShAEFDnsMM8vLytPDr1eQ5IhrjOcyAPA9fFBKAUwzDkNPpFHf7IJKR5zADw5CcZWUizRHJGM9hBuR5+KKQAAAAAAAAfEYhAQAAAAAA+IxCAgAAAAAA8BnLP4Ypln8885xOpwoKCpScnKzoaJYLQ2Qiz2EGzpJiFeT+ouT0VoqOjQt1OEBQMJ7DDMjz8EUhIUxRSAAAoJ5cTqkkV4pNl6x88AQAINC4tQE4xeFw6IcffpDD4Qh1KEDQkOcwA4ejUD9s2imHozDUoQBBw3gOMyDPwxeFBOCUkpIS7d69WyUlJaEOBQga8hxmUFJSot37DpHniGiM5zAD8jx8UUgAAAAAAAA+o5AAAAAAAAB8RiEBAAAAAAD4jEICcEpcXJw6duyouDiWCkPkIs9hBnFxseqY2VpxcbGhDgUIGsZzmAF5Hr5Y/jFMsfwjAAD1xPKPAAAEFVckAKc4nU6dOHFCTqcz1KEAQUOewwycTqdO5NrIc0Q0xnOYAXkevigkAKcUFBRo2bJlKigoCHUoQNCQ5zCDggK7ln33owoK7KEOBQgaxnOYAXkevigkAAAAAAAAn1FIAAAAAAAAPqOQAAAAAAAAfEYhATjFYrEoNjZWFosl1KEAQUOewwwsVotiY6JlsZLniFyM5zAD8jx8sfxjmGL5RwAA6onlHwEACCquSAAAAAAAAD6jkACcYrPZ9PXXX8tms4U6FCBoyHOYgS0/X19/u1a2/PxQhwIEDeM5zIA8D18RXUjYs2ePHnjgAXXt2lVJSUlq3LixBgwYoBkzZsjhcPjVt8Ph0AcffKC77rpLAwYMUKNGjRQTE6MmTZpo8ODBevzxx3Xo0KEAPROcCS6XS3a7XS6XK9ShAEFDnsMMXGUu2QuL5CojzxG5GM9hBuR5+IrYGwcXLFigSZMmeVSvHA6HsrOzlZ2drVmzZmnhwoXq1KlTnfvesGGDhgwZooKCAq9tJ06c0OrVq7V69Wq98MILeu2113T11Vf79VwAAAAAAAgXEXlFQk5Ojq6++mrZbDYlJyfrqaee0sqVK7Vo0SLddtttkqRt27Zp3Lhxyq/HZY82m81dRBgyZIimT5+ur776SuvWrdMXX3yhO+64Q1arVTabTdddd50+++yzgD4/AAAAAABCJSKvSJgyZYoKCwsVHR2tL7/8UoMHD3ZvGzVqlLKysvTwww9r27Ztev755/X444/XqX+r1aqrrrpK06ZNU/fu3b22jx49WmPGjNHll1+usrIy3XPPPdq+fTvLlgAAAAAAGryIW/5xzZo1GjRokCTpjjvu0CuvvOLVxuVyqWfPntq8ebPS09N15MgRxcTEBDyW3/zmN3r//fclSWvXrlXfvn193pflH8+80tJSnTx50j3fBRCJyHOYQWlxoU4e3a9GzdoqJi4h1OEAQcF4DjMgz8NXxN3a8NFHH7kf33zzzVW2sVqtuuGGGyRJubm5Wrx4cVBiGTlypPvxzp07g3IMBE5MTIyaN2/OIIWIRp7DDGJiYtS8KR86EdkYz2EG5Hn4irhCwvLlyyVJSUlJ6tevX7Xthg8f7n68YsWKoMRSXFzsfhwVFRWUYyBwioqKtGXLFhUVFYU6FCBoyHOYQVFRkbbs2EueI6IxnsMMyPPwFXGFhM2bN0uSOnXqpOjo6qeA6Nq1q9c+gbZ06VL3427dugXlGAicoqIibd26lYEKEY08hxkUFRVr6859Kioqrr0x0EAxnsMMyPPwFVGTLRYVFenYsWOSpLZt29bYtlGjRkpKSpLdbte+ffsCHssPP/yghQsXSpJ69epVayGhuLjY4wqGimUrc3NzPdZNjYmJUVJSksrKyqpccSI9PV2SlJ+fr7KyMo9tiYmJio2NVXFxsQoLCz22RUdHKzk5WYZhKC8vz6vf1NRUWa1W2e12lZaWemyLj49XfHy8SkpK5HA4PLZFRUUpJSXF/VxOl5KSoqioKDkcDpWUlHhsi4uLU0JCgkpLS2W32z22Wa1W99wRNpvNa23ZpKQkxcTEqLCw0OO8SlJsbKwSExO9zuHp57Omc1hUVOQ1oFW8Ni6Xy2PZ0QppaWmyWCwqKCiQ0+n02JaQkKC4uDi/zmFNr01t5zAvL0+nT5eSnJys6OjoGs+h0+n0WgbVYrEoLS1NUs2vTbDOYbDy259zWFN+B+scVjdGVDg9zyTGiArVjREVfBlnGSNCO0Y4HOX5m19QIFnLrwhkjCjH54hykTBGVBw7Pz+fMeIUPkeUi6QxonIMjBFn7nNERYw1iahCQuUXKjk5udb2FYWE0998/iouLtatt97qToynnnqq1n2mT5+uJ554wuv3K1asUGJiovvntm3bql+/fiosLPS44qHCZZddJql8CcyTJ096bOvbt6/atWunAwcO6Mcff/TY1qxZM5133nlyOp1V9nvJJZcoLi5OGzdu1KFDhzy29ejRQ506ddLRo0eVnZ3tsS0tLU0jRoyQJC1btszrTThy5EilpqZq69at2rt3r8e2rKwsde/eXXl5eV63n8THx+viiy+WJK1atcrrjTZkyBA1bdpUu3bt0vbt2z22ZWRkqE+fPrLb7VU+1wpr1671Guj69++vNm3aaP/+/frpp588trVs2VKDBg1SaWlplf2OHTtWMTEx2rBhg44ePeqxrVevXurQoYMOHz6sdevWeWxr1KiRhg0bJklV9nvBBRcoOTlZW7Zs0f79+z22denSRV27dtXJkye1atUqj21JSUm68MILJUkrV670GlyHDh2qxo0ba+fOnV5zfLRv317nnHOOCgoKvGKKjo7WuHHjJEnZ2dleA+jAgQPVqlUr7d271+tqoNatW2vAgAEqLi6u8rleeumlioqK0vr163X8+HGPbb1791ZmZqYOHTqk9evXe2xr0qSJzj//fLlcrir7HT16tBISErRp0yYdPHjQY1u3bt3UuXNnHTt2TGvWrPHYlpKSolGjRkkqv63q9EF7+PDhSk9P1/bt27V7926PbR07dlTPnj1ls9m0bNkyj22xsbEaM2aMpPIJZE//x23w4MFq3ry5du/era1bt3psq22MqLita8uWLV6vDWNEuZrGCKvVqvHjx0tijAjnMWLbjvLXdF3Oevc2xohyfI4oF0ljxLp16xgjTuFzRLlIGyMqMEacuc8RFa9zTSJq1YZ9+/YpIyNDknT99dfrjTfeqLF9RkaG9u3bp44dO2rHjh0Bi+O2227TrFmzJEk33nij5s6dW+s+VV2R0K5dO+3Zs8dj1YZwqxJKkfNNQn5+vtatW+cetMO5SlgZ3ySU45uEcr5ckbB06VINGDDAo0gpMUZUiIRvEioz4xhxcP9+fb92rfr26a2U1PJjMUZ4nkM+RzT8MaLic0vfvn3VvHlzxoh6nMPKGCPKhdsYUfnzeWJiImNEGF2REFGFhKNHj6p58+aSpKuvvlrz58+vsX2LFi105MgR9ezZ06tqVl/Tp0/X1KlTJUkDBgzQ4sWLlZSUVOd+WP7xzLPb7dqyZYu6du1ar9cMaAjIc5iBvcCmLZs2qmv3nkpK5t9QRCbGc5gBeR6+IurWhopKiiSfbleoqDz5chuEL1599VV3EaFr167673//S8I3ILWt9AFEAvIcZpCUmKh+Z3eWYhNrbww0UIznMAPyPHxF1KoN8fHxatKkiSR53eN1upMnT7oLCe3atfP72P/5z3/029/+VpKUmZmpr776Sk2bNvW7X5w5ZWVlKigo8LrECIgk5DnMoKysTAX2QvIcEY3xHGZAnoeviCokSFL37t0lSTt27PC6N6SyLVu2uB/7uzTjJ598ohtuuEEul0utWrXSokWLal01AuEnPz9fixYtqnGme6ChI89hBnn5Ni1avk55+d73kAKRgvEcZkCeh6+IKyScf/75kspvW1i7dm217SrPdDlkyJB6H2/RokW66qqr5HQ61aRJE3311Vfq2LFjvfsDAAD+qZj+KYKmgQIAIKxEXCFhwoQJ7sdz5sypso3L5XKv6JCenq6RI0fW61grV67UZZddpuLiYqWlpemLL75Qjx496tUXAAAAAAANQcQVEgYOHKihQ4dKkmbPnu215q0kPf/88+51Z6dMmaKYmBiP7UuWLJHFYpHFYtFNN91U5XHWr1+vcePGyW63KykpSQsXLmQiEAAAAABAxIuoVRsqvPTSSxoyZIgKCws1evRoTZ06VSNHjlRhYaHmz5+v1157TZLUuXNnPfDAA3Xuf+fOnbr44ovd62z+z//8j9LS0rRx48Zq92nevLl7aUoAAAAAABoqixGhNxAuWLBAkyZNks1W9URLnTt31sKFC9WpUyevbUuWLHHf7nDjjTdq7ty5Htvnzp2rm2++uU7xTJs2TY8//rjP7W02m9LS0pSXl6fUVNbABgDAV05nkfLy9ygtJVPR0fGhDgcAgIgTcbc2VBg/frw2bNig++67T507d1ZiYqLS09PVv39/PfPMM8rJyamyiAAAAAAAAKoXsVckNHRckXDm5efnKycnR3369FFKSkqowwGCgjyHGeTmHte6ddnq27e/0tObhDocICgYz2EG5Hn4itgrEoC6Kisr08mTJ1VWVhbqUICgIc9hBmVlZcrPLyLPEdEYz2EG5Hn4opAAAAAAAAB8RiEBAAAAAAD4jEICAAAAAADwGYUE4JTExET17dtXiYmJoQ4FCBryHGaQkBCvzl1aKSGBpR8RuRjPYQbkefhi1YYwxaoNAADUj9NZpLz8PUpLyVR0NMUEAAACjSsSgFOKi4v1888/q7i4ONShAEFDnsMMiotLdPDgSRUXl4Q6FCBoGM9hBuR5+KKQAJxSWFioH3/8UYWFhaEOBQga8hxmUFRUpJ93HFZRUVGoQwGChvEcZkCehy8KCQAAAAAAwGcUEgAAAAAAgM8oJAAAAAAAAJ9RSABOiY6OVrNmzRQdHR3qUICgIc9hBtHRUUpvlKTo6KhQhwIEDeM5zIA8D18s/ximWP4RAID6YflHAACCiysSgFMMw1BpaamorSGSkecwA8Mw5HSWkeeIaIznMAPyPHxRSABOycvL03//+1/l5eWFOhQgaMhzmIHNlq/VK7fLZssPdShA0DCewwzI8/BFIQEAAAAAAPiMQgIAAAAAAPAZhQQAAAAAAOAzCgkAAAAAAMBnLP8Yplj+8cxzuVwqLS1VTEyMrFZqbIhM5DnMoKTEoRMnd6lxo7MUG5sY6nCAoGA8hxmQ5+ErOtQBAOHCarUqLi4u1GEAQUWewwysVqtiYqP50ImIxngOMyDPwxf/wgKn2O12fffdd7Lb7aEOBQga8hxmYLc7tGnjftntjlCHAgQN4znMgDwPXxQSgFNKS0t16NAhlZaWhjoUIGjIc5iB0+nUiRMFcjqdoQ4FCBrGc5gBeR6+KCQAAAAAAACfUUgAAAAAAAA+o5AAAAAAAAB8RiEBOCU+Pl49evRQfHx8qEMBgoY8hxnEx8fprA7NFR/PTN+IXIznMAPyPHxZDMMwQh0EvNlsNqWlpSkvL0+pqamhDgcAgAbD6SxSXv4epaVkKjqaD58AAAQaVyQAp5SUlOjAgQMqKSkJdShA0JDnMIPS0lIdO2pjlm9ENMZzmAF5Hr4oJACnOBwOZWdny+Fg3XFELvIcZuBwFGrL5oNyOApDHQoQNIznMAPyPHxRSAAAAAAAAD6jkAAAAAAAAHxGIQEAAAAAAPiMQgJwSlRUlNLS0hQVFRXqUICgIc9hBlarVUnJcbJa+ZiDyMV4DjMgz8MXyz+GKZZ/BACgflj+EQCA4KJUDwAAAAAAfEYhATglNzdXCxYsUG5ubqhDAYKGPIcZ5OXZtGLZVuXl2UIdChA0jOcwA/I8fFFIACpxuVyhDgEIOvIcZsCdmzADxnOYAXkenigkAAAAAAAAn1FIAAAAAAAAPqOQAAAAAAAAfMbyj2GK5R/PvLKyMtntdiUlJbFWLSIWeQ4zKC626/DRnWrRrKPi4pJCHQ4QFIznMAPyPHxFhzoAIFxERUVRtEHEI89hBlFRUUpKiuNDJyIa4znMgDwPX9zaAJzicDiUk5Mjh8MR6lCAoCHPYQYOR6G2b/tFDkdhqEMBgobxHGZAnocvCgnAKSUlJdq7d69KSkpCHQoQNOQ5zKC0tFSHD+WptLQ01KEAQcN4DjMgz8MXhQQAAAAAAOAzCgkAAAAAAMBnFBIAAAAAAIDPKCQAp8TFxSkrK0txcXGhDgUIGvIcZhAXF6u27RorLi421KEAQcN4DjMgz8OXxTAMI9RBwJvNZlNaWpry8vJY8gQAgDpwOouUl79HaSmZio6OD3U4AABEHK5IAE4pLS3VsWPHmOUbEY08hxk4nU7l5trldDpDHQoQNIznMAPyPHxRSABOsdvtWrFihex2e6hDAYKGPIcZ2O0ObdywT3Y7644jcjGewwzI8/BFIQEAAAAAAPiMQgIAAAAAAPAZhQQAAAAAAOAzCgnAKVarVfHx8bJaeVsgcpHnMAOLxaLY2GhZLJZQhwIEDeM5zIA8D18s/ximWP4RAID6YflHAACCi9IOAAAAAADwGYUE4BSbzaYvvvhCNpst1KEAQUOewwxstnytWb1DNlt+qEMBgobxHGZAnocvCgnAKS6XS0VFRXK5XKEOBQga8hxmYBiGSkqc4u5NRDLGc5gBeR6+KCQAAAAAAACfUUgAAAAAAAA+o5AAAAAAAAB8xvKPYYrlH8+80tJS5eXlKS0tTTExMaEOBwgK8hxmUFRUoAO/bFObVp0VH58c6nCAoGA8hxmQ5+GLQkKYopAAAED9OJ1Fysvfo7SUTEVHx4c6HAAAIg63NgCnFBYWatOmTSosLAx1KEDQkOcwg6KiIu3edURFRUWhDgUIGsZzmAF5Hr4oJACnFBcXa/v27SouLg51KEDQkOcwg+LiEu3fd0LFxSWhDgUIGsZzmAF5Hr4oJAAAAAAAAJ9RSAAAAAAAAD6jkAAAAAAAAHxGIQE4JTY2VhkZGYqNjQ11KEDQkOcwg5iYGLVoyVJhiGyM5zAD8jx8sfxjmGL5RwAA6oflHwEACC6uSABOKSsrk81mU1lZWahDAYKGPIcZlJWVyW4vJs8R0RjPYQbkefiikACckp+fr8WLFys/Pz/UoQBBQ57DDAoK7MpZu0sFBfZQhwIEDeM5zIA8D18UEgAAAAAAgM8oJAAAAAAAAJ9RSAAAAAAAAD6jkABUYrXylkDkI89hBhaLJdQhAEHHeA4zIM/DE8s/himWfwQAoH5Y/hEAgOCivAMAAAAAAHxGIQE4JT8/X0uWLGF5GUQ08hxmkJ9foJx1u5SfXxDqUICgYTyHGZDn4YtCAnBKWVmZ8vLyVFZWFupQgKAhz2EGLpdL9oJiuVyuUIcCBA3jOcyAPA9f0aEOADVzOsv/Q/BVjE9lZZxzRC7yHGZAnsMMyHOYAXkeGhaLFBVVcxsKCWHul1+kAq7MPCMcjvL/Hz0q2e2hjQUIFvIcZlBxBezRo1JRUWhjAYKF8RxmQJ6HRkyM1KpVzW0oJIS5qCgpNjbUUZhDaWn5/2NiOOeIXOQ5zCAm5v/+T54jUjGewwzI8zOvrOz/zntNKCSEuagoKZpX6YxISkpUly79lZSUyDlHxCLPYQaJiQlq07atEhMTyHNELMZzmAF5Hhq+TEnBywGcEh0dq6ZN24Q6DCCoyHOYQXR0jFLT0hQdHRPqUICgYTyHGZDn4YtVG4BTSkqKdODADpWUcEMtIhd5DjMoLS3W8WPHVFpaHOpQgKBhPIcZkOfhiysSwtxVVwXu1oYJE6Q77qi5zauvSh99FJjjVfjss5q3Hz0q3XBDYI95223Sr39dc5unnpKWL/+/n8vKouVwNFZiYnSts5RWpUkT6a23am6zaZP0wAN177smf/yjNGxYzW3uu0/asiVwx+zaVXrhhZrbfPutNH164I4pSc8/L3XvXnObSZOk48cDd8zzz5cefbTmNh98IL3+euCOKUlvvCE1a1ZzmzFj6t5vTXnOGOHp9DHCX4wRnoI5RpSUFOvI4cNq3qyDEhI82zBG1B9jhKdQjxH+fm6pYMYxoiaMEfUXjDHClzxnjPg/gfgcYRjlOVkbCglhbv36wPXVv3/tbfbvl7KzA3dMX5SWBv6Yv/pV7W127jz9uNGSGtf7mLXNbCqVzzYb6Od68mTtbbZsOfOv68mTgT+mL7P1bthQvtpJoPjyuh4+HPjn6sskN/U7ZvV5zhjhyXuM8A9jhCfGCP8Eb4yoHmOEp9CPEf59bqnAGOGJMaL+gjNG+J/n5h0jgotbGwAAAAAAgM8itpCwZ88ePfDAA+ratauSkpLUuHFjDRgwQDNmzJCjYkHSAPjss890+eWXq23btoqLi1Pbtm11+eWX67ParrEBAAAAAKABishbGxYsWKBJkybJZrO5f+dwOJSdna3s7GzNmjVLCxcuVKdOnep9DJfLpdtvv12zZ8/2+P2BAwd04MABffTRR7r11lv16quvymqN2HoNAABhJyoqWskpKYqKisiPOQAAhFzE/Qubk5Ojq6++WoWFhUpOTtYf//hHjRw5UoWFhZo/f75ef/11bdu2TePGjVN2drZSUlLqdZxHH33UXUTo06ePHn74YXXs2FE7d+7Us88+q5ycHM2aNUvNmjXTX//613o/n969AzfZYtu2vrXx5f6mQIqJCfwxW7SovU3HjoE9bpMmtbdJSgr8c23UqPY2XbsG9pi+9NeoUeCfa1JS7W3OPltqE8BVgjp2rL1NixaBf64xPqxaF+hjMkZ4Yoyov1CPEfHxiWqXkaH4+ESvNowR9ccY4Ykxov5CPUbUhDGi/hgjPDXUMcIwfGtnMQxfmzYMw4YN07JlyxQdHa1vv/1WgwcP9tg+Y8YMPfzww5KkadOm6fHHH6/zMbZt26YePXrI6XSqf//++vbbb5VQaVpoh8Oh4cOHKzs7W9HR0dq8eXOdr36w2WxKS0vTtm15atQotc4xou5cLpfKykoVFRXDVSSIWOQ5zKCkxKFc216lp2YoNta7mABEAsZzmAF5fuY5nVJJiZSRUXO7iHo11qxZo2XLlkmSbrnlFq8igiQ98MAD6tatmyTppZdeUqkvU5qe5sUXX5TT6ZQkvfzyyx5FBElKTEzUyy+/LElyOp16obb1bRAWHA6b1qz5XA6HrfbGQANFnsMMCgsLtH3rVhUWFoQ6FCBoGM9hBuR5+IqoWxs+qrQo6c0331xlG6vVqhtuuEF//OMflZubq8WLF2v06NE+H8MwDH388ceSpK5du+rcc8+tst25556rLl26aOvWrfr444/1//7f/5PFYvH9yZxSVlZeFULwlZX93/8554hU5DnMoKzM4v4/eY5IxXgOMyDPz7yKc16biCokLF++XJKUlJSkfv36Vdtu+PDh7scrVqyoUyFh165dOnjwoFc/1R1n69atOnDggHbv3q2zzjrL5+NUKCsrv7QEwVdxcUppKecckYs8hxmUOq3u/5PniFSM5zAD8jw0fJljI6IKCZs3b5YkderUSdE1zFDYtdIMLxX7+GrTpk1V9uPLcepTSGjVSkplioQzIi9P2rpVatZMSksLdTRAcJDnMIMTJ6Ud28vzvLEPE8kBDRHjOcyAPA8NXy6kj5hCQlFRkY4dOyZJalvLlKGNGjVSUlKS7Ha79u3bV6fj7N+/3/24tuO0a9fO/biux6kQHR24VRtQs6io//s/5xyRijyHGZDnMAPyHGZAnoeviHk58vPz3Y+Tk5NrbV9RSCgoqNtETHU5TlKlNWZqO05xcbGKi4vdP9ts5ROK5ObmyuVyuX8fExOjpKQklZWVecRSIT093R1n2Wk3uCQmJio2NlbFxcUqLCz02BYdHa3k5GQZhqG8vDyvflNTU2W1WmW3270mqIyPj1d8fLxKSkrkcDg8tkVFRbmX2MzNzfXqNyUlRVFRUXI4HCo57XqluLg4JSQkqLS0VHa73WOb1WpV6qlLNWw2m8c5ksrPfUxMjAoLCz3OqyTFxsYqMTHR6xwahqEhQ4Yo7VS5s6ZzWFRUpKKiIo9tFa+Ny+Vyv36VpaWlyWKxqKCgwD1ZZ4WEhATFxcX5dQ5rem1qO4d5eXk6fQGX5ORkRUdH13gOnU6nV25bLBb3OazptQnWOQxWfvtzDmvK72Cdw+rGiLS0NI0dO1ZFRUVe+cQYUa66MaKCL+MsY0RoxwhrlFU9+/eUIcN9ThgjPM8hnyMa/hhR8bnFMAwVFxczRtTjHFbGGFEu3MYIwzB0wQUXKCkpiTHiDH6OqIixJhFTSKh8omNjY2ttHxcXJ0leSR7I41Qcw5fjTJ8+XU888YTX71esWKHExP9buqpt27bq16+fCgsLtXTpUq/2l112mSQpJydHJ0+e9NjWt29ftWvXTgcOHNCPP/7osa1Zs2Y677zz5HQ6q+z3kksuUVxcnDZu3KhDhw55bOvRo4c6deqko0ePKjs722NbWlqaRowYIUlatmyZ15tw5MiRSk1N1datW7V3716PbVlZWerevbvy8vK0YsUKj23x8fG6+OKLJUmrVq3yeqMNGTJETZs21a5du7R9+3aPbRkZGerTp4/sdrvXc7VarRo/frwkae3atV4DXf/+/dWmTRvt379fP/30k8e2li1batCgQSotLa3yHI4dO1YxMTHasGGDjh496rGtV69e6tChgw4fPqx169Z5bGvUqJGGDRsmSVX2e8EFFyg5OVlbtmzxuGJGkrp06aKuXbvq5MmTWrVqlce2pKQkXXjhhZKklStXeg2uQ4cOVePGjbVz507t3LnTY1v79u11zjnnqKCgwCum6OhojRs3TpKUnZ3tNYAOHDhQrVq10t69e71uLWrdurUGDBig4uLiKp/rpZdeqqioKK1fv17Hjx/32Na7d29lZmbq0KFDWr9+vce2Jk2a6Pzzz5fL5aqy39GjRyshIUGbNm1yz4FSoVu3burcubOOHTumNWvWeGxLSUnRqFGjJJXP0XL6oD18+HClp6dr+/bt2r17t8e2jh07qmfPnrLZbO7VZirExsZqzJgxkspXozn9H7fBgwerefPm2r17t7Zu3eqxzZcxIiYmRqtWrWKMYIyI2DHipx9/YozwY4yQ+BzBGFEuUscIPkcwRkiMERWqGiMqXueaWIzTS18N1NGjR9W8eXNJ0tVXX6358+fX2L5FixY6cuSIevbs6ZXoNZkxY4YefvhhSdJnn32mSy65pNq2n332mcaOHStJeu655/TAAw9U27aqKxLatWunPXv2uKthUvhVCaXI+SbB4XBo+/bt6tevn5KTk8O6SlgZ3ySU45uEcrWNEdHR0dqwYYM6duzoUeyUGCMqRMI3CZWZcYw4cuSINm/erKysLHcxnjHC8xzyOaLhjxEVn1uysrLUpEkTxoh6nMPKGCPKhdsY4XA49PPPP6t3796KjY1ljAijKxIippBQVFSkhIQESdK4ceP06aef1tg+OTlZdrtd5557rleFtSavvPKK7rrrLknSu+++q9/85jfVtn3vvfd05ZVXuve74447fD6OzWZTWlqa8vLyPAoJCJ7c3FwtXbrUXf0FIhF5DjMgz2EG5DnMgDwPX9ZQBxAo8fHxatKkiSR5XZZ1upMnT7qrTpUnRPRF5QkWaztO5QkW63ocAAAAAADCUcQUEiSpe/fukqQdO3Z4Xc5R2ZYtW9yPu3XrVq9jnN5PoI8DAAAAAEA4iqhCwvnnny9JstvtWrt2bbXtKk9OMWTIkDod46yzzlLr1q29+qnKt99+K0lq06aN2rdvX6fjAAAAAAAQjiKqkDBhwgT34zlz5lTZxuVy6Y033pBUPonEyJEj63QMi8XinsVyy5YtWr16dZXtVq9e7b4i4bLLLpPFYqnTcXDmJSQkqFevXu65NoBIRJ7DDMhzmAF5DjMgz8NXRBUSBg4cqKFDh0qSZs+eXeUkis8//7x7qZgpU6YoJibGY/uSJUtksVhksVh00003VXmce++9V1FRUZKke+65x2tW0sLCQt1zzz2Symcovffee/15WjhD4uLi1KFDB6+Z7IFIQp7DDMhzmAF5DjMgz8NXRBUSJOmll15yL4UyevRoTZ8+XatXr9bixYt1xx13uJdu7Ny5c43LMdakc+fOeuihhySVr287ZMgQvf3228rOztbbb7+tIUOGuNc4feihh5SVlRWYJ4egKikp0b59+7yWhgEiCXkOMyDPYQbkOcyAPA9f0aEOIND69Omjt99+W5MmTZLNZtPUqVO92nTu3FkLFy50r5dZH0899ZSOHDmif/7zn8rJydHEiRO92txyyy36n//5n3ofA2eWw+HQunXrNHz4cMXGxoY6HCAoyHOYAXkOMyDPYQbkefiKuCsSJGn8+PHasGGD7rvvPnXu3FmJiYlKT09X//799cwzzygnJ0edOnXy6xhWq1WzZ8/WwoULddlll6l169aKjY1V69atddlll+m///2vZs2aJas1Ik8xAAAAAMCkIu6KhAqZmZmaOXOmZs6cWaf9RowYIcMwfG4/duxYjR07tq7hAQAAAADQIPF1OQAAAAAA8BmFBOCUqKgoNWrUyL0iBxCJyHOYAXkOMyDPYQbkefiyGHW5jh9njM1mU1pamvLy8pSamhrqcAAAAAAAkMQVCQAAAAAAoA4oJACn5Obm6uOPP1Zubm6oQwGChjyHGZDnMAPyHGZAnocvCgkAAAAAAMBnFBIAAAAAAIDPKCQAAAAAAACfUUgAAAAAAAA+Y/nHMMXyj2deWVmZCgsLlZCQwFq1iFjkOcyAPIcZkOcwA/I8fFFICFMUEgAAAAAA4YhbG4BT7Ha71q5dK7vdHupQgKAhz2EG5DnMgDyHGZDn4YtCAnBKaWmp9u/fr9LS0lCHAgQNeQ4zIM9hBuQ5zIA8D18UEgAAAAAAgM8oJAAAAAAAAJ9FhzoAVK1iDkybzRbiSMzDZrPJ4XDIZrPJaqXGhshEnsMMyHOYAXkOMyDPQyclJUUWi6Xa7RQSwlR+fr4kqV27diGOBAAAAABgJrWtHsjyj2HK5XLp4MGDtVaCEDg2m03t2rXTvn37WHITEYs8hxmQ5zAD8hxmQJ6HDlckNFBWq1Vt27YNdRimlJqaykCFiEeewwzIc5gBeQ4zIM/DDzeaAAAAAAAAn1FIAAAAAAAAPqOQAJwSFxenadOmKS4uLtShAEFDnsMMyHOYAXkOMyDPwxeTLQIAAAAAAJ9xRQIAAAAAAPAZhQQAAAAAAOAzCgkAAAAAAMBnFBIAAAAAAIDPKCSgwdizZ48eeOABde3aVUlJSWrcuLEGDBigGTNmyOFwBOQYu3bt0n333aeePXsqJSVFSUlJysrK0m9/+1v99NNPdeqrtLRUc+fO1bhx45SRkaG4uDg1bdpUvXr10q233qp33303IDEjsjSkPF+1apUmT56sLl26KDk5WXFxcWrVqpUuvvhivf766yopKQlIvIgMR44c0aeffqrHHntMY8aMUdOmTWWxWGSxWHTTTTcF5Zj/+c9/NHr0aLVs2VLx8fHKzMzUpEmTtGrVKp/7cDgcevbZZzVgwAA1btxYSUlJ6tq1qx544AHt2bMnKHGj4Wpoeb579269/PLLuuKKK5SVlaXExETFx8erbdu2mjBhgubPny+n0xmUuNFwNbQ8r85nn33mjttisejxxx8PXMBmYAANwCeffGKkpqYakqr8r3Pnzsb27dv9Osarr75qxMbGVnuM2NhY4+WXX/aprx9++MHo2bNntX1JMtLS0vyKF5GnoeS5y+Uy7rnnnhrzW5LRo0cPY8+ePX7Fi8hRU67ceOONAT2Ww+Ewxo4dW+3xrFar8fjjj9faz/bt242srKxq+0lNTTUWLFgQ0NjRsDWkPP/Tn/5kWCyWWsfyAQMGMJbDQ0PK8+oUFBQYmZmZHn1NmzYtoLFHOgoJCHvr1q0zEhISDElGcnKy8dRTTxkrV640Fi1aZNx2220ef2TZbLZ6HeM///mPxx/4Tz75pLF8+XLj+++/N1577TWjU6dOhiTDYrEYb7/9do19/fDDD0bjxo0NSUZ8fLxx9913G5988omxdu1aY9WqVcYbb7xhXHvttUa7du3qFSsiU0PK87/+9a/uflJSUoxp06YZX375pbFy5Upjzpw5HkW0nj17GqWlpfU9LYgglT+sZWRkGKNHjw7aB8+JEye6+x45cqTx0UcfGWvWrDFmz55tdOzY0b3t1VdfrbYPm81mdO7c2d32tttuMxYtWmSsXLnSeOqpp4zk5GRDkpGYmGjk5OQENH40XA0pz2+55RZDkpGUlGRMmjTJmDNnjrF8+XIjOzvbePPNN40BAwa4+8jKyjLy8/MDGj8aroaU59W57777DElG8+bNKSTUE4UEhL2hQ4cakozo6Ghj5cqVXtufffZZvwYAu93uHkSSk5ONH3/80atNXl6e0atXL0OS0aJFi2r/MS0sLHR/8MzIyDC2bdtW7XGLi4vrHCsiV0PJ85KSEiM9Pd2Qyq9eqOoPqNLSUmPQoEHueN999906x4vI89hjjxkLFiwwDh06ZBiGYezatSsoHzwXLVrk7nf8+PGG0+n02H706FEjIyPDkGSkp6cbJ06cqLKfP//5z+5+nn32Wa/tK1asMKKjow1JxvDhwwMWPxq2hpTnDz/8sPHMM89UW5x2Op3GVVdd5T7OE088EbD40bA1pDyvSnZ2thEVFWXExcUZr7/+OoWEeqKQgLD23Xffud/cd9xxR5VtysrKjG7durkHkZKSkjod491333Uf49FHH6223VdffeVuV92l33/5y1/cl1mtXr26TnHAvBpSnv/www/u7b/+9a+r7efjjz92t7v//vvrFCvMIVgfPMeMGeMuyu3bt6/KNpWvzqmqSFBSUmKkpaUZkoxu3boZZWVlVfZzxx13uPtZs2ZNwJ4DIkc457kvjh075r4drlevXv6EjAjWkPLc6XQaffr0cRfHFi9eTCGhnphsEWHto48+cj+++eabq2xjtVp1ww03SJJyc3O1ePHiOh0jOzvb/XjMmDHVthsxYoTi4+MlSe+9957X9rKyMr3yyiuSpAsvvFCDBg2qUxwwr4aU55UnUOzQoUO1/XTs2LHKfYBgys/P16JFiySVj8Nt27atst2vf/1rpaamSpI+/PBDr+2LFy9WXl6eJOnGG2+U1Vr1x6XKk4pV1Q8QDIHKc180adJEZ599tiRp586d9eoDqI9g5fkLL7ygnJwcde7cWY888kjgAjYhCgkIa8uXL5ckJSUlqV+/ftW2Gz58uPvxihUr6nSM48ePux+3aNGi2nbR0dFq3LixpPLZ6k+fxXjlypU6cOCAJOlXv/qV+/dFRUXauXOnDhw4oLKysjrFBnNoSHmelZUli8UiSfr555+r7afyB84uXbrUKVagvr7//nt34ary++V0sbGxOvfcc937lJaWemyveE/W1k///v2VmJgoqe7vSaC+ApXnviouLpYkRUVF1Wt/oD6Ckee7d+/WtGnTJEn/+Mc/FBcXF8CIzYdCAsLa5s2bJUmdOnVSdHR0te26du3qtY+vkpOT3Y8rvoGqimEYstlsksq/Yd2xY4fH9tWrV7sf9+rVS9u3b9cVV1yh1NRUderUSW3btlWTJk10ww03UNWHh4aU52lpabrmmmskSZ9++qk2bNjg1YfT6dT06dO92gPBtmnTJvfjyu+XqlRsdzqd2r59e736iY6OVqdOnSTV/T0J1Feg8twXR44cced2t27d6rw/UF/ByPO77rpLDodD1113nUaNGhWYQE2MQgLCVlFRkY4dOyZJ1V7OVKFRo0ZKSkqSJO3bt69Ox6n8D+PSpUurbZeTk6OCggL3z3v37vXYXnnA27Jli/r06aMPPvjAozKal5enN998U3369NHXX39dpzgRmRpankvSzJkz1bdvX5WUlGjo0KF68skn9fXXX2v16tWaN2+e+vfvr9WrVysxMVFvvPGGmjRpUqdYgfrav3+/+3Ft76d27dq5H5/+fqroJykpSenp6T71c/ToUfc3t0AwBSrPfTFjxgz3lWlXXXVVnfcH6ivQef7vf/9bn3/+udLT0zVz5szABGlyFBIQtvLz892PK3+bWp2KP7Aq/xHkizFjxri/BZ45c6b7j7rKXC6XHn300Wrjk6QTJ064H0+ZMkV2u1333Xeftm/fruLiYu3cuVMPPfSQLBaL8vPzdeWVV1b5RxrMpaHluVR+a8SyZcv04osvKiEhQdOmTdNFF12kwYMH66abbtKGDRt06623au3atR63+QDBVpf3U8V7SfJ+P1X0U5f3ZFX9AMEQqDyvzXfffacXX3xRUvkfcnfddVed9gf8Ecg8P3HihO677z5J0vTp09W8efMARWluFBIQtoqKityPY2Nja21fcZ9TYWFhnY7Trl073XnnnZKkAwcOaMiQIfr4449ls9lUVFSk1atXa+zYsfr888894jj9OHa73SP2J598UjNnzlSnTp0UGxurDh066Nlnn9VTTz0lqXzCvIrLv2FeDS3PK3zzzTd66623dPjwYa9thmHo448/1ty5c5loEWdUXd5Ple+NPT3PK/qpy3uyqn6AYAhUntfk8OHD+s1vfiOn0ymLxaJ58+a55wMBzoRA5vmDDz6oI0eOaNCgQbr99tsDF6TJUUhA2KqYOV7ybdb3iktKExIS6nys5557TmPHjpUkbdu2TRMmTFBaWpoSEhI0ePBgffHFF+rfv79uueUW9z4pKSnVxtu0adNqZ4J96KGH1LJlS0nSO++8I8Mw6hwvIkdDy3NJeumll/SrX/1K2dnZGjZsmL766ivl5eWpuLhYmzZt0oMPPqgTJ07omWee0ahRo/iWFmdMXd5PlW9DOP39VNFPXd6TVfUDBEOg8rw6+fn5GjdunPvS8qeffpr7yXHGBSrPlyxZojlz5igqKkqvvPJKtavwoO44kwhblf+A8eUPkYorAny5FPV0cXFxWrBggV5//XX17t3bPSu9JDVv3lyPPvqoli1b5vFHf6NGjaqNd8SIEdVWT6Ojo3XBBRdIKr/UqqaZ7xH5Glqeb9iwQffff78Mw9CFF16ob775RhdeeKFSU1MVGxurbt26acaMGXrttdcklc9kXzFDMhBsdXk/Vb6K7PT3U0U/dXlPVtUPEAyByvOqFBUV6bLLLtPatWsllX+T+/DDD9czUqD+ApHnxcXFuuOOOyRJv//979W7d+/ABmly1U8PDoRYfHy8mjRpouPHj3tMuFKVkydPugeRyhOu1IXVatWtt96qW2+9Vfn5+Tp8+LASExPVsmVLd/Wy8kyw3bt399i/8nFri6Hy9qNHj6pjx471ihkNX0PL8zlz5sjlckmSnnjiiWqXA5s8ebKefvppbd++XXPnztVzzz3nUbgAgqHyhFz79+9X//79q21beUKu099Pbdu21XfffSe73a7c3NwaJ1ys6KdZs2YsJYYzIlB5fjqn06mrrrpKixcvliTdeuutmjFjhp/RAvUTiDz/4IMPtG3bNsXExKh79+6aP3++176VJ0vfuHGju82gQYN01lln+fUcIh2FBIS17t27a9myZdqxY4ecTme1S+Nt2bLF/TgQyxOlpKR4XdJdVlam9evXS5I6dOigpk2bemzv0aOHR9uaVN5e03J/MIeGlOeVl7jr27dvjf337dtX27dv14kTJ3TkyBG1aNHC75iBmlQufFV+v1SlYnt0dLSysrK8+nn//ffd7SrWKD+d0+l0L+fL0ng4UwKV55W5XC5df/31WrBggSTp6quv1quvvhqAaIH6CUSeV9zyUFpaqttuu63WY77//vvusX/OnDkUEmrBrQ0Ia+eff76k8kuWKi6zq0rl5eyGDBkSlFgWL16s48ePSyr/B/Z0w4YNcz+u7XaFig+ektSmTZsARYiGqiHleeUiR8WSYNWpvPQpBTOcCQMGDHDfVlbTMqclJSVavXq1e5+YmBiP7RXvydr6yc7Odl8lFKz3JHC6QOV5ZXfccYf7m9jx48frrbfe4l5yhFQw8hyBxQiBsDZhwgT34zlz5lTZxuVy6Y033pAkpaena+TIkQGPwzAMPf7445KkmJiYKquaZ511lvr06SOp/I+xvLy8KvvKz8/X119/LUnq2LGjWrVqFfB40bA0tDyvsGzZsmr7Ki0t1apVqyRJaWlpaty4cWCDBaqQkpLinoPm66+/rvZ2oQ8++EA2m02SdPnll3ttHzFihNLS0iRJ8+bNq3ZS3Llz57ofV9UPEAyByvMK999/v2bNmiVJuuCCC/Tuu+9S/EXIBSLPb7rpJhmGUeN/FbfySNK0adPcv7/pppuC88QiCIUEhLWBAwdq6NChkqTZs2e7/zCp7Pnnn3dfbj1lyhSvSuSSJUtksVhksViqHRSOHz/uMeNrZWVlZbr77ru1YsUKSdIf//jHai91+sMf/iCp/Jvle++9t8o2999/v3vAq1iOD+bWkPJ8/Pjx7sd/+MMf3Ll8umnTpumXX36RJI0dO5b5ERAQc+fOded5RdHrdA8++KCk8itmfve733ndanbs2DH3qjrp6em69dZbvfqIjY3V73//e0nlt/M899xzXm1WrVql2bNnS5KGDx+uAQMG1Pt5AZWdqTyXpMcff1wvvPCCJOm8887Txx9/zFwfOCPOZJ4jOCg3Iuy99NJLGjJkiAoLCzV69GhNnTpVI0eOVGFhoebPn++eHb5z58564IEH6nWMxYsX6+6779bEiRM1fPhwZWRkqKioSBs2bNBrr73mvmd8zJgxevTRR6vt56qrrtK8efP03//+V3PnztUvv/yiu+66SxkZGdq3b59effVV/fe//5Uk9enTR3fffXe94kXkaSh5Pnr0aI0aNUrffPONNmzYoN69e2vKlCkaOHCg4uPjtWPHDv3zn//U559/LklKSkpi1QZIkpYvX64dO3a4fz527Jj78Y4dOzy+3ZdU72+DRo0apYkTJ2r+/Pn65JNPdNFFF+nee+9V69at9eOPP+qpp57S3r17JUnPPPOM18okFR566CG9/fbb2rZtmx5++GHt2LFDEydOVEJCghYvXqy//vWvcjqdSkhI0IsvvlivWBF5GlKev/zyy3riiSckld9m+eyzz2rXrl01HrdLly5cOo4GlecIIgNoAD755BMjNTXVkFTlf507dza2b99e5b6LFy92t7vxxhurbPPuu+9W27ckw2KxGJMnTzaKiopqjTU/P98YPXp0jf0NGDDA+OWXX/w5JYhADSXPT5w4YYwcObLGviQZzZo1M7766it/TwsixI033lhrzlT+rypz5sxxb582bVq1x3I4HMbYsWOr7dtqtda4f4Xt27cbWVlZ1faTmppqLFiwoJ5nBJGoIeX58OHD6xSrJGPXrl3+nSBEhIaU57Wp/PnJn37MiCsS0CCMHz9eGzZs0EsvvaSFCxdq//79io2NVadOnXTllVfq7rvvVmJiYr37Hzp0qGbMmKFvvvlGW7Zs0eHDh2W1WtW6dWuNHDlSN998swYNGuRTX8nJyfr888/19ttva968eVq/fr2OHz+u9PR09e7dW9dcc41uuOGGapfNg3k1lDxv1KiRFi1apE8++UT//ve/9f333+vQoUNyOp1KT09Xjx49NGbMGN16663MjYCQSEhI0MKFC/Xvf/9bc+fO1Q8//KDc3Fy1aNFCQ4cO1d13363BgwfX2k+nTp2Uk5Ojv/3tb3r33Xe1Y4FG5zEAABgYSURBVMcOlZSUqF27dho7dqymTJmizMzMM/CMAG+BynMgnJHn4ctiGNXMIAQAAAAAAHAaJlsEAAAAAAA+o5AAAAAAAAB8RiEBAAAAAAD4jEICAAAAAADwGYUEAAAAAADgMwoJAAAAAADAZxQSAAAAAACAzygkAAAAAAAAn1FIAAAAAAAAPqOQAAAAAAAAfEYhAQAANAhz586VxWKRxWLRTTfdFOpwIOnxxx93vyaPP/54qMMBAJwh0aEOAACAQFiyZIneeecdrVmzRnv27FFeXp6ioqKUkpKijIwMde7cWQMGDNDQoUPVr18/WSyWUIccUWo6n0lJSUpNTVVaWpoyMjLUr18/9evXTxdddJFSU1PPYJQAACAQKCQAABq0zZs3a/LkyVq9erXXttLSUhUVFeno0aNau3at/vOf/0iSevTooY0bN1bZ30033aR58+ZJkubMmROSb76XLFmikSNHSpKGDx+uJUuWnPEYAslut8tut+uXX37Rli1b9OWXX0oqLzBMnDhR999/v7p37x7iKAEAgK8oJAAAGqycnByNGjVKubm57t+1aNFC/fv3V8uWLWWxWHT8+HFt3LhRO3bskGEYkuTRHoE3YcIEtWnTxv2z0+nUyZMndfz4ceXk5OjEiROSygsMs2fP1ltvvaW//vWvuu+++7hSBACABoBCAgCgQSotLdW1117rLgq0bt1af/vb3/SrX/1KVqv3FEBHjx7Vxx9/rDfffFM///zzGY7WXKZMmaIRI0ZUu33Tpk165ZVX9M9//lN2u13FxcV64IEH9PPPP+v//b//V+1+N910E3MjhJnHH3+cuREAwISYbBEA0CB99NFH2rJliyQpISFBixcv1oQJE6osIkhSs2bNdOutt2rp0qUN/laBhq579+763//9X61fv169evVy//5vf/ub/vGPf4QwMgAA4AsKCQCABqniPntJuuyyy9S5c2ef9+3YsWMwQkIdderUSYsXL1a7du3cv5s6dapsNlsIowIAALWhkAAAaJAOHDjgfpyZmel3f+3bt5fFYnFPtChJN998s3tpu8r/VXUpd15env7zn//ojjvu0KBBg9S0aVPFxsYqNTVVHTt21DXXXKN33nlHLper2hgqltKrmGhRkpYuXVplDO3bt6/x+Xz//fe677771Lt3bzVr1kyxsbFq2bKlhg8frmeeeUYnT56s8zkKhiZNmmj27Nnun3Nzc/W3v/2tyra+LP+4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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "params = {}\n", + "params['window'] = default_window\n", + "params['dim'] = default_token_dim\n", + "params['num_heads'] = 1\n", + "params['state_dim'] = None\n", + "\n", + "name = plot(all_accs, params, 'state_dim', 'layers')\n", + "plt.title(\"Average Accuracy across State Dimensions\")\n", + "plt.xlabel(\"State Dimension\")\n", + "plt.ylabel(\"Accuracy\")\n", + "savefig(task_name, name)" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "338c2549-3d14-46c5-a8c4-241112e8d64e", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABBkAAALyCAYAAACfLAyJAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnXd4FMUbx797/dITkhBC7016kSod6Qgi0kSsICqoCApKU1QQFFTUn4BUkV6kSZPeQQgQegs1pNe7XNud3x9Hzuzd3uV6CfN5nn2S3ZmdeW9nd3b2nXfelyGEEFAoFAqFQqFQKBQKhUKhuIjI1wJQKBQKhUKhUCgUCoVCKRlQJQOFQqFQKBQKhUKhUCgUt0CVDBQKhUKhUCgUCoVCoVDcAlUyUCgUCoVCoVAoFAqFQnELVMlAoVAoFAqFQqFQKBQKxS1QJQOFQqFQKBQKhUKhUCgUt0CVDBQKhUKhUCgUCoVCoVDcAlUyUCgUCoVCoVAoFAqFQnELVMlAoVAoFAqFQqFQKBQKxS1QJQOFQqFQnlpGjBgBhmFMW1JSkq9FolAoFAqFQgloJL4WgEKhUCgUCoVCoVAo/kdGRgbOnTuHpKQkZGVlQavVIjw8HJGRkahYsSKaNGmCoKAgX4tJ8TOokiGA2LlzJ7p378471r59e+zfv99HElEo7uPq1auoXbs271jlypVx69YtMAzjI6koFAqF4g6mTZuG6dOnF5svODgYERERKFeuHJo1a4ZOnTqhV69ekEjokJVC8RYpKSlYsGAB1q1bh4sXL9rMKxaL0aBBAwwaNAhDhw5FfHy8l6Sk+DN0uUQAsXTpUotjBw8exN27d70vDIXiZoTu7zt37uDw4cPeF4ZCoVAoPkGlUuHhw4c4efIk5s+fj379+qFSpUpYsWKFr0WjBBgHDhzgLYebNm2ar0Xye9RqNSZOnIhKlSphypQpxSoYAIBlWZw9exYTJkxAhQoV8MYbbyA5OdkL0j5dBNryTqpkCBBycnLw119/WRwnhGDZsmU+kIhCcR8cx+GPP/4QTBNSPlAoFArl6eHhw4cYPnw43njjDRBCfC0OhVIiuX79Opo1a4aZM2dCo9FYpAcFBaFSpUpo1qwZatWqhfDwcIs8LMti8eLFqF69OlJSUrwhNsVPobZnAcLq1asFH3gAWL58OaZMmeJliSgU97Fnzx48fPhQMG39+vWYP38+Xe9H8QhLly6liiwKxQd07doV48ePtziem5uLW7duYdu2bTh06BAvbfHixYiPj8eXX37pLTEplKeCixcvolOnTkhLS+Mdj4+PxzvvvIMePXqgUaNGFstXU1NTsW3bNmzatAnbt283KQFVKhUKCgq8Jj/F/6CWDAFC0UEwwzBo3bq1af/WrVvUpJwS0Jh/5LVp08b0f15eHjZs2OBliSgUCoXiScqUKYPOnTtbbP3798f48eNx8OBB/P3334iMjOSdN2vWLNy5c8dHUlMoJY+cnBz07duXp2BgGAafffYZrl+/js8//xyNGzcW9I8VGxuL119/HVu3bsXZs2fRtWtXb4pO8WOokiEAuH79Ok6cOGHab926NT799FNeHrpkghKo5OTkYPPmzab9ChUq4JdffuHlofc3hUKhPH1069YNa9eu5R3T6/X4+eeffSQRhVLyePPNN3mKO4lEgmXLlmHGjBkIDg62u5yGDRti165d+PXXXyGVSj0hKiWAoEqGAMB8lnfYsGHo1q0boqOjTcfWrVsHtVrtZckoFNdZs2YNbynQkCFDUK9ePTRo0MB0bP/+/bh//74vxKNQKBSKD+ncuTO6dOnCO7Z7924fSUOhlCy2bNmC9evX847NmDEDr7zyitNljho1Cvv27XNIQUEpeVCfDH4Ox3E8j8oymQwDBw6ERCLByy+/bNLm5+bmYtOmTRg6dKivRLULnU6HEydOICkpCWlpaeA4DjExMahevTpatGgBsVjs1voePnyIf//9F48ePUJGRgYiIiLQr18/m+F1srOzkZiYiGvXriErKws6nQ4RERGIjY1Fs2bNULFiRbfIptFocOjQIdy5cwfp6ekICQlBjRo10LZtW4SEhLiljqKkpqbixIkTePz4MTIyMhASEoLY2Fg0b94clStXdnt99mJupTBs2DDT3/PnzwMwPgfLly/HZ5995pY6r127hgsXLiA9PR2ZmZlQKBSIiYlB7dq10aBBA8hkMqfKJYTgwoULuHr1KtLS0pCTk4OgoCDExcWhdu3aqFevntvvcU+SmJiIK1euIDk5Gfn5+ShdujSGDx9uc4biwYMHuHTpEu7cuYOcnBwAQFRUFMqWLYuWLVtamD67AsuyOHPmDG7duoX09HTk5eUhJCQEZcuWRZ06dVC7dm2vhT+9du0azp8/b2r3qKgoxMfH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xu/3c+WVV/Lcc88lbFMUhW3btrFt2zYWLFjA448/DsC7777L8ccnd2V+5pln+PnPf05NTU3CtpqaGmpqali2bBmvv/46AGeffTYvvfRSRm194oknuPLKK5stp+s6zzzzTEZ1ZouqqvzqV79i5syZSY1DO3fuZOfOnSxcuJBnn30WgH/84x9cddVVSet77733uOyyy5Iu8NTV1VFXV8fKlSt55513ABg3bhxffPFFRm195plnuPPOOzMK83jiiScyqjNvRAUhIzJEasCwF8Wih0V+EBEpd5VjGAb1Sj0emwexhe8Bpfowag99hZLF1yDXr0xaxrHtPST/D9SP+hu6p08uTbewyJkB5X35z2mP88bq97h1zh/p7u3BdeOva7P2tKmR4bXXXmPx4sUIgsD++6cWW7EoAlJ5MmQj+miEQPSA2E71BKJpLm02qK1FExtEGEUJo0GPYX0SLwbIILOErmDbPT/ha7VkCIaz675iuo7T4Wz5b7CwyBd2h+nZ09pEIqYoa7L4Z83f4BZdEQtfsig+VFXl+OOP57PPPgNAlmVOOukkJk+ezH777YcgCOzatYtvv/2WTz/9lBUrVgCk9Lx4+OGH44wABx10EKeccgr7778/breb+vp61qxZw5dffsmnn35KJBLJyItDlmVUVeWrr75i2bJlHHjggWnLv//++2zatClu33xx4YUX8sILLwCmIORRRx3F1KlT6dOnDzabjT179rBs2TLmzp3L4sWLgdTn65133uG0006LtW/AgAGcfvrpDBs2jNLSUvx+P+vXr+err77ik08+IRAIZHW+tm7dynvvvcdJJ52UtvyKFStYsGBB3L6tQlQQUpQhvBtUzXxuWHQIYoYGDPyKH4/N02LxVN3dm9oJL+D97jc4tr6btIxcv4qy+WfhO/j+OJFuC4u2QBAETt//BCZ2PQDFVtGmns9tcuTVq1fz1FNP8cADD8S+O+OMM9qiKRaZoqqwZ0/i95kaGRQ/GEGwd22+bDEjiFBWDrKMvmcn1NcjOL0x0cdU6SubC5eQa75BVBMnbI1DJQB0dCRr8mRRDNgaXh+G0XohCY29GJreB4oPJDs4upiTB4ui5Z///GfMwNCvXz/effddhg4dmrL86tWreeyxxygvL0/Ytm3bNm644YbYv9Ot3gPU19fzyiuvsHnz5mbbedRRR/HJJ58QiUR44okn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r32NNWvWsH79er773e/S3d1dlA6xcuVKvvzlL7Nr1y7uvfderrrqqhm9YV1yySU888wzfPzjH2fFihWEQiGam5s59dRT+epXv8rTTz9dFKooGcHhw97L25op+7WxbbeqRJ2JDLawsYU9pCa/mujE9ggPW9K0EKNc6cr28qUrpenjII1UurJSRoa6Oh7RRZONnXFnob62snXWJZJGJRAIcM899/CpT32KUKj4afCuXbv45S9/yac//Wk2bNjAMcccw7XXXjsU6enF1VdfzW9+8xuWL19etLy/v5/777+f73znO1x22WXMmTOHq666ij179oy7zfk0iJdeeqkohfTXv/71UIqGTJVoEKQhZE2gKRotwRaCepBELlFSkW86GfJpWPSWsttoqb3EHn0rvoN3TWPLJNVOxbOaz3zmMyiKUvRFnzVrFm9961u58sorOfXUU6ekgUdDR0cH3/zmN/nmN785rtedc845R31C7969+6heP+OUjWRoGaV8pajL8pWOcBBCoA3mpJcrX9kRW4TRdUvJcqH6MVvLnx+WYxHSQ0XVKxoSx3Qn1dVWvnGmGQp11SDb4w4KtcDUvJeddaNJArNAr8KwX4lkFK644ooxQ/43bNhw1O8TCAT42te+xuc+9zl+85vfcPfdd/PYY4+xa9euou327NnDxz72MX7xi19wxx130Nbm7Wl06aWXcskll3DfffcNRUls3bqVbHY4dzydTvPjH/+YX/3qV9x666287nWvq7i9l19+OR/96EeJx+PceOONnHHGGcBwqsTSpUs5++yzx3sYJLVK3hByJqLkJBWjKRqtoVZEUsx4RAOaj+Saf8VqWk34hS+hiFLhVLFTRLd8jFT8A6RXXFPeIF7SMEzoqhIKhfj617/OBz7wgWnxWJDMAEe8869oi41SWcJ2y1fOUP7YePEZBksWzcVXpnZ4npHmO7vj3iLD0nAz+s5nSpabretHnRRK08dBhOm6YHt8f3w+H0uWLMFXI5VLJp185QlFG8ypTbqhrpOJY4LIDbqRT2zfDd9Pkhll5cqV406FeOmll4pKSXrts1zFhZaWFq666iquuuoqAHp7e9m8eTP33nsvP/vZz9i7dy8Af/nLX3j729/OH/5Q3o1dVVVe+9rX8trXvhYA0zR55plneOCBB/jtb3/LvffeC0A8Hufyyy9n69atFUdjhkIhrrji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WBxtctzSRaxctpjevgEeffKFonXhYIDzznZTih554rkSkec1pyyjddYCdm5/hZ07iyM+lixZwkknnUQikSj5Huq6zsUXXwzA5s2bSwax69evZ968eezdu7ckimj+/PmcdtppZLNZz+93fnCwZcsWukfUDjz55JPp6Oigs7OTLVu2FK1ra2vjrLPOwnEcz/1ecMEFBINBXnjhBQ4cOFC0bu7c41m8eAXxeBcvvfR40bpgMMq6da8F4LnnHioZsJx00iYikWb2799OZ+fuEZ91Kcccs4ZkMs6zzz5YtE7XfWzY4Ja9ffHFx0sGJatWnUFLy2w6O3ezb1/xOTdr1kJWrDiFbDbN1q2ln3XjRvcasWPH0wwMFF8jli9fx+zZi+jqepVXXnm2aF1z8yxWrz4T27Y897t+/UVD/9++/amidUuWrGbBgmX09R1h27bNRevC4Rgnn3wOAM8882CJGLB27bmEQk3s27eNw4f3Fq1bsGA5S5asIpns57nnHi5a5/MFOO20CwF44YVHSwaiK1Zs5A9/aOdb31LZu7eyMABddzjnnH186UsdLF0KW7Y8wdatxYPN4447lfb2BRw5sp/du58vWtfSMpdVqzZg26bnMdyw4fXousErrzxDX1/xuXzssScwd+6xdHYeYu/e4uPb0tLC2WefDeD5/f6rv/orIpEIL730Evv3D5fsfeqppzjuuONYuXIlvb29PDoihCMcDnPeea7XzSOPPFIygXvNa15Da2srO3furJprxBve8AY0TZvWa8Txxx/PihUr6Orq4vHHi68R0WiU177WvUY89NBDJQPcTZs20dzczPbt29m9e3fRugULFgCuqDqyvT6fb6g09uOPP14ygT7jjDOYPXs2u3fvZtu24mvEZIwjXn31VZ59tvgaMWvWLM4880wsy/Lc70UXXYTf7+e5556js7P43rt69WqWLVvGkSNH2Ly5+BoRi8U455xzAHjwwQdLJjXnnnsuTU1NbNu2jb17i68Ry5cvZ9WqVfT39/Pww8XXiEAgwIUXuteIRx99tGTCv3HjRtrb29m1axfbtxfflxcvXszatWtJJpM89ZR7PuZ/q6rKJZdcArim3yMFl1NPPZUFCxawf/9+nn+++Boxd+5cNmzYgGmansfw9a9/PYZh8Mwzz3BkhLfWCSecwLHHHsuhQ4eG2pKn0mvEzp3F1whg6BqR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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "params = {}\n", + "params['window'] = default_window\n", + "params['dim'] = None\n", + "params['num_heads'] = 1\n", + "params['state_dim'] = 1\n", + "\n", + "name = plot(all_accs, params, 'dim', 'layers', param_counts=all_params, x_axis='params')\n", + "plt.title(\"Average Accuracies across Parameter Counts\")\n", + "plt.xlabel(\"Parameter count\")\n", + "plt.ylabel(\"Accuracy\")\n", + "savefig(task_name, name)" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "a5d13fe7-d71a-4017-a83a-c30b2badd116", + "metadata": {}, + "outputs": [], + "source": [ + "# params = {}\n", + "# params['window'] = None\n", + "# params['dim'] = 20\n", + "# params['num_heads'] = 1\n", + "# params['state_dim'] = 1\n", + "\n", + "# name = plot(all_accs, params, 'window', 'layers', param_counts=all_params, x_axis='params')\n", + "# plt.title(\"Average Final Accuracies (dim 20, 1 head, 1 state dimension)\")\n", + "# plt.xlabel(\"Parameter count\")\n", + "# plt.ylabel(\"Accuracy\")\n", + "# savefig(task_name, name)" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "36c7b32d-4bcd-45a2-b309-ae1c751939e9", + "metadata": {}, + "outputs": [], + "source": [ + "if task_name in [\"decode-recall\", \"decode-recall-last\"]:\n", + " params = {}\n", + " params['window'] = None\n", + " # params['dim'] = default_token_dim\n", + " params['dim'] = 192\n", + " params['num_heads'] = 1\n", + " params['state_dim'] = 1\n", + "\n", + " name = plot(all_accs, params, 'window', 'layers', num_layers=3)\n", + " plt.title(\"Average Accuracy across Windows\")\n", + " plt.xlabel(\"Window\")\n", + " plt.ylabel(\"Accuracy\")\n", + " savefig(task_name, name)\n", + "# plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "ea3f8447", + "metadata": {}, + "outputs": [], + "source": [ + "if task_name in [\"decode-recall\", \"decode-recall-last\"]:\n", + " params = {}\n", + " params['window'] = 20\n", + " params['dim'] = None\n", + " params['num_heads'] = 1\n", + " params['state_dim'] = 1\n", + "\n", + " name = plot(all_accs, params, 'dim', 'layers', num_layers=3)\n", + " plt.title(\"Average Accuracy across Token Dimensions\")\n", + " plt.xlabel(\"Token Dimension\")\n", + " plt.ylabel(\"Accuracy\")\n", + " savefig(task_name, name)\n", + "# plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "id": "cb323138", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABCgAAALyCAYAAAAYHeWPAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAA0HJJREFUeJzs3XdcU/f+P/BXAmFDAMGBCi5U3Irg3qPW0d1ara3V1tp57R72dre3WrXWe7+3rVXraG21tdPaWuvedVv3qqI4EBQSCARI8vn9wY9cDkkgIYkn5Lyej0ceGs76JHlxSN75nM9HJYQQICIiIiIiIiKSkVruBhARERERERERsUBBRERERERERLJjgYKIiIiIiIiIZMcCBRERERERERHJjgUKIiIiIiIiIpIdCxREREREREREJDsWKIiIiIiIiIhIdixQEBEREREREZHsWKAgIiIiIiIiItmxQEFERER+58EHH4RKpbLezp07J3eTiIiIqBosUBARERERERGR7FigIPIBq1evlnzTp1KpMGDAALmbReQRx48ft8l3s2bNIISQu2lEROSmN998U3J+f/DBB+VuEhHVYixQEPmARYsW2fxs06ZNyMjIuPGNIfIwe/k+e/YstmzZcuMbQ0REREQ+iwUKIpnpdDr89NNPNj8XQmDx4sUytIjIcywWC7788ku7y+wVLoiIiIhIuVigIJLZsmXLYDQa7S5bsmTJDW4NkWf98ccfuHjxot1lK1asQGFh4Q1uESnFokWLIISw3po0aSJ3k4iIiKgaLFAQyazit8gqlQq9evWy3j9z5gy7wVOtVrmXRO/eva3/z8/Px3fffXeDW0REREREvooFCiIZnTx5Ejt37rTe79WrF15++WXJOrzMg2ornU6HH3/80Xo/MTERH3/8sWQd5puIiIiIyrFAQSSjyt8ujxs3DsOGDUNcXJz1Z99++y27wVOttHz5csnlS2PHjkX79u3RsWNH6882bNiACxcuyNE8IiIiIvIxgXI3gEipLBYLvvjiC+v9oKAg3HPPPQgMDMTo0aPx3//+FwCg1+vxww8/4L777pOrqU4pKSnBzp07ce7cOWRnZ8NisSA+Ph7Jycno3r07AgICPHq8ixcvYu/evbh06RKuXbuG6Oho3H777UhISHC4TV5eHg4fPowTJ04gNzcXJSUliI6ORt26dZGWloakpCSPtM1oNGLz5s04e/YscnJyEBERgZYtW6JPnz6IiIjwyDEqunr1Knbu3IkrV67g2rVriIiIQN26dZGeno6mTZt6/HjOqtw7Yty4cdZ/Dx48CKDs92DJkiV49dVXPXLMEydO4K+//kJOTg6uX7+OkJAQxMfHIyUlBR07dkRQUFCN9iuEwF9//YXjx48jOzsbOp0OYWFhqF+/PlJSUtC+fXuPZ9ybDh8+jGPHjuHy5csoKChAvXr18MADD0Cj0TjcJjMzE0eOHMHZs2eh0+kAALGxsWjYsCF69OiBmJgYj7XPbDZjz549OHPmDHJycpCfn4+IiAg0bNgQbdq0QUpKClQqlceOV5UTJ07g4MGD1tc9NjYWCQkJ6N27N2JjY93ad0ZGBvbv34/MzEzo9XqoVCqEh4ejQYMGaNasGdq2bYuQkBAPPZKqGY1GHD16FMeOHUN2djYMBgMiIyNRp04dtG/fHu3atYNa7bnvtbKysvDnn3/i6tWryMnJgVqtRnR0NFq2bIlOnTohOjra7WPUJOclJSXYsWMHzp49i6tXryIgIAB169ZFcnIy0tPT3X4OvPGaWywWHD16FH/99Reys7ORn5+PoKAgREREoHHjxmjRogVatWrl0ddPLjc6p95Wfq47ffo0rl69iuLiYsTHx6Np06bo1asXgoODPXq8a9euYefOnbh06RKys7MRERGBYcOGoWXLlg63OXnyJA4ePIjLly8jPz8fgYGBCA8PR8OGDdG8eXO0adMGgYH8SEkeJIhIFmvWrBEArLfbbrvNumzHjh2SZYMHD65yX0888YRk/fnz59eoTf3795fsZ/fu3dVuc+jQIXH33XeLiIgIybYVb9HR0eLJJ58UWVlZTrel4vb9+vWz/vyXX34RAwcOFGq12uY4P/zwg81+9u3bJ1588UXRqVMnoVKpHLYRgGjWrJmYM2eOKCwsdLqdFeXl5Yknn3xSREZG2t1/SEiImDx5ssjJyRFCCLFhwwbJ8jfeeMPpY5nNZrF48WLRtWvXKh9XSkqKWLhwoTCbzTV6TDV18uRJSTs6depkXXbx4kXJ65ecnOzWsbKzs8WLL74oGjduXOXrGx4eLm677TaxatUqYbFYnNp3RkaGmDx5sqhbt26V+46JiRH33Xef2Lx5s8N9JSUlWddPSkpy6TG+8cYbkuNt2LDB4bqOclVaWir+/e9/i7Zt29p9DLm5uZL9lJaWit9++0089NBDkrbbu6lUKtGjRw/xww8/OP3c2nP48GExduxYodVqqzxe/fr1xeTJk8WBAwcc7mv8+PGSbc6ePet0O/Lz88Wbb74pmjZt6rANAQEBon///lW+5vaYzWYxd+5c0aFDhyofIwARFBQkevToIWbOnFnj81JVLly4IGbMmCH69+8vgoODq834s88+Ky5evFjj4xUXF4v//ve/okOHDlWetwICAkSvXr3EvHnzhMFgsLsvT+W83N9//y3GjRvn8PwNQMTFxYmnnnpKZGdnu/S4vfWa63Q68corr4gGDRpUu9+oqCgxcuRIsWzZMpfa7ozK56fx48d7dP/eyun7778v2fa9996rUftuv/12yX5+/fXXarc5e/asmDhxooiNjXX4WMLCwsS4cePE33//7XRbHP2d2b59uxg1apTQaDQ2x5k9e7bNfoxGo5g2bZpo3rx5tdkKDQ0VAwcOFJ988onT7SSqCgsURDIZO3as5AS/YsUKyfKKfxTUarW4cOGCw33t2rVLsq++ffu63J5z585J3jC2adOmyvVLS0vFk08+abdQ4OgWGRkpfvnlF6faU3G7fv36CYvFIp588skq91+5QPGf//zH6bZVvLVp00acOnXKpefvwIEDTr1JBCAaNmwoDh8+XOMCxcmTJ0XHjh1dekzdu3cXV69edekxuWPq1KmS48+cOVOyfNCgQZLl27Ztq9FxPv300yqLY45u1X1YtVgs4s033xRBQUEu79sROQsU169fF717966y3ZU/uN155501+v254447REFBgUuPr6SkRDz22GMunU+qex5rWqBYuXJltQWpyrdHHnlElJaWVrvv69evi169etXoeXX1nFSdgwcPVlu0tXfTarVOfQCrbPv27dUWuuzdFi5caHd/nsq5EELMnj3bpd/1qKgo8d133zn1uL31mh84cEAkJCS4vM+GDRs61W5XeLNA4c2cZmVlST6wN2vWzOUC6+XLl0VgYKB1H4mJidV+IfDOO++4lLegoCCnv3iy93dm+vTpVT6HlQsUGRkZonXr1jXKrDPnQaLqsD8OkQzKL9sop9VqMXLkSMk69913H95++20A/+sGP3XqVLv7S0tLQ0pKCo4dOwYA2LJlC86dO+fStHpLliyBEMJ6f/z48Q7XLSwsxB133IHff//dZln9+vVRv359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f8WGDRuwYcMGyXK1Wo3XXnsNjzzySI2PQURERERERKQEvMTDDaGhoVi1ahWWLl2KIUOGoG7duggKCkLjxo0xduxYbN261eElIkRERERERET0P37Xg2LRokU2l3G46sEHH3SpZ8XYsWMxduxYt45JREREREREpGTsQeHj1Gq+ROS/1Go1QkJCmHPya8w5KQFzTkrAnJMSyJ1vlRBCyNoCskuv10Or1UKn0yEqKkru5hARERERERF5ld9d4kFERERERERUWwghUFpaCovF4vK2arUaGo0GKpXKCy278Vig8HF6vZ49KMhv6fV67NixAz169GDOyW8x56QEzDkpAXNOnlZYWAidTof8/HyYzeYa7ycgIACRkZHQarUICwtzq01yf/5kgcLH1aSKRlRbWCwWGI1G5pz8GnNOSsCckxIw5+RJ+fn5yMzMhEajQXR0NMLDw6FWq13qCSGEgMVigcFggF6vR15eHho1aoTIyMgat0vufLNAQURERERERHSDFBYWIjMzE1FRUUhISHD78ozw8HDEx8fj0qVLyMzMRFJSkts9KeTCIWiJiIiIiIiIbhCdTgeNRuOR4kQ5lUqFhIQEaDQa6HQ6j+xTDixQEBEREREREd0AQgjk5+cjKirK4wNbqlQqREVFIT8/H7V1sk4WKHxceHi43E0g8prw8HD06tWLOSe/xpyTEjDnpATMOXlCaWkpzGaz13IUFhYGs9mM0tLSGm0vd745BoWP02g0cjeByGs0Gg3i4uLkbgaRVzHnpATMOSkBc06eUD4IpVrtnb4CAQEBkuO4Su7Pn+xB4eOKiorkbgKR1xQVFeHo0aPMOfk15pyUgDknJWDOyZM8fXmHp/Yrd75ZoPBxxcXFcjeByGuKi4tx6tQp5pz8GnNOSsCckxIw56QEcuebBQoiIiIiIiIikh0LFEREREREREQkOxYoiIiIiIiIiEh2LFD4uKCgILmbQOQ1QUFBSExMZM7JrzHnpATMOSkBc05KIHe+VUIIIWsLyC69Xg+tVgudToeoqCi5m0NERERERERuMhqNOHv2LJo2bYqQkJBat39vYw8KH2c2m+VuApHXmM1m6PV65pz8GnNOSsCckxIw56QEcuebBQofl5+fL3cTiLwmPz8fGzZsYM7JrzHnpATMOSkBc05KIHe+WaAgIiIiIiIiItmxQEFEREREREREsmOBgoiIiIiIiOgG8tZcFbV9DgwWKIhIVmo1T0Pk/5hzUgLmnJSAOSd3lWfIYrF4Zf/lg1zW1qxymlEfxWlGiYiIiIiI/IsQAqdOnUJ0dDTq1q3r8f1fvXoVeXl5SE5Ohkql8vj+va12llWIiIiIiIiIahmVSoXIyEjo9XqPX44hhIBer0dkZGStLE4ALFD4PLmneSHypvz8fGzcuJE5J7/GnJMSMOekBMw5eYpWq0VpaSkuXbrksSKFEAKXLl1CaWkptFptjfcjd74DZT06Vav8GiIif2Q2m6HT6Zhz8mvMOSkBc05KwJyTp4SFhaFRo0bIzMxEUVERoqKiEBYWhoCAAJd6PgghYDabUVhYCL1ej9LSUjRq1AhhYWE1bpvc+WaBgoiIiIiIiOgGioyMRFJSEnQ6HfLy8nDt2rUa7ysgIACRkZHQarVuFSd8AQsURERERERERDdYWFgYwsLCUL9+fZSWltZoZg+1Wg2NRlNrx5yojAUKIiIiIiIiIpmoVCoEBQXJ3QyfwGlGfVT5NKPZ2dmIi4uTuzlEXlFSUoLs7GzEx8fzpEx+izknJWDOSQmYc1KCkpISWfPNAoWPKi9Q6HQ6REVFyd0cIiIiIiIiIq/iNKM+zmg0yt0EIq8xGo04ffo0c05+jTknJWDOSQmYc1ICufPNAoWPkzsgRN5kNBpx5MgR5pz8GnNOSsCckxIw56QEcuebBQoiIiIiIiIikh0LFEREREREREQkOxYoiIiIiIiIiEh2LFD4OI1GI3cTiLxGo9Ggfv36zDn5NeaclIA5JyVgzkkJ5M43pxn1UZxmlIiIiIiIiJSEPSh8nMVikbsJRF5jsVhQXFzMnJNfY85JCZhzUgLmnJRA7nyzQOHj9Hq93E0g8hq9Xo/Vq1cz5+TXmHNSAuaclIA5JyWQO98sUBARERERERGR7FigICIiIiIiIiLZsUBBRERERERERLJjgYKIiIiIiIiIZMdpRn1U+TSjeXl50Gq1cjeHyCuEEDCZTAgMDIRKpZK7OURewZyTEjDnpATMOSmBEELWfAfKdmRyCk9+5M9UKhU0Go3czSDyKuaclIA5JyVgzkkJ5P78yUs8fFxBQYHcTSDymoKCAmzfvp05J7/GnJMSMOekBMw5KYHc+WaBwseZTCa5m0DkNSaTCdnZ2cw5+TXmnJSAOSclYM5JCeTONwsURERERERERCQ7FiiIiIiIiIiISHYsUBARERERERGR7Fig8HGhoaFyN4HIa0JDQ9G+fXvmnPwac05KwJyTEjDnpARy51slhBCytoDs0uv10Gq10Ol0iIqKkrs5RERERERERF7FHhQ+rqSkRO4mEHlNSUkJLly4wJyTX2POSQmYc1IC5pyUQO58s0Dh4woLC+VuApHXFBYWYt++fcw5+TXmnJSAOSclYM5JCeTONwsURERERERERCQ7FiiIiIiIiIiISHYsUBARERERERGR7Fig8HEBAQFyN4HIawICAhATE8Ock19jzkkJmHNSAuaclEDufHOaUR/FaUaJiIiIiIhISdiDgoiIiIiIiIhkxwKFj8vLy5O7CURek5eXh59++ok5J7/GnJMSMOekBMw5KYHc+WaBgoiIiIiIiIhkxwIFEREREREREcmOBQoiIiIiIiIikh0LFEREREREREQkO04z6qPKpxm9fv06YmJi5G4OkVeYzWYUFRUhNDRU9jmXibyFOSclYM5JCZhzUgKz2Sxrvlmg8FHlBQqdToeoqCi5m0NERERERETkVbzEw8cZDAa5m0DkNQaDAXv37mXOya8x56QEzDkpAXNOSiB3vlmg8HGlpaVyN4HIa0pLS5GZmcmck19jzkkJmHNSAuaclEDufLNAQURERERERESyY4GCiIiIiIiIiGTHAgURERERERERyY4FCh8XEhIidxOIvCYkJAStWrVizsmvMeekBMw5KQFzTkogd745zaiP4jSjREREREREpCTsQeHj5B5FlcibSktLcfXqVeac/BpzTkrAnJMSMOekBHLnmwUKHyf3PLRE3mQwGLBjxw7mnPwac05KwJyTEjDnpARy55sFCiIiIiIiIiKSHQsURERERERERCQ7FiiIiIiIiIiISHYsUPg4tZovEfkvtVqN8PBw5pz8GnNOSsCckxIw56QEcueb04z6KE4zSkRERERERErC8h8RERERERERyY4FCh+n0+nkbgKR1+h0Ovz222/MOfk15pyUgDknJWDOSQnkzjcLFD6OV+CQPxNCoKSkhDknv8ackxIw56QEzDkpgdz5ZoGCiIiIiIiIiGTHAgURERERERERyY4FCiIiIiIiIiKSHacZ9VHl04xeu3YNsbGxcjeHyCtMJhP0ej2ioqIQGBgod3OIvII5JyVgzkkJmHNSApPJJGu+WaDwUeUFCp1Oh6io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WaDwcQUFBXI3gchrCgoKsGXLFuac/BpzTkrAnJMSMOekBHLnmwUKIiIiIiIiIpIdCxREREREREREJDsWKIiIiIiIiIhIdixQ+DiVSiV3E4i8RqVSISgoiDknv8ackxIw56QEzDkpgdz55jSjPorTjBIREREREZGSsAcFEREREREREcmOBQofp9fr5W4Ckdfo9XqsXbuWOSe/xpyTEjDnpATMOSmB3PlmgcLHWSwWuZtA5DUWiwUGg4E5J7/GnJMSMOekBMw5KYHc+WaBgoiIiIiIiIhkxwIFEREREREREcmOBQoiIiIiIiIikh2nGfVR5dOM5uTkoE6dOnI3h8grSktLkZubi5iYGGg0GrmbQ+QVzDkpAXNOSsCckxKUlpbKmm8WKHxUeYFCp9MhKipK7uYQEREREREReRUv8fBxRqNR7iYQeY3RaMTx48eZc/JrzDkpAXNOSsCckxLInW8WKHyc3AEh8iaj0YgTJ04w5+TXmHNSAuaclIA5JyWQO98sUBARERERERGR7FigICIiIiIiIiLZsUBBRERERERERLJjgcLHcQoj8mcajQaNGjVizsmvMeekBMw5KQFzTkogd745zaiP4jSjREREREREpCTsQeHjzGaz3E0g8hqz2YyCggLmnPwac05KwJyTEjDnpARy55sFCh+Xn58vdxOIvCY/Px/r1q1jzsmvMeekBMw5KQFzTkogd75ZoCAiIiIiIiIi2bFAQURERERERESyY4GCiIiIiIiIiGTHAgURERERERERyY7TjPooTjNKRERERERESsIeFEREREREREQkOxYofJzc07wQeVN+fj42b97MnJNfY85JCZhzUgLmnJRA7nyzQOHjzGaz3E0g8hqz2Yzc3FzmnPwac05KwJyTEjDnpARy55sFCiIiIiIiIiKSHQsURERERERERCQ7FiiIiIiIiIiISHYsUPi4sLAwuZtA5DVhYWHo0qULc05+jTknJWDOSQmYc1ICufOtEkIIWVtAdun1emi1Wuh0OkRFRcndHCIiIiIiIiKvYg8KH1dcXCx3E4i8pri4GH///TdzTn6NOSclYM5JCZhzUgK5880ChY8rKiqSuwlEXlNUVIRDhw4x5+TXmHNSAuaclIA5JyWQO98sUBARERERERGR7FigICIiIiIiIiLZsUBBRERERERERLJjgcLHBQYGyt0EIq8JDAxEfHw8c05+jTknJWDOSQmYc1ICufPt9jSjhw8fRrt27TzVHvr/OM0oERERERERKYnbPSg6dOiAHj16YMGCBTAYDJ5oE1XgZv2IyKcJIVBaWsqck19jzkkJmHNSAuaclEDufHvkEo9du3bhkUceQYMGDTBp0iTs3LnTE7t1W0ZGBp577jm0bt0a4eHhiI2NRVpaGmbMmIHCwkKPHmvt2rV48MEH0aJFC4SHh0Or1aJly5a466678Mknn6CgoKBG+9XpdB5tJ5Ev0el0+PXXX5lz8mvMOSkBc05KwJyTEsidb7cvMAkLC7N+2C8oKMDnn3+Ozz//HG3atMHDDz+M+++/H7GxsW431FUrV67EuHHjoNfrrT8rLCzEnj17sGfPHsyfPx+rVq1CixYt3DpObm4uJkyYgJ9++slmmV6vx6lTp/Ddd9+hR48e6NSpk1vHIiIiIiIiIvJXbveguHLlCj777DN0794dQFmXECEEjh49imeffRYNGzbEmDFjsHbtWrcb66z9+/dj9OjR0Ov1iIiIwHvvvYft27dj3bp1mDRpEgDg5MmTGDFiBPLz82t8HJ1OhyFDhliLE7fffjuWLl2KnTt3Yvfu3fj+++8xZcoUNGrUyCOPi4iIiIiIiMhfud2DIiIiAg8//DAefvhhHDt2DPPnz8eXX36J7OxsAEBxcTG++eYbfPPNN0hKSsLEiRMxYcIENGzY0O3GOzJlyhQUFRUhMDAQa9asQY8ePazLBg4ciOTkZLz44os4efIkZs2ahTfffLNGx3nqqaewd+9eBAcH45tvvsEtt9wiWd61a1fcfvvtmD17NsxmszsPiYiIiIiIiMiveXSa0ZSUFMyaNQsXL17Et99+i5tvvhlqtdraqyIjIwNvvPEGmjRpghEjRuDHH3/0+Af3Xbt2YcuWLQCAhx56SFKcKPfcc88hJSUFADBnzhyUlpa6fJytW7fiiy++AAC8++67NsWJilQqlezTtRARERERERH5MrenGa3OxYsXsXDhQixatAh///33/w6sUgEA6tati/Hjx+Ohhx5CcnKy28ebOnUq3n//fQDAzp070a1bN7vrTZs2Da+88goA4Pfff8fQoUNdOs69996L5cuXQ6vV4sqVKwgJCXGv4ZWUTzOam5uL6Ohoj+6byFdYLBaUlpZCo9FArfZovZTIZzDnpATMOSkBc05KYLFYZM2314/csGFD/POf/8Tp06exdu1ajBkzBiEhIdZeFVlZWZgxYwZat26Nfv36YenSpSgpKanx8bZu3QoACA8PR2pqqsP1+vXrZ/3/tm3bXDpGSUmJddyJIUOGWIsTZrMZFy5cwLlz52A0Gl1tul08+ZE/U6vVCA4OZs7JrzHnpATMOSkBc05KIHe+b+jRBw4ciKVLl+LUqVPWng3lPSmEENi6dSseeOABNGzYEK+//jry8vJcPsaxY8cAAC1atKjysorWrVvbbOOsgwcPWgsQ7du3h16vx9NPP424uDgkJiaiadOm0Gq1GDJkCDZu3OjyY6jIYDC4tT2RLzMYDPjzzz+Zc/JrzDkpAXNOSsCckxLIne8bWqD4888/8cgjj6BNmzbYtWuXpDhR/q8QAteuXcN7772HVq1aYdWqVU7v32g0IicnBwCqnTkjJiYG4eHhAIALFy649DiOHj1q/b/FYkHXrl0xZ84cSUGlpKQEa9euxcCBAzF9+nSX9l9RTcbHIKotSktLceXKFeac/BpzTkrAnJMSMOekBHLn2+sjN167dg1LlizBggULrD0VKg570bZtW0yaNAl33HEH1q1bh88//xxbtmyBEALZ2dm4/fbbsXnzZus0plWpOGVoREREteuHh4fDYDCgoKDApcd0/fp16/+nT58Oo9GIYcOG4e2330aHDh2g1+vx3Xff4eWXX4ZOp8PLL7+M1q1b49Zbb3W4z+LiYhQXF1vv6/V6AEBBQYGk8KHRaBAeHg6z2Wx3itTy8Sry8/NtBiANCwtDUFAQiouLUVRUJFkWGBiIiIgICCGg0+ls9hsVFQW1Wg2DwWAT2pCQEISEhKCkpASFhYWSZQEBAYiMjAQAuz1iIiMjERAQgMLCQptLe4KDgxEaGorS0lKbSp5arUZUVBSAsufKYrFIloeHh0Oj0aCoqEjyvAJAUFAQwsLC3HoOjUajzWU85a+NxWKxvn4VabVaqFQqFBQUwGQySZaFhoYiODjYreewqtemuudQp9Oh8nA0ERERCAwMrPI5NJlMNr8/KpUKWq0WQNWvjdFotD7/5f964jn0Vr7deQ6ryre7z6GjHPIc4TvniPJ9FBUVITo6mucID+Sb5wjfO0eU51IIYTeHPEeU4fuIMrX5HAHA5nXnOaIM30eUqe3niPz8fFnHQPRKgUIIgd9//x0LFizAypUrrSEr/6ULDQ3FPffcg0mTJqFnz57W7caPH4/x48dj//79eOqpp7B9+3aYTCa8//771jEfqlLxRQwKCqp2/eDgYACw+QWqTsUAG41GDBkyBL/88gsCAgIAAPHx8Xj00UfRrl079OvXDxaLBa+88gpuueUWa6+Ryt5//3289dZbNj8/ePAgTp06Zb3fqFEjpKamoqioCJs2bbJZv7wIsn//fuTm5kqWdenSBY0bN8bFixdx6NAhybL4+Hj07NkTJpPJ7n6HDRuG4OBgHD58GFeuXJEsa9u2LVq0aIHs7Gzs2bNHskyr1aJ///4AgC1bttj8cg8YMABRUVE4ceIEzp8/L1mWnJyMNm3aQKfT2YwTEhISgptuugkAsGPHDptf4F69eiEuLg5nz56VPH8AkJiYiM6dO8NgMNg8VrVajVGjRgEA9u7da3MC7dq1Kxo2bIjMzEwcOXJEsqx+/fro1q0bSktL7T6Hw4cPh0ajwV9//WWdhrdc+/bt0axZM2RlZWHfvn2SZTExMejbty8A2N3voEGDEBERgePHjyMzM1OyrFWrVmjdujVyc3OxY8cOybLw8HAMHjwYALB9+3abk3afPn0QGxuLM2fO4MyZM5JlTZo0QceOHVFQUGDTpsDAQIwYMQIAsGfPHpsTc3p6Oho0aIDz589bi5bljzkhIQFpaWkoLi62+1hHjhyJgIAAHDhwANeuXZMs69SpE5KSknDlyhUcOHBAsqxOnTro3bs3LBaL3f0OHToUoaGhOHr0KC5duiRZlpKSgpYtWyInJwe7du2SLIuMjMTAgQMBlI1/U/mPQb9+/RAdHY1Tp07h3LlzkmXNmzdHu3btoNfrrTMPlQsKCsLNN98MoGxmosp/NHv06IG6devi3LlzOHHihGQZzxFlfPEccebMGTRo0IDniBqcI8rxHFHGF88RMTExAMrG47I3thfPEWX4PqJMbT1HlH+Wqfwc8xxRhu8jyvjDOaJx48Y2+79RPDqLx7lz5/D5559j0aJFuHjxIgBpb4kOHTpg0qRJGDdunLWq50hxcTGSk5ORmZmJ2NhY66UbVcnOzkbdunUBAKNHj8ayZcuqXL9evXq4evUq2rVrZ/NLVJWZM2fihRdesN7ft28fOnfubHfdu+++GytWrABQVmzo0KGD3fXs9aBo3Lgxjhw5goSEBOvPWdUso+SqZmW1+ZuP7Oxs7Nu3D126dEFkZCS/Ha3Bc8hvPnz/HJGfn499+/ZZ31TzHOHb347yHBENoGY9KHbv3o2+ffva/TKG54gyfB9RpraeI3Jzc7F582br+5ZyPEeU4fuIMrX9HJGfn1+7CxQlJSX47rvvsGDBAmzcuFEyngRQ9uKNHj0akyZNcjjlpyMTJkzA4sWLoVKpbF48e4xGI0JDQwEAI0aMwC+//FLl+hERETAYDOjevbtNVbgqc+fOxaOPPgqgrBp49epVh+vOnz8fkyZNsv7/oYcecuoY5dOMZmVlWYsuRP7GaDQiMzMTjRo18vhUvUS+gjknJWDOSQmYc1ICo9Eoa77dvsSjQYMG1mpVxVpHp06d8Mgjj+C+++6TVBhd4eq1LyEhIahTpw6uXbtm00WtstzcXGulzNUKUcX1qxuMs+K6lbvaOIMnP/JnISEhaNGihdzNIPIq5pyUgDknJWDOSQnk/vzpdoEiNzcXKpUKQghERERgzJgxmDRpErp27ep241q0aIF+/fq5tE2bNm2wZcsWnD59GiaTyeFUo8ePH7f+PyUlxaVjtG3b1vr/6np2VFxe1bSnjlTuikTkT0pKSpCdnY34+Hinxo0hqo2Yc1IC5pyUgDknJSgpKZE13x6ZZrRLly6YO3cuLl++jLlz53qkOAEATzzxBDZs2IANGzY4vU3v3r0BlA1kuXfvXofrVRxYpFevXi61KykpCYmJiQDKxt2o6iqZioMCNWzY0KXjALC5RojInxQWFmLPnj3MOfk15pyUgDknJWDOSQnkzrfbBYp9+/Zh9+7dmDRpEsLDwz3RJrfcdttt1v8vXLjQ7joWiwVLliwBUHYZyYABA1w+zp133gmgbKyIdevWOVzv+++/t/6/vHhCRERERERERFJuFyg6derkgWZ4Tnp6Ovr06QMAWLBggd3BL2fNmmWdlmjKlCnQaDSS5Rs3boRKpYJKpcKDDz5o9zhPP/209fqcZ5991u5Iql9++SU2btwIoGzQTjlHQyUiIiIiIiLyZR65xMPXzJkzxzrtztChQ/H+++9j586d2LBhAyZPnowXX3wRANCyZUs899xzNTpGYmIi3n77bQDAoUOHkJ6ejoULF2Lv3r3YsGEDnnrqKWtxIyoqCrNnz/bIYyMiIiIiIiLyR24PkgkAU6dOhdFoREJCAp5//nmnt5s5cyYuXbqEiIgI64d9T+jcuTOWL1+OcePGQa/XY+rUqTbrtGzZEqtWrarxDCMA8MILL+D69euYPn06Tpw4gYkTJ9qsU7duXfz4449ITk6u0TECAgJq3D4iXxcQEACtVsuck19jzkkJmHNSAuaclEDufKtEVSM8OmH9+vUYPHgwVCoVZsyYgWeffdbpbWfNmoUXXngBKpUKmzdvdnmwyupkZGRgzpw5WLVqFTIzMxEUFIQWLVrg7rvvxpNPPomwsDC7223cuNE6LsX48eOxaNGiKo+zY8cOfPLJJ9iyZQsuX76MkJAQtGzZErfccgueeuopaLVal9uu1+uh1Wqh0+kQFRXl8vZEREREREREtYnbBYqnn34a//73vxEQEICLFy+ibt26Tm+blZWFhg0bQgiBZ555BjNnznSnKX6FBQoiIiIiIiJSErfHoNi5cycAoG3bti4VJwCgXr16aNeuHQDYHcySgLy8PLmbQOQ1eXl5WLlyJXNOfo05JyVgzkkJmHNSArnz7XaB4vTp01CpVGjbtm2Ntm/Tpg2EEDh9+rS7TSGiWshiscjdBCKvY85JCZhzUgLmnMi73C5QlE+vWdPLEMrHZ9DpdO42hYiIiIiIiIhqKbcLFBEREQBqXmAo3y44ONjdphARERERERFRLeV2gaJu3boQQmD//v012r58O1fHryAiIiIiIiIi/+F2gaJbt24AgJMnT2LPnj0ubbtr1y6cOHECKpUKXbt2dbcpfikyMlLuJhB5TWRkJAYMGMCck19jzkkJmHNSAuaclEDufLtdoBg5cqT1/4899hgKCwud2s5gMOCxxx6zux/6n4CAALmbQOQ1AQEBiIqKYs7JrzHnpATMOSkBc05KIHe+3S5Q3HnnnUhOTgYA7Nu3DwMHDsSJEyeq3ObEiRMYOHAg9u/fD5VKhaZNm+Lee+91tyl+ydmCD1FtVFhYiP379zPn5NeYc1IC5pyUgDknJZA734Hu7kCtVmP+/PkYPHgwTCYTdu/ejbZt22LQoEEYMGAAmjVrhoiICBQUFODs2bNYv3491q1bByFEWQMCAzF//nzZKzW+qqSkRO4mEHlNSUkJzp8/j6ZNmyIsLEzu5hB5BXNOSsCckxIw56QEJSUlsubb7QIFAPTp0weLFy/GxIkTUVxcDIvFgrVr12Lt2rV21y8vTgQHB2PBggXo37+/J5pBRERERERERLWU25d4lLv33nuxbds29OjRA0BZEcLRDQB69eqF7du3Y+zYsZ5qAhERERERERHVUh7pQVGuc+fO2Lp1K3bt2oXVq1dj586dyMrKQn5+PiIjI1GvXj10794dN998M9LS0jx5aCIiIiIiIiKqxTxaoCiXnp6O9PR0b+xacYKDg+VuApHXBAcHIzk5mTknv8ackxIw56QEzDkpgdz5Vonyay7Ip+j1emi1Wuh0OkRFRcndHCIiIiIiIiKv8tgYFOQdpaWlcjeByGtKS0uRk5PDnJNfY85JCZhzUgLmnJRA7nyzQOHjDAaD3E0g8hqDwYBt27Yx5+TXmHNSAuaclIA5JyWQO99eGYMCAC5evIicnBzk5+fDYrE4tU3fvn291RwiIiIiIiIi8mEeLVBs374d//nPf7Bu3Tpcu3bNpW1VKhVMJpMnm0NEREREREREtYRHChQWiwX/+Mc/8MknnwAAOO4mEREREREREbnCIwWK559/Hh9//LH1fkpKCnQ6HS5dugSVSoW+ffsiPz8f58+fR05ODoCyHhPh4eFITU31RBP8llrNYULIf6nVaoSEhDDn5NeYc1IC5pyUgDknJZA7325PM3rs2DG0a9cOABAfH4+VK1ciLS0NTz31FP773/9CpVLBbDZL1v/444/x6aefwmKxYNKkSfjPf/4DjUbj3iPxM5xmlIiIiIiIiJTE7fLIvHnzrJd0LFiwAGlpaVWun5KSgv/85z/YuHEjIiMjMW/ePEyZMsXdZhARERERERFRLeZ2gWLLli0AgIYNG2LEiBFOb9erVy989tlnEEJg7ty52Lp1q7tN8Ut6vV7uJhB5jV6vx++//86ck19jzkkJmHNSAuaclEDufLtdoMjIyIBKpbLpOaFSqaz/Ly0ttbvtPffcg6ZNmwIAFi1a5G5T/JKzU7QS1UYWiwVGo5E5J7/GnJMSMOekBMw5KYHc+Xa7QJGXlwcAqFu3ruTnwcHB1v8XFBQ43L5Hjx4QQmDbtm3uNoWIiIiIiIiIaim3CxQhISEAIBkIEwC0Wq31/xcuXHC4fVBQEADg0qVL7jaFiIiIiIiIiGoptwsUCQkJAP7Xk6Jc8+bNrf/fvXu3w+1PnjwJADCZTO42hYiIiIiIiIhqKbcLFG3btoUQAqdOnZL8vGvXrtb/L1y40O62u3fvxo4dO6BSqZCYmOhuU/xSeHi43E0g8prw8HD06tWLOSe/xpyTEjDnpATMOSmB3Pl2u0DRp08fAMDRo0clY00kJyejc+fOEEJgx44deOSRR5CTk2NdvmXLFtx7773WKUqHDh3qblP8kkajkbsJRF6j0WgQFxfHnJNfY85JCZhzUgLmnJRA7ny7XaAYNmwYgLJLNH7//XfJsrffftv6/wULFqBBgwZo2LAhYmNj0b9/f5w7dw4AEBYWhmeffdbdpviloqIiuZtA5DVFRUU4evQoc05+jTknJWDOSQmYc1ICufPtdoGidevWuOuuu5Ceno59+/ZJlo0YMQKvv/46hBAQQsBsNuPKlSvIy8uz/iw0NBRLly5FUlKSu03xS8XFxXI3gchriouLcerUKeac/BpzTkrAnJMSMOekBHLnO9ATO/nmm28cLnvzzTfRq1cvzJgxA5s3b0ZJSQmAslk+hg8fjn/+859ISUnxRDOIiIiIiIiIqJbySIGiOkOGDMGQIUNgsViQk5MDtVqNOnXqQKVS3YjDExEREREREZGPuyEFinJqtRp169a9kYckIiIiIiIiolrA7QJFly5dAAChoaHYuHGj7KN++pugoCC5m0DkNUFBQUhMTGTOya8x56QEzDkpAXNOSiB3vlWifJ7PGgoICAAADB8+HCtXrvRIowjQ6/XQarXQ6XSIioqSuzlEREREREREXuX2LB516tQBACQkJLjdGLJlNpvlbgKR15jNZuj1euac/BpzTkrAnJMSMOekBHLn2+0CRaNGjQAAOp3O7caQrfz8fLmbQOQ1+fn52LBhA3NOfo05JyVgzkkJmHNSArnz7XaBYvjw4RBCYNu2bZ5oDxEREREREREpkNsFiokTJyIkJASXLl3C559/7ok2EREREREREZHCuF2gaNasGT766CMIIfDEE09g2bJlnmgXERERERERESmI29OMnj9/HsOGDcMHH3yAqVOn4r777sOcOXNw7733IjU1FfHx8QgNDXVqX4mJie42h4hqGbXa7Topkc9jzkkJmHNSAuacyLvcnmZUrVZDpVJZ7wshJPedbohKBZPJ5E5T/AqnGSUiIiIiIiIlcbsHRbnywkR5ccLNugcRERERERERKYjbBYrExMQa9Zgg5+Tn57MHBfmt/Px87N27F6mpqYiMjJS7OURewZyTEjDnpATMOSlBfn6+rPl2u0Bx7tw5DzSDHDGbzXI3gchrzGYzdDodc05+jTknJWDOSQmYc1IC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iGo5lah4zQX5DL1eD61Wi+vXryMmJkbu5hB5hdlsRlFREUJDQ2Wfc5nIW5hzUgLmnJSAOSclMJvNsuabBQofVV6g0Ol0iIqKkrs5RERERERERF7lsTEoyDsMBoPcTSDyGoPBgL179zLn5NeYc1IC5pyUgDknJZA73x4Zg2Lq1KkwGo1ISEjA888/7/R2M2fOxKVLlxAREYG3337bE03xO6WlpXI3gchrSktLkZmZiebNm8vdFCKvYc5JCZhzUgLmnJRA7s+fbhco1q9fj2nTpkGlUmHGjBkubatSqfDRRx9BpVLhpptuQq9evdxtDhERERERERHVQm5f4vHzzz+X7Uitxrhx41zadty4cVCry5rwww8/uNsUIiIiIiIiIqql3C5Q7Ny5EwDQtm1b1K1b16Vt69Wrh3bt2gEAduzY4W5TiIiIiIiIiKiWcrtAcfr0aahUKrRt27ZG27dp0wZCCJw+fdrdpvilkJAQuZtA5DUhISFo1aoVc05+jTknJWDOSQmYc1ICufPt9hgUer0eAGo8FaZWqwUA6HQ6d5vil+QOCJE3hYSEoHXr1nI3g8irmHNSAuaclIA5JyWQ+/On2z0oIiIiANS8wFC+XXBwsLtN8Utyj6JK5E2lpaW4evUqc05+jTknJWDOSQmYc1ICufPtdoGibt26EEJg//79Ndq+fDtXx69QCrnnoSXyJoPBgB07djDn5NeYc1IC5pyUgDknJZA7324XKLp16wYAOHnyJPbs2ePStrt27cKJEyegUqnQtWtXd5tCRERERERERLWU2wWKkSNHWv//2GOPobCw0KntDAYDHnvsMbv7ISIiIiIiIiJlcbtAceeddyI5ORkAsG/fPgwcOBAnTpyocpsTJ05g4MCB2L9/P1QqFZo2bYp7773X3aYQERERERERUS3l9iwearUa8+fPx+DBg2EymbB79260bdsWgwYNwoABA9CsWTNERESgoKAAZ8+exfr167Fu3ToIIcoaEBiI+fPnIyAgwO0H44/UardrSEQ+S61WIzw8nDknv8ackxIw56QEzDkpgdz5VonySoGbli1bhokTJ6K4uBhCCKhUKofrlh8yODgYCxYswNixYz3RBL+i1+uh1Wqh0+lqPIUrERERERERUW3hsfLIvffei23btqFHjx4AyooQjm4A0KtXL2zfvt2rxYmMjAw899xzaN26NcLD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IicnB7t27ZIsi4yMxMCBAwGUXV5W+Y9Bv379EB0djVOnTuHcuXOSZc2bN0e7du2g1+utA/uWCwoKws033wygbODfyn80e/Togbp16+LcuXM4ceKEZBnPEWV88RxRVFSE3r178xxRg3NEOZ4jyvjiOSImJga5ubmoX7++3UtneY4ow/cRZWrrOcJoNCIzM9PmeeI5ogzfR5Txh3NE+essB5VwcaLTvXv3YvHixfj6669x/fp1ANKiRPm4Eg888ADuuusuazVGrVZDpVKhW7du2L59uwcfwv9cuHABiYmJAID7778fS5YsqXL9xMREXLhwAc2bN8fp06ddOtbmzZvRv39/BAQEYO/evejQoYNkeZMmTZCRkYGkpCSbE4o99npQNG7cGEeOHEFCQoL156xqllFyVbOy2vzNR3Z2Nvbt24cuXbogMjKS347W4DnkNx++f47Iz8/Hvn37rG+qeY7w3W9HeY6o+TmisLAQu3fvRt++fa29ZiviOaIM30eUqa3niNzcXGzevNn6vqUczxFl+D6iTG0/R+Tn53t8GAZXOF2gmDFjBhYvXmytVFberHXr1rj//vtx3333WYsEFd2IAkV2djbq1q0LABg9ejSWLVtW5fr16tXD1atX0a5dO5sqX1WKi4vRsWNHnDhxAs899xxmzpxps46rBYrK9Ho9tFotMjIy7D6fRP4gLy8PmzZtsn5DQOSPmHNSAuaclIA5JyXIy8uTNd9OX+Lx0ksvQaVSSQoT8fHxuPfee3H//feja9euXmmgKypWMp25bKO8UubqSKXvvfceTpw4gcaNG9u9LIOIiIiIiIiIXFOjMSjCwsIwc+ZMPPLII14dU8JVISEhqFOnDq5du2ZzbVhlubm51gKFq11Ypk+fDgAYPHgwVq5caXed8n0bDAZrT466detarzNzVlBQkEvrE9UmQUFBaNKkCXNOfo05JyVgzkkJmHNSArnz7fQlHuWXaFg3VKnQv39/3H///bjzzjur7YVwIy7xAIC+fftiy5YtCA8PR15ensNpUnbs2IGePXsCAF5//XWXekLYu7bSGf369cPGjRudWrf8Eg+dTme9/omIiIiIiIjIXznd/WHs2LEIDQ2FEAJCCFgsFmzYsAETJ05EvXr1MHbsWPz22282A4jcaL179wZQ1nNh7969DterOPJpr169vN6umqo8wAmRPzGZTMjL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jEAgEHI/QENa4nx+Kr/fb36Je+6554zc3FwKFIiolsr5HXfcYUgykpKSjIULF9bbLhAIGBUVFc3uBwimJXI+cuRI8xivvvpq0DaPPfaY2eaBBx5oVj9AfZ555hlj0aJFxuHDhw3DMIy9e/dGpECxbNky87g33HCD4ff7a+0/duyY0alTJ0OSkZWVZZw8eTKk41OgCKPPPvvMfLPuvffeoG0qKyuN7t27m29YeXl5yP384he/MPtZv3590Dbr168329x///0h9wHUp6Vy3hQ333yzOZbPP/88In3AnqzK+UsvvWRIMi644AKjrKyMAgUiqqVyXvOquBkzZpzusIGQtFTOs7OzDUlGTk5OvW0KCwvNsVx66aUh9wGEIlIFiuuuu84s+B04cCBom7lz55p9v/jiiyEdP2YnybTCggULzO3x48cHbeN0OjV27FhJUmFhoZYvXx5SH4ZhaOHChZKkbt26acCAAUHbDRgwQBdccIEkaeHChTJibzVZWKQlct5U1UsCS9KePXsi0gfsyYqc79+/X88884wkadasWUpMTDyt4wGNaamc//nPf5YkuVwuPfjgg6EPFDgNLZXz8vJySdK5555bbxuXy6XWrVvXag+cSYqKirRs2TJJ0tVXX60OHToEbXfTTTcpMzNTkvS///u/IfVBgSKM1qxZI0lKS0tTnz596m03ePBgc3vt2rUh9bF3714dOnSoznEa6ufgwYPat29fSP0A9WmJnDdVWVmZuR0XFxeRPmBPVuT8/vvvl9fr1R133KEhQ4ac1rGApmiJnJeXl5t/WBk+fLiSk5MlSZWVlTpw4ID27dun0tLSUIcONFlLnc+r/zC4d+/eett4PB4dP368VnvgTLJp0yazuNbQd9HExETzD+mbNm1SRUVFk/ugQBFG27dvlyR17dpV8fHx9bbr1q1bncc01bfffhv0OOHuB6hPS+S8qVauXGlud+/ePSJ9wJ5aOufz5s3TkiVLlJ2drZdeeqnZxwFC0RI537Ztm1mAuOiii+TxePTII4+odevW6tSpk84991y5XC4NHz5cK1asCP1JAI1oqfP5fffdJ0k6ceKEZs2aFbTNb37zmzrtgTNJc76L+v1+7d69u8l9UKAIk9LSUrMiWt+lLtWys7OVlpYmSTpw4EBI/fzwww/mdmP9dOzY0dwOtR8gmJbKeVNs27ZNixcvllT1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OTlZKSkp6tChg6677jq98sorKi4urvcY5eXlatOmjbmqyPr165vc/+DBg83H/fGPf2yw7aZNm/Too4/qkksuUZs2bZSYmKizzz5bgwcP1vTp01VQUNBof507dzb727dvnyRpz549+vWvf63evXurTZs2cjqduuSSS+o8dseOHZo8ebIGDBig1q1bKzExUcnJyWrbtq369Omj8ePH65133mnSOAAAiAUOwzAMqwcBAACsNWTIEK1cuVKSNGXKlGYtNXrgwAH17t1bJ06caLRtTk6O5s6dq+HDhwfd/8tf/lIvvfSSJGnChAl68803Gz3m7t27lZeXJ0lKSkrSoUOH1KpVqzrtCgoKNHHiRP3P//xPg8fLysrSm2++qVtuuaXeNp07d9b+/fslSXv37tU///lPPfzwwyotLa3VrlevXtq6dav589SpU/X888+rsrKy0ed1++23629/+1uj7QAAONPFWz0AAAAQG7xer1mcyM7OVs+ePZWbm6v09HSVl5dr79692rBhg0pLS3XixAldf/31WrlypS6//PI6x7rnnnvMAsX777+vV155RWlpaQ32/9Zbb5nbN910U9DixOHDhzVs2DBt377d/F3Pnj3Vq1cvpaen6+jRo1q9erVOnDihwsJC3XrrrfrrX/+q22+/vdHn//e//12TJ0+WJLVr1075+flyuVw6dOiQTp48ababOXOmnn32WfPn1q1ba8CAATrnnHPkcDh08uRJ7dixQ9u3b29SAQMAgFhBgQIAAIRFSkqKHnroIY0ZM0Z9+/aV01n3TlKPx6PnnntOL730kvx+v8aPH6/t27fXaZuXl6fBgwdr5cqVKioq0n//939r/Pjx9fZdWVmpd955x/x5woQJddoEAgH9/Oc/N4sT/fv316xZs9S7d+9a7UpLSzV9+nQ9++yzMgxD9957ry6//HKde+65DT7/p556SomJifrzn/+sCRMmyOFwmPvKysokSX6/X88//7z5+2nTpmnSpElKSEioc7yTJ09q4cKFOnbsWIP9AgAQK5iDAgAAhEVubq7++Mc/qn///kGLE5KUmZmp3//+97rvvvskSbt27dLHH38ctO0999xjbs+ZM6fBvpcsWaIff/xRktSlSxcNHTq0Tpv33ntPy5cvlyQNGDBAK1asqFOckKTk5GRNmTJFzzzzjKSqK0NefPHFBvuXqooPb731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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "params = {}\n", + "params['window'] = default_window\n", + "params['dim'] = default_token_dim\n", + "params['num_heads'] = 1\n", + "params['state_dim'] = 1\n", + "\n", + "# name = plot(all_accs, params, 'dim', 'layers', param_counts=all_params, x_axis='params')\n", + "name = plot(all_accs, params, 'layers', 'depths', param_counts=all_params)\n", + "plt.title(\"Average Accuracies across Layers\")\n", + "plt.xlabel(\"Layers\")\n", + "plt.ylabel(\"Accuracy\")\n", + "savefig(task_name, name)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e02ccf18", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "hybrid", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/source/official-code/micro_hf/process_get_data.ipynb b/source/official-code/micro_hf/process_get_data.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..7f922f062c76ee9f9d89c228f455662e4506fd35 --- /dev/null +++ b/source/official-code/micro_hf/process_get_data.ipynb @@ -0,0 +1,2562 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 61, + "id": "15e7bc6a-c8fd-4803-9907-6b744a5819be", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "2536cab8-1d4d-4d69-8d34-ba1547c892c4", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import json\n", + "import matplotlib as mpl\n", + "import matplotlib.pyplot as plt\n", + "\n", + "mpl.rcParams.update({\n", + " \"figure.figsize\": (6, 4),\n", + " \"axes.spines.top\": False,\n", + " \"axes.spines.right\": False,\n", + " \"axes.xmargin\": 0,\n", + " \"axes.grid\": True,\n", + " \"grid.linestyle\": \"--\",\n", + " \"grid.linewidth\": 0.5,\n", + " \"axes.titlesize\": 14,\n", + " \"axes.labelsize\": 12,\n", + " \"xtick.labelsize\": 10,\n", + " \"ytick.labelsize\": 10,\n", + " \"font.size\": 11,\n", + " \"lines.linewidth\": 2,\n", + " \"lines.markersize\": 6,\n", + " \"legend.frameon\": True,\n", + "})\n", + "\n", + "# mpl.rcParams.update({\n", + "# \"figure.figsize\": (6, 4),\n", + "# \"axes.spines.top\": False,\n", + "# \"axes.spines.right\": False,\n", + "# \"axes.facecolor\": \"#fafafa\",\n", + "# \"axes.grid\": True,\n", + "# \"grid.color\": \"#dddddd\",\n", + "# \"grid.linestyle\": \"--\",\n", + "# \"axes.prop_cycle\": mpl.cycler(color=[\"#4C72B0\", \"#55A868\", \"#C44E52\",\n", + "# \"#8172B2\", \"#CCB974\", \"#64B5CD\"]),\n", + "# \"font.size\": 11,\n", + "# \"axes.labelsize\": 12,\n", + "# \"axes.titlesize\": 14,\n", + "# \"legend.frameon\": True,\n", + "# \"legend.facecolor\": \"white\",\n", + "# \"legend.edgecolor\": \"#dddddd\",\n", + "# \"lines.linewidth\": 2,\n", + "# })\n", + "\n", + "from plt_utils import plot, savefig\n", + "\n", + "import os\n", + "\n", + "# task_name, data_name, default_window, default_token_dim = \"assoc-recall-mk\", \"data_100_0_8\", 20, 8\n", + "# task_name, data_name, default_window, default_token_dim = \"assoc-recall-mk\", \"data_100_0_8\", 20, 16\n", + "task_name, data_name, default_window, default_token_dim = \"assoc-recall-mk\", \"data_100_0_8\", 100, 16\n", + "# task_name, data_name, default_window, default_token_dim = \"decode-recall\", \"data_100_2_32\", 100, 24\n", + "# task_name, data_name, default_window, default_token_dim = \"decode-recall-last\", \"data_100_2_32\", 100, 24\n", + "# task_name, data_name, default_window, default_token_dim = \"var-copy\", \"data_100_5_26\", 20, 8 # 20, 24" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "d84cc6a2-95b6-4091-8434-d157a6605ac6", + "metadata": {}, + "outputs": [], + "source": [ + "dashed_task_name = '-'.join(task_name.split('_'))\n", + "\n", + "all_losses = {}\n", + "all_accs = {}\n", + "all_train_accs = {}\n", + "all_params = {}" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "db00c2f6-aad7-4330-b4c0-35edc28bc8ca", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.5509542226791382, 0.5378150343894958, 0.5883121490478516, 0.5544863939285278]\n", + "[0.40055233240127563, 0.36914095282554626, 0.3605211079120636, 0.39138180017471313]\n", + "[0.5295699834823608, 0.5220794081687927, 0.5120234489440918, 0.5267735719680786]\n", + "[0.5199825763702393, 0.5360926389694214, 0.5141145586967468, 0.5122722387313843]\n", + "[0.5382618308067322, 0.5112200975418091, 0.5536389350891113, 0.523198127746582]\n", + "[0.5920188426971436, 0.6212859153747559, 0.5614680051803589, 0.6486009955406189]\n", + "[0.4751615524291992, 0.5029705166816711, 0.5185073614120483, 0.46285176277160645]\n", + "[0.41640082001686096, 0.42883649468421936, 0.400158166885376, 0.4669591188430786]\n", + "[0.5064279437065125, 0.5293078422546387, 0.5132164359092712, 0.5315434336662292]\n", + "[0.48323923349380493, 0.4944406747817993, 0.46400779485702515, 0.5443179607391357]\n", + "[0.6436766982078552, 0.631529688835144, 0.6071503162384033, 0.5696085095405579]\n", + "[0.4664038419723511, 0.5326696634292603, 0.466636598110199, 0.44617971777915955]\n", + "[0.5133059024810791, 0.5210201740264893, 0.5288490056991577, 0.5163871049880981]\n", + "[0.20308375358581543, 0.20176835358142853, 0.18595623970031738, 0.25799760222435]\n", + "[0.16580599546432495, 0.14746889472007751, 0.21697144210338593, 0.15592804551124573]\n", + "[0.5083686113357544, 0.4902377426624298, 0.5611413717269897, 0.5231473445892334]\n", + "[0.14274843037128448, 0.17517174780368805, 0.2013373225927353, 0.13791601359844208]\n", + "[0.2509230673313141, 0.19027982652187347, 0.23583585023880005, 0.23889364302158356]\n", + "[0.16550952196121216, 0.18177762627601624, 0.16895516216754913, 0.1232198104262352]\n", + "[0.35720309615135193, 0.36665940284729004, 0.39176613092422485, 0.3305922746658325]\n", + "[0.2691487669944763, 0.3172236382961273, 0.3016389012336731, 0.3464123010635376]\n", + "[0.17520202696323395, 0.18240539729595184, 0.21475327014923096, 0.23550008237361908]\n", + "[0.5559982657432556, 0.564415454864502, 0.5851176381111145, 0.5712015628814697]\n", + "[0.5376720428466797, 0.5427688360214233, 0.563744843006134, 0.5743272304534912]\n", + "[0.5528250932693481, 0.5828090906143188, 0.5532848834991455, 0.587251603603363]\n", + "[0.5346198081970215, 0.5710574984550476, 0.5486661195755005, 0.5161213874816895]\n", + "[0.5437857508659363, 0.5996485948562622, 0.5606217384338379, 0.5470988154411316]\n", + "[0.59284907579422, 0.5600630044937134, 0.5772740840911865, 0.549682080745697]\n", + "[0.5578567385673523, 0.5744271874427795, 0.541701078414917, 0.6046924591064453]\n", + "[0.5614300966262817, 0.5578926801681519, 0.552114725112915, 0.523000955581665]\n", + "[0.5401030778884888, 0.5722962617874146, 0.5714017748832703, 0.5375881195068359]\n", + "[0.5716268420219421, 0.5495516061782837, 0.5597859621047974, 0.5635698437690735]\n", + "[0.5450668334960938, 0.5930858850479126, 0.5564134120941162, 0.5704195499420166]\n", + "[0.3134281039237976, 0.2991785407066345, 0.27072104811668396, 0.24999591708183289]\n", + "[0.3574342131614685, 0.32693159580230713, 0.3874804973602295, 0.31158074736595154]\n", + "[0.456051766872406, 0.44672590494155884, 0.4383682608604431, 0.45088955760002136]\n", + "[0.2063300609588623, 0.20838487148284912, 0.21137933433055878, 0.22942937910556793]\n", + "[0.1611015945672989, 0.1568923443555832, 0.1867528259754181, 0.1816827356815338]\n", + "[0.37992316484451294, 0.35772234201431274, 0.36750465631484985, 0.356388121843338]\n", + "[0.23196759819984436, 0.2364923357963562, 0.22031274437904358, 0.21703514456748962]\n", + "[0.3090377151966095, 0.2749112546443939, 0.29363149404525757, 0.29712557792663574]\n", + "[0.31105393171310425, 0.2959224283695221, 0.3119819462299347, 0.26937490701675415]\n", + "[0.1570691466331482, 0.17126205563545227, 0.21785899996757507, 0.17392688989639282]\n", + "[0.2148842215538025, 0.24963682889938354, 0.22023755311965942, 0.1835119128227234]\n", + "[0.9742493033409119, 0.9861552119255066, 0.9886102676391602, 0.9947363138198853]\n", + "[0.5048134326934814, 0.5141574740409851, 0.4910568594932556, 0.47896742820739746]\n", + "[0.9815396070480347, 0.9858806729316711, 0.9588170051574707, 0.9710496664047241]\n", + "[0.8865309357643127, 0.8779074549674988, 0.871472954750061, 0.8556901216506958]\n", + "[0.9886623024940491, 0.9645164608955383, 0.9710843563079834, 0.9549679160118103]\n", + "[0.9671696424484253, 0.966541051864624, 0.9618132710456848, 0.95648592710495]\n", + "[0.9622233510017395, 0.9504034519195557, 0.9454346299171448, 0.9355457425117493]\n", + "[0.32162800431251526, 0.35314586758613586, 0.2940524220466614, 0.29003089666366577]\n", + "[0.14812137186527252, 0.2212677150964737, 0.18287493288516998, 0.16940534114837646]\n", + "[0.19569888710975647, 0.16844916343688965, 0.17616894841194153, 0.19329389929771423]\n", + "[0.3559599816799164, 0.36957529187202454, 0.34128400683403015, 0.3482728898525238]\n", + "[0.3728320598602295, 0.37621909379959106, 0.3551788330078125, 0.3356490433216095]\n", + "[0.2567659020423889, 0.2641078233718872, 0.25468695163726807, 0.28251343965530396]\n", + "[0.26467564702033997, 0.2596531808376312, 0.2325555384159088, 0.2391873449087143]\n", + "[0.3801945447921753, 0.3256327509880066, 0.3995950222015381, 0.31420594453811646]\n", + "[0.39204931259155273, 0.41285276412963867, 0.34644654393196106, 0.3983383774757385]\n", + "[0.3926759958267212, 0.39159640669822693, 0.4229317903518677, 0.36247938871383667]\n", + "[0.34564486145973206, 0.35501253604888916, 0.3327845335006714, 0.3865671157836914]\n", + "[0.3409557342529297, 0.2732105255126953, 0.30801260471343994, 0.31633928418159485]\n", + "[0.30050894618034363, 0.35192108154296875, 0.30770671367645264, 0.3690454661846161]\n", + "[0.3838346004486084, 0.37052857875823975, 0.3899579644203186, 0.3498591184616089]\n", + "[0.3805442750453949, 0.31015798449516296, 0.3484158217906952, 0.4062248170375824]\n", + "[0.13021846115589142, 0.14891523122787476, 0.14925003051757812, 0.14437593519687653]\n", + "[0.12171854823827744, 0.12844492495059967, 0.12104610353708267, 0.13292476534843445]\n", + "[0.18724972009658813, 0.17482320964336395, 0.14149805903434753, 0.15510053932666779]\n", + "[0.17477473616600037, 0.15087170898914337, 0.16725502908229828, 0.1819094568490982]\n", + "[0.12154686450958252, 0.14870567619800568, 0.10372071713209152, 0.10851551592350006]\n", + "[0.31322190165519714, 0.28699421882629395, 0.29208311438560486, 0.2828647792339325]\n", + "[0.2289944738149643, 0.2122565060853958, 0.16488352417945862, 0.19628623127937317]\n", + "[0.45286568999290466, 0.4507119953632355, 0.43779242038726807, 0.47224894165992737]\n", + "[0.2646612226963043, 0.23589719831943512, 0.2548980414867401, 0.2516619563102722]\n", + "[0.30159181356430054, 0.3361372947692871, 0.32195213437080383, 0.3064688742160797]\n", + "[0.4043686091899872, 0.3717125356197357, 0.45288366079330444, 0.3810747563838959]\n", + "[0.3143905699253082, 0.2861210107803345, 0.3017910122871399, 0.3449220359325409]\n", + "[0.2552855908870697, 0.2743455171585083, 0.21738514304161072, 0.23898103833198547]\n", + "[0.17340798676013947, 0.1608262062072754, 0.16076071560382843, 0.18835650384426117]\n", + "[0.5594627857208252, 0.5674887895584106, 0.5780949592590332, 0.573448657989502]\n", + "[0.2606055438518524, 0.23424579203128815, 0.27626240253448486, 0.30216410756111145]\n", + "[0.1964334398508072, 0.20924359560012817, 0.17518675327301025, 0.16584184765815735]\n", + "[0.18551014363765717, 0.171763077378273, 0.19405528903007507, 0.15355268120765686]\n", + "[0.2014559805393219, 0.2264145165681839, 0.14427396655082703, 0.17380356788635254]\n", + "[0.24137862026691437, 0.2423715889453888, 0.26926517486572266, 0.24326500296592712]\n", + "[0.20936191082000732, 0.20319850742816925, 0.16444000601768494, 0.17516861855983734]\n", + "[0.18157589435577393, 0.17745107412338257, 0.15136456489562988, 0.18963824212551117]\n", + "[0.6694061160087585, 0.653788149356842, 0.6060947775840759, 0.6717612743377686]\n", + "[0.1431909054517746, 0.15874993801116943, 0.16341064870357513, 0.1735849678516388]\n", + "[0.2091200202703476, 0.21820306777954102, 0.16420722007751465, 0.20521412789821625]\n", + "[0.1857241839170456, 0.15416613221168518, 0.19969266653060913, 0.2102275937795639]\n", + "[0.18951120972633362, 0.16695880889892578, 0.1956307590007782, 0.2051847279071808]\n", + "[0.3995891213417053, 0.3408995270729065, 0.3893040716648102, 0.37120646238327026]\n", + "[0.29743844270706177, 0.3223514258861542, 0.2772417664527893, 0.3138338029384613]\n", + "[0.3369436264038086, 0.37811195850372314, 0.36808741092681885, 0.36330658197402954]\n", + "[0.2140200138092041, 0.27478137612342834, 0.22626449167728424, 0.28725045919418335]\n", + "[0.3262813985347748, 0.3301254212856293, 0.28941985964775085, 0.33086514472961426]\n", + "[0.2480928599834442, 0.24750696122646332, 0.2655663788318634, 0.24252815544605255]\n", + "[0.2321700006723404, 0.22428354620933533, 0.221408873796463, 0.22877319157123566]\n", + "[0.3607380986213684, 0.3421129584312439, 0.285742849111557, 0.298248827457428]\n", + "[0.32714346051216125, 0.2727102041244507, 0.25754618644714355, 0.3542325794696808]\n", + "[0.43342113494873047, 0.40729010105133057, 0.42124584317207336, 0.37980780005455017]\n", + "[0.2302803099155426, 0.2506629526615143, 0.2626182436943054, 0.2648814618587494]\n", + "[0.1759219467639923, 0.25378936529159546, 0.22906376421451569, 0.2151261270046234]\n", + "[0.38416871428489685, 0.35945698618888855, 0.38126516342163086, 0.37300539016723633]\n", + "[0.2642276883125305, 0.28738293051719666, 0.2822999358177185, 0.2704201638698578]\n", + "[0.3210257887840271, 0.26000258326530457, 0.2814652621746063, 0.31839990615844727]\n", + "[0.26250991225242615, 0.2577384114265442, 0.3231407105922699, 0.2876353859901428]\n", + "[0.27087607979774475, 0.26213663816452026, 0.2552225887775421, 0.26999226212501526]\n", + "[0.33079344034194946, 0.3734007179737091, 0.3669115900993347, 0.3620540499687195]\n", + "[0.33938443660736084, 0.3672747015953064, 0.2854520082473755, 0.3315831422805786]\n", + "[0.36339402198791504, 0.3354862332344055, 0.32491639256477356, 0.3494371175765991]\n", + "[0.28787776827812195, 0.2929689884185791, 0.2932940721511841, 0.2747546136379242]\n", + "[0.21746322512626648, 0.2512548565864563, 0.19351030886173248, 0.21982157230377197]\n", + "[0.5054710507392883, 0.5813710689544678, 0.5771571397781372, 0.4977568984031677]\n", + "[0.5294727087020874, 0.5445695519447327, 0.5670318007469177, 0.5657782554626465]\n", + "[0.5800544619560242, 0.5935668349266052, 0.583701491355896, 0.6120513677597046]\n", + "[0.3383204936981201, 0.3734332025051117, 0.3590339422225952, 0.35292211174964905]\n", + "[0.4900253415107727, 0.5252676606178284, 0.49851420521736145, 0.5125683546066284]\n", + "[0.5464094281196594, 0.5853313207626343, 0.5816980600357056, 0.580119788646698]\n", + "[0.5640606880187988, 0.5841589570045471, 0.6103699803352356, 0.5762039422988892]\n", + "[0.49044686555862427, 0.5011521577835083, 0.4714523255825043, 0.4896646738052368]\n", + "[0.5177145004272461, 0.5132208466529846, 0.46543604135513306, 0.5253763198852539]\n", + "[0.5484259128570557, 0.5284125804901123, 0.49420785903930664, 0.5266707539558411]\n", + "[0.38777995109558105, 0.3433903157711029, 0.3719843327999115, 0.39760303497314453]\n", + "[0.3002239167690277, 0.3429989814758301, 0.2728574573993683, 0.3235545754432678]\n", + "[0.4124613106250763, 0.41219252347946167, 0.4226153492927551, 0.4302577078342438]\n", + "[0.34953832626342773, 0.31633853912353516, 0.3461918532848358, 0.3271627426147461]\n", + "[0.3713056445121765, 0.34855467081069946, 0.3840806186199188, 0.39842402935028076]\n", + "[0.2742483913898468, 0.25462815165519714, 0.31732678413391113, 0.24374249577522278]\n", + "[0.3240394592285156, 0.29138755798339844, 0.3585500121116638, 0.36034825444221497]\n", + "[0.317363440990448, 0.2590658664703369, 0.30122026801109314, 0.3140140771865845]\n", + "[0.406992644071579, 0.3771105706691742, 0.395521342754364, 0.34118878841400146]\n", + "[0.38739216327667236, 0.3837568759918213, 0.37217968702316284, 0.37695130705833435]\n", + "[0.3740421235561371, 0.378326952457428, 0.36512282490730286, 0.3390420079231262]\n", + "[0.3122839033603668, 0.2867807149887085, 0.2748605012893677, 0.2975143492221832]\n", + "[0.15484881401062012, 0.14793233573436737, 0.19590862095355988, 0.14523600041866302]\n", + "[0.34505102038383484, 0.41339370608329773, 0.2998349964618683, 0.34600937366485596]\n", + "[0.16156531870365143, 0.13036097586154938, 0.12234728783369064, 0.16457580029964447]\n", + "[0.23265057802200317, 0.17125444114208221, 0.20530864596366882, 0.20748277008533478]\n", + "[0.2789284288883209, 0.2681432068347931, 0.26090627908706665, 0.27053123712539673]\n", + "[0.3148626387119293, 0.28832173347473145, 0.28913241624832153, 0.2852511703968048]\n", + "[0.15463753044605255, 0.14644008874893188, 0.17391057312488556, 0.14485900104045868]\n", + "[0.14874349534511566, 0.1555173248052597, 0.14147846400737762, 0.13245181739330292]\n", + "[0.15737253427505493, 0.1405123621225357, 0.14289811253547668, 0.12443186342716217]\n", + "[0.13797368109226227, 0.12925675511360168, 0.11793722212314606, 0.16504499316215515]\n", + "[0.43784695863723755, 0.4774584174156189, 0.4187937080860138, 0.4720645546913147]\n", + "[0.21887174248695374, 0.21982711553573608, 0.23159107565879822, 0.21855051815509796]\n", + "[0.2463143765926361, 0.23039895296096802, 0.272167444229126, 0.24788373708724976]\n", + "[0.34224948287010193, 0.42244797945022583, 0.38085588812828064, 0.38326695561408997]\n", + "[0.1313726305961609, 0.1831713169813156, 0.12495668977499008, 0.160977303981781]\n", + "[0.18486681580543518, 0.14681750535964966, 0.14665845036506653, 0.1724201738834381]\n", + "[0.2597132623195648, 0.23991543054580688, 0.1858488768339157, 0.21316607296466827]\n", + "[0.3066820800304413, 0.2603050470352173, 0.2423512190580368, 0.2948242425918579]\n", + "[0.23712703585624695, 0.1951865702867508, 0.20371489226818085, 0.24180440604686737]\n", + "[0.40485575795173645, 0.3762272894382477, 0.3691900968551636, 0.35458090901374817]\n", + "[0.19728362560272217, 0.21606221795082092, 0.2102634161710739, 0.22609761357307434]\n", + "[0.4141855835914612, 0.47040748596191406, 0.4953199625015259, 0.4292720854282379]\n", + "[0.9842239022254944, 0.9814759492874146, 0.9919417500495911, 0.9893014430999756]\n", + "[0.9947362542152405, 0.9891780018806458, 0.9831677675247192, 0.9866666793823242]\n", + "[0.9971591234207153, 0.9892435669898987, 0.9867478609085083, 0.9973958730697632]\n", + "[0.9881644248962402, 0.9866213798522949, 0.9891729950904846, 0.9921201467514038]\n", + "[0.9972826242446899, 1.0, 0.9971591234207153, 1.0]\n", + "[0.4531620442867279, 0.45370015501976013, 0.4883863925933838, 0.4159984588623047]\n", + "[0.45566269755363464, 0.4355909526348114, 0.4720980226993561, 0.4656968116760254]\n", + "[0.46045204997062683, 0.4746253192424774, 0.4727117121219635, 0.49617907404899597]\n", + "[0.4420722424983978, 0.4941345453262329, 0.45647940039634705, 0.45576542615890503]\n", + "[0.4877661168575287, 0.4435504674911499, 0.4983653426170349, 0.49701255559921265]\n", + "[0.4602976441383362, 0.4575596749782562, 0.4886792302131653, 0.4802166223526001]\n", + "[0.4642803370952606, 0.49670788645744324, 0.43329936265945435, 0.47320419549942017]\n", + "[0.49346923828125, 0.4591113030910492, 0.48282843828201294, 0.41471153497695923]\n", + "[0.5322051048278809, 0.4807797372341156, 0.5187878608703613, 0.5166279673576355]\n", + "[0.4856669306755066, 0.4632805287837982, 0.5301084518432617, 0.4365585446357727]\n", + "[0.5321627855300903, 0.4404085576534271, 0.462593674659729, 0.43683159351348877]\n", + "[0.5773217678070068, 0.5905716419219971, 0.6182195544242859, 0.5958854556083679]\n", + "[0.5112413167953491, 0.5194406509399414, 0.49668437242507935, 0.49472686648368835]\n", + "[0.5445096492767334, 0.5863471031188965, 0.5714859962463379, 0.5608943104743958]\n", + "[0.570375382900238, 0.5248516798019409, 0.5579208135604858, 0.5444292426109314]\n", + "[0.5599633455276489, 0.5901461839675903, 0.5764458775520325, 0.5885686874389648]\n", + "[0.4906838834285736, 0.5019233226776123, 0.5175604820251465, 0.47530633211135864]\n", + "[0.4562835395336151, 0.3800721764564514, 0.40971091389656067, 0.4628870487213135]\n", + "[0.5887749195098877, 0.5689883828163147, 0.5365035533905029, 0.564452588558197]\n", + "[0.5270845890045166, 0.5459551811218262, 0.5567583441734314, 0.5710439085960388]\n", + "[0.5521118640899658, 0.5306442379951477, 0.4936494827270508, 0.5087148547172546]\n", + "[0.5330004692077637, 0.593670666217804, 0.5494444370269775, 0.5116692781448364]\n", + "[0.5920230150222778, 0.5477701425552368, 0.5749654769897461, 0.5606700778007507]\n", + "[0.5645579695701599, 0.5800486207008362, 0.5864012241363525, 0.5094503164291382]\n", + "[0.5730194449424744, 0.5700237154960632, 0.5849875211715698, 0.5655034184455872]\n", + "[0.5780958533287048, 0.5676455497741699, 0.549412727355957, 0.5649802684783936]\n", + "[0.5913323163986206, 0.5451016426086426, 0.5996933579444885, 0.5581287145614624]\n", + "[0.5472878217697144, 0.5363802909851074, 0.5385504961013794, 0.5218167304992676]\n", + "[0.5656784772872925, 0.5157400369644165, 0.5816308259963989, 0.5483425259590149]\n", + "[0.5391933917999268, 0.5399996042251587, 0.554271936416626, 0.5540788173675537]\n", + "[0.5385997891426086, 0.5564521551132202, 0.5633952617645264, 0.5810622572898865]\n", + "[0.5636405944824219, 0.5463294386863708, 0.5436756014823914, 0.5722922682762146]\n", + "[0.5238336324691772, 0.5867111682891846, 0.5895202159881592, 0.524944007396698]\n", + "[0.13092736899852753, 0.1458294838666916, 0.15108118951320648, 0.14374735951423645]\n", + "[0.09924779832363129, 0.13624198734760284, 0.15321336686611176, 0.14095483720302582]\n", + "[0.1556936651468277, 0.13523292541503906, 0.15557532012462616, 0.1441192775964737]\n", + "[0.134304016828537, 0.138856902718544, 0.15723049640655518, 0.16604773700237274]\n", + "[0.12057285010814667, 0.11824057251214981, 0.0733082965016365, 0.12281446903944016]\n", + "[0.09905803203582764, 0.10125385969877243, 0.1176307424902916, 0.13534359633922577]\n", + "[0.11250760406255722, 0.1587815284729004, 0.16392745077610016, 0.11805509030818939]\n", + "[0.12766076624393463, 0.15823552012443542, 0.11398953199386597, 0.14102409780025482]\n", + "[0.14890944957733154, 0.13970202207565308, 0.11177168786525726, 0.11692966520786285]\n", + "[0.15246833860874176, 0.15557874739170074, 0.15069837868213654, 0.1348709613084793]\n", + "[0.14039213955402374, 0.14367015659809113, 0.14175370335578918, 0.13535967469215393]\n", + "[0.5859413146972656, 0.5916345119476318, 0.6065229177474976, 0.635938286781311]\n", + "[0.5409792065620422, 0.5704023241996765, 0.5262283086776733, 0.5371807217597961]\n", + "[0.6629708409309387, 0.6016062498092651, 0.6362214088439941, 0.6426764130592346]\n", + "[0.5553678870201111, 0.5339100360870361, 0.5428230166435242, 0.5620092153549194]\n", + "[0.6125229597091675, 0.662270724773407, 0.6783099174499512, 0.6445709466934204]\n", + "[0.6044466495513916, 0.6250349283218384, 0.5837714672088623, 0.6709718704223633]\n", + "[0.418548047542572, 0.40932518243789673, 0.4240436553955078, 0.4659598469734192]\n", + "[0.5790201425552368, 0.6429703831672668, 0.581882655620575, 0.5980228781700134]\n", + "[0.2679837942123413, 0.28730571269989014, 0.25808894634246826, 0.26472049951553345]\n", + "[0.636627733707428, 0.63172447681427, 0.5894837379455566, 0.6142834424972534]\n", + "[0.7364749312400818, 0.7332724332809448, 0.7301154136657715, 0.7282220721244812]\n", + "[0.6111600995063782, 0.6036313772201538, 0.5501803159713745, 0.6135231852531433]\n", + "[0.5937389731407166, 0.6074758768081665, 0.6040952801704407, 0.6338549852371216]\n", + "[0.5338775515556335, 0.5652996897697449, 0.5001779794692993, 0.5405722856521606]\n", + "[0.44214028120040894, 0.4299604594707489, 0.4492442011833191, 0.40044325590133667]\n", + "[0.5693445205688477, 0.540986180305481, 0.5342472791671753, 0.4898573160171509]\n", + "[0.5883643627166748, 0.5733140110969543, 0.5865063071250916, 0.5873796939849854]\n", + "[0.5411021113395691, 0.5501510500907898, 0.5637454390525818, 0.5694117546081543]\n", + "[0.5703131556510925, 0.599433183670044, 0.6049097776412964, 0.6560393571853638]\n", + "[0.4808550477027893, 0.4938717782497406, 0.40991339087486267, 0.4521458148956299]\n", + "[0.6120859384536743, 0.5238040685653687, 0.5363473892211914, 0.5531145334243774]\n", + "[0.6338353157043457, 0.6519067883491516, 0.7088372707366943, 0.6637159585952759]\n", + "[0.9943813681602478, 0.9970930218696594, 1.0, 0.9972222447395325]\n", + "[0.9896712303161621, 0.9944512248039246, 0.9945626854896545, 0.985849916934967]\n", + "[0.18324829638004303, 0.17021816968917847, 0.17727836966514587, 0.195016548037529]\n", + "[0.17617681622505188, 0.16451342403888702, 0.1738063544034958, 0.13034340739250183]\n", + "[0.2125377357006073, 0.2342430204153061, 0.18768222630023956, 0.26793354749679565]\n", + "[0.9895742535591125, 0.9890497922897339, 0.9972222447395325, 1.0]\n", + "[0.9894171357154846, 0.9922342300415039, 0.994623064994812, 0.9971591234207153]\n", + "[0.9946712255477905, 0.9946081042289734, 0.9830663204193115, 1.0]\n", + "[0.9611990451812744, 0.9714387655258179, 0.968639612197876, 0.9725732803344727]\n", + "[0.9974489808082581, 0.9838419556617737, 0.9917406439781189, 0.9945048689842224]\n", + "[0.9945652484893799, 0.9863752126693726, 0.9865864515304565, 0.9887599349021912]\n", + "[0.2017451524734497, 0.17268632352352142, 0.18362943828105927, 0.1694389432668686]\n", + "[0.159295916557312, 0.156321182847023, 0.14512020349502563, 0.13760553300380707]\n", + "[0.16760382056236267, 0.15588417649269104, 0.1990181803703308, 0.16013416647911072]\n", + "[0.16032175719738007, 0.16992154717445374, 0.17919649183750153, 0.1407298445701599]\n", + "[0.1749628186225891, 0.1724955141544342, 0.142815500497818, 0.16268828511238098]\n", + "[0.14340443909168243, 0.1685825139284134, 0.15160062909126282, 0.1894865334033966]\n", + "[0.1574300080537796, 0.16603639721870422, 0.17471705377101898, 0.15266475081443787]\n", + "[0.30792415142059326, 0.31706011295318604, 0.263483464717865, 0.2726764976978302]\n", + "[0.14127422869205475, 0.1762004941701889, 0.15171384811401367, 0.12742109596729279]\n", + "[0.6350839734077454, 0.6060213446617126, 0.5910353660583496, 0.5832052230834961]\n", + "[0.5825218558311462, 0.5838384628295898, 0.5913779139518738, 0.6008758544921875]\n", + "[0.19025439023971558, 0.23706123232841492, 0.2054891139268875, 0.24927616119384766]\n", + "[0.5709574222564697, 0.6048702597618103, 0.52401202917099, 0.5761755108833313]\n", + "[0.2732747197151184, 0.27051258087158203, 0.29749536514282227, 0.337854266166687]\n", + "[0.4069923460483551, 0.44078826904296875, 0.44676223397254944, 0.4624567925930023]\n", + "[0.20531614124774933, 0.24354106187820435, 0.24010053277015686, 0.21849390864372253]\n", + "[0.12423479557037354, 0.13068872690200806, 0.16186140477657318, 0.17490999400615692]\n", + "[0.5003198385238647, 0.492433100938797, 0.432219535112381, 0.5222185254096985]\n", + "[0.18553118407726288, 0.19850364327430725, 0.1587519496679306, 0.17006471753120422]\n", + "[0.49979302287101746, 0.5138368606567383, 0.49778982996940613, 0.4865584373474121]\n", + "[0.5092569589614868, 0.5175814628601074, 0.5219190716743469, 0.5033305883407593]\n", + "[0.5603940486907959, 0.5927786231040955, 0.624174177646637, 0.5778027772903442]\n", + "[0.5399839282035828, 0.5486975312232971, 0.5497964024543762, 0.5635024905204773]\n", + "[0.5672041177749634, 0.5580139756202698, 0.598233163356781, 0.5731573104858398]\n", + "[0.5213644504547119, 0.493981271982193, 0.4518880844116211, 0.5084512233734131]\n", + "[0.38678982853889465, 0.431988924741745, 0.41923850774765015, 0.4459797441959381]\n", + "[0.4211467504501343, 0.42527666687965393, 0.37240275740623474, 0.3581995964050293]\n", + "[0.49898016452789307, 0.5162824988365173, 0.5073317289352417, 0.5512725114822388]\n", + "[0.6040433645248413, 0.62105393409729, 0.6017395257949829, 0.5749467015266418]\n", + "[0.4318908751010895, 0.4236534535884857, 0.4259500205516815, 0.4078405499458313]\n", + "[0.5698859095573425, 0.6004594564437866, 0.5526638031005859, 0.6055061221122742]\n", + "[0.5153632164001465, 0.5016023516654968, 0.5098535418510437, 0.5225045680999756]\n", + "[0.9973404407501221, 1.0, 0.9972221851348877, 1.0]\n", + "[0.9973404407501221, 0.9970238208770752, 0.9917874932289124, 0.9973404407501221]\n", + "[0.1473046839237213, 0.175218403339386, 0.16481679677963257, 0.13377253711223602]\n", + "[0.2837526202201843, 0.32356134057044983, 0.26297831535339355, 0.2663649320602417]\n", + "[0.1951262652873993, 0.20925256609916687, 0.24390582740306854, 0.23585079610347748]\n", + "[0.9972221851348877, 0.9970238208770752, 1.0, 1.0]\n", + "[0.9787896871566772, 0.991958498954773, 0.9779672622680664, 0.9729276895523071]\n", + "[0.41615399718284607, 0.3803611993789673, 0.41761985421180725, 0.39756327867507935]\n", + "[0.24250446259975433, 0.2457958161830902, 0.20731455087661743, 0.257238507270813]\n", + "[0.1379658430814743, 0.15832625329494476, 0.14694343507289886, 0.15045399963855743]\n", + "[0.17829251289367676, 0.1804870367050171, 0.20985952019691467, 0.22201617062091827]\n", + "[0.43779075145721436, 0.38531240820884705, 0.4161863923072815, 0.4051482677459717]\n", + "[0.6457708477973938, 0.6188218593597412, 0.6396663188934326, 0.6432435512542725]\n", + "[0.2932256758213043, 0.3276701867580414, 0.37434470653533936, 0.343737930059433]\n", + "[0.2634822428226471, 0.310672789812088, 0.2889356017112732, 0.2801736295223236]\n", + "[0.5514960885047913, 0.5457659959793091, 0.5723425149917603, 0.49986007809638977]\n", + "[0.660365879535675, 0.6082823872566223, 0.6424544453620911, 0.5958209037780762]\n", + "[0.38007187843322754, 0.3968457281589508, 0.3775201737880707, 0.4225997030735016]\n", + "[0.39398738741874695, 0.4269067347049713, 0.40171727538108826, 0.3633106052875519]\n", + "[0.2859533429145813, 0.24357134103775024, 0.28874292969703674, 0.30555880069732666]\n", + "[0.3179406225681305, 0.2935033440589905, 0.266537070274353, 0.26246365904808044]\n", + "[0.3841599225997925, 0.4023447632789612, 0.41010335087776184, 0.38679131865501404]\n", + "[0.5840831995010376, 0.49648359417915344, 0.5882909297943115, 0.5184963941574097]\n", + "[0.5571948289871216, 0.6454614996910095, 0.5181124210357666, 0.5416386127471924]\n", + "[0.5056897401809692, 0.5159356594085693, 0.53746098279953, 0.5186771750450134]\n", + "[0.4701964557170868, 0.546414315700531, 0.5560621619224548, 0.5208358764648438]\n", + "[0.5520187616348267, 0.5723277926445007, 0.5205538272857666, 0.5338571071624756]\n", + "[0.15656575560569763, 0.13719609379768372, 0.11590844392776489, 0.14259129762649536]\n", + "[0.14416299760341644, 0.13998253643512726, 0.1511050909757614, 0.1675718128681183]\n", + "[0.14833945035934448, 0.14881093800067902, 0.14103756844997406, 0.16719485819339752]\n", + "[0.3491375744342804, 0.4073842465877533, 0.4045168459415436, 0.4120822548866272]\n", + "[0.40429186820983887, 0.39204728603363037, 0.39062073826789856, 0.4295046627521515]\n", + "[0.3200058341026306, 0.3222520053386688, 0.38108164072036743, 0.3187367916107178]\n", + "[0.19261828064918518, 0.21766972541809082, 0.20234271883964539, 0.19132569432258606]\n", + "[0.3124876916408539, 0.29286283254623413, 0.3686788082122803, 0.32705527544021606]\n", + "[0.3193611800670624, 0.32941490411758423, 0.2919084131717682, 0.33094319701194763]\n", + "[0.3311459422111511, 0.3197483718395233, 0.2957112491130829, 0.346666157245636]\n", + "[0.3286023736000061, 0.3598003387451172, 0.3366636633872986, 0.3177444636821747]\n", + "[0.21632695198059082, 0.21818706393241882, 0.223128080368042, 0.22357580065727234]\n", + "[0.2902946174144745, 0.34286975860595703, 0.390040785074234, 0.3798443675041199]\n", + "[0.3428264558315277, 0.3713081181049347, 0.37664368748664856, 0.2985250949859619]\n", + "[0.2922933101654053, 0.25408223271369934, 0.2889612019062042, 0.30109718441963196]\n", + "[0.29669076204299927, 0.3508847653865814, 0.3153127431869507, 0.32365503907203674]\n", + "[0.9302766919136047, 0.9495892524719238, 0.9338727593421936, 0.9664852619171143]\n", + "[0.9144933223724365, 0.934666097164154, 0.9256875514984131, 0.9298669695854187]\n", + "[0.9647932648658752, 0.9304529428482056, 0.9357690215110779, 0.9478346705436707]\n", + "[0.9220857620239258, 0.9036559462547302, 0.9095714688301086, 0.8931295871734619]\n", + "[0.9221648573875427, 0.9119067192077637, 0.9367493391036987, 0.9178448915481567]\n", + "[0.5048121213912964, 0.5683998465538025, 0.5498732924461365, 0.5252032279968262]\n", + "[0.5170729160308838, 0.5425519943237305, 0.4958902895450592, 0.5694370865821838]\n", + "[0.48983874917030334, 0.5347001552581787, 0.4999811053276062, 0.5835415720939636]\n", + "[0.5460106134414673, 0.5077985525131226, 0.5373610854148865, 0.47377514839172363]\n", + "[0.5381914377212524, 0.5127134919166565, 0.49742478132247925, 0.5004116296768188]\n", + "[0.5333901643753052, 0.5707017183303833, 0.49964696168899536, 0.5317258238792419]\n", + "[0.5446162223815918, 0.47774964570999146, 0.5297743082046509, 0.5043721795082092]\n", + "[0.5639310479164124, 0.5316770076751709, 0.4867914319038391, 0.5132672786712646]\n", + "[0.5519533157348633, 0.5518447756767273, 0.5220124125480652, 0.5333395600318909]\n", + "[0.5514880418777466, 0.5132203102111816, 0.5637916326522827, 0.5240655541419983]\n", + "[0.5878430008888245, 0.5543540120124817, 0.5508448481559753, 0.5400313138961792]\n", + "[0.5295056104660034, 0.5609554648399353, 0.5488401651382446, 0.5678430795669556]\n", + "[0.404024213552475, 0.33723941445350647, 0.35575470328330994, 0.4287427067756653]\n", + "[0.5177942514419556, 0.5508176684379578, 0.5212600231170654, 0.542414665222168]\n", + "[0.5900000333786011, 0.5636842250823975, 0.537575364112854, 0.5408644080162048]\n", + "[0.5752209424972534, 0.5700016021728516, 0.5398236513137817, 0.48554542660713196]\n", + "[0.6006394624710083, 0.5274485945701599, 0.5468588471412659, 0.5394178628921509]\n", + "[0.5386679172515869, 0.5597147345542908, 0.5897659659385681, 0.5486234426498413]\n", + "[0.5398104786872864, 0.5357567667961121, 0.5426965355873108, 0.5370984673500061]\n", + "[0.5508906841278076, 0.5078740119934082, 0.5520981550216675, 0.5771598815917969]\n", + "[0.5570480227470398, 0.5423166155815125, 0.5537770390510559, 0.5272080302238464]\n", + "[0.52833092212677, 0.5366701483726501, 0.547942578792572, 0.5359132885932922]\n", + "[0.17080223560333252, 0.16577161848545074, 0.19982805848121643, 0.17579565942287445]\n", + "[0.1779136210680008, 0.16735225915908813, 0.12303526699542999, 0.18817304074764252]\n", + "[0.14717234671115875, 0.21395981311798096, 0.18567684292793274, 0.16946566104888916]\n", + "[0.14498013257980347, 0.21040405333042145, 0.20255199074745178, 0.14699463546276093]\n", + "[0.18128956854343414, 0.15889476239681244, 0.19071324169635773, 0.1391848623752594]\n", + "[0.16898863017559052, 0.16687873005867004, 0.1795710027217865, 0.21005913615226746]\n", + "[0.1765291541814804, 0.14925333857536316, 0.19410626590251923, 0.20747533440589905]\n", + "[0.19262120127677917, 0.19514042139053345, 0.16724924743175507, 0.21382790803909302]\n", + "[0.22112615406513214, 0.15942424535751343, 0.1782611906528473, 0.1632552295923233]\n", + "[0.1560848355293274, 0.16562849283218384, 0.15707603096961975, 0.15862378478050232]\n", + "[0.1731410026550293, 0.19102400541305542, 0.18537575006484985, 0.1855030357837677]\n", + "[0.21697178483009338, 0.18096274137496948, 0.16671504080295563, 0.18932422995567322]\n", + "[0.11742137372493744, 0.1704830378293991, 0.1853872686624527, 0.14944154024124146]\n", + "[0.18015731871128082, 0.1646864265203476, 0.17278730869293213, 0.1747991442680359]\n", + "[0.13713160157203674, 0.1523842215538025, 0.1699555218219757, 0.1590450257062912]\n", + "[0.1334162801504135, 0.13993947207927704, 0.20242202281951904, 0.16339367628097534]\n", + "[0.1888771802186966, 0.1951422095298767, 0.18040664494037628, 0.14888323843479156]\n", + "[0.2488444745540619, 0.1995331346988678, 0.2421235293149948, 0.23444242775440216]\n", + "[0.16803574562072754, 0.14943011105060577, 0.16299384832382202, 0.141444593667984]\n", + "[0.2007262408733368, 0.16184698045253754, 0.17366959154605865, 0.17254140973091125]\n", + "[0.2039344757795334, 0.20149804651737213, 0.2149716019630432, 0.17918837070465088]\n", + "[0.3899137079715729, 0.4314890503883362, 0.4081711173057556, 0.41111722588539124]\n", + "[0.47519251704216003, 0.5308398604393005, 0.4843696653842926, 0.448548287153244]\n", + "[0.5427568554878235, 0.5262169241905212, 0.5300717949867249, 0.5022801756858826]\n", + "[0.4256436824798584, 0.44026994705200195, 0.41293275356292725, 0.4093691110610962]\n", + "[0.4186669588088989, 0.40907934308052063, 0.4354701638221741, 0.4582296907901764]\n", + "[0.21383605897426605, 0.2098085880279541, 0.26845741271972656, 0.22983157634735107]\n", + "[0.5112521648406982, 0.5328330397605896, 0.5361864566802979, 0.522709846496582]\n", + "[0.26979413628578186, 0.26834234595298767, 0.2650061249732971, 0.2996424734592438]\n", + "[0.5368374586105347, 0.47326064109802246, 0.48061519861221313, 0.510142982006073]\n", + "[0.29349932074546814, 0.3445338010787964, 0.3357900381088257, 0.3504280149936676]\n", + "[0.47651705145835876, 0.5110699534416199, 0.4744502007961273, 0.45630207657814026]\n", + "[0.2715156376361847, 0.29446929693222046, 0.26076290011405945, 0.23599225282669067]\n", + "[0.40293917059898376, 0.3960026800632477, 0.36717790365219116, 0.4054220914840698]\n", + "[0.18236050009727478, 0.12523885071277618, 0.20636744797229767, 0.19334129989147186]\n", + "[0.3814469575881958, 0.3992263972759247, 0.37887853384017944, 0.3770933449268341]\n", + "[0.3007543981075287, 0.29191818833351135, 0.29078900814056396, 0.3271807134151459]\n", + "[0.3511352241039276, 0.3802725076675415, 0.37280869483947754, 0.42771172523498535]\n", + "[0.23615476489067078, 0.21268585324287415, 0.21697662770748138, 0.266005277633667]\n", + "[0.23899348080158234, 0.21649223566055298, 0.2165505588054657, 0.23256918787956238]\n", + "[0.21244098246097565, 0.20913583040237427, 0.20109930634498596, 0.1874091923236847]\n", + "[0.16398625075817108, 0.18579141795635223, 0.20676259696483612, 0.21078436076641083]\n", + "[0.3167850375175476, 0.33011066913604736, 0.35933718085289, 0.3336508572101593]\n", + "[0.1337529569864273, 0.1935262233018875, 0.15096062421798706, 0.16367056965827942]\n", + "[0.17453914880752563, 0.1829521507024765, 0.18814541399478912, 0.1666502207517624]\n", + "[0.1652323305606842, 0.13649815320968628, 0.13599549233913422, 0.17940211296081543]\n", + "[0.17881327867507935, 0.1988212615251541, 0.1869915872812271, 0.17977911233901978]\n", + "[0.1821410059928894, 0.17593564093112946, 0.15652890503406525, 0.12015802413225174]\n", + "[0.1652347892522812, 0.18992161750793457, 0.1714327335357666, 0.14811362326145172]\n", + "[0.17975042760372162, 0.17685569822788239, 0.18981130421161652, 0.1845853179693222]\n", + "[0.21045179665088654, 0.19396591186523438, 0.21890516579151154, 0.16869531571865082]\n", + "[0.15440884232521057, 0.14968036115169525, 0.15862324833869934, 0.1976587325334549]\n", + "[0.16837948560714722, 0.1682669222354889, 0.15624704957008362, 0.15887238085269928]\n", + "[0.15156564116477966, 0.20459750294685364, 0.125519260764122, 0.14287352561950684]\n", + "[0.6173445582389832, 0.6300624012947083, 0.634414792060852, 0.578159749507904]\n", + "[0.6489726305007935, 0.6373645663261414, 0.6370739340782166, 0.6037876009941101]\n", + "[0.60059654712677, 0.5723778009414673, 0.5748318433761597, 0.5776399374008179]\n", + "[0.46618184447288513, 0.48953527212142944, 0.46077781915664673, 0.4729772210121155]\n", + "[0.5853598117828369, 0.5837458372116089, 0.5745914578437805, 0.550523042678833]\n", + "[0.5983088612556458, 0.6296044588088989, 0.5958306193351746, 0.6292254328727722]\n", + "[0.4419054090976715, 0.4900778532028198, 0.41894134879112244, 0.4542573094367981]\n", + "[0.35378554463386536, 0.36960697174072266, 0.36524829268455505, 0.3447498083114624]\n", + "[0.6202552914619446, 0.6380592584609985, 0.6340171694755554, 0.6638298034667969]\n", + "[0.5571944713592529, 0.5222907066345215, 0.5456818342208862, 0.5545367002487183]\n", + "[0.32825013995170593, 0.3083762228488922, 0.29119038581848145, 0.3361850380897522]\n", + "[0.1741449236869812, 0.19967715442180634, 0.14964953064918518, 0.2102554887533188]\n", + "[0.1769813895225525, 0.155864417552948, 0.17736980319023132, 0.15132129192352295]\n", + "[0.4578869342803955, 0.5035484433174133, 0.37807536125183105, 0.42287972569465637]\n", + "[0.5692993402481079, 0.5225808024406433, 0.5487903952598572, 0.5461847186088562]\n", + "[0.5425010919570923, 0.539606511592865, 0.5477007031440735, 0.5374333262443542]\n", + "[0.14433051645755768, 0.1858523190021515, 0.16096220910549164, 0.18950843811035156]\n", + "[0.5823361277580261, 0.5399129986763, 0.5303688645362854, 0.5816665291786194]\n", + "[0.20726865530014038, 0.19943615794181824, 0.2374856024980545, 0.2391405999660492]\n", + "[0.218527153134346, 0.2225189357995987, 0.2257973998785019, 0.22625420987606049]\n", + "[0.5565446019172668, 0.562213659286499, 0.5446789264678955, 0.555781364440918]\n", + "[0.1574740707874298, 0.16986633837223053, 0.1689811646938324, 0.14438459277153015]\n", + "[0.11969353258609772, 0.09465540945529938, 0.12279362976551056, 0.1271195113658905]\n", + "[0.21587508916854858, 0.21790355443954468, 0.2114490419626236, 0.20883718132972717]\n", + "[0.1137084811925888, 0.12383078038692474, 0.11615331470966339, 0.10072840005159378]\n", + "[0.16850583255290985, 0.148385152220726, 0.16494810581207275, 0.14839698374271393]\n", + "[0.2202700674533844, 0.2555111050605774, 0.19818949699401855, 0.2202363759279251]\n", + "[0.3688987195491791, 0.39721575379371643, 0.3891999125480652, 0.3825508952140808]\n", + "[0.639016330242157, 0.580902636051178, 0.6175434589385986, 0.5986744165420532]\n", + "[0.570048987865448, 0.5697041153907776, 0.5706327557563782, 0.6016215085983276]\n", + "[0.6132323741912842, 0.635353147983551, 0.6222094297409058, 0.6542477607727051]\n", + "[0.6519944667816162, 0.6857295036315918, 0.6533635854721069, 0.6008595824241638]\n", + "[0.5777856111526489, 0.6341676712036133, 0.5396888256072998, 0.5806856155395508]\n", + "[0.5006046295166016, 0.5781247615814209, 0.531775712966919, 0.6017749309539795]\n", + "[0.6651590466499329, 0.6108796000480652, 0.6479169130325317, 0.6621736884117126]\n", + "[0.47384995222091675, 0.4630531072616577, 0.4782106876373291, 0.4619702398777008]\n", + "[0.5437846183776855, 0.5355260968208313, 0.5581222176551819, 0.5722149610519409]\n", + "[0.4290209114551544, 0.4249472916126251, 0.4073134660720825, 0.43357062339782715]\n", + "[0.35761377215385437, 0.3443347215652466, 0.34120094776153564, 0.33525076508522034]\n", + "[0.4468260407447815, 0.3857920467853546, 0.3973715901374817, 0.4377339482307434]\n", + "[0.2429698407649994, 0.23346877098083496, 0.2507297396659851, 0.17724353075027466]\n", + "[0.39898890256881714, 0.38844677805900574, 0.3765449821949005, 0.3708091080188751]\n", + "[0.40662169456481934, 0.43960827589035034, 0.3905976712703705, 0.35494494438171387]\n", + "[0.26000887155532837, 0.3015552759170532, 0.2990107834339142, 0.34377747774124146]\n", + "[0.38902467489242554, 0.35360705852508545, 0.3933226764202118, 0.3910622000694275]\n", + "[0.41258034110069275, 0.45401090383529663, 0.3830227851867676, 0.45328035950660706]\n", + "[0.33059385418891907, 0.36142686009407043, 0.33976635336875916, 0.34496721625328064]\n", + "[0.2933772802352905, 0.37710440158843994, 0.33338555693626404, 0.3342847228050232]\n", + "[0.2601569592952728, 0.2075115293264389, 0.20630939304828644, 0.22337573766708374]\n", + "[0.20780521631240845, 0.23646651208400726, 0.23190706968307495, 0.20806372165679932]\n", + "[0.13850949704647064, 0.15657107532024384, 0.19330424070358276, 0.13094834983348846]\n", + "[0.3213895857334137, 0.3036540150642395, 0.23722584545612335, 0.2994455397129059]\n", + "[0.2221851348876953, 0.1973925530910492, 0.22343510389328003, 0.2673660218715668]\n", + "[0.2380547821521759, 0.2162087857723236, 0.1682737171649933, 0.25370335578918457]\n", + "[0.5760018825531006, 0.5240329504013062, 0.5881703495979309, 0.5706976652145386]\n", + "[0.29469019174575806, 0.31086838245391846, 0.2919270098209381, 0.27521753311157227]\n", + "[0.2640227675437927, 0.3126618564128876, 0.2820109724998474, 0.3350977301597595]\n", + "[0.315572589635849, 0.31329020857810974, 0.2817062437534332, 0.2679811716079712]\n", + "[0.22822803258895874, 0.20931488275527954, 0.21880091726779938, 0.19636867940425873]\n", + "[0.22330302000045776, 0.18892242014408112, 0.229353129863739, 0.19052602350711823]\n", + "[0.5605900287628174, 0.5445897579193115, 0.5324180126190186, 0.548484742641449]\n", + "[0.5363239645957947, 0.5489433407783508, 0.5684791207313538, 0.560401439666748]\n", + "[0.5436628460884094, 0.5549091100692749, 0.5041965842247009, 0.5339285135269165]\n", + "[0.534780740737915, 0.5526962280273438, 0.5115000605583191, 0.5566447973251343]\n", + "[0.504235029220581, 0.5690205693244934, 0.5934760570526123, 0.5547019243240356]\n", + "[0.5427445769309998, 0.5054970979690552, 0.5706638097763062, 0.5464227795600891]\n", + "[0.5362388491630554, 0.5201148390769958, 0.5305893421173096, 0.5504509806632996]\n", + "[0.5820326805114746, 0.5701106190681458, 0.5713551044464111, 0.5233945846557617]\n", + "[0.4969288408756256, 0.5170060396194458, 0.5268831253051758, 0.5908597111701965]\n", + "[0.5527357459068298, 0.5412564277648926, 0.578862190246582, 0.5377610325813293]\n", + "[0.49920618534088135, 0.501446545124054, 0.5855357646942139, 0.5027299523353577]\n", + "[0.20854443311691284, 0.21462823450565338, 0.19166401028633118, 0.22379784286022186]\n", + "[0.24709680676460266, 0.20298495888710022, 0.19959497451782227, 0.2204866111278534]\n", + "[0.35092875361442566, 0.3328133225440979, 0.31074604392051697, 0.28836724162101746]\n", + "[0.4061393141746521, 0.37224191427230835, 0.39375296235084534, 0.4219433665275574]\n", + "[0.42122891545295715, 0.3655083477497101, 0.4450814723968506, 0.41527271270751953]\n", + "[0.26655590534210205, 0.3124070167541504, 0.3081620931625366, 0.28310638666152954]\n", + "[0.2524355947971344, 0.26256123185157776, 0.3167262673377991, 0.28969526290893555]\n", + "[0.25987517833709717, 0.2804371416568756, 0.3143613040447235, 0.28134602308273315]\n", + "[0.39360547065734863, 0.34524616599082947, 0.3195624053478241, 0.37303781509399414]\n", + "[0.1707538366317749, 0.22771592438220978, 0.19742509722709656, 0.217119038105011]\n", + "[0.31438252329826355, 0.31366124749183655, 0.33176955580711365, 0.33835849165916443]\n", + "[0.5039108395576477, 0.4701089859008789, 0.491474449634552, 0.4895871877670288]\n", + "[0.35855481028556824, 0.41666585206985474, 0.38739877939224243, 0.39078113436698914]\n", + "[0.20491862297058105, 0.27258139848709106, 0.22465577721595764, 0.2589295208454132]\n", + "[0.4530946910381317, 0.4270683526992798, 0.3900025486946106, 0.4491529166698456]\n", + "[0.409323126077652, 0.4100646376609802, 0.39824378490448, 0.3789687752723694]\n", + "[0.6173779964447021, 0.5871135592460632, 0.6004594564437866, 0.5821961164474487]\n", + "[0.3611227571964264, 0.36253368854522705, 0.3555218577384949, 0.34738072752952576]\n", + "[0.46417438983917236, 0.41446104645729065, 0.4882088601589203, 0.45587772130966187]\n", + "[0.6667863130569458, 0.6088525056838989, 0.6014383435249329, 0.6222897171974182]\n", + "[0.1640094816684723, 0.1488136202096939, 0.1625664234161377, 0.1605631709098816]\n", + "[0.42007309198379517, 0.40415114164352417, 0.36561185121536255, 0.38247039914131165]\n", + "[0.5354200005531311, 0.580783486366272, 0.5414780378341675, 0.5990230441093445]\n", + "[0.5426967740058899, 0.5338862538337708, 0.5562164187431335, 0.56451815366745]\n", + "[0.5897848010063171, 0.5575592517852783, 0.5852211713790894, 0.5288234949111938]\n", + "[0.5985958576202393, 0.516930341720581, 0.5509786605834961, 0.544909656047821]\n", + "[0.5653766393661499, 0.5287371873855591, 0.5594671368598938, 0.5336993336677551]\n", + "[0.5716898441314697, 0.5429826974868774, 0.5900682806968689, 0.569640576839447]\n", + "[0.5516592860221863, 0.5456334948539734, 0.5805465579032898, 0.587726354598999]\n", + "[0.5467911958694458, 0.5423818230628967, 0.5061016082763672, 0.5515545606613159]\n", + "[0.5671277046203613, 0.58363938331604, 0.5350008606910706, 0.5243927836418152]\n", + "[0.5887908935546875, 0.5688332319259644, 0.5489587783813477, 0.5252412557601929]\n", + "[0.5956388115882874, 0.5729244351387024, 0.5047939419746399, 0.5237305760383606]\n", + "[0.2930101454257965, 0.3043203353881836, 0.32066887617111206, 0.2989421784877777]\n", + "[0.31402358412742615, 0.2861384153366089, 0.36082443594932556, 0.30980151891708374]\n", + "[0.2136552929878235, 0.2278398871421814, 0.23234078288078308, 0.27041706442832947]\n", + "[0.3412272334098816, 0.3010484576225281, 0.35171929001808167, 0.34258541464805603]\n", + "[0.26443588733673096, 0.23662850260734558, 0.26048386096954346, 0.2925680875778198]\n", + "[0.44864422082901, 0.41009044647216797, 0.41589635610580444, 0.40577441453933716]\n", + "[0.3336213529109955, 0.35464099049568176, 0.38053080439567566, 0.3594242334365845]\n", + "[0.4478081464767456, 0.45131033658981323, 0.48941195011138916, 0.5136611461639404]\n", + "[0.25549283623695374, 0.2518124282360077, 0.30080917477607727, 0.3113519251346588]\n", + "[0.3806566894054413, 0.3656221628189087, 0.34925079345703125, 0.3914543092250824]\n", + "[0.34699028730392456, 0.31228911876678467, 0.3740074038505554, 0.38087528944015503]\n", + "[0.13475579023361206, 0.1609656661748886, 0.14625592529773712, 0.15853551030158997]\n", + "[0.13544531166553497, 0.15138226747512817, 0.1627020686864853, 0.11956963688135147]\n", + "[0.141676664352417, 0.15193505585193634, 0.13160809874534607, 0.129887193441391]\n", + "[0.15945780277252197, 0.18101972341537476, 0.1507575362920761, 0.1584230363368988]\n", + "[0.22728684544563293, 0.23045435547828674, 0.227140873670578, 0.22861066460609436]\n", + "[0.09300494939088821, 0.13058996200561523, 0.1058163121342659, 0.12320125102996826]\n", + "[0.25378936529159546, 0.2313934564590454, 0.22460080683231354, 0.23390062153339386]\n", + "[0.2226567417383194, 0.23608051240444183, 0.2155291885137558, 0.22586514055728912]\n", + "[0.24324476718902588, 0.24113556742668152, 0.23075224459171295, 0.2466423213481903]\n", + "[0.12780819833278656, 0.16523119807243347, 0.15189695358276367, 0.16889898478984833]\n", + "[0.11176538467407227, 0.12040294706821442, 0.12300027906894684, 0.09974265843629837]\n", + "[0.8988444805145264, 0.8767265677452087, 0.8886159062385559, 0.8582198023796082]\n", + "[0.20129817724227905, 0.17525680363178253, 0.14263835549354553, 0.16782766580581665]\n", + "[0.8975842595100403, 0.8996986746788025, 0.90296471118927, 0.8829167485237122]\n", + "[0.4524667263031006, 0.44907140731811523, 0.37618201971054077, 0.41665738821029663]\n", + "[0.7580394744873047, 0.761756181716919, 0.7869055271148682, 0.7734665274620056]\n", + "[0.43006667494773865, 0.4433993995189667, 0.4172323942184448, 0.4592708349227905]\n", + "[0.7969839572906494, 0.8353987336158752, 0.8001496195793152, 0.775249719619751]\n", + "[0.46600690484046936, 0.4394116699695587, 0.48479127883911133, 0.41839638352394104]\n", + "[0.33075451850891113, 0.32582297921180725, 0.32653453946113586, 0.2893574833869934]\n", + "[0.29272040724754333, 0.3486829698085785, 0.33250710368156433, 0.3580804169178009]\n", + "[0.1705455332994461, 0.15576975047588348, 0.1440066695213318, 0.14568458497524261]\n", + "[0.5205692052841187, 0.49133944511413574, 0.5017719864845276, 0.4407173693180084]\n", + "[0.6165405511856079, 0.5688122510910034, 0.6209086775779724, 0.5839269757270813]\n", + "[0.6318439841270447, 0.6555870175361633, 0.6501744985580444, 0.7022936940193176]\n", + "[0.40963825583457947, 0.4350312054157257, 0.385040819644928, 0.39079591631889343]\n", + "[0.36040061712265015, 0.3391980528831482, 0.3881814181804657, 0.35536989569664]\n", + "[0.8646655678749084, 0.8611944913864136, 0.8193760514259338, 0.8823584914207458]\n", + "[0.8195334672927856, 0.8091385364532471, 0.8305236101150513, 0.8338338136672974]\n", + "[0.8311596512794495, 0.8646216988563538, 0.8328144550323486, 0.8563387393951416]\n", + "[0.8476497530937195, 0.8559941649436951, 0.843530535697937, 0.8275117874145508]\n", + "[0.8310232162475586, 0.82709801197052, 0.8426880836486816, 0.8195741176605225]\n", + "[0.8348221778869629, 0.8216812610626221, 0.8233345150947571, 0.8635563850402832]\n", + "[0.8529993891716003, 0.8591911792755127, 0.8484093546867371, 0.8592589497566223]\n", + "[0.8533827662467957, 0.8561553359031677, 0.8643633127212524, 0.8339244723320007]\n", + "[0.8478177189826965, 0.8600773215293884, 0.849892795085907, 0.8678305745124817]\n", + "[0.8568964004516602, 0.836865246295929, 0.825615406036377, 0.8306716084480286]\n", + "[0.8651344776153564, 0.8357130885124207, 0.8538500070571899, 0.8438385725021362]\n", + "[0.9357517957687378, 0.9149256944656372, 0.9270290732383728, 0.9165109395980835]\n", + "[0.939823567867279, 0.9484714269638062, 0.940913736820221, 0.9444208145141602]\n", + "[0.8967694640159607, 0.9170666933059692, 0.9319761991500854, 0.8988052606582642]\n", + "[0.9338620901107788, 0.9328182339668274, 0.9052128791809082, 0.9195412993431091]\n", + "[0.9181177616119385, 0.9382613897323608, 0.9448491930961609, 0.9430537819862366]\n", + "[0.9247735738754272, 0.9321606755256653, 0.9350480437278748, 0.9297261834144592]\n", + "[0.9167693853378296, 0.9283742904663086, 0.9021844863891602, 0.9369478225708008]\n", + "[0.9294261336326599, 0.9270822405815125, 0.9320342540740967, 0.9352836012840271]\n", + "[0.9315201044082642, 0.9424670934677124, 0.9144814014434814, 0.9412990212440491]\n", + "[0.9066031575202942, 0.902377724647522, 0.9093276262283325, 0.9106940627098083]\n", + "[0.22916993498802185, 0.1801181435585022, 0.2138567417860031, 0.177606999874115]\n", + "[0.37291380763053894, 0.3812730312347412, 0.46853429079055786, 0.42654964327812195]\n", + "[0.45321735739707947, 0.48068395256996155, 0.551390528678894, 0.40989768505096436]\n", + "[0.48644012212753296, 0.5155877470970154, 0.5054299831390381, 0.48709848523139954]\n", + "[0.276652455329895, 0.3152129352092743, 0.2930300235748291, 0.259722501039505]\n", + "[0.3074791729450226, 0.2860659062862396, 0.2926025390625, 0.2602546215057373]\n", + "[0.5599260926246643, 0.5557781457901001, 0.5739657878875732, 0.5707554221153259]\n", + "[0.33995601534843445, 0.3370867371559143, 0.3387315273284912, 0.32823291420936584]\n", + "[0.49266648292541504, 0.3995625972747803, 0.4797665476799011, 0.4758116900920868]\n", + "[0.2811257243156433, 0.27802574634552, 0.2563271224498749, 0.2770971655845642]\n", + "[0.3392997086048126, 0.38258594274520874, 0.3659619688987732, 0.3416198790073395]\n", + "[0.2145054042339325, 0.1890731304883957, 0.2053615003824234, 0.25311124324798584]\n", + "[0.1709563434123993, 0.16106444597244263, 0.14577078819274902, 0.18389956653118134]\n", + "[0.13901901245117188, 0.14867065846920013, 0.18961168825626373, 0.1666664481163025]\n", + "[0.1958109587430954, 0.13585151731967926, 0.17218804359436035, 0.17426878213882446]\n", + "[0.22165516018867493, 0.17629843950271606, 0.19068004190921783, 0.20744183659553528]\n", + "[0.21003234386444092, 0.134365975856781, 0.17682470381259918, 0.16394993662834167]\n", + "[0.5798127055168152, 0.6454647779464722, 0.6126696467399597, 0.6492856740951538]\n", + "[0.5723706483840942, 0.6008117198944092, 0.6060099601745605, 0.5854029655456543]\n", + "[0.5972797274589539, 0.5564423203468323, 0.5513333082199097, 0.5433107614517212]\n", + "[0.570040762424469, 0.5696711540222168, 0.5329664349555969, 0.5358605980873108]\n", + "[0.5653871297836304, 0.5589734315872192, 0.5940196514129639, 0.5735810995101929]\n", + "[0.5285395979881287, 0.46682509779930115, 0.4683789312839508, 0.5058093070983887]\n", + "[0.5172543525695801, 0.4971064329147339, 0.5190826058387756, 0.5120217800140381]\n", + "[0.5067943334579468, 0.4839816093444824, 0.48379260301589966, 0.5126836895942688]\n", + "[0.49467381834983826, 0.4452625513076782, 0.5012198686599731, 0.465392529964447]\n", + "[0.5444346070289612, 0.49622443318367004, 0.5250588655471802, 0.4987984895706177]\n", + "[0.486095130443573, 0.5465059280395508, 0.5217715501785278, 0.5001745223999023]\n", + "[0.1625501811504364, 0.16446468234062195, 0.12799328565597534, 0.16592687368392944]\n", + "[0.2880110740661621, 0.28395840525627136, 0.2627565562725067, 0.2633848786354065]\n", + "[0.22216054797172546, 0.24432022869586945, 0.16912473738193512, 0.1893625259399414]\n", + "[0.18545326590538025, 0.1736876368522644, 0.18202513456344604, 0.16645482182502747]\n", + "[0.21018216013908386, 0.2674283981323242, 0.19542250037193298, 0.21295879781246185]\n", + "[0.14979436993598938, 0.14012058079242706, 0.1384928822517395, 0.1616348922252655]\n", + "[0.4741686284542084, 0.5185328125953674, 0.47083568572998047, 0.4906478822231293]\n", + "[0.26378700137138367, 0.2610059082508087, 0.2779087424278259, 0.3228255808353424]\n", + "[0.32283899188041687, 0.35214975476264954, 0.366671085357666, 0.36652693152427673]\n", + "[0.3126136362552643, 0.2886795103549957, 0.30153530836105347, 0.3019557297229767]\n", + "[0.49830561876296997, 0.4107967019081116, 0.43609631061553955, 0.42337286472320557]\n", + "[0.49016332626342773, 0.4777159094810486, 0.4936026632785797, 0.4661715030670166]\n", + "[0.5960850715637207, 0.6048015356063843, 0.6121054291725159, 0.6033084988594055]\n", + "[0.5877426266670227, 0.5420630574226379, 0.5844460725784302, 0.56428462266922]\n", + "[0.5464991331100464, 0.6240898370742798, 0.5736626982688904, 0.5845029354095459]\n", + "[0.5061851143836975, 0.48847904801368713, 0.5413695573806763, 0.5060191750526428]\n", + "[0.482861191034317, 0.451241135597229, 0.5032213926315308, 0.5180736780166626]\n", + "[0.5039432644844055, 0.508550763130188, 0.47397324442863464, 0.49391111731529236]\n", + "[0.5135473012924194, 0.49318861961364746, 0.5006699562072754, 0.5213403701782227]\n", + "[0.45246127247810364, 0.3763980567455292, 0.4174702763557434, 0.3743550777435303]\n", + "[0.6223769783973694, 0.5388070940971375, 0.5812295079231262, 0.6123805642127991]\n", + "[0.5981130599975586, 0.5391532182693481, 0.5548879504203796, 0.5933530330657959]\n", + "[1.0, 1.0, 0.9972826242446899, 1.0]\n", + "[0.9972221851348877, 0.9943064451217651, 1.0, 0.9973958730697632]\n", + "[0.9921910762786865, 0.994731605052948, 0.9839059710502625, 0.9889422059059143]\n", + "[0.2378263920545578, 0.2043643444776535, 0.20224477350711823, 0.21590577065944672]\n", + "[0.3198602497577667, 0.32729655504226685, 0.2902638614177704, 0.3210461437702179]\n", + "[0.6898206472396851, 0.6524002552032471, 0.6236535310745239, 0.6478779315948486]\n", + "[0.6556950807571411, 0.6681435704231262, 0.652508020401001, 0.6679421663284302]\n", + "[0.5597065091133118, 0.5672776699066162, 0.6276699304580688, 0.5628439784049988]\n", + "[0.41188380122184753, 0.37794923782348633, 0.3542231619358063, 0.33385926485061646]\n", + "[0.583044707775116, 0.5967210531234741, 0.5826520919799805, 0.6045235395431519]\n", + "[0.7381287217140198, 0.7221108078956604, 0.706657350063324, 0.7196210622787476]\n", + "[0.199849471449852, 0.22950617969036102, 0.16420812904834747, 0.24389705061912537]\n", + "[0.2240692377090454, 0.22001315653324127, 0.21174299716949463, 0.20539039373397827]\n", + "[0.2169441431760788, 0.22664034366607666, 0.23375952243804932, 0.2507663369178772]\n", + "[0.6803447008132935, 0.722801923751831, 0.7081354260444641, 0.742202639579773]\n", + "[0.13241440057754517, 0.14428892731666565, 0.18399764597415924, 0.1417580097913742]\n", + "[0.18111389875411987, 0.19404113292694092, 0.2220986783504486, 0.2230144739151001]\n", + "[0.15354733169078827, 0.13233840465545654, 0.14975906908512115, 0.11327514052391052]\n", + "[0.17305967211723328, 0.2007853090763092, 0.19262221455574036, 0.18790309131145477]\n", + "[0.16233837604522705, 0.18794119358062744, 0.1908244788646698, 0.19007375836372375]\n", + "[0.2364678531885147, 0.19290074706077576, 0.19720490276813507, 0.19017140567302704]\n", + "[0.22060444951057434, 0.19793328642845154, 0.2212926298379898, 0.18228453397750854]\n", + "[0.5264681577682495, 0.5089858174324036, 0.5009359121322632, 0.4577256143093109]\n", + "[0.22099626064300537, 0.23573093116283417, 0.22699111700057983, 0.23762886226177216]\n", + "[0.2352329045534134, 0.2528584897518158, 0.2859649658203125, 0.282816618680954]\n", + "[0.20993506908416748, 0.21018223464488983, 0.23557472229003906, 0.1815558820962906]\n", + "[0.19453072547912598, 0.1859963834285736, 0.20266574621200562, 0.19330084323883057]\n", + "[0.4256470501422882, 0.4445338547229767, 0.3706638813018799, 0.34011518955230713]\n", + "[0.15321359038352966, 0.21636180579662323, 0.17157918214797974, 0.1761344075202942]\n", + "[0.17989538609981537, 0.19477421045303345, 0.18459178507328033, 0.1907758265733719]\n", + "[0.21227256953716278, 0.1702633500099182, 0.18817180395126343, 0.1749923974275589]\n", + "[0.14952929317951202, 0.17978672683238983, 0.136826753616333, 0.1723487824201584]\n", + "[0.14945803582668304, 0.17191021144390106, 0.14510983228683472, 0.15701456367969513]\n", + "[0.15928475558757782, 0.13236258924007416, 0.17260165512561798, 0.1505468785762787]\n", + "[0.19314932823181152, 0.1368645429611206, 0.1678633689880371, 0.1376366764307022]\n", + "[0.18053340911865234, 0.17758850753307343, 0.14242126047611237, 0.1668153703212738]\n", + "[0.8731698393821716, 0.8773419260978699, 0.8831698298454285, 0.8902959823608398]\n", + "[0.9360494613647461, 0.8953782916069031, 0.9093002080917358, 0.9060671925544739]\n", + "[0.9294859170913696, 0.8972046375274658, 0.8860578536987305, 0.9097345471382141]\n", + "[0.8818464875221252, 0.9370940327644348, 0.890974223613739, 0.8985140919685364]\n", + "[0.7565783262252808, 0.7598506808280945, 0.7734696865081787, 0.7910006046295166]\n", + "[0.945888102054596, 0.9660912156105042, 0.9490392208099365, 0.9473122954368591]\n", + "[0.8998827934265137, 0.9053610563278198, 0.8817902207374573, 0.9213377833366394]\n", + "[0.7667077779769897, 0.7860621809959412, 0.7890945672988892, 0.8040843605995178]\n", + "[0.9154456853866577, 0.898796796798706, 0.8816291093826294, 0.8954327702522278]\n", + "[0.9423866271972656, 0.9254198670387268, 0.9191210865974426, 0.9492924809455872]\n", + "[0.8907848000526428, 0.9055244326591492, 0.911665678024292, 0.8978903889656067]\n", + "[0.5365024209022522, 0.5540175437927246, 0.5045114755630493, 0.5659880042076111]\n", + "[0.5230437517166138, 0.5554012060165405, 0.5418576598167419, 0.5080547332763672]\n", + "[0.5517988801002502, 0.4921911656856537, 0.47871866822242737, 0.4803915023803711]\n", + "[0.5555533170700073, 0.542616605758667, 0.5067634582519531, 0.48267510533332825]\n", + "[0.48655223846435547, 0.5605614185333252, 0.5302830338478088, 0.5297042727470398]\n", + "[0.16843445599079132, 0.13325661420822144, 0.18892624974250793, 0.138518825173378]\n", + "[0.16249382495880127, 0.14211899042129517, 0.1435001790523529, 0.11834695935249329]\n", + "[0.1532665193080902, 0.1830892115831375, 0.1769244223833084, 0.13643717765808105]\n", + "[0.16222213208675385, 0.15584293007850647, 0.14562059938907623, 0.18093837797641754]\n", + "[0.17106543481349945, 0.1608918011188507, 0.17588253319263458, 0.17406189441680908]\n", + "[0.40249255299568176, 0.3184380829334259, 0.3885747492313385, 0.3575528860092163]\n", + "[0.333194762468338, 0.3409343957901001, 0.3523479104042053, 0.321908563375473]\n", + "[0.2727566361427307, 0.27224987745285034, 0.2795030474662781, 0.2536389231681824]\n", + "[0.34159278869628906, 0.2859557867050171, 0.32435446977615356, 0.337955117225647]\n", + "[0.24073906242847443, 0.2637164890766144, 0.306645929813385, 0.2528916597366333]\n", + "[0.4357779920101166, 0.40842050313949585, 0.37524059414863586, 0.3694722652435303]\n", + "[0.3621957302093506, 0.33431100845336914, 0.29557403922080994, 0.3306683897972107]\n", + "[0.363495796918869, 0.34050166606903076, 0.415123850107193, 0.3318430483341217]\n", + "[0.3529161512851715, 0.35589438676834106, 0.31413352489471436, 0.3468209505081177]\n", + "[0.3090803027153015, 0.3007146120071411, 0.2529199719429016, 0.3075811266899109]\n", + "[0.4513017237186432, 0.42787665128707886, 0.43229159712791443, 0.37388876080513]\n", + "[0.4879911541938782, 0.3953808546066284, 0.4155937731266022, 0.3958500921726227]\n", + "[0.29059359431266785, 0.28724125027656555, 0.3010469377040863, 0.33091944456100464]\n", + "[0.29933345317840576, 0.32964253425598145, 0.3007338047027588, 0.33078864216804504]\n", + "[0.3515499234199524, 0.3622804582118988, 0.3489425778388977, 0.38984209299087524]\n", + "[0.25659283995628357, 0.2764699459075928, 0.2157929241657257, 0.2343956083059311]\n", + "[0.333680123090744, 0.330629825592041, 0.3190254271030426, 0.32337918877601624]\n", + "[0.29618197679519653, 0.3068375587463379, 0.3456779718399048, 0.3378867208957672]\n", + "[0.2619868814945221, 0.2719215154647827, 0.28364190459251404, 0.283732146024704]\n", + "[0.36460256576538086, 0.37309789657592773, 0.3478199243545532, 0.37441685795783997]\n", + "[0.3129064738750458, 0.3339011073112488, 0.3252512514591217, 0.30292272567749023]\n", + "[0.226057767868042, 0.26761704683303833, 0.30044063925743103, 0.2655641436576843]\n", + "[0.8802824020385742, 0.8913941979408264, 0.8894742131233215, 0.8965279459953308]\n", + "[0.8909060955047607, 0.8682093024253845, 0.8986014127731323, 0.9160521626472473]\n", + "[0.8795268535614014, 0.8868393301963806, 0.8849621415138245, 0.9103855490684509]\n", + "[0.9103091955184937, 0.9118852615356445, 0.8969337940216064, 0.885978639125824]\n", + "[0.8931512236595154, 0.8863504528999329, 0.9241602420806885, 0.8988170623779297]\n", + "[0.6950589418411255, 0.7063011527061462, 0.6743833422660828, 0.7247469425201416]\n", + "[0.7004349231719971, 0.7155591249465942, 0.6902393102645874, 0.7119943499565125]\n", + "[0.6367612481117249, 0.7082473039627075, 0.7069137692451477, 0.7060709595680237]\n", + "[0.7170795798301697, 0.7076148986816406, 0.6855387091636658, 0.6772434115409851]\n", + "[0.7035884261131287, 0.7224149107933044, 0.6924464702606201, 0.692158043384552]\n", + "[0.7596744298934937, 0.6736049652099609, 0.771704912185669, 0.6896759867668152]\n", + "[0.6790840029716492, 0.6961110234260559, 0.7565199136734009, 0.7025401592254639]\n", + "[0.7105629444122314, 0.7428897023200989, 0.7124846577644348, 0.7068705558776855]\n", + "[0.704169511795044, 0.6511058211326599, 0.7194879651069641, 0.700749397277832]\n", + "[0.7070057988166809, 0.7351886034011841, 0.7231253385543823, 0.6986342072486877]\n", + "[0.6969584226608276, 0.7040318250656128, 0.7235717177391052, 0.6991281509399414]\n", + "[0.5056329369544983, 0.5344760417938232, 0.5063521265983582, 0.5540481209754944]\n", + "[0.5564996004104614, 0.49745476245880127, 0.5517497658729553, 0.5343011617660522]\n", + "[0.599018394947052, 0.5016908645629883, 0.5696858167648315, 0.583730161190033]\n", + "[0.5536674857139587, 0.5883352160453796, 0.5767764449119568, 0.5593918561935425]\n", + "[0.5057318210601807, 0.5143800973892212, 0.5133634209632874, 0.5746718049049377]\n", + "[0.6767882108688354, 0.6443641185760498, 0.649334728717804, 0.6255730390548706]\n", + "[0.36771127581596375, 0.4155529737472534, 0.4121192693710327, 0.4022075831890106]\n", + "[0.5771282315254211, 0.5771951675415039, 0.5768747329711914, 0.5720481276512146]\n", + "[0.4546339213848114, 0.47328048944473267, 0.47020816802978516, 0.47187238931655884]\n", + "[0.513630747795105, 0.5217296481132507, 0.5991171002388, 0.5649173855781555]\n", + "[0.6351321339607239, 0.6275601387023926, 0.5802332162857056, 0.6466289758682251]\n", + "[0.6474611163139343, 0.6564434766769409, 0.6407902240753174, 0.6360457539558411]\n", + "[0.5482993125915527, 0.6157774329185486, 0.5042958855628967, 0.5786704421043396]\n", + "[0.4770508110523224, 0.4421982765197754, 0.4331972002983093, 0.4367392063140869]\n", + "[0.5811591148376465, 0.5676998496055603, 0.6064867377281189, 0.5549923181533813]\n", + "[0.5908255577087402, 0.5683808922767639, 0.6027607917785645, 0.5677582025527954]\n", + "[0.9862688779830933, 0.9917243719100952, 0.9838564395904541, 0.9808943867683411]\n", + "[0.9921910762786865, 1.0, 0.994623064994812, 0.9970930218696594]\n", + "[0.9889024496078491, 0.9946784377098083, 0.9883658289909363, 0.9923404455184937]\n", + "[0.9922806024551392, 0.9806466102600098, 0.9972222447395325, 0.9891071915626526]\n", + "[0.9856603741645813, 0.9866394400596619, 0.9941829442977905, 0.9813566207885742]\n", + "[0.9943813681602478, 0.9918452501296997, 0.9915404319763184, 0.9972826242446899]\n", + "[0.9813678860664368, 0.9943181872367859, 0.9861823916435242, 0.9824489951133728]\n", + "[0.9972826242446899, 0.9919007420539856, 0.9923404455184937, 0.9946711659431458]\n", + "[0.9809232950210571, 0.9944417476654053, 0.9867112040519714, 0.9941103458404541]\n", + "[0.9946179986000061, 0.9943152666091919, 1.0, 1.0]\n", + "[0.9916034936904907, 0.9921875, 0.9975489974021912, 0.9947894215583801]\n", + "[0.1779969483613968, 0.1532030999660492, 0.1716320812702179, 0.1599157750606537]\n", + "[0.5850784778594971, 0.5832352638244629, 0.5643899440765381, 0.5438711643218994]\n", + "[0.5455321073532104, 0.5256389379501343, 0.5146175622940063, 0.5640953779220581]\n", + "[0.5124130845069885, 0.5302363634109497, 0.6244341731071472, 0.5428485870361328]\n", + "[0.5755496621131897, 0.5670256018638611, 0.5692138671875, 0.5127224922180176]\n", + "[0.13251619040966034, 0.1926736980676651, 0.1749541312456131, 0.1366916447877884]\n", + "[0.49658429622650146, 0.5425853133201599, 0.5829471945762634, 0.5584033727645874]\n", + "[0.5724620819091797, 0.5856896638870239, 0.5766080617904663, 0.5183484554290771]\n", + "[0.5563507676124573, 0.5502983927726746, 0.5479875206947327, 0.5704476833343506]\n", + "[0.2028014063835144, 0.22238440811634064, 0.19922949373722076, 0.2381625473499298]\n", + "[0.5451091527938843, 0.5128293037414551, 0.577448844909668, 0.5401778817176819]\n", + "[0.1519339382648468, 0.14447666704654694, 0.17283126711845398, 0.12978434562683105]\n", + "[0.12243946641683578, 0.12667936086654663, 0.14343424141407013, 0.11483915895223618]\n", + "[0.15927362442016602, 0.18393297493457794, 0.1510326862335205, 0.18312248587608337]\n", + "[0.22177673876285553, 0.2138550579547882, 0.27178966999053955, 0.24503061175346375]\n", + "[0.16686290502548218, 0.15836752951145172, 0.11207549273967743, 0.12680405378341675]\n", + "[0.5824840664863586, 0.5539984107017517, 0.5871897339820862, 0.5798295736312866]\n", + "[0.5545316934585571, 0.47882235050201416, 0.4767104983329773, 0.4741213321685791]\n", + "[0.6113607287406921, 0.6591296792030334, 0.6732103228569031, 0.6599264144897461]\n", + "[0.5776857733726501, 0.6198816299438477, 0.6174883246421814, 0.6159986853599548]\n", + "[0.2966456115245819, 0.32433754205703735, 0.2869214713573456, 0.3348647356033325]\n", + "[0.5225576758384705, 0.6127334237098694, 0.5521805286407471, 0.6034778356552124]\n", + "[0.5941359400749207, 0.5428758859634399, 0.5873008966445923, 0.5947911739349365]\n", + "[0.6465576887130737, 0.6479828357696533, 0.6502694487571716, 0.6529678106307983]\n", + "[0.37187737226486206, 0.4223054349422455, 0.3987966775894165, 0.38524869084358215]\n", + "[0.46953916549682617, 0.5210675597190857, 0.5546244978904724, 0.5174113512039185]\n", + "[0.5441898107528687, 0.5692431926727295, 0.590403139591217, 0.5577265024185181]\n", + "[0.35712912678718567, 0.4118908941745758, 0.38311702013015747, 0.349901020526886]\n", + "[0.601865828037262, 0.6021016836166382, 0.5831784009933472, 0.5633824467658997]\n", + "[0.39807331562042236, 0.3645208775997162, 0.40022897720336914, 0.3691387474536896]\n", + "[0.5333817601203918, 0.5230693221092224, 0.5277984738349915, 0.5479103326797485]\n", + "[0.5576072931289673, 0.5478039383888245, 0.5476256012916565, 0.5876981616020203]\n", + "[0.9891075491905212, 0.9970930218696594, 1.0, 0.9949489831924438]\n", + "[0.9805915355682373, 0.9806442856788635, 0.9920039176940918, 0.983498215675354]\n", + "[0.9887512922286987, 1.0, 0.9940171241760254, 0.9946180582046509]\n", + "[0.9969512224197388, 0.991663932800293, 0.9920188784599304, 0.9946080446243286]\n", + "[0.9890047907829285, 1.0, 1.0, 0.9917328357696533]\n", + "[1.0, 0.9918403029441833, 0.9946784377098083, 0.9893403053283691]\n", + "[0.9972221851348877, 0.9894097447395325, 0.9917848706245422, 0.9915404319763184]\n", + "[0.9921420812606812, 0.9886877536773682, 0.9805998206138611, 0.9885642528533936]\n", + "[0.9897549748420715, 0.9886965751647949, 0.9878663420677185, 0.9944444894790649]\n", + "[0.9753862023353577, 0.9747419953346252, 0.9780740737915039, 0.9917848706245422]\n", + "[0.9944417476654053, 1.0, 1.0, 0.9919611215591431]\n", + "[0.46500933170318604, 0.4914398789405823, 0.4475492835044861, 0.5320005416870117]\n", + "[0.5162978172302246, 0.45948469638824463, 0.48758751153945923, 0.5131789445877075]\n", + "[0.458945095539093, 0.49497249722480774, 0.4208622872829437, 0.4276917576789856]\n", + "[0.5842344760894775, 0.6207934617996216, 0.5858869552612305, 0.577460765838623]\n", + "[0.4831527769565582, 0.4981441795825958, 0.46376848220825195, 0.5255184173583984]\n", + "[0.6265363693237305, 0.6263951659202576, 0.6129645109176636, 0.5621532797813416]\n", + "[0.5810480117797852, 0.5825831294059753, 0.5878673791885376, 0.5976311564445496]\n", + "[0.6350180506706238, 0.5893307328224182, 0.6018532514572144, 0.5680161714553833]\n", + "[0.5570814609527588, 0.5298275947570801, 0.5106574296951294, 0.531408429145813]\n", + "[0.5472989678382874, 0.5585882663726807, 0.5239700675010681, 0.5834457874298096]\n", + "[0.37042391300201416, 0.3509286642074585, 0.4195062518119812, 0.3633367717266083]\n", + "[0.5339482426643372, 0.5888503789901733, 0.6020010709762573, 0.5986399054527283]\n", + "[0.406623512506485, 0.46285396814346313, 0.46232590079307556, 0.4142008125782013]\n", + "[0.5272038578987122, 0.5380210876464844, 0.431729793548584, 0.48182523250579834]\n", + "[0.46822869777679443, 0.5072643160820007, 0.46744009852409363, 0.5441063642501831]\n", + "[0.6036171913146973, 0.5685938596725464, 0.5876322984695435, 0.5878504514694214]\n", + "[0.4897289276123047, 0.48685070872306824, 0.48538127541542053, 0.4683995246887207]\n", + "[0.4880242645740509, 0.45414409041404724, 0.5290774703025818, 0.48528778553009033]\n", + "[0.2418028563261032, 0.28291627764701843, 0.24079501628875732, 0.23506416380405426]\n", + "[0.17512176930904388, 0.1865733563899994, 0.16030824184417725, 0.1677151769399643]\n", + "[0.49493467807769775, 0.5193842649459839, 0.47786709666252136, 0.5026515126228333]\n", + "[0.2557409405708313, 0.29740941524505615, 0.23102453351020813, 0.2743894159793854]\n", + "[0.37824010848999023, 0.42711344361305237, 0.43971362709999084, 0.3897300362586975]\n", + "[0.5149479508399963, 0.5076347589492798, 0.5557575225830078, 0.4930569529533386]\n", + "[0.3894484341144562, 0.38480883836746216, 0.361287921667099, 0.3545302450656891]\n", + "[0.5095492601394653, 0.5019051432609558, 0.497763067483902, 0.48212936520576477]\n", + "[0.45021307468414307, 0.4307350814342499, 0.4469403624534607, 0.4333324432373047]\n", + "[0.6442582011222839, 0.6037278175354004, 0.552214503288269, 0.6379103660583496]\n", + "[0.5676758289337158, 0.6509047746658325, 0.5825300812721252, 0.5736042857170105]\n", + "[0.49481135606765747, 0.48617643117904663, 0.5139423608779907, 0.48574700951576233]\n", + "[0.47657087445259094, 0.5053133964538574, 0.5139268636703491, 0.48903799057006836]\n", + "[0.522824764251709, 0.6098288893699646, 0.5902299880981445, 0.6387841701507568]\n", + "[0.6456358432769775, 0.5560857653617859, 0.5960870385169983, 0.6203689575195312]\n", + "[0.5123195648193359, 0.5368341207504272, 0.5653741955757141, 0.5497425198554993]\n", + "[0.5570518374443054, 0.5545095205307007, 0.5248722434043884, 0.5228958129882812]\n", + "[0.5418295860290527, 0.5727968215942383, 0.5676828622817993, 0.5723127126693726]\n", + "[0.3323218822479248, 0.33998316526412964, 0.3285330533981323, 0.35626599192619324]\n", + "[0.4997960925102234, 0.5785213708877563, 0.5391274094581604, 0.524188220500946]\n", + "[0.5460493564605713, 0.5863230228424072, 0.5109071135520935, 0.5573418140411377]\n", + "[0.4070555865764618, 0.4266793727874756, 0.4003456234931946, 0.4251348376274109]\n", + "[0.4496060311794281, 0.4570268988609314, 0.43896007537841797, 0.4269455373287201]\n", + "[0.40624964237213135, 0.3851602375507355, 0.3897206783294678, 0.3969874382019043]\n", + "[0.38982075452804565, 0.40114057064056396, 0.3463030755519867, 0.3867591917514801]\n", + "[0.38968273997306824, 0.46793121099472046, 0.4045730233192444, 0.4491804540157318]\n", + "[0.5322775840759277, 0.5662574172019958, 0.5715247392654419, 0.5093752145767212]\n", + "[0.24834463000297546, 0.24806863069534302, 0.2746153175830841, 0.2527146339416504]\n", + "[0.6825201511383057, 0.696326732635498, 0.6965360641479492, 0.6607117652893066]\n", + "[0.3611234724521637, 0.3634498715400696, 0.36335989832878113, 0.3577800393104553]\n", + "[0.3759377896785736, 0.40097373723983765, 0.32232022285461426, 0.3420308828353882]\n", + "[0.22384752333164215, 0.21222679316997528, 0.20532743632793427, 0.17753759026527405]\n", + "[0.17847304046154022, 0.18720044195652008, 0.18240229785442352, 0.18579387664794922]\n", + "[0.1981511265039444, 0.19378715753555298, 0.16119450330734253, 0.20443406701087952]\n", + "[0.19589073956012726, 0.19683492183685303, 0.20248545706272125, 0.17427381873130798]\n", + "[0.20205236971378326, 0.1948920041322708, 0.19291502237319946, 0.19296346604824066]\n", + "[0.16634395718574524, 0.21349269151687622, 0.1920778453350067, 0.16748611629009247]\n", + "[0.16248391568660736, 0.2196314036846161, 0.19643323123455048, 0.17373690009117126]\n", + "[0.2002222090959549, 0.18947266042232513, 0.2257373332977295, 0.20426751673221588]\n", + "[0.19520404934883118, 0.21059949696063995, 0.17644783854484558, 0.1985931098461151]\n", + "[0.20355741679668427, 0.19553475081920624, 0.20565709471702576, 0.2384018898010254]\n", + "[0.17360523343086243, 0.21928994357585907, 0.18523432314395905, 0.18948304653167725]\n", + "[0.35044923424720764, 0.3879016041755676, 0.3868107795715332, 0.3814009428024292]\n", + "[0.16974881291389465, 0.17372500896453857, 0.1480947881937027, 0.17472057044506073]\n", + "[0.602232038974762, 0.5980339050292969, 0.5939375758171082, 0.6037248969078064]\n", + "[0.3040209114551544, 0.29706913232803345, 0.29212090373039246, 0.353878915309906]\n", + "[0.16154983639717102, 0.16701503098011017, 0.14711326360702515, 0.16078045964241028]\n", + "[0.4127526879310608, 0.40503284335136414, 0.4218215048313141, 0.37169888615608215]\n", + "[0.3356814384460449, 0.2655024528503418, 0.2548876106739044, 0.2521544098854065]\n", + "[0.2741418480873108, 0.3042428493499756, 0.2859564423561096, 0.33908629417419434]\n", + "[0.3327428698539734, 0.2890116274356842, 0.2950383424758911, 0.2783777117729187]\n", + "[0.3138105273246765, 0.285851389169693, 0.3092379868030548, 0.2855561375617981]\n", + "[0.3127065598964691, 0.26358091831207275, 0.27888262271881104, 0.287117063999176]\n", + "[0.45531952381134033, 0.4553217887878418, 0.4664289355278015, 0.47222256660461426]\n", + "[0.367414653301239, 0.39482569694519043, 0.3740004599094391, 0.3918570578098297]\n", + "[0.23581083118915558, 0.21570375561714172, 0.25772055983543396, 0.2693275511264801]\n", + "[0.4248524308204651, 0.46722084283828735, 0.4064990282058716, 0.44729745388031006]\n", + "[0.4469645321369171, 0.4325034022331238, 0.3763757050037384, 0.38949036598205566]\n", + "[0.4146279990673065, 0.40115025639533997, 0.41178882122039795, 0.4054596424102783]\n", + "[0.29229581356048584, 0.2755777835845947, 0.33111754059791565, 0.31523337960243225]\n", + "[0.38335317373275757, 0.40533167123794556, 0.45018965005874634, 0.4695035517215729]\n", + "[0.39338386058807373, 0.37446320056915283, 0.3962174654006958, 0.41623228788375854]\n", + "[0.23417247831821442, 0.21246293187141418, 0.21450990438461304, 0.21263544261455536]\n", + "[0.43323731422424316, 0.4286080002784729, 0.42813289165496826, 0.442340612411499]\n", + "[0.33741503953933716, 0.4086267650127411, 0.36791709065437317, 0.37771010398864746]\n", + "[0.5858022570610046, 0.5614931583404541, 0.5252290368080139, 0.5858176350593567]\n", + "[0.22496263682842255, 0.24976755678653717, 0.253399133682251, 0.23449163138866425]\n", + "[0.6749080419540405, 0.6849605441093445, 0.6648012399673462, 0.6941774487495422]\n", + "[0.36268511414527893, 0.36628153920173645, 0.3911491930484772, 0.4207235276699066]\n", + "[0.17630159854888916, 0.16157619655132294, 0.14115190505981445, 0.1597127914428711]\n", + "[0.14614932239055634, 0.21251839399337769, 0.1738128960132599, 0.14071449637413025]\n", + "[0.20681680738925934, 0.18671180307865143, 0.18817368149757385, 0.1870022565126419]\n", + "[0.20289765298366547, 0.1803862601518631, 0.13670219480991364, 0.16463416814804077]\n", + "[0.19409117102622986, 0.16262570023536682, 0.18820196390151978, 0.18254181742668152]\n", + "[0.17654067277908325, 0.17376869916915894, 0.1491297334432602, 0.13130372762680054]\n", + "[0.18467292189598083, 0.16316278278827667, 0.16108670830726624, 0.15862418711185455]\n", + "[0.1758686751127243, 0.1795017272233963, 0.19058677554130554, 0.1739579141139984]\n", + "[0.18620137870311737, 0.1606457382440567, 0.17490974068641663, 0.21082836389541626]\n", + "[0.14902396500110626, 0.15482108294963837, 0.2042682021856308, 0.18539589643478394]\n", + "[0.17448443174362183, 0.19811727106571198, 0.16617928445339203, 0.17724883556365967]\n", + "[0.44955307245254517, 0.4219752252101898, 0.450592964887619, 0.42972636222839355]\n", + "[0.5305359363555908, 0.4678540825843811, 0.4668722450733185, 0.4798678159713745]\n", + "[0.4709150791168213, 0.4569620192050934, 0.5254101157188416, 0.5207779407501221]\n", + "[0.5180439352989197, 0.5464425086975098, 0.49924197793006897, 0.5262299180030823]\n", + "[0.5070074200630188, 0.432484894990921, 0.49545222520828247, 0.4632265269756317]\n", + "[0.49523666501045227, 0.5284033417701721, 0.5427782535552979, 0.5077880620956421]\n", + "[0.537795901298523, 0.515701413154602, 0.52974534034729, 0.5137608647346497]\n", + "[0.18097315728664398, 0.19520580768585205, 0.17505018413066864, 0.1677207201719284]\n", + "[0.5281195640563965, 0.5406709313392639, 0.5187972187995911, 0.5332114696502686]\n", + "[0.4729275703430176, 0.4950355589389801, 0.5030839443206787, 0.48949891328811646]\n", + "[0.471031129360199, 0.41177117824554443, 0.4102635681629181, 0.4037637412548065]\n", + "[0.23333215713500977, 0.17082157731056213, 0.1956525593996048, 0.1740082949399948]\n", + "[0.9192359447479248, 0.9134119749069214, 0.944205105304718, 0.936284065246582]\n", + "[0.9370101690292358, 0.948634922504425, 0.9214635491371155, 0.9310263395309448]\n", + "[0.2265610247850418, 0.20805798470973969, 0.19422179460525513, 0.1833859384059906]\n", + "[0.9034285545349121, 0.9201929569244385, 0.9071398973464966, 0.9320214986801147]\n", + "[0.2315564900636673, 0.20702899992465973, 0.20603570342063904, 0.2138461470603943]\n", + "[0.18598321080207825, 0.1858559548854828, 0.19270797073841095, 0.18053877353668213]\n", + "[0.937307596206665, 0.9241341352462769, 0.9164308309555054, 0.9489268064498901]\n", + "[0.9276701211929321, 0.9023167490959167, 0.9293984174728394, 0.9272313117980957]\n", + "[0.9387732744216919, 0.9106531739234924, 0.9370452761650085, 0.9307697415351868]\n", + "[0.18834781646728516, 0.16972045600414276, 0.17605842649936676, 0.18446257710456848]\n", + "[0.5167049169540405, 0.48019498586654663, 0.5073748826980591, 0.5140661001205444]\n", + "[0.5906720757484436, 0.5418359041213989, 0.4943017363548279, 0.5159173607826233]\n", + "[0.5201537609100342, 0.5263587236404419, 0.569328248500824, 0.5558518171310425]\n", + "[0.5306956768035889, 0.4987088143825531, 0.451305091381073, 0.49316516518592834]\n", + "[0.5133399963378906, 0.5419414639472961, 0.5058075189590454, 0.5050432682037354]\n", + "[0.6102975606918335, 0.611631453037262, 0.6713646650314331, 0.6303166747093201]\n", + "[0.5000441670417786, 0.5138483047485352, 0.4926159977912903, 0.4643722474575043]\n", + "[0.4477996230125427, 0.5369375944137573, 0.49168407917022705, 0.4968116879463196]\n", + "[0.5367773175239563, 0.5104996562004089, 0.5387946367263794, 0.521736204624176]\n", + "[0.5348570346832275, 0.5117442011833191, 0.5052801370620728, 0.5100736618041992]\n", + "[0.5423856377601624, 0.5212403535842896, 0.5562138557434082, 0.5488297343254089]\n", + "[0.9695852398872375, 0.970544159412384, 0.989169716835022, 0.9760413765907288]\n", + "[0.9888084530830383, 0.9774526953697205, 0.9841673374176025, 0.9832927584648132]\n", + "[0.9891760349273682, 0.9863370656967163, 0.9885673522949219, 0.9756898880004883]\n", + "[0.9310305714607239, 0.9409078359603882, 0.8977689146995544, 0.9278131127357483]\n", + "[0.9887516498565674, 0.9807864427566528, 0.9943181872367859, 0.9731487035751343]\n", + "[0.9646406173706055, 0.9783110022544861, 0.9937343597412109, 0.9864503145217896]\n", + "[0.9948404431343079, 0.9839437007904053, 0.9798493385314941, 0.9886652231216431]\n", + "[0.9530503749847412, 0.9838966727256775, 0.9676559567451477, 0.9740720391273499]\n", + "[0.9804067611694336, 0.9818006753921509, 0.9834646582603455, 0.9829825162887573]\n", + "[0.9838703274726868, 0.9918181896209717, 0.9858438968658447, 0.9890403747558594]\n", + "[0.9859073162078857, 0.981221616268158, 0.9778075218200684, 0.980503261089325]\n", + "[0.5672802329063416, 0.571319580078125, 0.6069161891937256, 0.5756317377090454]\n", + "[0.5805308222770691, 0.5997139811515808, 0.6138482093811035, 0.5695542693138123]\n", + "[0.5436251163482666, 0.5319892764091492, 0.5092371702194214, 0.5474266409873962]\n", + "[0.681421160697937, 0.7656030654907227, 0.7001144886016846, 0.720562756061554]\n", + "[0.5809767842292786, 0.63540118932724, 0.6411747336387634, 0.6214786767959595]\n", + "[0.5949572920799255, 0.5904860496520996, 0.6297570466995239, 0.61180579662323]\n", + "[0.6200726628303528, 0.6259014010429382, 0.5743802785873413, 0.5954909324645996]\n", + "[0.5401842594146729, 0.6075001358985901, 0.5570221543312073, 0.5504134893417358]\n", + "[0.5713639259338379, 0.5562228560447693, 0.5674187541007996, 0.6071944832801819]\n", + "[0.5049683451652527, 0.5550225973129272, 0.5184404850006104, 0.535752534866333]\n", + "[0.6311668157577515, 0.6177121996879578, 0.5804747939109802, 0.6493633985519409]\n", + "[0.1370604783296585, 0.12498027831315994, 0.15573666989803314, 0.10952446609735489]\n", + "[0.138532355427742, 0.12396757304668427, 0.11627476662397385, 0.12169359624385834]\n", + "[0.11835983395576477, 0.11016078293323517, 0.13312417268753052, 0.1326799988746643]\n", + "[0.12899160385131836, 0.1223500594496727, 0.12955667078495026, 0.12779457867145538]\n", + "[0.11469784379005432, 0.11747273057699203, 0.14996878802776337, 0.12653090059757233]\n", + "[0.12729670107364655, 0.10920050740242004, 0.13442537188529968, 0.16971898078918457]\n", + "[0.13987495005130768, 0.14073412120342255, 0.1505778431892395, 0.14318056404590607]\n", + "[0.11289051175117493, 0.12312577664852142, 0.1428811252117157, 0.1464564949274063]\n", + "[0.14080898463726044, 0.11282616853713989, 0.11596660315990448, 0.15107542276382446]\n", + "[0.16596025228500366, 0.12794242799282074, 0.11523670703172684, 0.10265490412712097]\n", + "[0.12947964668273926, 0.10919009894132614, 0.1362982541322708, 0.11898089945316315]\n", + "[0.1853381097316742, 0.17838630080223083, 0.1618124395608902, 0.14302051067352295]\n", + "[0.1494421809911728, 0.17472346127033234, 0.2025686800479889, 0.1430414319038391]\n", + "[0.15234407782554626, 0.14039267599582672, 0.15798723697662354, 0.15318918228149414]\n", + "[0.14672082662582397, 0.1709463894367218, 0.17077256739139557, 0.13337108492851257]\n", + "[0.13968124985694885, 0.1270967572927475, 0.13958700001239777, 0.1751696616411209]\n", + "[0.6587210297584534, 0.6376182436943054, 0.6438229084014893, 0.6225584745407104]\n", + "[0.5287615060806274, 0.5567969083786011, 0.5547716617584229, 0.5737923383712769]\n", + "[0.6653149724006653, 0.5958787798881531, 0.5958506464958191, 0.6180334091186523]\n", + "[0.5920467972755432, 0.6278825402259827, 0.6308557987213135, 0.5773394703865051]\n", + "[0.5494296550750732, 0.545451283454895, 0.5270788669586182, 0.5071530342102051]\n", + "[0.5142431259155273, 0.5232718586921692, 0.4371962249279022, 0.5362277626991272]\n", + "[0.6304258108139038, 0.6279830932617188, 0.6450590491294861, 0.6165977716445923]\n", + "[0.6608977913856506, 0.6855406165122986, 0.6604673862457275, 0.6685435175895691]\n", + "[0.6402024030685425, 0.5963228940963745, 0.6426039338111877, 0.6146600246429443]\n", + "[0.6831663250923157, 0.6745325326919556, 0.7058874368667603, 0.6559637784957886]\n", + "[0.6364917755126953, 0.6429758071899414, 0.6280730366706848, 0.6484940052032471]\n", + "[0.4018634855747223, 0.3762083947658539, 0.34103259444236755, 0.3899286389350891]\n", + "[0.20538678765296936, 0.18682824075222015, 0.1634548306465149, 0.17107529938220978]\n", + "[0.25134459137916565, 0.24281932413578033, 0.2201838195323944, 0.26513949036598206]\n", + "[0.2952969968318939, 0.322726845741272, 0.281889945268631, 0.269929438829422]\n", + "[0.1891993284225464, 0.2116907685995102, 0.2081468105316162, 0.21264617145061493]\n", + "[0.14297136664390564, 0.19595152139663696, 0.1712660789489746, 0.1816321462392807]\n", + "[0.41425105929374695, 0.34373265504837036, 0.36251595616340637, 0.3502321243286133]\n", + "[0.41558215022087097, 0.31700795888900757, 0.35876739025115967, 0.3987767994403839]\n", + "[0.458972692489624, 0.5024721026420593, 0.4957505464553833, 0.4555339813232422]\n", + "[0.38619837164878845, 0.3437097668647766, 0.3746907413005829, 0.40330770611763]\n", + "[0.29864102602005005, 0.27246955037117004, 0.32025742530822754, 0.27213534712791443]\n", + "[0.5154101848602295, 0.508180558681488, 0.5086366534233093, 0.4732871353626251]\n", + "[0.5540045499801636, 0.5106492638587952, 0.5523333549499512, 0.5287688374519348]\n", + "[0.5691457986831665, 0.5355325937271118, 0.5354411602020264, 0.5138323307037354]\n", + "[0.5013092160224915, 0.5217230916023254, 0.5300324559211731, 0.5892863869667053]\n", + "[0.5278188586235046, 0.5127391815185547, 0.5249183177947998, 0.5334433317184448]\n", + "[0.5620406866073608, 0.5594744086265564, 0.5406179428100586, 0.5590275526046753]\n", + "[0.5131369829177856, 0.551658034324646, 0.5406644344329834, 0.5148928165435791]\n", + "[0.49835002422332764, 0.5071632266044617, 0.49475759267807007, 0.5010902285575867]\n", + "[0.554648756980896, 0.4918035864830017, 0.54837965965271, 0.5044622421264648]\n", + "[0.5291066765785217, 0.48596423864364624, 0.6314411163330078, 0.5028019547462463]\n", + "[0.5123323798179626, 0.5267902612686157, 0.549594521522522, 0.5865985155105591]\n", + "[0.1983059197664261, 0.18700078129768372, 0.17069001495838165, 0.2046491801738739]\n", + "[0.17577272653579712, 0.18225136399269104, 0.15964268147945404, 0.19940301775932312]\n", + "[0.20273667573928833, 0.1891435831785202, 0.17043255269527435, 0.26385143399238586]\n", + "[0.2067238986492157, 0.22543703019618988, 0.12259145081043243, 0.24712064862251282]\n", + "[0.2075405716896057, 0.19766181707382202, 0.21701201796531677, 0.19160373508930206]\n", + "[0.17700506746768951, 0.19580627977848053, 0.19175629317760468, 0.2590407133102417]\n", + "[0.195643812417984, 0.170163094997406, 0.23478423058986664, 0.2082013338804245]\n", + "[0.18568235635757446, 0.22533759474754333, 0.193881094455719, 0.1781449317932129]\n", + "[0.16742072999477386, 0.21292178332805634, 0.1945132315158844, 0.13436126708984375]\n", + "[0.1779923141002655, 0.25449877977371216, 0.23710300028324127, 0.15077117085456848]\n", + "[0.18521955609321594, 0.2026718258857727, 0.17472060024738312, 0.24239803850650787]\n", + "[0.24548952281475067, 0.2322087287902832, 0.21893204748630524, 0.20397786796092987]\n", + "[0.15118525922298431, 0.17095360159873962, 0.1854417324066162, 0.13501544296741486]\n", + "[0.5119417309761047, 0.5166919231414795, 0.5354651808738708, 0.5463559627532959]\n", + "[0.5807090401649475, 0.5486481189727783, 0.5223852396011353, 0.5736076831817627]\n", + "[0.18123239278793335, 0.17108778655529022, 0.18150636553764343, 0.1935560405254364]\n", + "[0.5528778433799744, 0.5993000864982605, 0.5371423363685608, 0.5728210806846619]\n", + "[0.5681849718093872, 0.5451213717460632, 0.5251287221908569, 0.558870792388916]\n", + "[0.5883908271789551, 0.5767543315887451, 0.5325764417648315, 0.5612393617630005]\n", + "[0.5179531574249268, 0.5704665184020996, 0.5675531029701233, 0.58977872133255]\n", + "[0.18581674993038177, 0.23159964382648468, 0.2279452532529831, 0.19459401071071625]\n", + "[0.5567153096199036, 0.47853872179985046, 0.5369589924812317, 0.54628586769104]\n", + "[0.8636698126792908, 0.906982421875, 0.9040016531944275, 0.8930594325065613]\n", + "[0.8919080495834351, 0.889987051486969, 0.8747735023498535, 0.8855018615722656]\n", + "[0.9058740735054016, 0.90986567735672, 0.9077056646347046, 0.900760293006897]\n", + "[0.917161226272583, 0.8628448843955994, 0.855110228061676, 0.8975409865379333]\n", + "[0.8734205961227417, 0.8633558750152588, 0.8886438608169556, 0.8616487979888916]\n", + "[0.869051992893219, 0.8735670447349548, 0.9076040387153625, 0.8881593942642212]\n", + "[0.8774687647819519, 0.8628644347190857, 0.9184064865112305, 0.8727876543998718]\n", + "[0.8801656365394592, 0.8734206557273865, 0.8449739813804626, 0.866448163986206]\n", + "[0.8711194396018982, 0.9301214218139648, 0.8760432600975037, 0.8756662011146545]\n", + "[0.8859469294548035, 0.9013054370880127, 0.8720640540122986, 0.891425371170044]\n", + "[0.8721008896827698, 0.8542460203170776, 0.8889879584312439, 0.8677014708518982]\n", + "[0.20529711246490479, 0.19798822700977325, 0.23439542949199677, 0.1989927887916565]\n", + "[0.4495600163936615, 0.45997676253318787, 0.4848133325576782, 0.44531646370887756]\n", + "[0.23671236634254456, 0.2299003154039383, 0.23545998334884644, 0.23136240243911743]\n", + "[0.1835821568965912, 0.15734566748142242, 0.1465516835451126, 0.1819210946559906]\n", + "[0.6987021565437317, 0.7072276473045349, 0.7208706140518188, 0.7515268921852112]\n", + "[0.2538081407546997, 0.30032554268836975, 0.30790975689888, 0.2928640842437744]\n", + "[0.21469154953956604, 0.22306954860687256, 0.24432724714279175, 0.20595379173755646]\n", + "[0.20433582365512848, 0.20403264462947845, 0.21363431215286255, 0.22672908008098602]\n", + "[0.2039165198802948, 0.24187171459197998, 0.1886136680841446, 0.23620282113552094]\n", + "[0.7489367127418518, 0.7259067893028259, 0.7578482627868652, 0.7239147424697876]\n", + "[0.3023449778556824, 0.32029128074645996, 0.3027193248271942, 0.2724698483943939]\n", + "[0.859354555606842, 0.8522618412971497, 0.8331282734870911, 0.8385887145996094]\n", + "[0.9236099123954773, 0.9094927310943604, 0.9470182657241821, 0.9447970986366272]\n", + "[0.8531898260116577, 0.8399633169174194, 0.841689944267273, 0.856678307056427]\n", + "[0.8046636581420898, 0.8273375034332275, 0.8308625817298889, 0.848789393901825]\n", + "[0.8294765949249268, 0.8581406474113464, 0.8586785793304443, 0.842932939529419]\n", + "[0.19405555725097656, 0.18404142558574677, 0.17071305215358734, 0.14727313816547394]\n", + "[0.21458423137664795, 0.17408080399036407, 0.18605095148086548, 0.16632148623466492]\n", + "[0.15758593380451202, 0.16866809129714966, 0.15111304819583893, 0.19357411563396454]\n", + "[0.24095186591148376, 0.15882638096809387, 0.1780734658241272, 0.17505916953086853]\n", + "[0.15951257944107056, 0.16715176403522491, 0.1886644810438156, 0.20637047290802002]\n", + "[0.19659891724586487, 0.20455119013786316, 0.18792347609996796, 0.1737504005432129]\n", + "[0.1810588240623474, 0.15773943066596985, 0.1686052829027176, 0.17395487427711487]\n", + "[0.17963731288909912, 0.1847756952047348, 0.16673851013183594, 0.18162532150745392]\n", + "[0.18984580039978027, 0.2137180119752884, 0.21403488516807556, 0.1814786046743393]\n", + "[0.17976665496826172, 0.1914798468351364, 0.17016325891017914, 0.15368227660655975]\n", + "[0.21772444248199463, 0.2048191875219345, 0.16668321192264557, 0.2168203592300415]\n", + "[0.3332684636116028, 0.34091174602508545, 0.34559720754623413, 0.3561439514160156]\n", + "[0.589356005191803, 0.571052610874176, 0.6112043261528015, 0.5607513785362244]\n", + "[0.5032812356948853, 0.5321933031082153, 0.5182418823242188, 0.5332533717155457]\n", + "[0.5775566101074219, 0.625847339630127, 0.6210845112800598, 0.5996325612068176]\n", + "[0.5575626492500305, 0.5971653461456299, 0.5750426054000854, 0.5677098035812378]\n", + "[0.5018004179000854, 0.4907350540161133, 0.4940037727355957, 0.534243106842041]\n", + "[0.3990441560745239, 0.44427797198295593, 0.4061185121536255, 0.4027080535888672]\n", + "[0.6056810617446899, 0.5945626497268677, 0.6168962717056274, 0.5899662375450134]\n", + "[0.5196764469146729, 0.5434293746948242, 0.5470211505889893, 0.5207358002662659]\n", + "[0.5967807769775391, 0.5980686545372009, 0.5787041187286377, 0.6683768033981323]\n", + "[0.5978260636329651, 0.6093107461929321, 0.5943037867546082, 0.6351310610771179]\n", + "[0.21571768820285797, 0.22379595041275024, 0.24781668186187744, 0.22515130043029785]\n", + "[0.6803324222564697, 0.678210437297821, 0.646584689617157, 0.6579300761222839]\n", + "[0.22873084247112274, 0.2352767288684845, 0.2081761211156845, 0.22310608625411987]\n", + "[0.17055125534534454, 0.166579470038414, 0.12470217794179916, 0.16253840923309326]\n", + "[0.32323014736175537, 0.33549708127975464, 0.28228503465652466, 0.29276043176651]\n", + "[0.6758255958557129, 0.6604371070861816, 0.6192731261253357, 0.6075178980827332]\n", + "[0.1810828000307083, 0.13752758502960205, 0.15090636909008026, 0.1183551698923111]\n", + "[0.287048876285553, 0.2880138158798218, 0.3205200135707855, 0.32254698872566223]\n", + "[0.7150052189826965, 0.6628517508506775, 0.6577118635177612, 0.7355443239212036]\n", + "[0.15866471827030182, 0.16870200634002686, 0.19665472209453583, 0.15390098094940186]\n", + "[0.2018602043390274, 0.24494370818138123, 0.20854514837265015, 0.23652265965938568]\n", + "[0.6958839297294617, 0.663566529750824, 0.6850076913833618, 0.7040706276893616]\n", + "[0.675275981426239, 0.7010378241539001, 0.7081956267356873, 0.6770294904708862]\n", + "[0.6385555267333984, 0.708948016166687, 0.6740286350250244, 0.6671831607818604]\n", + "[0.6872979402542114, 0.6698611378669739, 0.6708796620368958, 0.6846760511398315]\n", + "[0.6804494857788086, 0.6701828241348267, 0.6768168210983276, 0.6866488456726074]\n", + "[0.6955870985984802, 0.7133448719978333, 0.6390421390533447, 0.6782671809196472]\n", + "[0.6992404460906982, 0.653233528137207, 0.7270307540893555, 0.7482321262359619]\n", + "[0.6881547570228577, 0.6480172872543335, 0.6731046438217163, 0.7011874318122864]\n", + "[0.6700115203857422, 0.6752497553825378, 0.7141890525817871, 0.6578625440597534]\n", + "[0.6466787457466125, 0.7392228245735168, 0.7241322994232178, 0.6787831783294678]\n", + "[0.7160929441452026, 0.7277641296386719, 0.7034680843353271, 0.660893440246582]\n", + "[0.5549331903457642, 0.5546978712081909, 0.6120264530181885, 0.6038386821746826]\n", + "[0.5636744499206543, 0.5271506309509277, 0.5708939433097839, 0.5306878089904785]\n", + "[0.6008190512657166, 0.554044246673584, 0.5473138689994812, 0.5278812050819397]\n", + "[0.5659165978431702, 0.49582135677337646, 0.5354229211807251, 0.5539120435714722]\n", + "[0.5393257141113281, 0.5609476566314697, 0.5628387331962585, 0.5759371519088745]\n", + "[0.1470312774181366, 0.14904676377773285, 0.1770259439945221, 0.1765967458486557]\n", + "[0.28812551498413086, 0.2987174689769745, 0.292836457490921, 0.2903904616832733]\n", + "[0.2348979115486145, 0.3357924222946167, 0.24528303742408752, 0.2538258731365204]\n", + "[0.20656439661979675, 0.26900869607925415, 0.2439088672399521, 0.2158714234828949]\n", + "[0.21683767437934875, 0.2037140429019928, 0.21527794003486633, 0.20306852459907532]\n", + "[0.13566268980503082, 0.1802448183298111, 0.1623164713382721, 0.1445857435464859]\n", + "[0.6675917506217957, 0.6487544178962708, 0.6496625542640686, 0.6461594104766846]\n", + "[0.3322437107563019, 0.22781974077224731, 0.2844553589820862, 0.325034499168396]\n", + "[0.28530821204185486, 0.31963393092155457, 0.27261054515838623, 0.26081275939941406]\n", + "[0.27483272552490234, 0.2308560311794281, 0.3010435104370117, 0.2873569130897522]\n", + "[0.2958965599536896, 0.26040709018707275, 0.2554693818092346, 0.27188682556152344]\n", + "[0.5399876236915588, 0.4843614995479584, 0.5546380281448364, 0.5303751230239868]\n", + "[0.5237781405448914, 0.562153160572052, 0.5545968413352966, 0.5033699870109558]\n", + "[0.4855792224407196, 0.5481693744659424, 0.539164125919342, 0.532084584236145]\n", + "[0.3750198483467102, 0.38631322979927063, 0.4249315559864044, 0.3870617151260376]\n", + "[0.38903701305389404, 0.44503912329673767, 0.4565918445587158, 0.4027019143104553]\n", + "[0.566161572933197, 0.5238224267959595, 0.5524937510490417, 0.5767502784729004]\n", + "[0.6033949255943298, 0.5688158273696899, 0.5605215430259705, 0.5149158835411072]\n", + "[0.523422122001648, 0.555103063583374, 0.5428906679153442, 0.5237385630607605]\n", + "[0.5889305472373962, 0.556480884552002, 0.5150783061981201, 0.5394603610038757]\n", + "[0.521708071231842, 0.5522494316101074, 0.5472978353500366, 0.5166113376617432]\n", + "[0.5150272250175476, 0.5631147027015686, 0.5414884090423584, 0.5372908115386963]\n", + "[0.2395191341638565, 0.18579143285751343, 0.21470525860786438, 0.160404235124588]\n", + "[0.1464104950428009, 0.16131813824176788, 0.1762561798095703, 0.15636581182479858]\n", + "[0.13546507060527802, 0.16651558876037598, 0.15069150924682617, 0.14897695183753967]\n", + "[0.1423400342464447, 0.1752057522535324, 0.20343081653118134, 0.1759948432445526]\n", + "[0.17175127565860748, 0.15531927347183228, 0.16272129118442535, 0.15563979744911194]\n", + "[0.6095994710922241, 0.5590405464172363, 0.5947403311729431, 0.5827829241752625]\n", + "[0.5666872262954712, 0.591179370880127, 0.5998321771621704, 0.5402023792266846]\n", + "[0.5733839869499207, 0.5169565677642822, 0.4715801179409027, 0.44449329376220703]\n", + "[0.5040221214294434, 0.5522789359092712, 0.5263871550559998, 0.535244882106781]\n", + "[0.5559254288673401, 0.5692257881164551, 0.5689511895179749, 0.5984407067298889]\n", + "[0.5223648548126221, 0.48453599214553833, 0.5401231050491333, 0.4967089891433716]\n", + "[0.5853075981140137, 0.5863749384880066, 0.5712490677833557, 0.5993373990058899]\n", + "[0.5726694464683533, 0.6272586584091187, 0.5922731161117554, 0.6298856735229492]\n", + "[0.5356706976890564, 0.6284608244895935, 0.6048427820205688, 0.5648183822631836]\n", + "[0.45549508929252625, 0.4309462606906891, 0.40616267919540405, 0.38765671849250793]\n", + "[0.5661135315895081, 0.5261625647544861, 0.5461295247077942, 0.5427936911582947]\n", + "[0.2624494433403015, 0.2820022702217102, 0.30099594593048096, 0.2676658034324646]\n", + "[0.44900959730148315, 0.43484216928482056, 0.45798933506011963, 0.4837414622306824]\n", + "[0.4659176766872406, 0.46174535155296326, 0.4560643434524536, 0.48563218116760254]\n", + "[0.45789405703544617, 0.4376157522201538, 0.4856286346912384, 0.4608084559440613]\n", + "[0.567511796951294, 0.539896547794342, 0.4960452616214752, 0.5382461547851562]\n", + "[0.4749460518360138, 0.45919233560562134, 0.4788869321346283, 0.49916335940361023]\n", + "[0.43133261799812317, 0.4780387282371521, 0.4442533850669861, 0.46436214447021484]\n", + "[0.42465904355049133, 0.5052002668380737, 0.442501038312912, 0.45863232016563416]\n", + "[0.2903463840484619, 0.3239131569862366, 0.32504886388778687, 0.3007064163684845]\n", + "[0.4685976505279541, 0.5005199909210205, 0.5022084712982178, 0.4816812574863434]\n", + "[0.4855733811855316, 0.4935225546360016, 0.45843932032585144, 0.47386789321899414]\n", + "[0.22753480076789856, 0.1950855553150177, 0.194936141371727, 0.19567804038524628]\n", + "[0.15970319509506226, 0.11982917040586472, 0.11838836967945099, 0.14906209707260132]\n", + "[0.15293411910533905, 0.21239006519317627, 0.11957044899463654, 0.1512831747531891]\n", + "[0.14135226607322693, 0.17119772732257843, 0.15392526984214783, 0.15440821647644043]\n", + "[0.16434893012046814, 0.15245036780834198, 0.16173513233661652, 0.1411338448524475]\n", + "[0.15427353978157043, 0.17885829508304596, 0.1703585833311081, 0.15158367156982422]\n", + "[0.19060876965522766, 0.22989925742149353, 0.22506269812583923, 0.231380894780159]\n", + "[0.21800333261489868, 0.24840079247951508, 0.1801736056804657, 0.20171701908111572]\n", + "[0.18182942271232605, 0.1715852916240692, 0.16101308166980743, 0.12749715149402618]\n", + "[0.23174817860126495, 0.19705799221992493, 0.19222880899906158, 0.2499924749135971]\n", + "[0.15522712469100952, 0.13375897705554962, 0.17194722592830658, 0.16097351908683777]\n", + "[0.24693767726421356, 0.25391140580177307, 0.24020512402057648, 0.21546535193920135]\n", + "[0.24935445189476013, 0.2318301498889923, 0.2870047390460968, 0.2509588897228241]\n", + "[0.17751504480838776, 0.15863797068595886, 0.15713149309158325, 0.18823489546775818]\n", + "[0.21617287397384644, 0.1882021576166153, 0.18355290591716766, 0.20105241239070892]\n", + "[0.13731220364570618, 0.18581514060497284, 0.16166990995407104, 0.15946801006793976]\n", + "[0.15087531507015228, 0.21205571293830872, 0.1449490487575531, 0.17629081010818481]\n", + "[0.20905724167823792, 0.22807732224464417, 0.20171883702278137, 0.21888655424118042]\n", + "[0.14860683679580688, 0.15124957263469696, 0.14170433580875397, 0.1423523873090744]\n", + "[0.15770703554153442, 0.1589660495519638, 0.163918599486351, 0.18537117540836334]\n", + "[0.23120254278182983, 0.23664721846580505, 0.22869530320167542, 0.2322956770658493]\n", + "[0.20927086472511292, 0.21971318125724792, 0.20323272049427032, 0.23439128696918488]\n", + "[0.18854615092277527, 0.22056381404399872, 0.21554307639598846, 0.18517129123210907]\n", + "[0.22283965349197388, 0.21383872628211975, 0.19660571217536926, 0.18774907290935516]\n", + "[0.1852933168411255, 0.1588038206100464, 0.17796699702739716, 0.1828279048204422]\n", + "[0.17894522845745087, 0.23906849324703217, 0.23876479268074036, 0.19074223935604095]\n", + "[0.21179832518100739, 0.2678285837173462, 0.2620624899864197, 0.22514784336090088]\n", + "[0.6334270238876343, 0.6512506008148193, 0.6167107820510864, 0.6053062081336975]\n", + "[0.33414000272750854, 0.3656195104122162, 0.3451938033103943, 0.3782472014427185]\n", + "[0.6534910202026367, 0.6325883865356445, 0.6660740375518799, 0.5939013361930847]\n", + "[0.6182404160499573, 0.5464165806770325, 0.5406248569488525, 0.604877233505249]\n", + "[0.5145986080169678, 0.554455578327179, 0.48409903049468994, 0.5620911121368408]\n", + "[0.2717435956001282, 0.2942172884941101, 0.3082844316959381, 0.2647272050380707]\n", + "[0.3641289174556732, 0.32904666662216187, 0.28534039855003357, 0.29230761528015137]\n", + "[0.43178799748420715, 0.40203729271888733, 0.42988571524620056, 0.3974030315876007]\n", + "[0.3595636785030365, 0.3724488317966461, 0.37727466225624084, 0.3718918263912201]\n", + "[0.25403162837028503, 0.25167256593704224, 0.19151955842971802, 0.24478115141391754]\n", + "[0.2732153832912445, 0.2443067729473114, 0.30353882908821106, 0.29297807812690735]\n", + "[0.3435596823692322, 0.3886507451534271, 0.3850426971912384, 0.41905027627944946]\n", + "[0.3314608037471771, 0.3574351370334625, 0.3379332721233368, 0.3194480538368225]\n", + "[0.3670843839645386, 0.3499924838542938, 0.3336189091205597, 0.29069027304649353]\n", + "[0.3443344831466675, 0.307458758354187, 0.30399563908576965, 0.29404643177986145]\n", + "[0.39310866594314575, 0.3628355860710144, 0.38164567947387695, 0.36860954761505127]\n", + "[0.19902294874191284, 0.1955779641866684, 0.211146742105484, 0.20996873080730438]\n", + "[0.2560058534145355, 0.2948959171772003, 0.23927277326583862, 0.28331196308135986]\n", + "[0.2289261519908905, 0.20696796476840973, 0.21648219227790833, 0.25028109550476074]\n", + "[0.48597466945648193, 0.48179906606674194, 0.4473668336868286, 0.47888368368148804]\n", + "[0.4110370874404907, 0.44067978858947754, 0.4142770767211914, 0.4722001850605011]\n", + "[0.20846153795719147, 0.1675061136484146, 0.19879081845283508, 0.18206855654716492]\n", + "[0.12247098237276077, 0.17756368219852448, 0.182663694024086, 0.16020503640174866]\n", + "[0.19251489639282227, 0.18984755873680115, 0.17501488327980042, 0.2085462212562561]\n", + "[0.40016451478004456, 0.3602452874183655, 0.40277576446533203, 0.4248808026313782]\n", + "[0.2643771767616272, 0.22615844011306763, 0.23252354562282562, 0.2679908275604248]\n", + "[0.18575419485569, 0.2118600755929947, 0.22516465187072754, 0.2039402723312378]\n", + "[0.8722856044769287, 0.872950553894043, 0.8726280927658081, 0.9016944169998169]\n", + "[0.9213205575942993, 0.8786400556564331, 0.9214863777160645, 0.9005213975906372]\n", + "[0.8638033866882324, 0.9030575752258301, 0.9112960696220398, 0.8812534213066101]\n", + "[0.8928865790367126, 0.9276493191719055, 0.8992345929145813, 0.9186562895774841]\n", + "[0.9170417785644531, 0.8873141407966614, 0.8883963227272034, 0.8821597695350647]\n", + "[0.9464544057846069, 0.9237424731254578, 0.9031725525856018, 0.899529755115509]\n", + "[0.9133948087692261, 0.8837546110153198, 0.8916467428207397, 0.9119436144828796]\n", + "[0.7907426357269287, 0.8338562250137329, 0.7944183349609375, 0.8088672757148743]\n", + "[0.9086328148841858, 0.9165744185447693, 0.8787844181060791, 0.9132030606269836]\n", + "[0.8981491327285767, 0.9213838577270508, 0.9169763326644897, 0.8695487976074219]\n", + "[0.8795585632324219, 0.8839003443717957, 0.9115976691246033, 0.882438600063324]\n", + "[0.1647515892982483, 0.20152243971824646, 0.1574828028678894, 0.18351192772388458]\n", + "[0.18428289890289307, 0.23091578483581543, 0.16484680771827698, 0.15122593939304352]\n", + "[0.5809740424156189, 0.6058135032653809, 0.5670385956764221, 0.5776331424713135]\n", + "[0.5671262741088867, 0.5244433879852295, 0.5367910265922546, 0.519351065158844]\n", + "[0.5267385244369507, 0.5783963203430176, 0.583779513835907, 0.5766432285308838]\n", + "[0.6080713272094727, 0.6311295628547668, 0.5832007527351379, 0.556852400302887]\n", + "[0.5769166946411133, 0.5569937825202942, 0.5557950735092163, 0.5139124989509583]\n", + "[0.5666576623916626, 0.5232075452804565, 0.5446867346763611, 0.5618708729743958]\n", + "[0.5735734105110168, 0.5714164972305298, 0.5659860372543335, 0.5717535018920898]\n", + "[0.5325035452842712, 0.532302975654602, 0.5855117440223694, 0.5459432005882263]\n", + "[0.22592434287071228, 0.21600770950317383, 0.2240372598171234, 0.22091490030288696]\n", + "[0.9914980530738831, 0.9944417476654053, 0.9945652484893799, 0.9975000023841858]\n", + "[0.9891629815101624, 0.9941103458404541, 0.983985960483551, 0.9974489808082581]\n", + "[0.9947916865348816, 0.9943756461143494, 0.9886994957923889, 0.9915925860404968]\n", + "[0.9893889427185059, 0.9889701008796692, 0.9895550012588501, 0.9915865063667297]\n", + "[0.9837302565574646, 0.9915818572044373, 0.9850285649299622, 0.9891806840896606]\n", + "[0.9921274185180664, 0.9758312106132507, 0.9836224317550659, 0.9884289503097534]\n", + "[0.9883322715759277, 0.9842403531074524, 0.9894264936447144, 0.9922806024551392]\n", + "[0.9863841533660889, 0.9860228300094604, 0.9893642663955688, 0.9834772944450378]\n", + "[0.986495852470398, 0.9915374517440796, 0.9839465618133545, 0.9944995045661926]\n", + "[0.9948404431343079, 0.9950000047683716, 0.991767168045044, 0.994381308555603]\n", + "[0.9948404431343079, 0.9945652484893799, 1.0, 0.9944888353347778]\n", + "[0.5534148216247559, 0.5188226699829102, 0.5433836579322815, 0.5916346907615662]\n", + "[0.5353074073791504, 0.5418858528137207, 0.5876550674438477, 0.5572326183319092]\n", + "[0.557572066783905, 0.5815762281417847, 0.5634055733680725, 0.535438597202301]\n", + "[0.5285215377807617, 0.5665337443351746, 0.5651980638504028, 0.5393497943878174]\n", + "[0.5646848082542419, 0.5339211821556091, 0.5580668449401855, 0.5455844402313232]\n", + "[0.27349525690078735, 0.2965140640735626, 0.288788378238678, 0.3218974769115448]\n", + "[0.43017956614494324, 0.3961544334888458, 0.3558620512485504, 0.4016839861869812]\n", + "[0.40749385952949524, 0.3967669904232025, 0.3776836097240448, 0.3872283697128296]\n", + "[0.41129741072654724, 0.3783058524131775, 0.36971551179885864, 0.4004943072795868]\n", + "[0.4782581031322479, 0.49727728962898254, 0.4788878858089447, 0.5313816070556641]\n", + "[0.2041974514722824, 0.22359377145767212, 0.22234714031219482, 0.2434476912021637]\n", + "[0.2371056079864502, 0.2633851170539856, 0.2649770975112915, 0.2805914580821991]\n", + "[0.27521374821662903, 0.24716797471046448, 0.2757072150707245, 0.26024869084358215]\n", + "[0.2747976779937744, 0.31471291184425354, 0.26275065541267395, 0.2628556489944458]\n", + "[0.278006911277771, 0.29906943440437317, 0.2998066544532776, 0.30032846331596375]\n", + "[0.2451915591955185, 0.2072790265083313, 0.2872985601425171, 0.2510433495044708]\n", + "[0.3472815155982971, 0.34604400396347046, 0.35510435700416565, 0.37325215339660645]\n", + "[0.19997313618659973, 0.2099754512310028, 0.2716134786605835, 0.2558833956718445]\n", + "[0.2193673998117447, 0.24583151936531067, 0.20336204767227173, 0.2523038387298584]\n", + "[0.23048555850982666, 0.22681982815265656, 0.2534602880477905, 0.2587631642818451]\n", + "[0.2499895840883255, 0.24035601317882538, 0.207964688539505, 0.2750295102596283]\n", + "[0.6117468476295471, 0.603481113910675, 0.5582400560379028, 0.541623592376709]\n", + "[0.5754944682121277, 0.568762481212616, 0.5434103608131409, 0.5851550102233887]\n", + "[0.5462817549705505, 0.5558146834373474, 0.48890066146850586, 0.5831132531166077]\n", + "[0.45152440667152405, 0.42999929189682007, 0.44113826751708984, 0.47549572587013245]\n", + "[0.5660340189933777, 0.5221356153488159, 0.5587618947029114, 0.5234950184822083]\n", + "[0.2514113187789917, 0.1860201060771942, 0.2439255714416504, 0.2310766875743866]\n", + "[0.25182652473449707, 0.23143820464611053, 0.23218928277492523, 0.19578710198402405]\n", + "[0.2169342339038849, 0.22056350111961365, 0.25138458609580994, 0.23392318189144135]\n", + "[0.1462283432483673, 0.10421039909124374, 0.11223490536212921, 0.12685704231262207]\n", + "[0.20263804495334625, 0.17405861616134644, 0.18843188881874084, 0.1422291398048401]\n", + "[0.6619978547096252, 0.7027619481086731, 0.6569274663925171, 0.6268749833106995]\n", + "[0.5954776406288147, 0.5860909819602966, 0.6082318425178528, 0.6089534163475037]\n", + "[0.5925208926200867, 0.6161572337150574, 0.6117541790008545, 0.6076574325561523]\n", + "[0.5094011425971985, 0.5698758363723755, 0.5643465518951416, 0.5479291677474976]\n", + "[0.5521185994148254, 0.5101521611213684, 0.5062360763549805, 0.49311399459838867]\n", + "[0.5269989371299744, 0.5754233598709106, 0.5281846523284912, 0.5089388489723206]\n", + "[0.5716754198074341, 0.5393587350845337, 0.5294984579086304, 0.5836865901947021]\n", + "[0.5362892150878906, 0.5609153509140015, 0.5545868873596191, 0.5616315007209778]\n", + "[0.5162609815597534, 0.5173050165176392, 0.5587658882141113, 0.5665735006332397]\n", + "[0.5458531975746155, 0.5540408492088318, 0.5510255098342896, 0.5855216979980469]\n", + "[0.5618811845779419, 0.5300532579421997, 0.5419504642486572, 0.5642867684364319]\n", + "[0.5629745721817017, 0.5290223360061646, 0.5290106534957886, 0.5475658178329468]\n", + "[0.5073450803756714, 0.551895260810852, 0.551321804523468, 0.5423362255096436]\n", + "[0.569408655166626, 0.5360397696495056, 0.5705633163452148, 0.5716550946235657]\n", + "[0.5508519411087036, 0.49884963035583496, 0.464351087808609, 0.554959237575531]\n", + "[0.5582464337348938, 0.5311263203620911, 0.5600431561470032, 0.5034065246582031]\n", + "[0.41039377450942993, 0.4212028384208679, 0.3791523277759552, 0.4014570116996765]\n", + "[0.6420741677284241, 0.6005017757415771, 0.6412879228591919, 0.6182044148445129]\n", + "[0.5903744697570801, 0.5376977920532227, 0.5926491022109985, 0.5893909335136414]\n", + "[0.2628205716609955, 0.2551524341106415, 0.34859561920166016, 0.29309627413749695]\n", + "[0.45165273547172546, 0.4834180176258087, 0.4940665662288666, 0.48276445269584656]\n", + "[0.5343136787414551, 0.5167686939239502, 0.5367013812065125, 0.5020757913589478]\n", + "[0.5149169564247131, 0.49861112236976624, 0.47045987844467163, 0.5073275566101074]\n", + "[0.5125566720962524, 0.4852422773838043, 0.5079034566879272, 0.5349977016448975]\n", + "[0.3844921290874481, 0.4015921950340271, 0.3796898126602173, 0.3827996850013733]\n", + "[0.46329042315483093, 0.4484395980834961, 0.47182759642601013, 0.46411803364753723]\n", + "[0.6794655323028564, 0.6443713903427124, 0.6494269967079163, 0.6496138572692871]\n", + "[0.9972221851348877, 1.0, 0.9914686679840088, 0.9895468950271606]\n", + "[0.9831595420837402, 0.9940775036811829, 0.9806520938873291, 0.9886904954910278]\n", + "[0.9912499785423279, 0.994895875453949, 0.9971591234207153, 0.9920651912689209]\n", + "[0.9770058989524841, 0.9802829027175903, 0.9864062666893005, 0.9808148145675659]\n", + "[0.9947222471237183, 0.9892411231994629, 0.9970930218696594, 0.9868205189704895]\n", + "[0.9859099984169006, 0.9892333745956421, 0.9857754707336426, 0.9945549368858337]\n", + "[1.0, 0.9891933798789978, 0.9941734075546265, 0.9946784377098083]\n", + "[0.9862819314002991, 0.9890148043632507, 0.9782509803771973, 0.9823765158653259]\n", + "[0.9969512224197388, 0.9972222447395325, 0.9971591234207153, 1.0]\n", + "[0.9865378141403198, 0.9944995045661926, 0.9944444298744202, 0.9920651912689209]\n", + "[0.9889465570449829, 0.994381308555603, 0.9971591234207153, 0.9975000023841858]\n", + "[0.12891869246959686, 0.16116271913051605, 0.19725196063518524, 0.17788571119308472]\n", + "[0.17841032147407532, 0.19774262607097626, 0.13110709190368652, 0.1640591323375702]\n", + "[0.182255357503891, 0.13593703508377075, 0.154739111661911, 0.20748303830623627]\n", + "[0.24981549382209778, 0.2947838604450226, 0.322633296251297, 0.2414211481809616]\n", + "[0.12600353360176086, 0.18075986206531525, 0.15000595152378082, 0.1470673531293869]\n", + "[0.992180585861206, 0.9861999750137329, 0.9832621216773987, 0.9943064451217651]\n", + "[0.9890151023864746, 0.9970930218696594, 0.9946808815002441, 0.991905689239502]\n", + "[0.98629230260849, 1.0, 0.9862698912620544, 0.9975000023841858]\n", + "[0.9699674248695374, 0.9767403602600098, 0.9694434404373169, 0.9623563885688782]\n", + "[0.9890519976615906, 0.9784596562385559, 0.9785335063934326, 0.9783111810684204]\n", + "[0.9973404407501221, 1.0, 0.9804787039756775, 0.9971591234207153]\n", + "[0.9892311096191406, 0.9971591234207153, 0.9972826242446899, 1.0]\n", + "[0.9751513600349426, 0.9774439334869385, 0.9775583148002625, 0.9726022481918335]\n", + "[0.9919538497924805, 0.9946590662002563, 1.0, 0.9844744205474854]\n", + "[0.969642162322998, 0.9819982051849365, 0.958938479423523, 0.9691233038902283]\n", + "[0.9943642616271973, 1.0, 0.9941103458404541, 0.9892793297767639]\n", + "[0.9682282209396362, 0.9892243146896362, 0.9914686679840088, 0.9858628511428833]\n", + "[0.9855610132217407, 0.9895702600479126, 0.9884569048881531, 0.991767168045044]\n", + "[0.9943756461143494, 0.9914773106575012, 0.9914980530738831, 0.9921201467514038]\n", + "[0.9808626174926758, 0.9945048689842224, 0.9914112091064453, 0.9868466258049011]\n", + "[0.9889439940452576, 0.9891175627708435, 0.9913325309753418, 0.9839345812797546]\n", + "[0.9806463122367859, 0.9861111044883728, 0.9918934106826782, 0.9945549368858337]\n", + "[0.9912563562393188, 1.0, 0.9892204403877258, 0.9833706617355347]\n", + "[0.9972222447395325, 0.9945626258850098, 0.9895420074462891, 0.9888540506362915]\n", + "[0.9864026308059692, 0.9945652484893799, 0.9810006618499756, 0.9916582703590393]\n", + "[0.988795280456543, 0.9855615496635437, 0.9890647530555725, 0.985612154006958]\n", + "[0.9922826290130615, 0.9707579612731934, 0.9831843376159668, 0.9757546782493591]\n", + "[0.27527764439582825, 0.24852915108203888, 0.2561521530151367, 0.26639488339424133]\n", + "[0.17411185801029205, 0.19795186817646027, 0.18002741038799286, 0.21408547461032867]\n", + "[0.19980545341968536, 0.22005486488342285, 0.2012539505958557, 0.16546155512332916]\n", + "[0.7442901134490967, 0.7564862966537476, 0.7785245180130005, 0.7223695516586304]\n", + "[0.24902226030826569, 0.1938658207654953, 0.21874888241291046, 0.25361040234565735]\n", + "[0.4547547698020935, 0.4494450092315674, 0.4817768633365631, 0.42869865894317627]\n", + "[0.18593770265579224, 0.2363995760679245, 0.19877585768699646, 0.18523578345775604]\n", + "[0.19769680500030518, 0.2083308845758438, 0.20708343386650085, 0.22398382425308228]\n", + "[0.19952921569347382, 0.18528999388217926, 0.20175184309482574, 0.20850029587745667]\n", + "[0.1774989813566208, 0.19885821640491486, 0.19478414952754974, 0.17789988219738007]\n", + "[0.15066125988960266, 0.21532508730888367, 0.16338326036930084, 0.15253040194511414]\n", + "[0.17614945769309998, 0.14829879999160767, 0.14204074442386627, 0.15732842683792114]\n", + "[0.22639504075050354, 0.22432850301265717, 0.19655415415763855, 0.24857985973358154]\n", + "[0.4557136595249176, 0.4390380382537842, 0.4060100317001343, 0.4243927001953125]\n", + "[0.1275833696126938, 0.1596321314573288, 0.16462548077106476, 0.18237483501434326]\n", + "[0.2995779514312744, 0.2616356909275055, 0.2877805531024933, 0.28304240107536316]\n", + "[0.27781420946121216, 0.2774166464805603, 0.2497825026512146, 0.2621094882488251]\n", + "[0.13486848771572113, 0.15019461512565613, 0.10404637455940247, 0.127070352435112]\n", + "[0.15360713005065918, 0.09717624634504318, 0.13807041943073273, 0.120956189930439]\n", + "[0.18509981036186218, 0.2266835868358612, 0.18820111453533173, 0.21026131510734558]\n", + "[0.14653994143009186, 0.11027639359235764, 0.11442440748214722, 0.13854384422302246]\n", + "[0.24833516776561737, 0.24094732105731964, 0.21725179255008698, 0.23188123106956482]\n", + "[0.5070773363113403, 0.48524367809295654, 0.5219882130622864, 0.5213410258293152]\n", + "[0.5089683532714844, 0.5531036257743835, 0.5304555296897888, 0.518451988697052]\n", + "[0.507594108581543, 0.5175015926361084, 0.5752242803573608, 0.5307167172431946]\n", + "[0.5872217416763306, 0.5331168174743652, 0.5327951908111572, 0.5868867635726929]\n", + "[0.531341016292572, 0.5351199507713318, 0.5289161205291748, 0.5258013606071472]\n", + "[0.5492740273475647, 0.5145589113235474, 0.5180538296699524, 0.5143091082572937]\n", + "[0.5317153930664062, 0.534400224685669, 0.5631776452064514, 0.5796152353286743]\n", + "[0.5339050889015198, 0.5634092092514038, 0.5397304892539978, 0.5562800168991089]\n", + "[0.5408361554145813, 0.5160073041915894, 0.5248958468437195, 0.5583941340446472]\n", + "[0.541733980178833, 0.5271984338760376, 0.5384799838066101, 0.5867468118667603]\n", + "[0.5296022295951843, 0.5690674185752869, 0.535231351852417, 0.5705554485321045]\n", + "[0.15971826016902924, 0.1808152198791504, 0.16926786303520203, 0.193510040640831]\n", + "[0.4114830195903778, 0.3672725558280945, 0.41377484798431396, 0.42746293544769287]\n", + "[0.2036360502243042, 0.1909341961145401, 0.1751718968153, 0.20324458181858063]\n", + "[0.4166697859764099, 0.4201826751232147, 0.4016774296760559, 0.39246073365211487]\n", + "[0.22477246820926666, 0.17148420214653015, 0.19595828652381897, 0.20373396575450897]\n", + "[0.4914955794811249, 0.47751447558403015, 0.5002477169036865, 0.4979744553565979]\n", + "[0.1425112634897232, 0.1785670667886734, 0.18021133542060852, 0.19325651228427887]\n", + "[0.19927307963371277, 0.20030707120895386, 0.16107125580310822, 0.20546075701713562]\n", + "[0.22394844889640808, 0.17902871966362, 0.18199168145656586, 0.180014505982399]\n", + "[0.19939258694648743, 0.1858476847410202, 0.19369350373744965, 0.18038727343082428]\n", + "[0.1949012130498886, 0.20588736236095428, 0.15640686452388763, 0.2118116319179535]\n", + "[0.33288973569869995, 0.32175564765930176, 0.30957043170928955, 0.3396754562854767]\n", + "[0.5194336771965027, 0.534665584564209, 0.5780165195465088, 0.5289429426193237]\n", + "[0.5813289880752563, 0.5200721621513367, 0.5295795202255249, 0.5702672004699707]\n", + "[0.5312526822090149, 0.5835962891578674, 0.5287976264953613, 0.4930199682712555]\n", + "[0.5106150507926941, 0.5220208764076233, 0.5531023740768433, 0.4977347254753113]\n", + "[0.40994274616241455, 0.4348708391189575, 0.4384716749191284, 0.49112236499786377]\n", + "[0.554527759552002, 0.5339705944061279, 0.4611704349517822, 0.5097335577011108]\n", + "[0.5548492670059204, 0.5307304263114929, 0.5238175392150879, 0.542385995388031]\n", + "[0.5179164409637451, 0.5530630946159363, 0.5210420489311218, 0.5578054785728455]\n", + "[0.5509149432182312, 0.5114478468894958, 0.5363113284111023, 0.47725552320480347]\n", + "[0.5064999461174011, 0.546502947807312, 0.5061414837837219, 0.5577138662338257]\n", + "[0.5505673289299011, 0.5144717693328857, 0.5179919004440308, 0.4921720325946808]\n", + "[0.5596018433570862, 0.5670961141586304, 0.4845508337020874, 0.5656231641769409]\n", + "[0.4699799418449402, 0.5486406087875366, 0.5195010304450989, 0.5553159713745117]\n", + "[0.5313379764556885, 0.5273617506027222, 0.543670117855072, 0.5125434398651123]\n", + "[0.5459277033805847, 0.5571240186691284, 0.5272718071937561, 0.5894438028335571]\n", + "[0.5624363422393799, 0.5274811387062073, 0.5428261160850525, 0.5225948095321655]\n", + "[0.5368972420692444, 0.5388208627700806, 0.5584580898284912, 0.5749698877334595]\n", + "[0.5434300303459167, 0.5524720549583435, 0.5899950265884399, 0.5356237888336182]\n", + "[0.5286432504653931, 0.494615375995636, 0.4738685190677643, 0.5139315128326416]\n", + "[0.5271011590957642, 0.5369442701339722, 0.4954458773136139, 0.5532859563827515]\n", + "[0.5644555687904358, 0.5503665208816528, 0.543965220451355, 0.511506199836731]\n", + "[0.545943021774292, 0.5699430108070374, 0.5931914448738098, 0.5418182015419006]\n", + "[0.6289546489715576, 0.6051049828529358, 0.5705718398094177, 0.6014835238456726]\n", + "[0.5145086646080017, 0.5771663784980774, 0.6140451431274414, 0.5764867067337036]\n", + "[0.5294556021690369, 0.5255770683288574, 0.545494556427002, 0.5386338233947754]\n", + "[0.6229904294013977, 0.6179196834564209, 0.5453246235847473, 0.5809985399246216]\n", + "[0.5022135972976685, 0.5084375143051147, 0.5660618543624878, 0.5136774778366089]\n", + "[0.4953785836696625, 0.5218610167503357, 0.5211670398712158, 0.5282859206199646]\n", + "[0.3993029296398163, 0.3701486587524414, 0.44448909163475037, 0.4078751504421234]\n", + "[0.2958638370037079, 0.34352073073387146, 0.3286556005477905, 0.3448238968849182]\n", + "[0.44168534874916077, 0.4615187346935272, 0.39939939975738525, 0.4365402162075043]\n", + "[0.23986518383026123, 0.20367704331874847, 0.205331489443779, 0.22283779084682465]\n", + "[0.5745421051979065, 0.5395076274871826, 0.5484383702278137, 0.5729860663414001]\n", + "[0.5304909944534302, 0.5693390369415283, 0.5768824219703674, 0.5310382843017578]\n", + "[0.21011020243167877, 0.20410877466201782, 0.2057848572731018, 0.1745438575744629]\n", + "[0.20719298720359802, 0.21489524841308594, 0.19388526678085327, 0.20947182178497314]\n", + "[0.5888274312019348, 0.5135098695755005, 0.5290452241897583, 0.5280258059501648]\n", + "[0.583608090877533, 0.5821506977081299, 0.5961708426475525, 0.5802536606788635]\n", + "[0.5372142791748047, 0.5025057196617126, 0.545059859752655, 0.5600876808166504]\n", + "[0.5659487843513489, 0.5474304556846619, 0.5703703165054321, 0.5649802684783936]\n", + "[0.586327314376831, 0.5401710867881775, 0.5769510269165039, 0.5775198936462402]\n", + "[0.5147693157196045, 0.5940995216369629, 0.5610169172286987, 0.5974414348602295]\n", + "[0.14453093707561493, 0.12331831455230713, 0.13468141853809357, 0.16759562492370605]\n", + "[0.173726424574852, 0.14499874413013458, 0.1644105762243271, 0.14037947356700897]\n", + "[0.13518297672271729, 0.14620903134346008, 0.11568861454725266, 0.14660286903381348]\n", + "[0.11201666295528412, 0.1110018938779831, 0.13581740856170654, 0.10288997739553452]\n", + "[0.10636527836322784, 0.10886658728122711, 0.11713306605815887, 0.11353286355733871]\n", + "[0.9100009799003601, 0.9246798753738403, 0.9323025941848755, 0.9211589694023132]\n", + "[0.20046578347682953, 0.19562384486198425, 0.23903556168079376, 0.19448958337306976]\n", + "[0.9385941028594971, 0.946748673915863, 0.9234684705734253, 0.9225646257400513]\n", + "[0.9300755262374878, 0.9249176383018494, 0.9237927198410034, 0.9177449345588684]\n", + "[0.9395495653152466, 0.9666900634765625, 0.9598909616470337, 0.950581967830658]\n", + "[0.9214509725570679, 0.9281087517738342, 0.9418155550956726, 0.9264681935310364]\n", + "[0.9128146171569824, 0.9187747240066528, 0.9378730058670044, 0.9396340250968933]\n", + "[0.24181929230690002, 0.2366025596857071, 0.26225483417510986, 0.2209533452987671]\n", + "[0.20873193442821503, 0.19303421676158905, 0.23302218317985535, 0.2150139957666397]\n", + "[0.8921228647232056, 0.9495500326156616, 0.9100303053855896, 0.9138402342796326]\n", + "[0.20373417437076569, 0.16945922374725342, 0.19621920585632324, 0.20239192247390747]\n", + "[0.5648751258850098, 0.5471334457397461, 0.5958036184310913, 0.5310073494911194]\n", + "[0.6198305487632751, 0.5447597503662109, 0.602480411529541, 0.567913293838501]\n", + "[0.5624915957450867, 0.6201403737068176, 0.569744348526001, 0.5331442356109619]\n", + "[0.5475430488586426, 0.5743393301963806, 0.5344364643096924, 0.5979432463645935]\n", + "[0.5489751100540161, 0.5305890440940857, 0.6165137887001038, 0.5884442925453186]\n", + "[0.5824177861213684, 0.5477643013000488, 0.532846212387085, 0.5018419027328491]\n", + "[0.15496563911437988, 0.15465860068798065, 0.15507857501506805, 0.13559406995773315]\n", + "[0.19791653752326965, 0.18570958077907562, 0.21158269047737122, 0.21496020257472992]\n", + "[0.3159589469432831, 0.309478223323822, 0.2922581434249878, 0.2884919047355652]\n", + "[0.5050603151321411, 0.45410454273223877, 0.46050021052360535, 0.49134284257888794]\n", + "[0.21122978627681732, 0.21815899014472961, 0.23580268025398254, 0.21424391865730286]\n", + "[0.23227836191654205, 0.2205706387758255, 0.22645068168640137, 0.23192737996578217]\n", + "[0.24519631266593933, 0.21304874122142792, 0.21926964819431305, 0.20750737190246582]\n", + "[0.22482901811599731, 0.2493171989917755, 0.21230417490005493, 0.2220202386379242]\n", + "[0.27738499641418457, 0.2588248550891876, 0.28713104128837585, 0.30140745639801025]\n", + "[0.27208349108695984, 0.28492632508277893, 0.263437956571579, 0.26268231868743896]\n", + "[0.28785374760627747, 0.3715996742248535, 0.3856813311576843, 0.3098417818546295]\n", + "[0.3126905858516693, 0.2680789828300476, 0.19368761777877808, 0.25796788930892944]\n", + "[0.27116844058036804, 0.259716272354126, 0.30584198236465454, 0.308927059173584]\n", + "[0.2723155915737152, 0.3075774908065796, 0.2602024972438812, 0.29585444927215576]\n", + "[0.25796306133270264, 0.2185031920671463, 0.2260843962430954, 0.19698412716388702]\n", + "[0.37043190002441406, 0.39714083075523376, 0.4019872546195984, 0.3683112561702728]\n", + "[0.1784193515777588, 0.18202045559883118, 0.2182418406009674, 0.203818216919899]\n", + "[0.20897990465164185, 0.16875441372394562, 0.20197246968746185, 0.18542182445526123]\n", + "[0.6161883473396301, 0.6125838756561279, 0.6154201030731201, 0.6286364793777466]\n", + "[0.5118994116783142, 0.5190272331237793, 0.5328384041786194, 0.48686113953590393]\n", + "[0.1679173856973648, 0.2150830775499344, 0.1597021073102951, 0.17539142072200775]\n", + "[0.20596164464950562, 0.21086062490940094, 0.21777287125587463, 0.19783291220664978]\n", + "[0.17992785573005676, 0.201336070895195, 0.20594440400600433, 0.20914170145988464]\n", + "[0.22338996827602386, 0.23962530493736267, 0.1924680769443512, 0.23524674773216248]\n", + "[0.2044222205877304, 0.20621465146541595, 0.18713724613189697, 0.2092052400112152]\n", + "[0.15297286212444305, 0.18449828028678894, 0.19542118906974792, 0.18267355859279633]\n", + "[0.1724928915500641, 0.22153885662555695, 0.17815616726875305, 0.18960988521575928]\n", + "[0.5463043451309204, 0.5529870390892029, 0.5469760894775391, 0.547375500202179]\n", + "[0.17626690864562988, 0.13522766530513763, 0.15717467665672302, 0.15335078537464142]\n", + "[0.1757756769657135, 0.15825001895427704, 0.14867790043354034, 0.1559542864561081]\n", + "[0.20107710361480713, 0.1304672211408615, 0.17868760228157043, 0.1532682180404663]\n", + "[0.17209415137767792, 0.1605014204978943, 0.1524316817522049, 0.1838310956954956]\n", + "[0.9886748790740967, 0.9833825826644897, 1.0, 0.9972826242446899]\n", + "[0.9887570142745972, 0.9869405031204224, 0.994381308555603, 0.9838341474533081]\n", + "[0.26855432987213135, 0.2464122474193573, 0.2161288857460022, 0.20490702986717224]\n", + "[0.9805260896682739, 0.9823694825172424, 0.9806355834007263, 0.9799387454986572]\n", + "[0.9670472741127014, 0.9779505133628845, 0.9806505441665649, 0.9810035228729248]\n", + "[0.47582510113716125, 0.48072585463523865, 0.4882100522518158, 0.4756353199481964]\n", + "[0.9972222447395325, 0.994381308555603, 0.9914772510528564, 0.9917160868644714]\n", + "[0.1721521019935608, 0.18186312913894653, 0.1386733204126358, 0.12524725496768951]\n", + "[0.2150043100118637, 0.17963559925556183, 0.15426528453826904, 0.18997523188591003]\n", + "[0.8541086316108704, 0.8825159668922424, 0.8414776921272278, 0.8262006640434265]\n", + "[0.1587526500225067, 0.20919296145439148, 0.19022081792354584, 0.14021196961402893]\n", + "[0.1488228589296341, 0.15984296798706055, 0.15941980481147766, 0.1449262648820877]\n", + "[0.19523921608924866, 0.2105686217546463, 0.19175197184085846, 0.20868180692195892]\n", + "[0.14691448211669922, 0.1404656171798706, 0.11219822615385056, 0.13073031604290009]\n", + "[0.13101737201213837, 0.1385759711265564, 0.14609503746032715, 0.18913592398166656]\n", + "[0.15545110404491425, 0.15660369396209717, 0.13758650422096252, 0.14779925346374512]\n", + "[0.11442513763904572, 0.11172214150428772, 0.1262233406305313, 0.09012909233570099]\n", + "[0.1359003633260727, 0.10430271178483963, 0.14622539281845093, 0.13274137675762177]\n", + "[0.17308001220226288, 0.17430633306503296, 0.1063816100358963, 0.12381093949079514]\n", + "[0.1272735893726349, 0.12724703550338745, 0.12752658128738403, 0.11212135851383209]\n", + "[0.13824209570884705, 0.11301412433385849, 0.16935159265995026, 0.1427343785762787]\n", + "[0.15823739767074585, 0.11777140945196152, 0.16578759253025055, 0.12940730154514313]\n", + "[0.12159022688865662, 0.11434736102819443, 0.12206390500068665, 0.13133428990840912]\n", + "[0.15462711453437805, 0.16551104187965393, 0.17688564956188202, 0.16312673687934875]\n", + "[0.12744969129562378, 0.12439778447151184, 0.12789589166641235, 0.12977814674377441]\n", + "[0.13997450470924377, 0.12378036975860596, 0.15276101231575012, 0.12699562311172485]\n", + "[0.12264078855514526, 0.15409249067306519, 0.15156331658363342, 0.1413627415895462]\n", + "[0.4779030382633209, 0.4986056387424469, 0.5014404058456421, 0.4587509334087372]\n", + "[0.26074716448783875, 0.3212748169898987, 0.28293606638908386, 0.2626822888851166]\n", + "[0.17495973408222198, 0.2281721830368042, 0.22755539417266846, 0.19484850764274597]\n", + "[0.19136957824230194, 0.19364647567272186, 0.2155659794807434, 0.18245813250541687]\n", + "[0.20034092664718628, 0.17236189544200897, 0.17982085049152374, 0.1582009345293045]\n", + "[0.4470272660255432, 0.4302094876766205, 0.425695538520813, 0.4588235914707184]\n", + "[0.22759661078453064, 0.20392096042633057, 0.24748116731643677, 0.22664092481136322]\n", + "[0.2797698676586151, 0.28801849484443665, 0.26442912220954895, 0.23285825550556183]\n", + "[0.2912433445453644, 0.2920156419277191, 0.27377477288246155, 0.31286418437957764]\n", + "[0.1500803828239441, 0.11976619809865952, 0.15601974725723267, 0.13232989609241486]\n", + "[0.4496901035308838, 0.4289608299732208, 0.46391525864601135, 0.4647867679595947]\n", + "[0.15344111621379852, 0.1273210197687149, 0.16537053883075714, 0.14956915378570557]\n", + "[0.15729066729545593, 0.12567129731178284, 0.14434437453746796, 0.17671315371990204]\n", + "[0.12262952327728271, 0.15814712643623352, 0.15749527513980865, 0.11408071219921112]\n", + "[0.18799224495887756, 0.15939484536647797, 0.17835493385791779, 0.20788265764713287]\n", + "[0.17516383528709412, 0.15491920709609985, 0.13784365355968475, 0.15178996324539185]\n", + "[0.3738892376422882, 0.4021874964237213, 0.42976242303848267, 0.41346001625061035]\n", + "[0.6412092447280884, 0.6544409990310669, 0.603859543800354, 0.651689350605011]\n", + "[0.5280349850654602, 0.5343366861343384, 0.49016520380973816, 0.48938024044036865]\n", + "[0.5804377794265747, 0.5598626732826233, 0.616409957408905, 0.57905113697052]\n", + "[0.5622657537460327, 0.5383156538009644, 0.5483911633491516, 0.6045716404914856]\n", + "[0.5669662952423096, 0.5836367607116699, 0.5702194571495056, 0.5508551597595215]\n", + "[0.5657542943954468, 0.5736836791038513, 0.5284518003463745, 0.5490406155586243]\n", + "[0.5288172960281372, 0.5508356094360352, 0.5385119915008545, 0.5797461867332458]\n", + "[0.46266743540763855, 0.45053568482398987, 0.5039392113685608, 0.4799135625362396]\n", + "[0.6190009117126465, 0.565095841884613, 0.589626669883728, 0.6276559829711914]\n", + "[0.4923728406429291, 0.5088626742362976, 0.46549874544143677, 0.506498396396637]\n", + "[0.9260786175727844, 0.9130741357803345, 0.9131927490234375, 0.9006333351135254]\n", + "[0.8783329129219055, 0.8768420815467834, 0.8766763210296631, 0.9013493657112122]\n", + "[0.8957427144050598, 0.9114679098129272, 0.9231684803962708, 0.8837209939956665]\n", + "[0.8398967981338501, 0.8169780373573303, 0.8389467597007751, 0.8231969475746155]\n", + "[0.938377320766449, 0.9556795358657837, 0.9539662599563599, 0.9461018443107605]\n", + "[0.1834557205438614, 0.1913623809814453, 0.25866469740867615, 0.24018338322639465]\n", + "[0.18645627796649933, 0.22056257724761963, 0.1980591118335724, 0.17997205257415771]\n", + "[0.2499862164258957, 0.19867053627967834, 0.20801421999931335, 0.19689105451107025]\n", + "[0.22412918508052826, 0.2082805186510086, 0.1508742868900299, 0.1812378615140915]\n", + "[0.16970235109329224, 0.18759779632091522, 0.1613895446062088, 0.19724301993846893]\n", + "[0.17301888763904572, 0.16530631482601166, 0.17610833048820496, 0.19889402389526367]\n", + "[0.18831788003444672, 0.21680428087711334, 0.22456881403923035, 0.1582430750131607]\n", + "[0.17692726850509644, 0.2050372213125229, 0.2024858444929123, 0.19176162779331207]\n", + "[0.22279174625873566, 0.18196173012256622, 0.18421825766563416, 0.19387689232826233]\n", + "[0.19022199511528015, 0.18078386783599854, 0.15634465217590332, 0.21641835570335388]\n", + "[0.17620231211185455, 0.2059762179851532, 0.23378856480121613, 0.1901041567325592]\n", + "[0.9945652484893799, 0.9917738437652588, 0.9865347146987915, 0.9971591234207153]\n", + "[0.9947916865348816, 0.9789040088653564, 0.9750224351882935, 0.9769874811172485]\n", + "[0.991592526435852, 0.9970238208770752, 0.9900321364402771, 0.994623064994812]\n", + "[0.9890164136886597, 0.9973404407501221, 0.9918953776359558, 0.9944417476654053]\n", + "[1.0, 0.9915978908538818, 0.9946808815002441, 0.9944002032279968]\n", + "[0.9970930218696594, 0.9922826290130615, 0.9940442442893982, 0.9975490570068359]\n", + "[0.9948316216468811, 0.9923407435417175, 0.9945626854896545, 0.9833540916442871]\n", + "[0.9895468950271606, 0.9944196939468384, 0.9946808815002441, 0.9866846799850464]\n", + "[0.9945652484893799, 0.9946784377098083, 0.991655707359314, 0.9973958134651184]\n", + "[0.9946808815002441, 0.9916008114814758, 0.9946590662002563, 0.994623064994812]\n", + "[0.9913186430931091, 0.9899286031723022, 0.9920743107795715, 0.9887487292289734]\n", + "[0.22246840596199036, 0.19190776348114014, 0.15269210934638977, 0.21020865440368652]\n", + "[0.26742199063301086, 0.27546244859695435, 0.2520962357521057, 0.22516825795173645]\n", + "[0.22250896692276, 0.22652879357337952, 0.2256852388381958, 0.22951234877109528]\n", + "[0.2271767258644104, 0.2412204146385193, 0.23431333899497986, 0.20029792189598083]\n", + "[0.3013429641723633, 0.32002872228622437, 0.2816399037837982, 0.3219989836215973]\n", + "[0.2609969973564148, 0.22351154685020447, 0.2406967431306839, 0.24110791087150574]\n", + "[0.2213255763053894, 0.23829594254493713, 0.2591870427131653, 0.2208840698003769]\n", + "[0.17469149827957153, 0.17779210209846497, 0.20726898312568665, 0.14466425776481628]\n", + "[0.31160494685173035, 0.28555673360824585, 0.31012916564941406, 0.30116143822669983]\n", + "[0.23025475442409515, 0.22810913622379303, 0.16665315628051758, 0.19333983957767487]\n", + "[0.2164520025253296, 0.1874268501996994, 0.185278058052063, 0.19079184532165527]\n", + "[0.2662818729877472, 0.24175599217414856, 0.26920199394226074, 0.2250824123620987]\n", + "[0.37333858013153076, 0.31953364610671997, 0.3170177638530731, 0.3096100986003876]\n", + "[0.3529779314994812, 0.34559309482574463, 0.35100626945495605, 0.3835133910179138]\n", + "[0.2819685935974121, 0.23228617012500763, 0.2635457217693329, 0.28345033526420593]\n", + "[0.25011423230171204, 0.24093103408813477, 0.25267571210861206, 0.20255999267101288]\n", + "[0.28747138381004333, 0.2600989043712616, 0.28119128942489624, 0.28947335481643677]\n", + "[0.3097824454307556, 0.29678666591644287, 0.3371593952178955, 0.3263614773750305]\n", + "[0.2806127965450287, 0.23959298431873322, 0.2704014182090759, 0.24946974217891693]\n", + "[0.24786460399627686, 0.2368631511926651, 0.27970877289772034, 0.2598556876182556]\n", + "[0.21727117896080017, 0.22625021636486053, 0.25041890144348145, 0.24304106831550598]\n", + "[0.27482813596725464, 0.25279197096824646, 0.26684898138046265, 0.26271551847457886]\n", + "[0.21260836720466614, 0.18478929996490479, 0.2217361181974411, 0.2130400687456131]\n", + "[0.17107988893985748, 0.20383712649345398, 0.19739335775375366, 0.20615214109420776]\n", + "[0.19582079350948334, 0.2568500339984894, 0.21985453367233276, 0.20709852874279022]\n", + "[0.21952897310256958, 0.22496925294399261, 0.19063957035541534, 0.15894815325737]\n", + "[0.20808899402618408, 0.18247158825397491, 0.20060253143310547, 0.19281548261642456]\n", + "[0.1922808289527893, 0.2004650980234146, 0.19137021899223328, 0.22916795313358307]\n", + "[0.23192203044891357, 0.18466806411743164, 0.22917810082435608, 0.18403029441833496]\n", + "[0.19777217507362366, 0.16333980858325958, 0.2275484800338745, 0.19644401967525482]\n", + "[0.22003600001335144, 0.22207993268966675, 0.17554397881031036, 0.1694529950618744]\n", + "[0.1990203857421875, 0.20734605193138123, 0.20672063529491425, 0.20640842616558075]\n", + "[0.25534823536872864, 0.17676162719726562, 0.19460010528564453, 0.219098299741745]\n", + "[0.26425281167030334, 0.23929709196090698, 0.24352221190929413, 0.21147669851779938]\n", + "[0.23929165303707123, 0.22655366361141205, 0.24746336042881012, 0.21565186977386475]\n", + "[0.30405041575431824, 0.3155672252178192, 0.37709444761276245, 0.35104283690452576]\n", + "[0.34241899847984314, 0.3571825921535492, 0.34422796964645386, 0.2897530794143677]\n", + "[0.3352240324020386, 0.3376864790916443, 0.3680988550186157, 0.4026906192302704]\n", + "[0.3349062502384186, 0.336513876914978, 0.3249984681606293, 0.28536078333854675]\n", + "[0.2966649830341339, 0.22122108936309814, 0.27017730474472046, 0.27371084690093994]\n", + "[0.3535281717777252, 0.36012616753578186, 0.3513266146183014, 0.35009461641311646]\n", + "[0.23067083954811096, 0.20068347454071045, 0.18821881711483002, 0.17370206117630005]\n", + "[0.3036901354789734, 0.35501131415367126, 0.29883965849876404, 0.33557406067848206]\n", + "[0.36363691091537476, 0.31957805156707764, 0.3348985016345978, 0.3261904716491699]\n", + "[0.5681226253509521, 0.5738337635993958, 0.5654482245445251, 0.5927836298942566]\n", + "[0.37050682306289673, 0.4089915156364441, 0.41187548637390137, 0.3915814757347107]\n", + "[0.557699978351593, 0.5444347858428955, 0.5472298860549927, 0.5391879677772522]\n", + "[0.5345128774642944, 0.5090510845184326, 0.5477361679077148, 0.5064098238945007]\n", + "[0.6480147838592529, 0.6400139331817627, 0.6565794944763184, 0.6638484597206116]\n", + "[0.5617155432701111, 0.560284435749054, 0.5355062484741211, 0.5727003216743469]\n", + "[0.607420027256012, 0.6744515895843506, 0.6091691255569458, 0.6180191040039062]\n", + "[0.5721851587295532, 0.5631197094917297, 0.5476170778274536, 0.5434839725494385]\n", + "[0.524872899055481, 0.4875984191894531, 0.4970129132270813, 0.4908691644668579]\n", + "[0.533841073513031, 0.5173590183258057, 0.47835826873779297, 0.4978495240211487]\n", + "[0.5755015015602112, 0.585796594619751, 0.6461294889450073, 0.5921451449394226]\n", + "[0.4427277743816376, 0.42437657713890076, 0.4445038437843323, 0.44229692220687866]\n", + "[0.5811970233917236, 0.5568971633911133, 0.5442310571670532, 0.5984762907028198]\n", + "[0.5491032004356384, 0.5202472805976868, 0.5568976402282715, 0.488874226808548]\n", + "[0.47346848249435425, 0.4095262587070465, 0.40793102979660034, 0.4236419200897217]\n", + "[0.5522754192352295, 0.6107820272445679, 0.5875617265701294, 0.5791579484939575]\n", + "[0.6069856286048889, 0.6206434369087219, 0.6050170660018921, 0.6034913063049316]\n", + "[0.5502148866653442, 0.5488760471343994, 0.518223762512207, 0.5489795207977295]\n", + "[0.5862796902656555, 0.5833472609519958, 0.6015675663948059, 0.5757673978805542]\n", + "[0.6046249866485596, 0.6052911281585693, 0.6059335470199585, 0.6278898119926453]\n", + "[0.3705832362174988, 0.3076198697090149, 0.36445754766464233, 0.37632259726524353]\n", + "[0.6534066796302795, 0.673441469669342, 0.6130192875862122, 0.6308709383010864]\n", + "[0.5073665380477905, 0.5129167437553406, 0.5210790634155273, 0.5096390843391418]\n", + "[0.592282235622406, 0.5597613453865051, 0.5883938670158386, 0.5605425834655762]\n", + "[0.6411133408546448, 0.6827189922332764, 0.6247144341468811, 0.627140462398529]\n", + "[0.3742506504058838, 0.3880075216293335, 0.4583125114440918, 0.38106268644332886]\n", + "[0.5709867477416992, 0.5934156179428101, 0.49069109559059143, 0.5603702068328857]\n", + "[0.49836406111717224, 0.48842793703079224, 0.49134087562561035, 0.47559598088264465]\n", + "[0.5194061398506165, 0.541713297367096, 0.5264804363250732, 0.4705895185470581]\n", + "[0.5690568089485168, 0.5756153464317322, 0.5803735256195068, 0.602144181728363]\n", + "[0.43513911962509155, 0.4284241795539856, 0.4288747012615204, 0.4008597433567047]\n", + "[0.5472647547721863, 0.5464184284210205, 0.518450140953064, 0.5302846431732178]\n", + "[0.44026416540145874, 0.44362369179725647, 0.4705508053302765, 0.4361756145954132]\n", + "[0.481512188911438, 0.4778369665145874, 0.4444987177848816, 0.44823789596557617]\n", + "[0.352647066116333, 0.34554409980773926, 0.3217189311981201, 0.3195469081401825]\n", + "[0.419828325510025, 0.4114368259906769, 0.4245392680168152, 0.4253586232662201]\n", + "[0.41746363043785095, 0.4379228353500366, 0.4123951494693756, 0.41662684082984924]\n", + "[0.511509120464325, 0.44647741317749023, 0.4716331660747528, 0.48807215690612793]\n", + "[0.21857424080371857, 0.1757843941450119, 0.1685308814048767, 0.19588780403137207]\n", + "[0.14609941840171814, 0.17369650304317474, 0.17395183444023132, 0.20677787065505981]\n", + "[0.29285791516304016, 0.28831833600997925, 0.3076411187648773, 0.2777990996837616]\n", + "[0.18905679881572723, 0.20566771924495697, 0.1398370862007141, 0.16175752878189087]\n", + "[0.2009967565536499, 0.2056010663509369, 0.17478547990322113, 0.1995021104812622]\n", + "[0.4893667995929718, 0.4341292679309845, 0.4817500412464142, 0.48656612634658813]\n", + "[0.22599422931671143, 0.22414164245128632, 0.23381951451301575, 0.20638413727283478]\n", + "[0.20500166714191437, 0.17630375921726227, 0.14835268259048462, 0.2160588800907135]\n", + "[0.21098196506500244, 0.18411296606063843, 0.19441761076450348, 0.2273576855659485]\n", + "[0.235465407371521, 0.24692119657993317, 0.23395313322544098, 0.20964579284191132]\n", + "[0.20591098070144653, 0.19769811630249023, 0.203903466463089, 0.14658702909946442]\n", + "[0.14915591478347778, 0.17611436545848846, 0.19418877363204956, 0.1623440384864807]\n", + "[0.19535686075687408, 0.22865590453147888, 0.18252278864383698, 0.19912336766719818]\n", + "[0.3434123694896698, 0.2937437891960144, 0.29175761342048645, 0.373717337846756]\n", + "[0.14576782286167145, 0.16012640297412872, 0.17113396525382996, 0.1816868633031845]\n", + "[1.0, 1.0, 1.0, 1.0]\n", + "[0.14075902104377747, 0.13810691237449646, 0.1426527351140976, 0.15590514242649078]\n", + "[0.9836124181747437, 0.9773561358451843, 0.9804782867431641, 0.9709498882293701]\n", + "[0.9814839959144592, 0.9807304739952087, 0.9919906854629517, 0.9914299845695496]\n", + "[0.18974122405052185, 0.18298393487930298, 0.24413025379180908, 0.24961239099502563]\n", + "[0.9886877536773682, 0.9669491052627563, 0.9835304021835327, 0.980597198009491]\n", + "[0.992180585861206, 0.9880226850509644, 0.9833050966262817, 0.9865561127662659]\n", + "[0.9000678062438965, 0.897709846496582, 0.9139127731323242, 0.8938202857971191]\n", + "[0.9693470001220703, 0.9885612726211548, 0.9708419442176819, 0.9858527183532715]\n", + "[0.9221019744873047, 0.9171821475028992, 0.926865816116333, 0.9352612495422363]\n", + "[0.9866209626197815, 0.9920670390129089, 0.9850670099258423, 0.9779210686683655]\n", + "[0.978417694568634, 0.9684239625930786, 0.9639186859130859, 0.9635587930679321]\n", + "[0.12895087897777557, 0.14665770530700684, 0.14909760653972626, 0.12715616822242737]\n", + "[0.06918729096651077, 0.09919298440217972, 0.12877504527568817, 0.10884389281272888]\n", + "[0.1819743514060974, 0.18252059817314148, 0.14382071793079376, 0.17430773377418518]\n", + "[0.11958122253417969, 0.13530926406383514, 0.11216022074222565, 0.12577347457408905]\n", + "[0.11991709470748901, 0.11536136269569397, 0.14939001202583313, 0.12748569250106812]\n", + "[0.11426447331905365, 0.1276347041130066, 0.14312301576137543, 0.13695673644542694]\n", + "[0.12671107053756714, 0.1088842898607254, 0.13405536115169525, 0.12108854949474335]\n", + "[0.09972518682479858, 0.09414003789424896, 0.1396210789680481, 0.105631522834301]\n", + "[0.11000970751047134, 0.13427402079105377, 0.11032135039567947, 0.13730135560035706]\n", + "[0.1392517387866974, 0.14717726409435272, 0.11985171586275101, 0.16472771763801575]\n", + "[0.12254495918750763, 0.1207980066537857, 0.11597899347543716, 0.12611372768878937]\n", + "[0.36187756061553955, 0.3973458409309387, 0.38774871826171875, 0.3752380907535553]\n", + "[0.2082855999469757, 0.19684961438179016, 0.22920416295528412, 0.23662856221199036]\n", + "[0.3977240324020386, 0.420877069234848, 0.40023908019065857, 0.3843914866447449]\n", + "[0.16359616816043854, 0.17217549681663513, 0.17280876636505127, 0.15559284389019012]\n", + "[0.4645935595035553, 0.4185427725315094, 0.4495163559913635, 0.44429346919059753]\n", + "[0.1928737610578537, 0.18589243292808533, 0.2451656460762024, 0.21849174797534943]\n", + "[0.6944361329078674, 0.6989763975143433, 0.6949785947799683, 0.7257127165794373]\n", + "[0.237091064453125, 0.20456746220588684, 0.256631076335907, 0.22035476565361023]\n", + "[0.22537942230701447, 0.23826630413532257, 0.1935383528470993, 0.16792282462120056]\n", + "[0.2168063074350357, 0.22507968544960022, 0.23566217720508575, 0.23321418464183807]\n", + "[0.2891181707382202, 0.2420230209827423, 0.2587968111038208, 0.28078532218933105]\n", + "[0.16673237085342407, 0.13999991118907928, 0.14796973764896393, 0.12778988480567932]\n", + "[0.17500659823417664, 0.15738962590694427, 0.13964539766311646, 0.1484336256980896]\n", + "[0.20316274464130402, 0.17517626285552979, 0.14266133308410645, 0.15442299842834473]\n", + "[0.1745934784412384, 0.17215560376644135, 0.14496967196464539, 0.18311657011508942]\n", + "[0.1374087929725647, 0.14009061455726624, 0.16820335388183594, 0.1831132024526596]\n", + "[0.5278846621513367, 0.5566136837005615, 0.6117295622825623, 0.6058295369148254]\n", + "[0.5881336331367493, 0.591907799243927, 0.6048292517662048, 0.5793896317481995]\n", + "[0.37517595291137695, 0.39575129747390747, 0.3918779194355011, 0.40027961134910583]\n", + "[0.6536791324615479, 0.7207937836647034, 0.6374837756156921, 0.5758216977119446]\n", + "[0.2587887644767761, 0.24379470944404602, 0.29768839478492737, 0.30755144357681274]\n", + "[0.589698076248169, 0.5950466990470886, 0.5520923733711243, 0.5722600817680359]\n", + "[0.6126022338867188, 0.6025593876838684, 0.6062167882919312, 0.590415894985199]\n", + "[0.5972431898117065, 0.6065744161605835, 0.5624099969863892, 0.5533841848373413]\n", + "[0.3763587474822998, 0.38644251227378845, 0.38913318514823914, 0.3894616663455963]\n", + "[0.5865094661712646, 0.6289970278739929, 0.5788248777389526, 0.6186979413032532]\n", + "[0.5326673984527588, 0.5243095755577087, 0.5632655024528503, 0.5289515256881714]\n", + "[0.19782941043376923, 0.20590849220752716, 0.22762583196163177, 0.2098097950220108]\n", + "[0.19806724786758423, 0.19745582342147827, 0.20549628138542175, 0.18466222286224365]\n", + "[0.25458434224128723, 0.18324819207191467, 0.23860758543014526, 0.20520493388175964]\n", + "[0.15495185554027557, 0.1358792781829834, 0.15504902601242065, 0.1412031352519989]\n", + "[0.2094101756811142, 0.22666901350021362, 0.2296709269285202, 0.2293078452348709]\n", + "[0.14414487779140472, 0.18493568897247314, 0.15798132121562958, 0.1553737223148346]\n", + "[0.3125145435333252, 0.34167563915252686, 0.3595379590988159, 0.30741479992866516]\n", + "[0.9944444298744202, 0.9973958134651184, 1.0, 0.992003858089447]\n", + "[0.14660334587097168, 0.1718081682920456, 0.14398722350597382, 0.1736016422510147]\n", + "[0.16525577008724213, 0.18895268440246582, 0.18677422404289246, 0.18417195975780487]\n", + "[0.16595692932605743, 0.15873712301254272, 0.12828075885772705, 0.20437122881412506]\n", + "[0.9972221851348877, 0.9887188673019409, 1.0, 0.9944416880607605]\n", + "[0.28039950132369995, 0.3251253366470337, 0.26776012778282166, 0.3067363500595093]\n", + "[0.13132134079933167, 0.1585806906223297, 0.17244139313697815, 0.15445834398269653]\n", + "[0.9974489808082581, 0.9972222447395325, 1.0, 1.0]\n", + "[0.9813618063926697, 0.9855709671974182, 0.9862667322158813, 0.9833619594573975]\n", + "[0.3684421181678772, 0.3118445873260498, 0.3227684199810028, 0.30877965688705444]\n", + "[0.34623202681541443, 0.4225909113883972, 0.36514344811439514, 0.333371102809906]\n", + "[0.42379438877105713, 0.3644249737262726, 0.42728322744369507, 0.4308597445487976]\n", + "[0.2062796801328659, 0.2027030885219574, 0.1734040528535843, 0.1916411817073822]\n", + "[0.2688784599304199, 0.2517397999763489, 0.2806702256202698, 0.26901960372924805]\n", + "[0.4165404140949249, 0.4560262858867645, 0.39322224259376526, 0.4329276382923126]\n", + "[0.35111939907073975, 0.3598441481590271, 0.406088262796402, 0.37301379442214966]\n", + "[0.36044371128082275, 0.3645799160003662, 0.34945979714393616, 0.3670222759246826]\n", + "[0.38337206840515137, 0.3928702771663666, 0.34728705883026123, 0.37210872769355774]\n", + "[0.3444420099258423, 0.3561355471611023, 0.30426666140556335, 0.3705141246318817]\n", + "[0.18858927488327026, 0.20577572286128998, 0.22415180504322052, 0.21682187914848328]\n", + "[0.5101752281188965, 0.5069476962089539, 0.5385801792144775, 0.5051835179328918]\n", + "[0.5233277678489685, 0.46968215703964233, 0.5046765208244324, 0.479245126247406]\n", + "[0.4874393045902252, 0.5312429666519165, 0.5417749881744385, 0.5227494835853577]\n", + "[0.393070250749588, 0.3874262571334839, 0.3672422766685486, 0.3621504008769989]\n", + "[0.49166348576545715, 0.5164161920547485, 0.4773522615432739, 0.49030739068984985]\n", + "[0.5315451622009277, 0.4983656704425812, 0.5430636405944824, 0.5154328942298889]\n", + "[0.5309330224990845, 0.5598341822624207, 0.4669066071510315, 0.5300742387771606]\n", + "[0.2024272233247757, 0.18162399530410767, 0.19697585701942444, 0.19435057044029236]\n", + "[0.31873419880867004, 0.237442284822464, 0.23963886499404907, 0.33582061529159546]\n", + "[0.31009864807128906, 0.34169280529022217, 0.30313408374786377, 0.32505688071250916]\n", + "[0.543937087059021, 0.550885021686554, 0.5618935823440552, 0.5325040817260742]\n", + "[0.6996849775314331, 0.7311780452728271, 0.7614628076553345, 0.7431934475898743]\n", + "[0.18713241815567017, 0.23997490108013153, 0.23007433116436005, 0.1644536554813385]\n", + "[0.33610254526138306, 0.3116987645626068, 0.30500224232673645, 0.3032552897930145]\n", + "[0.589291512966156, 0.6572640538215637, 0.6436188220977783, 0.6347774267196655]\n", + "[0.19566130638122559, 0.21890467405319214, 0.21113188564777374, 0.22492064535617828]\n", + "[0.3605664074420929, 0.4148728847503662, 0.394875168800354, 0.41635364294052124]\n", + "[0.42021673917770386, 0.415746808052063, 0.3920797109603882, 0.4222032129764557]\n", + "[0.20213638246059418, 0.2387874573469162, 0.20157989859580994, 0.20571860671043396]\n", + "[0.18075065314769745, 0.15059779584407806, 0.14327998459339142, 0.13520555198192596]\n", + "[0.4690476059913635, 0.4218270182609558, 0.3828168511390686, 0.39691463112831116]\n", + "[0.27729591727256775, 0.3225421607494354, 0.26235270500183105, 0.27994367480278015]\n", + "[0.6028085947036743, 0.6019481420516968, 0.6298462152481079, 0.6510507464408875]\n", + "[0.5265709161758423, 0.5378348231315613, 0.542244553565979, 0.5638861656188965]\n", + "[0.5420366525650024, 0.5651493072509766, 0.5368614196777344, 0.5680820941925049]\n", + "[0.5098525285720825, 0.42875510454177856, 0.46552133560180664, 0.4317290186882019]\n", + "[0.57844477891922, 0.540835976600647, 0.5819700956344604, 0.5159620046615601]\n", + "[0.5082056522369385, 0.5408384799957275, 0.5216315388679504, 0.5072689652442932]\n", + "[0.38556843996047974, 0.4115341901779175, 0.4322015643119812, 0.39021408557891846]\n", + "[0.5019481182098389, 0.48192912340164185, 0.453818678855896, 0.45332953333854675]\n", + "[0.6030269265174866, 0.5501107573509216, 0.6091071963310242, 0.5629714727401733]\n", + "[0.477934330701828, 0.5414779186248779, 0.49773532152175903, 0.4879935085773468]\n", + "[0.602477490901947, 0.5901369452476501, 0.617715060710907, 0.5974140167236328]\n", + "[0.5307651162147522, 0.5424694418907166, 0.5721993446350098, 0.5592167377471924]\n", + "[0.5306847095489502, 0.5479288101196289, 0.5052642822265625, 0.546642005443573]\n", + "[0.5174235105514526, 0.5179710388183594, 0.4883713722229004, 0.4966546297073364]\n", + "[0.527072548866272, 0.5244625806808472, 0.5166078805923462, 0.5333196520805359]\n", + "[0.5520291328430176, 0.5273285508155823, 0.5604373216629028, 0.5496343374252319]\n", + "[0.5448011159896851, 0.5355649590492249, 0.5575582981109619, 0.5570690035820007]\n", + "[0.5429882407188416, 0.5418543219566345, 0.5112175345420837, 0.5103229284286499]\n", + "[0.5163618326187134, 0.5311980247497559, 0.5538889765739441, 0.5239802002906799]\n", + "[0.5120692253112793, 0.5057922005653381, 0.5096549987792969, 0.5314881205558777]\n", + "[0.49346479773521423, 0.5609902143478394, 0.5014853477478027, 0.5325695872306824]\n", + "[0.5326216220855713, 0.5454283952713013, 0.5123083591461182, 0.5370604991912842]\n", + "[0.18763676285743713, 0.210552379488945, 0.18975338339805603, 0.2054455429315567]\n", + "[0.20630916953086853, 0.18869780004024506, 0.17044900357723236, 0.1661846786737442]\n", + "[0.1995631903409958, 0.16772261261940002, 0.21891199052333832, 0.21285338699817657]\n", + "[0.21289753913879395, 0.22302500903606415, 0.18594257533550262, 0.22728724777698517]\n", + "[0.15762194991111755, 0.21085691452026367, 0.2422204315662384, 0.1993357092142105]\n", + "[0.18826502561569214, 0.2169654816389084, 0.19923987984657288, 0.21772325038909912]\n", + "[0.2170456498861313, 0.2125859260559082, 0.20077945291996002, 0.18784920871257782]\n", + "[0.1955537497997284, 0.20813533663749695, 0.2016129344701767, 0.2273794263601303]\n", + "[0.23213432729244232, 0.19391702115535736, 0.20712800323963165, 0.2223300039768219]\n", + "[0.18701978027820587, 0.1868339329957962, 0.2456853985786438, 0.19995170831680298]\n", + "[0.20844662189483643, 0.24667444825172424, 0.23967009782791138, 0.19165484607219696]\n", + "[0.8349955081939697, 0.8161488771438599, 0.8203724026679993, 0.8402131199836731]\n", + "[0.8746963143348694, 0.863409161567688, 0.8578478097915649, 0.8801273703575134]\n", + "[0.8308873772621155, 0.838620126247406, 0.7760725021362305, 0.8256974816322327]\n", + "[0.8654009699821472, 0.8622931838035583, 0.886986255645752, 0.8973644375801086]\n", + "[0.7502167224884033, 0.7445107698440552, 0.7767027616500854, 0.7669677734375]\n", + "[0.895545482635498, 0.9007347822189331, 0.8924840688705444, 0.8767527341842651]\n", + "[0.8582656383514404, 0.8352031111717224, 0.8492814302444458, 0.8122458457946777]\n", + "[0.8123821020126343, 0.7974563837051392, 0.8133588433265686, 0.7611551880836487]\n", + "[0.7891252040863037, 0.8171488642692566, 0.8675050139427185, 0.8410430550575256]\n", + "[0.864621639251709, 0.8227761387825012, 0.8355321884155273, 0.8333812355995178]\n", + "[0.7952250242233276, 0.8001744747161865, 0.7981180548667908, 0.7472419142723083]\n", + "[0.3224293291568756, 0.35858747363090515, 0.34777748584747314, 0.33814093470573425]\n", + "[0.354419469833374, 0.3387490212917328, 0.32778534293174744, 0.330203652381897]\n", + "[0.34095099568367004, 0.32966235280036926, 0.3223330080509186, 0.3323403298854828]\n", + "[0.395541250705719, 0.3510882258415222, 0.3338196873664856, 0.26649194955825806]\n", + "[0.3577072024345398, 0.3626304268836975, 0.38757067918777466, 0.3564835786819458]\n", + "[0.3470805883407593, 0.3765595555305481, 0.35440686345100403, 0.333291232585907]\n", + "[0.35325387120246887, 0.3600059747695923, 0.3853990137577057, 0.3701213598251343]\n", + "[0.3225913345813751, 0.3895531892776489, 0.35997462272644043, 0.3117005228996277]\n", + "[0.3096691966056824, 0.3540995419025421, 0.3616379201412201, 0.3385268449783325]\n", + "[0.3715231418609619, 0.38158687949180603, 0.4099046289920807, 0.3387726843357086]\n", + "[0.37927377223968506, 0.37630510330200195, 0.3673678934574127, 0.41094693541526794]\n", + "[0.5776363015174866, 0.5391324162483215, 0.5979293584823608, 0.6304411888122559]\n", + "[0.39903032779693604, 0.39227354526519775, 0.40656179189682007, 0.4145367741584778]\n", + "[0.5583702325820923, 0.5450342893600464, 0.5827817916870117, 0.5585649609565735]\n", + "[0.478631854057312, 0.4325543940067291, 0.4541405439376831, 0.48773977160453796]\n", + "[0.5197678208351135, 0.5288695096969604, 0.5246711373329163, 0.5169639587402344]\n", + "[0.43253639340400696, 0.3932223916053772, 0.4270443022251129, 0.3813832402229309]\n", + "[0.5244766473770142, 0.5469978451728821, 0.5586583018302917, 0.5248904228210449]\n", + "[0.467222660779953, 0.47219765186309814, 0.4052547514438629, 0.4652095139026642]\n", + "[0.532312273979187, 0.534344494342804, 0.5223104953765869, 0.508434534072876]\n", + "[0.3621625602245331, 0.3528980314731598, 0.37644416093826294, 0.38873499631881714]\n", + "[0.5345563888549805, 0.5303804278373718, 0.5356730222702026, 0.5003635883331299]\n", + "[0.19671806693077087, 0.1971314400434494, 0.22888299822807312, 0.17823633551597595]\n", + "[0.20474451780319214, 0.2116623818874359, 0.12826351821422577, 0.18698646128177643]\n", + "[0.17336468398571014, 0.176590695977211, 0.21463409066200256, 0.20288139581680298]\n", + "[0.16201436519622803, 0.1923508495092392, 0.16970738768577576, 0.2063041478395462]\n", + "[0.1701522022485733, 0.1664905548095703, 0.20323456823825836, 0.18029378354549408]\n", + "[0.5730825066566467, 0.5556427240371704, 0.5420126914978027, 0.5153676271438599]\n", + "[0.5012784600257874, 0.53324294090271, 0.5449913144111633, 0.5903213024139404]\n", + "[0.542262852191925, 0.5471282601356506, 0.572610080242157, 0.5625598430633545]\n", + "[0.5630063414573669, 0.5699700713157654, 0.5419965982437134, 0.5475306510925293]\n", + "[0.5755031108856201, 0.5495107173919678, 0.5615811944007874, 0.5587393045425415]\n", + "[0.5812658071517944, 0.5445702075958252, 0.5760201215744019, 0.5035814642906189]\n", + "[0.5610172152519226, 0.5836559534072876, 0.5339067578315735, 0.639653742313385]\n", + "[0.5548776388168335, 0.5882102847099304, 0.5389975905418396, 0.5579285025596619]\n", + "[0.5222196578979492, 0.5273220539093018, 0.6352534294128418, 0.5390893220901489]\n", + "[0.5858171582221985, 0.5592267513275146, 0.566275417804718, 0.6246364712715149]\n", + "[0.6177546381950378, 0.5553916692733765, 0.5549125671386719, 0.5857565999031067]\n", + "[0.27870047092437744, 0.29440516233444214, 0.3245006799697876, 0.3113363981246948]\n", + "[0.21083641052246094, 0.30821019411087036, 0.19458456337451935, 0.26397669315338135]\n", + "[0.2453043907880783, 0.3287269175052643, 0.3123640716075897, 0.30285823345184326]\n", + "[0.29738596081733704, 0.3056788146495819, 0.27230304479599, 0.3287312090396881]\n", + "[0.30871468782424927, 0.27092623710632324, 0.320071816444397, 0.3083830177783966]\n", + "[0.2227446436882019, 0.26121512055397034, 0.2580094635486603, 0.2565876245498657]\n", + "[0.46672531962394714, 0.4636205732822418, 0.47283732891082764, 0.4954107403755188]\n", + "[0.3300245702266693, 0.3222999572753906, 0.2937769889831543, 0.25570014119148254]\n", + "[0.24963362514972687, 0.26771080493927, 0.28864288330078125, 0.26268821954727173]\n", + "[0.4080485999584198, 0.3693547248840332, 0.4829787611961365, 0.4534253478050232]\n", + "[0.43018102645874023, 0.4056539535522461, 0.4378630816936493, 0.4097312390804291]\n", + "[0.9861630797386169, 0.9796893000602722, 0.9970238208770752, 0.9970930218696594]\n", + "[0.9861161112785339, 0.9922916889190674, 0.9892338514328003, 0.9898731708526611]\n", + "[1.0, 0.98957359790802, 0.986042320728302, 0.9810718894004822]\n", + "[0.9863842129707336, 0.989167332649231, 0.9946590662002563, 0.9774537086486816]\n", + "[0.9943642616271973, 0.9974489808082581, 0.99425208568573, 0.9888701438903809]\n", + "[0.5811147093772888, 0.5374430418014526, 0.5645171403884888, 0.5443990230560303]\n", + "[0.5397664904594421, 0.5822455883026123, 0.5602626800537109, 0.5521751642227173]\n", + "[0.5427582263946533, 0.5487527847290039, 0.5307509899139404, 0.5533721446990967]\n", + "[0.5926050543785095, 0.5470378994941711, 0.586412787437439, 0.5524742603302002]\n", + "[0.5565863251686096, 0.6269145607948303, 0.5406914353370667, 0.5632944107055664]\n", + "[0.17609646916389465, 0.15521425008773804, 0.2170354425907135, 0.2179224044084549]\n", + "[0.20765908062458038, 0.19496220350265503, 0.1694810837507248, 0.17116548120975494]\n", + "[0.20605359971523285, 0.19992858171463013, 0.23062315583229065, 0.19163896143436432]\n", + "[0.16932609677314758, 0.22229190170764923, 0.1933053433895111, 0.19797691702842712]\n", + "[0.18037821352481842, 0.22613248229026794, 0.18756969273090363, 0.1794033795595169]\n", + "[0.21769605576992035, 0.1977454125881195, 0.18650907278060913, 0.20734840631484985]\n", + "[0.1978883594274521, 0.20907896757125854, 0.2055046111345291, 0.19698816537857056]\n", + "[0.19512394070625305, 0.2010953575372696, 0.20163020491600037, 0.23031902313232422]\n", + "[0.17224997282028198, 0.1964224874973297, 0.19069227576255798, 0.21640092134475708]\n", + "[0.18273517489433289, 0.1939641237258911, 0.20606084167957306, 0.19947485625743866]\n", + "[0.21706326305866241, 0.17899180948734283, 0.17134520411491394, 0.20815370976924896]\n", + "[0.22588269412517548, 0.21920228004455566, 0.19801144301891327, 0.1785804033279419]\n", + "[0.160224050283432, 0.15113182365894318, 0.1486671268939972, 0.13393396139144897]\n", + "[0.19850698113441467, 0.17737840116024017, 0.1965462863445282, 0.1861543506383896]\n", + "[0.20884257555007935, 0.21204359829425812, 0.27145105600357056, 0.1884351372718811]\n", + "[0.15444888174533844, 0.16021409630775452, 0.15974649786949158, 0.17891547083854675]\n", + "[0.22440554201602936, 0.2029453068971634, 0.2090878188610077, 0.2249218225479126]\n", + "[0.194733664393425, 0.15128988027572632, 0.14347077906131744, 0.13605859875679016]\n", + "[0.17082954943180084, 0.1468101143836975, 0.17735160887241364, 0.16068649291992188]\n", + "[0.2196701616048813, 0.2441820353269577, 0.215567484498024, 0.23797006905078888]\n", + "[0.344974160194397, 0.26825952529907227, 0.3092135787010193, 0.24348405003547668]\n", + "[0.2791842818260193, 0.3072449862957001, 0.3240032196044922, 0.2758732736110687]\n", + "[0.6593149304389954, 0.682826578617096, 0.684863269329071, 0.6949784159660339]\n", + "[0.663699746131897, 0.7052326798439026, 0.686244547367096, 0.732745885848999]\n", + "[0.6370418667793274, 0.6473645567893982, 0.6629021167755127, 0.6643621921539307]\n", + "[0.6775830388069153, 0.6636989116668701, 0.6720384955406189, 0.69785475730896]\n", + "[0.6313642263412476, 0.7500858902931213, 0.7190630435943604, 0.6970643997192383]\n", + "[0.6447982788085938, 0.6596426963806152, 0.6288817524909973, 0.6059902906417847]\n", + "[0.6846655607223511, 0.6712719798088074, 0.6687341332435608, 0.6820598244667053]\n", + "[0.662162184715271, 0.6159698963165283, 0.6650019288063049, 0.6346346139907837]\n", + "[0.6560661196708679, 0.6863059401512146, 0.680606484413147, 0.6631835699081421]\n", + "[0.6850658059120178, 0.6866495609283447, 0.6711989641189575, 0.6655921936035156]\n", + "[0.6985520124435425, 0.6787790060043335, 0.6571796536445618, 0.6665186882019043]\n", + "[0.31060248613357544, 0.33438894152641296, 0.27232977747917175, 0.3156817853450775]\n", + "[0.19427914917469025, 0.1881060004234314, 0.22171661257743835, 0.22002673149108887]\n", + "[0.18980450928211212, 0.22663380205631256, 0.1554078310728073, 0.20406410098075867]\n", + "[0.13112057745456696, 0.1677216738462448, 0.14903537929058075, 0.1433452069759369]\n", + "[0.1626480668783188, 0.19126290082931519, 0.18262937664985657, 0.21159717440605164]\n", + "[0.16679775714874268, 0.19336220622062683, 0.19324222207069397, 0.13599038124084473]\n", + "[0.15454281866550446, 0.1784149557352066, 0.14795805513858795, 0.19376111030578613]\n", + "[0.1735648214817047, 0.17679038643836975, 0.1735231727361679, 0.23028838634490967]\n", + "[0.23177088797092438, 0.2939380407333374, 0.27831706404685974, 0.2636861801147461]\n", + "[0.33360031247138977, 0.3058174252510071, 0.3004991412162781, 0.32172590494155884]\n", + "[0.17170153558254242, 0.1606312394142151, 0.206351175904274, 0.1742973029613495]\n", + "[0.20366479456424713, 0.17158769071102142, 0.16284501552581787, 0.1821386069059372]\n", + "[0.6213334202766418, 0.6877468228340149, 0.6389334201812744, 0.6728760600090027]\n", + "[0.27816587686538696, 0.2766767144203186, 0.30666330456733704, 0.2625415325164795]\n", + "[0.29224568605422974, 0.24417702853679657, 0.3033069372177124, 0.25001153349876404]\n", + "[0.3303850591182709, 0.28968346118927, 0.2893557548522949, 0.30564984679222107]\n", + "[0.14954744279384613, 0.1608707308769226, 0.1886005848646164, 0.15422303974628448]\n", + "[0.1455857902765274, 0.15669728815555573, 0.1813209503889084, 0.17090187966823578]\n", + "[0.2631961703300476, 0.26347848773002625, 0.3148362636566162, 0.28601858019828796]\n", + "[0.5255413055419922, 0.5310784578323364, 0.4403817057609558, 0.5466228723526001]\n", + "[0.17585700750350952, 0.20007559657096863, 0.18718232214450836, 0.21627041697502136]\n", + "[0.2663724720478058, 0.2943808436393738, 0.313761830329895, 0.32177668809890747]\n", + "[0.16913911700248718, 0.1434376835823059, 0.14597028493881226, 0.15903441607952118]\n", + "[0.14025111496448517, 0.11348122358322144, 0.14761361479759216, 0.1635204255580902]\n", + "[0.14416247606277466, 0.13296346366405487, 0.1427948921918869, 0.10989010334014893]\n", + "[0.12822607159614563, 0.12852464616298676, 0.1703614890575409, 0.15923094749450684]\n", + "[0.14017556607723236, 0.13054203987121582, 0.13487935066223145, 0.15805292129516602]\n", + "[0.11140576750040054, 0.14477890729904175, 0.09122070670127869, 0.10864850133657455]\n", + "[0.08134038001298904, 0.1418948471546173, 0.1457807421684265, 0.07828962802886963]\n", + "[0.13786719739437103, 0.11850728839635849, 0.13501301407814026, 0.1203160434961319]\n", + "[0.15537169575691223, 0.17670783400535583, 0.1401127725839615, 0.13459213078022003]\n", + "[0.13617242872714996, 0.15272292494773865, 0.13610555231571198, 0.1368548423051834]\n", + "[0.1534375548362732, 0.1686616837978363, 0.16247738897800446, 0.1737479716539383]\n", + "[0.20878419280052185, 0.21437084674835205, 0.18490754067897797, 0.1855347752571106]\n", + "[0.9691495895385742, 0.9694321751594543, 0.9675165414810181, 0.9621143937110901]\n", + "[0.9132397174835205, 0.9094038605690002, 0.9339773058891296, 0.9243291020393372]\n", + "[0.9835573434829712, 0.9765459299087524, 0.9721854329109192, 0.9727842807769775]\n", + "[0.9568730592727661, 0.9522188901901245, 0.965583086013794, 0.9578940272331238]\n", + "[0.13802021741867065, 0.16834551095962524, 0.16093021631240845, 0.14850768446922302]\n", + "[0.984097957611084, 0.9862265586853027, 0.9787496328353882, 0.9840677380561829]\n", + "[0.9153265953063965, 0.9345902800559998, 0.9313938021659851, 0.94975346326828]\n", + "[0.22664618492126465, 0.24914398789405823, 0.2276877909898758, 0.19914257526397705]\n", + "[0.9723155498504639, 0.9705859422683716, 0.9720821976661682, 0.9676481485366821]\n", + "[0.9803571701049805, 0.9806316494941711, 0.9742333889007568, 0.9727967381477356]\n", + "[0.22204744815826416, 0.24843069911003113, 0.23447422683238983, 0.21706999838352203]\n", + "[0.16834373772144318, 0.22857391834259033, 0.14862217009067535, 0.14865756034851074]\n", + "[0.19575242698192596, 0.1729121059179306, 0.16785867512226105, 0.2026698887348175]\n", + "[0.16304272413253784, 0.1581004112958908, 0.1898617297410965, 0.16823041439056396]\n", + "[0.18463024497032166, 0.15435178577899933, 0.19693012535572052, 0.13370031118392944]\n", + "[0.22557859122753143, 0.18670180439949036, 0.21629121899604797, 0.17575913667678833]\n", + "[0.19946175813674927, 0.19281741976737976, 0.20280641317367554, 0.19208574295043945]\n", + "[0.16201500594615936, 0.18595337867736816, 0.21383067965507507, 0.19401898980140686]\n", + "[0.17852196097373962, 0.21394667029380798, 0.18985524773597717, 0.1393927037715912]\n", + "[0.17872869968414307, 0.182552769780159, 0.17788715660572052, 0.1540711373090744]\n", + "[0.17451222240924835, 0.20976480841636658, 0.20470082759857178, 0.18702103197574615]\n", + "[0.6179402470588684, 0.6042780876159668, 0.6057567000389099, 0.6243070960044861]\n", + "[0.6785675883293152, 0.6978363394737244, 0.715904951095581, 0.6714023947715759]\n", + "[0.14552359282970428, 0.15179739892482758, 0.13404323160648346, 0.136829674243927]\n", + "[0.6520766019821167, 0.6045693159103394, 0.6610087156295776, 0.6220174431800842]\n", + "[0.16574352979660034, 0.14672420918941498, 0.12889520823955536, 0.1310560256242752]\n", + "[0.20875753462314606, 0.26062455773353577, 0.22800637781620026, 0.2172650247812271]\n", + "[0.13944216072559357, 0.14196297526359558, 0.13306397199630737, 0.15273705124855042]\n", + "[0.32390087842941284, 0.3432692289352417, 0.28601235151290894, 0.30597513914108276]\n", + "[0.2303265482187271, 0.21815352141857147, 0.22618542611598969, 0.21536198258399963]\n", + "[0.19681435823440552, 0.22231054306030273, 0.25441592931747437, 0.2765488028526306]\n", + "[0.2171146273612976, 0.24712702631950378, 0.21978957951068878, 0.18548430502414703]\n", + "[0.38332003355026245, 0.39445459842681885, 0.37454068660736084, 0.40658944845199585]\n", + "[0.3990297317504883, 0.3655645549297333, 0.42566484212875366, 0.4025135636329651]\n", + "[0.1993509829044342, 0.20599931478500366, 0.22074709832668304, 0.18676991760730743]\n", + "[0.348862886428833, 0.3352450132369995, 0.42169076204299927, 0.31707364320755005]\n", + "[0.43747174739837646, 0.39326468110084534, 0.44761526584625244, 0.4133610725402832]\n", + "[0.3633976876735687, 0.36846375465393066, 0.4312925934791565, 0.3392130136489868]\n", + "[0.4195074141025543, 0.46644264459609985, 0.4026296138763428, 0.4202398359775543]\n", + "[0.412077933549881, 0.46053898334503174, 0.4244347810745239, 0.4191710352897644]\n", + "[0.39218640327453613, 0.4339078664779663, 0.421846866607666, 0.4621455669403076]\n", + "[0.17799881100654602, 0.1938740611076355, 0.21854351460933685, 0.19011643528938293]\n", + "[0.4270343780517578, 0.4052272140979767, 0.4278230667114258, 0.3906595706939697]\n", + "[0.5032950639724731, 0.40759438276290894, 0.4672616720199585, 0.45622390508651733]\n", + "[0.44418543577194214, 0.4260656237602234, 0.44303518533706665, 0.45013344287872314]\n", + "[0.4231535792350769, 0.42035800218582153, 0.4251980185508728, 0.41387712955474854]\n", + "[0.46898218989372253, 0.424429714679718, 0.46085089445114136, 0.4541985094547272]\n", + "[0.4257943630218506, 0.44717180728912354, 0.4554383456707001, 0.4845927357673645]\n", + "[0.4710650146007538, 0.42129215598106384, 0.4411783516407013, 0.38657212257385254]\n", + "[0.4412187933921814, 0.48522311449050903, 0.4803696870803833, 0.42253831028938293]\n", + "[0.4308358430862427, 0.4448922574520111, 0.42883002758026123, 0.4171297550201416]\n", + "[0.44083499908447266, 0.4485093951225281, 0.5018276572227478, 0.4305206835269928]\n", + "[0.4406742751598358, 0.4174998104572296, 0.4473513662815094, 0.49425917863845825]\n", + "[0.4226425588130951, 0.44952648878097534, 0.3807377517223358, 0.4500703513622284]\n", + "[0.2777051627635956, 0.3083535432815552, 0.25543609261512756, 0.2956981658935547]\n", + "[0.2867234945297241, 0.24495472013950348, 0.29342857003211975, 0.25845423340797424]\n", + "[0.4354016184806824, 0.42386341094970703, 0.4039190411567688, 0.4406498670578003]\n", + "[0.33052951097488403, 0.34869036078453064, 0.37137070298194885, 0.3507721722126007]\n", + "[0.4324489235877991, 0.3874463737010956, 0.4095235764980316, 0.4044724106788635]\n", + "[0.28962063789367676, 0.3145241141319275, 0.2780147194862366, 0.2516074478626251]\n", + "[0.3018192648887634, 0.3228883147239685, 0.3897945284843445, 0.33772706985473633]\n", + "[0.2872720956802368, 0.2941972017288208, 0.3021266460418701, 0.31964847445487976]\n", + "[0.27011287212371826, 0.24636825919151306, 0.2785937190055847, 0.2900775372982025]\n", + "[0.2688279151916504, 0.2936467230319977, 0.3178064823150635, 0.2652462422847748]\n", + "[0.20746925473213196, 0.2624681890010834, 0.22083425521850586, 0.21270062029361725]\n", + "[0.9360041618347168, 0.9597134590148926, 0.924098551273346, 0.9473956227302551]\n", + "[0.9313422441482544, 0.9424387812614441, 0.9466112852096558, 0.9035748839378357]\n", + "[0.9319610595703125, 0.9537767171859741, 0.9321363568305969, 0.9271811246871948]\n", + "[0.9447091817855835, 0.931546688079834, 0.9449124336242676, 0.9381204843521118]\n", + "[0.9368611574172974, 0.9255252480506897, 0.957726240158081, 0.9205245971679688]\n", + "[0.9258745312690735, 0.8932797908782959, 0.91267329454422, 0.9220561385154724]\n", + "[0.9045678973197937, 0.9482312798500061, 0.9178823232650757, 0.9474787712097168]\n", + "[0.9455412030220032, 0.9150219559669495, 0.9124441742897034, 0.9045332074165344]\n", + "[0.9426273107528687, 0.9503132700920105, 0.9306268692016602, 0.9243436455726624]\n", + "[0.21010808646678925, 0.16631683707237244, 0.19536259770393372, 0.19609388709068298]\n", + "[0.8002674579620361, 0.8511348962783813, 0.8323103189468384, 0.786261796951294]\n", + "[0.28481540083885193, 0.2669524848461151, 0.32600337266921997, 0.23632903397083282]\n", + "[0.2669212818145752, 0.2886778712272644, 0.2532913386821747, 0.29255184531211853]\n", + "[0.29854950308799744, 0.28320127725601196, 0.265622079372406, 0.24710513651371002]\n", + "[0.27574577927589417, 0.2714294195175171, 0.2628481686115265, 0.2365664541721344]\n", + "[0.4063892066478729, 0.3467203378677368, 0.3676634430885315, 0.37872621417045593]\n", + "[0.2045552283525467, 0.17902202904224396, 0.22024966776371002, 0.23294496536254883]\n", + "[0.18667861819267273, 0.22659607231616974, 0.19719761610031128, 0.2557688057422638]\n", + "[0.279461532831192, 0.2465081512928009, 0.30028846859931946, 0.3209645748138428]\n", + "[0.23878341913223267, 0.22471249103546143, 0.2127617746591568, 0.22318288683891296]\n", + "[0.2873058617115021, 0.26914161443710327, 0.23918651044368744, 0.2752855122089386]\n", + "[0.36273035407066345, 0.38994845747947693, 0.3639914393424988, 0.39372941851615906]\n", + "[0.1493663787841797, 0.16662748157978058, 0.1513337790966034, 0.1626216471195221]\n", + "[0.11920740455389023, 0.12376931309700012, 0.15337452292442322, 0.15494471788406372]\n", + "[0.19786596298217773, 0.17059925198554993, 0.1656692773103714, 0.1660846471786499]\n", + "[0.1399538666009903, 0.1736287772655487, 0.18132904171943665, 0.13168573379516602]\n", + "[0.1316175013780594, 0.16434219479560852, 0.13260288536548615, 0.17477136850357056]\n", + "[0.19088710844516754, 0.16871421039104462, 0.20119453966617584, 0.19318236410617828]\n", + "[0.22026024758815765, 0.22395643591880798, 0.18094293773174286, 0.19913476705551147]\n", + "[0.1988787055015564, 0.11536093801259995, 0.17586897313594818, 0.18048931658267975]\n", + "[0.4867197871208191, 0.5157669186592102, 0.4632609188556671, 0.4659976065158844]\n", + "[0.5418662428855896, 0.5983974933624268, 0.640194833278656, 0.5951949954032898]\n", + "[0.19582419097423553, 0.23140224814414978, 0.21151307225227356, 0.2254796326160431]\n", + "[0.2954285442829132, 0.27236494421958923, 0.2620070278644562, 0.27959558367729187]\n", + "[0.37154507637023926, 0.43697860836982727, 0.36891165375709534, 0.3743878901004791]\n", + "[0.18013620376586914, 0.1581251323223114, 0.19622673094272614, 0.15987785160541534]\n", + "[0.5700365304946899, 0.5785804390907288, 0.5925113558769226, 0.5573380589485168]\n", + "[0.16260367631912231, 0.16798900067806244, 0.14772272109985352, 0.15220201015472412]\n", + "[0.4949832558631897, 0.45272940397262573, 0.47171157598495483, 0.4821682274341583]\n", + "[0.6396691799163818, 0.6408839225769043, 0.6574499011039734, 0.6421056985855103]\n", + "[0.3580463230609894, 0.3593134880065918, 0.32147663831710815, 0.40900251269340515]\n", + "[0.39650407433509827, 0.37303945422172546, 0.37792328000068665, 0.38869336247444153]\n", + "[0.35303589701652527, 0.35910555720329285, 0.4011283814907074, 0.3700748383998871]\n", + "[0.35282769799232483, 0.3478529751300812, 0.36367541551589966, 0.33777034282684326]\n", + "[0.32100871205329895, 0.3418487310409546, 0.36525285243988037, 0.3226260244846344]\n", + "[0.36307209730148315, 0.36938533186912537, 0.3837238550186157, 0.3641766309738159]\n", + "[0.35587212443351746, 0.3890887498855591, 0.3847445845603943, 0.37019193172454834]\n", + "[0.3637479543685913, 0.3596450090408325, 0.36049526929855347, 0.3458811938762665]\n", + "[0.6557171940803528, 0.6750141978263855, 0.6536659598350525, 0.6842095255851746]\n", + "[0.26934924721717834, 0.27883604168891907, 0.279464989900589, 0.2586219310760498]\n", + "[0.1884281039237976, 0.18467947840690613, 0.16642625629901886, 0.13975219428539276]\n", + "[0.23484545946121216, 0.2396838217973709, 0.2767428755760193, 0.22422973811626434]\n", + "[0.2353208065032959, 0.2594984173774719, 0.3112666606903076, 0.2325960099697113]\n", + "[0.15293022990226746, 0.17186275124549866, 0.16418428719043732, 0.17790280282497406]\n", + "[0.15081577003002167, 0.15458467602729797, 0.16888372600078583, 0.1686343103647232]\n", + "[0.2633205056190491, 0.27071282267570496, 0.2443971037864685, 0.30060654878616333]\n", + "[0.19600161910057068, 0.20141001045703888, 0.21351464092731476, 0.1978643536567688]\n", + "[0.19250689446926117, 0.1849128156900406, 0.19208019971847534, 0.18746232986450195]\n", + "[0.31484928727149963, 0.36227846145629883, 0.3037271499633789, 0.3086164891719818]\n", + "[0.4088159203529358, 0.35704725980758667, 0.3792577087879181, 0.3827577531337738]\n", + "[0.6424038410186768, 0.6350648403167725, 0.6589748859405518, 0.6755733489990234]\n", + "[0.5259003639221191, 0.48095691204071045, 0.5015361309051514, 0.5369397401809692]\n", + "[0.5514841079711914, 0.5457069277763367, 0.5875497460365295, 0.5789076685905457]\n", + "[0.5094632506370544, 0.5362293720245361, 0.5158306360244751, 0.5656619668006897]\n", + "[0.6021503210067749, 0.5782595872879028, 0.568436861038208, 0.5809017419815063]\n", + "[0.42121079564094543, 0.38664698600769043, 0.42202121019363403, 0.40458881855010986]\n", + "[0.6164870262145996, 0.6397402286529541, 0.6501379609107971, 0.6945384740829468]\n", + "[0.3705402612686157, 0.3803049623966217, 0.3526065945625305, 0.3538452684879303]\n", + "[0.523026168346405, 0.5143274068832397, 0.5757799744606018, 0.563602089881897]\n", + "[0.6454547047615051, 0.597875714302063, 0.5906630754470825, 0.5909566283226013]\n", + "[0.6011866331100464, 0.6236585974693298, 0.657243549823761, 0.6233203411102295]\n", + "[0.44991907477378845, 0.37910038232803345, 0.4309543967247009, 0.39502638578414917]\n", + "[0.47010189294815063, 0.3955492079257965, 0.3940126895904541, 0.4587540626525879]\n", + "[0.35929542779922485, 0.36212119460105896, 0.3325841426849365, 0.3932279050350189]\n", + "[0.47052201628685, 0.5262913703918457, 0.48803579807281494, 0.49137577414512634]\n", + "[0.20562946796417236, 0.2052689492702484, 0.1821436882019043, 0.24034808576107025]\n", + "[0.31312569975852966, 0.3200932443141937, 0.27972862124443054, 0.29663583636283875]\n", + "[0.2640196681022644, 0.28268399834632874, 0.325188010931015, 0.2821252644062042]\n", + "[0.29702115058898926, 0.2657560706138611, 0.29328182339668274, 0.2719076871871948]\n", + "[0.34366363286972046, 0.3251219093799591, 0.3049532473087311, 0.3577081859111786]\n", + "[0.24570217728614807, 0.2702605724334717, 0.2375025898218155, 0.2619396150112152]\n", + "[0.3218252658843994, 0.32918617129325867, 0.29523342847824097, 0.3076270520687103]\n", + "[0.1840704381465912, 0.19337943196296692, 0.18807661533355713, 0.16931475698947906]\n", + "[0.8367433547973633, 0.8233336210250854, 0.8216635584831238, 0.7528272271156311]\n", + "[0.2013203352689743, 0.23187649250030518, 0.20114518702030182, 0.2020811140537262]\n", + "[0.6687278151512146, 0.6539495587348938, 0.692958414554596, 0.6654908061027527]\n", + "[0.16457214951515198, 0.1865752637386322, 0.18160918354988098, 0.19384923577308655]\n", + "[0.1745852828025818, 0.22028698027133942, 0.18309414386749268, 0.19675523042678833]\n", + "[0.20234207808971405, 0.2186020165681839, 0.22023490071296692, 0.20275618135929108]\n", + "[0.1554299294948578, 0.22842320799827576, 0.19488660991191864, 0.1890850067138672]\n", + "[0.1591181457042694, 0.19820886850357056, 0.19120025634765625, 0.21627277135849]\n", + "[0.179618701338768, 0.11357146501541138, 0.18112343549728394, 0.1997883915901184]\n", + "[0.20473270118236542, 0.18432535231113434, 0.19188648462295532, 0.1946999430656433]\n", + "[0.1305297464132309, 0.20586137473583221, 0.16235895454883575, 0.15920224785804749]\n", + "[0.16326424479484558, 0.18305321037769318, 0.1680174469947815, 0.17043742537498474]\n", + "[0.20449793338775635, 0.1761423498392105, 0.15877074003219604, 0.1831882745027542]\n", + "[0.1660187542438507, 0.18830592930316925, 0.15322721004486084, 0.1727229803800583]\n", + "[0.13976506888866425, 0.17280206084251404, 0.18339964747428894, 0.17572322487831116]\n", + "[0.3591143786907196, 0.2855299711227417, 0.3384377956390381, 0.35146278142929077]\n", + "[0.2659091651439667, 0.23487983644008636, 0.2697506844997406, 0.2612922787666321]\n", + "[0.33206304907798767, 0.30966922640800476, 0.3530178964138031, 0.337040513753891]\n", + "[0.3892311155796051, 0.34221360087394714, 0.3540918231010437, 0.37913376092910767]\n", + "[0.33198991417884827, 0.27967312932014465, 0.324716180562973, 0.3157944977283478]\n", + "[0.25368544459342957, 0.3087005615234375, 0.30018168687820435, 0.22761476039886475]\n", + "[0.32168248295783997, 0.3577190041542053, 0.35200104117393494, 0.33171507716178894]\n", + "[0.40569981932640076, 0.36135798692703247, 0.39099451899528503, 0.3697553277015686]\n", + "[0.25842565298080444, 0.27454304695129395, 0.26405540108680725, 0.25139638781547546]\n", + "[0.3757648766040802, 0.3743348717689514, 0.39045023918151855, 0.3623627722263336]\n", + "[0.2588479518890381, 0.25581201910972595, 0.24705691635608673, 0.2885738015174866]\n", + "[0.35829827189445496, 0.38097405433654785, 0.34604957699775696, 0.3367179334163666]\n", + "[0.3284934461116791, 0.2930756211280823, 0.26696187257766724, 0.3084738552570343]\n", + "[0.32899245619773865, 0.378865122795105, 0.3796963393688202, 0.39382389187812805]\n", + "[0.24561068415641785, 0.24945975840091705, 0.22283130884170532, 0.23341956734657288]\n", + "[0.391664981842041, 0.3649888336658478, 0.3946388065814972, 0.3931005001068115]\n", + "[0.26465150713920593, 0.22553828358650208, 0.26976829767227173, 0.26396068930625916]\n", + "[0.26819920539855957, 0.2680787146091461, 0.25763794779777527, 0.2840123474597931]\n", + "[0.2862398028373718, 0.30727100372314453, 0.302981436252594, 0.29619574546813965]\n", + "[0.1717955470085144, 0.14245741069316864, 0.12707822024822235, 0.15837635099887848]\n", + "[0.2725023329257965, 0.2676643133163452, 0.29540231823921204, 0.2756447196006775]\n", + "[0.17209689319133759, 0.20561665296554565, 0.1791878491640091, 0.16584759950637817]\n", + "[0.4194307327270508, 0.48320847749710083, 0.43760988116264343, 0.4409867525100708]\n", + "[0.39985793828964233, 0.42720794677734375, 0.4425559341907501, 0.4137187600135803]\n", + "[0.5520897507667542, 0.5172715783119202, 0.542081356048584, 0.492569237947464]\n", + "[0.431931734085083, 0.4669516682624817, 0.41604286432266235, 0.4574781358242035]\n", + "[0.5352573394775391, 0.5341452360153198, 0.4786868691444397, 0.4939996004104614]\n", + "[0.5517960786819458, 0.5400621891021729, 0.5341853499412537, 0.5511519908905029]\n", + "[0.5860855579376221, 0.6208322644233704, 0.5876471996307373, 0.5706737637519836]\n", + "[0.5006188750267029, 0.5242676734924316, 0.5284025073051453, 0.46908310055732727]\n", + "[0.586439847946167, 0.5746606588363647, 0.6373759508132935, 0.5776284337043762]\n", + "[0.4567711353302002, 0.4569658935070038, 0.5087766647338867, 0.42562055587768555]\n", + "[0.5097236633300781, 0.5424243807792664, 0.5128351449966431, 0.5073614120483398]\n", + "[0.48942819237709045, 0.5383530259132385, 0.47556763887405396, 0.45959845185279846]\n", + "[0.49254125356674194, 0.4923833906650543, 0.5109154582023621, 0.5489811897277832]\n", + "[0.5315521359443665, 0.49407970905303955, 0.48372185230255127, 0.5329456329345703]\n", + "[0.5357415676116943, 0.5592091083526611, 0.5675241351127625, 0.46706071496009827]\n", + "[0.47837400436401367, 0.49850785732269287, 0.5137821435928345, 0.5570081472396851]\n", + "[0.48658084869384766, 0.49019068479537964, 0.5266247987747192, 0.5357231497764587]\n", + "[0.5363520979881287, 0.5394930243492126, 0.5379713773727417, 0.5765609741210938]\n", + "[0.4994550347328186, 0.5509848594665527, 0.5620936751365662, 0.5474979877471924]\n", + "[0.4592863619327545, 0.4888122081756592, 0.5082558989524841, 0.4985145628452301]\n", + "[0.5058228969573975, 0.5152173042297363, 0.5222622156143188, 0.5051945447921753]\n", + "[0.5079936385154724, 0.5350562334060669, 0.5720991492271423, 0.5322621464729309]\n", + "[0.13497330248355865, 0.14695988595485687, 0.16850662231445312, 0.2009718120098114]\n", + "[0.13038453459739685, 0.1498425453901291, 0.16293026506900787, 0.14344535768032074]\n", + "[0.1487034261226654, 0.1316690593957901, 0.13127319514751434, 0.13950052857398987]\n", + "[0.1501358598470688, 0.16420823335647583, 0.12044629454612732, 0.16700875759124756]\n", + "[0.15979617834091187, 0.16276311874389648, 0.11856414377689362, 0.16896171867847443]\n", + "[0.16623824834823608, 0.16259369254112244, 0.1753639280796051, 0.1309320032596588]\n", + "[0.1328047513961792, 0.15486523509025574, 0.15680381655693054, 0.1807137131690979]\n", + "[0.1278059184551239, 0.15628376603126526, 0.17403919994831085, 0.13821563124656677]\n", + "[0.15597747266292572, 0.16329829394817352, 0.1303652673959732, 0.1609942615032196]\n", + "[0.12171924114227295, 0.1720515638589859, 0.1855427622795105, 0.17322351038455963]\n", + "[0.16887860000133514, 0.1514233499765396, 0.17198722064495087, 0.14937998354434967]\n", + "[0.20079320669174194, 0.17126977443695068, 0.13859470188617706, 0.15161161124706268]\n", + "[0.14517444372177124, 0.15095874667167664, 0.12470223009586334, 0.15585607290267944]\n", + "[0.1437065452337265, 0.15336568653583527, 0.13776659965515137, 0.17425838112831116]\n", + "[0.15212903916835785, 0.13568295538425446, 0.14079660177230835, 0.15014642477035522]\n", + "[0.151668980717659, 0.138067826628685, 0.1845964789390564, 0.18104156851768494]\n", + "[0.14458779990673065, 0.16783788800239563, 0.17399662733078003, 0.14382994174957275]\n", + "[0.18434153497219086, 0.1842597872018814, 0.1688368171453476, 0.20240478217601776]\n", + "[0.15324297547340393, 0.1700548231601715, 0.14253216981887817, 0.176888570189476]\n", + "[0.17199721932411194, 0.1370292603969574, 0.16507504880428314, 0.17409805953502655]\n", + "[0.13032516837120056, 0.14420458674430847, 0.11048860847949982, 0.1551186591386795]\n", + "[0.4808554947376251, 0.5528202056884766, 0.5344487428665161, 0.5437026619911194]\n", + "[0.26598578691482544, 0.22266079485416412, 0.2550126314163208, 0.22809016704559326]\n", + "[0.5355169773101807, 0.54839026927948, 0.5552052855491638, 0.5438668131828308]\n", + "[0.5009908676147461, 0.4970087707042694, 0.5333476066589355, 0.496881902217865]\n", + "[0.491229385137558, 0.4832426607608795, 0.46828585863113403, 0.4284118115901947]\n", + "[0.4665548503398895, 0.46075618267059326, 0.45438694953918457, 0.4448603391647339]\n", + "[0.5057217478752136, 0.50617516040802, 0.543359637260437, 0.5447337031364441]\n", + "[0.3928493559360504, 0.44228512048721313, 0.4176892042160034, 0.40026721358299255]\n", + "[0.45964524149894714, 0.4733598232269287, 0.4753514230251312, 0.4528942406177521]\n", + "[0.5362515449523926, 0.509385347366333, 0.47675228118896484, 0.49199095368385315]\n", + "[0.5080479979515076, 0.4754107892513275, 0.5377670526504517, 0.5654237866401672]\n", + "[0.5313916802406311, 0.5235180258750916, 0.5523918867111206, 0.5476479530334473]\n", + "[0.390625, 0.34965410828590393, 0.38139793276786804, 0.3625088334083557]\n", + "[0.4309837520122528, 0.43239229917526245, 0.468277245759964, 0.3966720998287201]\n", + "[0.3550247848033905, 0.4123568534851074, 0.35743123292922974, 0.40518707036972046]\n", + "[0.4313869774341583, 0.4647200405597687, 0.49265334010124207, 0.41701292991638184]\n", + "[0.458578497171402, 0.4783968925476074, 0.44103366136550903, 0.44707030057907104]\n", + "[0.6295215487480164, 0.6086601614952087, 0.5915517210960388, 0.6044890880584717]\n", + "[0.4874991178512573, 0.524794340133667, 0.5126282572746277, 0.5172525644302368]\n", + "[0.4459623396396637, 0.49846741557121277, 0.45403924584388733, 0.524047315120697]\n", + "[0.5355077981948853, 0.5609434843063354, 0.5170225501060486, 0.5726653933525085]\n", + "[0.4177286624908447, 0.3713746964931488, 0.3484005630016327, 0.3768659234046936]\n", + "[0.23657545447349548, 0.16087126731872559, 0.2251681685447693, 0.1867567002773285]\n", + "[0.22668138146400452, 0.22630393505096436, 0.20424048602581024, 0.1846441924571991]\n", + "[0.2189178615808487, 0.1994251310825348, 0.2600095868110657, 0.21990399062633514]\n", + "[0.23690912127494812, 0.224481999874115, 0.19759681820869446, 0.24758465588092804]\n", + "[0.2617313265800476, 0.22422611713409424, 0.236208975315094, 0.23039264976978302]\n", + "[0.22338882088661194, 0.22882258892059326, 0.24995490908622742, 0.285274475812912]\n", + "[0.20794464647769928, 0.183010533452034, 0.23058199882507324, 0.1889113038778305]\n", + "[0.19423629343509674, 0.25507086515426636, 0.18779762089252472, 0.23464539647102356]\n", + "[0.1851644665002823, 0.20509059727191925, 0.23708860576152802, 0.25424718856811523]\n", + "[0.2098696082830429, 0.2555732727050781, 0.22635939717292786, 0.18093977868556976]\n", + "[0.2295704483985901, 0.23193076252937317, 0.23557059466838837, 0.22725820541381836]\n", + "[0.20605121552944183, 0.16921550035476685, 0.20585747063159943, 0.22152186930179596]\n", + "[0.14933626353740692, 0.22105877101421356, 0.22614169120788574, 0.21442852914333344]\n", + "[0.18039169907569885, 0.21298649907112122, 0.20407997071743011, 0.19097520411014557]\n", + "[0.1695922613143921, 0.1791938841342926, 0.19562667608261108, 0.19027817249298096]\n", + "[0.19397327303886414, 0.19736702740192413, 0.21985293924808502, 0.20085914433002472]\n", + "[0.5797494649887085, 0.5252229571342468, 0.5279796123504639, 0.5422949194908142]\n", + "[0.5528774261474609, 0.6044256091117859, 0.5098248720169067, 0.5412441492080688]\n", + "[0.5698673725128174, 0.565944492816925, 0.5276902914047241, 0.5684468746185303]\n", + "[0.5853602886199951, 0.5793060660362244, 0.5493273138999939, 0.5075734853744507]\n", + "[0.6176166534423828, 0.545913577079773, 0.5460758209228516, 0.58964604139328]\n", + "[0.5669503211975098, 0.5203843712806702, 0.6142389178276062, 0.5876749753952026]\n", + "[0.5991400480270386, 0.5828199982643127, 0.5670328736305237, 0.5622375011444092]\n", + "[0.6099976897239685, 0.5519891977310181, 0.53780597448349, 0.5971164107322693]\n", + "[0.5587966442108154, 0.6012750864028931, 0.5618036389350891, 0.6255649924278259]\n", + "[0.6096430420875549, 0.5168496370315552, 0.5362932682037354, 0.577306866645813]\n", + "[0.5717871189117432, 0.5729307532310486, 0.5308594703674316, 0.5779440999031067]\n", + "[0.15542112290859222, 0.16134555637836456, 0.1555202454328537, 0.12914937734603882]\n", + "[0.19706380367279053, 0.15461048483848572, 0.14036116003990173, 0.13301242887973785]\n", + "[0.1292884647846222, 0.15651822090148926, 0.18060830235481262, 0.19548554718494415]\n", + "[0.1530148684978485, 0.13426153361797333, 0.15538859367370605, 0.18116679787635803]\n", + "[0.17633739113807678, 0.17175157368183136, 0.1801612675189972, 0.16640636324882507]\n", + "[0.16954916715621948, 0.17947138845920563, 0.1790860891342163, 0.11487012356519699]\n", + "[0.19798561930656433, 0.16411785781383514, 0.1550438106060028, 0.1425338089466095]\n", + "[0.1471463292837143, 0.15065927803516388, 0.1718752533197403, 0.16288848221302032]\n", + "[0.17139211297035217, 0.15679320693016052, 0.18423408269882202, 0.16232235729694366]\n", + "[0.15280090272426605, 0.17373985052108765, 0.16563266515731812, 0.16469547152519226]\n", + "[0.138264000415802, 0.1503749042749405, 0.15184800326824188, 0.15735697746276855]\n", + "[0.12299466133117676, 0.15221349895000458, 0.14542879164218903, 0.223552405834198]\n", + "[0.39721235632896423, 0.404455304145813, 0.3944551944732666, 0.38413116335868835]\n", + "[0.16162851452827454, 0.17323122918605804, 0.15169081091880798, 0.1781696081161499]\n", + "[0.18052224814891815, 0.1470373272895813, 0.1571880429983139, 0.1276429146528244]\n", + "[0.2889462411403656, 0.30758288502693176, 0.2557312846183777, 0.33018171787261963]\n", + "[0.15626326203346252, 0.1527918577194214, 0.17556960880756378, 0.16866038739681244]\n", + "[0.5606465935707092, 0.5366407632827759, 0.5095475912094116, 0.5099868774414062]\n", + "[0.2850843071937561, 0.2611604630947113, 0.27678972482681274, 0.26783910393714905]\n", + "[0.1827612817287445, 0.17126065492630005, 0.17000649869441986, 0.12182024121284485]\n", + "[0.14221061766147614, 0.1542671173810959, 0.1565268635749817, 0.17217479646205902]\n", + "[0.5004777908325195, 0.49645325541496277, 0.4524550139904022, 0.47263213992118835]\n", + "[0.13454926013946533, 0.12575411796569824, 0.12683354318141937, 0.1300649493932724]\n", + "[0.1078776866197586, 0.10591277480125427, 0.16086889803409576, 0.12633652985095978]\n", + "[0.137775719165802, 0.1449151635169983, 0.14655250310897827, 0.15099063515663147]\n", + "[0.138040691614151, 0.13364048302173615, 0.09881221503019333, 0.12120371311903]\n", + "[0.14020395278930664, 0.13538631796836853, 0.10620629787445068, 0.1319482922554016]\n", + "[0.12522831559181213, 0.14531007409095764, 0.13797149062156677, 0.1477629691362381]\n", + "[0.1570131778717041, 0.12691237032413483, 0.08719968050718307, 0.11604736745357513]\n", + "[0.11760217696428299, 0.1382855772972107, 0.13767194747924805, 0.1402740329504013]\n", + "[0.1150413528084755, 0.1256498098373413, 0.15745188295841217, 0.11258580535650253]\n", + "[0.10661783814430237, 0.10055971145629883, 0.11929477751255035, 0.1167251393198967]\n", + "[0.10112715512514114, 0.12172960489988327, 0.11708146333694458, 0.12166254222393036]\n", + "[0.2031688541173935, 0.20975255966186523, 0.2117127627134323, 0.2142939418554306]\n", + "[0.23751890659332275, 0.28333580493927, 0.24898497760295868, 0.2802897095680237]\n", + "[0.39525696635246277, 0.38841748237609863, 0.4278234541416168, 0.4229169189929962]\n", + "[0.200664684176445, 0.1702367514371872, 0.1713600754737854, 0.1860935539007187]\n", + "[0.3260282278060913, 0.28168120980262756, 0.22951693832874298, 0.31098005175590515]\n", + "[0.2998718321323395, 0.3433353304862976, 0.3393477499485016, 0.3113521337509155]\n", + "[0.19745108485221863, 0.19406868517398834, 0.21572181582450867, 0.14702944457530975]\n", + "[0.2184443324804306, 0.23891007900238037, 0.22639822959899902, 0.23967145383358002]\n", + "[0.37917232513427734, 0.3799242377281189, 0.3158889412879944, 0.29763656854629517]\n", + "[0.19644500315189362, 0.20664769411087036, 0.20381994545459747, 0.19190385937690735]\n", + "[0.1698780208826065, 0.2117670327425003, 0.20841830968856812, 0.2064172923564911]\n", + "[0.43301814794540405, 0.41526901721954346, 0.3707197904586792, 0.35845890641212463]\n", + "[0.3355481028556824, 0.36101144552230835, 0.3295600414276123, 0.3444373905658722]\n", + "[0.3301694393157959, 0.2920081913471222, 0.25596126914024353, 0.28629887104034424]\n", + "[0.3388086259365082, 0.32884061336517334, 0.35049518942832947, 0.3151763677597046]\n", + "[0.29715487360954285, 0.32737258076667786, 0.35456955432891846, 0.32175979018211365]\n", + "[0.40627720952033997, 0.42162737250328064, 0.40280720591545105, 0.3896673321723938]\n", + "[0.2790883183479309, 0.27627816796302795, 0.31177669763565063, 0.332994282245636]\n", + "[0.44931480288505554, 0.4369683861732483, 0.47062796354293823, 0.4412580132484436]\n", + "[0.39640986919403076, 0.4323461651802063, 0.40224090218544006, 0.39582520723342896]\n", + "[0.2581179141998291, 0.32093745470046997, 0.29540905356407166, 0.3105282187461853]\n", + "[0.29425859451293945, 0.27187517285346985, 0.3326016664505005, 0.26982003450393677]\n", + "[0.879783570766449, 0.8901336193084717, 0.8515040278434753, 0.8859361410140991]\n", + "[0.8743906617164612, 0.8676811456680298, 0.875738263130188, 0.8851535320281982]\n", + "[0.9024447798728943, 0.8667203783988953, 0.8689397573471069, 0.8802269101142883]\n", + "[0.8890423774719238, 0.8840885162353516, 0.8885794281959534, 0.8786200284957886]\n", + "[0.8633278608322144, 0.8850181698799133, 0.8903237581253052, 0.8773311972618103]\n", + "[0.86215740442276, 0.8687430024147034, 0.8898996710777283, 0.8909417390823364]\n", + "[0.8910554647445679, 0.8671620488166809, 0.8828911781311035, 0.8756549954414368]\n", + "[0.8921483755111694, 0.8876153230667114, 0.8891934156417847, 0.8848140239715576]\n", + "[0.19185973703861237, 0.23666003346443176, 0.20224295556545258, 0.2127983421087265]\n", + "[0.8843138217926025, 0.8583000302314758, 0.8615579009056091, 0.8751129508018494]\n", + "[0.8543528914451599, 0.8678399920463562, 0.8671035170555115, 0.8917459845542908]\n", + "[0.15881070494651794, 0.1689375936985016, 0.16510197520256042, 0.16299286484718323]\n", + "[0.12922213971614838, 0.13482323288917542, 0.1576414555311203, 0.16701018810272217]\n", + "[0.16829584538936615, 0.20371845364570618, 0.17376244068145752, 0.16335703432559967]\n", + "[0.135874405503273, 0.13988211750984192, 0.16615812480449677, 0.16209782660007477]\n", + "[0.13216064870357513, 0.1662123203277588, 0.14658081531524658, 0.16981381177902222]\n", + "[0.16300536692142487, 0.17510642111301422, 0.1921757459640503, 0.19954921305179596]\n", + "[0.15703007578849792, 0.1712736189365387, 0.14806728065013885, 0.19066181778907776]\n", + "[0.11688575893640518, 0.11878834664821625, 0.14747071266174316, 0.16751070320606232]\n", + "[0.1330541968345642, 0.13620202243328094, 0.15605832636356354, 0.14346347749233246]\n", + "[0.13610346615314484, 0.17749612033367157, 0.1430770754814148, 0.13030704855918884]\n", + "[0.17443060874938965, 0.15238693356513977, 0.1463984102010727, 0.14021089673042297]\n", + "[0.3728707730770111, 0.3877980709075928, 0.43281713128089905, 0.40689677000045776]\n", + "[0.4179506301879883, 0.3684960603713989, 0.40783023834228516, 0.40240103006362915]\n", + "[0.20363996922969818, 0.23301461338996887, 0.2397177517414093, 0.18890708684921265]\n", + "[0.3755464255809784, 0.3188113570213318, 0.40265506505966187, 0.4344979524612427]\n", + "[0.33747029304504395, 0.32679328322410583, 0.3076278865337372, 0.3516458570957184]\n", + "[0.3962274193763733, 0.45664575695991516, 0.3996860682964325, 0.4278733432292938]\n", + "[0.36981552839279175, 0.32879331707954407, 0.3488733172416687, 0.35118529200553894]\n", + "[0.4510883688926697, 0.36561551690101624, 0.46716418862342834, 0.38461071252822876]\n", + "[0.29825153946876526, 0.27604585886001587, 0.24591583013534546, 0.2778090536594391]\n", + "[0.4756105840206146, 0.4594971835613251, 0.48313647508621216, 0.41902509331703186]\n", + "[0.2564096450805664, 0.309722900390625, 0.26442721486091614, 0.2956860363483429]\n", + "[0.5189111828804016, 0.5504399538040161, 0.5021730065345764, 0.47813692688941956]\n", + "[0.5440770387649536, 0.48198840022087097, 0.5272999405860901, 0.4946635365486145]\n", + "[0.4831860065460205, 0.5313422679901123, 0.5097470879554749, 0.4384419918060303]\n", + "[0.5019270777702332, 0.5312252640724182, 0.5915309190750122, 0.5597589612007141]\n", + "[0.5476170778274536, 0.5095517039299011, 0.4977707266807556, 0.5502577424049377]\n", + "[0.5454204678535461, 0.5483004450798035, 0.5734332203865051, 0.5619233250617981]\n", + "[0.5591179132461548, 0.5790665149688721, 0.6085527539253235, 0.5644158124923706]\n", + "[0.5605889558792114, 0.5148648619651794, 0.5369927883148193, 0.5855569243431091]\n", + "[0.4715840220451355, 0.44455578923225403, 0.4635152816772461, 0.4393274784088135]\n", + "[0.5467730164527893, 0.494987815618515, 0.505121648311615, 0.5238168239593506]\n", + "[0.1880994737148285, 0.1884227991104126, 0.23520445823669434, 0.19657085835933685]\n", + "[0.18475568294525146, 0.18333245813846588, 0.16986429691314697, 0.13499131798744202]\n", + "[0.197109192609787, 0.16555406153202057, 0.1804492175579071, 0.1629798412322998]\n", + "[0.18367207050323486, 0.13623426854610443, 0.16557630896568298, 0.16539795696735382]\n", + "[0.18415206670761108, 0.24716238677501678, 0.1998032033443451, 0.21723952889442444]\n", + "[0.12298571318387985, 0.16041778028011322, 0.1728234589099884, 0.15679702162742615]\n", + "[0.16060298681259155, 0.15445983409881592, 0.18857404589653015, 0.15877345204353333]\n", + "[0.12338285148143768, 0.18647995591163635, 0.1803666651248932, 0.12597522139549255]\n", + "[0.15500935912132263, 0.16162487864494324, 0.12478838115930557, 0.1442965865135193]\n", + "[0.16292235255241394, 0.17213350534439087, 0.1576158106327057, 0.19896124303340912]\n", + "[0.15974877774715424, 0.12086423486471176, 0.1438516527414322, 0.13088253140449524]\n", + "[0.16023463010787964, 0.13415780663490295, 0.09367085993289948, 0.1931203156709671]\n", + "[0.1558106392621994, 0.12730298936367035, 0.14712001383304596, 0.1555417776107788]\n", + "[0.15544714033603668, 0.1491488516330719, 0.15549254417419434, 0.17903749644756317]\n", + "[0.12290766090154648, 0.13187402486801147, 0.13219523429870605, 0.15463677048683167]\n", + "[0.11848141998052597, 0.1640305519104004, 0.17488789558410645, 0.15792441368103027]\n", + "[0.5898016095161438, 0.5868765711784363, 0.5797806978225708, 0.5788813829421997]\n", + "[0.675767183303833, 0.6713101267814636, 0.6753434538841248, 0.6320018768310547]\n", + "[0.4526846706867218, 0.4717397093772888, 0.4599359631538391, 0.40751567482948303]\n", + "[0.5243709087371826, 0.4907861649990082, 0.5426511168479919, 0.5656881928443909]\n", + "[0.5919266939163208, 0.5892937183380127, 0.5397747159004211, 0.6421780586242676]\n", + "[0.16049334406852722, 0.16709402203559875, 0.23376663029193878, 0.14856134355068207]\n", + "[0.6028116941452026, 0.6901167631149292, 0.6448677778244019, 0.6287549138069153]\n", + "[0.5752226710319519, 0.5658721327781677, 0.6109029054641724, 0.5715929269790649]\n", + "[0.1790245622396469, 0.1827176958322525, 0.2031310349702835, 0.1917020082473755]\n", + "[0.5573130249977112, 0.5873966217041016, 0.5363818407058716, 0.5391883850097656]\n", + "[0.5842569470405579, 0.6115173697471619, 0.5833387970924377, 0.5878012776374817]\n", + "[0.10558441281318665, 0.1380949169397354, 0.13452847301959991, 0.10069644451141357]\n", + "[0.12991780042648315, 0.10354926437139511, 0.10208772867918015, 0.1433241069316864]\n", + "[0.20021282136440277, 0.19651444256305695, 0.15189611911773682, 0.15004867315292358]\n", + "[0.2350904941558838, 0.20631171762943268, 0.19812892377376556, 0.21785873174667358]\n", + "[0.12431441992521286, 0.13613495230674744, 0.12858955562114716, 0.14108920097351074]\n", + "[0.22242452204227448, 0.1532794088125229, 0.21131545305252075, 0.21336860954761505]\n", + "[0.42857375741004944, 0.4160177707672119, 0.401437371969223, 0.40117841958999634]\n", + "[0.33393657207489014, 0.33596768975257874, 0.2762833535671234, 0.3140271306037903]\n", + "[0.43724238872528076, 0.45333415269851685, 0.4789501428604126, 0.47634798288345337]\n", + "[0.45043399930000305, 0.4401681125164032, 0.43914541602134705, 0.47841912508010864]\n", + "[0.4141985774040222, 0.4122104346752167, 0.4511125683784485, 0.46736443042755127]\n", + "[0.4151131510734558, 0.4181056618690491, 0.3687587380409241, 0.4364733099937439]\n", + "[0.459891676902771, 0.4484608769416809, 0.40513384342193604, 0.45787346363067627]\n", + "[0.2537800967693329, 0.21551011502742767, 0.2541660666465759, 0.19222640991210938]\n", + "[0.284164696931839, 0.27560263872146606, 0.29643598198890686, 0.2825396955013275]\n", + "[0.352859765291214, 0.3812389671802521, 0.3789927065372467, 0.31317615509033203]\n", + "[0.5169747471809387, 0.5205395221710205, 0.5149601697921753, 0.5641290545463562]\n", + "[0.5061262845993042, 0.5184645056724548, 0.49947887659072876, 0.5502372980117798]\n", + "[0.47042229771614075, 0.4910651445388794, 0.5145890712738037, 0.5398126840591431]\n", + "[0.43765008449554443, 0.4738388657569885, 0.5012149214744568, 0.4789796769618988]\n", + "[0.4670739769935608, 0.47851765155792236, 0.5372003316879272, 0.5368655920028687]\n", + "[0.46262258291244507, 0.4878719747066498, 0.42988646030426025, 0.48223569989204407]\n", + "[0.4971538186073303, 0.5073611736297607, 0.5746281147003174, 0.46579840779304504]\n", + "[0.5025578141212463, 0.48128458857536316, 0.47743475437164307, 0.5300654172897339]\n", + "[0.49632781744003296, 0.5148781538009644, 0.48186182975769043, 0.4815836548805237]\n", + "[0.1410142481327057, 0.161418154835701, 0.20160600543022156, 0.15764644742012024]\n", + "[0.5024785995483398, 0.45140978693962097, 0.49167338013648987, 0.42681342363357544]\n" + ] + } + ], + "source": [ + "for run_name in os.listdir(\"results/\" + task_name + \"/\" + data_name):\n", + " if len(run_name.split(\"_\")) != 7: continue\n", + "\n", + " # if int(run_name.split(\"_\")[4][1:]) > 50: # Filter for large dimension runs\n", + " # continue\n", + "\n", + " for run in os.listdir(\"results/\" + task_name + \"/\" + data_name + \"/\" + run_name):\n", + " if run.startswith(\".\"):\n", + " continue\n", + "\n", + " # print(\"results/\" + task_name + \"/\" + data_name + \"/\" + run_name + \"/\" + run)\n", + " # data = torch.load(\"results/\" + task_name + \"/\" + data_name + \"/\" + run_name + \"/\" + run, weights_only=False)\n", + " with open(\"results/\" + task_name + \"/\" + data_name + \"/\" + run_name + \"/\" + run) as infile:\n", + " data = json.load(infile)\n", + " loss = data[\"final_loss\"]\n", + " accs = data[\"train_accs\"]\n", + " print(accs)\n", + " acc = data[\"final_acc\"]\n", + " # args = data[\"args\"]\n", + " params = data[\"params\"]\n", + "\n", + " if run_name not in all_losses.keys():\n", + " all_losses[run_name] = [loss]\n", + " all_accs[run_name] = [acc[-1]]\n", + " all_params[run_name] = params\n", + " all_train_accs[run_name] = [accs]\n", + " else:\n", + " all_losses[run_name].append(loss)\n", + " all_accs[run_name].append(acc[-1])\n", + " all_train_accs[run_name].append(accs)\n", + "\n", + "for run_name in all_losses.keys():\n", + " all_losses[run_name] = np.array(all_losses[run_name])\n", + " all_accs[run_name] = np.array(all_accs[run_name])\n", + " all_train_accs[run_name] = np.array(all_train_accs[run_name])" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "e02ccf18", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "run_assoc-recall-mk_TF-SSM_w100_d24_nh1_sd1 11496 0.5239278945055875\n", + "run_assoc-recall-mk_SSM-SSM_w100_d24_nh1_sd1 12936 0.5170181285251271\n", + "run_assoc-recall-mk_SSM-TF_w100_d24_nh1_sd1 11496 0.9891958724368702\n", + "run_assoc-recall-mk_TF-TF_w100_d24_nh1_sd1 10056 0.6680852215398442\n" + ] + } + ], + "source": [ + "state_dim = 1\n", + "num_heads = 1\n", + "dim = 24 # default_token_dim\n", + "window = 100 # Default window\n", + "for k, v in all_accs.items():\n", + " split = k.split(\"_\")\n", + " if split[2] not in [\"SSM-SSM\", \"SSM-TF\", \"TF-SSM\", \"TF-TF\"]:\n", + " continue \n", + " if split[-4] != \"w%d\" % default_window:\n", + " continue\n", + " if split[-3] != \"d%d\" % dim:\n", + " continue\n", + " if split[-2] != \"nh%d\" % num_heads:\n", + " continue\n", + " if split[-1] != \"sd%d\" % state_dim:\n", + " continue\n", + " print(k, all_params[k], np.mean(v))" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "c6fa37b0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['d12', 'd16', 'd20', 'd24', 'd4', 'd8'], dtype=' args.epochs * args.num_examples: + # if step > args.num_examples: + assert False, "This should never happen" + # break + + if args.progress_bar: + # Update tqdm description with the current loss + progress_bar.set_postfix({'Loss': loss.item()}) + + return avg_loss / count + + +def train(args, model, tokenizer, train_dataset, one_epoch=False): + optimizer = AdamW(model.parameters(), lr=args.lr, weight_decay=0.1) + + # Put model on GPU + accelerator = Accelerator() + model, optimizer = accelerator.prepare(model, optimizer) + + lr_scheduler = custom_get_scheduler(optimizer, args.epochs * args.num_examples // args.gradient_accumulation_steps) + + attention_mask = torch.ones((args.sequence_length, args.sequence_length)) + attention_mask = (torch.triu(attention_mask, diagonal=0) - torch.triu(attention_mask, diagonal=args.window)).T.to('cuda') + + losses = [] + accs = [] + for epoch in range(args.epochs): + model.train() + avg_loss = train_epoch(model, epoch, accelerator, optimizer, lr_scheduler, attention_mask, train_dataset, args, device="cuda") + losses.append(avg_loss) + print(epoch, optimizer.param_groups[0]["lr"], avg_loss) + + model.eval() + _, _, char_accuracy_list = evaluation(args, model, tokenizer, do_print=False) + accs.append(char_accuracy_list[0]) + + if one_epoch: + break + + # return losses + return accs, losses[-1] + + +################################################################################################################################## + +# Saving helpers + +def get_data_ident_name(args): + return "data_%d_%d_%d" % (args.sequence_length, args.num_numbers, args.num_vocab) + +def get_ident_name(args): + dashed_task_name = "-".join(args.train_task.split("_")) + # Depth tests + if args.num_layers is not None: + return "run_%s_%s-%d_w%d_d%d_nh%d_sd%d" % (dashed_task_name, args.model, args.num_layers, args.window, args.hidden_size, \ + args.heads, args.state_dim) + elif args.layer3 is not None: + return "run_%s_%s-%s-%s_w%d_d%d_nh%d_sd%d" % (dashed_task_name, args.layer1, args.layer2, args.layer3, args.window, args.hidden_size, \ + args.heads, args.state_dim) + else: + if args.mixed: + return "run-mixed_%s_%s-%s_w%d_d%d_nh%d_sd%d" % (dashed_task_name, args.layer1, args.layer2, args.window, args.hidden_size, \ + args.heads, args.state_dim) + else: + return "run_%s_%s-%s_w%d_d%d_nh%d_sd%d" % (dashed_task_name, args.layer1, args.layer2, args.window, args.hidden_size, \ + args.heads, args.state_dim) + +def get_task_dir_name(args): + return args.train_task + "/" + args.data_name + "/" + get_ident_name(args) + +def make_dir(args, saving='results'): + if saving == 'results': + if args.ood_eval: + if 'results_ood' not in os.listdir('.'): + os.mkdir('results_ood') + base_path = 'results_ood' + else: + if 'results' not in os.listdir('.'): + os.mkdir('results') + base_path = 'results' + + if saving == 'model_results': + if 'model_results' not in os.listdir('.'): + os.mkdir('model_results') + base_path = 'model_results' + + if args.train_task not in os.listdir(base_path + ''): + os.mkdir(base_path + '/' + args.train_task) + + if args.data_name not in os.listdir(base_path + '/' + args.train_task): + os.mkdir(base_path + '/' + args.train_task + "/" + args.data_name) + + if get_ident_name(args) not in os.listdir(base_path + '/' + args.train_task + "/" + args.data_name): + os.mkdir(base_path + '/' + args.train_task + "/" + args.data_name + "/" + get_ident_name(args)) + + +def load_model(args, model): + path = 'model_results/' + get_task_dir_name(args) + + # Load model + model = model.from_pretrained(path) + + return model + + +def save_model(args, model): + path = 'model_results/' + get_task_dir_name(args) + + if not os.path.exists(path): + make_dir(args, saving='model_results') + + # Save model + model.save_pretrained(path) diff --git a/source/official-code/mini/LICENSE b/source/official-code/mini/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..9af7293b77aba57981e1dad529e6c8be0d6e9ebe --- /dev/null +++ b/source/official-code/mini/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 sjelassi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/source/official-code/mini/README.md b/source/official-code/mini/README.md new file mode 100644 index 0000000000000000000000000000000000000000..43fc416b29e507eae862c9e5b9a0f96625f78361 --- /dev/null +++ b/source/official-code/mini/README.md @@ -0,0 +1,33 @@ +# Repeat After Me: Transformers are Better than State Space Models at Copying + +## About + +This part of the repository was built from [Repeat After Me: Transformers are Better than State Space Models at Copying](https://arxiv.org/abs/2402.01032), specifically the synthetic experiment part. + +This repository gathers the experiments for the paper . The experiments divide in two parts: + +## Installation + +pip install causal-conv1d>=1.1.0 : an efficient implementation of a simple causal Conv1d layer used inside the Mamba block. +pip install mamba-ssm : the core Mamba package. +pip install names : names package to randomly sample names in the phone-book experiment. + +Other requirements: +- Linux +- NVIDIA GPU +- PyTorch 1.12+ +- CUDA 11.6+ +- transformers 4.35+ +- datasets 2.14+ + +## We need to cite + +``` +@article{jelassi2024repeat, + title={Repeat after me: Transformers are better than state space models at copying}, + author={Jelassi, Samy and Brandfonbrener, David and Kakade, Sham M and Malach, Eran}, + journal={arXiv preprint arXiv:2402.01032}, + year={2024} +} +``` + diff --git a/source/official-code/mini/cmd.txt b/source/official-code/mini/cmd.txt new file mode 100644 index 0000000000000000000000000000000000000000..96d75ce139aafe46532fe6398f6b2c43ad6a1e09 --- /dev/null +++ b/source/official-code/mini/cmd.txt @@ -0,0 +1,15 @@ +python3 main.py --model "T_rope" --train_task "var-copy" --eval_task "var-copy" --min_train_len 30 --max_train_len 50 --min_eval_len 30 --max_eval_len 50 + +python3 test.py --model "T_rope" --train_task "var-copy" --eval_task "var-copy" --min_train_len 30 --max_train_len 50 --min_eval_len 30 --max_eval_len 50 + +python3 main.py --model "mamba" --train_task "var-copy" --eval_task "var-copy" --min_train_len 30 --max_train_len 50 --min_eval_len 30 --max_eval_len 50 --sequence_length 100 + +python3 main.py --model "T_rope" --train_task "decode-recall-last" --eval_task "decode-recall-last" --min_train_len 30 --max_train_len 50 --min_eval_len 30 --max_eval_len 50 --sequence_length 100 + +python3 test.py --model "T_rope" --train_task "var-copy" --eval_task "var-copy" --min_train_len 20 --max_train_len 25 --min_eval_len 98 --max_eval_len 99 --sequence-len 100 + +python3 main.py --model "T_rope" --train_task "var-copy-rep" --eval_task "var-copy-rep" --min_train_len 20 --max_train_len 25 --min_eval_len 98 --max_eval_len 99 --sequence_length 100 --lr 1e-3 + +python3 main.py --model "pretrained" --train_task "var-copy" --eval_task "var-copy" --min_train_len 30 --max_train_len 50 --min_eval_len 30 --max_eval_len 50 --pretrained_model "openai-community/gpt2" + +python3 main.py --model "hybrid" --train_task "var-copy" --eval_task "var-copy" --min_train_len 50 --max_train_len 100 --min_eval_len 50 --max_eval_len 100 --hidden_size 12 --heads 1 --state_dim 1 --num_masked_heads 0 --layers 2 \ No newline at end of file diff --git a/source/official-code/mini/data_utils.py b/source/official-code/mini/data_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..41f0ea4a56223fc2137db985dbb6247cc1f4ec38 --- /dev/null +++ b/source/official-code/mini/data_utils.py @@ -0,0 +1,510 @@ +import numpy as np +import torch +import string +import torch.nn.functional as F +import random +import math + +from collections import defaultdict +from transformers import AutoTokenizer + +################################################################# + +# Tokenizer + +class Tokenizer: + def __init__(self, TO_TOKEN, vocab_tokens, number_tokens): + + self.TO_TOKEN = TO_TOKEN + self.TO_STR = {v:k for k, v in TO_TOKEN.items()} + + self.vocab = np.array(list(TO_TOKEN.keys())) + + self.vocab_tokens = vocab_tokens + self.number_tokens = number_tokens + self.num_vocab = len(self.vocab_tokens) + self.num_numbers = len(self.number_tokens) + + self.bos_token = self.TO_TOKEN[''] + self.eos_token = self.TO_TOKEN[''] + self.null = '' + + # Human readible printing + vocab_part = {self.TO_TOKEN[k]: v for (k, v) in zip(self.vocab_tokens, string.ascii_lowercase[:self.num_vocab])} + number_part = {self.TO_TOKEN[t]: t[1:] for t in self.number_tokens} + + self.TO_STRING = {**vocab_part, **number_part} + self.TO_STRING[self.bos_token] = "$" + self.TO_STRING[self.eos_token] = "." + self.TO_STRING[self.TO_TOKEN[self.null]] = "_" + + def __call__(self, x): + encoded = [self.TO_TOKEN[c] for c in x] + return torch.tensor(encoded, dtype=torch.int64) + + def decode(self, x): + x = x.detach().cpu().numpy() + decoded = [str(t) if t not in self.TO_STR else self.TO_STR[t] for t in x] + return decoded + + def __len__(self): + return len(self.TO_TOKEN) + + def to_string(self, x, pytorch=True): + if pytorch: + return "".join([self.TO_STRING[t.item()] for t in x]) + else: + return "".join([self.TO_STRING[self.TO_TOKEN[t]] for t in x]) + + +def get_tokenizer(args): + if args.model == "pretrained": + tokenizer = AutoTokenizer.from_pretrained(args.pretrained_model) + return tokenizer + + vocab_tokens = ["V%d" % i for i in range(args.num_vocab)] + + if args.train_task in ["var-copy", "var-copy-rep"]: + number_tokens = ["#%d" % (5+i) for i in range(args.num_numbers)] + else: + number_tokens = ["#%d" % i for i in range(args.num_numbers)] + + vocab = vocab_tokens + number_tokens + ["", "", ""] + + TO_TOKEN = dict(zip(vocab, range(len(vocab)))) + + tokenizer = Tokenizer(TO_TOKEN, vocab_tokens, number_tokens) + + return tokenizer + +################################################################# + +# Sequence Generation + +def rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=-1): + if p_numbers == -1: + p_numbers = num_numbers / (num_vocab + num_numbers) + + if num_numbers != 0: + props = {"V": (1-p_numbers)/num_vocab, "#": p_numbers/num_numbers, "<": 0} + else: + props = {"V": 1/num_vocab, "#": 0, "<": 0} + props = np.array([props[i[0]] for i in tokenizer.vocab]) + + return np.random.choice(tokenizer.vocab, size=length, p=props).tolist() + +# For other special generations +def rand_seq_special(tokenizer, length, num_vocab, num_numbers, p_numbers=-1, special_type=None): + if special_type == "repetitive_vocab": + if p_numbers == -1: + p_numbers = num_numbers / (num_vocab + num_numbers) + + if num_numbers != 0: + props = {"V": 0, "#": p_numbers/num_numbers, "<": 0} + else: + props = {"V": 0, "#": 0, "<": 0} + if num_numbers != 0: + props_V0 = (1-p_numbers) + else: + props_V0 = 1 + props = np.array([props[i[0]] if i != "V0" else props_V0 for i in tokenizer.vocab]) + + tile_length = 3 + + props_tile = {"V": 1./num_vocab, "#": 0, "<": 0} + props_tile = np.array([props_tile[i[0]] for i in tokenizer.vocab]) + + ret_seq = np.random.choice(tokenizer.vocab, size=length, p=props) + ret_seq2 = np.tile(np.random.choice(tokenizer.vocab, size=tile_length, p=props_tile), (length // tile_length + 1))[:length] + + return np.where(ret_seq == "V0", ret_seq2, ret_seq).tolist() + + else: + assert False, "Not implemented" + + +def force_args(args): + if args.train_task == "var-copy": + pass + + if args.train_task == "var-copy-rep": + pass + + if args.train_task in ["decode-recall", "decode-recall-last"]: + args.num_numbers = 2 + args.num_vocab = int(2 ** math.floor(math.log(args.num_vocab) / math.log(2))) + + if args.train_task == "assoc-recall": + args.num_numbers = 0 + + if args.train_task == "assoc-recall-mk": + size_key = 2 + + args.num_numbers = 0 + args.num_vocab = 1 + int(args.num_vocab ** (1./size_key)) + + if args.train_task == "addition": + args.num_numbers = 10 # Decimal addition + args.num_vocab = 2 # For +, = + + args.min_train_length = 3*args.min_train_length+3 + args.max_train_length = 3*args.max_train_length+3 + args.min_eval_length = 3*args.min_eval_length+3 + args.max_eval_length = 3*args.max_eval_length+3 + + +task_choices = ["var-copy", "var-copy-rep", "decode-recall", "decode-recall-last", "assoc-recall", "assoc-recall-mk", "addition"] + + +def generate_seq_and_mask(tokenizer, length, task, p=0.2): + num_vocab = tokenizer.num_vocab + num_numbers = tokenizer.num_numbers + + if task == "var-copy": + # Start with num_numbers vocab tokens + input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=p) + # input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers) + + nums = [(i, int(c[1:])) for (i, c) in enumerate(input_seq) if c in tokenizer.number_tokens] + + # The real task, if not degenerate + if len(nums) > 0: + output_seq = [""] * nums[0][0] + + for i in range(len(nums)-1): + if nums[i][0]-nums[i][1] < 0: + if nums[i+1][0]-nums[i][1] < 0: + output_seq += [""] * (nums[i+1][0]-nums[i][0]) + else: + output_seq += [""] * (nums[i][1]-nums[i][0]) + output_seq += input_seq[:nums[i+1][0]-nums[i][1]] + else: + output_seq += input_seq[nums[i][0]-nums[i][1]:nums[i+1][0]-nums[i][1]] + + if nums[-1][0]-nums[-1][1] < 0: + output_seq += [""] * (nums[-1][1]-nums[-1][0]) + output_seq += input_seq[:-nums[-1][1]] + else: + output_seq += input_seq[nums[-1][0]-nums[-1][1]:-nums[-1][1]] + else: + output_seq = [""] * length + + input_seq = [""] + input_seq + [""] + output_seq = [""] + output_seq + [""] + # output_seq = [""] + output_seq[:length] + [""] + + elif task == "var-copy-rep": + # Start with num_numbers vocab tokens + # input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=p) + input_seq = rand_seq_special(tokenizer, length, num_vocab, num_numbers, p_numbers=p, special_type="repetitive_vocab") + + nums = [(i, int(c[1:])) for (i, c) in enumerate(input_seq) if c in tokenizer.number_tokens] + + # The real task, if not degenerate + if len(nums) > 0: + output_seq = [""] * nums[0][0] + + for i in range(len(nums)-1): + if nums[i][0]-nums[i][1] < 0: + if nums[i+1][0]-nums[i][1] < 0: + output_seq += [""] * (nums[i+1][0]-nums[i][0]) + else: + output_seq += [""] * (nums[i][1]-nums[i][0]) + output_seq += input_seq[:nums[i+1][0]-nums[i][1]] + else: + output_seq += input_seq[nums[i][0]-nums[i][1]:nums[i+1][0]-nums[i][1]] + + if nums[-1][0]-nums[-1][1] < 0: + output_seq += [""] * (nums[-1][1]-nums[-1][0]) + output_seq += input_seq[:-nums[-1][1]] + else: + output_seq += input_seq[nums[-1][0]-nums[-1][1]:-nums[-1][1]] + else: + output_seq = [""] * length + + input_seq = [""] + input_seq + [""] + output_seq = [""] + output_seq + [""] + # output_seq = [""] + output_seq[:length] + [""] + + elif task == "decode-recall": + input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=p) + output_seq = [None for _ in range(len(input_seq))] + + assoc = {v: "" for v in tokenizer.vocab} + s = 0 + for i in range(len(output_seq)): + if i != 0: + assoc[input_seq[i-1]] = input_seq[i] + + if input_seq[i][0] == '#': + # s = (2 * s + int(input_seq[i][1:])) % num_numbers + s = (2 * s + int(input_seq[i][1:])) % num_vocab + + # if i-s < 0: + # output_seq[i] = "" + # else: + # output_seq[i] = input_seq[i-s] + + output_seq[i] = assoc["V%d" % s] + + elif task == "decode-recall-last": + input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=0) + output_seq = ["" for _ in range(len(input_seq))] + + n_bits = int(math.log(num_vocab)/math.log(2)) + + target = np.random.randint(0, num_vocab) + temp = target + for i in range(length-1, length-1-n_bits, -1): + input_seq[i] = "#%d" % (temp % 2) + temp = temp // 2 + + try: + i = length-2-n_bits - input_seq[-2-n_bits::-1].index("V%d" % target) + output_seq[-1] = input_seq[i+1] + except ValueError: + pass + + elif task == "assoc-recall": + input_seq = rand_seq(tokenizer, length, num_vocab, num_numbers, p_numbers=0.2) + output_seq = [None for _ in range(len(input_seq))] + + assoc = {v: "" for v in tokenizer.vocab} + + for i in range(len(output_seq)): + if i != 0: + assoc[input_seq[i-1]] = input_seq[i] + + output_seq[i] = assoc[input_seq[i]] + + elif task == "assoc-recall-mk": + size_key = 2 + + input_seq = rand_seq(tokenizer, length, num_vocab, 0, p_numbers=0.2) + output_seq = ["" for _ in range(len(input_seq))] + + assoc = defaultdict(lambda: "") + + for i in range(len(output_seq)): + if i > size_key: + key = tuple(input_seq[i-size_key:i]) + assoc[key] = input_seq[i] + + if i+1 > size_key: + key = tuple(input_seq[i-size_key+1:i+1]) + output_seq[i] = assoc[key] + + elif task == "addition": + len_number = (length+1) // 3 - 1 + max_num = num_numbers ** len_number + + num1 = np.random.randint(0, max_num) + num2 = np.random.randint(0, max_num) + num3 = (num1 + num2) % max_num + + input_seq = ["" for _ in range(length)] + output_seq = ["" for _ in range(length)] + + for i in range(len_number-1, -1, -1): + input_seq[i] = "#%d" % (num1 % num_numbers) + num1 = num1 // num_numbers + + input_seq[len_number] = "V0" + + for i in range(2*len_number, len_number, -1): + input_seq[i] = "#%d" % (num2 % num_numbers) + num2 = num2 // num_numbers + + input_seq[2*len_number+1] = "V1" + + for i in range(3*len_number+1, 2*len_number+1, -1): + input_seq[i] = "#%d" % (num3 % num_numbers) + output_seq[i-1] = "#%d" % (num3 % num_numbers) + + num3 = num3 // num_numbers + + else: + print("Task name:", task) + assert False # Not implemented + + # Create the mask + mask = [0 if i in ["", "", ""] else 1 for i in output_seq] + + return input_seq, output_seq, mask + + +################################################################# + +# Datasets + +class Dataset: + def __init__(self, + tokenizer, + train_task="var_copy", + sequence_length=220, + min_subseq_length=20, + max_subseq_length=50, + num_examples=1000, + batch_size=8, + p=0.2): + + self.tokenizer = tokenizer + self.train_task = train_task + self.num_vocab = self.tokenizer.num_vocab + self.num_numbers = self.tokenizer.num_numbers + + self.sequence_length = sequence_length + self.min_subseq_length = min_subseq_length + self.max_subseq_length = max_subseq_length + self.num_examples = num_examples + self.batch_size = batch_size + self.p = p + + def __len__(self): + return self.num_examples + + def __getitem__(self, idx): + batch = {'input': [], 'input_ids': [], 'output': [], 'output_ids': [], 'mask': []} + + for _ in range(self.batch_size): + + # Fill the context with subsequences of the desired task + prospective_len = 0 + input_seq = [] + output_seq = [] + mask = [] + while prospective_len < self.sequence_length: + # Sample for the task + length = np.random.randint(self.min_subseq_length, self.max_subseq_length+1) + input_sample, output_sample, mask_sample = generate_seq_and_mask(self.tokenizer, length, self.train_task, self.p) + + # Add the sample to the context + if prospective_len + len(input_sample) <= self.sequence_length: + prospective_len += len(input_sample) + input_seq += input_sample + output_seq += output_sample + mask += mask_sample + # Not enough room for another sample + else: + remaining_len = self.sequence_length - prospective_len + remaining_mask_len = self.sequence_length - prospective_len + input_seq += input_sample[:remaining_len] + output_seq += output_sample[:remaining_len] + mask += [0] * (remaining_mask_len) # Just mask it + break + + # Add the sequence to the sampled dataset + assert len(input_seq) == len(mask) + input_ids = self.tokenizer(input_seq) + output_ids = self.tokenizer(output_seq) + mask = torch.tensor(mask) + + batch['input'].append(input_seq) + batch['input_ids'].append(input_ids) + batch['output'].append(output_seq) + batch['output_ids'].append(output_ids) + batch['mask'].append(mask) + + batch['input_ids'] = torch.stack(batch['input_ids'], dim=0) + batch['output_ids'] = torch.stack(batch['output_ids'], dim=0) + batch['mask'] = torch.stack(batch['mask'], dim=0) + return batch + + +class EvalDataset: + def __init__(self, + tokenizer, + train_task="var_copy", + sequence_length=220, + min_subseq_length=20, + max_subseq_length=50, + num_examples=1000, + batch_size=8, + p=0.2): + + self.tokenizer = tokenizer + self.train_task = train_task + + self.sequence_length = sequence_length + self.min_subseq_length = min_subseq_length + self.max_subseq_length = max_subseq_length + self.num_examples = num_examples + self.batch_size = batch_size + self.p = p + + def __len__(self): + return self.num_examples + + def __getitem__(self, idx): + batch = {'input': [], 'input_ids': [], 'output': [], 'output_ids': [], 'mask': []} + + for _ in range(self.batch_size): + + # Fill the context with subsequences of the desired task + prospective_len = 0 + input_seq = [] + output_seq = [] + mask = [] + + # Sample for the task + length = np.random.randint(self.min_subseq_length, self.max_subseq_length+1) + input_seq, output_seq, mask = generate_seq_and_mask(self.tokenizer, length, self.train_task, self.p) + + # DO NOT REPLACE + # Fill the context with null tokens + input_seq += [""] * (self.sequence_length - len(input_seq)) + output_seq += [""] * (self.sequence_length - len(output_seq)) + mask += [0] * (self.sequence_length - len(mask)) + + # Add the sequence to the sampled dataset + assert len(input_seq) == len(mask) + input_ids = self.tokenizer(input_seq) + output_ids = self.tokenizer(output_seq) + mask = torch.tensor(mask) + + batch['input'].append(input_seq) + batch['input_ids'].append(input_ids) + batch['output'].append(output_seq) + batch['output_ids'].append(output_ids) + batch['mask'].append(mask) + + batch['input_ids'] = torch.stack(batch['input_ids'], dim=0) + batch['output_ids'] = torch.stack(batch['output_ids'], dim=0) + batch['mask'] = torch.stack(batch['mask'], dim=0) + return batch + + +################################################################# + +# Util functions + +def get_train_dataset(args, tokenizer): + train_dataset = Dataset( + tokenizer=tokenizer, + train_task=args.train_task, + + sequence_length=args.sequence_length, + min_subseq_length=args.min_train_length, + max_subseq_length=args.max_train_length, + num_examples=args.num_examples, + batch_size=args.train_batch_size, + p=args.p + ) + + return train_dataset + + +def get_eval_dataset(args, tokenizer, min_length, max_length): + eval_dataset = EvalDataset( + tokenizer=tokenizer, + train_task=args.train_task, + + sequence_length=args.sequence_length, + min_subseq_length=min_length, + max_subseq_length=max_length, + num_examples=args.num_examples, + batch_size=args.eval_batch_size, + p=args.p + ) + + return eval_dataset diff --git a/source/official-code/mini/exp.ipynb b/source/official-code/mini/exp.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..383dc8eb6b31d70bf694c892f2cbd5f923af341a --- /dev/null +++ b/source/official-code/mini/exp.ipynb @@ -0,0 +1,166 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "d38f0ec2", + "metadata": { + "execution": { + "iopub.execute_input": "2026-01-14T16:31:34.792065Z", + "iopub.status.busy": "2026-01-14T16:31:34.791502Z", + "iopub.status.idle": "2026-01-14T16:31:34.800360Z", + "shell.execute_reply": "2026-01-14T16:31:34.798868Z" + } + }, + "outputs": [], + "source": [ + "import subprocess\n", + "from concurrent.futures import ThreadPoolExecutor, as_completed\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "ee5804bf", + "metadata": { + "execution": { + "iopub.execute_input": "2026-01-14T16:31:34.805950Z", + "iopub.status.busy": "2026-01-14T16:31:34.805393Z", + "iopub.status.idle": "2026-01-14T16:31:34.817239Z", + "shell.execute_reply": "2026-01-14T16:31:34.815689Z" + } + }, + "outputs": [], + "source": [ + "commands = []\n", + "\n", + "# for itr in range(3):\n", + "# for model in ['hybrid', 'T_rope', 'mamba']:\n", + "# cmd = f\"python3 main.py --model {model} --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number {itr}\"\n", + "# cmd += \" --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3\"\n", + "# commands.append(cmd)\n", + "\n", + "# for eval_p in [0.01, 0.05, 0.1, 0.3, 0.5, 0.8, 0.9]:\n", + "# for eval_p in [0.01, 0.9]:\n", + "# for itr in range(3):\n", + "# for model in ['hybrid', 'T_rope', 'mamba']:\n", + "# cmd = f\"python3 main.py --model {model} --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number {itr}\"\n", + "# cmd += \" --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10\"\n", + "# cmd += f\" --p 0.2 --eval_p {eval_p}\"\n", + "# commands.append(cmd)\n", + "\n", + "for eval_p in [0.01, 0.05, 0.1, 0.3, 0.5, 0.8, 0.9]:\n", + " for itr in range(3): # 3\n", + " for model in ['hybrid', 'T_rope', 'mamba']:\n", + " cmd = f\"python3 main.py --model {model} --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number {itr}\"\n", + " cmd += \" --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10\"\n", + " # cmd += f\" --p 0.2 --eval_p {eval_p}\"\n", + " cmd += f\" --p {eval_p} --eval_p 0.2\"\n", + " commands.append(cmd)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "90a8b3ec", + "metadata": { + "execution": { + "iopub.execute_input": "2026-01-14T16:31:34.821703Z", + "iopub.status.busy": "2026-01-14T16:31:34.821259Z", + "iopub.status.idle": "2026-01-14T16:31:34.828534Z", + "shell.execute_reply": "2026-01-14T16:31:34.828184Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2',\n", + " 'python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2',\n", + " 'python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2',\n", + " 'python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2',\n", + " 'python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2',\n", + " 'python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2',\n", + " 'python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2',\n", + " 'python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2',\n", + " 'python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2',\n", + " 'python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.05 --eval_p 0.2']" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "commands[:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f32ed2ee", + "metadata": { + "execution": { + "iopub.execute_input": "2026-01-14T16:31:34.829909Z", + "iopub.status.busy": "2026-01-14T16:31:34.829478Z", + "iopub.status.idle": "2026-01-14T19:09:41.606354Z", + "shell.execute_reply": "2026-01-14T19:09:41.606004Z" + } + }, + "outputs": [], + "source": [ + "def run_command(cmd):\n", + " \"\"\"Run a single shell command and return (cmd, returncode, stdout, stderr).\"\"\"\n", + " result = subprocess.run(cmd, shell=True, capture_output=True, text=True)\n", + " return cmd, result.returncode, result.stdout, result.stderr\n", + "\n", + "max_workers = 1 # 5\n", + "\n", + "results = \"\"\n", + "\n", + "with ThreadPoolExecutor(max_workers=max_workers) as executor:\n", + " futures = {executor.submit(run_command, cmd): cmd for cmd in commands}\n", + "\n", + " for future in as_completed(futures):\n", + " cmd, returncode, stdout, stderr = future.result()\n", + "\n", + " if returncode != 0:\n", + " print(f\"[{cmd}] exited with {returncode}\")\n", + " \n", + " if returncode == 1:\n", + " executor.shutdown()\n", + " print(stdout)\n", + " print(stderr)\n", + " assert False\n", + "\n", + " results += \"Command: \" + cmd + \"\\n\" + stdout + \"\\n\"\n", + "\n", + "with open(\"results/exp.txt\", \"w\") as outfile:\n", + " outfile.write(results)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "hybrid", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/source/official-code/mini/main.py b/source/official-code/mini/main.py new file mode 100644 index 0000000000000000000000000000000000000000..ade50448a32d0d9495d3cceda76647e2d6dda4e1 --- /dev/null +++ b/source/official-code/mini/main.py @@ -0,0 +1,175 @@ +import itertools +import os +import wandb +import json +import argparse +from copy import copy +from transformers import DataCollatorForLanguageModeling +from transformers import AutoTokenizer, AutoModelForCausalLM +from datasets import load_dataset, DatasetDict + +import numpy as np +import matplotlib.pyplot as plt + +import torch +from torch import nn +import torch.nn.functional as F +from torch.utils.data.dataloader import DataLoader +from torch.nn import CrossEntropyLoss +from torch.optim import AdamW +import re + +from transformers import get_scheduler, AutoTokenizer, AutoModelForCausalLM, AutoConfig + +from tqdm import tqdm +from collections import Counter +from pathlib import Path + +import string +from model_utils import get_model +from data_utils import get_train_dataset, get_tokenizer, get_eval_dataset, force_args, task_choices +from train_utils import train, save_model, get_optimizer +from test_utils import evaluation + +def count_parameters(model): + return sum(p.numel() for p in model.parameters() if p.requires_grad) + + +def parse_args(): + parser = argparse.ArgumentParser() + + # Task + parser.add_argument('--train_task',choices=task_choices, + required=True, help="tasks to train the model") + parser.add_argument('--eval_task',choices=task_choices, + required=True, help="tasks to evaluate the model") + + parser.add_argument('--num_vocab', default=26, type=int, help="vocabulary size in the strings. maximum is 26.") + parser.add_argument('--num_numbers', default=5, type=int, help="vocabulary (number) size in the strings. maximum is 9.") + parser.add_argument('--p', default=0.2, type=float, help="proportion, depends on task") + parser.add_argument('--eval_p', default=None, type=float, help="eval proportion, depends on task") + + parser.add_argument('--length_answer', default=0, type=int, + help="length of the answer to be returned. Set 0 if no constraint on the length of the answer.") + + # Model + parser.add_argument('--model', choices=['T_nope', 'T_rope', 'T_alibi', "T_hard_alibi", 'lstm', 'mamba', 'hybrid', 'hybrid_nope', 'pretrained'], + required=True, help='''models starting by 'T' are transformers with different positional embeddings. Other choices + are mamba and lstm and hybrids.''') + parser.add_argument('--pretrained_model', default='openai-community/gpt2', type=str, help="name of the pretrained model from huggingface to load when --model is set to 'pretrained'") + parser.add_argument('--hidden_size', default=1024, type=int, help="Hidden size of the models") + parser.add_argument('--layers', default=12, type=int, help="Number of layers in the models.") + parser.add_argument('--heads', default=16, type=int, help="Number of heads in the transformer models.") + parser.add_argument('--num_masked_heads', default=8, type=int, help='''Only when model = ''T_hard_alibi''. + Number of heads where we apply hard alibi. The remaining heads are set to nope.''') + parser.add_argument('--state_dim', default=32, type=int, help='''Only when model = ''mamba''. + Sets the state dimension of the model.''') + + # Optimization + parser.add_argument('--lr', default=1e-5, type=float, help="choice of learning rate") + parser.add_argument('--epochs', default=1, type=int, help="number of epochs") + parser.add_argument('--num_examples', default=2000, type=int, help="number of steps for each epoch") + parser.add_argument('--window', default=20, type=int, help="width of the sliding window attention") + + + parser.add_argument('--train_batch_size', default=8, type=int, help="training batch size") + parser.add_argument('--eval_batch_size', default=8, type=int, help="evaluation batch size") + parser.add_argument('--eval_num_batches', default=3, type=int, help='''number of batches to use for evaluation. + useful to have a mean + std over results.''') + + parser.add_argument('--min_train_length', default=5, type=int, help="minimum length of a training example") + parser.add_argument('--max_train_length', default=20, type=int, help="maximum length of a training example") + parser.add_argument('--min_eval_length', default=10, type=int, help="minimum length of an evaluation example") + parser.add_argument('--max_eval_length', default=20, type=int, help="maximum length of an evaluation example") + parser.add_argument('--eval_jump_type', default='linear', type=str, help="whether to use linear or exponential jumps in eval lengths") + parser.add_argument('--eval_linear_jump_size', default=5, type=int, help="maximum length of an evaluation example") + parser.add_argument('--eval_exp_num_jumps', default=5, type=int, help="number of jumps to use for exponential jumps") + + + # Context length + parser.add_argument('--sequence_length', default=220, type=int, help="context length during training") + parser.add_argument('--eval_equence_length', default=220, type=int, help="context length at evaluation time") + + # Aux + parser.add_argument('--save', default=False, type=bool, help="Whether to save the model") + parser.add_argument('--run_number', default=-1, type=int, help="Which run this is") + parser.add_argument('--print', default=False, type=bool, help="Whether to print training info or not") + + + return parser.parse_args() + + + + + + +args = parse_args() +if args.eval_p is None: + args.eval_p = args.p +force_args(args) + +if args.print: + print(args) + + +## Get train dataset & tokenizer +tokenizer = get_tokenizer(args) +train_dataset = get_train_dataset(args, tokenizer) + + + + +batch = next(iter(train_dataset)) + +if args.print: + print("v"*100) + print("EXAMPLE:", batch['input'][0]) + print("STRUNG:", tokenizer.to_string(batch['input_ids'][0])) + print("-"*100) + print("TOKENIZED:", batch['input_ids'][0][batch['mask'][0]==1]) + print("^"*100) + +## Get model +model = get_model(args, tokenizer) + +if args.print: + print() + print("v"*100) + print(model) + print(f"Number of parameters of the model: {count_parameters(model)}") + print("^"*100) + print() + + +## train the model +optimizer = get_optimizer(model, args) +train(args, model, optimizer, tokenizer, train_dataset) + + + +## save model +if args.save: + save_model(args, model) + + +## evaluation of the model + +if args.print: + print("###EVALUATION") + +model.eval() + +str_acc_mean_list, str_acc_std_list, char_accuracy_list = evaluation(args, model, tokenizer) + +if args.print: + print(args) + + print("DONE") + + print("String") + print(str_acc_mean_list) + print("Char") + print(char_accuracy_list) + + + diff --git a/source/official-code/mini/main_binary_recall.py b/source/official-code/mini/main_binary_recall.py new file mode 100644 index 0000000000000000000000000000000000000000..b963ac1c4e9dfe248608d64c04065f9cf697e7ea --- /dev/null +++ b/source/official-code/mini/main_binary_recall.py @@ -0,0 +1,153 @@ +import itertools +import os +import wandb +import json +import argparse +from copy import copy +from transformers import DataCollatorForLanguageModeling +from transformers import AutoTokenizer, AutoModelForCausalLM +from datasets import load_dataset, DatasetDict + +import numpy as np +import matplotlib.pyplot as plt + +import torch +from torch import nn +import torch.nn.functional as F +from torch.utils.data.dataloader import DataLoader +from torch.nn import CrossEntropyLoss +from torch.optim import AdamW +import re + +from transformers import get_scheduler, AutoTokenizer, AutoModelForCausalLM, AutoConfig + +from tqdm import tqdm +from collections import Counter +from pathlib import Path + +import string +from model_utils import get_model +from data_utils import get_train_dataset, get_tokenizer, get_eval_dataset, force_args, task_choices +from train_utils import train, save_model +from test_utils import evaluation + +def count_parameters(model): + return sum(p.numel() for p in model.parameters() if p.requires_grad) + + +def parse_args(): + parser = argparse.ArgumentParser() + + # Task + parser.add_argument('--train_task',choices=task_choices, + required=True, help="tasks to train the model") + parser.add_argument('--eval_task',choices=task_choices, + required=True, help="tasks to evaluate the model") + + parser.add_argument('--num_vocab', default=26, type=int, help="vocabulary size in the strings. maximum is 26.") + parser.add_argument('--num_numbers', default=5, type=int, help="vocabulary (number) size in the strings. maximum is 9.") + + parser.add_argument('--length_answer', default=0, type=int, + help="length of the answer to be returned. Set 0 if no constraint on the length of the answer.") + + # Model + parser.add_argument('--model', choices=['T_nope', 'T_rope', 'T_alibi', "T_hard_alibi", 'lstm', 'mamba', 'hybrid'], + required=True, help='''models starting by 'T' are transformers with different positional embeddings. Other choices + are mamba and lstm and hybrids.''') + parser.add_argument('--hidden_size', default=1024, type=int, help="Hidden size of the models") + parser.add_argument('--layers', default=12, type=int, help="Number of layers in the models.") + parser.add_argument('--heads', default=16, type=int, help="Number of heads in the transformer models.") + parser.add_argument('--num_masked_heads', default=8, type=int, help='''Only when model = ''T_hard_alibi''. + Number of heads where we apply hard alibi. The remaining heads are set to nope.''') + parser.add_argument('--state_dim', default=32, type=int, help='''Only when model = ''mamba''. + Sets the state dimension of the model.''') + + # Optimization + parser.add_argument('--lr', default=1e-5, type=float, help="choice of learning rate") + parser.add_argument('--epochs', default=1, type=int, help="number of epochs") + parser.add_argument('--num_examples', default=2000, type=int, help="number of steps for each epoch") + parser.add_argument('--window', default=20, type=int, help="width of the sliding window attention") + + + parser.add_argument('--train_batch_size', default=8, type=int, help="training batch size") + parser.add_argument('--eval_batch_size', default=8, type=int, help="evaluation batch size") + parser.add_argument('--eval_num_batches', default=3, type=int, help='''number of batches to use for evaluation. + useful to have a mean + std over results.''') + + parser.add_argument('--min_train_length', default=5, type=int, help="minimum length of a training example") + parser.add_argument('--max_train_length', default=20, type=int, help="maximum length of a training example") + parser.add_argument('--min_eval_length', default=10, type=int, help="minimum length of an evaluation example") + parser.add_argument('--max_eval_length', default=20, type=int, help="maximum length of an evaluation example") + + + # Context length + parser.add_argument('--sequence_length', default=220, type=int, help="context length during training") + parser.add_argument('--eval_equence_length', default=220, type=int, help="context length at evaluation time") + + + return parser.parse_args() + + + + + + +args = parse_args() +force_args(args) + +print(args) + + +## Get train dataset & tokenizer +tokenizer = get_tokenizer(args) +train_dataset = get_train_dataset(args, tokenizer) + + + + +batch = next(iter(train_dataset)) + +print("v"*100) +print("EXAMPLE:", batch['input'][0]) +print("STRUNG:", tokenizer.to_string(batch['input_ids'][0])) +print("-"*100) +print("TOKENIZED:", batch['input_ids'][0][batch['mask'][0]==1]) +print("^"*100) + +## Get model +model = get_model(args, tokenizer) + +print() +print("v"*100) +print(model) +print(f"Number of parameters of the model: {count_parameters(model)}") +print("^"*100) +print() + + +## train the model +train(args, model, tokenizer, train_dataset) + + + +## save model +save_model(args, model) + + +## evaluation of the model + +print("###EVALUATION") + +model.eval() + +for p in np.linspace(0.4, 0.02, 20): + print("p:", p) + str_acc_mean_list, str_acc_std_list, char_accuracy_list = evaluation(args, model, tokenizer, do_print=False, p=p) + + +print(args) + +print("DONE") + + + diff --git a/source/official-code/mini/model_utils.py b/source/official-code/mini/model_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..4b0ae34583658876ed6ba1d48eb55ca2ec90e32e --- /dev/null +++ b/source/official-code/mini/model_utils.py @@ -0,0 +1,105 @@ +import os +from models import ( + LSTM, + GPTNeoXAlibiForCausalLM, + GPTNeoXHardAlibiForCausalLM, + GPTNeoXNoPEForCausalLM, + GPTNeoXForCausalLM, + MambaForCausalLM, + HybridNoPEForCausalLM, + HybridForCausalLM, + HybridNoPEConfig, + HybridConfig + ) + +from transformers import GPTNeoXConfig +from transformers import MambaConfig +from transformers import AutoModelForCausalLM + +def get_model(args, tokenizer): + if args.model in ["T_nope","T_rope","T_alibi"]: + config = GPTNeoXConfig( + bos_token_id=0, + eos_token_id=0, + hidden_size=args.hidden_size, + intermediate_size=args.hidden_size*4, + num_attention_heads=args.heads, + num_hidden_layers=args.layers, + vocab_size=len(tokenizer), + ) + elif args.model == "T_hard_alibi": + config = GPTNeoXConfig( + bos_token_id=0, + eos_token_id=0, + hidden_size=args.hidden_size, + intermediate_size=args.hidden_size*4, + num_attention_heads=args.heads, + num_hidden_layers=args.layers, + num_masked_heads=args.num_masked_heads, + vocab_size=len(tokenizer), + ) + elif args.model == "mamba": + config = MambaConfig( + hidden_size=args.hidden_size, + d_model=args.hidden_size, + n_layer=args.layers, + ssm_cfg={"d_state": args.state_dim}, + vocab_size=len(tokenizer), + ) + elif args.model == "hybrid": + config = HybridConfig( + bos_token_id=0, + eos_token_id=0, + hidden_size=args.hidden_size, + intermediate_size=args.hidden_size*4, + num_attention_heads=args.heads, + num_hidden_layers=args.layers, + d_model=args.hidden_size, + n_layer=args.layers, + ssm_cfg={"d_state": args.state_dim}, + vocab_size=len(tokenizer), + ) + elif args.model == "hybrid_nope": + config = HybridNoPEConfig( + bos_token_id=0, + eos_token_id=0, + hidden_size=args.hidden_size, + intermediate_size=args.hidden_size*4, + num_attention_heads=args.heads, + num_hidden_layers=args.layers, + d_model=args.hidden_size, + n_layer=args.layers, + ssm_cfg={"d_state": args.state_dim}, + vocab_size=len(tokenizer), + ) + + + + if args.model=="T_rope": + model = GPTNeoXForCausalLM(config) + elif args.model=="T_nope": + model = GPTNeoXNoPEForCausalLM(config) + elif args.model=="T_alibi": + model = GPTNeoXAlibiForCausalLM(config) + elif args.model=="T_hard_alibi": + model = GPTNeoXHardAlibiForCausalLM(config) + elif args.model=="mamba": + model = MambaForCausalLM(config) + elif args.model=="lstm": + model = LSTM( + embedding_dim=args.hidden_size, + vocab_size=len(tokenizer), + num_layers=args.layers, + dropout_rate=0.65 + ) + elif args.model=="hybrid": + model = HybridForCausalLM(config) + elif args.model=="hybrid_nope": + model = HybridNoPEForCausalLM(config) + + if args.model == "pretrained": + model = AutoModelForCausalLM.from_pretrained(args.pretrain_model) + + return model + + diff --git a/source/official-code/mini/models/__init__.py b/source/official-code/mini/models/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..67ace11524824139bce7e443ecaa81e66b42c585 --- /dev/null +++ b/source/official-code/mini/models/__init__.py @@ -0,0 +1,8 @@ +from .alibi_model import * +from .hard_alibi_model import * +from .lstm import * +from .nope import * +from .rope import * +from .hybrid import * +from .hybrid_nope import * +from .mamba import * \ No newline at end of file diff --git a/source/official-code/mini/models/alibi_model.py b/source/official-code/mini/models/alibi_model.py new file mode 100644 index 0000000000000000000000000000000000000000..f907f74446ef2da588676be01d37bc22bcb609a0 --- /dev/null +++ b/source/official-code/mini/models/alibi_model.py @@ -0,0 +1,647 @@ +""" PyTorch GPTNeoX model.""" + +from typing import Optional, Tuple, Union + +import torch +import torch.utils.checkpoint +from torch import nn +from torch.nn import BCEWithLogitsLoss, CrossEntropyLoss, MSELoss + +from transformers.activations import ACT2FN +from transformers.modeling_outputs import ( + BaseModelOutputWithPast, + CausalLMOutputWithPast, + QuestionAnsweringModelOutput, + SequenceClassifierOutputWithPast, + TokenClassifierOutput, +) +from transformers.modeling_utils import PreTrainedModel +from transformers.utils import logging + +from transformers.models.gpt_neox.configuration_gpt_neox import GPTNeoXConfig + +from transformers.models.gpt_neox.modeling_gpt_neox import GPTNeoXPreTrainedModel, GPTNeoXMLP + +import math + + +logger = logging.get_logger(__name__) + + +##https://github.com/huggingface/transformers/blob/main/src/transformers/models/mpt/modeling_mpt.py + +def build_mpt_alibi_tensor(num_heads, sequence_length, alibi_bias_max=8, device=None): + r""" + Link to paper: https://arxiv.org/abs/2108.12409 - Alibi tensor is not causal as the original paper mentions, it + relies on a translation invariance of softmax for quick implementation. This implementation has been copied from + the alibi implementation of MPT source code that led to slightly different results than the Bloom alibi: + https://huggingface.co/mosaicml/mpt-7b/blob/main/attention.py#L292 + """ + alibi = torch.arange(1 - sequence_length, 1, dtype=torch.int32, device=device).view(1, 1, 1, sequence_length) + num_heads_power_of_2 = 2 ** math.ceil(math.log2(num_heads)) + + base = torch.arange(1, num_heads_power_of_2 + 1, dtype=torch.float32, device=device) + base = base * (alibi_bias_max / num_heads_power_of_2) + + slopes = 1.0 / torch.pow(2, base) + slopes = slopes.view(1, num_heads, 1, 1) + + if num_heads_power_of_2 != num_heads: + slopes = torch.concat([slopes[1::2], slopes[::2]])[:num_heads] + + alibi = alibi * slopes + return alibi.squeeze(0) + + + + +class GPTAlibiAttention(nn.Module): + def __init__(self, config): + super().__init__() + self.config = config + self.num_attention_heads = config.num_attention_heads + self.hidden_size = config.hidden_size + if self.hidden_size % self.num_attention_heads != 0: + raise ValueError( + "The hidden size is not divisble by the number of attention heads! Make sure to update them" + ) + self.head_size = self.hidden_size // self.num_attention_heads + self.rotary_ndims = int(self.head_size * config.rotary_pct) + self._init_bias(config.max_position_embeddings) + + self.register_buffer("masked_bias", torch.tensor(-1e9), persistent=False) + self.norm_factor = self.head_size**-0.5 + self.query_key_value = nn.Linear(config.hidden_size, 3 * config.hidden_size) + self.dense = nn.Linear(config.hidden_size, config.hidden_size) + self.attention_dropout = nn.Dropout(config.attention_dropout) + + + def build_mpt_alibi_tensor(self, num_heads, sequence_length, alibi_bias_max=8, device=None): + return build_mpt_alibi_tensor(num_heads, sequence_length, alibi_bias_max, device) + + def _init_bias(self, max_positions, device=None): + self.register_buffer( + "bias", + torch.tril(torch.ones((max_positions, max_positions), dtype=torch.bool)).view( + 1, 1, max_positions, max_positions + ), + persistent=False, + ) + if device is not None: + self.bias = self.bias.to(device) + + def forward( + self, + hidden_states: torch.FloatTensor, + attention_mask: torch.FloatTensor, + position_ids: torch.LongTensor, + head_mask: Optional[torch.FloatTensor] = None, + layer_past: Optional[Tuple[torch.Tensor]] = None, + use_cache: Optional[bool] = False, + output_attentions: Optional[bool] = False, + ): + has_layer_past = layer_past is not None + + # Compute QKV + # Attention heads [batch, seq_len, hidden_size] + # --> [batch, seq_len, (np * 3 * head_size)] + qkv = self.query_key_value(hidden_states) + + # [batch, seq_len, (num_heads * 3 * head_size)] + # --> [batch, seq_len, num_heads, 3 * head_size] + new_qkv_shape = qkv.size()[:-1] + (self.num_attention_heads, 3 * self.head_size) + qkv = qkv.view(*new_qkv_shape) + + # [batch, seq_len, num_attention_heads, 3 * head_size] --> 3 [batch, num_attention_heads, seq_len, head_size] + query = qkv[..., : self.head_size].permute(0, 2, 1, 3) + key = qkv[..., self.head_size : 2 * self.head_size].permute(0, 2, 1, 3) + value = qkv[..., 2 * self.head_size :].permute(0, 2, 1, 3) + + # Compute rotary embeddings on rotary_ndims + query_rot = query[..., : self.rotary_ndims] + query_pass = query[..., self.rotary_ndims :] + key_rot = key[..., : self.rotary_ndims] + key_pass = key[..., self.rotary_ndims :] + + # Compute token offset for rotary embeddings (when decoding) + seq_len = key.shape[-2] + if has_layer_past: + seq_len += layer_past[0].shape[-2] + query = torch.cat((query, query_pass), dim=-1) + key = torch.cat((key, key_pass), dim=-1) + + # Cache QKV values + if has_layer_past: + past_key = layer_past[0] + past_value = layer_past[1] + key = torch.cat((past_key, key), dim=-2) + value = torch.cat((past_value, value), dim=-2) + present = (key, value) if use_cache else None + + # Compute attention + attn_output, attn_weights = self._attn(query, key, value, attention_mask, head_mask) + + # Reshape outputs + attn_output = self._merge_heads(attn_output, self.num_attention_heads, self.head_size) + attn_output = self.dense(attn_output) + + outputs = (attn_output, present) + if output_attentions: + outputs += (attn_weights,) + + return outputs + + @classmethod + def _split_heads(cls, tensor, num_attention_heads, attn_head_size): + """ + Splits hidden dim into attn_head_size and num_attention_heads + """ + # tensor: [bs, seq_len, hidden_size] + new_shape = tensor.size()[:-1] + (num_attention_heads, attn_head_size) + # -> [bs, seq_len, num_attention_heads, attn_head_size] + tensor = tensor.view(new_shape) + # -> [bs, num_attention_heads, seq_len, attn_head_size] + tensor = tensor.permute(0, 2, 1, 3) + return tensor + + @classmethod + def _merge_heads(cls, tensor, num_attention_heads, attn_head_size): + """ + Merges attn_head_size dim and num_attn_heads dim into hidden dim + """ + # tensor [bs, num_attention_heads, seq_len, attn_head_size] + tensor = tensor.permute(0, 2, 1, 3).contiguous() + # -> [bs, seq_len, num_attention_heads, attn_head_size] + tensor = tensor.view(tensor.size(0), tensor.size(1), num_attention_heads * attn_head_size) + # -> [bs, seq_len, hidden_size] + return tensor + + def _attn(self, query, key, value, attention_mask=None, head_mask=None): + # q, k, v: [bs, num_attention_heads, seq_len, attn_head_size] + # compute causal mask from causal mask buffer + batch_size, num_attention_heads, query_length, attn_head_size = query.size() + key_length = key.size(-2) + + # dynamically increase the causal mask with the key length, if needed. + if key_length > self.bias.shape[-1]: + self._init_bias(key_length, device=key.device) + + ##ALIBI + # this is called position bias in mpt code + alibi = self.build_mpt_alibi_tensor(self.num_attention_heads, self.config.max_position_embeddings, device=query.device) + + causal_mask = self.bias[:, :, key_length - query_length : key_length, :key_length] + + + query = query.view(batch_size * num_attention_heads, query_length, attn_head_size) + key = key.view(batch_size * num_attention_heads, key_length, attn_head_size) + attn_scores = torch.zeros( + batch_size * num_attention_heads, + query_length, + key_length, + dtype=query.dtype, + device=key.device, + ) + attn_scores = torch.baddbmm( + attn_scores, + query, + key.transpose(1, 2), + beta=1.0, + alpha=self.norm_factor, + ) + attn_scores = attn_scores.view(batch_size, num_attention_heads, query_length, key_length) + + + ##adding alibi here + + position_bias_query_index = max(0, alibi.size(1) - query_length) + position_bias_key_index = max(0, alibi.size(2) - key_length) + + alibi = alibi[:, position_bias_query_index:, position_bias_key_index:] + + + attn_scores = attn_scores + alibi + + ##end of adding alibi + + + + + + mask_value = torch.finfo(attn_scores.dtype).min + # Need to be a tensor, otherwise we get error: `RuntimeError: expected scalar type float but found double`. + # Need to be on the same device, otherwise `RuntimeError: ..., x and y to be on the same device` + mask_value = torch.tensor(mask_value, dtype=attn_scores.dtype).to(attn_scores.device) + attn_scores = torch.where(causal_mask, attn_scores, mask_value) + + if attention_mask is not None: + # Apply the attention mask + attn_scores = attn_scores + attention_mask + + attn_weights = nn.functional.softmax(attn_scores, dim=-1) + attn_weights = attn_weights.to(value.dtype) + + # Mask heads if we want to + if head_mask is not None: + attn_weights = attn_weights * head_mask + + + #print(f"ATTN WEIGHTS {attn_weights[0][0]}") + #ferkn + + + + + attn_weights = self.attention_dropout(attn_weights) + + attn_output = torch.matmul(attn_weights, value) + return attn_output, attn_weights + + + +class GPTNeoXAlibiLayer(nn.Module): + def __init__(self, config): + super().__init__() + self.use_parallel_residual = config.use_parallel_residual + self.input_layernorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.post_attention_layernorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.post_attention_dropout = nn.Dropout(config.hidden_dropout) + self.post_mlp_dropout = nn.Dropout(config.hidden_dropout) + self.attention = GPTAlibiAttention(config) + self.mlp = GPTNeoXMLP(config) + + def forward( + self, + hidden_states: Optional[torch.FloatTensor], + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + use_cache: Optional[bool] = False, + layer_past: Optional[Tuple[torch.Tensor]] = None, + output_attentions: Optional[bool] = False, + ): + attention_layer_outputs = self.attention( + self.input_layernorm(hidden_states), + attention_mask=attention_mask, + position_ids=position_ids, + layer_past=layer_past, + head_mask=head_mask, + use_cache=use_cache, + output_attentions=output_attentions, + ) + attn_output = attention_layer_outputs[0] # output_attn: attn_output, present, (attn_weights) + attn_output = self.post_attention_dropout(attn_output) + outputs = attention_layer_outputs[1:] + + if self.use_parallel_residual: + # pseudocode: + # x = x + attn(ln1(x)) + mlp(ln2(x)) + mlp_output = self.mlp(self.post_attention_layernorm(hidden_states)) + mlp_output = self.post_mlp_dropout(mlp_output) + hidden_states = mlp_output + attn_output + hidden_states + else: + # pseudocode: + # x = x + attn(ln1(x)) + # x = x + mlp(ln2(x)) + attn_output = attn_output + hidden_states + mlp_output = self.mlp(self.post_attention_layernorm(attn_output)) + mlp_output = self.post_mlp_dropout(mlp_output) + hidden_states = mlp_output + attn_output + + if use_cache: + outputs = (hidden_states,) + outputs # hidden_states, present, (attn_weights) + else: + outputs = (hidden_states,) + outputs[1:] # hidden_states, (attn_weights) + + return outputs + + + +class GPTNeoXAlibiModel(GPTNeoXPreTrainedModel): + def __init__(self, config): + super().__init__(config) + self.config = config + + self.embed_in = nn.Embedding(config.vocab_size, config.hidden_size) + self.emb_dropout = nn.Dropout(config.hidden_dropout) + self.layers = nn.ModuleList([GPTNeoXAlibiLayer(config) for _ in range(config.num_hidden_layers)]) + self.final_layer_norm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + + self.gradient_checkpointing = False + + # Initialize weights and apply final processing + self.post_init() + + + def get_input_embeddings(self): + return self.embed_in + + def set_input_embeddings(self, value): + self.embed_in = value + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, BaseModelOutputWithPast]: + r""" + past_key_values (`tuple(tuple(torch.FloatTensor))` of length `config.n_layers` with each tuple having 4 tensors of shape `(batch_size, num_heads, sequence_length - 1, embed_size_per_head)`): + Contains precomputed key and value hidden states of the attention blocks. Can be used to speed up decoding. + If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that + don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all + `decoder_input_ids` of shape `(batch_size, sequence_length)`. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see + `past_key_values`). + """ + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + use_cache = use_cache if use_cache is not None else self.config.use_cache + + if input_ids is not None and inputs_embeds is not None: + raise ValueError("You cannot specify both input_ids and inputs_embeds at the same time") + elif input_ids is not None: + self.warn_if_padding_and_no_attention_mask(input_ids, attention_mask) + input_shape = input_ids.size() + elif inputs_embeds is not None: + input_shape = inputs_embeds.size()[:-1] + else: + raise ValueError("You have to specify either input_ids or inputs_embeds") + + batch_size, seq_length = input_shape + + if past_key_values is None: + past_length = 0 + past_key_values = tuple([None] * self.config.num_hidden_layers) + else: + past_length = past_key_values[0][0].size(-2) + + if position_ids is None: + device = input_ids.device if input_ids is not None else inputs_embeds.device + position_ids = torch.arange(past_length, seq_length + past_length, dtype=torch.long, device=device) + position_ids = position_ids.unsqueeze(0) + + # Attention mask. + if attention_mask is not None: + assert batch_size > 0, "batch_size has to be defined and > 0" + attention_mask = attention_mask.view(batch_size, -1) + # We create a 3D attention mask from a 2D tensor mask. + # Sizes are [batch_size, 1, 1, to_seq_length] + # So we can broadcast to [batch_size, num_heads, from_seq_length, to_seq_length] + # this attention mask is more simple than the triangular masking of causal attention + # used in OpenAI GPT, we just need to prepare the broadcast dimension here. + attention_mask = attention_mask[:, None, None, :] + + # Since attention_mask is 1.0 for positions we want to attend and 0.0 for + # masked positions, this operation will create a tensor which is 0.0 for + # positions we want to attend and the dtype's smallest value for masked positions. + # Since we are adding it to the raw scores before the softmax, this is + # effectively the same as removing these entirely. + attention_mask = attention_mask.to(dtype=self.dtype) # fp16 compatibility + attention_mask = (1.0 - attention_mask) * torch.finfo(self.dtype).min + + # Prepare head mask if needed + # 1.0 in head_mask indicate we keep the head + # attention_probs has shape bsz x n_heads x N x N + # input head_mask has shape [num_heads] or [num_hidden_layers x num_heads] + # and head_mask is converted to shape [num_hidden_layers x batch x num_heads x seq_length x seq_length] + head_mask = self.get_head_mask(head_mask, self.config.num_hidden_layers) + + if inputs_embeds is None: + inputs_embeds = self.embed_in(input_ids) + + hidden_states = self.emb_dropout(inputs_embeds) + + if self.gradient_checkpointing and self.training: + if use_cache: + logger.warning( + "`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`..." + ) + use_cache = False + + presents = () if use_cache else None + all_attentions = () if output_attentions else None + all_hidden_states = () if output_hidden_states else None + for i, (layer, layer_past) in enumerate(zip(self.layers, past_key_values)): + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if self.gradient_checkpointing and self.training: + outputs = self._gradient_checkpointing_func( + layer.__call__, + hidden_states, + attention_mask, + position_ids, + head_mask[i], + use_cache, + None, + output_attentions, + ) + else: + outputs = layer( + hidden_states, + attention_mask=attention_mask, + position_ids=position_ids, + head_mask=head_mask[i], + layer_past=layer_past, + use_cache=use_cache, + output_attentions=output_attentions, + ) + hidden_states = outputs[0] + if use_cache is True: + presents = presents + (outputs[1],) + if output_attentions: + all_attentions = all_attentions + (outputs[2 if use_cache else 1],) + + hidden_states = self.final_layer_norm(hidden_states) + # Add last hidden state + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if not return_dict: + return tuple(v for v in [hidden_states, presents, all_hidden_states, all_attentions] if v is not None) + + return BaseModelOutputWithPast( + last_hidden_state=hidden_states, + past_key_values=presents, + hidden_states=all_hidden_states, + attentions=all_attentions, + ) + + +class GPTNeoXAlibiForCausalLM(GPTNeoXPreTrainedModel): + _tied_weights_keys = ["embed_out.weight"] + + def __init__(self, config): + super().__init__(config) + + self.gpt_neox = GPTNeoXAlibiModel(config) + self.embed_out = nn.Linear(config.hidden_size, config.vocab_size, bias=False) + + # Initialize weights and apply final processing + self.post_init() + + def get_output_embeddings(self): + return self.embed_out + + def set_output_embeddings(self, new_embeddings): + self.embed_out = new_embeddings + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None, + labels: Optional[torch.LongTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, CausalLMOutputWithPast]: + r""" + past_key_values (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`): + Tuple of `tuple(torch.FloatTensor)` of length `config.n_layers`, with each tuple having 2 tensors of shape + `(batch_size, num_heads, sequence_length, embed_size_per_head)`) and 2 additional tensors of shape + `(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)`. The two additional tensors are + only required when the model is used as a decoder in a Sequence to Sequence model. + + Contains pre-computed hidden-states (key and values in the self-attention blocks that can be used (see + `past_key_values` input) to speed up sequential decoding. + + If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that + don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all + `decoder_input_ids` of shape `(batch_size, sequence_length)`. + labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*): + Labels for computing the left-to-right language modeling loss (next word prediction). Indices should be in + `[-100, 0, ..., config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are + ignored (masked), the loss is only computed for the tokens with labels n `[0, ..., config.vocab_size]`. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see + `past_key_values`). + + Returns: + + Example: + + ```python + >>> from transformers import AutoTokenizer, GPTNeoXForCausalLM, GPTNeoXConfig + >>> import torch + + >>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-neox-20b") + >>> config = GPTNeoXConfig.from_pretrained("EleutherAI/gpt-neox-20b") + >>> config.is_decoder = True + >>> model = GPTNeoXForCausalLM.from_pretrained("EleutherAI/gpt-neox-20b", config=config) + + >>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt") + >>> outputs = model(**inputs) + + >>> prediction_logits = outputs.logits + ```""" + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + outputs = self.gpt_neox( + input_ids, + attention_mask=attention_mask, + position_ids=position_ids, + head_mask=head_mask, + inputs_embeds=inputs_embeds, + past_key_values=past_key_values, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + + hidden_states = outputs[0] + lm_logits = self.embed_out(hidden_states) + + lm_loss = None + if labels is not None: + # move labels to correct device to enable model parallelism + labels = labels.to(lm_logits.device) + # we are doing next-token prediction; shift prediction scores and input ids by one + shift_logits = lm_logits[:, :-1, :].contiguous() + labels = labels[:, 1:].contiguous() + loss_fct = CrossEntropyLoss() + lm_loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), labels.view(-1)) + + if not return_dict: + output = (lm_logits,) + outputs[1:] + return ((lm_loss,) + output) if lm_loss is not None else output + + return CausalLMOutputWithPast( + loss=lm_loss, + logits=lm_logits, + past_key_values=outputs.past_key_values, + hidden_states=outputs.hidden_states, + attentions=outputs.attentions, + ) + + def prepare_inputs_for_generation( + self, input_ids, past_key_values=None, attention_mask=None, inputs_embeds=None, **kwargs + ): + input_shape = input_ids.shape + # cut decoder_input_ids if past is used + if past_key_values is not None: + past_length = past_key_values[0][0].shape[2] + + # Some generation methods already pass only the last input ID + if input_ids.shape[1] > past_length: + remove_prefix_length = past_length + else: + # Default to old behavior: keep only final ID + remove_prefix_length = input_ids.shape[1] - 1 + + input_ids = input_ids[:, remove_prefix_length:] + + position_ids = kwargs.get("position_ids", None) + if attention_mask is not None and position_ids is None: + # create position_ids on the fly for batch generation + position_ids = attention_mask.long().cumsum(-1) - 1 + position_ids.masked_fill_(attention_mask == 0, 1) + if past_key_values: + position_ids = position_ids[:, -input_ids.shape[1] :] + + # if model is used as a decoder in encoder-decoder model, the decoder attention mask is created on the fly + if attention_mask is None: + attention_mask = input_ids.new_ones(input_shape) + + # if `inputs_embeds` are passed, we only want to use them in the 1st generation step + if inputs_embeds is not None and past_key_values is None: + model_inputs = {"inputs_embeds": inputs_embeds} + else: + model_inputs = {"input_ids": input_ids} + model_inputs.update( + { + "attention_mask": attention_mask, + "past_key_values": past_key_values, + "position_ids": position_ids, + } + ) + + return model_inputs + + def _reorder_cache(self, past_key_values, beam_idx): + reordered_past = () + for layer_past in past_key_values: + reordered_past += ( + tuple(past_state.index_select(0, beam_idx.to(past_state.device)) for past_state in layer_past[:2]) + + layer_past[2:], + ) + return reordered_past + + diff --git a/source/official-code/mini/models/hard_alibi_model.py b/source/official-code/mini/models/hard_alibi_model.py new file mode 100644 index 0000000000000000000000000000000000000000..a00c51febc28eb13e3365cfb4f0bbffcbd625a04 --- /dev/null +++ b/source/official-code/mini/models/hard_alibi_model.py @@ -0,0 +1,593 @@ +""" """ + +from typing import Optional, Tuple, Union + +import torch +import torch.utils.checkpoint +from torch import nn +from torch.nn import BCEWithLogitsLoss, CrossEntropyLoss, MSELoss + +from transformers.activations import ACT2FN +from transformers.modeling_outputs import ( + BaseModelOutputWithPast, + CausalLMOutputWithPast, + QuestionAnsweringModelOutput, + SequenceClassifierOutputWithPast, + TokenClassifierOutput, +) +from transformers.modeling_utils import PreTrainedModel +from transformers.utils import logging + +from transformers.models.gpt_neox.configuration_gpt_neox import GPTNeoXConfig + +from transformers.models.gpt_neox.modeling_gpt_neox import GPTNeoXPreTrainedModel, GPTNeoXMLP + +logger = logging.get_logger(__name__) + + + + +class GPTHardAlibiAttention(nn.Module): + def __init__(self, config): + super().__init__() + self.config = config + self.num_attention_heads = config.num_attention_heads + self.hidden_size = config.hidden_size + if self.hidden_size % self.num_attention_heads != 0: + raise ValueError( + "The hidden size is not divisble by the number of attention heads! Make sure to update them" + ) + self.head_size = self.hidden_size // self.num_attention_heads + self.rotary_ndims = int(self.head_size * config.rotary_pct) + self._init_bias(config.max_position_embeddings) + + self.register_buffer("masked_bias", torch.tensor(-1e9), persistent=False) + self.norm_factor = self.head_size**-0.5 + self.query_key_value = nn.Linear(config.hidden_size, 3 * config.hidden_size) + self.dense = nn.Linear(config.hidden_size, config.hidden_size) + self.attention_dropout = nn.Dropout(config.attention_dropout) + + def _init_bias(self, max_positions, device=None): + self.register_buffer( + "bias", + torch.tril(torch.ones((max_positions, max_positions), dtype=torch.bool)).view( + 1, 1, max_positions, max_positions + ), + persistent=False, + ) + if device is not None: + self.bias = self.bias.to(device) + + def forward( + self, + hidden_states: torch.FloatTensor, + attention_mask: torch.FloatTensor, + position_ids: torch.LongTensor, + head_mask: Optional[torch.FloatTensor] = None, + layer_past: Optional[Tuple[torch.Tensor]] = None, + use_cache: Optional[bool] = False, + output_attentions: Optional[bool] = False, + ): + has_layer_past = layer_past is not None + + # Compute QKV + # Attention heads [batch, seq_len, hidden_size] + # --> [batch, seq_len, (np * 3 * head_size)] + qkv = self.query_key_value(hidden_states) + + # [batch, seq_len, (num_heads * 3 * head_size)] + # --> [batch, seq_len, num_heads, 3 * head_size] + new_qkv_shape = qkv.size()[:-1] + (self.num_attention_heads, 3 * self.head_size) + qkv = qkv.view(*new_qkv_shape) + + # [batch, seq_len, num_attention_heads, 3 * head_size] --> 3 [batch, num_attention_heads, seq_len, head_size] + query = qkv[..., : self.head_size].permute(0, 2, 1, 3) + key = qkv[..., self.head_size : 2 * self.head_size].permute(0, 2, 1, 3) + value = qkv[..., 2 * self.head_size :].permute(0, 2, 1, 3) + + # Compute rotary embeddings on rotary_ndims + query_rot = query[..., : self.rotary_ndims] + query_pass = query[..., self.rotary_ndims :] + key_rot = key[..., : self.rotary_ndims] + key_pass = key[..., self.rotary_ndims :] + + # Compute token offset for rotary embeddings (when decoding) + seq_len = key.shape[-2] + if has_layer_past: + seq_len += layer_past[0].shape[-2] + query = torch.cat((query, query_pass), dim=-1) + key = torch.cat((key, key_pass), dim=-1) + + # Cache QKV values + if has_layer_past: + past_key = layer_past[0] + past_value = layer_past[1] + key = torch.cat((past_key, key), dim=-2) + value = torch.cat((past_value, value), dim=-2) + present = (key, value) if use_cache else None + + # Compute attention + attn_output, attn_weights = self._attn(query, key, value, attention_mask, head_mask) + + # Reshape outputs + attn_output = self._merge_heads(attn_output, self.num_attention_heads, self.head_size) + attn_output = self.dense(attn_output) + + outputs = (attn_output, present) + if output_attentions: + outputs += (attn_weights,) + + return outputs + + @classmethod + def _split_heads(cls, tensor, num_attention_heads, attn_head_size): + """ + Splits hidden dim into attn_head_size and num_attention_heads + """ + # tensor: [bs, seq_len, hidden_size] + new_shape = tensor.size()[:-1] + (num_attention_heads, attn_head_size) + # -> [bs, seq_len, num_attention_heads, attn_head_size] + tensor = tensor.view(new_shape) + # -> [bs, num_attention_heads, seq_len, attn_head_size] + tensor = tensor.permute(0, 2, 1, 3) + return tensor + + @classmethod + def _merge_heads(cls, tensor, num_attention_heads, attn_head_size): + """ + Merges attn_head_size dim and num_attn_heads dim into hidden dim + """ + # tensor [bs, num_attention_heads, seq_len, attn_head_size] + tensor = tensor.permute(0, 2, 1, 3).contiguous() + # -> [bs, seq_len, num_attention_heads, attn_head_size] + tensor = tensor.view(tensor.size(0), tensor.size(1), num_attention_heads * attn_head_size) + # -> [bs, seq_len, hidden_size] + return tensor + + def _attn(self, query, key, value, attention_mask=None, head_mask=None): + # q, k, v: [bs, num_attention_heads, seq_len, attn_head_size] + # compute causal mask from causal mask buffer + batch_size, num_attention_heads, query_length, attn_head_size = query.size() + key_length = key.size(-2) + + # dynamically increase the causal mask with the key length, if needed. + if key_length > self.bias.shape[-1]: + self._init_bias(key_length, device=key.device) + causal_mask = self.bias[:, :, key_length - query_length : key_length, :key_length] + + query = query.view(batch_size * num_attention_heads, query_length, attn_head_size) + key = key.view(batch_size * num_attention_heads, key_length, attn_head_size) + attn_scores = torch.zeros( + batch_size * num_attention_heads, + query_length, + key_length, + dtype=query.dtype, + device=key.device, + ) + attn_scores = torch.baddbmm( + attn_scores, + query, + key.transpose(1, 2), + beta=1.0, + alpha=self.norm_factor, + ) + attn_scores = attn_scores.view(batch_size, num_attention_heads, query_length, key_length) + + mask_value = torch.finfo(attn_scores.dtype).min + # Need to be a tensor, otherwise we get error: `RuntimeError: expected scalar type float but found double`. + # Need to be on the same device, otherwise `RuntimeError: ..., x and y to be on the same device` + mask_value = torch.tensor(mask_value, dtype=attn_scores.dtype).to(attn_scores.device) + attn_scores = torch.where(causal_mask, attn_scores, mask_value) + + if attention_mask is not None: + # Apply the attention mask + attn_scores = attn_scores + attention_mask + + + #masking + new_attn_scores = attn_scores.clone() + for i in range(self.config.num_masked_heads): + mask_head = torch.ones_like(attn_scores[:,0]) * mask_value + for j in range(i+1): + mask_head[:,range(j,mask_head.shape[1]), range(0,mask_head.shape[2]-j)] = 0 + new_attn_scores[:,i] = attn_scores[:,i] + mask_head + + attn_weights = nn.functional.softmax(new_attn_scores, dim=-1) + attn_weights = attn_weights.to(value.dtype) + + # Mask heads if we want to + if head_mask is not None: + attn_weights = attn_weights * head_mask + + attn_weights = self.attention_dropout(attn_weights) + + attn_output = torch.matmul(attn_weights, value) + return attn_output, attn_weights + + + +class GPTNeoXHardAlibiLayer(nn.Module): + def __init__(self, config): + super().__init__() + self.use_parallel_residual = config.use_parallel_residual + self.input_layernorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.post_attention_layernorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.post_attention_dropout = nn.Dropout(config.hidden_dropout) + self.post_mlp_dropout = nn.Dropout(config.hidden_dropout) + self.attention = GPTHardAlibiAttention(config) + self.mlp = GPTNeoXMLP(config) + + def forward( + self, + hidden_states: Optional[torch.FloatTensor], + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + use_cache: Optional[bool] = False, + layer_past: Optional[Tuple[torch.Tensor]] = None, + output_attentions: Optional[bool] = False, + ): + attention_layer_outputs = self.attention( + self.input_layernorm(hidden_states), + attention_mask=attention_mask, + position_ids=position_ids, + layer_past=layer_past, + head_mask=head_mask, + use_cache=use_cache, + output_attentions=output_attentions, + ) + attn_output = attention_layer_outputs[0] # output_attn: attn_output, present, (attn_weights) + attn_output = self.post_attention_dropout(attn_output) + outputs = attention_layer_outputs[1:] + + if self.use_parallel_residual: + # pseudocode: + # x = x + attn(ln1(x)) + mlp(ln2(x)) + mlp_output = self.mlp(self.post_attention_layernorm(hidden_states)) + mlp_output = self.post_mlp_dropout(mlp_output) + hidden_states = mlp_output + attn_output + hidden_states + else: + # pseudocode: + # x = x + attn(ln1(x)) + # x = x + mlp(ln2(x)) + attn_output = attn_output + hidden_states + mlp_output = self.mlp(self.post_attention_layernorm(attn_output)) + mlp_output = self.post_mlp_dropout(mlp_output) + hidden_states = mlp_output + attn_output + + if use_cache: + outputs = (hidden_states,) + outputs # hidden_states, present, (attn_weights) + else: + outputs = (hidden_states,) + outputs[1:] # hidden_states, (attn_weights) + + return outputs + + + +class GPTNeoXHardAlibiModel(GPTNeoXPreTrainedModel): + def __init__(self, config): + super().__init__(config) + self.config = config + + self.embed_in = nn.Embedding(config.vocab_size, config.hidden_size) + self.emb_dropout = nn.Dropout(config.hidden_dropout) + self.layers = nn.ModuleList([GPTNeoXHardAlibiLayer(config) for _ in range(config.num_hidden_layers)]) + self.final_layer_norm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + + self.gradient_checkpointing = False + + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self): + return self.embed_in + + def set_input_embeddings(self, value): + self.embed_in = value + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, BaseModelOutputWithPast]: + r""" + past_key_values (`tuple(tuple(torch.FloatTensor))` of length `config.n_layers` with each tuple having 4 tensors of shape `(batch_size, num_heads, sequence_length - 1, embed_size_per_head)`): + Contains precomputed key and value hidden states of the attention blocks. Can be used to speed up decoding. + If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that + don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all + `decoder_input_ids` of shape `(batch_size, sequence_length)`. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see + `past_key_values`). + """ + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + use_cache = use_cache if use_cache is not None else self.config.use_cache + + if input_ids is not None and inputs_embeds is not None: + raise ValueError("You cannot specify both input_ids and inputs_embeds at the same time") + elif input_ids is not None: + self.warn_if_padding_and_no_attention_mask(input_ids, attention_mask) + input_shape = input_ids.size() + elif inputs_embeds is not None: + input_shape = inputs_embeds.size()[:-1] + else: + raise ValueError("You have to specify either input_ids or inputs_embeds") + + batch_size, seq_length = input_shape + + if past_key_values is None: + past_length = 0 + past_key_values = tuple([None] * self.config.num_hidden_layers) + else: + past_length = past_key_values[0][0].size(-2) + + if position_ids is None: + device = input_ids.device if input_ids is not None else inputs_embeds.device + position_ids = torch.arange(past_length, seq_length + past_length, dtype=torch.long, device=device) + position_ids = position_ids.unsqueeze(0) + + # Attention mask. + if attention_mask is not None: + assert batch_size > 0, "batch_size has to be defined and > 0" + attention_mask = attention_mask.view(batch_size, -1) + # We create a 3D attention mask from a 2D tensor mask. + # Sizes are [batch_size, 1, 1, to_seq_length] + # So we can broadcast to [batch_size, num_heads, from_seq_length, to_seq_length] + # this attention mask is more simple than the triangular masking of causal attention + # used in OpenAI GPT, we just need to prepare the broadcast dimension here. + attention_mask = attention_mask[:, None, None, :] + + # Since attention_mask is 1.0 for positions we want to attend and 0.0 for + # masked positions, this operation will create a tensor which is 0.0 for + # positions we want to attend and the dtype's smallest value for masked positions. + # Since we are adding it to the raw scores before the softmax, this is + # effectively the same as removing these entirely. + attention_mask = attention_mask.to(dtype=self.dtype) # fp16 compatibility + attention_mask = (1.0 - attention_mask) * torch.finfo(self.dtype).min + + # Prepare head mask if needed + # 1.0 in head_mask indicate we keep the head + # attention_probs has shape bsz x n_heads x N x N + # input head_mask has shape [num_heads] or [num_hidden_layers x num_heads] + # and head_mask is converted to shape [num_hidden_layers x batch x num_heads x seq_length x seq_length] + head_mask = self.get_head_mask(head_mask, self.config.num_hidden_layers) + + if inputs_embeds is None: + inputs_embeds = self.embed_in(input_ids) + + hidden_states = self.emb_dropout(inputs_embeds) + + if self.gradient_checkpointing and self.training: + if use_cache: + logger.warning( + "`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`..." + ) + use_cache = False + + presents = () if use_cache else None + all_attentions = () if output_attentions else None + all_hidden_states = () if output_hidden_states else None + for i, (layer, layer_past) in enumerate(zip(self.layers, past_key_values)): + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if self.gradient_checkpointing and self.training: + outputs = self._gradient_checkpointing_func( + layer.__call__, + hidden_states, + attention_mask, + position_ids, + head_mask[i], + use_cache, + None, + output_attentions, + ) + else: + outputs = layer( + hidden_states, + attention_mask=attention_mask, + position_ids=position_ids, + head_mask=head_mask[i], + layer_past=layer_past, + use_cache=use_cache, + output_attentions=output_attentions, + ) + hidden_states = outputs[0] + if use_cache is True: + presents = presents + (outputs[1],) + if output_attentions: + all_attentions = all_attentions + (outputs[2 if use_cache else 1],) + + hidden_states = self.final_layer_norm(hidden_states) + # Add last hidden state + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if not return_dict: + return tuple(v for v in [hidden_states, presents, all_hidden_states, all_attentions] if v is not None) + + return BaseModelOutputWithPast( + last_hidden_state=hidden_states, + past_key_values=presents, + hidden_states=all_hidden_states, + attentions=all_attentions, + ) + + +class GPTNeoXHardAlibiForCausalLM(GPTNeoXPreTrainedModel): + _tied_weights_keys = ["embed_out.weight"] + + def __init__(self, config): + super().__init__(config) + + self.gpt_neox = GPTNeoXHardAlibiModel(config) + self.embed_out = nn.Linear(config.hidden_size, config.vocab_size, bias=False) + + # Initialize weights and apply final processing + self.post_init() + + def get_output_embeddings(self): + return self.embed_out + + def set_output_embeddings(self, new_embeddings): + self.embed_out = new_embeddings + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None, + labels: Optional[torch.LongTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, CausalLMOutputWithPast]: + r""" + past_key_values (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`): + Tuple of `tuple(torch.FloatTensor)` of length `config.n_layers`, with each tuple having 2 tensors of shape + `(batch_size, num_heads, sequence_length, embed_size_per_head)`) and 2 additional tensors of shape + `(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)`. The two additional tensors are + only required when the model is used as a decoder in a Sequence to Sequence model. + + Contains pre-computed hidden-states (key and values in the self-attention blocks that can be used (see + `past_key_values` input) to speed up sequential decoding. + + If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that + don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all + `decoder_input_ids` of shape `(batch_size, sequence_length)`. + labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*): + Labels for computing the left-to-right language modeling loss (next word prediction). Indices should be in + `[-100, 0, ..., config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are + ignored (masked), the loss is only computed for the tokens with labels n `[0, ..., config.vocab_size]`. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see + `past_key_values`). + + Returns: + + Example: + + ```python + >>> from transformers import AutoTokenizer, GPTNeoXForCausalLM, GPTNeoXConfig + >>> import torch + + >>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-neox-20b") + >>> config = GPTNeoXConfig.from_pretrained("EleutherAI/gpt-neox-20b") + >>> config.is_decoder = True + >>> model = GPTNeoXForCausalLM.from_pretrained("EleutherAI/gpt-neox-20b", config=config) + + >>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt") + >>> outputs = model(**inputs) + + >>> prediction_logits = outputs.logits + ```""" + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + outputs = self.gpt_neox( + input_ids, + attention_mask=attention_mask, + position_ids=position_ids, + head_mask=head_mask, + inputs_embeds=inputs_embeds, + past_key_values=past_key_values, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + + hidden_states = outputs[0] + lm_logits = self.embed_out(hidden_states) + + lm_loss = None + if labels is not None: + # move labels to correct device to enable model parallelism + labels = labels.to(lm_logits.device) + # we are doing next-token prediction; shift prediction scores and input ids by one + shift_logits = lm_logits[:, :-1, :].contiguous() + labels = labels[:, 1:].contiguous() + loss_fct = CrossEntropyLoss() + lm_loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), labels.view(-1)) + + if not return_dict: + output = (lm_logits,) + outputs[1:] + return ((lm_loss,) + output) if lm_loss is not None else output + + return CausalLMOutputWithPast( + loss=lm_loss, + logits=lm_logits, + past_key_values=outputs.past_key_values, + hidden_states=outputs.hidden_states, + attentions=outputs.attentions, + ) + + def prepare_inputs_for_generation( + self, input_ids, past_key_values=None, attention_mask=None, inputs_embeds=None, **kwargs + ): + input_shape = input_ids.shape + # cut decoder_input_ids if past is used + if past_key_values is not None: + past_length = past_key_values[0][0].shape[2] + + # Some generation methods already pass only the last input ID + if input_ids.shape[1] > past_length: + remove_prefix_length = past_length + else: + # Default to old behavior: keep only final ID + remove_prefix_length = input_ids.shape[1] - 1 + + input_ids = input_ids[:, remove_prefix_length:] + + position_ids = kwargs.get("position_ids", None) + if attention_mask is not None and position_ids is None: + # create position_ids on the fly for batch generation + position_ids = attention_mask.long().cumsum(-1) - 1 + position_ids.masked_fill_(attention_mask == 0, 1) + if past_key_values: + position_ids = position_ids[:, -input_ids.shape[1] :] + + # if model is used as a decoder in encoder-decoder model, the decoder attention mask is created on the fly + if attention_mask is None: + attention_mask = input_ids.new_ones(input_shape) + + # if `inputs_embeds` are passed, we only want to use them in the 1st generation step + if inputs_embeds is not None and past_key_values is None: + model_inputs = {"inputs_embeds": inputs_embeds} + else: + model_inputs = {"input_ids": input_ids} + model_inputs.update( + { + "attention_mask": attention_mask, + "past_key_values": past_key_values, + "position_ids": position_ids, + } + ) + + return model_inputs + + def _reorder_cache(self, past_key_values, beam_idx): + reordered_past = () + for layer_past in past_key_values: + reordered_past += ( + tuple(past_state.index_select(0, beam_idx.to(past_state.device)) for past_state in layer_past[:2]) + + layer_past[2:], + ) + return reordered_past + + diff --git a/source/official-code/mini/models/hybrid.py b/source/official-code/mini/models/hybrid.py new file mode 100644 index 0000000000000000000000000000000000000000..770820fecf97afc1631c5af8829a79608d957621 --- /dev/null +++ b/source/official-code/mini/models/hybrid.py @@ -0,0 +1,507 @@ +""" PyTorch GPTNeoX model.""" + +from typing import Optional, Tuple, Union + +import torch +import torch.utils.checkpoint +from torch import nn +from torch.nn import BCEWithLogitsLoss, CrossEntropyLoss, MSELoss + +from transformers.activations import ACT2FN +from transformers.modeling_outputs import ( + BaseModelOutputWithPast, + CausalLMOutputWithPast, + QuestionAnsweringModelOutput, + SequenceClassifierOutputWithPast, + TokenClassifierOutput, +) +from transformers.modeling_utils import PreTrainedModel +from transformers.utils import ( + ModelOutput, + auto_docstring, + logging, +) +from transformers.configuration_utils import PretrainedConfig +from transformers.generation import GenerationMixin + +from .rope import GPTNeoXLayer +from .mamba import MambaBlock, MambaCache + +import math +from dataclasses import dataclass +from typing import Any, Optional, Union + +logger = logging.get_logger(__name__) + + +class HybridConfig(PretrainedConfig): + + model_type = "hybrid" + + def __init__( + self, + vocab_size=50432, + hidden_size=6144, + num_hidden_layers=44, + num_attention_heads=64, + intermediate_size=24576, + hidden_act="silu", + hidden_dropout_prob=0.1, + attention_probs_dropout_prob=0.1, + rotary_pct=0.25, + rotary_emb_base=10000, + max_position_embeddings=2048, + initializer_range=0.02, + layer_norm_epsilon=1e-5, + use_cache=True, + bos_token_id=0, + pad_token_id=0, + eos_token_id=2, + tie_word_embeddings=False, + + state_size=16, + expand=2, + conv_kernel=4, + use_bias=False, + use_conv_bias=True, + residual_in_fp32=True, + time_step_rank="auto", + time_step_scale=1.0, + time_step_min=0.001, + time_step_max=0.1, + time_step_init_scheme="random", + time_step_floor=1e-4, + rescale_prenorm_residual=False, + use_mambapy=False, + + **kwargs + ): + self.vocab_size = vocab_size + self.max_position_embeddings = max_position_embeddings + self.hidden_size = hidden_size + self.num_hidden_layers = num_hidden_layers + self.num_attention_heads = num_attention_heads + self.intermediate_size = intermediate_size + self.hidden_act = hidden_act + self.hidden_dropout_prob = hidden_dropout_prob + self.attention_probs_dropout_prob = attention_probs_dropout_prob + self.rotary_pct = rotary_pct + self.rotary_emb_base = rotary_emb_base + self.initializer_range = initializer_range + self.layer_norm_eps = layer_norm_epsilon + self.use_cache = use_cache + self.tie_word_embeddings = tie_word_embeddings + + self.state_size = state_size + self.layer_norm_epsilon = layer_norm_epsilon + self.conv_kernel = conv_kernel + self.expand = expand + self.intermediate_size = int(expand * self.hidden_size) + self.bos_token_id = bos_token_id + self.eos_token_id = eos_token_id + self.pad_token_id = pad_token_id + self.use_bias = use_bias + self.use_conv_bias = use_conv_bias + self.time_step_rank = math.ceil(self.hidden_size / 16) if time_step_rank == "auto" else time_step_rank + self.time_step_scale = time_step_scale + self.time_step_min = time_step_min + self.time_step_max = time_step_max + self.time_step_init_scheme = time_step_init_scheme + self.time_step_floor = time_step_floor + self.rescale_prenorm_residual = rescale_prenorm_residual + self.residual_in_fp32 = residual_in_fp32 + self.use_mambapy = use_mambapy + + super().__init__(bos_token_id=bos_token_id, eos_token_id=eos_token_id, pad_token_id=pad_token_id, **kwargs) + + +class HybridPreTrainedModel(PreTrainedModel): + """ + An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained + models. + """ + + config_class = HybridConfig + base_model_prefix = "hybrid" + supports_gradient_checkpointing = True + _no_split_modules = ["GPTNeoXLayer", "MambaBlock"] + + def _init_weights(self, module): + """Initialize the weights""" + if isinstance(module, nn.Linear): + module.weight.data.normal_(mean=0.0, std=self.config.initializer_range) + if module.bias is not None: + module.bias.data.zero_() + elif isinstance(module, nn.Embedding): + module.weight.data.normal_(mean=0.0, std=self.config.initializer_range) + if module.padding_idx is not None: + module.weight.data[module.padding_idx].zero_() + elif isinstance(module, nn.LayerNorm): + module.bias.data.zero_() + module.weight.data.fill_(1.0) + + def _set_gradient_checkpointing(self, module, value=False): + if isinstance(module, HybridModel): + module.gradient_checkpointing = value + + + +@dataclass +class HybridOutput(ModelOutput): + last_hidden_state: Optional[torch.FloatTensor] = None + past_key_values: Optional[torch.FloatTensor] = None + hidden_states: Optional[tuple[torch.FloatTensor]] = None + attentions: Optional[torch.FloatTensor] = None + cache_params: Optional[MambaCache] = None + + +@dataclass +class HybridCausalLMOutput(ModelOutput): + loss: Optional[torch.FloatTensor] = None + logits: Optional[torch.FloatTensor] = None + cache_params: Optional[MambaCache] = None + hidden_states: Optional[tuple[torch.FloatTensor]] = None + past_key_values: Optional[torch.FloatTensor] = None + last_hidden_state: Optional[torch.FloatTensor] = None + attentions: Optional[torch.FloatTensor] = None + + + +class HybridModel(HybridPreTrainedModel): + def __init__(self, config): + super().__init__(config) + self.config = config + + self.embed_in = nn.Embedding(config.vocab_size, config.hidden_size) + self.emb_dropout = nn.Dropout(config.hidden_dropout_prob) + + layer_types = [MambaBlock, GPTNeoXLayer] + + modules = [] + for idx in range(config.num_hidden_layers): + if idx % 2 == 0: + modules.append(MambaBlock(config, layer_idx=idx)) + else: + modules.append(GPTNeoXLayer(config)) + self.layers = nn.ModuleList(modules) + self.final_layer_norm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + + self.gradient_checkpointing = False + + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self): + return self.embed_in + + def set_input_embeddings(self, value): + self.embed_in = value + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + + cache_params: Optional[MambaCache] = None, # From Mamba + cache_poisition: Optional[torch.LongTensor] = None, # From Mamba + # cache_position: Optional[torch.LongTensor] = None, # From Mamba + ) -> Union[Tuple, HybridOutput]: + r""" + past_key_values (`tuple(tuple(torch.FloatTensor))` of length `config.n_layers` with each tuple having 4 tensors of shape `(batch_size, num_heads, sequence_length - 1, embed_size_per_head)`): + Contains precomputed key and value hidden states of the attention blocks. Can be used to speed up decoding. + If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that + don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all + `decoder_input_ids` of shape `(batch_size, sequence_length)`. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see + `past_key_values`). + """ + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + use_cache = use_cache if use_cache is not None else self.config.use_cache + + if input_ids is not None and inputs_embeds is not None: + raise ValueError("You cannot specify both input_ids and inputs_embeds at the same time") + elif input_ids is not None: + self.warn_if_padding_and_no_attention_mask(input_ids, attention_mask) + input_shape = input_ids.size() + elif inputs_embeds is not None: + input_shape = inputs_embeds.size()[:-1] + else: + raise ValueError("You have to specify either input_ids or inputs_embeds") + + batch_size, seq_length = input_shape + + if past_key_values is None: + past_length = 0 + past_key_values = tuple([None] * self.config.num_hidden_layers) + else: + past_length = past_key_values[0][0].size(-2) + + if position_ids is None: + device = input_ids.device if input_ids is not None else inputs_embeds.device + position_ids = torch.arange(past_length, seq_length + past_length, dtype=torch.long, device=device) + position_ids = position_ids.unsqueeze(0) + + # Attention mask. + if attention_mask is not None: + assert batch_size > 0, "batch_size has to be defined and > 0" + # attention_mask = attention_mask.view(batch_size, -1) + # # We create a 3D attention mask from a 2D tensor mask. + # # Sizes are [batch_size, 1, 1, to_seq_length] + # # So we can broadcast to [batch_size, num_heads, from_seq_length, to_seq_length] + # # this attention mask is more simple than the triangular masking of causal attention + # # used in OpenAI GPT, we just need to prepare the broadcast dimension here. + # attention_mask = attention_mask[:, None, None, :] + + # # Since attention_mask is 1.0 for positions we want to attend and 0.0 for + # # masked positions, this operation will create a tensor which is 0.0 for + # # positions we want to attend and -10000.0 for masked positions. + # # Since we are adding it to the raw scores before the softmax, this is + # # effectively the same as removing these entirely. + attention_mask = attention_mask.to(dtype=self.dtype) # fp16 compatibility + attention_mask = (1.0 - attention_mask) * -10000.0 + + # Prepare head mask if needed + # 1.0 in head_mask indicate we keep the head + # attention_probs has shape bsz x n_heads x N x N + # input head_mask has shape [num_heads] or [num_hidden_layers x num_heads] + # and head_mask is converted to shape [num_hidden_layers x batch x num_heads x seq_length x seq_length] + head_mask = self.get_head_mask(head_mask, self.config.num_hidden_layers) + + if inputs_embeds is None: + inputs_embeds = self.embed_in(input_ids) + + hidden_states = self.emb_dropout(inputs_embeds) + + if self.gradient_checkpointing and self.training: + if use_cache: + logger.warning( + "`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`..." + ) + use_cache = False + + # From Mamba + if use_cache: + if cache_params is None: + cache_params = MambaCache( + self.config, inputs_embeds.size(0), device=inputs_embeds.device, dtype=inputs_embeds.dtype + ) + cache_position = torch.arange(0, self.config.conv_kernel, device=inputs_embeds.device) + elif cache_position is None: + # cases when we do manual forward instead of using `model.generate` which will initiate + # `cache_position` and makes sure it is not None, throw error here instead of doing some + # hack to conjecture the current cache position + raise ValueError( + "You have to specify the `cache_position` manually when `use_cache=True` and `cache_params` is passed, " + "you don't have to pass a `cache_params` if you are in prefilling stage because in that case it will " + "be initialized for you automatically" + ) + else: + cache_params = None + + + + presents = () if use_cache else None + all_attentions = () if output_attentions else None + all_hidden_states = () if output_hidden_states else None + for i, (layer, layer_past) in enumerate(zip(self.layers, past_key_values)): + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if isinstance(layer, GPTNeoXLayer): + outputs = layer( + hidden_states, + attention_mask=attention_mask, + head_mask=head_mask[i], + layer_past=layer_past, + use_cache=use_cache, + output_attentions=output_attentions, + ) + hidden_states = outputs[0] + if use_cache is True: + presents = presents + (outputs[1],) + if output_attentions: + all_attentions = all_attentions + (outputs[2 if use_cache else 1],) + + + elif isinstance(layer, MambaBlock): + hidden_states = layer( + hidden_states, + cache_params=cache_params, + cache_position=cache_position, + attention_mask=attention_mask, + ) + + if use_cache is True: + presents = presents + (None,) + if output_attentions: + all_attentions = all_attentions + (None,) + + else: + assert False, "Unexpected Layer" + + + hidden_states = self.final_layer_norm(hidden_states) + # Add last hidden state + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if not return_dict: + return tuple(v for v in [hidden_states, presents, all_hidden_states, all_attentions, cache_params] if v is not None) + + return HybridOutput( + last_hidden_state=hidden_states, + past_key_values=presents, + hidden_states=all_hidden_states, + attentions=all_attentions, + cache_params=cache_params + ) + + + +class HybridForCausalLM(HybridPreTrainedModel, GenerationMixin): + _tied_weights_keys = ["embed_out.weight"] + + def __init__(self, config): + super().__init__(config) + + self.hybrid = HybridModel(config) + self.embed_out = nn.Linear(config.hidden_size, config.vocab_size, bias=False) + + # Initialize weights and apply final processing + self.post_init() + + def get_output_embeddings(self): + return self.embed_out + + def set_output_embeddings(self, new_embeddings): + self.embed_out = new_embeddings + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None, + labels: Optional[torch.LongTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + + cache_params: Optional[MambaCache] = None, # From Mamba + cache_position: Optional[torch.LongTensor] = None, # From Mamba + **kwargs, # for now we need this for generation + ) -> Union[Tuple, HybridOutput]: + + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + outputs = self.hybrid( + input_ids, + attention_mask=attention_mask, + position_ids=position_ids, + head_mask=head_mask, + inputs_embeds=inputs_embeds, + past_key_values=past_key_values, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + cache_params=cache_params, + cache_poisition=cache_position, + ) + + hidden_states = outputs[0] + lm_logits = self.embed_out(hidden_states) + + lm_loss = None + if labels is not None: + # move labels to correct device to enable model parallelism + labels = labels.to(lm_logits.device) + # we are doing next-token prediction; shift prediction scores and input ids by one + shift_logits = lm_logits[:, :-1, :].contiguous() + labels = labels[:, 1:].contiguous() + loss_fct = CrossEntropyLoss() + lm_loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), labels.view(-1)) + + if not return_dict: + output = (lm_logits,) + outputs[1:] + return ((lm_loss,) + output) if lm_loss is not None else output + + return HybridCausalLMOutput( + loss=lm_loss, + logits=lm_logits, + cache_params=outputs.cache_params, + hidden_states=outputs.hidden_states, + past_key_values=outputs.past_key_values, + last_hidden_state=outputs.last_hidden_state, + attentions=outputs.attentions, + ) + + def prepare_inputs_for_generation( + self, + input_ids, + inputs_embeds=None, + use_cache=None, + cache_params: Optional[MambaCache] = None, + cache_position: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.LongTensor] = None, + **kwargs, + ): + # Overwritten -- uses `cache_params` as opposed to `past_key_values` + model_inputs = {"input_ids": input_ids.contiguous()} + if use_cache and cache_params is None: + # we initialize the `cache_position` to full size of `conv_states` at prefill stage + # considering padding will be applied when input length is shorter, and truncation + # will be applied when it is longer, so it will be equivalent to always have it match + # the length of `cache_params.conv_states`, which is `config.conv_kernel` + cache_position = torch.arange(0, self.hybrid.config.conv_kernel, device=input_ids.device) + if inputs_embeds is not None: + model_inputs = {"inputs_embeds": inputs_embeds} + max_batch_size = inputs_embeds.size(0) + else: + max_batch_size = input_ids.size(0) + cache_params = MambaCache(self.hybrid.config, max_batch_size, device=self.device, dtype=self.dtype) + + if use_cache and cache_position[0] > 0: + model_inputs["input_ids"] = input_ids[:, -1].unsqueeze(-1).contiguous() + attention_mask = None + + if not use_cache and inputs_embeds is not None: + model_inputs = {"inputs_embeds": inputs_embeds} + + model_inputs.update( + { + "cache_params": cache_params, + "use_cache": use_cache, + "cache_position": cache_position, + "attention_mask": attention_mask, + } + ) + return model_inputs + + + def _reorder_cache(self, past_key_values, beam_idx): + reordered_past = () + for layer_past in past_key_values: + reordered_past += ( + tuple(past_state.index_select(0, beam_idx.to(past_state.device)) for past_state in layer_past[:2]) + + layer_past[2:], + ) + return reordered_past + + diff --git a/source/official-code/mini/models/hybrid_nope.py b/source/official-code/mini/models/hybrid_nope.py new file mode 100644 index 0000000000000000000000000000000000000000..330b9f29b305c0d36a56466155c1800e6c2a5841 --- /dev/null +++ b/source/official-code/mini/models/hybrid_nope.py @@ -0,0 +1,513 @@ +""" PyTorch GPTNeoX model.""" + +from typing import Optional, Tuple, Union + +import torch +import torch.utils.checkpoint +from torch import nn +from torch.nn import BCEWithLogitsLoss, CrossEntropyLoss, MSELoss + +from transformers.activations import ACT2FN +from transformers.modeling_outputs import ( + BaseModelOutputWithPast, + CausalLMOutputWithPast, + QuestionAnsweringModelOutput, + SequenceClassifierOutputWithPast, + TokenClassifierOutput, +) +from transformers.modeling_utils import PreTrainedModel +from transformers.utils import ( + ModelOutput, + auto_docstring, + logging, +) +from transformers.configuration_utils import PretrainedConfig +from transformers.generation import GenerationMixin + +from .nope import GPTNeoXNoPELayer +from .mamba import MambaBlock, MambaCache + +import math +from dataclasses import dataclass +from typing import Any, Optional, Union + +logger = logging.get_logger(__name__) + + +class HybridNoPEConfig(PretrainedConfig): + + model_type = "hybrid" + + def __init__( + self, + vocab_size=50432, + hidden_size=6144, + num_hidden_layers=44, + num_attention_heads=64, + intermediate_size=24576, + hidden_act="silu", + hidden_dropout_prob=0.1, + attention_probs_dropout_prob=0.1, + rotary_pct=0.25, + rotary_emb_base=10000, + max_position_embeddings=2048, + initializer_range=0.02, + layer_norm_epsilon=1e-5, + use_cache=True, + bos_token_id=0, + pad_token_id=0, + eos_token_id=2, + tie_word_embeddings=False, + + state_size=16, + expand=2, + conv_kernel=4, + use_bias=False, + use_conv_bias=True, + residual_in_fp32=True, + time_step_rank="auto", + time_step_scale=1.0, + time_step_min=0.001, + time_step_max=0.1, + time_step_init_scheme="random", + time_step_floor=1e-4, + rescale_prenorm_residual=False, + use_mambapy=False, + use_parallel_residual=False, + + **kwargs + ): + self.vocab_size = vocab_size + self.max_position_embeddings = max_position_embeddings + self.hidden_size = hidden_size + self.num_hidden_layers = num_hidden_layers + self.num_attention_heads = num_attention_heads + self.intermediate_size = intermediate_size + self.hidden_act = hidden_act + + self.hidden_dropout_prob = hidden_dropout_prob + self.hidden_dropout = self.hidden_dropout_prob + self.attention_dropout = self.hidden_dropout_prob + + self.attention_probs_dropout_prob = attention_probs_dropout_prob + self.rotary_pct = rotary_pct + self.rotary_emb_base = rotary_emb_base + self.initializer_range = initializer_range + self.layer_norm_eps = layer_norm_epsilon + self.use_cache = use_cache + self.tie_word_embeddings = tie_word_embeddings + + self.state_size = state_size + self.layer_norm_epsilon = layer_norm_epsilon + self.conv_kernel = conv_kernel + self.expand = expand + self.intermediate_size = int(expand * self.hidden_size) + self.bos_token_id = bos_token_id + self.eos_token_id = eos_token_id + self.pad_token_id = pad_token_id + self.use_bias = use_bias + self.use_conv_bias = use_conv_bias + self.time_step_rank = math.ceil(self.hidden_size / 16) if time_step_rank == "auto" else time_step_rank + self.time_step_scale = time_step_scale + self.time_step_min = time_step_min + self.time_step_max = time_step_max + self.time_step_init_scheme = time_step_init_scheme + self.time_step_floor = time_step_floor + self.rescale_prenorm_residual = rescale_prenorm_residual + self.residual_in_fp32 = residual_in_fp32 + self.use_mambapy = use_mambapy + self.use_parallel_residual = use_parallel_residual + + super().__init__(bos_token_id=bos_token_id, eos_token_id=eos_token_id, pad_token_id=pad_token_id, **kwargs) + + +class HybridNoPEPreTrainedModel(PreTrainedModel): + """ + An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained + models. + """ + + config_class = HybridNoPEConfig + base_model_prefix = "hybrid" + supports_gradient_checkpointing = True + _no_split_modules = ["GPTNeoXNoPELayer", "MambaBlock"] + + def _init_weights(self, module): + """Initialize the weights""" + if isinstance(module, nn.Linear): + module.weight.data.normal_(mean=0.0, std=self.config.initializer_range) + if module.bias is not None: + module.bias.data.zero_() + elif isinstance(module, nn.Embedding): + module.weight.data.normal_(mean=0.0, std=self.config.initializer_range) + if module.padding_idx is not None: + module.weight.data[module.padding_idx].zero_() + elif isinstance(module, nn.LayerNorm): + module.bias.data.zero_() + module.weight.data.fill_(1.0) + + def _set_gradient_checkpointing(self, module, value=False): + if isinstance(module, HybridNoPEModel): + module.gradient_checkpointing = value + + + +@dataclass +class HybridNoPEOutput(ModelOutput): + last_hidden_state: Optional[torch.FloatTensor] = None + past_key_values: Optional[torch.FloatTensor] = None + hidden_states: Optional[tuple[torch.FloatTensor]] = None + attentions: Optional[torch.FloatTensor] = None + cache_params: Optional[MambaCache] = None + + +@dataclass +class HybridNoPECausalLMOutput(ModelOutput): + loss: Optional[torch.FloatTensor] = None + logits: Optional[torch.FloatTensor] = None + cache_params: Optional[MambaCache] = None + hidden_states: Optional[tuple[torch.FloatTensor]] = None + past_key_values: Optional[torch.FloatTensor] = None + last_hidden_state: Optional[torch.FloatTensor] = None + attentions: Optional[torch.FloatTensor] = None + + + +class HybridNoPEModel(HybridNoPEPreTrainedModel): + def __init__(self, config): + super().__init__(config) + self.config = config + + self.embed_in = nn.Embedding(config.vocab_size, config.hidden_size) + self.emb_dropout = nn.Dropout(config.hidden_dropout_prob) + + layer_types = [MambaBlock, GPTNeoXNoPELayer] + + modules = [] + for idx in range(config.num_hidden_layers): + if idx % 2 == 0: + modules.append(MambaBlock(config, layer_idx=idx)) + else: + modules.append(GPTNeoXNoPELayer(config)) + self.layers = nn.ModuleList(modules) + self.final_layer_norm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + + self.gradient_checkpointing = False + + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self): + return self.embed_in + + def set_input_embeddings(self, value): + self.embed_in = value + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + + cache_params: Optional[MambaCache] = None, # From Mamba + cache_poisition: Optional[torch.LongTensor] = None, # From Mamba + # cache_position: Optional[torch.LongTensor] = None, # From Mamba + ) -> Union[Tuple, HybridNoPEOutput]: + r""" + past_key_values (`tuple(tuple(torch.FloatTensor))` of length `config.n_layers` with each tuple having 4 tensors of shape `(batch_size, num_heads, sequence_length - 1, embed_size_per_head)`): + Contains precomputed key and value hidden states of the attention blocks. Can be used to speed up decoding. + If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that + don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all + `decoder_input_ids` of shape `(batch_size, sequence_length)`. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see + `past_key_values`). + """ + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + use_cache = use_cache if use_cache is not None else self.config.use_cache + + if input_ids is not None and inputs_embeds is not None: + raise ValueError("You cannot specify both input_ids and inputs_embeds at the same time") + elif input_ids is not None: + self.warn_if_padding_and_no_attention_mask(input_ids, attention_mask) + input_shape = input_ids.size() + elif inputs_embeds is not None: + input_shape = inputs_embeds.size()[:-1] + else: + raise ValueError("You have to specify either input_ids or inputs_embeds") + + batch_size, seq_length = input_shape + + if past_key_values is None: + past_length = 0 + past_key_values = tuple([None] * self.config.num_hidden_layers) + else: + past_length = past_key_values[0][0].size(-2) + + if position_ids is None: + device = input_ids.device if input_ids is not None else inputs_embeds.device + position_ids = torch.arange(past_length, seq_length + past_length, dtype=torch.long, device=device) + position_ids = position_ids.unsqueeze(0) + + # Attention mask. + if attention_mask is not None: + assert batch_size > 0, "batch_size has to be defined and > 0" + # attention_mask = attention_mask.view(batch_size, -1) + # # We create a 3D attention mask from a 2D tensor mask. + # # Sizes are [batch_size, 1, 1, to_seq_length] + # # So we can broadcast to [batch_size, num_heads, from_seq_length, to_seq_length] + # # this attention mask is more simple than the triangular masking of causal attention + # # used in OpenAI GPT, we just need to prepare the broadcast dimension here. + # attention_mask = attention_mask[:, None, None, :] + + # # Since attention_mask is 1.0 for positions we want to attend and 0.0 for + # # masked positions, this operation will create a tensor which is 0.0 for + # # positions we want to attend and -10000.0 for masked positions. + # # Since we are adding it to the raw scores before the softmax, this is + # # effectively the same as removing these entirely. + attention_mask = attention_mask.to(dtype=self.dtype) # fp16 compatibility + attention_mask = (1.0 - attention_mask) * -10000.0 + + # Prepare head mask if needed + # 1.0 in head_mask indicate we keep the head + # attention_probs has shape bsz x n_heads x N x N + # input head_mask has shape [num_heads] or [num_hidden_layers x num_heads] + # and head_mask is converted to shape [num_hidden_layers x batch x num_heads x seq_length x seq_length] + head_mask = self.get_head_mask(head_mask, self.config.num_hidden_layers) + + if inputs_embeds is None: + inputs_embeds = self.embed_in(input_ids) + + hidden_states = self.emb_dropout(inputs_embeds) + + if self.gradient_checkpointing and self.training: + if use_cache: + logger.warning( + "`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`..." + ) + use_cache = False + + # From Mamba + if use_cache: + if cache_params is None: + cache_params = MambaCache( + self.config, inputs_embeds.size(0), device=inputs_embeds.device, dtype=inputs_embeds.dtype + ) + cache_position = torch.arange(0, self.config.conv_kernel, device=inputs_embeds.device) + elif cache_position is None: + # cases when we do manual forward instead of using `model.generate` which will initiate + # `cache_position` and makes sure it is not None, throw error here instead of doing some + # hack to conjecture the current cache position + raise ValueError( + "You have to specify the `cache_position` manually when `use_cache=True` and `cache_params` is passed, " + "you don't have to pass a `cache_params` if you are in prefilling stage because in that case it will " + "be initialized for you automatically" + ) + else: + cache_params = None + + + + presents = () if use_cache else None + all_attentions = () if output_attentions else None + all_hidden_states = () if output_hidden_states else None + for i, (layer, layer_past) in enumerate(zip(self.layers, past_key_values)): + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if isinstance(layer, GPTNeoXNoPELayer): + outputs = layer( + hidden_states, + attention_mask=attention_mask, + head_mask=head_mask[i], + layer_past=layer_past, + use_cache=use_cache, + output_attentions=output_attentions, + ) + hidden_states = outputs[0] + if use_cache is True: + presents = presents + (outputs[1],) + if output_attentions: + all_attentions = all_attentions + (outputs[2 if use_cache else 1],) + + + elif isinstance(layer, MambaBlock): + hidden_states = layer( + hidden_states, + cache_params=cache_params, + cache_position=cache_position, + attention_mask=attention_mask, + ) + + if use_cache is True: + presents = presents + (None,) + if output_attentions: + all_attentions = all_attentions + (None,) + + else: + assert False, "Unexpected Layer" + + + hidden_states = self.final_layer_norm(hidden_states) + # Add last hidden state + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if not return_dict: + return tuple(v for v in [hidden_states, presents, all_hidden_states, all_attentions, cache_params] if v is not None) + + return HybridNoPEOutput( + last_hidden_state=hidden_states, + past_key_values=presents, + hidden_states=all_hidden_states, + attentions=all_attentions, + cache_params=cache_params + ) + + + +class HybridNoPEForCausalLM(HybridNoPEPreTrainedModel, GenerationMixin): + _tied_weights_keys = ["embed_out.weight"] + + def __init__(self, config): + super().__init__(config) + + self.hybrid = HybridNoPEModel(config) + self.embed_out = nn.Linear(config.hidden_size, config.vocab_size, bias=False) + + # Initialize weights and apply final processing + self.post_init() + + def get_output_embeddings(self): + return self.embed_out + + def set_output_embeddings(self, new_embeddings): + self.embed_out = new_embeddings + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None, + labels: Optional[torch.LongTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + + cache_params: Optional[MambaCache] = None, # From Mamba + cache_position: Optional[torch.LongTensor] = None, # From Mamba + **kwargs, # for now we need this for generation + ) -> Union[Tuple, HybridNoPEOutput]: + + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + outputs = self.hybrid( + input_ids, + attention_mask=attention_mask, + position_ids=position_ids, + head_mask=head_mask, + inputs_embeds=inputs_embeds, + past_key_values=past_key_values, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + cache_params=cache_params, + cache_poisition=cache_position, + ) + + hidden_states = outputs[0] + lm_logits = self.embed_out(hidden_states) + + lm_loss = None + if labels is not None: + # move labels to correct device to enable model parallelism + labels = labels.to(lm_logits.device) + # we are doing next-token prediction; shift prediction scores and input ids by one + shift_logits = lm_logits[:, :-1, :].contiguous() + labels = labels[:, 1:].contiguous() + loss_fct = CrossEntropyLoss() + lm_loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), labels.view(-1)) + + if not return_dict: + output = (lm_logits,) + outputs[1:] + return ((lm_loss,) + output) if lm_loss is not None else output + + return HybridNoPECausalLMOutput( + loss=lm_loss, + logits=lm_logits, + cache_params=outputs.cache_params, + hidden_states=outputs.hidden_states, + past_key_values=outputs.past_key_values, + last_hidden_state=outputs.last_hidden_state, + attentions=outputs.attentions, + ) + + def prepare_inputs_for_generation( + self, + input_ids, + inputs_embeds=None, + use_cache=None, + cache_params: Optional[MambaCache] = None, + cache_position: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.LongTensor] = None, + **kwargs, + ): + # Overwritten -- uses `cache_params` as opposed to `past_key_values` + model_inputs = {"input_ids": input_ids.contiguous()} + if use_cache and cache_params is None: + # we initialize the `cache_position` to full size of `conv_states` at prefill stage + # considering padding will be applied when input length is shorter, and truncation + # will be applied when it is longer, so it will be equivalent to always have it match + # the length of `cache_params.conv_states`, which is `config.conv_kernel` + cache_position = torch.arange(0, self.hybrid.config.conv_kernel, device=input_ids.device) + if inputs_embeds is not None: + model_inputs = {"inputs_embeds": inputs_embeds} + max_batch_size = inputs_embeds.size(0) + else: + max_batch_size = input_ids.size(0) + cache_params = MambaCache(self.hybrid.config, max_batch_size, device=self.device, dtype=self.dtype) + + if use_cache and cache_position[0] > 0: + model_inputs["input_ids"] = input_ids[:, -1].unsqueeze(-1).contiguous() + attention_mask = None + + if not use_cache and inputs_embeds is not None: + model_inputs = {"inputs_embeds": inputs_embeds} + + model_inputs.update( + { + "cache_params": cache_params, + "use_cache": use_cache, + "cache_position": cache_position, + "attention_mask": attention_mask, + } + ) + return model_inputs + + + def _reorder_cache(self, past_key_values, beam_idx): + reordered_past = () + for layer_past in past_key_values: + reordered_past += ( + tuple(past_state.index_select(0, beam_idx.to(past_state.device)) for past_state in layer_past[:2]) + + layer_past[2:], + ) + return reordered_past + + diff --git a/source/official-code/mini/models/lstm.py b/source/official-code/mini/models/lstm.py new file mode 100644 index 0000000000000000000000000000000000000000..eff46656bc862966350f9c81674047cd75e05162 --- /dev/null +++ b/source/official-code/mini/models/lstm.py @@ -0,0 +1,58 @@ +import torch +import math +import torch.nn as nn + + + +class LSTM(nn.Module): + + def __init__(self, embedding_dim, vocab_size, num_layers, dropout_rate=0.65): + super(LSTM, self).__init__() + + self.num_layers = num_layers + self.n_embd = embedding_dim + + + self.word_embeddings = nn.Embedding(vocab_size, self.n_embd) + + # The LSTM takes word embeddings as inputs, and outputs hidden states + # with dimensionality hidden_dim. + self.lstm = nn.LSTM(input_size=self.n_embd, + hidden_size=self.n_embd, + num_layers=self.num_layers, + batch_first=True, + dropout=dropout_rate) + + # The linear layer that maps from hidden state space to tag space + self.head = nn.Linear(self.n_embd, vocab_size) + + self.init_weights() + + def forward(self, sentence, prev_state): + + embeds = self.word_embeddings(sentence) + + lstm_out, state = self.lstm(embeds, prev_state) + + logits = self.head(lstm_out) + + return logits, state + + def init_weights(self): + init_range_emb = 0.1 + init_range_other = 1/math.sqrt(self.n_embd) + self.word_embeddings.weight.data.uniform_(-init_range_emb, init_range_emb) + self.head.weight.data.uniform_(-init_range_other, init_range_other) + self.head.bias.data.zero_() + for i in range(self.num_layers): + self.lstm.all_weights[i][0] = torch.FloatTensor(self.n_embd, + self.n_embd).uniform_(-init_range_other, init_range_other) + self.lstm.all_weights[i][1] = torch.FloatTensor(self.n_embd, + self.n_embd).uniform_(-init_range_other, init_range_other) + + def init_hidden(self, batch_size, device): + hidden = torch.zeros(self.num_layers, batch_size, self.n_embd).to(device) + cell = torch.zeros(self.num_layers, batch_size, self.n_embd).to(device) + return hidden, cell + + diff --git a/source/official-code/mini/models/mamba.py b/source/official-code/mini/models/mamba.py new file mode 100644 index 0000000000000000000000000000000000000000..99093a32a0eb88c6c9f75c9c65228f89654c88a8 --- /dev/null +++ b/source/official-code/mini/models/mamba.py @@ -0,0 +1,834 @@ +"""PyTorch MAMBA model.""" + +import math +from dataclasses import dataclass +from typing import Any, Optional, Union + +import torch +import torch.utils.checkpoint +from torch import nn +from torch.nn import CrossEntropyLoss + +from transformers.activations import ACT2FN +from transformers.configuration_utils import PretrainedConfig +from transformers.generation import GenerationMixin +from transformers.modeling_layers import GradientCheckpointingLayer +from transformers.modeling_utils import PreTrainedModel +from transformers.utils import ( + ModelOutput, + auto_docstring, + logging, +) +from transformers.utils.import_utils import is_causal_conv1d_available, is_mamba_ssm_available, is_mambapy_available +from transformers.models.mamba.configuration_mamba import MambaConfig + + +logger = logging.get_logger(__name__) + +if is_mambapy_available(): + from mambapy.pscan import pscan +else: + pscan = None + +if is_mamba_ssm_available(): + from mamba_ssm.ops.selective_scan_interface import mamba_inner_fn, selective_scan_fn + from mamba_ssm.ops.triton.selective_state_update import selective_state_update +else: + selective_state_update, selective_scan_fn, mamba_inner_fn = None, None, None + +if is_causal_conv1d_available(): + from causal_conv1d import causal_conv1d_fn, causal_conv1d_update +else: + causal_conv1d_update, causal_conv1d_fn = None, None + + +class MambaCache: + """ + Cache for mamba model which does not have attention mechanism and key value states. + + Arguments: + config (`PretrainedConfig): + The configuration file defining the shape-related attributes required to initialize the static cache. + max_batch_size (`int`): + The maximum batch size with which the model will be used. Note that a new instance must be instantiated if a smaller batch size is used. + dtype (`torch.dtype`, *optional*, defaults to `torch.float16`): + The default `dtype` to use when initializing the layer. + device (`torch.device` or `str`, *optional*): + The device on which the cache should be initialized. Should be the same as the layer. + + Example: + + ```python + >>> from transformers import AutoTokenizer, MambaForCausalLM, MambaCache + + >>> model = MambaForCausalLM.from_pretrained("state-spaces/mamba-130m-hf") + >>> tokenizer = AutoTokenizer.from_pretrained("state-spaces/mamba-130m-hf") + + >>> inputs = tokenizer(text="My name is Mamba", return_tensors="pt") + + >>> # Prepare a cache class and pass it to model's forward + >>> past_key_values = MambaCache(config=model.config, max_batch_size=1, device=model.device, dtype=model.dtype) + >>> outputs = model(**inputs, past_key_values=past_key_values, use_cache=True) + >>> outputs.past_key_values + MambaCache() + ``` + """ + + is_compileable = True + + # TODO (joao): add layer_device_map arg and update code in `generate` accordingly + def __init__( + self, + config: PretrainedConfig, + max_batch_size: int, + dtype: torch.dtype = torch.float16, + device: Union[torch.device, str, None] = None, + ): + self.max_batch_size = max_batch_size + self._dtype = dtype + self.intermediate_size = config.intermediate_size + self.ssm_state_size = config.state_size + self.conv_kernel_size = config.conv_kernel + + self.conv_states: list[torch.Tensor] = [] + self.ssm_states: list[torch.Tensor] = [] + device = torch.device(device) if device is not None else None + for _ in range(config.num_hidden_layers): + conv_state: torch.Tensor = torch.zeros( + self.max_batch_size, + self.intermediate_size, + self.conv_kernel_size, + device=device, + dtype=self._dtype, + ) + ssm_state: torch.Tensor = torch.zeros( + self.max_batch_size, + self.intermediate_size, + self.ssm_state_size, + device=device, + dtype=self._dtype, + ) + + torch._dynamo.mark_static_address(conv_state) + torch._dynamo.mark_static_address(ssm_state) + self.conv_states.append(conv_state) + self.ssm_states.append(ssm_state) + + def update_conv_state( + self, layer_idx: int, new_conv_state: torch.Tensor, cache_position: torch.LongTensor + ) -> torch.Tensor: + # This `if` blocks is only reached in multigpu and if `layer_device_map` is not passed. It is used + # when the cache is initialized in the forward pass (e.g. Mamba) + if self.conv_states[layer_idx].device != new_conv_state.device: + self.conv_states[layer_idx] = self.conv_states[layer_idx].to(new_conv_state.device) + + conv_state = self.conv_states[layer_idx] + cache_position = cache_position.clamp(0, self.conv_kernel_size - 1) + + conv_state = conv_state.roll(shifts=-1, dims=-1) + conv_state[:, :, cache_position] = new_conv_state.to(device=conv_state.device, dtype=conv_state.dtype) + self.conv_states[layer_idx].zero_() + self.conv_states[layer_idx] += conv_state + return self.conv_states[layer_idx] + + def update_ssm_state(self, layer_idx: int, new_ssm_state: torch.Tensor): + self.ssm_states[layer_idx].zero_() + self.ssm_states[layer_idx] += new_ssm_state.to(self.ssm_states[layer_idx].device) + return self.ssm_states[layer_idx] + + def reset(self): + for layer_idx in range(len(self.conv_states)): + # In-place ops prevent breaking the static address + self.conv_states[layer_idx].zero_() + self.ssm_states[layer_idx].zero_() + + +class MambaMixer(nn.Module): + """ + Compute ∆, A, B, C, and D the state space parameters and compute the `contextualized_states`. + A, D are input independent (see Mamba paper [1] Section 3.5.2 "Interpretation of A" for why A isn't selective) + ∆, B, C are input-dependent (this is a key difference between Mamba and the linear time invariant S4, + and is why Mamba is called **selective** state spaces) + """ + + def __init__(self, config: MambaConfig, layer_idx: int): + super().__init__() + self.config = config + self.hidden_size = config.hidden_size + self.ssm_state_size = config.state_size + self.conv_kernel_size = config.conv_kernel + self.intermediate_size = config.intermediate_size + self.time_step_rank = int(config.time_step_rank) + self.layer_idx = layer_idx + self.use_conv_bias = config.use_conv_bias + self.conv1d = nn.Conv1d( + in_channels=self.intermediate_size, + out_channels=self.intermediate_size, + bias=config.use_conv_bias, + kernel_size=config.conv_kernel, + groups=self.intermediate_size, + padding=config.conv_kernel - 1, + ) + + self.activation = config.hidden_act + self.act = ACT2FN[config.hidden_act] + + self.use_mambapy = config.use_mambapy + + # projection of the input hidden states + self.in_proj = nn.Linear(self.hidden_size, self.intermediate_size * 2, bias=config.use_bias) + # selective projection used to make dt, B and C input dependent + self.x_proj = nn.Linear(self.intermediate_size, self.time_step_rank + self.ssm_state_size * 2, bias=False) + # time step projection (discretization) + self.dt_proj = nn.Linear(self.time_step_rank, self.intermediate_size, bias=True) + + # S4D real initialization. These are not discretized! + # The core is to load them, compute the discrete states, then write the updated state. Keeps the memory bounded + A = torch.arange(1, self.ssm_state_size + 1, dtype=torch.float32)[None, :] + A = A.expand(self.intermediate_size, -1).contiguous() + + self.A_log = nn.Parameter(torch.log(A)) + self.D = nn.Parameter(torch.ones(self.intermediate_size)) + self.out_proj = nn.Linear(self.intermediate_size, self.hidden_size, bias=config.use_bias) + self.use_bias = config.use_bias + + self.warn_slow_implementation() + + def warn_slow_implementation(self): + is_fast_path_available = all( + (selective_state_update, selective_scan_fn, causal_conv1d_fn, causal_conv1d_update, mamba_inner_fn) + ) + if not is_fast_path_available: + if self.use_mambapy: + if is_mambapy_available(): + logger.warning_once( + "The fast path is not available because one of `(selective_state_update, selective_scan_fn, causal_conv1d_fn, causal_conv1d_update, mamba_inner_fn)`" + " is None. Falling back to the mamba.py backend. To install follow https://github.com/state-spaces/mamba/#installation and" + " https://github.com/Dao-AILab/causal-conv1d" + ) + else: + raise ImportError( + "use_mambapy is set to True but the mambapy package is not installed. To install it follow https://github.com/alxndrTL/mamba.py." + ) + else: + logger.warning_once( + "The fast path is not available because one of `(selective_state_update, selective_scan_fn, causal_conv1d_fn, causal_conv1d_update, mamba_inner_fn)`" + " is None. Falling back to the sequential implementation of Mamba, as use_mambapy is set to False. To install follow https://github.com/state-spaces/mamba/#installation and" + " https://github.com/Dao-AILab/causal-conv1d. For the mamba.py backend, follow https://github.com/alxndrTL/mamba.py." + ) + + def cuda_kernels_forward( + self, + hidden_states: torch.Tensor, + cache_params: Optional[MambaCache] = None, + cache_position: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.LongTensor] = None, + ): + # 1. Gated MLP's linear projection + projected_states = self.in_proj(hidden_states).transpose(1, 2) + + if self.training and cache_params is None: # Doesn't support outputting the states -> used for training + contextualized_states = mamba_inner_fn( + projected_states, + self.conv1d.weight, + self.conv1d.bias if self.use_conv_bias else None, + self.x_proj.weight, + self.dt_proj.weight, + self.out_proj.weight, + self.out_proj.bias.float() if self.use_bias else None, + -torch.exp(self.A_log.float()), + None, # input-dependent B + None, # input-dependent C + self.D.float(), + delta_bias=self.dt_proj.bias.float(), + delta_softplus=True, + ) + + else: + hidden_states, gate = projected_states.chunk(2, dim=1) + + # if attention_mask is not None: + # hidden_states = hidden_states * attention_mask.unsqueeze(1) + + # 2. Convolution sequence transformation + conv_weights = self.conv1d.weight.view(self.conv1d.weight.size(0), self.conv1d.weight.size(2)) + if cache_params is not None and cache_position[0] > 0: + hidden_states = causal_conv1d_update( + hidden_states.squeeze(-1), + cache_params.conv_states[self.layer_idx], + conv_weights, + self.conv1d.bias, + self.activation, + ) + hidden_states = hidden_states.unsqueeze(-1) + else: + if cache_params is not None: + conv_states = nn.functional.pad( + hidden_states, (self.conv_kernel_size - hidden_states.shape[-1], 0) + ) + cache_params.update_conv_state(self.layer_idx, conv_states, cache_position) + hidden_states = causal_conv1d_fn( + hidden_states, conv_weights, self.conv1d.bias, activation=self.activation + ) + + # if attention_mask is not None: + # hidden_states = hidden_states * attention_mask.unsqueeze(1) + + # 3. State Space Model sequence transformation + # 3.a. input varying initialization of time_step, B and C + ssm_parameters = self.x_proj(hidden_states.transpose(1, 2)) + time_step, B, C = torch.split( + ssm_parameters, [self.time_step_rank, self.ssm_state_size, self.ssm_state_size], dim=-1 + ) + discrete_time_step = self.dt_proj.weight @ time_step.transpose(1, 2) + + A = -torch.exp(self.A_log.float()) + # 3.c perform the recurrence y ← SSM(A, B, C)(x) + time_proj_bias = self.dt_proj.bias.float() if hasattr(self.dt_proj, "bias") else None + if cache_params is not None and cache_position[0] > 0: + scan_outputs = selective_state_update( + cache_params.ssm_states[self.layer_idx], + hidden_states[..., 0], + discrete_time_step[..., 0], + A, + B[:, 0], + C[:, 0], + self.D, + gate[..., 0], + time_proj_bias, + dt_softplus=True, + ).unsqueeze(-1) + else: + scan_outputs, ssm_state = selective_scan_fn( + hidden_states, + discrete_time_step, + A, + B.transpose(1, 2), + C.transpose(1, 2), + self.D.float(), + gate, + time_proj_bias, + delta_softplus=True, + return_last_state=True, + ) + if ssm_state is not None and cache_params is not None: + cache_params.update_ssm_state(self.layer_idx, ssm_state) + + # 4. Final linear projection + contextualized_states = self.out_proj(scan_outputs.transpose(1, 2)) + return contextualized_states + + # fmt: off + def slow_forward(self, input_states, cache_params: Optional[MambaCache]=None, cache_position:Optional[torch.LongTensor]=None, attention_mask: Optional[torch.LongTensor] = None): + batch_size, seq_len, _ = input_states.shape + dtype = input_states.dtype + # 1. Gated MLP's linear projection + projected_states = self.in_proj(input_states).transpose(1, 2) # [batch, 2 * intermediate_size, seq_len] + hidden_states, gate = projected_states.chunk(2, dim=1) + + if attention_mask is not None: + hidden_states = hidden_states * attention_mask.unsqueeze(1) + + # 2. Convolution sequence transformation + if cache_params is not None: + ssm_state = cache_params.ssm_states[self.layer_idx].clone() + ssm_state = ssm_state.to(hidden_states.device) + # use `cache_position.shape[0]` to check whether we are in prefill + # stage, it's equivalent to check `cache_position[0] == 0`, which + # breaks dynamo fullgraph constraints + if cache_position.shape[0] == self.conv_kernel_size: + conv_state = nn.functional.pad( + hidden_states, + (self.conv_kernel_size - hidden_states.shape[-1], 0) + ) + + cache_params.update_conv_state(self.layer_idx, conv_state, cache_position) + hidden_states = self.act(self.conv1d(hidden_states)[..., :seq_len]) # [batch, intermediate_size, seq_len] + else: + conv_state = cache_params.update_conv_state(self.layer_idx, hidden_states, cache_position) + conv_state = conv_state.to(self.conv1d.weight.device) + hidden_states = torch.sum(conv_state * self.conv1d.weight[:, 0, :], dim=-1) + if self.use_conv_bias: + hidden_states += self.conv1d.bias + hidden_states = self.act(hidden_states).to(dtype).unsqueeze(-1) # [batch, intermediate_size, 1] : decoding + else: + ssm_state = torch.zeros( + (batch_size, self.intermediate_size, self.ssm_state_size), + device=hidden_states.device, dtype=dtype + ) + hidden_states = self.act(self.conv1d(hidden_states)[..., :seq_len]) # [batch, intermediate_size, seq_len] + + if attention_mask is not None: + hidden_states = hidden_states * attention_mask.unsqueeze(1) + + # 3. State Space Model sequence transformation + # 3.a. Selection: [batch, seq_len, self.time_step_rank + self.ssm_state_size * 2] + ssm_parameters = self.x_proj(hidden_states.transpose(1, 2)) + time_step, B, C = torch.split( + ssm_parameters, [self.time_step_rank, self.ssm_state_size, self.ssm_state_size], dim=-1 + ) + discrete_time_step = self.dt_proj(time_step) # [batch, seq_len, intermediate_size] + discrete_time_step = nn.functional.softplus(discrete_time_step).transpose(1, 2) # [batch, intermediate_size, seq_len] + + # 3.b. Discretization: B and C to [batch, seq_len, intermediate_size, ssm_state_size] (SRAM) + A = -torch.exp(self.A_log.float()) # [intermediate_size, ssm_state_size] + discrete_A = torch.exp(A[None, :, None, :] * discrete_time_step[:, :, :, None]) # [batch, intermediate_size, seq_len, ssm_state_size] + discrete_B = discrete_time_step[:, :, :, None] * B[:, None, :, :].float() # [batch, intermediate_size, seq_len, ssm_state_size] + deltaB_u = discrete_B * hidden_states[:, :, :, None].float() + + # 3.c perform the recurrence y ← SSM(A, B, C)(x) + if self.use_mambapy and self.training and cache_params is None: + hs = pscan(discrete_A.transpose(1, 2), deltaB_u.transpose(1, 2)) # [batch, seq_len, intermediate_size, ssm_state_size] + + scan_output = (hs @ C.unsqueeze(-1)).squeeze(3).transpose(1, 2) # [batch, intermediate_size, seq_len] + scan_output = scan_output + hidden_states * self.D[None, :, None] + scan_output = scan_output * self.act(gate) + else: + scan_outputs = [] + for i in range(seq_len): + ssm_state = discrete_A[:, :, i, :] * ssm_state + deltaB_u[:, :, i, :] # [batch, intermediate_size, ssm_state] + scan_output = torch.matmul(ssm_state.to(dtype), C[:, i, :].unsqueeze(-1)) # [batch, intermediate_size, 1] + scan_outputs.append(scan_output[:, :, 0]) + scan_output = torch.stack(scan_outputs, dim=-1) # [batch, intermediate_size, seq_len] + scan_output = scan_output + (hidden_states * self.D[None, :, None]) + scan_output = (scan_output * self.act(gate)) + + if cache_params is not None: + cache_params.ssm_states[self.layer_idx].copy_(ssm_state) + + # 4. Final linear projection + contextualized_states = self.out_proj(scan_output.transpose(1, 2)) # [batch, seq_len, hidden_size] + return contextualized_states + # fmt: on + + def forward( + self, + hidden_states, + cache_params: Optional[MambaCache] = None, + cache_position: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.LongTensor] = None, + ): + is_fast_path_available = all( + (selective_state_update, selective_scan_fn, causal_conv1d_fn, causal_conv1d_update, mamba_inner_fn) + ) + if is_fast_path_available and "cuda" in self.x_proj.weight.device.type and not torch._dynamo.is_compiling(): + return self.cuda_kernels_forward(hidden_states, cache_params, cache_position, attention_mask) + return self.slow_forward(hidden_states, cache_params, cache_position, attention_mask) + + +class MambaRMSNorm(nn.Module): + def __init__(self, hidden_size, eps=1e-6): + """ + MambaRMSNorm is equivalent to T5LayerNorm and LlamaRMSNorm + """ + super().__init__() + self.weight = nn.Parameter(torch.ones(hidden_size)) + self.variance_epsilon = eps + + def forward(self, hidden_states): + input_dtype = hidden_states.dtype + hidden_states = hidden_states.to(torch.float32) + variance = hidden_states.pow(2).mean(-1, keepdim=True) + hidden_states = hidden_states * torch.rsqrt(variance + self.variance_epsilon) + return self.weight * hidden_states.to(input_dtype) + + def extra_repr(self): + return f"{self.weight.shape[0]}, eps={self.variance_epsilon}" + + +class MambaBlock(GradientCheckpointingLayer): + def __init__(self, config, layer_idx): + super().__init__() + self.config = config + self.layer_idx = layer_idx + self.residual_in_fp32 = config.residual_in_fp32 + self.norm = MambaRMSNorm(config.hidden_size, eps=config.layer_norm_epsilon) + self.mixer = MambaMixer(config, layer_idx=layer_idx) + + def forward( + self, + hidden_states, + cache_params: Optional[MambaCache] = None, + cache_position: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.LongTensor] = None, + ): + residual = hidden_states + hidden_states = self.norm(hidden_states.to(dtype=self.norm.weight.dtype)) + if self.residual_in_fp32: + residual = residual.to(torch.float32) + + hidden_states = self.mixer( + hidden_states, cache_params=cache_params, cache_position=cache_position, attention_mask=attention_mask + ) + hidden_states = residual + hidden_states + return hidden_states + + +@auto_docstring +class MambaPreTrainedModel(PreTrainedModel): + config: MambaConfig + base_model_prefix = "backbone" + _no_split_modules = ["MambaBlock", "MambaMixer"] + supports_gradient_checkpointing = True + _is_stateful = True + + def _init_weights(self, module): + """Initialize the weights.""" + std = self.config.initializer_range + if isinstance(module, MambaMixer): + # S4D real initialization. These are not discretized! + # The core is to load them, compute the discrete states, then write the updated state. Keeps the memory bounded + A = torch.arange(1, module.ssm_state_size + 1, dtype=torch.float32)[None, :] + A = A.expand(module.intermediate_size, -1).contiguous() + module.A_log.copy_(torch.log(A)) + module.A_log._no_weight_decay = True + module.D._no_weight_decay = True + module.D.data.fill_(1.0) + + dt_init_std = self.config.time_step_rank**-0.5 * self.config.time_step_scale + if self.config.time_step_init_scheme == "constant": + nn.init.constant_(module.dt_proj.weight, dt_init_std) + elif self.config.time_step_init_scheme == "random": + nn.init.uniform_(module.dt_proj.weight, -dt_init_std, dt_init_std) + + dt = torch.exp( + torch.rand(self.config.intermediate_size) + * (math.log(self.config.time_step_max) - math.log(self.config.time_step_min)) + + math.log(self.config.time_step_min) + ).clamp(min=self.config.time_step_floor) + # # Inverse of softplus: https://github.com/pytorch/pytorch/issues/72759 + inv_dt = dt + torch.log(-torch.expm1(-dt)) + module.dt_proj.bias.copy_(inv_dt) + module.dt_proj.bias._no_reinit = True + + nn.init.kaiming_uniform_(module.conv1d.weight, a=math.sqrt(5)) + if module.conv1d.bias is not None: + if not getattr(module.conv1d.bias, "_no_reinit", False): + nn.init.zeros_(module.conv1d.bias) + nn.init.kaiming_uniform_(module.out_proj.weight, a=math.sqrt(5)) + + if self.config.rescale_prenorm_residual: + # Reinitialize selected weights subject to the OpenAI GPT-2 Paper Scheme: + # > A modified initialization which accounts for the accumulation on the residual path with model depth. Scale + # > the weights of residual layers at initialization by a factor of 1/√N where N is the # of residual layers. + # > -- GPT-2 :: https://openai.com/blog/better-language-models/ + # + # Reference (Megatron-LM): https://github.com/NVIDIA/Megatron-LM/blob/main/megatron/model/gpt_model.py + # Special Scaled Initialization --> There are 2 Layer Norms per Transformer Block + # Following Pytorch init, except scale by 1/sqrt(2 * n_layer) + # We need to reinit p since this code could be called multiple times + # Having just p *= scale would repeatedly scale it down + p = module.out_proj.weight + p /= math.sqrt(self.config.num_hidden_layers) + + if isinstance(module, nn.Linear): + if not getattr(module.weight, "_no_reinit", False): + nn.init.normal_(module.weight, std=std) + if module.bias is not None: + if not getattr(module.bias, "_no_reinit", False): + nn.init.zeros_(module.bias) + elif isinstance(module, MambaRMSNorm): + module.weight.data.fill_(1.0) + elif isinstance(module, nn.Embedding): + nn.init.normal_(module.weight, std=std) + + +@dataclass +@auto_docstring( + custom_intro=""" + Class for the MAMBA model outputs. + """ +) +class MambaOutput(ModelOutput): + r""" + cache_params (`MambaCache`): + The state of the model at the last time step. Can be used in a forward method with the next `input_ids` to + avoid providing the old `input_ids`. + + Includes both the State space model state matrices after the selective scan, and the Convolutional states + """ + + last_hidden_state: Optional[torch.FloatTensor] = None + cache_params: Optional[MambaCache] = None + hidden_states: Optional[tuple[torch.FloatTensor]] = None + + +@dataclass +@auto_docstring( + custom_intro=""" + Base class for causal language model (or autoregressive) outputs. + """ +) +class MambaCausalLMOutput(ModelOutput): + r""" + loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided): + Language modeling loss (for next-token prediction). + logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`): + Prediction scores of the language modeling head (scores for each vocabulary token before SoftMax). + cache_params (`MambaCache`): + The state of the model at the last time step. Can be used in a forward method with the next `input_ids` to + avoid providing the old `input_ids`. + + Includes both the State space model state matrices after the selective scan, and the Convolutional states + """ + + loss: Optional[torch.FloatTensor] = None + logits: Optional[torch.FloatTensor] = None + cache_params: Optional[MambaCache] = None + hidden_states: Optional[tuple[torch.FloatTensor]] = None + + +@auto_docstring +class MambaModel(MambaPreTrainedModel): + def __init__(self, config): + super().__init__(config) + + self.embeddings = nn.Embedding(config.vocab_size, config.hidden_size) + self.layers = nn.ModuleList([MambaBlock(config, layer_idx=idx) for idx in range(config.num_hidden_layers)]) + + self.gradient_checkpointing = False + self.norm_f = MambaRMSNorm(config.hidden_size, eps=config.layer_norm_epsilon) + # Initialize weights and apply final processing + self._register_load_state_dict_pre_hook(self.load_hook) + self.post_init() + + def load_hook(self, state_dict, prefix, *args): + for k in state_dict: + if "embedding." in k: + state_dict[k.replace("embedding.", "embeddings.")] = state_dict.pop(k) + break + + def get_input_embeddings(self): + return self.embeddings + + def set_input_embeddings(self, new_embeddings): + self.embeddings = new_embeddings + + @auto_docstring + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + inputs_embeds: Optional[torch.LongTensor] = None, + cache_params: Optional[MambaCache] = None, + use_cache: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + cache_position: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.LongTensor] = None, + ) -> Union[tuple, MambaOutput]: + r""" + cache_params (`MambaCache`, *optional*): + If passed along, the model uses the previous state in all the blocks (which will give the output for the + `input_ids` provided as if the model add `state_input_ids + input_ids` as context). + use_cache (`bool`, *optional*): + If set to `True`, the `cache_params` is returned and can be used to quickly generate the next logits. + """ + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + use_cache = use_cache if use_cache is not None else (self.config.use_cache if not self.training else False) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + if (input_ids is None) ^ (inputs_embeds is not None): # ^ is python for xor + raise ValueError("You must specify exactly one of input_ids or inputs_embeds") + + if inputs_embeds is None: + inputs_embeds = self.embeddings(input_ids) + + if self.gradient_checkpointing and self.training and use_cache: + use_cache = False + + if use_cache: + if cache_params is None: + cache_params = MambaCache( + self.config, inputs_embeds.size(0), device=inputs_embeds.device, dtype=inputs_embeds.dtype + ) + cache_position = torch.arange(0, self.config.conv_kernel, device=inputs_embeds.device) + elif cache_position is None: + # cases when we do manual forward instead of using `model.generate` which will initiate + # `cache_position` and makes sure it is not None, throw error here instead of doing some + # hack to conjecture the current cache position + raise ValueError( + "You have to specify the `cache_position` manually when `use_cache=True` and `cache_params` is passed, " + "you don't have to pass a `cache_params` if you are in prefilling stage because in that case it will " + "be initialized for you automatically" + ) + else: + cache_params = None + + hidden_states = inputs_embeds + all_hidden_states = () if output_hidden_states else None + for mixer_block in self.layers: + hidden_states = mixer_block( + hidden_states, + cache_params=cache_params, + cache_position=cache_position, + attention_mask=attention_mask, + ) + + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + hidden_states = self.norm_f(hidden_states) + + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if not return_dict: + return tuple(v for v in [hidden_states, cache_params, all_hidden_states] if v is not None) + + return MambaOutput( + last_hidden_state=hidden_states, + cache_params=cache_params if use_cache else None, + hidden_states=all_hidden_states, + ) + + +@auto_docstring( + custom_intro=""" + The MAMBA Model transformer with a language modeling head on top (linear layer with weights tied to the input + embeddings). + """ +) +class MambaForCausalLM(MambaPreTrainedModel, GenerationMixin): + _tied_weights_keys = ["lm_head.weight"] + + def __init__(self, config): + super().__init__(config) + self.backbone = MambaModel(config) + self.lm_head = nn.Linear(config.hidden_size, config.vocab_size, bias=False) + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self): + return self.backbone.get_input_embeddings() + + def set_input_embeddings(self, new_embeddings): + return self.backbone.set_input_embeddings(new_embeddings) + + def _update_model_kwargs_for_generation( + self, outputs: ModelOutput, model_kwargs: dict[str, Any], num_new_tokens: int = 1, **kwargs + ) -> dict[str, Any]: + model_kwargs["cache_params"] = outputs.get("cache_params", None) + if ( + model_kwargs.get("use_cache", True) + and "cache_position" in model_kwargs + and model_kwargs["cache_position"] is not None + ): + model_kwargs["cache_position"] = model_kwargs["cache_position"][-1:] + num_new_tokens + + if "attention_mask" in model_kwargs: + attention_mask = model_kwargs["attention_mask"] + model_kwargs["attention_mask"] = torch.cat( + [attention_mask, attention_mask.new_ones((attention_mask.shape[0], 1))], dim=-1 + ) + + return model_kwargs + + def prepare_inputs_for_generation( + self, + input_ids, + inputs_embeds=None, + use_cache=None, + cache_params: Optional[MambaCache] = None, + cache_position: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.LongTensor] = None, + **kwargs, + ): + # Overwritten -- uses `cache_params` as opposed to `past_key_values` + model_inputs = {"input_ids": input_ids.contiguous()} + if use_cache and cache_params is None: + # we initialize the `cache_position` to full size of `conv_states` at prefill stage + # considering padding will be applied when input length is shorter, and truncation + # will be applied when it is longer, so it will be equivalent to always have it match + # the length of `cache_params.conv_states`, which is `config.conv_kernel` + cache_position = torch.arange(0, self.backbone.config.conv_kernel, device=input_ids.device) + if inputs_embeds is not None: + model_inputs = {"inputs_embeds": inputs_embeds} + max_batch_size = inputs_embeds.size(0) + else: + max_batch_size = input_ids.size(0) + cache_params = MambaCache(self.backbone.config, max_batch_size, device=self.device, dtype=self.dtype) + + if use_cache and cache_position[0] > 0: + model_inputs["input_ids"] = input_ids[:, -1].unsqueeze(-1).contiguous() + attention_mask = None + + if not use_cache and inputs_embeds is not None: + model_inputs = {"inputs_embeds": inputs_embeds} + + model_inputs.update( + { + "cache_params": cache_params, + "use_cache": use_cache, + "cache_position": cache_position, + "attention_mask": attention_mask, + } + ) + return model_inputs + + @auto_docstring + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.LongTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + cache_params: Optional[MambaCache] = None, + labels: Optional[torch.LongTensor] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + use_cache: Optional[bool] = None, + cache_position: Optional[torch.Tensor] = None, + **kwargs, # for now we need this for generation + ) -> Union[tuple, MambaCausalLMOutput]: + r""" + cache_params (`MambaCache`, *optional*): + If passed along, the model uses the previous state in all the blocks (which will give the output for the + `input_ids` provided as if the model add `state_input_ids + input_ids` as context). + labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*): + Labels for language modeling. Note that the labels **are shifted** inside the model, i.e. you can set + `labels = input_ids` Indices are selected in `[-100, 0, ..., config.vocab_size]` All labels set to `-100` + are ignored (masked), the loss is only computed for labels in `[0, ..., config.vocab_size]` + use_cache (`bool`, *optional*): + If set to `True`, the `cache_params` is returned and can be used to quickly generate the next logits. + """ + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + mamba_outputs = self.backbone( + input_ids, + cache_params=cache_params, + inputs_embeds=inputs_embeds, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + use_cache=use_cache, + cache_position=cache_position, + attention_mask=attention_mask, + ) + hidden_states = mamba_outputs[0] + + logits = self.lm_head(hidden_states.to(self.lm_head.weight.dtype)).float() + + loss = None + if labels is not None: + # move labels to correct device to enable model parallelism + labels = labels.to(logits.device) + # Shift so that tokens < n predict n + shift_logits = logits[..., :-1, :].contiguous() + shift_labels = labels[..., 1:].contiguous() + # Flatten the tokens + loss_fct = CrossEntropyLoss() + loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), shift_labels.view(-1)) + + if not return_dict: + output = (logits,) + mamba_outputs[1:] + return ((loss,) + output) if loss is not None else output + + return MambaCausalLMOutput( + loss=loss, + logits=logits, + cache_params=mamba_outputs.cache_params, + hidden_states=mamba_outputs.hidden_states, + ) + + +__all__ = ["MambaForCausalLM", "MambaModel", "MambaPreTrainedModel", "MambaCache"] \ No newline at end of file diff --git a/source/official-code/mini/models/nope.py b/source/official-code/mini/models/nope.py new file mode 100644 index 0000000000000000000000000000000000000000..cf8683890e8cf3c0a0b3883ec22bc58c947fb4f4 --- /dev/null +++ b/source/official-code/mini/models/nope.py @@ -0,0 +1,584 @@ +""" PyTorch GPTNeoX model.""" + +from typing import Optional, Tuple, Union + +import torch +import torch.utils.checkpoint +from torch import nn +from torch.nn import BCEWithLogitsLoss, CrossEntropyLoss, MSELoss + +from transformers.activations import ACT2FN +from transformers.modeling_outputs import ( + BaseModelOutputWithPast, + CausalLMOutputWithPast, + QuestionAnsweringModelOutput, + SequenceClassifierOutputWithPast, + TokenClassifierOutput, +) +from transformers.modeling_utils import PreTrainedModel +from transformers.utils import logging + +from transformers.models.gpt_neox.configuration_gpt_neox import GPTNeoXConfig + +from transformers.models.gpt_neox.modeling_gpt_neox import GPTNeoXPreTrainedModel, GPTNeoXMLP + +logger = logging.get_logger(__name__) + + + + +class GPTNoPEAttention(nn.Module): + def __init__(self, config): + super().__init__() + self.config = config + self.num_attention_heads = config.num_attention_heads + self.hidden_size = config.hidden_size + if self.hidden_size % self.num_attention_heads != 0: + raise ValueError( + "The hidden size is not divisble by the number of attention heads! Make sure to update them" + ) + self.head_size = self.hidden_size // self.num_attention_heads + self.rotary_ndims = int(self.head_size * config.rotary_pct) + self._init_bias(config.max_position_embeddings) + + self.register_buffer("masked_bias", torch.tensor(-1e9), persistent=False) + self.norm_factor = self.head_size**-0.5 + self.query_key_value = nn.Linear(config.hidden_size, 3 * config.hidden_size) + self.dense = nn.Linear(config.hidden_size, config.hidden_size) + self.attention_dropout = nn.Dropout(config.attention_dropout) + + def _init_bias(self, max_positions, device=None): + self.register_buffer( + "bias", + torch.tril(torch.ones((max_positions, max_positions), dtype=torch.bool)).view( + 1, 1, max_positions, max_positions + ), + persistent=False, + ) + if device is not None: + self.bias = self.bias.to(device) + + def forward( + self, + hidden_states: torch.FloatTensor, + attention_mask: torch.FloatTensor, + position_ids: torch.LongTensor, + head_mask: Optional[torch.FloatTensor] = None, + layer_past: Optional[Tuple[torch.Tensor]] = None, + use_cache: Optional[bool] = False, + output_attentions: Optional[bool] = False, + ): + has_layer_past = layer_past is not None + + # Compute QKV + # Attention heads [batch, seq_len, hidden_size] + # --> [batch, seq_len, (np * 3 * head_size)] + qkv = self.query_key_value(hidden_states) + + # [batch, seq_len, (num_heads * 3 * head_size)] + # --> [batch, seq_len, num_heads, 3 * head_size] + new_qkv_shape = qkv.size()[:-1] + (self.num_attention_heads, 3 * self.head_size) + qkv = qkv.view(*new_qkv_shape) + + # [batch, seq_len, num_attention_heads, 3 * head_size] --> 3 [batch, num_attention_heads, seq_len, head_size] + query = qkv[..., : self.head_size].permute(0, 2, 1, 3) + key = qkv[..., self.head_size : 2 * self.head_size].permute(0, 2, 1, 3) + value = qkv[..., 2 * self.head_size :].permute(0, 2, 1, 3) + + # Compute rotary embeddings on rotary_ndims + query_rot = query[..., : self.rotary_ndims] + query_pass = query[..., self.rotary_ndims :] + key_rot = key[..., : self.rotary_ndims] + key_pass = key[..., self.rotary_ndims :] + + # Compute token offset for rotary embeddings (when decoding) + seq_len = key.shape[-2] + if has_layer_past: + seq_len += layer_past[0].shape[-2] + query = torch.cat((query, query_pass), dim=-1) + key = torch.cat((key, key_pass), dim=-1) + + # Cache QKV values + if has_layer_past: + past_key = layer_past[0] + past_value = layer_past[1] + key = torch.cat((past_key, key), dim=-2) + value = torch.cat((past_value, value), dim=-2) + present = (key, value) if use_cache else None + + # Compute attention + attn_output, attn_weights = self._attn(query, key, value, attention_mask, head_mask) + + # Reshape outputs + attn_output = self._merge_heads(attn_output, self.num_attention_heads, self.head_size) + attn_output = self.dense(attn_output) + + outputs = (attn_output, present) + if output_attentions: + outputs += (attn_weights,) + + return outputs + + @classmethod + def _split_heads(cls, tensor, num_attention_heads, attn_head_size): + """ + Splits hidden dim into attn_head_size and num_attention_heads + """ + # tensor: [bs, seq_len, hidden_size] + new_shape = tensor.size()[:-1] + (num_attention_heads, attn_head_size) + # -> [bs, seq_len, num_attention_heads, attn_head_size] + tensor = tensor.view(new_shape) + # -> [bs, num_attention_heads, seq_len, attn_head_size] + tensor = tensor.permute(0, 2, 1, 3) + return tensor + + @classmethod + def _merge_heads(cls, tensor, num_attention_heads, attn_head_size): + """ + Merges attn_head_size dim and num_attn_heads dim into hidden dim + """ + # tensor [bs, num_attention_heads, seq_len, attn_head_size] + tensor = tensor.permute(0, 2, 1, 3).contiguous() + # -> [bs, seq_len, num_attention_heads, attn_head_size] + tensor = tensor.view(tensor.size(0), tensor.size(1), num_attention_heads * attn_head_size) + # -> [bs, seq_len, hidden_size] + return tensor + + def _attn(self, query, key, value, attention_mask=None, head_mask=None): + # q, k, v: [bs, num_attention_heads, seq_len, attn_head_size] + # compute causal mask from causal mask buffer + batch_size, num_attention_heads, query_length, attn_head_size = query.size() + key_length = key.size(-2) + + # dynamically increase the causal mask with the key length, if needed. + if key_length > self.bias.shape[-1]: + self._init_bias(key_length, device=key.device) + causal_mask = self.bias[:, :, key_length - query_length : key_length, :key_length] + + query = query.view(batch_size * num_attention_heads, query_length, attn_head_size) + key = key.view(batch_size * num_attention_heads, key_length, attn_head_size) + attn_scores = torch.zeros( + batch_size * num_attention_heads, + query_length, + key_length, + dtype=query.dtype, + device=key.device, + ) + attn_scores = torch.baddbmm( + attn_scores, + query, + key.transpose(1, 2), + beta=1.0, + alpha=self.norm_factor, + ) + attn_scores = attn_scores.view(batch_size, num_attention_heads, query_length, key_length) + + mask_value = torch.finfo(attn_scores.dtype).min + # Need to be a tensor, otherwise we get error: `RuntimeError: expected scalar type float but found double`. + # Need to be on the same device, otherwise `RuntimeError: ..., x and y to be on the same device` + mask_value = torch.tensor(mask_value, dtype=attn_scores.dtype).to(attn_scores.device) + attn_scores = torch.where(causal_mask, attn_scores, mask_value) + + if attention_mask is not None: + # Apply the attention mask + attn_scores = attn_scores + attention_mask + + attn_weights = nn.functional.softmax(attn_scores, dim=-1) + attn_weights = attn_weights.to(value.dtype) + + # Mask heads if we want to + if head_mask is not None: + attn_weights = attn_weights * head_mask + + attn_weights = self.attention_dropout(attn_weights) + + attn_output = torch.matmul(attn_weights, value) + return attn_output, attn_weights + + + +class GPTNeoXNoPELayer(nn.Module): + def __init__(self, config): + super().__init__() + self.use_parallel_residual = config.use_parallel_residual + self.input_layernorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.post_attention_layernorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.post_attention_dropout = nn.Dropout(config.hidden_dropout) + self.post_mlp_dropout = nn.Dropout(config.hidden_dropout) + self.attention = GPTNoPEAttention(config) + self.mlp = GPTNeoXMLP(config) + + def forward( + self, + hidden_states: Optional[torch.FloatTensor], + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + use_cache: Optional[bool] = False, + layer_past: Optional[Tuple[torch.Tensor]] = None, + output_attentions: Optional[bool] = False, + ): + attention_layer_outputs = self.attention( + self.input_layernorm(hidden_states), + attention_mask=attention_mask, + position_ids=position_ids, + layer_past=layer_past, + head_mask=head_mask, + use_cache=use_cache, + output_attentions=output_attentions, + ) + attn_output = attention_layer_outputs[0] # output_attn: attn_output, present, (attn_weights) + attn_output = self.post_attention_dropout(attn_output) + outputs = attention_layer_outputs[1:] + + if self.use_parallel_residual: + # pseudocode: + # x = x + attn(ln1(x)) + mlp(ln2(x)) + mlp_output = self.mlp(self.post_attention_layernorm(hidden_states)) + mlp_output = self.post_mlp_dropout(mlp_output) + hidden_states = mlp_output + attn_output + hidden_states + else: + # pseudocode: + # x = x + attn(ln1(x)) + # x = x + mlp(ln2(x)) + attn_output = attn_output + hidden_states + mlp_output = self.mlp(self.post_attention_layernorm(attn_output)) + mlp_output = self.post_mlp_dropout(mlp_output) + hidden_states = mlp_output + attn_output + + if use_cache: + outputs = (hidden_states,) + outputs # hidden_states, present, (attn_weights) + else: + outputs = (hidden_states,) + outputs[1:] # hidden_states, (attn_weights) + + return outputs + + + +class GPTNeoXNoPEModel(GPTNeoXPreTrainedModel): + def __init__(self, config): + super().__init__(config) + self.config = config + + self.embed_in = nn.Embedding(config.vocab_size, config.hidden_size) + self.emb_dropout = nn.Dropout(config.hidden_dropout) + self.layers = nn.ModuleList([GPTNeoXNoPELayer(config) for _ in range(config.num_hidden_layers)]) + self.final_layer_norm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + + self.gradient_checkpointing = False + + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self): + return self.embed_in + + def set_input_embeddings(self, value): + self.embed_in = value + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, BaseModelOutputWithPast]: + r""" + past_key_values (`tuple(tuple(torch.FloatTensor))` of length `config.n_layers` with each tuple having 4 tensors of shape `(batch_size, num_heads, sequence_length - 1, embed_size_per_head)`): + Contains precomputed key and value hidden states of the attention blocks. Can be used to speed up decoding. + If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that + don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all + `decoder_input_ids` of shape `(batch_size, sequence_length)`. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see + `past_key_values`). + """ + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + use_cache = use_cache if use_cache is not None else self.config.use_cache + + if input_ids is not None and inputs_embeds is not None: + raise ValueError("You cannot specify both input_ids and inputs_embeds at the same time") + elif input_ids is not None: + self.warn_if_padding_and_no_attention_mask(input_ids, attention_mask) + input_shape = input_ids.size() + elif inputs_embeds is not None: + input_shape = inputs_embeds.size()[:-1] + else: + raise ValueError("You have to specify either input_ids or inputs_embeds") + + batch_size, seq_length = input_shape + + if past_key_values is None: + past_length = 0 + past_key_values = tuple([None] * self.config.num_hidden_layers) + else: + past_length = past_key_values[0][0].size(-2) + + if position_ids is None: + device = input_ids.device if input_ids is not None else inputs_embeds.device + position_ids = torch.arange(past_length, seq_length + past_length, dtype=torch.long, device=device) + position_ids = position_ids.unsqueeze(0) + + # Attention mask. + if attention_mask is not None: + assert batch_size > 0, "batch_size has to be defined and > 0" + # attention_mask = attention_mask.view(batch_size, -1) + # We create a 3D attention mask from a 2D tensor mask. + # Sizes are [batch_size, 1, 1, to_seq_length] + # So we can broadcast to [batch_size, num_heads, from_seq_length, to_seq_length] + # this attention mask is more simple than the triangular masking of causal attention + # used in OpenAI GPT, we just need to prepare the broadcast dimension here. + # attention_mask = attention_mask[:, None, None, :] + + # Since attention_mask is 1.0 for positions we want to attend and 0.0 for + # masked positions, this operation will create a tensor which is 0.0 for + # positions we want to attend and the dtype's smallest value for masked positions. + # Since we are adding it to the raw scores before the softmax, this is + # effectively the same as removing these entirely. + attention_mask = attention_mask.to(dtype=self.dtype) # fp16 compatibility + attention_mask = (1.0 - attention_mask) * torch.finfo(self.dtype).min + + # Prepare head mask if needed + # 1.0 in head_mask indicate we keep the head + # attention_probs has shape bsz x n_heads x N x N + # input head_mask has shape [num_heads] or [num_hidden_layers x num_heads] + # and head_mask is converted to shape [num_hidden_layers x batch x num_heads x seq_length x seq_length] + head_mask = self.get_head_mask(head_mask, self.config.num_hidden_layers) + + if inputs_embeds is None: + inputs_embeds = self.embed_in(input_ids) + + hidden_states = self.emb_dropout(inputs_embeds) + + if self.gradient_checkpointing and self.training: + if use_cache: + logger.warning( + "`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`..." + ) + use_cache = False + + presents = () if use_cache else None + all_attentions = () if output_attentions else None + all_hidden_states = () if output_hidden_states else None + for i, (layer, layer_past) in enumerate(zip(self.layers, past_key_values)): + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if self.gradient_checkpointing and self.training: + outputs = self._gradient_checkpointing_func( + layer.__call__, + hidden_states, + attention_mask, + position_ids, + head_mask[i], + use_cache, + None, + output_attentions, + ) + else: + outputs = layer( + hidden_states, + attention_mask=attention_mask, + position_ids=position_ids, + head_mask=head_mask[i], + layer_past=layer_past, + use_cache=use_cache, + output_attentions=output_attentions, + ) + hidden_states = outputs[0] + if use_cache is True: + presents = presents + (outputs[1],) + if output_attentions: + all_attentions = all_attentions + (outputs[2 if use_cache else 1],) + + hidden_states = self.final_layer_norm(hidden_states) + # Add last hidden state + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if not return_dict: + return tuple(v for v in [hidden_states, presents, all_hidden_states, all_attentions] if v is not None) + + return BaseModelOutputWithPast( + last_hidden_state=hidden_states, + past_key_values=presents, + hidden_states=all_hidden_states, + attentions=all_attentions, + ) + + +class GPTNeoXNoPEForCausalLM(GPTNeoXPreTrainedModel): + _tied_weights_keys = ["embed_out.weight"] + + def __init__(self, config): + super().__init__(config) + + self.gpt_neox = GPTNeoXNoPEModel(config) + self.embed_out = nn.Linear(config.hidden_size, config.vocab_size, bias=False) + + # Initialize weights and apply final processing + self.post_init() + + def get_output_embeddings(self): + return self.embed_out + + def set_output_embeddings(self, new_embeddings): + self.embed_out = new_embeddings + + def forward( + self, + input_ids: Optional[torch.LongTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + position_ids: Optional[torch.LongTensor] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + head_mask: Optional[torch.FloatTensor] = None, + past_key_values: Optional[Tuple[Tuple[torch.FloatTensor]]] = None, + labels: Optional[torch.LongTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, CausalLMOutputWithPast]: + r""" + past_key_values (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`): + Tuple of `tuple(torch.FloatTensor)` of length `config.n_layers`, with each tuple having 2 tensors of shape + `(batch_size, num_heads, sequence_length, embed_size_per_head)`) and 2 additional tensors of shape + `(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)`. The two additional tensors are + only required when the model is used as a decoder in a Sequence to Sequence model. + + Contains pre-computed hidden-states (key and values in the self-attention blocks that can be used (see + `past_key_values` input) to speed up sequential decoding. + + If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that + don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all + `decoder_input_ids` of shape `(batch_size, sequence_length)`. + labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*): + Labels for computing the left-to-right language modeling loss (next word prediction). Indices should be in + `[-100, 0, ..., config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are + ignored (masked), the loss is only computed for the tokens with labels n `[0, ..., config.vocab_size]`. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see + `past_key_values`). + + Returns: + + Example: + + ```python + >>> from transformers import AutoTokenizer, GPTNeoXForCausalLM, GPTNeoXConfig + >>> import torch + + >>> tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-neox-20b") + >>> config = GPTNeoXConfig.from_pretrained("EleutherAI/gpt-neox-20b") + >>> config.is_decoder = True + >>> model = GPTNeoXForCausalLM.from_pretrained("EleutherAI/gpt-neox-20b", config=config) + + >>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt") + >>> outputs = model(**inputs) + + >>> prediction_logits = outputs.logits + ```""" + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + outputs = self.gpt_neox( + input_ids, + attention_mask=attention_mask, + position_ids=position_ids, + head_mask=head_mask, + inputs_embeds=inputs_embeds, + past_key_values=past_key_values, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + + hidden_states = outputs[0] + lm_logits = self.embed_out(hidden_states) + + lm_loss = None + if labels is not None: + # move labels to correct device to enable model parallelism + labels = labels.to(lm_logits.device) + # we are doing next-token prediction; shift prediction scores and input ids by one + shift_logits = lm_logits[:, :-1, :].contiguous() + labels = labels[:, 1:].contiguous() + loss_fct = CrossEntropyLoss() + lm_loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), labels.view(-1)) + + if not return_dict: + output = (lm_logits,) + outputs[1:] + return ((lm_loss,) + output) if lm_loss is not None else output + + return CausalLMOutputWithPast( + loss=lm_loss, + logits=lm_logits, + past_key_values=outputs.past_key_values, + hidden_states=outputs.hidden_states, + attentions=outputs.attentions, + ) + + def prepare_inputs_for_generation( + self, input_ids, past_key_values=None, attention_mask=None, inputs_embeds=None, **kwargs + ): + input_shape = input_ids.shape + # cut decoder_input_ids if past is used + if past_key_values is not None: + past_length = past_key_values[0][0].shape[2] + + # Some generation methods already pass only the last input ID + if input_ids.shape[1] > past_length: + remove_prefix_length = past_length + else: + # Default to old behavior: keep only final ID + remove_prefix_length = input_ids.shape[1] - 1 + + input_ids = input_ids[:, remove_prefix_length:] + + position_ids = kwargs.get("position_ids", None) + if attention_mask is not None and position_ids is None: + # create position_ids on the fly for batch generation + position_ids = attention_mask.long().cumsum(-1) - 1 + position_ids.masked_fill_(attention_mask == 0, 1) + if past_key_values: + position_ids = position_ids[:, -input_ids.shape[1] :] + + # if model is used as a decoder in encoder-decoder model, the decoder attention mask is created on the fly + if attention_mask is None: + attention_mask = input_ids.new_ones(input_shape) + + # if `inputs_embeds` are passed, we only want to use them in the 1st generation step + if inputs_embeds is not None and past_key_values is None: + model_inputs = {"inputs_embeds": inputs_embeds} + else: + model_inputs = {"input_ids": input_ids} + model_inputs.update( + { + "attention_mask": attention_mask, + "past_key_values": past_key_values, + "position_ids": position_ids, + } + ) + + return model_inputs + + def _reorder_cache(self, past_key_values, beam_idx): + reordered_past = () + for layer_past in past_key_values: + reordered_past += ( + tuple(past_state.index_select(0, beam_idx.to(past_state.device)) for past_state in layer_past[:2]) + + layer_past[2:], + ) + return reordered_past + + diff --git a/source/official-code/mini/models/rope.py b/source/official-code/mini/models/rope.py new file mode 100644 index 0000000000000000000000000000000000000000..d3e38da8e225bd4fbcb778e7fe5cd1348456f782 --- /dev/null +++ b/source/official-code/mini/models/rope.py @@ -0,0 +1,551 @@ +""" PyTorch GPTNeoX model.""" + +import torch +import torch.utils.checkpoint +from torch import nn +from torch.nn import CrossEntropyLoss + +from transformers.activations import ACT2FN +from transformers.file_utils import ( + add_code_sample_docstrings, + add_start_docstrings, + add_start_docstrings_to_model_forward, + replace_return_docstrings, +) +from transformers.modeling_outputs import BaseModelOutputWithPast, CausalLMOutputWithPast +from transformers.modeling_utils import PreTrainedModel +from transformers.utils import logging +from transformers.models.gpt_neox.configuration_gpt_neox import GPTNeoXConfig + +from transformers.generation import GenerationMixin + + +logger = logging.get_logger(__name__) + +_CHECKPOINT_FOR_DOC = "gpt-neox-20b" +_CONFIG_FOR_DOC = "GPTNeoXConfig" +_TOKENIZER_FOR_DOC = "GPTNeoXTokenizerFast" + + +class GPTNeoXPreTrainedModel(PreTrainedModel): + """ + An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained + models. + """ + + config_class = GPTNeoXConfig + base_model_prefix = "gpt_neox" + supports_gradient_checkpointing = True + _no_split_modules = ["GPTNeoXLayer"] + + def _init_weights(self, module): + """Initialize the weights""" + if isinstance(module, nn.Linear): + module.weight.data.normal_(mean=0.0, std=self.config.initializer_range) + if module.bias is not None: + module.bias.data.zero_() + elif isinstance(module, nn.Embedding): + module.weight.data.normal_(mean=0.0, std=self.config.initializer_range) + if module.padding_idx is not None: + module.weight.data[module.padding_idx].zero_() + elif isinstance(module, nn.LayerNorm): + module.bias.data.zero_() + module.weight.data.fill_(1.0) + + def _set_gradient_checkpointing(self, module, value=False): + if isinstance(module, GPTNeoXModel): + module.gradient_checkpointing = value + + +class GPTNeoXAttention(nn.Module): + def __init__(self, config): + super().__init__() + self.num_attention_heads = config.num_attention_heads + self.hidden_size = config.hidden_size + self.head_size = self.hidden_size // self.num_attention_heads + self.rotary_ndims = int(self.head_size * config.rotary_pct) + max_positions = config.max_position_embeddings + self.register_buffer( + "bias", + torch.tril(torch.ones((max_positions, max_positions), dtype=torch.uint8)).view( + 1, 1, max_positions, max_positions + ), + ) + self.register_buffer("masked_bias", torch.tensor(-1e9)) + self.rotary_emb = RotaryEmbedding(self.rotary_ndims, base=config.rotary_emb_base) + self.norm_factor = torch.sqrt(torch.tensor(self.head_size, dtype=torch.float32)).to(torch.get_default_dtype()) + self.query_key_value = nn.Linear(config.hidden_size, 3 * config.hidden_size) + self.dense = nn.Linear(config.hidden_size, config.hidden_size) + + def forward( + self, + hidden_states, + attention_mask, + head_mask=None, + layer_past=None, + use_cache=False, + output_attentions=False, + ): + has_layer_past = layer_past is not None + + # Compute QKV + # Attention heads [batch, seq_len, hidden_size] + # --> [batch, seq_len, (np * 3 * head_size)] + qkv = self.query_key_value(hidden_states) + + # [batch, seq_len, (num_heads * 3 * head_size)] + # --> [batch, seq_len, num_heads, 3 * head_size] + new_qkv_shape = qkv.size()[:-1] + (self.num_attention_heads, 3 * self.head_size) + qkv = qkv.view(*new_qkv_shape) + + # [batch, seq_len, num_attention_heads, 3 * head_size] --> 3 [batch, num_attention_heads, seq_len, head_size] + query = qkv[..., : self.head_size].permute(0, 2, 1, 3) + key = qkv[..., self.head_size : 2 * self.head_size].permute(0, 2, 1, 3) + value = qkv[..., 2 * self.head_size :].permute(0, 2, 1, 3) + + # Compute rotary embeddings on rotary_ndims + query_rot = query[..., : self.rotary_ndims] + query_pass = query[..., self.rotary_ndims :] + key_rot = key[..., : self.rotary_ndims] + key_pass = key[..., self.rotary_ndims :] + + # Compute token offset for rotary embeddings (when decoding) + seq_len = key.shape[-2] + offset = 0 + if has_layer_past: + offset = layer_past[0].shape[-2] + seq_len += offset + cos, sin = self.rotary_emb(value, seq_len=seq_len) + query, key = apply_rotary_pos_emb(query_rot, key_rot, cos, sin, offset=offset) + query = torch.cat((query, query_pass), dim=-1) + key = torch.cat((key, key_pass), dim=-1) + + # Cache QKV values + if has_layer_past: + past_key = layer_past[0] + past_value = layer_past[1] + key = torch.cat((past_key, key), dim=-2) + value = torch.cat((past_value, value), dim=-2) + present = None if use_cache else (key, value) + + # Compute attention + attn_output, attn_weights = self._attn(query, key, value, attention_mask, head_mask) + + # Reshape outputs + attn_output = self._merge_heads(attn_output, self.num_attention_heads, self.head_size) + attn_output = self.dense(attn_output) + + outputs = (attn_output, present) + if output_attentions: + outputs += (attn_weights,) + + return outputs + + @classmethod + def _split_heads(cls, tensor, num_attention_heads, attn_head_size): + """ + Splits hidden dim into attn_head_size and num_attention_heads + """ + # tensor: [bs, seq_len, hidden_size] + new_shape = tensor.size()[:-1] + (num_attention_heads, attn_head_size) + # -> [bs, seq_len, num_attention_heads, attn_head_size] + tensor = tensor.view(new_shape) + # -> [bs, num_attention_heads, seq_len, attn_head_size] + tensor = tensor.permute(0, 2, 1, 3) + return tensor + + @classmethod + def _merge_heads(cls, tensor, num_attention_heads, attn_head_size): + """ + Merges attn_head_size dim and num_attn_heads dim into hidden dim + """ + # tensor [bs, num_attention_heads, seq_len, attn_head_size] + tensor = tensor.permute(0, 2, 1, 3).contiguous() + # -> [bs, seq_len, num_attention_heads, attn_head_size] + tensor = tensor.view(tensor.size(0), tensor.size(1), num_attention_heads * attn_head_size) + # -> [bs, seq_len, hidden_size] + return tensor + + def _attn(self, query, key, value, attention_mask=None, head_mask=None): + # q, k, v: [bs, num_attention_heads, seq_len, attn_head_size] + # compute causal mask from causal mask buffer + batch_size, num_attention_heads, query_length, attn_head_size = query.size() + key_length = key.size(-2) + + causal_mask = self.bias[:, :, key_length - query_length : key_length, :key_length].bool() + + query = query.view(batch_size * num_attention_heads, query_length, attn_head_size) + key = key.view(batch_size * num_attention_heads, key_length, attn_head_size) + attn_scores = torch.einsum("bik,bjk->bij", query, key) / self.norm_factor + attn_scores = attn_scores.view(batch_size, num_attention_heads, query_length, key_length) + + attn_scores = torch.where(causal_mask, attn_scores, self.masked_bias.to(attn_scores.dtype)) + + if attention_mask is not None: + # Apply the attention mask + attn_scores = attn_scores + attention_mask + + attn_weights = nn.functional.softmax(attn_scores, dim=-1) + attn_weights = attn_weights.to(value.dtype) + + # Mask heads if we want to + if head_mask is not None: + attn_weights = attn_weights * head_mask + + attn_output = torch.matmul(attn_weights, value) + return attn_output, attn_weights + + +def attention_mask_func(attention_scores, ltor_mask): + attention_scores.masked_fill_(~ltor_mask, -10000.0) + return attention_scores + + +class RotaryEmbedding(torch.nn.Module): + def __init__(self, dim, base=10000, device=None): + super().__init__() + inv_freq = 1.0 / (base ** (torch.arange(0, dim, 2).float().to(device) / dim)) + self.register_buffer("inv_freq", inv_freq) + self.max_seq_len_cached = None + self.cos_cached = None + self.sin_cached = None + + def forward(self, x, seq_len=None): + # x: [bs, num_attention_heads, seq_len, head_size] + if self.max_seq_len_cached is None or (seq_len > self.max_seq_len_cached): + self.max_seq_len_cached = seq_len + t = torch.arange(self.max_seq_len_cached, device=x.device, dtype=self.inv_freq.dtype) + freqs = torch.einsum("i,j->ij", t, self.inv_freq) + # Different from paper, but it uses a different permutation in order to obtain the same calculation + emb = torch.cat((freqs, freqs), dim=-1).to(x.device) + self.cos_cached = emb.cos()[None, None, :, :] + self.sin_cached = emb.sin()[None, None, :, :] + return self.cos_cached[:seq_len, ...], self.sin_cached[:seq_len, ...] + + +def rotate_half(x): + """Rotates half the hidden dims of the input.""" + x1 = x[..., : x.shape[-1] // 2] + x2 = x[..., x.shape[-1] // 2 :] + return torch.cat((-x2, x1), dim=-1) + + +def apply_rotary_pos_emb(q, k, cos, sin, offset: int = 0): + cos = cos[..., offset : q.shape[-2] + offset, :] + sin = sin[..., offset : q.shape[-2] + offset, :] + q_embed = (q * cos) + (rotate_half(q) * sin) + k_embed = (k * cos) + (rotate_half(k) * sin) + return q_embed, k_embed + + +class GPTNeoXMLP(nn.Module): + def __init__(self, config): + super().__init__() + self.dense_h_to_4h = nn.Linear(config.hidden_size, config.intermediate_size) + self.dense_4h_to_h = nn.Linear(config.intermediate_size, config.hidden_size) + self.act = ACT2FN[config.hidden_act] + + def forward(self, hidden_states): + hidden_states = self.dense_h_to_4h(hidden_states) + hidden_states = self.act(hidden_states) + hidden_states = self.dense_4h_to_h(hidden_states) + return hidden_states + + +class GPTNeoXLayer(nn.Module): + def __init__(self, config): + super().__init__() + self.input_layernorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.post_attention_layernorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + self.attention = GPTNeoXAttention(config) + self.mlp = GPTNeoXMLP(config) + + def forward( + self, + hidden_states, + attention_mask=None, + head_mask=None, + use_cache=False, + layer_past=None, + output_attentions=False, + ): + residual = hidden_states + ln_out = self.input_layernorm(hidden_states) + attention_layer_outputs = self.attention( + ln_out, + attention_mask=attention_mask, + layer_past=layer_past, + head_mask=head_mask, + use_cache=use_cache, + output_attentions=output_attentions, + ) + attn_output = attention_layer_outputs[0] # output_attn: a, present, (attentions) + outputs = attention_layer_outputs[1:] + + mlp_output = self.mlp(self.post_attention_layernorm(hidden_states)) + hidden_states = mlp_output + attn_output + residual + + if use_cache: + outputs = (hidden_states,) + outputs + else: + outputs = (hidden_states,) + outputs[1:] + + return outputs # hidden_states, present, (attentions) + + +class GPTNeoXModel(GPTNeoXPreTrainedModel): + def __init__(self, config): + super().__init__(config) + self.config = config + + self.embed_in = nn.Embedding(config.vocab_size, config.hidden_size) + self.layers = nn.ModuleList([GPTNeoXLayer(config) for _ in range(config.num_hidden_layers)]) + self.final_layer_norm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) + + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self): + return self.embed_in + + def set_input_embeddings(self, value): + self.embed_in = value + + def forward( + self, + input_ids=None, + attention_mask=None, + head_mask=None, + inputs_embeds=None, + past_key_values=None, + use_cache=None, + output_attentions=None, + output_hidden_states=None, + return_dict=None, + ): + r""" + past_key_values (`tuple(tuple(torch.FloatTensor))` of length `config.n_layers` with each tuple having 4 tensors of shape `(batch_size, num_heads, sequence_length - 1, embed_size_per_head)`): + Contains precomputed key and value hidden states of the attention blocks. Can be used to speed up decoding. + If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that + don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all + `decoder_input_ids` of shape `(batch_size, sequence_length)`. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see + `past_key_values`). + """ + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + use_cache = use_cache if use_cache is not None else self.config.use_cache + + if input_ids is not None and inputs_embeds is not None: + raise ValueError("You cannot specify both input_ids and inputs_embeds at the same time") + elif input_ids is not None: + input_shape = input_ids.size() + elif inputs_embeds is not None: + input_shape = inputs_embeds.size()[:-1] + else: + raise ValueError("You have to specify either input_ids or inputs_embeds") + + batch_size, seq_length = input_shape + + if past_key_values is None: + past_key_values = tuple([None] * self.config.num_hidden_layers) + + # Attention mask. + if attention_mask is not None: + assert batch_size > 0, "batch_size has to be defined and > 0" + # attention_mask = attention_mask.view(batch_size, -1) + # # We create a 3D attention mask from a 2D tensor mask. + # # Sizes are [batch_size, 1, 1, to_seq_length] + # # So we can broadcast to [batch_size, num_heads, from_seq_length, to_seq_length] + # # this attention mask is more simple than the triangular masking of causal attention + # # used in OpenAI GPT, we just need to prepare the broadcast dimension here. + # attention_mask = attention_mask[:, None, None, :] + + # # Since attention_mask is 1.0 for positions we want to attend and 0.0 for + # # masked positions, this operation will create a tensor which is 0.0 for + # # positions we want to attend and -10000.0 for masked positions. + # # Since we are adding it to the raw scores before the softmax, this is + # # effectively the same as removing these entirely. + attention_mask = attention_mask.to(dtype=self.dtype) # fp16 compatibility + attention_mask = (1.0 - attention_mask) * -10000.0 + + # Prepare head mask if needed + # 1.0 in head_mask indicate we keep the head + # attention_probs has shape bsz x n_heads x N x N + # input head_mask has shape [num_heads] or [num_hidden_layers x num_heads] + # and head_mask is converted to shape [num_hidden_layers x batch x num_heads x seq_length x seq_length] + head_mask = self.get_head_mask(head_mask, self.config.num_hidden_layers) + + if inputs_embeds is None: + inputs_embeds = self.embed_in(input_ids) + + hidden_states = inputs_embeds + + presents = () if use_cache else None + all_attentions = () if output_attentions else None + all_hidden_states = () if output_hidden_states else None + for i, (layer, layer_past) in enumerate(zip(self.layers, past_key_values)): + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + outputs = layer( + hidden_states, + attention_mask=attention_mask, + head_mask=head_mask[i], + layer_past=layer_past, + use_cache=use_cache, + output_attentions=output_attentions, + ) + hidden_states = outputs[0] + if use_cache is True: + presents = presents + (outputs[1],) + if output_attentions: + all_attentions = all_attentions + (outputs[2 if use_cache else 1],) + + hidden_states = self.final_layer_norm(hidden_states) + # Add last hidden state + if output_hidden_states: + all_hidden_states = all_hidden_states + (hidden_states,) + + if not return_dict: + return tuple(v for v in [hidden_states, presents, all_hidden_states, all_attentions] if v is not None) + + return BaseModelOutputWithPast( + last_hidden_state=hidden_states, + past_key_values=presents, + hidden_states=all_hidden_states, + attentions=all_attentions, + ) + + +class GPTNeoXForCausalLM(GPTNeoXPreTrainedModel, GenerationMixin): + + _keys_to_ignore_on_load_missing = [r"position_ids", r"predictions.decoder.bias"] + + def __init__(self, config): + super().__init__(config) + + self.gpt_neox = GPTNeoXModel(config) + self.embed_out = nn.Linear(config.hidden_size, config.vocab_size, bias=False) + + # Initialize weights and apply final processing + self.post_init() + + def get_output_embeddings(self): + return self.embed_out + + def set_output_embeddings(self, new_embeddings): + self.embed_out = new_embeddings + + def forward( + self, + input_ids=None, + attention_mask=None, + inputs_embeds=None, + head_mask=None, + past_key_values=None, + labels=None, + use_cache=None, + output_attentions=None, + output_hidden_states=None, + return_dict=None, + ): + r""" + past_key_values (`tuple(tuple(torch.FloatTensor))`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`): + Tuple of `tuple(torch.FloatTensor)` of length `config.n_layers`, with each tuple having 2 tensors of shape + `(batch_size, num_heads, sequence_length, embed_size_per_head)`) and 2 additional tensors of shape + `(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)`. The two additional tensors are + only required when the model is used as a decoder in a Sequence to Sequence model. + + Contains pre-computed hidden-states (key and values in the self-attention blocks that can be used (see + `past_key_values` input) to speed up sequential decoding. + + If `past_key_values` are used, the user can optionally input only the last `decoder_input_ids` (those that + don't have their past key value states given to this model) of shape `(batch_size, 1)` instead of all + `decoder_input_ids` of shape `(batch_size, sequence_length)`. + labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*): + Labels for computing the left-to-right language modeling loss (next word prediction). Indices should be in + `[-100, 0, ..., config.vocab_size]` (see `input_ids` docstring) Tokens with indices set to `-100` are + ignored (masked), the loss is only computed for the tokens with labels n `[0, ..., config.vocab_size]`. + use_cache (`bool`, *optional*): + If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see + `past_key_values`). + + Returns: + + Example: + + ```python + >>> from transformers import GPTNeoXTokenizer, GPTNeoXForCausalLM, GPTNeoXConfig + >>> import torch + + >>> tokenizer = GPTNeoXTokenizer.from_pretrained("gpt-neox-20b") + >>> config = GPTNeoXConfig.from_pretrained("gpt-neox-20b") + >>> config.is_decoder = True + >>> model = GPTNeoXForCausalLM.from_pretrained("gpt-neox-20b", config=config) + + >>> inputs = tokenizer("Hello, my dog is cute", return_tensors="pt") + >>> outputs = model(**inputs) + + >>> prediction_logits = outputs.logits + ```""" + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + outputs = self.gpt_neox( + input_ids, + attention_mask=attention_mask, + head_mask=head_mask, + inputs_embeds=inputs_embeds, + past_key_values=past_key_values, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict, + ) + + hidden_states = outputs[0] + lm_logits = self.embed_out(hidden_states) + + lm_loss = None + if labels is not None: + # we are doing next-token prediction; shift prediction scores and input ids by one + shift_logits = lm_logits[:, :-1, :].contiguous() + labels = labels[:, 1:].contiguous() + loss_fct = CrossEntropyLoss() + lm_loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), labels.view(-1)) + + if not return_dict: + output = (lm_logits,) + outputs[1:] + return ((lm_loss,) + output) if lm_loss is not None else output + + return CausalLMOutputWithPast( + loss=lm_loss, + logits=lm_logits, + past_key_values=outputs.past_key_values, + hidden_states=outputs.hidden_states, + attentions=outputs.attentions, + ) + + def prepare_inputs_for_generation(self, input_ids, past=None, attention_mask=None, **model_kwargs): + input_shape = input_ids.shape + + # if model is used as a decoder in encoder-decoder model, the decoder attention mask is created on the fly + if attention_mask is None: + attention_mask = input_ids.new_ones(input_shape) + + # cut decoder_input_ids if past is used + if past is not None: + input_ids = input_ids[:, -1:] + + return {"input_ids": input_ids, "attention_mask": attention_mask, "past_key_values": past} + + def _reorder_cache(self, past, beam_idx): + reordered_past = () + for layer_past in past: + reordered_past += ( + tuple(past_state.index_select(0, beam_idx) for past_state in layer_past[:2]) + layer_past[2:], + ) + return reordered_past \ No newline at end of file diff --git a/source/official-code/mini/process.ipynb b/source/official-code/mini/process.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..1b404bf2e474f8ea34fb0fd7a03544fc9a7394dd --- /dev/null +++ b/source/official-code/mini/process.ipynb @@ -0,0 +1,1207 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 54, + "id": "396b6c0b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "e19b2074", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib as mpl\n", + "import matplotlib.pyplot as plt\n", + "from collections import defaultdict" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "b7e6f31c", + "metadata": {}, + "outputs": [], + "source": [ + "mpl.rcParams.update({\n", + " \"figure.figsize\": (12, 8),\n", + " \"axes.spines.top\": False,\n", + " \"axes.spines.right\": False,\n", + " \"axes.xmargin\": 0,\n", + " \"axes.grid\": True,\n", + " \"grid.linestyle\": \"--\",\n", + " \"grid.linewidth\": 1,\n", + " \"axes.titlesize\": 30,\n", + " \"axes.labelsize\": 24,\n", + " \"xtick.labelsize\": 20,\n", + " \"ytick.labelsize\": 20,\n", + " \"font.size\": 22,\n", + " \"lines.linewidth\": 4,\n", + " \"lines.markersize\": 10,\n", + " \"legend.frameon\": True,\n", + "})" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "209bf100", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05\\ndecode-recall;len 10;char: 1.0\\ndecode-recall;len 20;char: 0.9857954382896423\\ndecode-recall;len 30;char: 0.9481189250946045\\ndecode-recall;len 40;char: 0.7765020728111267\\ndecode-recall;len 50;char: 0.796113908290863\\ndecode-recall;len 60;char: 0.6873488426208496\\ndecode-recall;len 70;char: 0.6524432301521301\\ndecode-recall;len 80;char: 0.7316319942474365\\ndecode-recall;len 90;char: 0.6348778605461121\\ndecode-recall;len 100;char: 0.6419381499290466\\ndecode-recall;len 110;char: 0.6293102502822876\\ndecode-recall;len 120;char: 0.6673927307128906\\ndecode-recall;len 130;char: 0.6244180202484131\\ndecode-recall;len 140;char: 0.6385362148284912\\ndecode-recall;len 150;char: 0.6029466986656189\\ndecode-recall;len 160;char: 0.6233441829681396\\ndecode-recall;len 170;char: 0.6355259418487549\\ndecode-recall;len 180;char: 0.6281324625015259\\ndecode-recall;len 190;char: 0.5977818965911865\\n\\n',\n", + " 'Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05\\ndecode-recall;len 10;char: 0.875\\ndecode-recall;len 20;char: 0.9439484477043152\\ndecode-recall;len 30;char: 0.8522589206695557\\ndecode-recall;len 40;char: 0.7638342380523682\\ndecode-recall;len 50;char: 0.6145848035812378\\ndecode-recall;len 60;char: 0.6737411022186279\\ndecode-recall;len 70;char: 0.6180480122566223\\ndecode-recall;len 80;char: 0.5957629680633545\\ndecode-recall;len 90;char: 0.6400711536407471\\ndecode-recall;len 100;char: 0.5681103467941284\\ndecode-recall;len 110;char: 0.5489718914031982\\ndecode-recall;len 120;char: 0.5904321670532227\\ndecode-recall;len 130;char: 0.5642659664154053\\ndecode-recall;len 140;char: 0.5018225908279419\\ndecode-recall;len 150;char: 0.5310848951339722\\ndecode-recall;len 160;char: 0.5528694987297058\\ndecode-recall;len 170;char: 0.5155647993087769\\ndecode-recall;len 180;char: 0.5448036789894104\\ndecode-recall;len 190;char: 0.537481427192688\\n\\n',\n", + " 'Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05\\ndecode-recall;len 10;char: 0.910714328289032\\ndecode-recall;len 20;char: 0.5321263074874878\\ndecode-recall;len 30;char: 0.3841428756713867\\ndecode-recall;len 40;char: 0.31128135323524475\\ndecode-recall;len 50;char: 0.3405989110469818\\ndecode-recall;len 60;char: 0.18453489243984222\\ndecode-recall;len 70;char: 0.20356254279613495\\ndecode-recall;len 80;char: 0.23162470757961273\\ndecode-recall;len 90;char: 0.23364615440368652\\ndecode-recall;len 100;char: 0.20161408185958862\\ndecode-recall;len 110;char: 0.23725572228431702\\ndecode-recall;len 120;char: 0.22324803471565247\\ndecode-recall;len 130;char: 0.21468089520931244\\ndecode-recall;len 140;char: 0.250710129737854\\ndecode-recall;len 150;char: 0.2188185155391693\\ndecode-recall;len 160;char: 0.18580637872219086\\ndecode-recall;len 170;char: 0.1895160973072052\\ndecode-recall;len 180;char: 0.18975919485092163\\ndecode-recall;len 190;char: 0.2002156376838684\\n\\n',\n", + " 'Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05\\ndecode-recall;len 10;char: 1.0\\ndecode-recall;len 20;char: 0.9368686676025391\\ndecode-recall;len 30;char: 0.9324681758880615\\ndecode-recall;len 40;char: 0.8760429620742798\\ndecode-recall;len 50;char: 0.780876874923706\\ndecode-recall;len 60;char: 0.7402374744415283\\ndecode-recall;len 70;char: 0.7588195204734802\\ndecode-recall;len 80;char: 0.6482858657836914\\ndecode-recall;len 90;char: 0.6974760293960571\\ndecode-recall;len 100;char: 0.6427843570709229\\ndecode-recall;len 110;char: 0.6778674125671387\\ndecode-recall;len 120;char: 0.6715697050094604\\ndecode-recall;len 130;char: 0.6406140327453613\\ndecode-recall;len 140;char: 0.6121763586997986\\ndecode-recall;len 150;char: 0.6731640100479126\\ndecode-recall;len 160;char: 0.6342432498931885\\ndecode-recall;len 170;char: 0.6039286851882935\\ndecode-recall;len 180;char: 0.6037278175354004\\ndecode-recall;len 190;char: 0.6191205978393555\\n\\n',\n", + " 'Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05\\ndecode-recall;len 10;char: 1.0\\ndecode-recall;len 20;char: 0.8653464317321777\\ndecode-recall;len 30;char: 0.8569021224975586\\ndecode-recall;len 40;char: 0.6747907996177673\\ndecode-recall;len 50;char: 0.6369307637214661\\ndecode-recall;len 60;char: 0.6595216989517212\\ndecode-recall;len 70;char: 0.597706139087677\\ndecode-recall;len 80;char: 0.584731936454773\\ndecode-recall;len 90;char: 0.5202387571334839\\ndecode-recall;len 100;char: 0.5755473375320435\\ndecode-recall;len 110;char: 0.5467240810394287\\ndecode-recall;len 120;char: 0.5068301558494568\\ndecode-recall;len 130;char: 0.5194376707077026\\ndecode-recall;len 140;char: 0.4990939497947693\\ndecode-recall;len 150;char: 0.4856300354003906\\ndecode-recall;len 160;char: 0.5057741403579712\\ndecode-recall;len 170;char: 0.49308228492736816\\ndecode-recall;len 180;char: 0.49896031618118286\\ndecode-recall;len 190;char: 0.48009490966796875\\n\\n',\n", + " 'Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05\\ndecode-recall;len 10;char: 0.5151785612106323\\ndecode-recall;len 20;char: 0.3633786141872406\\ndecode-recall;len 30;char: 0.19089525938034058\\ndecode-recall;len 40;char: 0.24046018719673157\\ndecode-recall;len 50;char: 0.17974647879600525\\ndecode-recall;len 60;char: 0.1619855761528015\\ndecode-recall;len 70;char: 0.1960638016462326\\ndecode-recall;len 80;char: 0.17676866054534912\\ndecode-recall;len 90;char: 0.11740681529045105\\ndecode-recall;len 100;char: 0.18084287643432617\\ndecode-recall;len 110;char: 0.14377854764461517\\ndecode-recall;len 120;char: 0.14048482477664948\\ndecode-recall;len 130;char: 0.15155741572380066\\ndecode-recall;len 140;char: 0.1640227735042572\\ndecode-recall;len 150;char: 0.18128477036952972\\ndecode-recall;len 160;char: 0.1636839359998703\\ndecode-recall;len 170;char: 0.1648077517747879\\ndecode-recall;len 180;char: 0.13127514719963074\\ndecode-recall;len 190;char: 0.14913657307624817\\n\\n',\n", + " 'Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05\\ndecode-recall;len 10;char: 0.9833333492279053\\ndecode-recall;len 20;char: 0.9907407760620117\\ndecode-recall;len 30;char: 0.9125736951828003\\ndecode-recall;len 40;char: 0.837796688079834\\ndecode-recall;len 50;char: 0.7298097610473633\\ndecode-recall;len 60;char: 0.6895817518234253\\ndecode-recall;len 70;char: 0.7496417760848999\\ndecode-recall;len 80;char: 0.690218448638916\\ndecode-recall;len 90;char: 0.6497451066970825\\ndecode-recall;len 100;char: 0.7143478393554688\\ndecode-recall;len 110;char: 0.6805140972137451\\ndecode-recall;len 120;char: 0.6837023496627808\\ndecode-recall;len 130;char: 0.6361327171325684\\ndecode-recall;len 140;char: 0.6612393260002136\\ndecode-recall;len 150;char: 0.673805832862854\\ndecode-recall;len 160;char: 0.6565903425216675\\ndecode-recall;len 170;char: 0.6483817100524902\\ndecode-recall;len 180;char: 0.6064517498016357\\ndecode-recall;len 190;char: 0.6653451919555664\\n\\n',\n", + " 'Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05\\ndecode-recall;len 10;char: 1.0\\ndecode-recall;len 20;char: 0.9790014028549194\\ndecode-recall;len 30;char: 0.8815261721611023\\ndecode-recall;len 40;char: 0.7676401138305664\\ndecode-recall;len 50;char: 0.6928615570068359\\ndecode-recall;len 60;char: 0.6106398105621338\\ndecode-recall;len 70;char: 0.60155189037323\\ndecode-recall;len 80;char: 0.6039615869522095\\ndecode-recall;len 90;char: 0.5773861408233643\\ndecode-recall;len 100;char: 0.5501826405525208\\ndecode-recall;len 110;char: 0.5592620372772217\\ndecode-recall;len 120;char: 0.5793810486793518\\ndecode-recall;len 130;char: 0.5466092824935913\\ndecode-recall;len 140;char: 0.5182152390480042\\ndecode-recall;len 150;char: 0.5674537420272827\\ndecode-recall;len 160;char: 0.5849040150642395\\ndecode-recall;len 170;char: 0.5325218439102173\\ndecode-recall;len 180;char: 0.5232909917831421\\ndecode-recall;len 190;char: 0.5468701124191284\\n\\n',\n", + " 'Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05\\ndecode-recall;len 10;char: 0.6445932984352112\\ndecode-recall;len 20;char: 0.26206502318382263\\ndecode-recall;len 30;char: 0.13306067883968353\\ndecode-recall;len 40;char: 0.16347606480121613\\ndecode-recall;len 50;char: 0.08464866876602173\\ndecode-recall;len 60;char: 0.1681709736585617\\ndecode-recall;len 70;char: 0.13883300125598907\\ndecode-recall;len 80;char: 0.11378434300422668\\ndecode-recall;len 90;char: 0.15620052814483643\\ndecode-recall;len 100;char: 0.1216215044260025\\ndecode-recall;len 110;char: 0.11574685573577881\\ndecode-recall;len 120;char: 0.11983730643987656\\ndecode-recall;len 130;char: 0.18693558871746063\\ndecode-recall;len 140;char: 0.13272088766098022\\ndecode-recall;len 150;char: 0.13606171309947968\\ndecode-recall;len 160;char: 0.12678101658821106\\ndecode-recall;len 170;char: 0.1420741230249405\\ndecode-recall;len 180;char: 0.13525152206420898\\ndecode-recall;len 190;char: 0.1258775293827057\\n\\n',\n", + " 'Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1\\ndecode-recall;len 10;char: 1.0\\ndecode-recall;len 20;char: 1.0\\ndecode-recall;len 30;char: 0.9217180609703064\\ndecode-recall;len 40;char: 0.7814647555351257\\ndecode-recall;len 50;char: 0.8292438983917236\\ndecode-recall;len 60;char: 0.8081774711608887\\ndecode-recall;len 70;char: 0.7150792479515076\\ndecode-recall;len 80;char: 0.700808048248291\\ndecode-recall;len 90;char: 0.6555769443511963\\ndecode-recall;len 100;char: 0.6683669090270996\\ndecode-recall;len 110;char: 0.6523910164833069\\ndecode-recall;len 120;char: 0.668860912322998\\ndecode-recall;len 130;char: 0.6432649493217468\\ndecode-recall;len 140;char: 0.6964160203933716\\ndecode-recall;len 150;char: 0.656005859375\\ndecode-recall;len 160;char: 0.6167884469032288\\ndecode-recall;len 170;char: 0.6398297548294067\\ndecode-recall;len 180;char: 0.6134594678878784\\ndecode-recall;len 190;char: 0.6359747648239136\\n\\n',\n", + " 'Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1\\ndecode-recall;len 10;char: 0.9895833730697632\\ndecode-recall;len 20;char: 0.9704861640930176\\ndecode-recall;len 30;char: 0.8048054575920105\\ndecode-recall;len 40;char: 0.727003812789917\\ndecode-recall;len 50;char: 0.715934157371521\\ndecode-recall;len 60;char: 0.6678845882415771\\ndecode-recall;len 70;char: 0.6253581047058105\\ndecode-recall;len 80;char: 0.6059417724609375\\ndecode-recall;len 90;char: 0.5578285455703735\\ndecode-recall;len 100;char: 0.5921376347541809\\ndecode-recall;len 110;char: 0.5457515716552734\\ndecode-recall;len 120;char: 0.5313324928283691\\ndecode-recall;len 130;char: 0.5504909753799438\\ndecode-recall;len 140;char: 0.5474668741226196\\ndecode-recall;len 150;char: 0.5508555173873901\\ndecode-recall;len 160;char: 0.5437184572219849\\ndecode-recall;len 170;char: 0.5312497019767761\\ndecode-recall;len 180;char: 0.53267502784729\\ndecode-recall;len 190;char: 0.499489963054657\\n\\n',\n", + " 'Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1\\ndecode-recall;len 10;char: 0.8309027552604675\\ndecode-recall;len 20;char: 0.6597898602485657\\ndecode-recall;len 30;char: 0.4754653871059418\\ndecode-recall;len 40;char: 0.3933604657649994\\ndecode-recall;len 50;char: 0.2903965711593628\\ndecode-recall;len 60;char: 0.3299208879470825\\ndecode-recall;len 70;char: 0.3081795573234558\\ndecode-recall;len 80;char: 0.2332407832145691\\ndecode-recall;len 90;char: 0.27579227089881897\\ndecode-recall;len 100;char: 0.2261103242635727\\ndecode-recall;len 110;char: 0.2369527816772461\\ndecode-recall;len 120;char: 0.2198472023010254\\ndecode-recall;len 130;char: 0.1887332648038864\\ndecode-recall;len 140;char: 0.18380998075008392\\ndecode-recall;len 150;char: 0.21492618322372437\\ndecode-recall;len 160;char: 0.1744849681854248\\ndecode-recall;len 170;char: 0.19141410291194916\\ndecode-recall;len 180;char: 0.20667152106761932\\ndecode-recall;len 190;char: 0.20098501443862915\\n\\n',\n", + " 'Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1\\ndecode-recall;len 10;char: 0.9652777910232544\\ndecode-recall;len 20;char: 0.981249988079071\\ndecode-recall;len 30;char: 0.9162896871566772\\ndecode-recall;len 40;char: 0.7519625425338745\\ndecode-recall;len 50;char: 0.8022653460502625\\ndecode-recall;len 60;char: 0.790768563747406\\ndecode-recall;len 70;char: 0.7219197154045105\\ndecode-recall;len 80;char: 0.6751448512077332\\ndecode-recall;len 90;char: 0.6798254251480103\\ndecode-recall;len 100;char: 0.6709798574447632\\ndecode-recall;len 110;char: 0.6322716474533081\\ndecode-recall;len 120;char: 0.626436710357666\\ndecode-recall;len 130;char: 0.6425319314002991\\ndecode-recall;len 140;char: 0.6389114856719971\\ndecode-recall;len 150;char: 0.6401407718658447\\ndecode-recall;len 160;char: 0.6016178131103516\\ndecode-recall;len 170;char: 0.6156097650527954\\ndecode-recall;len 180;char: 0.6029258966445923\\ndecode-recall;len 190;char: 0.6638368964195251\\n\\n',\n", + " 'Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1\\ndecode-recall;len 10;char: 0.9479166865348816\\ndecode-recall;len 20;char: 0.9586805105209351\\ndecode-recall;len 30;char: 0.8248851299285889\\ndecode-recall;len 40;char: 0.6634087562561035\\ndecode-recall;len 50;char: 0.6766670942306519\\ndecode-recall;len 60;char: 0.6676832437515259\\ndecode-recall;len 70;char: 0.6043927669525146\\ndecode-recall;len 80;char: 0.5803816318511963\\ndecode-recall;len 90;char: 0.5978839993476868\\ndecode-recall;len 100;char: 0.5621085166931152\\ndecode-recall;len 110;char: 0.577261209487915\\ndecode-recall;len 120;char: 0.5378620028495789\\ndecode-recall;len 130;char: 0.5598148107528687\\ndecode-recall;len 140;char: 0.5237993001937866\\ndecode-recall;len 150;char: 0.5540605783462524\\ndecode-recall;len 160;char: 0.5714029669761658\\ndecode-recall;len 170;char: 0.5268584489822388\\ndecode-recall;len 180;char: 0.5293018221855164\\ndecode-recall;len 190;char: 0.4874608516693115\\n\\n',\n", + " 'Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1\\ndecode-recall;len 10;char: 0.8606481552124023\\ndecode-recall;len 20;char: 0.4876323342323303\\ndecode-recall;len 30;char: 0.407672643661499\\ndecode-recall;len 40;char: 0.23081311583518982\\ndecode-recall;len 50;char: 0.25273433327674866\\ndecode-recall;len 60;char: 0.2124183624982834\\ndecode-recall;len 70;char: 0.2456597536802292\\ndecode-recall;len 80;char: 0.23393362760543823\\ndecode-recall;len 90;char: 0.20789653062820435\\ndecode-recall;len 100;char: 0.18973487615585327\\ndecode-recall;len 110;char: 0.18320545554161072\\ndecode-recall;len 120;char: 0.20405608415603638\\ndecode-recall;len 130;char: 0.17950224876403809\\ndecode-recall;len 140;char: 0.1628461480140686\\ndecode-recall;len 150;char: 0.18458835780620575\\ndecode-recall;len 160;char: 0.1703064888715744\\ndecode-recall;len 170;char: 0.17916201055049896\\ndecode-recall;len 180;char: 0.18377724289894104\\ndecode-recall;len 190;char: 0.19723348319530487\\n\\n',\n", + " 'Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1\\ndecode-recall;len 10;char: 1.0\\ndecode-recall;len 20;char: 1.0\\ndecode-recall;len 30;char: 0.9200409650802612\\ndecode-recall;len 40;char: 0.8174037337303162\\ndecode-recall;len 50;char: 0.7946717739105225\\ndecode-recall;len 60;char: 0.6955892443656921\\ndecode-recall;len 70;char: 0.7173835635185242\\ndecode-recall;len 80;char: 0.6786613464355469\\ndecode-recall;len 90;char: 0.6786417365074158\\ndecode-recall;len 100;char: 0.7212467193603516\\ndecode-recall;len 110;char: 0.6584938168525696\\ndecode-recall;len 120;char: 0.7142788767814636\\ndecode-recall;len 130;char: 0.68595290184021\\ndecode-recall;len 140;char: 0.6359708309173584\\ndecode-recall;len 150;char: 0.6521986126899719\\ndecode-recall;len 160;char: 0.59839928150177\\ndecode-recall;len 170;char: 0.6368191242218018\\ndecode-recall;len 180;char: 0.6323474645614624\\ndecode-recall;len 190;char: 0.5929872989654541\\n\\n',\n", + " 'Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1\\ndecode-recall;len 10;char: 0.8854166865348816\\ndecode-recall;len 20;char: 0.9483300447463989\\ndecode-recall;len 30;char: 0.74361252784729\\ndecode-recall;len 40;char: 0.8036803007125854\\ndecode-recall;len 50;char: 0.7149695158004761\\ndecode-recall;len 60;char: 0.7061573266983032\\ndecode-recall;len 70;char: 0.6213844418525696\\ndecode-recall;len 80;char: 0.594988226890564\\ndecode-recall;len 90;char: 0.5939693450927734\\ndecode-recall;len 100;char: 0.5246989727020264\\ndecode-recall;len 110;char: 0.5396659970283508\\ndecode-recall;len 120;char: 0.5293501615524292\\ndecode-recall;len 130;char: 0.589676022529602\\ndecode-recall;len 140;char: 0.5268396139144897\\ndecode-recall;len 150;char: 0.5243655443191528\\ndecode-recall;len 160;char: 0.5512975454330444\\ndecode-recall;len 170;char: 0.5084272623062134\\ndecode-recall;len 180;char: 0.5307620763778687\\ndecode-recall;len 190;char: 0.5406655073165894\\n\\n',\n", + " 'Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1\\ndecode-recall;len 10;char: 0.7333333492279053\\ndecode-recall;len 20;char: 0.5159493088722229\\ndecode-recall;len 30;char: 0.40928971767425537\\ndecode-recall;len 40;char: 0.3225904107093811\\ndecode-recall;len 50;char: 0.21182428300380707\\ndecode-recall;len 60;char: 0.23797929286956787\\ndecode-recall;len 70;char: 0.2094007134437561\\ndecode-recall;len 80;char: 0.18894490599632263\\ndecode-recall;len 90;char: 0.1546379178762436\\ndecode-recall;len 100;char: 0.1969231367111206\\ndecode-recall;len 110;char: 0.2052767276763916\\ndecode-recall;len 120;char: 0.19327673316001892\\ndecode-recall;len 130;char: 0.20958077907562256\\ndecode-recall;len 140;char: 0.1812768280506134\\ndecode-recall;len 150;char: 0.1685815453529358\\ndecode-recall;len 160;char: 0.18553470075130463\\ndecode-recall;len 170;char: 0.14581021666526794\\ndecode-recall;len 180;char: 0.15813803672790527\\ndecode-recall;len 190;char: 0.17005085945129395\\n\\n',\n", + " 'Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3\\ndecode-recall;len 10;char: 1.0\\ndecode-recall;len 20;char: 0.9962121844291687\\ndecode-recall;len 30;char: 0.9483031034469604\\ndecode-recall;len 40;char: 0.7927637100219727\\ndecode-recall;len 50;char: 0.7113593816757202\\ndecode-recall;len 60;char: 0.6992713809013367\\ndecode-recall;len 70;char: 0.7210916876792908\\ndecode-recall;len 80;char: 0.684494137763977\\ndecode-recall;len 90;char: 0.6997036933898926\\ndecode-recall;len 100;char: 0.6593635082244873\\ndecode-recall;len 110;char: 0.7142068147659302\\ndecode-recall;len 120;char: 0.6633939743041992\\ndecode-recall;len 130;char: 0.676382303237915\\ndecode-recall;len 140;char: 0.6387130618095398\\ndecode-recall;len 150;char: 0.6648999452590942\\ndecode-recall;len 160;char: 0.6112599968910217\\ndecode-recall;len 170;char: 0.6367149949073792\\ndecode-recall;len 180;char: 0.6693970561027527\\ndecode-recall;len 190;char: 0.6376804113388062\\n\\n',\n", + " 'Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3\\ndecode-recall;len 10;char: 0.9895833730697632\\ndecode-recall;len 20;char: 0.9583333730697632\\ndecode-recall;len 30;char: 0.7054013013839722\\ndecode-recall;len 40;char: 0.800169825553894\\ndecode-recall;len 50;char: 0.7180034518241882\\ndecode-recall;len 60;char: 0.7011809349060059\\ndecode-recall;len 70;char: 0.6263866424560547\\ndecode-recall;len 80;char: 0.5373177528381348\\ndecode-recall;len 90;char: 0.6004931330680847\\ndecode-recall;len 100;char: 0.5566891431808472\\ndecode-recall;len 110;char: 0.5606188774108887\\ndecode-recall;len 120;char: 0.6099505424499512\\ndecode-recall;len 130;char: 0.5857155323028564\\ndecode-recall;len 140;char: 0.5696146488189697\\ndecode-recall;len 150;char: 0.5226142406463623\\ndecode-recall;len 160;char: 0.5239015817642212\\ndecode-recall;len 170;char: 0.5927441120147705\\ndecode-recall;len 180;char: 0.5137729048728943\\ndecode-recall;len 190;char: 0.5398105382919312\\n\\n',\n", + " 'Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3\\ndecode-recall;len 10;char: 0.4097222089767456\\ndecode-recall;len 20;char: 0.3065972328186035\\ndecode-recall;len 30;char: 0.1969144344329834\\ndecode-recall;len 40;char: 0.2215590924024582\\ndecode-recall;len 50;char: 0.258955180644989\\ndecode-recall;len 60;char: 0.15078984200954437\\ndecode-recall;len 70;char: 0.15743999183177948\\ndecode-recall;len 80;char: 0.13903594017028809\\ndecode-recall;len 90;char: 0.16143184900283813\\ndecode-recall;len 100;char: 0.14665789902210236\\ndecode-recall;len 110;char: 0.1501779854297638\\ndecode-recall;len 120;char: 0.1528782844543457\\ndecode-recall;len 130;char: 0.12792648375034332\\ndecode-recall;len 140;char: 0.10070514678955078\\ndecode-recall;len 150;char: 0.09400784224271774\\ndecode-recall;len 160;char: 0.10724282264709473\\ndecode-recall;len 170;char: 0.13807566463947296\\ndecode-recall;len 180;char: 0.11700095236301422\\ndecode-recall;len 190;char: 0.16223937273025513\\n\\n',\n", + " 'Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3\\ndecode-recall;len 10;char: 1.0\\ndecode-recall;len 20;char: 0.9705128073692322\\ndecode-recall;len 30;char: 0.8862413763999939\\ndecode-recall;len 40;char: 0.8353152275085449\\ndecode-recall;len 50;char: 0.7849656939506531\\ndecode-recall;len 60;char: 0.7596746683120728\\ndecode-recall;len 70;char: 0.6956859827041626\\ndecode-recall;len 80;char: 0.72464919090271\\ndecode-recall;len 90;char: 0.6862657070159912\\ndecode-recall;len 100;char: 0.7093038558959961\\ndecode-recall;len 110;char: 0.6661278009414673\\ndecode-recall;len 120;char: 0.6615803837776184\\ndecode-recall;len 130;char: 0.6578917503356934\\ndecode-recall;len 140;char: 0.6366438865661621\\ndecode-recall;len 150;char: 0.6713576316833496\\ndecode-recall;len 160;char: 0.6468802094459534\\ndecode-recall;len 170;char: 0.6611111164093018\\ndecode-recall;len 180;char: 0.6123043298721313\\ndecode-recall;len 190;char: 0.6361969709396362\\n\\n',\n", + " 'Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3\\ndecode-recall;len 10;char: 0.9583333730697632\\ndecode-recall;len 20;char: 0.9350041151046753\\ndecode-recall;len 30;char: 0.7596926689147949\\ndecode-recall;len 40;char: 0.6846498847007751\\ndecode-recall;len 50;char: 0.6490609645843506\\ndecode-recall;len 60;char: 0.5914053916931152\\ndecode-recall;len 70;char: 0.6078483462333679\\ndecode-recall;len 80;char: 0.5980240106582642\\ndecode-recall;len 90;char: 0.533582866191864\\ndecode-recall;len 100;char: 0.5657905340194702\\ndecode-recall;len 110;char: 0.5308245420455933\\ndecode-recall;len 120;char: 0.5290818810462952\\ndecode-recall;len 130;char: 0.5218561887741089\\ndecode-recall;len 140;char: 0.5369037389755249\\ndecode-recall;len 150;char: 0.5021572709083557\\ndecode-recall;len 160;char: 0.5418306589126587\\ndecode-recall;len 170;char: 0.503264844417572\\ndecode-recall;len 180;char: 0.4660513997077942\\ndecode-recall;len 190;char: 0.4854733943939209\\n\\n',\n", + " 'Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3\\ndecode-recall;len 10;char: 0.5777778029441833\\ndecode-recall;len 20;char: 0.32144904136657715\\ndecode-recall;len 30;char: 0.1648125797510147\\ndecode-recall;len 40;char: 0.2603747546672821\\ndecode-recall;len 50;char: 0.18265698850154877\\ndecode-recall;len 60;char: 0.11478369683027267\\ndecode-recall;len 70;char: 0.13806948065757751\\ndecode-recall;len 80;char: 0.157049298286438\\ndecode-recall;len 90;char: 0.11408312618732452\\ndecode-recall;len 100;char: 0.1836479753255844\\ndecode-recall;len 110;char: 0.1709464192390442\\ndecode-recall;len 120;char: 0.12919360399246216\\ndecode-recall;len 130;char: 0.13401979207992554\\ndecode-recall;len 140;char: 0.14907331764698029\\ndecode-recall;len 150;char: 0.14018231630325317\\ndecode-recall;len 160;char: 0.13247399032115936\\ndecode-recall;len 170;char: 0.14502611756324768\\ndecode-recall;len 180;char: 0.1263023316860199\\ndecode-recall;len 190;char: 0.12185510993003845\\n\\n',\n", + " 'Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3\\ndecode-recall;len 10;char: 1.0\\ndecode-recall;len 20;char: 1.0\\ndecode-recall;len 30;char: 0.9098358154296875\\ndecode-recall;len 40;char: 0.8470461368560791\\ndecode-recall;len 50;char: 0.7550141215324402\\ndecode-recall;len 60;char: 0.7235478162765503\\ndecode-recall;len 70;char: 0.7354334592819214\\ndecode-recall;len 80;char: 0.7553390264511108\\ndecode-recall;len 90;char: 0.6860110759735107\\ndecode-recall;len 100;char: 0.698352575302124\\ndecode-recall;len 110;char: 0.6746302843093872\\ndecode-recall;len 120;char: 0.6510419845581055\\ndecode-recall;len 130;char: 0.5795254111289978\\ndecode-recall;len 140;char: 0.6862127780914307\\ndecode-recall;len 150;char: 0.6315653324127197\\ndecode-recall;len 160;char: 0.6042711734771729\\ndecode-recall;len 170;char: 0.630547046661377\\ndecode-recall;len 180;char: 0.6219390630722046\\ndecode-recall;len 190;char: 0.6223297715187073\\n\\n',\n", + " 'Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3\\ndecode-recall;len 10;char: 0.9791666865348816\\ndecode-recall;len 20;char: 0.9270833730697632\\ndecode-recall;len 30;char: 0.8622963428497314\\ndecode-recall;len 40;char: 0.7192779779434204\\ndecode-recall;len 50;char: 0.65834641456604\\ndecode-recall;len 60;char: 0.6229159832000732\\ndecode-recall;len 70;char: 0.6384058594703674\\ndecode-recall;len 80;char: 0.5783934593200684\\ndecode-recall;len 90;char: 0.5784435272216797\\ndecode-recall;len 100;char: 0.5801171064376831\\ndecode-recall;len 110;char: 0.5514482855796814\\ndecode-recall;len 120;char: 0.5796990394592285\\ndecode-recall;len 130;char: 0.517315149307251\\ndecode-recall;len 140;char: 0.554282546043396\\ndecode-recall;len 150;char: 0.5096626877784729\\ndecode-recall;len 160;char: 0.5261738300323486\\ndecode-recall;len 170;char: 0.5212709903717041\\ndecode-recall;len 180;char: 0.5303078889846802\\ndecode-recall;len 190;char: 0.5213631391525269\\n\\n',\n", + " 'Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3\\ndecode-recall;len 10;char: 0.5\\ndecode-recall;len 20;char: 0.2925475239753723\\ndecode-recall;len 30;char: 0.1601872444152832\\ndecode-recall;len 40;char: 0.274406373500824\\ndecode-recall;len 50;char: 0.19165778160095215\\ndecode-recall;len 60;char: 0.15049193799495697\\ndecode-recall;len 70;char: 0.14343251287937164\\ndecode-recall;len 80;char: 0.1461275815963745\\ndecode-recall;len 90;char: 0.15721768140792847\\ndecode-recall;len 100;char: 0.11800568550825119\\ndecode-recall;len 110;char: 0.14269575476646423\\ndecode-recall;len 120;char: 0.1634974628686905\\ndecode-recall;len 130;char: 0.11433973908424377\\ndecode-recall;len 140;char: 0.14333099126815796\\ndecode-recall;len 150;char: 0.10384787619113922\\ndecode-recall;len 160;char: 0.10776695609092712\\ndecode-recall;len 170;char: 0.13306473195552826\\ndecode-recall;len 180;char: 0.11789155006408691\\ndecode-recall;len 190;char: 0.16224274039268494\\n\\n',\n", + " 'Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5\\ndecode-recall;len 10;char: 1.0\\ndecode-recall;len 20;char: 1.0\\ndecode-recall;len 30;char: 0.9045926332473755\\ndecode-recall;len 40;char: 0.8130718469619751\\ndecode-recall;len 50;char: 0.7771099805831909\\ndecode-recall;len 60;char: 0.8022445440292358\\ndecode-recall;len 70;char: 0.7636990547180176\\ndecode-recall;len 80;char: 0.7147483825683594\\ndecode-recall;len 90;char: 0.7001899480819702\\ndecode-recall;len 100;char: 0.6655428409576416\\ndecode-recall;len 110;char: 0.6252335906028748\\ndecode-recall;len 120;char: 0.642221212387085\\ndecode-recall;len 130;char: 0.6473919153213501\\ndecode-recall;len 140;char: 0.6328368186950684\\ndecode-recall;len 150;char: 0.6140373945236206\\ndecode-recall;len 160;char: 0.654166042804718\\ndecode-recall;len 170;char: 0.6095566749572754\\ndecode-recall;len 180;char: 0.5964545607566833\\ndecode-recall;len 190;char: 0.6258598566055298\\n\\n',\n", + " 'Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5\\ndecode-recall;len 10;char: 1.0\\ndecode-recall;len 20;char: 0.949999988079071\\ndecode-recall;len 30;char: 0.7640753984451294\\ndecode-recall;len 40;char: 0.6788992881774902\\ndecode-recall;len 50;char: 0.6574134230613708\\ndecode-recall;len 60;char: 0.5918235182762146\\ndecode-recall;len 70;char: 0.6556671857833862\\ndecode-recall;len 80;char: 0.5720927715301514\\ndecode-recall;len 90;char: 0.5384969115257263\\ndecode-recall;len 100;char: 0.5430512428283691\\ndecode-recall;len 110;char: 0.539043664932251\\ndecode-recall;len 120;char: 0.5352115035057068\\ndecode-recall;len 130;char: 0.5157890319824219\\ndecode-recall;len 140;char: 0.557007372379303\\ndecode-recall;len 150;char: 0.5414659380912781\\ndecode-recall;len 160;char: 0.5246944427490234\\ndecode-recall;len 170;char: 0.5265904664993286\\ndecode-recall;len 180;char: 0.5376178622245789\\ndecode-recall;len 190;char: 0.5249012112617493\\n\\n',\n", + " 'Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5\\ndecode-recall;len 10;char: 0.5972222089767456\\ndecode-recall;len 20;char: 0.47816774249076843\\ndecode-recall;len 30;char: 0.3070889115333557\\ndecode-recall;len 40;char: 0.23640280961990356\\ndecode-recall;len 50;char: 0.24993687868118286\\ndecode-recall;len 60;char: 0.2082376331090927\\ndecode-recall;len 70;char: 0.1850498616695404\\ndecode-recall;len 80;char: 0.19205129146575928\\ndecode-recall;len 90;char: 0.2117798924446106\\ndecode-recall;len 100;char: 0.1623145192861557\\ndecode-recall;len 110;char: 0.1848982870578766\\ndecode-recall;len 120;char: 0.18205218017101288\\ndecode-recall;len 130;char: 0.17577427625656128\\ndecode-recall;len 140;char: 0.15659110248088837\\ndecode-recall;len 150;char: 0.19223271310329437\\ndecode-recall;len 160;char: 0.16401630640029907\\ndecode-recall;len 170;char: 0.16221728920936584\\ndecode-recall;len 180;char: 0.165327787399292\\ndecode-recall;len 190;char: 0.1596059799194336\\n\\n',\n", + " 'Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5\\ndecode-recall;len 10;char: 1.0\\ndecode-recall;len 20;char: 0.9875000715255737\\ndecode-recall;len 30;char: 0.9320878386497498\\ndecode-recall;len 40;char: 0.8661415576934814\\ndecode-recall;len 50;char: 0.8285512924194336\\ndecode-recall;len 60;char: 0.6968681812286377\\ndecode-recall;len 70;char: 0.7414862513542175\\ndecode-recall;len 80;char: 0.7045133113861084\\ndecode-recall;len 90;char: 0.6419541835784912\\ndecode-recall;len 100;char: 0.6874333620071411\\ndecode-recall;len 110;char: 0.6642571687698364\\ndecode-recall;len 120;char: 0.6813787221908569\\ndecode-recall;len 130;char: 0.5995894074440002\\ndecode-recall;len 140;char: 0.6280650496482849\\ndecode-recall;len 150;char: 0.6578435301780701\\ndecode-recall;len 160;char: 0.6265575885772705\\ndecode-recall;len 170;char: 0.6349090337753296\\ndecode-recall;len 180;char: 0.5940706133842468\\ndecode-recall;len 190;char: 0.599079430103302\\n\\n',\n", + " 'Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5\\ndecode-recall;len 10;char: 0.9791666865348816\\ndecode-recall;len 20;char: 0.8820571303367615\\ndecode-recall;len 30;char: 0.7985374927520752\\ndecode-recall;len 40;char: 0.7640130519866943\\ndecode-recall;len 50;char: 0.6871943473815918\\ndecode-recall;len 60;char: 0.6044930219650269\\ndecode-recall;len 70;char: 0.6068270206451416\\ndecode-recall;len 80;char: 0.5612156987190247\\ndecode-recall;len 90;char: 0.5952797532081604\\ndecode-recall;len 100;char: 0.5987547636032104\\ndecode-recall;len 110;char: 0.5537230968475342\\ndecode-recall;len 120;char: 0.5262174606323242\\ndecode-recall;len 130;char: 0.554735541343689\\ndecode-recall;len 140;char: 0.5011629462242126\\ndecode-recall;len 150;char: 0.5295344591140747\\ndecode-recall;len 160;char: 0.5330309271812439\\ndecode-recall;len 170;char: 0.5053300857543945\\ndecode-recall;len 180;char: 0.5313178300857544\\ndecode-recall;len 190;char: 0.5224146842956543\\n\\n',\n", + " 'Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5\\ndecode-recall;len 10;char: 0.8736111521720886\\ndecode-recall;len 20;char: 0.5962514281272888\\ndecode-recall;len 30;char: 0.3832492232322693\\ndecode-recall;len 40;char: 0.2854436933994293\\ndecode-recall;len 50;char: 0.28662049770355225\\ndecode-recall;len 60;char: 0.26320356130599976\\ndecode-recall;len 70;char: 0.27538901567459106\\ndecode-recall;len 80;char: 0.22230809926986694\\ndecode-recall;len 90;char: 0.2164570689201355\\ndecode-recall;len 100;char: 0.19796155393123627\\ndecode-recall;len 110;char: 0.19086354970932007\\ndecode-recall;len 120;char: 0.18824295699596405\\ndecode-recall;len 130;char: 0.22032558917999268\\ndecode-recall;len 140;char: 0.21519076824188232\\ndecode-recall;len 150;char: 0.2081698179244995\\ndecode-recall;len 160;char: 0.1918410360813141\\ndecode-recall;len 170;char: 0.2025018185377121\\ndecode-recall;len 180;char: 0.20757195353507996\\ndecode-recall;len 190;char: 0.1966937780380249\\n\\n',\n", + " 'Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5\\ndecode-recall;len 10;char: 1.0\\ndecode-recall;len 20;char: 1.0\\ndecode-recall;len 30;char: 0.8814672827720642\\ndecode-recall;len 40;char: 0.7867913246154785\\ndecode-recall;len 50;char: 0.6895325183868408\\ndecode-recall;len 60;char: 0.7046443819999695\\ndecode-recall;len 70;char: 0.6666063070297241\\ndecode-recall;len 80;char: 0.6720694899559021\\ndecode-recall;len 90;char: 0.6484885215759277\\ndecode-recall;len 100;char: 0.6371711492538452\\ndecode-recall;len 110;char: 0.691048264503479\\ndecode-recall;len 120;char: 0.6754792928695679\\ndecode-recall;len 130;char: 0.7069361209869385\\ndecode-recall;len 140;char: 0.612276554107666\\ndecode-recall;len 150;char: 0.6244098544120789\\ndecode-recall;len 160;char: 0.623556911945343\\ndecode-recall;len 170;char: 0.607271671295166\\ndecode-recall;len 180;char: 0.5816407203674316\\ndecode-recall;len 190;char: 0.650244951248169\\n\\n',\n", + " 'Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5\\ndecode-recall;len 10;char: 0.9583333730697632\\ndecode-recall;len 20;char: 0.9430555701255798\\ndecode-recall;len 30;char: 0.799754798412323\\ndecode-recall;len 40;char: 0.7385859489440918\\ndecode-recall;len 50;char: 0.5975728034973145\\ndecode-recall;len 60;char: 0.6370731592178345\\ndecode-recall;len 70;char: 0.5629557371139526\\ndecode-recall;len 80;char: 0.5503141283988953\\ndecode-recall;len 90;char: 0.5398728847503662\\ndecode-recall;len 100;char: 0.6032266616821289\\ndecode-recall;len 110;char: 0.5620935559272766\\ndecode-recall;len 120;char: 0.5564090609550476\\ndecode-recall;len 130;char: 0.5372361540794373\\ndecode-recall;len 140;char: 0.5545965433120728\\ndecode-recall;len 150;char: 0.4901084303855896\\ndecode-recall;len 160;char: 0.4898289144039154\\ndecode-recall;len 170;char: 0.4893970191478729\\ndecode-recall;len 180;char: 0.5164146423339844\\ndecode-recall;len 190;char: 0.49241623282432556\\n\\n',\n", + " 'Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5\\ndecode-recall;len 10;char: 0.6145833730697632\\ndecode-recall;len 20;char: 0.504405677318573\\ndecode-recall;len 30;char: 0.36866551637649536\\ndecode-recall;len 40;char: 0.2529973089694977\\ndecode-recall;len 50;char: 0.27220985293388367\\ndecode-recall;len 60;char: 0.25746679306030273\\ndecode-recall;len 70;char: 0.18574902415275574\\ndecode-recall;len 80;char: 0.17569009959697723\\ndecode-recall;len 90;char: 0.19749584794044495\\ndecode-recall;len 100;char: 0.18552538752555847\\ndecode-recall;len 110;char: 0.21581940352916718\\ndecode-recall;len 120;char: 0.169195756316185\\ndecode-recall;len 130;char: 0.1408652663230896\\ndecode-recall;len 140;char: 0.1793697476387024\\ndecode-recall;len 150;char: 0.1429600715637207\\ndecode-recall;len 160;char: 0.1649928092956543\\ndecode-recall;len 170;char: 0.18172171711921692\\ndecode-recall;len 180;char: 0.1577184498310089\\ndecode-recall;len 190;char: 0.15508031845092773\\n\\n',\n", + " 'Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8\\ndecode-recall;len 10;char: 1.0\\ndecode-recall;len 20;char: 0.9965277910232544\\ndecode-recall;len 30;char: 0.8744034171104431\\ndecode-recall;len 40;char: 0.892302393913269\\ndecode-recall;len 50;char: 0.8458890914916992\\ndecode-recall;len 60;char: 0.6796607971191406\\ndecode-recall;len 70;char: 0.7121025323867798\\ndecode-recall;len 80;char: 0.6559513807296753\\ndecode-recall;len 90;char: 0.668297529220581\\ndecode-recall;len 100;char: 0.6114368438720703\\ndecode-recall;len 110;char: 0.6307101249694824\\ndecode-recall;len 120;char: 0.625738263130188\\ndecode-recall;len 130;char: 0.6555134057998657\\ndecode-recall;len 140;char: 0.6295982599258423\\ndecode-recall;len 150;char: 0.6141443252563477\\ndecode-recall;len 160;char: 0.6056334972381592\\ndecode-recall;len 170;char: 0.6398143768310547\\ndecode-recall;len 180;char: 0.6461613774299622\\ndecode-recall;len 190;char: 0.6155368685722351\\n\\n',\n", + " 'Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8\\ndecode-recall;len 10;char: 0.946428656578064\\ndecode-recall;len 20;char: 0.9666666984558105\\ndecode-recall;len 30;char: 0.812795877456665\\ndecode-recall;len 40;char: 0.7272658348083496\\ndecode-recall;len 50;char: 0.7734569907188416\\ndecode-recall;len 60;char: 0.6438063383102417\\ndecode-recall;len 70;char: 0.6429185271263123\\ndecode-recall;len 80;char: 0.6431255340576172\\ndecode-recall;len 90;char: 0.629410982131958\\ndecode-recall;len 100;char: 0.5589584708213806\\ndecode-recall;len 110;char: 0.5648320913314819\\ndecode-recall;len 120;char: 0.5713593363761902\\ndecode-recall;len 130;char: 0.5484595894813538\\ndecode-recall;len 140;char: 0.5651421546936035\\ndecode-recall;len 150;char: 0.5002756118774414\\ndecode-recall;len 160;char: 0.5755627155303955\\ndecode-recall;len 170;char: 0.525777280330658\\ndecode-recall;len 180;char: 0.5337649583816528\\ndecode-recall;len 190;char: 0.5347590446472168\\n\\n',\n", + " 'Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8\\ndecode-recall;len 10;char: 0.6472222208976746\\ndecode-recall;len 20;char: 0.17733585834503174\\ndecode-recall;len 30;char: 0.15024355053901672\\ndecode-recall;len 40;char: 0.12981149554252625\\ndecode-recall;len 50;char: 0.14535856246948242\\ndecode-recall;len 60;char: 0.10574382543563843\\ndecode-recall;len 70;char: 0.13277830183506012\\ndecode-recall;len 80;char: 0.1709493100643158\\ndecode-recall;len 90;char: 0.14430084824562073\\ndecode-recall;len 100;char: 0.13733571767807007\\ndecode-recall;len 110;char: 0.13067194819450378\\ndecode-recall;len 120;char: 0.12612396478652954\\ndecode-recall;len 130;char: 0.15916596353054047\\ndecode-recall;len 140;char: 0.10852956771850586\\ndecode-recall;len 150;char: 0.13743522763252258\\ndecode-recall;len 160;char: 0.13055333495140076\\ndecode-recall;len 170;char: 0.12731705605983734\\ndecode-recall;len 180;char: 0.1334172487258911\\ndecode-recall;len 190;char: 0.11929592490196228\\n\\n',\n", + " 'Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8\\ndecode-recall;len 10;char: 1.0\\ndecode-recall;len 20;char: 0.97510826587677\\ndecode-recall;len 30;char: 0.8888447284698486\\ndecode-recall;len 40;char: 0.7950708270072937\\ndecode-recall;len 50;char: 0.7576751112937927\\ndecode-recall;len 60;char: 0.7591592669487\\ndecode-recall;len 70;char: 0.7362310290336609\\ndecode-recall;len 80;char: 0.6810853481292725\\ndecode-recall;len 90;char: 0.6979155540466309\\ndecode-recall;len 100;char: 0.6948668956756592\\ndecode-recall;len 110;char: 0.6781880259513855\\ndecode-recall;len 120;char: 0.6494674682617188\\ndecode-recall;len 130;char: 0.6358701586723328\\ndecode-recall;len 140;char: 0.5861114263534546\\ndecode-recall;len 150;char: 0.6532060503959656\\ndecode-recall;len 160;char: 0.6281630396842957\\ndecode-recall;len 170;char: 0.6246960163116455\\ndecode-recall;len 180;char: 0.6560219526290894\\ndecode-recall;len 190;char: 0.5849053859710693\\n\\n',\n", + " 'Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8\\ndecode-recall;len 10;char: 1.0\\ndecode-recall;len 20;char: 0.8706597685813904\\ndecode-recall;len 30;char: 0.8302647471427917\\ndecode-recall;len 40;char: 0.7332509756088257\\ndecode-recall;len 50;char: 0.7211450934410095\\ndecode-recall;len 60;char: 0.6725532412528992\\ndecode-recall;len 70;char: 0.6496734023094177\\ndecode-recall;len 80;char: 0.6570849418640137\\ndecode-recall;len 90;char: 0.5663783550262451\\ndecode-recall;len 100;char: 0.5443885326385498\\ndecode-recall;len 110;char: 0.6117117404937744\\ndecode-recall;len 120;char: 0.5574617981910706\\ndecode-recall;len 130;char: 0.5803755521774292\\ndecode-recall;len 140;char: 0.5589125156402588\\ndecode-recall;len 150;char: 0.571621298789978\\ndecode-recall;len 160;char: 0.5357110500335693\\ndecode-recall;len 170;char: 0.5527786612510681\\ndecode-recall;len 180;char: 0.5401501655578613\\ndecode-recall;len 190;char: 0.5411460995674133\\n\\n',\n", + " 'Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8\\ndecode-recall;len 10;char: 0.8250662088394165\\ndecode-recall;len 20;char: 0.314718633890152\\ndecode-recall;len 30;char: 0.24322953820228577\\ndecode-recall;len 40;char: 0.23458358645439148\\ndecode-recall;len 50;char: 0.257424920797348\\ndecode-recall;len 60;char: 0.2542210817337036\\ndecode-recall;len 70;char: 0.20907756686210632\\ndecode-recall;len 80;char: 0.1668921709060669\\ndecode-recall;len 90;char: 0.1717085838317871\\ndecode-recall;len 100;char: 0.16767609119415283\\ndecode-recall;len 110;char: 0.2213563174009323\\ndecode-recall;len 120;char: 0.16341714560985565\\ndecode-recall;len 130;char: 0.17582783102989197\\ndecode-recall;len 140;char: 0.17379474639892578\\ndecode-recall;len 150;char: 0.19769546389579773\\ndecode-recall;len 160;char: 0.21922682225704193\\ndecode-recall;len 170;char: 0.15277665853500366\\ndecode-recall;len 180;char: 0.17930924892425537\\ndecode-recall;len 190;char: 0.1718364655971527\\n\\n',\n", + " 'Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8\\ndecode-recall;len 10;char: 1.0\\ndecode-recall;len 20;char: 0.9722222685813904\\ndecode-recall;len 30;char: 0.9049786329269409\\ndecode-recall;len 40;char: 0.8412396907806396\\ndecode-recall;len 50;char: 0.7837128043174744\\ndecode-recall;len 60;char: 0.7445123195648193\\ndecode-recall;len 70;char: 0.7115182280540466\\ndecode-recall;len 80;char: 0.7370562553405762\\ndecode-recall;len 90;char: 0.7084958553314209\\ndecode-recall;len 100;char: 0.662047266960144\\ndecode-recall;len 110;char: 0.6808463931083679\\ndecode-recall;len 120;char: 0.6663265228271484\\ndecode-recall;len 130;char: 0.6435560584068298\\ndecode-recall;len 140;char: 0.6624194383621216\\ndecode-recall;len 150;char: 0.6649219393730164\\ndecode-recall;len 160;char: 0.6445488929748535\\ndecode-recall;len 170;char: 0.6558689475059509\\ndecode-recall;len 180;char: 0.631706178188324\\ndecode-recall;len 190;char: 0.6108523607254028\\n\\n',\n", + " 'Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8\\ndecode-recall;len 10;char: 0.9895833730697632\\ndecode-recall;len 20;char: 0.9177605509757996\\ndecode-recall;len 30;char: 0.8371918201446533\\ndecode-recall;len 40;char: 0.6355012059211731\\ndecode-recall;len 50;char: 0.5851731300354004\\ndecode-recall;len 60;char: 0.6799207925796509\\ndecode-recall;len 70;char: 0.6331335306167603\\ndecode-recall;len 80;char: 0.5052379369735718\\ndecode-recall;len 90;char: 0.5903139114379883\\ndecode-recall;len 100;char: 0.5759361982345581\\ndecode-recall;len 110;char: 0.5188043713569641\\ndecode-recall;len 120;char: 0.5321590900421143\\ndecode-recall;len 130;char: 0.5647989511489868\\ndecode-recall;len 140;char: 0.49294513463974\\ndecode-recall;len 150;char: 0.4947853684425354\\ndecode-recall;len 160;char: 0.5370632410049438\\ndecode-recall;len 170;char: 0.5189842581748962\\ndecode-recall;len 180;char: 0.5230935215950012\\ndecode-recall;len 190;char: 0.5167936086654663\\n\\n',\n", + " 'Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8\\ndecode-recall;len 10;char: 0.5244544148445129\\ndecode-recall;len 20;char: 0.32447728514671326\\ndecode-recall;len 30;char: 0.14320236444473267\\ndecode-recall;len 40;char: 0.18181370198726654\\ndecode-recall;len 50;char: 0.1522757112979889\\ndecode-recall;len 60;char: 0.07384894788265228\\ndecode-recall;len 70;char: 0.08663350343704224\\ndecode-recall;len 80;char: 0.1137092113494873\\ndecode-recall;len 90;char: 0.12919378280639648\\ndecode-recall;len 100;char: 0.07504618167877197\\ndecode-recall;len 110;char: 0.13911916315555573\\ndecode-recall;len 120;char: 0.13796061277389526\\ndecode-recall;len 130;char: 0.12146781384944916\\ndecode-recall;len 140;char: 0.1203484833240509\\ndecode-recall;len 150;char: 0.13195346295833588\\ndecode-recall;len 160;char: 0.11298161745071411\\ndecode-recall;len 170;char: 0.09581118822097778\\ndecode-recall;len 180;char: 0.11131709814071655\\ndecode-recall;len 190;char: 0.11690189689397812\\n\\n']" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# exp1 : Basic result with p=eval_p=0.2\n", + "\n", + "with open('results/exp2.txt', 'r') as infile:\n", + " lines = infile.read()\n", + "\n", + "itrs = lines.split(\"\")[1:]\n", + "itrs" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "8b524120", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "defaultdict(()>,\n", + " {'0.2': defaultdict(..()>,\n", + " {'0.05': defaultdict(....()>,\n", + " {'hybrid': defaultdict(list,\n", + " {10: [1.0,\n", + " 1.0,\n", + " 0.9833333492279053],\n", + " 20: [0.9857954382896423,\n", + " 0.9368686676025391,\n", + " 0.9907407760620117],\n", + " 30: [0.9481189250946045,\n", + " 0.9324681758880615,\n", + " 0.9125736951828003],\n", + " 40: [0.7765020728111267,\n", + " 0.8760429620742798,\n", + " 0.837796688079834],\n", + " 50: [0.796113908290863,\n", + " 0.780876874923706,\n", + " 0.7298097610473633],\n", + " 60: [0.6873488426208496,\n", + " 0.7402374744415283,\n", + " 0.6895817518234253],\n", + " 70: [0.6524432301521301,\n", + " 0.7588195204734802,\n", + " 0.7496417760848999],\n", + " 80: [0.7316319942474365,\n", + " 0.6482858657836914,\n", + " 0.690218448638916],\n", + " 90: [0.6348778605461121,\n", + " 0.6974760293960571,\n", + " 0.6497451066970825],\n", + " 100: [0.6419381499290466,\n", + " 0.6427843570709229,\n", + " 0.7143478393554688],\n", + " 110: [0.6293102502822876,\n", + " 0.6778674125671387,\n", + " 0.6805140972137451],\n", + " 120: [0.6673927307128906,\n", + " 0.6715697050094604,\n", + " 0.6837023496627808],\n", + " 130: [0.6244180202484131,\n", + " 0.6406140327453613,\n", + " 0.6361327171325684],\n", + " 140: [0.6385362148284912,\n", + " 0.6121763586997986,\n", + " 0.6612393260002136],\n", + " 150: [0.6029466986656189,\n", + " 0.6731640100479126,\n", + " 0.673805832862854],\n", + " 160: [0.6233441829681396,\n", + " 0.6342432498931885,\n", + " 0.6565903425216675],\n", + " 170: [0.6355259418487549,\n", + " 0.6039286851882935,\n", + " 0.6483817100524902],\n", + " 180: [0.6281324625015259,\n", + " 0.6037278175354004,\n", + " 0.6064517498016357],\n", + " 190: [0.5977818965911865,\n", + " 0.6191205978393555,\n", + " 0.6653451919555664]}),\n", + " 'T_rope': defaultdict(list,\n", + " {10: [0.875, 1.0, 1.0],\n", + " 20: [0.9439484477043152,\n", + " 0.8653464317321777,\n", + " 0.9790014028549194],\n", + " 30: [0.8522589206695557,\n", + " 0.8569021224975586,\n", + " 0.8815261721611023],\n", + " 40: [0.7638342380523682,\n", + " 0.6747907996177673,\n", + " 0.7676401138305664],\n", + " 50: [0.6145848035812378,\n", + " 0.6369307637214661,\n", + " 0.6928615570068359],\n", + " 60: [0.6737411022186279,\n", + " 0.6595216989517212,\n", + " 0.6106398105621338],\n", + " 70: [0.6180480122566223,\n", + " 0.597706139087677,\n", + " 0.60155189037323],\n", + " 80: [0.5957629680633545,\n", + " 0.584731936454773,\n", + " 0.6039615869522095],\n", + " 90: [0.6400711536407471,\n", + " 0.5202387571334839,\n", + " 0.5773861408233643],\n", + " 100: [0.5681103467941284,\n", + " 0.5755473375320435,\n", + " 0.5501826405525208],\n", + " 110: [0.5489718914031982,\n", + " 0.5467240810394287,\n", + " 0.5592620372772217],\n", + " 120: [0.5904321670532227,\n", + " 0.5068301558494568,\n", + " 0.5793810486793518],\n", + " 130: [0.5642659664154053,\n", + " 0.5194376707077026,\n", + " 0.5466092824935913],\n", + " 140: [0.5018225908279419,\n", + " 0.4990939497947693,\n", + " 0.5182152390480042],\n", + " 150: [0.5310848951339722,\n", + " 0.4856300354003906,\n", + " 0.5674537420272827],\n", + " 160: [0.5528694987297058,\n", + " 0.5057741403579712,\n", + " 0.5849040150642395],\n", + " 170: [0.5155647993087769,\n", + " 0.49308228492736816,\n", + " 0.5325218439102173],\n", + " 180: [0.5448036789894104,\n", + " 0.49896031618118286,\n", + " 0.5232909917831421],\n", + " 190: [0.537481427192688,\n", + " 0.48009490966796875,\n", + " 0.5468701124191284]}),\n", + " 'mamba': defaultdict(list,\n", + " {10: [0.910714328289032,\n", + " 0.5151785612106323,\n", + " 0.6445932984352112],\n", + " 20: [0.5321263074874878,\n", + " 0.3633786141872406,\n", + " 0.26206502318382263],\n", + " 30: [0.3841428756713867,\n", + " 0.19089525938034058,\n", + " 0.13306067883968353],\n", + " 40: [0.31128135323524475,\n", + " 0.24046018719673157,\n", + " 0.16347606480121613],\n", + " 50: [0.3405989110469818,\n", + " 0.17974647879600525,\n", + " 0.08464866876602173],\n", + " 60: [0.18453489243984222,\n", + " 0.1619855761528015,\n", + " 0.1681709736585617],\n", + " 70: [0.20356254279613495,\n", + " 0.1960638016462326,\n", + " 0.13883300125598907],\n", + " 80: [0.23162470757961273,\n", + " 0.17676866054534912,\n", + " 0.11378434300422668],\n", + " 90: [0.23364615440368652,\n", + " 0.11740681529045105,\n", + " 0.15620052814483643],\n", + " 100: [0.20161408185958862,\n", + " 0.18084287643432617,\n", + " 0.1216215044260025],\n", + " 110: [0.23725572228431702,\n", + " 0.14377854764461517,\n", + " 0.11574685573577881],\n", + " 120: [0.22324803471565247,\n", + " 0.14048482477664948,\n", + " 0.11983730643987656],\n", + " 130: [0.21468089520931244,\n", + " 0.15155741572380066,\n", + " 0.18693558871746063],\n", + " 140: [0.250710129737854,\n", + " 0.1640227735042572,\n", + " 0.13272088766098022],\n", + " 150: [0.2188185155391693,\n", + " 0.18128477036952972,\n", + " 0.13606171309947968],\n", + " 160: [0.18580637872219086,\n", + " 0.1636839359998703,\n", + " 0.12678101658821106],\n", + " 170: [0.1895160973072052,\n", + " 0.1648077517747879,\n", + " 0.1420741230249405],\n", + " 180: [0.18975919485092163,\n", + " 0.13127514719963074,\n", + " 0.13525152206420898],\n", + " 190: [0.2002156376838684,\n", + " 0.14913657307624817,\n", + " 0.1258775293827057]})}),\n", + " '0.1': defaultdict(....()>,\n", + " {'hybrid': defaultdict(list,\n", + " {10: [1.0,\n", + " 0.9652777910232544,\n", + " 1.0],\n", + " 20: [1.0,\n", + " 0.981249988079071,\n", + " 1.0],\n", + " 30: [0.9217180609703064,\n", + " 0.9162896871566772,\n", + " 0.9200409650802612],\n", + " 40: [0.7814647555351257,\n", + " 0.7519625425338745,\n", + " 0.8174037337303162],\n", + " 50: [0.8292438983917236,\n", + " 0.8022653460502625,\n", + " 0.7946717739105225],\n", + " 60: [0.8081774711608887,\n", + " 0.790768563747406,\n", + " 0.6955892443656921],\n", + " 70: [0.7150792479515076,\n", + " 0.7219197154045105,\n", + " 0.7173835635185242],\n", + " 80: [0.700808048248291,\n", + " 0.6751448512077332,\n", + " 0.6786613464355469],\n", + " 90: [0.6555769443511963,\n", + " 0.6798254251480103,\n", + " 0.6786417365074158],\n", + " 100: [0.6683669090270996,\n", + " 0.6709798574447632,\n", + " 0.7212467193603516],\n", + " 110: [0.6523910164833069,\n", + " 0.6322716474533081,\n", + " 0.6584938168525696],\n", + " 120: [0.668860912322998,\n", + " 0.626436710357666,\n", + " 0.7142788767814636],\n", + " 130: [0.6432649493217468,\n", + " 0.6425319314002991,\n", + " 0.68595290184021],\n", + " 140: [0.6964160203933716,\n", + " 0.6389114856719971,\n", + " 0.6359708309173584],\n", + " 150: [0.656005859375,\n", + " 0.6401407718658447,\n", + " 0.6521986126899719],\n", + " 160: [0.6167884469032288,\n", + " 0.6016178131103516,\n", + " 0.59839928150177],\n", + " 170: [0.6398297548294067,\n", + " 0.6156097650527954,\n", + " 0.6368191242218018],\n", + " 180: [0.6134594678878784,\n", + " 0.6029258966445923,\n", + " 0.6323474645614624],\n", + " 190: [0.6359747648239136,\n", + " 0.6638368964195251,\n", + " 0.5929872989654541]}),\n", + " 'T_rope': defaultdict(list,\n", + " {10: [0.9895833730697632,\n", + " 0.9479166865348816,\n", + " 0.8854166865348816],\n", + " 20: [0.9704861640930176,\n", + " 0.9586805105209351,\n", + " 0.9483300447463989],\n", + " 30: [0.8048054575920105,\n", + " 0.8248851299285889,\n", + " 0.74361252784729],\n", + " 40: [0.727003812789917,\n", + " 0.6634087562561035,\n", + " 0.8036803007125854],\n", + " 50: [0.715934157371521,\n", + " 0.6766670942306519,\n", + " 0.7149695158004761],\n", + " 60: [0.6678845882415771,\n", + " 0.6676832437515259,\n", + " 0.7061573266983032],\n", + " 70: [0.6253581047058105,\n", + " 0.6043927669525146,\n", + " 0.6213844418525696],\n", + " 80: [0.6059417724609375,\n", + " 0.5803816318511963,\n", + " 0.594988226890564],\n", + " 90: [0.5578285455703735,\n", + " 0.5978839993476868,\n", + " 0.5939693450927734],\n", + " 100: [0.5921376347541809,\n", + " 0.5621085166931152,\n", + " 0.5246989727020264],\n", + " 110: [0.5457515716552734,\n", + " 0.577261209487915,\n", + " 0.5396659970283508],\n", + " 120: [0.5313324928283691,\n", + " 0.5378620028495789,\n", + " 0.5293501615524292],\n", + " 130: [0.5504909753799438,\n", + " 0.5598148107528687,\n", + " 0.589676022529602],\n", + " 140: [0.5474668741226196,\n", + " 0.5237993001937866,\n", + " 0.5268396139144897],\n", + " 150: [0.5508555173873901,\n", + " 0.5540605783462524,\n", + " 0.5243655443191528],\n", + " 160: [0.5437184572219849,\n", + " 0.5714029669761658,\n", + " 0.5512975454330444],\n", + " 170: [0.5312497019767761,\n", + " 0.5268584489822388,\n", + " 0.5084272623062134],\n", + " 180: [0.53267502784729,\n", + " 0.5293018221855164,\n", + " 0.5307620763778687],\n", + " 190: [0.499489963054657,\n", + " 0.4874608516693115,\n", + " 0.5406655073165894]}),\n", + " 'mamba': defaultdict(list,\n", + " {10: [0.8309027552604675,\n", + " 0.8606481552124023,\n", + " 0.7333333492279053],\n", + " 20: [0.6597898602485657,\n", + " 0.4876323342323303,\n", + " 0.5159493088722229],\n", + " 30: [0.4754653871059418,\n", + " 0.407672643661499,\n", + " 0.40928971767425537],\n", + " 40: [0.3933604657649994,\n", + " 0.23081311583518982,\n", + " 0.3225904107093811],\n", + " 50: [0.2903965711593628,\n", + " 0.25273433327674866,\n", + " 0.21182428300380707],\n", + " 60: [0.3299208879470825,\n", + " 0.2124183624982834,\n", + " 0.23797929286956787],\n", + " 70: [0.3081795573234558,\n", + " 0.2456597536802292,\n", + " 0.2094007134437561],\n", + " 80: [0.2332407832145691,\n", + " 0.23393362760543823,\n", + " 0.18894490599632263],\n", + " 90: [0.27579227089881897,\n", + " 0.20789653062820435,\n", + " 0.1546379178762436],\n", + " 100: [0.2261103242635727,\n", + " 0.18973487615585327,\n", + " 0.1969231367111206],\n", + " 110: [0.2369527816772461,\n", + " 0.18320545554161072,\n", + " 0.2052767276763916],\n", + " 120: [0.2198472023010254,\n", + " 0.20405608415603638,\n", + " 0.19327673316001892],\n", + " 130: [0.1887332648038864,\n", + " 0.17950224876403809,\n", + " 0.20958077907562256],\n", + " 140: [0.18380998075008392,\n", + " 0.1628461480140686,\n", + " 0.1812768280506134],\n", + " 150: [0.21492618322372437,\n", + " 0.18458835780620575,\n", + " 0.1685815453529358],\n", + " 160: [0.1744849681854248,\n", + " 0.1703064888715744,\n", + " 0.18553470075130463],\n", + " 170: [0.19141410291194916,\n", + " 0.17916201055049896,\n", + " 0.14581021666526794],\n", + " 180: [0.20667152106761932,\n", + " 0.18377724289894104,\n", + " 0.15813803672790527],\n", + " 190: [0.20098501443862915,\n", + " 0.19723348319530487,\n", + " 0.17005085945129395]})}),\n", + " '0.3': defaultdict(....()>,\n", + " {'hybrid': defaultdict(list,\n", + " {10: [1.0, 1.0, 1.0],\n", + " 20: [0.9962121844291687,\n", + " 0.9705128073692322,\n", + " 1.0],\n", + " 30: [0.9483031034469604,\n", + " 0.8862413763999939,\n", + " 0.9098358154296875],\n", + " 40: [0.7927637100219727,\n", + " 0.8353152275085449,\n", + " 0.8470461368560791],\n", + " 50: [0.7113593816757202,\n", + " 0.7849656939506531,\n", + " 0.7550141215324402],\n", + " 60: [0.6992713809013367,\n", + " 0.7596746683120728,\n", + " 0.7235478162765503],\n", + " 70: [0.7210916876792908,\n", + " 0.6956859827041626,\n", + " 0.7354334592819214],\n", + " 80: [0.684494137763977,\n", + " 0.72464919090271,\n", + " 0.7553390264511108],\n", + " 90: [0.6997036933898926,\n", + " 0.6862657070159912,\n", + " 0.6860110759735107],\n", + " 100: [0.6593635082244873,\n", + " 0.7093038558959961,\n", + " 0.698352575302124],\n", + " 110: [0.7142068147659302,\n", + " 0.6661278009414673,\n", + " 0.6746302843093872],\n", + " 120: [0.6633939743041992,\n", + " 0.6615803837776184,\n", + " 0.6510419845581055],\n", + " 130: [0.676382303237915,\n", + " 0.6578917503356934,\n", + " 0.5795254111289978],\n", + " 140: [0.6387130618095398,\n", + " 0.6366438865661621,\n", + " 0.6862127780914307],\n", + " 150: [0.6648999452590942,\n", + " 0.6713576316833496,\n", + " 0.6315653324127197],\n", + " 160: [0.6112599968910217,\n", + " 0.6468802094459534,\n", + " 0.6042711734771729],\n", + " 170: [0.6367149949073792,\n", + " 0.6611111164093018,\n", + " 0.630547046661377],\n", + " 180: [0.6693970561027527,\n", + " 0.6123043298721313,\n", + " 0.6219390630722046],\n", + " 190: [0.6376804113388062,\n", + " 0.6361969709396362,\n", + " 0.6223297715187073]}),\n", + " 'T_rope': defaultdict(list,\n", + " {10: [0.9895833730697632,\n", + " 0.9583333730697632,\n", + " 0.9791666865348816],\n", + " 20: [0.9583333730697632,\n", + " 0.9350041151046753,\n", + " 0.9270833730697632],\n", + " 30: [0.7054013013839722,\n", + " 0.7596926689147949,\n", + " 0.8622963428497314],\n", + " 40: [0.800169825553894,\n", + " 0.6846498847007751,\n", + " 0.7192779779434204],\n", + " 50: [0.7180034518241882,\n", + " 0.6490609645843506,\n", + " 0.65834641456604],\n", + " 60: [0.7011809349060059,\n", + " 0.5914053916931152,\n", + " 0.6229159832000732],\n", + " 70: [0.6263866424560547,\n", + " 0.6078483462333679,\n", + " 0.6384058594703674],\n", + " 80: [0.5373177528381348,\n", + " 0.5980240106582642,\n", + " 0.5783934593200684],\n", + " 90: [0.6004931330680847,\n", + " 0.533582866191864,\n", + " 0.5784435272216797],\n", + " 100: [0.5566891431808472,\n", + " 0.5657905340194702,\n", + " 0.5801171064376831],\n", + " 110: [0.5606188774108887,\n", + " 0.5308245420455933,\n", + " 0.5514482855796814],\n", + " 120: [0.6099505424499512,\n", + " 0.5290818810462952,\n", + " 0.5796990394592285],\n", + " 130: [0.5857155323028564,\n", + " 0.5218561887741089,\n", + " 0.517315149307251],\n", + " 140: [0.5696146488189697,\n", + " 0.5369037389755249,\n", + " 0.554282546043396],\n", + " 150: [0.5226142406463623,\n", + " 0.5021572709083557,\n", + " 0.5096626877784729],\n", + " 160: [0.5239015817642212,\n", + " 0.5418306589126587,\n", + " 0.5261738300323486],\n", + " 170: [0.5927441120147705,\n", + " 0.503264844417572,\n", + " 0.5212709903717041],\n", + " 180: [0.5137729048728943,\n", + " 0.4660513997077942,\n", + " 0.5303078889846802],\n", + " 190: [0.5398105382919312,\n", + " 0.4854733943939209,\n", + " 0.5213631391525269]}),\n", + " 'mamba': defaultdict(list,\n", + " {10: [0.4097222089767456,\n", + " 0.5777778029441833,\n", + " 0.5],\n", + " 20: [0.3065972328186035,\n", + " 0.32144904136657715,\n", + " 0.2925475239753723],\n", + " 30: [0.1969144344329834,\n", + " 0.1648125797510147,\n", + " 0.1601872444152832],\n", + " 40: [0.2215590924024582,\n", + " 0.2603747546672821,\n", + " 0.274406373500824],\n", + " 50: [0.258955180644989,\n", + " 0.18265698850154877,\n", + " 0.19165778160095215],\n", + " 60: [0.15078984200954437,\n", + " 0.11478369683027267,\n", + " 0.15049193799495697],\n", + " 70: [0.15743999183177948,\n", + " 0.13806948065757751,\n", + " 0.14343251287937164],\n", + " 80: [0.13903594017028809,\n", + " 0.157049298286438,\n", + " 0.1461275815963745],\n", + " 90: [0.16143184900283813,\n", + " 0.11408312618732452,\n", + " 0.15721768140792847],\n", + " 100: [0.14665789902210236,\n", + " 0.1836479753255844,\n", + " 0.11800568550825119],\n", + " 110: [0.1501779854297638,\n", + " 0.1709464192390442,\n", + " 0.14269575476646423],\n", + " 120: [0.1528782844543457,\n", + " 0.12919360399246216,\n", + " 0.1634974628686905],\n", + " 130: [0.12792648375034332,\n", + " 0.13401979207992554,\n", + " 0.11433973908424377],\n", + " 140: [0.10070514678955078,\n", + " 0.14907331764698029,\n", + " 0.14333099126815796],\n", + " 150: [0.09400784224271774,\n", + " 0.14018231630325317,\n", + " 0.10384787619113922],\n", + " 160: [0.10724282264709473,\n", + " 0.13247399032115936,\n", + " 0.10776695609092712],\n", + " 170: [0.13807566463947296,\n", + " 0.14502611756324768,\n", + " 0.13306473195552826],\n", + " 180: [0.11700095236301422,\n", + " 0.1263023316860199,\n", + " 0.11789155006408691],\n", + " 190: [0.16223937273025513,\n", + " 0.12185510993003845,\n", + " 0.16224274039268494]})}),\n", + " '0.5': defaultdict(....()>,\n", + " {'hybrid': defaultdict(list,\n", + " {10: [1.0, 1.0, 1.0],\n", + " 20: [1.0,\n", + " 0.9875000715255737,\n", + " 1.0],\n", + " 30: [0.9045926332473755,\n", + " 0.9320878386497498,\n", + " 0.8814672827720642],\n", + " 40: [0.8130718469619751,\n", + " 0.8661415576934814,\n", + " 0.7867913246154785],\n", + " 50: [0.7771099805831909,\n", + " 0.8285512924194336,\n", + " 0.6895325183868408],\n", + " 60: [0.8022445440292358,\n", + " 0.6968681812286377,\n", + " 0.7046443819999695],\n", + " 70: [0.7636990547180176,\n", + " 0.7414862513542175,\n", + " 0.6666063070297241],\n", + " 80: [0.7147483825683594,\n", + " 0.7045133113861084,\n", + " 0.6720694899559021],\n", + " 90: [0.7001899480819702,\n", + " 0.6419541835784912,\n", + " 0.6484885215759277],\n", + " 100: [0.6655428409576416,\n", + " 0.6874333620071411,\n", + " 0.6371711492538452],\n", + " 110: [0.6252335906028748,\n", + " 0.6642571687698364,\n", + " 0.691048264503479],\n", + " 120: [0.642221212387085,\n", + " 0.6813787221908569,\n", + " 0.6754792928695679],\n", + " 130: [0.6473919153213501,\n", + " 0.5995894074440002,\n", + " 0.7069361209869385],\n", + " 140: [0.6328368186950684,\n", + " 0.6280650496482849,\n", + " 0.612276554107666],\n", + " 150: [0.6140373945236206,\n", + " 0.6578435301780701,\n", + " 0.6244098544120789],\n", + " 160: [0.654166042804718,\n", + " 0.6265575885772705,\n", + " 0.623556911945343],\n", + " 170: [0.6095566749572754,\n", + " 0.6349090337753296,\n", + " 0.607271671295166],\n", + " 180: [0.5964545607566833,\n", + " 0.5940706133842468,\n", + " 0.5816407203674316],\n", + " 190: [0.6258598566055298,\n", + " 0.599079430103302,\n", + " 0.650244951248169]}),\n", + " 'T_rope': defaultdict(list,\n", + " {10: [1.0,\n", + " 0.9791666865348816,\n", + " 0.9583333730697632],\n", + " 20: [0.949999988079071,\n", + " 0.8820571303367615,\n", + " 0.9430555701255798],\n", + " 30: [0.7640753984451294,\n", + " 0.7985374927520752,\n", + " 0.799754798412323],\n", + " 40: [0.6788992881774902,\n", + " 0.7640130519866943,\n", + " 0.7385859489440918],\n", + " 50: [0.6574134230613708,\n", + " 0.6871943473815918,\n", + " 0.5975728034973145],\n", + " 60: [0.5918235182762146,\n", + " 0.6044930219650269,\n", + " 0.6370731592178345],\n", + " 70: [0.6556671857833862,\n", + " 0.6068270206451416,\n", + " 0.5629557371139526],\n", + " 80: [0.5720927715301514,\n", + " 0.5612156987190247,\n", + " 0.5503141283988953],\n", + " 90: [0.5384969115257263,\n", + " 0.5952797532081604,\n", + " 0.5398728847503662],\n", + " 100: [0.5430512428283691,\n", + " 0.5987547636032104,\n", + " 0.6032266616821289],\n", + " 110: [0.539043664932251,\n", + " 0.5537230968475342,\n", + " 0.5620935559272766],\n", + " 120: [0.5352115035057068,\n", + " 0.5262174606323242,\n", + " 0.5564090609550476],\n", + " 130: [0.5157890319824219,\n", + " 0.554735541343689,\n", + " 0.5372361540794373],\n", + " 140: [0.557007372379303,\n", + " 0.5011629462242126,\n", + " 0.5545965433120728],\n", + " 150: [0.5414659380912781,\n", + " 0.5295344591140747,\n", + " 0.4901084303855896],\n", + " 160: [0.5246944427490234,\n", + " 0.5330309271812439,\n", + " 0.4898289144039154],\n", + " 170: [0.5265904664993286,\n", + " 0.5053300857543945,\n", + " 0.4893970191478729],\n", + " 180: [0.5376178622245789,\n", + " 0.5313178300857544,\n", + " 0.5164146423339844],\n", + " 190: [0.5249012112617493,\n", + " 0.5224146842956543,\n", + " 0.49241623282432556]}),\n", + " 'mamba': defaultdict(list,\n", + " {10: [0.5972222089767456,\n", + " 0.8736111521720886,\n", + " 0.6145833730697632],\n", + " 20: [0.47816774249076843,\n", + " 0.5962514281272888,\n", + " 0.504405677318573],\n", + " 30: [0.3070889115333557,\n", + " 0.3832492232322693,\n", + " 0.36866551637649536],\n", + " 40: [0.23640280961990356,\n", + " 0.2854436933994293,\n", + " 0.2529973089694977],\n", + " 50: [0.24993687868118286,\n", + " 0.28662049770355225,\n", + " 0.27220985293388367],\n", + " 60: [0.2082376331090927,\n", + " 0.26320356130599976,\n", + " 0.25746679306030273],\n", + " 70: [0.1850498616695404,\n", + " 0.27538901567459106,\n", + " 0.18574902415275574],\n", + " 80: [0.19205129146575928,\n", + " 0.22230809926986694,\n", + " 0.17569009959697723],\n", + " 90: [0.2117798924446106,\n", + " 0.2164570689201355,\n", + " 0.19749584794044495],\n", + " 100: [0.1623145192861557,\n", + " 0.19796155393123627,\n", + " 0.18552538752555847],\n", + " 110: [0.1848982870578766,\n", + " 0.19086354970932007,\n", + " 0.21581940352916718],\n", + " 120: [0.18205218017101288,\n", + " 0.18824295699596405,\n", + " 0.169195756316185],\n", + " 130: [0.17577427625656128,\n", + " 0.22032558917999268,\n", + " 0.1408652663230896],\n", + " 140: [0.15659110248088837,\n", + " 0.21519076824188232,\n", + " 0.1793697476387024],\n", + " 150: [0.19223271310329437,\n", + " 0.2081698179244995,\n", + " 0.1429600715637207],\n", + " 160: [0.16401630640029907,\n", + " 0.1918410360813141,\n", + " 0.1649928092956543],\n", + " 170: [0.16221728920936584,\n", + " 0.2025018185377121,\n", + " 0.18172171711921692],\n", + " 180: [0.165327787399292,\n", + " 0.20757195353507996,\n", + " 0.1577184498310089],\n", + " 190: [0.1596059799194336,\n", + " 0.1966937780380249,\n", + " 0.15508031845092773]})}),\n", + " '0.8': defaultdict(....()>,\n", + " {'hybrid': defaultdict(list,\n", + " {10: [1.0, 1.0, 1.0],\n", + " 20: [0.9965277910232544,\n", + " 0.97510826587677,\n", + " 0.9722222685813904],\n", + " 30: [0.8744034171104431,\n", + " 0.8888447284698486,\n", + " 0.9049786329269409],\n", + " 40: [0.892302393913269,\n", + " 0.7950708270072937,\n", + " 0.8412396907806396],\n", + " 50: [0.8458890914916992,\n", + " 0.7576751112937927,\n", + " 0.7837128043174744],\n", + " 60: [0.6796607971191406,\n", + " 0.7591592669487,\n", + " 0.7445123195648193],\n", + " 70: [0.7121025323867798,\n", + " 0.7362310290336609,\n", + " 0.7115182280540466],\n", + " 80: [0.6559513807296753,\n", + " 0.6810853481292725,\n", + " 0.7370562553405762],\n", + " 90: [0.668297529220581,\n", + " 0.6979155540466309,\n", + " 0.7084958553314209],\n", + " 100: [0.6114368438720703,\n", + " 0.6948668956756592,\n", + " 0.662047266960144],\n", + " 110: [0.6307101249694824,\n", + " 0.6781880259513855,\n", + " 0.6808463931083679],\n", + " 120: [0.625738263130188,\n", + " 0.6494674682617188,\n", + " 0.6663265228271484],\n", + " 130: [0.6555134057998657,\n", + " 0.6358701586723328,\n", + " 0.6435560584068298],\n", + " 140: [0.6295982599258423,\n", + " 0.5861114263534546,\n", + " 0.6624194383621216],\n", + " 150: [0.6141443252563477,\n", + " 0.6532060503959656,\n", + " 0.6649219393730164],\n", + " 160: [0.6056334972381592,\n", + " 0.6281630396842957,\n", + " 0.6445488929748535],\n", + " 170: [0.6398143768310547,\n", + " 0.6246960163116455,\n", + " 0.6558689475059509],\n", + " 180: [0.6461613774299622,\n", + " 0.6560219526290894,\n", + " 0.631706178188324],\n", + " 190: [0.6155368685722351,\n", + " 0.5849053859710693,\n", + " 0.6108523607254028]}),\n", + " 'T_rope': defaultdict(list,\n", + " {10: [0.946428656578064,\n", + " 1.0,\n", + " 0.9895833730697632],\n", + " 20: [0.9666666984558105,\n", + " 0.8706597685813904,\n", + " 0.9177605509757996],\n", + " 30: [0.812795877456665,\n", + " 0.8302647471427917,\n", + " 0.8371918201446533],\n", + " 40: [0.7272658348083496,\n", + " 0.7332509756088257,\n", + " 0.6355012059211731],\n", + " 50: [0.7734569907188416,\n", + " 0.7211450934410095,\n", + " 0.5851731300354004],\n", + " 60: [0.6438063383102417,\n", + " 0.6725532412528992,\n", + " 0.6799207925796509],\n", + " 70: [0.6429185271263123,\n", + " 0.6496734023094177,\n", + " 0.6331335306167603],\n", + " 80: [0.6431255340576172,\n", + " 0.6570849418640137,\n", + " 0.5052379369735718],\n", + " 90: [0.629410982131958,\n", + " 0.5663783550262451,\n", + " 0.5903139114379883],\n", + " 100: [0.5589584708213806,\n", + " 0.5443885326385498,\n", + " 0.5759361982345581],\n", + " 110: [0.5648320913314819,\n", + " 0.6117117404937744,\n", + " 0.5188043713569641],\n", + " 120: [0.5713593363761902,\n", + " 0.5574617981910706,\n", + " 0.5321590900421143],\n", + " 130: [0.5484595894813538,\n", + " 0.5803755521774292,\n", + " 0.5647989511489868],\n", + " 140: [0.5651421546936035,\n", + " 0.5589125156402588,\n", + " 0.49294513463974],\n", + " 150: [0.5002756118774414,\n", + " 0.571621298789978,\n", + " 0.4947853684425354],\n", + " 160: [0.5755627155303955,\n", + " 0.5357110500335693,\n", + " 0.5370632410049438],\n", + " 170: [0.525777280330658,\n", + " 0.5527786612510681,\n", + " 0.5189842581748962],\n", + " 180: [0.5337649583816528,\n", + " 0.5401501655578613,\n", + " 0.5230935215950012],\n", + " 190: [0.5347590446472168,\n", + " 0.5411460995674133,\n", + " 0.5167936086654663]}),\n", + " 'mamba': defaultdict(list,\n", + " {10: [0.6472222208976746,\n", + " 0.8250662088394165,\n", + " 0.5244544148445129],\n", + " 20: [0.17733585834503174,\n", + " 0.314718633890152,\n", + " 0.32447728514671326],\n", + " 30: [0.15024355053901672,\n", + " 0.24322953820228577,\n", + " 0.14320236444473267],\n", + " 40: [0.12981149554252625,\n", + " 0.23458358645439148,\n", + " 0.18181370198726654],\n", + " 50: [0.14535856246948242,\n", + " 0.257424920797348,\n", + " 0.1522757112979889],\n", + " 60: [0.10574382543563843,\n", + " 0.2542210817337036,\n", + " 0.07384894788265228],\n", + " 70: [0.13277830183506012,\n", + " 0.20907756686210632,\n", + " 0.08663350343704224],\n", + " 80: [0.1709493100643158,\n", + " 0.1668921709060669,\n", + " 0.1137092113494873],\n", + " 90: [0.14430084824562073,\n", + " 0.1717085838317871,\n", + " 0.12919378280639648],\n", + " 100: [0.13733571767807007,\n", + " 0.16767609119415283,\n", + " 0.07504618167877197],\n", + " 110: [0.13067194819450378,\n", + " 0.2213563174009323,\n", + " 0.13911916315555573],\n", + " 120: [0.12612396478652954,\n", + " 0.16341714560985565,\n", + " 0.13796061277389526],\n", + " 130: [0.15916596353054047,\n", + " 0.17582783102989197,\n", + " 0.12146781384944916],\n", + " 140: [0.10852956771850586,\n", + " 0.17379474639892578,\n", + " 0.1203484833240509],\n", + " 150: [0.13743522763252258,\n", + " 0.19769546389579773,\n", + " 0.13195346295833588],\n", + " 160: [0.13055333495140076,\n", + " 0.21922682225704193,\n", + " 0.11298161745071411],\n", + " 170: [0.12731705605983734,\n", + " 0.15277665853500366,\n", + " 0.09581118822097778],\n", + " 180: [0.1334172487258911,\n", + " 0.17930924892425537,\n", + " 0.11131709814071655],\n", + " 190: [0.11929592490196228,\n", + " 0.1718364655971527,\n", + " 0.11690189689397812]})})})})" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "accs = defaultdict(lambda: defaultdict(lambda: defaultdict(lambda: defaultdict(list))))\n", + "\n", + "for itr in itrs:\n", + " lines = itr.strip().split(\"\\n\")\n", + "\n", + " cmd = lines[0].split(\" \")[1:]\n", + " params = {k: v for (k, v) in zip(cmd[0::2], cmd[1::2])}\n", + "\n", + " run_number = int(params['--run_number'])\n", + " model = params['--model']\n", + " if '--p' not in params:\n", + " print(params)\n", + " continue\n", + " p = params['--p']\n", + " if '--eval_p' in params:\n", + " eval_p = params['--eval_p']\n", + " elif '--p' in params:\n", + " eval_p = params['--p']\n", + " else:\n", + " eval_p = 0.2\n", + "\n", + " for line in lines[1:]:\n", + " components = line.split(\";\")\n", + " len = int(components[1].split(\" \")[1])\n", + " char_acc = float(components[2].split(\" \")[1])\n", + "\n", + " accs[p][eval_p][model][len].append(char_acc)\n", + "\n", + "accs" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "ee26e866", + "metadata": {}, + "outputs": [], + "source": [ + "keys = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))\n", + "means = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))\n", + "stds = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))\n", + "mins = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))\n", + "maxs = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))\n", + "\n", + "for p in accs.keys():\n", + " for eval_p in accs[p].keys():\n", + " for model in accs[p][eval_p].keys():\n", + " keys[p][eval_p][model] = sorted(accs[p][eval_p][model].keys())\n", + " means[p][eval_p][model] = [np.mean(accs[p][eval_p][model][k]) for k in keys[p][eval_p][model]]\n", + " stds[p][eval_p][model] = [np.std(accs[p][eval_p][model][k]) for k in keys[p][eval_p][model]]\n", + " mins[p][eval_p][model] = [np.min(accs[p][eval_p][model][k]) for k in keys[p][eval_p][model]]\n", + " maxs[p][eval_p][model] = [np.max(accs[p][eval_p][model][k]) for k in keys[p][eval_p][model]]" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "4e39d9ca", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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nIkvv/wS3333Hd59991WtUu82e12ZGVl4euvv0bv3r1bvX7llVeirKwMf/nLXwDI72Xu3Lmt5tu5cyfeeOMN9/8vv/wyfvrTn7aab8yYMVixYgVGjRrlrl0RSc3NzfjnP/+JX/7yl61eKyoqwptvvolRo0ZBCIGvvvoKx48fR35+fsS3i4golrCzRSIiUp1vv/0WzzzzTMhToMLHtGnTUFhYCAA4duwYVq5c2eb7ffnllzh27BgAWf1++vTpXdr+iRMnuquPf/HFF11aV7TNnz/f/XjFihXd+t6ff/45ysvLAcjkx9NPP90qiaDQaDR45plnYDAYAAD79+/H8uXL232PRx99tFUSwZt3dfuysrKObH7EVFZWugvovXr1wuLFi4POr9Pp8PDDD7v///e//93ue9x///0BkwgK7+/l22+/DTiPd7JqypQpAZMIir59++Kuu+5qd7vCYeTIkQGTCIoRI0ZgwoQJAAAhBDZs2NAt20VEFEtYI4GIiOKSRqPBz372Mzz22GMAZOHpvPPOCzivd8HqmmuuCXoXW7Fnzx5s2LAB+/fvR11dHZqbm909zwNAXV0dANlG/PDhwygqKurKx4kYl8uFjRs3YsuWLThy5AgsFkuboxRs2bKlW7ftyy+/dD+++OKL0atXr6DzFxQU4MILL8TSpUsBACtXrsSsWbPanN9oNGL27NlB1zlmzBj341BGlugOK1asgN1uBwBcfvnlMBqN7S4zceJEJCcnw2q1YvXq1e3Of+WVVwZ9fciQITCZTGhsbER1dTXq6+tb9YvhPerCtdde2+57XnvttVi4cGG783VVe58NkHFXEkdqiTsRkZowkUBERKqzcOHCkIZva8+1117rTiS89957+Mc//tGq0NXY2Ij333/f/X9bzRoUn3zyCf74xz9i8+bNIW9HVVWV6hIJDocDTz/9NJ544gkcOXIkpGU60twkHLy/4ylTpoS0zFlnneVOJCidArZl8ODB7hoMbcnKynI/7o5q96FYt26d+/G2bdtw6623dmj5mpoaWK1WJCcnB3zdbDa3u79qNBpkZGSgsbERgPxuvBMJQghs27bN/f/EiRPb3a7+/fsjOzs74vvZyJEj251HjXEnIlITJhKIiChujRw5EqNGjcK2bdtgsViwdOnSVncjly5d6i4oKPO35YEHHsCDDz7Y4e1QRjNQi+bmZlx66aX4/PPPO7Rcd3+OyspK9+O+ffuGtEy/fv3cj9srkJrN5nbX551ocDgcIW1DpCnNcABg9erVIdUw8FdTUxM0kRAK7+/GvxZLXV2du9YEgJATaYWFhRFPJHQ07m3V0CEi6snYRwIREcU17xoG3h2/BXouWG2E5cuX+yQRJk+ejOeffx6bN29GVVUVmpqaIIRwT1OnTnXP63K5uvoxwurBBx90JxE0Gg2uvvpqLFmyBDt37nQXAL0/i8L7cXdoaGhwP26r0OvPe772Eh9t9begdkqzma4IlhQJx/fiHTsASEpKCmm5YP1VhEusxp2ISE1YI4GIiOLaz372M9xzzz1wuVz49NNPcerUKfcID9XV1fjss88AAFqtFj/72c/aXM/jjz/ufnzDDTfghRdeCFogiVYthPaSFs3Nzfj73//u/v+VV14J2OO+Ipq1KbwLlVarNaRlvOfzb7MfL7yTJX/7299w5513RnFrAvNPCNhstpCSQaHGmYiIoos1EoiIKK717t3bPQpDS0sLlixZ4n5tyZIl7mrL06dPR0FBQcB1OJ1OrFq1CoBMOCxatKjdu5qHDh0Kx+Z3uGp9e3ery8rK3HeLhw8fHjSJAAAHDx4MYSsjIycnx/041O/Tu2O87OzscG+SKuTl5bkfnzhxIopb0jaz2eyz74baD0eo8xERUXQxkUBERHHPu8d47xEavB8H61W+qqrK3d47NzcXubm5Qd/v+++/D1s777S0NPfj6urqduf/7rvvgr7u3b4+lE7nvv7663bnASJTXdx7xIS1a9eGtIz3fGPHjg37NqmBd8eFa9asieKWtE2j0fj0N/LNN9+0u8yBAwd8+sUItm4iIoouJhKIiCjuXXHFFTCZTABkwevAgQMoLy93FzpNJhOuuOKKNpf3Hg5S6aU+mGeffbaLW+zh3Xlge8MvNjU1uUcsaIv3Z7HZbEHndblceP7559vdRgA+o2GEq3O6GTNmuB8vW7YMFRUVQec/duwYPv3004DLx5NZs2ZBr5etU9euXYutW7dGeYsCmzZtmvuxd9KuLYH6MAkkEvsaERF1DBMJREQU91JTUzFnzhwAssPA//znP/jPf/7j7jxwzpw5QdvTZ2VluXt6r6urczdzCGTNmjVhTSR4333++OOPg9Z0WLBgQbs1Ifr37+9+vGrVqqBNIR5//PGQC6new+UdPXo0pGXaM3PmTBQXFwOQfTvccccdbc4rhMBtt93mLlgOGDAA559/fli2Q20KCgrcNWiEEJg7d27IQxS6XK6Q7vqHww033OB+vHr1arzzzjttznv48GH85S9/CWm9kdjXiIioY5hIICKiHsG76cIbb7wRcrMGQN7Fv/jii93/X3/99SgrK2s135IlS3DxxRfD6XSGPMpAeyZMmIABAwYAkD3hX3PNNaipqfGZx2az4e6778bjjz+OxMTEoOsbM2aMuy+Iuro6XHnllT7NHQBZaF+wYAHuvffekD/HiBEj3I+DFRg7QqvV4tFHH3X//+abb+Kmm25qNSJAfX095s+fj/fff9/93GOPPeZT+yLePPzww8jPzwcAbNu2DWeeeWbQ4TyPHDmCJ554AoMHD8bbb7/dLds4bNgwnw5M582bhzfffLPVfFu3bsX555+Purq6dvdfwHdf++ijj3yGmSQiou7BURuIiEh1li1b1qE+BpKSkvDYY48FnWfWrFnIyclBZWUldu7c6X4+JycHs2bNavc9/vCHP+DDDz9EY2MjDhw4gEmTJmHy5MkoKSmB3W7HunXrUF5eDgC46aabsGfPnqA1F0Kl0WiwaNEiXHXVVQCAFStWoLi4GOeddx6ys7Nx4sQJfP3116itrUXv3r1xyy234Pe//32b69NqtXjooYfcd4uXL1+OkpISTJkyBX379kV1dTW++uord7Li+eefx89//vN2t/OKK67AP//5TwDAP/7xD2zcuBFjx471Gfbv17/+tTspEqqrrroKX3/9NZ555hkAwAsvvIC3334b06dPR15eHioqKvDFF1/4JBfuuOMOXH755R16n2g544wzQp63d+/eWLZsmfvxRx99hIsvvhhVVVXYvXs3Zs2ahYKCApx55pnIyclBS0sLqqqqsH37dve+2d2eeuoprF+/Hj/88AMaGxvxs5/9DAsWLMCkSZOQkJCAXbt2Yd26dRBC4Cc/+QkqKyt9OjYN5KKLLoLJZEJjYyO2bNmCoUOHYtq0aUhPT3f3nzBz5kzMnDmz2z4nEVGPI4iIiFRg6tSpAkCnJrPZHNJ73Hrrra2Wve2220Lexg8//FAkJSUF3ZZf/vKXoqmpyefzrFy5MuD65s2b557n5ZdfDvreDz74YND3HTx4sNi+fbt4+eWX3c/NmzevzfXdf//9QddnNBrFc889J4QQPs8Hc8011wRdp//30LdvX/dr5eXlQdf90EMPicTExHa3+ZFHHgm6npUrV7rnnzp1atB5FaF+/lB4v39Hp759+7Za34EDB8R5550X8jry8vLEZ5991mo95eXlQd8nkFDjd/DgQXHGGWcE3a45c+YIi8UipkyZ4n5u8+bNba7z2WefFRqNps31LVy40Gf+UI5HbwsXLmxzXUREJET81vkjIiLyc91117V6rr1mDd7mzJmD7du349Zbb0VJSQmMRiNSUlJQUlKC+fPnY9WqVfjnP/8ZUvXsjlqwYAHWrl2La665BoWFhUhISEB2djYmTZqEJ598Ehs2bMDw4cNDXt/DDz+M0tJSXH311SgoKEBCQgKysrIwevRo3HPPPdi2bRt+9atfdWgb//3vf+Pf//43fvSjH6GwsNCnU7yu+sMf/oDdu3fjD3/4AyZMmIDs7Gzo9XpkZ2fjzDPPxB//+Efs3r0b9913X9jeMxb07dsXK1aswNq1a3HnnXdi3LhxyM3NhcFggMlkQmFhIaZPn467774by5cvx5EjR0KqgRNOffr0wbfffovnn38e06dPR05ODhISEtCnTx/Mnj0b7733Hj744AOkpqbi1KlT7uXS09PbXOfNN9+M0tJSXHfddSgpKUFycjJHcyAi6kYaIU73NEVEREREFCU2mw1msxkOhwPJycmwWCxx3c8FEVEs49mZiIiIiKLu/fffh8PhAACMHTuWSQQiIhXjGZqIiIiIoqqmpgZ/+MMf3P97j/ZARETqw0QCEREREUXM1VdfjXfffRdNTU0BX1+zZg3OOussHDx4EABQUFAQ0kghREQUPewjgYiIiIgipl+/fjh48CBSUlIwZswYFBcXw2QyoaamBps2bcK+ffvc8xoMBnzyySe44IILorjFRETUHiYSiIiIiChilERCe/Lz8/Haa6/h/PPP74atIiKirmAigYiIiIgipry8HB988AFKS0uxf/9+VFVVobq6GgaDAdnZ2RgzZgwuvPBCzJ07FyaTKdqbS0REIWAigYiIiIiIiIhCxs4WiYiIiIiIiChkTCQQERERERERUciYSCAiIiIiIiKikDGRQEREREREREQhYyKBiIiIiIiIiELGRAIRERERERERhYyJBCIiIiIiIiIKGRMJRERERERERBQyJhKIiIiIiIiIKGT/H2yepML7X6ybAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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8WjSpAnvWnXZsmUYP36829N5JicnY9CgQZzjFRsbi65du6Jly5a8657r169j3LhxvM+2PRkZGRgwYAAuX77MeV4kEqFRo0bo2rUrGjVqZO1CWVBQgFGjRvHK+1p+fj4GDx5snTELYK8BunTpgjZt2vDOWTk5OXjggQeg0+l8XFMvqulMBqld/v77b16G7cqVK17fr23WsWITrm7dujG7du3iZFgtFguzd+9eXnYzOjq60kzspk2bGIlEwowYMYL57rvvmKtXrzJms5lXTqfTMevWrWOaNWvG2UeHDh3cbnIYERFh/Xvw4MHMwYMHOfu0WCzM7t27eb/mjBgxggkNDWWefPJJZvv27Q6bkl29epWZP38+o1QqOfv97LPPnNaznL1f4fr168fs3LmTVyez2cycP3+eee+995iWLVvyfvlJS0tjdu/ezezevZsZMmQIZ5vr1q2zLrP9d+DAAbt1++GHHzjbEIlEzNSpU5ljx47x4nb79m1m/vz5jEwm46zz008/OX39tr9OlccrICCA+fTTT3nHPSMjg/n3339dOrbueP311zn1eOedd3hldu3axSkzZMgQt/bhyVhXVFZWxmvNBIAZM2YMs3//fsZkMnHKG41G5tixY8zrr7/ONGjQQJAtEsrfBxKJhJk7dy6vqXVJSYndX6I1Gg3TokUL5s0332QOHTrEFBcX88qYzWbm8OHDzIQJEzj7lEgkLrV8ysvL4zV1FYvFzMyZM5njx4/zzlGlpaXM/v37meeff54JDQ21exyvXbvGiEQizrnXHQMHDuTU59ChQ26t78jGjRs52505c6Zb6w8ePJiz/pEjR3hljh49yikjlUqZ+fPnO2yqmpGRwWzatImZOnUqo1Kpal2LBIbxzXFlGLZbAwCmS5cuzPvvv8+cOHHCbssFo9HI/P3338zQoUM529VqtczNmzcrrY9QWyR463v8zp071u/PRx99lLPO4sWLHX7X2nuvunuevXnzJhMYGMhZJyQkhFm+fDlTWFjIKXvo0CG7rTGXLFnidB+2x7lRo0bWvydPnsycPXuWU16v1zM//PAD4+/vz1nv4YcfdrqfqvJmi4S///6b12Jw1KhRTEJCAu8aNzc3l/noo494LTY//PBDp/uwbZFQfnxVKhXz1ltvMbdv3+aUv3PnDvPKK69wviMA17qvPfDAA7zz66uvvsrbR2pqKvPyyy9bWzDZfsfZe19ev37d+r5u164dp7yzz0DF1p7lbK8Byo+JVCplnn76aV4XzKKiImbx4sW8a86XX3650mNSW1Aigbjlm2++4X2BV6e/vavsXTQBYKZPn867AakoKyuL1+z4119/dbqvGzduuNWPqbS0lBk+fDhnH3/++afTdRw1OazY390Vhw4dYkpLS10uf+rUKU4fLlcSK0uXLuXUUSQSMZ988olL+7NYLMyePXscLnfUB89V169f5/SxV6lUlR57hmGYf/75h1GpVNb1wsPDnR5H24tKgB0X4NKlS27VtzosFgvToEEDThxu3LjBK2c2mzljRIjFYiY1NdWlfXgz1q+++ipn23K5nPnxxx9d2rbBYHDYt7MmEwnlFxDO+tPbU96v0lWrV692+8LXNgHh7+/vND4VFRcXM4cPH7a77L777uNs1/Zi3ZHr169zLjBbt27t0nquKC0t5Yzj4efn53KXnlu3bnEuyJs3b263nG03uh9++MHl+uXk5DBZWVkul3eFve9EZxfFzv45ugn3xXFlGDbh5uj95siiRYvcvjAXaiLBF9/jjvp2u8rd8+zIkSM55WNiYpxeV5nNZl6yQ61W824kK7LXTVIkEjHLly93Wrd9+/Zx3psymczjn0979fNUIiEvL48zHo9YLGa+//77Ste7cOECp3uaXC5n0tPTHZa3vT4DwAQHB1eayH733Xc563To0MFp+d9++41TXiaTMX/88Uel69jrDlXZ+7I6n2uGsX8NoFAomO3btztdb926dZx1wsPDGYPB4Pb+hYgSCcQttl/eDRs29Ml+7V00denSxaUP4pIlSzjrzZkzx+P1y83N5VxwPfTQQ07L20sk9OzZ0ydJmRUrVnD26+wEaDQaOTevAFzuv+iK6iYS5syZw1l/w4YNLq/73//+l7Ous4sPe4kEb/attMe2NVCvXr0cln3xxRc5ZT/44INKt+/NWOfm5vIGZlq2bJlHtl3TiYRXX321GrV33ZQpU6z7lEqlTH5+vsOyly5d4ty0i0Qij71fN2/ezHn9zzzzjEvrzZ8/n7PeF1984ZH6lHv88cc521+/fr1L633wwQec9d5//3275UaPHm0to9VqnSawfcFRcr0q/z7//HOH+/H2ca2OPn36cC7MKyPUREJVuPM9zjC+TSRcvnyZc/4Ri8UutdAzGo1M27ZtOftxNsinvUSCq2MTPfLII1W+dnCVtxIJtp8tV77fy23fvp2z7uuvv+6wrL1EwtatWyvdh9Fo5A10mZGR4bC8bculhQsXuvRa3njjDV79aiKR4Oz8WVG3bt0467mbPBUqGiOBuOXOnTucx4GBgTVTEQCLFi2qtF8vADz88MOcx7ZjPHhCcHAwhg0bZn1csR+7qxYtWuST6RInTJjA6cvmrK5btmzBzZs3rY8bNWqEhQsXerN6Lrtz5w6nb2yPHj0wYcIEl9d/7LHHEB4ebn1sr9++I71798bQoUNdLu8Jq1at4jyeMmWKw7K2y1avXl3p9r0Z6xUrVqC4uNj6uE+fPnjsscc8su2apFarMX/+fJ/sq2JMTSYTjh075rDsV199xen/OmXKFI+9X0ePHo169epZH69bt85uH++KTCYT5/2rUCjw6KOPeqQ+5aZNm8Z57Gq/+YrlxGKxw3qVlpZyytn2O75Xefu4VsfkyZOtf2dlZeHatWse34dQufM97mvff/895/wzceJExMfHV7qeVCrljHsFAMuXL3e5L79KpcKbb77pUtlHHnmE89gb14XeYDab8fXXX1sfN2jQAC+99JLL6w8fPhwdO3a0Pnbnuic+Ph5jxoyptJxUKuVN5X7ixAm7ZW/fvs0Z0yIwMBCvvPKKS/WZP3++w/HDfCU6OhpPPfWUS2Vr63uuMnXjm5B4jO1gdtWdK7aqAgICXL4wDg4ORoMGDayPb9265ZU6NWzY0Pp3+RztroqIiMDAgQO9US0ejUbDuYE+deqUw7K7du3iPJ47d65LyRtfSEhI4Fzcu3uhKpPJMGDAAOvjQ4cOuTxo1cSJE93aV3UVFhZyBgqVyWS8BFlFHTt2RKtWrayPL1++jH///dfpPrwZa9ttP/vssx7Zbk0bMWJEtQcLdFXF8wvg3ufWk8dbKpVi5syZ1sd5eXnYvHmz03W2b9+O9PR06+MHH3zQ43OB9+zZE02bNrU+/vvvvzn7tOfYsWOcwXEHDhyI+vXr2y0bFRVl/Vun0+H333+vZo1rB28f1+pw5zNxr3Hne9zX/vnnH87jiueLytx3332c90pmZiauXLni0rqDBw9GSEiIS2U7dOjAeeyt60JPO3PmDGdw3wkTJrj9PV1xENXLly8jJyfHpfVsb4SdcfX4Hjp0iJMoevDBB10eaFmtVvMSFr42btw4l49/bX3PVYYSCcQtfn5+nMcVf2X0pU6dOrn1i1DFL9yCggKX18vPz8f333+PGTNmoFOnTqhXrx40Gg1EIhHv3wcffMBZ19WTMwB06dKl2q0RLly4gLfffhujR49G06ZNERoaCrlcbreuFS8EndVz//79nMfDhw+vVh09ybZuXbp0cXsbFRNMOp0Ot2/fdmk9V35d8aRNmzahpKTE+njYsGGV3ohV/LUO4LdosOWtWJtMJhw5csT6WCwW4/777/fItmtadd8HFosFe/bswUsvvYTBgwcjNjYWgYGBkEgkvM9s8+bNOes6+tymp6fj+vXr1sfh4eFV+mw48/jjj3POv8uXL3da3na5t1qjVPz13Gw2Y926dU7L27bUsf31vaL77ruP83jy5Mn49NNPkZ+f735FvYRhu6u6/e/55593ul1vHldbRqMRv//+O5555hn07dsX9evXh7+/P8RiMe8zYftjgjvfuULlje9xXyorK+OMYC+TydC7d2+X1xeLxZwEPwDO94cz7pznKl4TAu5dF9YkT1/3AHB5pjFvHN/jx49zHvfs2dPlfVSlvKfVhfdcZaQ1XQFSu9jevNTUB8H2A1mZii0nKv6K7UhxcTHefvttfPXVVygrK3O7fgDcusC0/WXFHefOncPTTz/t9tRc5ZzV88aNG9a/NRoNWrZsWaV9eIPtl58nbu7v3LmDmJiYSstVJ15V4U63hnKTJ0/GG2+8Yc32//TTT/jiiy/sTr8GeC/WGRkZnIRj8+bNa2SKUG+ozvtg27ZteOGFF5CUlFSl9R19bismEQBwpgf1lAYNGmDYsGHYvn07AGDfvn24cuUKmjVrxiubmpqKnTt3Wh83bdoU/fv393idALZV0ptvvml9z69Zswb/+c9/7JY1GAyc6Sv9/Pyc/rr10EMP4b333sPFixcBAEVFRZg3bx5ee+019OvXDwMHDkTv3r3RpUuXWjF1qTu8eVzLMQyDH374Aa+99hpvOjtXCSmp4y5vfo/7UkZGhnVaZICdolgul7u1jfbt22Pt2rXWxxW73DnjznWhbWtaV64LhcD2usdZy0RX2XZZdsQbx9f2xxt3rztq+pq0LrznKkMtEohbbBMJ7jTf9yRvXqjl5OSgR48e+OSTT6qcRADg1rpVbR79xx9/oEuXLlW++AAc11On03Hm/w0NDfXJGA6uqjgfvae4mhjzVXN2gL3BP3DggPVxQEAARo0aVel6sbGxnF+C8vLysG3bNrtlvRlr24sUd5OAQlbV98Frr72GMWPGVDmJADj+3PrqeM+ZM4fzeMWKFXbLrVy5Emaz2fp49uzZXqkPwCY4Kv6aef78eYf9ULdv3845h4wfPx5qtdrhtmUyGX7//XdeyxCDwYDdu3dj/vz56NOnDwIDAzFgwAB88cUXyMzMrOYrEgZvHleAbZkzdepUzJ49u8pJBMC971wh8eb3uK/l5eVxHoeGhrq9Ddt1bLfpSHWuC10dh6Gm1eR1jzeOr20CzN0xD2pynDagbrznKkMtEohbWrRowXlcWFiIa9euoUmTJjVUI8976KGHcO7cOc5zMTExGDBgAFq1aoX69etDq9VCpVJxmveuWbOGk0V3R1X6ol+5cgXjx4/nZP9FIhHi4+PRs2dPNGrUCJGRkVAqlbyT3ZQpUyq9yLUdD0NovyJ74xcYV8dI8OU4EatXr+Z84XTo0IGTWHCmdevWnKaQq1evtvsLhjdjLfT3UXVU5X2wevVqXjcolUqFPn36ID4+Hg0aNEBoaCgUCgXnl7zMzEyXWqL46ngPHz4cMTEx1n6eq1evxnvvvcc5JhaLBd9//731sUwmw/Tp071Sn3LTpk3Dnj17rI/XrFmDTp068crZDhroSvP7Ro0a4eTJk/jiiy/w7bff2u0KVVZWhoSEBCQkJOCVV17BnDlz8N577/G6BdY23jyu77zzDq+7hL+/P/r374/OnTsjJiYGgYGBUCqVnPfXmTNnMG/ePHdfiqB4+3vc14qKijiPqzKOlu06tue0uqwmr3u8wTYB5m7rFUctLInvUCKBuKV79+6QSqWcXy+PHz9+zyQSfvvtNyQkJFgf+/n5YcmSJZg4cWKlYzJUHHnWF1599VXOSTg+Ph6rV6/mJXvsceXXZtsLX9sLhJpm+yvXypUrqz2gV/v27au1vqcxDMO7MP/nn394g1m56q+//kJGRgYiIyM5z3sz1kJ/H/mSwWDgjUg9c+ZMfPzxx5UOEpaYmOjSPnx1vCUSCWbPno0FCxYAYEfN37ZtG8aPH28ts3v3bqSkpFgfP/DAA15vkfLggw/iqaeesr7uDRs2YPHixZBK717u5ObmWrtlAEBcXBz69u3r0vbVajVee+01vPrqqzh48CD27NmDhIQE/Pvvv7ymqgaDAV9//TV27dqFffv21erWON46rpmZmfjoo484z82fPx+vvfZapUmwii1daitvf4/7mm3MqjKOlu06tT0J50m21z0ffvhhtbuvtW7dulrrV4dtCwR3v690Op0nq0OqgBIJxC0ajQadOnXC0aNHrc/99ttvbk27J2QV+3YCwHfffefyCP2u9jPzhKKiIs4FW0REBHbu3ImgoCCX1nelqaC/vz8naZSTkwOGYQRz8WLb/LFVq1Y+HwTR2/755x8kJyd7bHvlA6XZ/ornzVjbdoeqTtNle6pbx4qDWHpbQkIC5xfEIUOGcH6xd8bV84u3j3dFs2fPxjvvvGN93yxfvpyTSLDt7uCLKT81Gg0efPBB64B/WVlZ2LFjB6c70IYNG2A0Gq2Pp06d6vb7SCwWo0+fPujTpw8WLFgAo9GI48ePY+fOnfjxxx85UxEmJiZi+vTp+PPPP6v56mqOt47rtm3bOAmYxx9/HO+//75LdfLmd251ziuunlN88T3ua7Z1r0pTfNuBI109HnWB7XVPw4YNMXjw4BqqTfXZfl+lpaXxZjdwpuIMFqRm0BgJxG1jx47lPN6yZYtX+m3VhIqjA4eEhLg1kM2FCxe8USW7Tp48yWkKOXHiRJe/bK9du+Zyf8qKLU2Ki4tdHt3XF2wHursX5xCvbKaFqrAdUb2ct2IdGRnJ+ZUqMTHRo7+S2zb3dXcAI1+O82I7+viTTz7p8rqunl9sW4c5mr/bE6KiojBy5Ejr4927d1sTX+UtFMrFxcVxph3zJtvm9Latemw/A1OnTq32PmUyGXr06IG3334bV65cwX//+19OK7YdO3YI6vxZFd44rr74TFRFdc4rrp5TfPU97kv16tXjNE+/fPky5zW64syZM5zHsbGxHqnbveBeu+6pOE014P40phVnCCE1gxIJxG1z5szh3BiUlZXxmibWVhV/LWzSpAkkEolL6+l0Oq9esNuy7RdpOwCYMxX7uVamT58+nMee/kXNtruIO4PP2E4R5c7rqg2Ki4vxyy+/cJ5LSkqq0vRuFW8uz58/b/e96q1YS6VS9OjRw/rYYrFwRvGvLtsBD93pM5yTk+PRFh+V8cXnNjIyEk2bNrU+zsrK4k2x5UlPPPGE9W+GYawtLFavXs35dXrWrFk+a83Uv39/zs3H77//bv319tKlS5zj0bt3bzRu3Nij+xeJRHjyyScxadIkzvOujm0iVN44rr76LnNXdc4rx44dc6mcL197db5r3SGXy9GxY0frY4PB4Nb7nmEYTvdSgO1SS1j32nWPbSvSP/74w631f/vtN7fK++pzUJdQIoG4LSgoCLNmzeI899lnn+Hff/+t9rZruulnxZOKO1n0H374AXq93htVssv25OdqXRmGwZIlS1zez/333895vGTJEs7NQXXZDqrkTjPzwYMHc/rnbty48Z5pGQMAmzdv5vxy3717d8TFxVVpW7Zdj+y1dPBmrG23/dVXX3lkuwA7UGFYWJj18dmzZ10ePOqnn37yWD1cUdXPbWZmJrZs2eLyfrx5vG0NGTKE8yvZypUrYTKZOF02JBIJZsyY4bU62BKJRJxfw8vKyqyxtv3V3JXBAKuqV69enMe2TbZrG28c16p+Jk6fPo3Dhw+7VLYqbH8Fd/WX0pycHJdv7nz1PQ5U77vWXf369eM8dqdl3e7du60DuAJsCwd708rWVfHx8ZxWK3v27LFOSVsbde3aFREREdbHR44ccflHuaNHj7qctCvny89BXUGJBFIlCxcu5NzUmM1mjBkzhjfbgauMRiPmzZuHp556ykM1rJqKg9BduHDBpRFyb9++jbffftuLteKzHSzP1Yz/kiVL3GoKNnr0aE6cb9y4gYULF7q8fmVs+8e5Mx1eREQEHn30Uevj4uLiGn//eJLthbmrY3XYY5tI2LBhA++i1ZuxnjlzJmfArP3792P58uUe2TYAzujxeXl52L17d6XrFBQU+LwlVVU/t88884xbzZifeeYZzi8v69atw65du1xe3x0ikQiPP/649fHt27fx6quvcgaHHD58OKKjo72yf0dsm9WvWbMGFosF69evtz6nUqk8Mg+7I/diX29PH9eqfCbMZrNbXSCqwnZGip9//tml9RYtWuRyNwhffY8D1fuudZdt66P169e7dHNoNpvx8ssvc57z5nSxtZFMJsPzzz9vfcwwDObMmePRH3h8SSaT8ZLMc+fOrfSHudLSUk5rOFf58nNQV1AigVRJYGAgfvrpJ85UTBkZGejXrx82bNjgVnOhf/75B126dMGnn35a482Mevbsaf3bYDBg/vz5TstnZ2dj5MiRXpmSx5nOnTtz+iFu2bIFhw4dcrrOH3/8gRdffNGt/UgkErzxxhuc5z744AN8+umnLq3PMAz27t3rcLntaMGbN292q35vvPEGZxTj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736HSZMmISsrCzqdDjk5OTj55JNx//33o7q6OuJ9am9vx+OPP45JkyYhOzsbZrMZRx11FO644w7s27evh680MUX7u+Orvb0dw4YN82xvyJAhET+O8YlNbBYvXoyrr74aI0aMgNlsRkZGBkpLS/GrX/0Kzz33HNra2sI+nrERohmbiooK3H333Tj++OORmZkJnU6H7OxsTJ48GQ8++CBqamoi2k7Cx0YiitCpp54qAehymT17ttTR0RF2Wy6XS7r22mvDbue6666TXC5XH7265LRhwwZJq9X6va9Lly4NuT7jEnvPPPOMZDabw77Ht956a9DHMj6xUVFRIY0dO7bLY9stt9wiud3uoNtgbLov3Hs1Z86ciLcTrfe+trZWmjRpUshtpKSkSP/+9797+aoTQ29js2nTJik1NbXL71R6err03nvvdbm93bt3SyNHjgy7nYULF0bhlSeGaH13grnjjjv8tldSUtLlYxgfr2jGpqGhQZo5c2aX36MNGzaE3AZj4xWt2LzxxhuS0WgMu73s7Gzpm2++CbudZIgNEwkUseHDh0sApEGDBkm33nqr9NFHH0lr166VVq9eLf3973+XCgsLPR/+yy+/POy27rnnHs+6xx13nPTuu+9Ka9euld59913puOOO89x377339tGrSz4ul8tzUpyfn+95T8MlEhiX2HrooYc872Fpaan0xBNPSN999520YcMGafHixdITTzwhTZ48Wbr99tuDPp7xiT673e6XRDj66KOl1157TVq9erX0zTffSPPmzfNL/CxYsCDodhib7vM9YRo8eLA0Y8aMHp3UReO9dzqd0pQpUzzrXnzxxdLXX38tff/999IzzzzjOYaq1Wrpq6++isKrV7bexqasrMyz/imnnCItWLBAWrRokbR+/Xrpf//7n3TDDTdIarVaAiBpNJqw72lLS4tUWlrq2d71118vLVmyRFq1apX08MMPexIWJpMpbIMqmUTruxNo/fr1kkajkQwGg5SWlhZRIoHx8Ret2DQ1NUnHH3+857EXXXSR9Pbbb0tr1qyRfvjhB+mTTz6Rbr31VqmoqCjk+8rY+ItGbFasWOE5dqnVamnu3LnSZ599Jq1du1b66KOPpAsuuMCzTaPRKO3duzfodpIlNkwkUMTOO+886f3335ecTmfQ+2tra/2+FMuWLQu63s6dOz1XySdOnCi1t7f73W+xWKSJEydKACStVivt3r076q+lP3jyySclANJRRx0l3XvvvV0mEhiX2Fq8eLEnBrNnz5bsdnvIdYP16GF8YuPDDz/0xOXkk08Oenxbt26dpNPpJABSZmam5HA4/O5nbHpm3rx50sKFC6Xq6mpJkiSpvLy82yd10XrvX375Zc9z//73v+90/+7du6X09HQJgDRixIhOn4Fk09vYrFy5Upo1a5a0devWkOt89tlnkkqlkgBIw4cPD9nb589//rPnuR9//PGgzyV/BqZOnRrR60t00fjuBHI6nZ6G64MPPiiVlJRElEhgfPxFKzZXXXWVBIieUJ9//nnI9dxud8jjEWPjLxqxOe+88zyPefbZZ4Ou84c//MGzzk033RR0nWSJDRMJFFULFy70fDFuueWWoOv87ne/86yzevXqoOusXr067Ekdhbdv3z5PNvO7776T5s+f32UigXGJHZfL5em+dswxx/SoEcL4xMbtt9/uec/+85//hFzvoosu8qy3efNmv/sYm+joyUldtN770aNHS4DojmqxWIKus2DBAs92Pvjgg4j2L1lEo6EazCWXXOLZ7o8//tjpfrvdLmVkZEgApNGjR4ccnnLDDTd4trN27dqo7V+iiEZ8/va3v0kApFGjRkkdHR0RJRIYn671JDa+PXqeeOKJHj0vY9O1nsQmKytLAiDl5OSEXKepqcmz3QkTJnS6P5liw2KLFFXTp0/33N67d2+n+yVJwueffw4AOOqoo3DSSScF3c5JJ52EUaNGAQA+//xzSJIUg71NXjfddBPa2towZ84cTJ06tcv1GZfY+uabb7B7924AovilVqvt1uMZn9ix2+2e28OGDQu53vDhw4M+hrGJn2i997t27cL27dsBALNmzYLJZAq6Hd9iXJ9++mlvd5/Q9TnD0qVL0dzcDACYM2cO1Orgp62MTe/s27cP8+bNAwA8//zz0Ov1ET2O8YmNf/7znwCAjIwM3HzzzT3aBmMTG/L//6FDh4ZcJyMjA7m5uX7r+0qm2DCRQFHV0dHhua3RaDrdX15ejoMHDwJAlw1c+f4DBw6goqIiejuZ5D744AN88cUXyM7Oxl//+teIHsO4xNaHH34IAFCpVDj//PM9f29oaMDu3bvR0NAQ9vGMT+zIDUwA+Pnnn0OuJzdyVCoVRo4c6fk7YxM/0XrvfWcbCredAQMGoLS0FACwcuXKnuwyBejqnCHS2EycONGTAGJsuu/3v/89LBYLrrrqKkybNi3ixzE+0We32z0J0rPOOgsGgwEA4HK5sH//flRUVMBms3W5HcYmNuRzhvLy8pDrtLS0oK6uzm99X8kUGyYSKKqWLVvmuT169OhO92/bts1z+6ijjgq7Ld/75atFFF5TUxNuvfVWAMBjjz3myYh2hXGJrTVr1gAAhgwZgrS0NLzzzjsYP348cnJyUFpaipycHIwaNQp//etf/U6sZYxP7Fx++eVIT08HIL4zLper0zobNmzAl19+CQC44oorPOsDjE08Reu978l29u/fD4vFEvG+UnDROmfQarUYMWIEAH63uuu9997DV199haysLPztb3/r1mMZn+jbtGmTJ1Ewfvx4tLS04LbbbkNubi4GDx6MoUOHIiMjA2eddVbY6bwZm9i48cYbAQD19fV4/vnng67z0EMPdVrfVzLFhokEihq3241HH33U8/usWbM6rVNVVeW5XVRUFHZ7xcXFntv79++Pwh4mv7vuugvV1dU45ZRTcO2110b8OMYldtxuN3bs2AEAyM3Nxa233orf/OY32LJli996u3btwp133onTTz8dTU1NfvcxPrGTm5uLN998EyaTCStXrsSkSZPwxhtvYM2aNVi8eDEeeOABTJ06FXa7HRMmTOh0os3YxE+03vuebEeSJL/HUfdt2rTJk6AbP3580ESC/B6bzWZkZmaG3Z4cm9ra2qAJWeqssbERt912GwDg0UcfRV5eXrcez/hEn28j0+12Y+LEiXj66af9zgvsdjsWL16M008/HY899ljQ7TA2sXHNNddg9uzZAMQw4uuvvx4LFy7EunXr8Mknn+Ciiy7y9Ab+4x//iDPPPLPTNpIpNkwkUNQ8+eSTWLt2LQDg4osvxvHHH99pndbWVs/t1NTUsNszm82e221tbVHay+RVVlaGl156CVqtFs8//zxUKlXEj2VcYqe5uRlutxsA8NNPP+GZZ57BwIED8dZbb6GhoQHt7e1YtmyZZ3z3qlWrcM011/htg/GJrV/+8pf48ccfcd1112Hjxo2YM2cOTj75ZJx11lm4//77YTKZ8NRTT6GsrAwFBQV+j2Vs4ida7z1j2Pc6Ojpw3XXXeXoAPfzww0HXk2PTVVwAxqYn7rzzThw+fBgnn3wyrr/++m4/nvGJPt+hjo899hh2796N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aL33paWlnqs9H3zwAdrb24Nu57XXXvPcvuiii3q7+/3CqlWrMHPmTHR0dCAjIwP/+9///K64dmXatGnIyMgAALz++ushG1WMTfd0dc4gSRJKSkoAiIat/De5Z52M8YkN+ZyhpaUFS5YsCbneJ5984rnt2zgFGJtY8P3fL9dWCiXUOQOQZLGRiCLU0dEhzZgxQwIgAZBuvfXWHm1n586dkkajkQBIEydOlNrb2/3ub29vlyZOnCgBkLRarbRr164o7H3/Nn/+fE/cli5dGnQdxiW2zjnnHAmApFarpcWLF3e6/9ChQ1JRUZEEQNLr9VJVVZXf/YxPbFx++eWe78b9998fdJ2GhgZpzJgxnvX+97//+d3P2ERHeXm55z2eM2dORI+J1nv/8ssve577pptu6nT/nj17pPT0dAmANGLECMnhcHT79SWynsRmw4YNUmZmpgRAMpvN0ooVK3r03H/+8589z/344493un/VqlWSVquVAEhTp07t0XMkup7EpyslJSUSAKmkpCTseoxPeD2Jzb59+ySDwSABkMaPHy81Nzd3WufNN9/0bPe8884Luh3GJrzuxqaxsVEymUwSACktLU3avHlz0PW++uorSa1WSwCkwsJCyeVydVonWWKjkqQwfWaIfFxyySWe7Ofpp5+Op556KuxVNb1ej9LS0qD33XvvvXj00UcBiLHJd999N4YPH469e/fisccew4YNGzzrPfLII1F+Jf3P/fff76nMvHTpUkybNi3oeoxL7OzatQsnnngimpqaYDAYcNttt+Hcc8+F0WjE2rVrsWDBAk/BuMceewx33XVXp20wPtG3Y8cOHH/88Z6r0BdccAHmzJmDYcOGwWazYc2aNXjqqadQWVkJQMyssXjx4k7bYWy6b8WKFdizZ4/n97q6Otx5550ARDfO6667zm/9q6++Ouh2ovHeu1wuTJ06FStXrgQg/t9df/31yMrKwtq1a/HQQw+hpqYGarUaX3zxBc4555xevXal621s9u7di8mTJ6OmpgaAKAp85plnhn3O/Pz8oFNHt7a2YuLEiZ5hJb/97W/x61//GkajEUuXLsUjjzyCtrY2GI1GrFq1KmyNi2QRre9OOEOGDMG+fftQUlKCioqKkOsxPv6iFZsnnnjCcx4watQo3H333Tj66KPR0tKCTz75BM899xxcLhfS09Oxbt06jBw5stM2GBt/0YjNQw89hHnz5gEQsyjccsstOOuss5CVlYXDhw/j888/x7///W9PD8c333wTV155ZaftJE1s4p3JoMSBI5mzSJdwWWyXyyVdc801YR9/7bXXBs3iUfdF0iNBkhiXWCsrK5MKCgpCvrcqlUr605/+FPLxjE9sLFq0SMrNze3ymHb66adLDQ0NQbfB2HTfnDlzuvU/JZRovfe1tbXSpEmTQm4jJSVF+ve//x3tt0GRehubV199tdvnDPPnzw+5P7t375ZGjhwZ8rHp6enSwoULY/iOKEu0vjvhRNojQZIYH1/RjM0999wjqVSqkI/Nz8+XVq1aFXYbjI1XNGLjdrul2267LWxcAEg6nU564oknwu5PMsSGiQSKWHdPCiL55/Pll19KM2fOlAYNGiTp9Xpp0KBB0syZM6Wvvvoq9i+oH4k0kSBjXGKnrq5Omj9/vnTMMcdI6enpksFgkIYOHSrNnTtXWr9+fUTbYHyir66uTnrsscekadOmSXl5eZJOp5OMRqM0dOhQadasWdJnn30mud3uLrfD2EQu2o2haLz3DodD+te//iVNmTJFysnJkQwGgzRs2DDp+uuvl7Zs2dKbl5tQlJZIkCRJamtrkx577DFp4sSJUmZmpmQymaRRo0ZJt99+u1RRURGjd0KZlJZIkCTGRxbt2KxatUq66qqrpCFDhkgpKSlSRkaGNGnSJOmhhx6SmpqaItonxkaIZmzWrVsn3XjjjdK4ceOktLQ0SaPRSBkZGdLxxx8v/eEPf5B27twZ0T4lemw4tIGIiIiIiIiIIsZZG4iIiIiIiIgoYkwkEBEREREREVHEmEggIiIiIiIioogxkUBEREREREREEWMigYiIiIiIiIgixkQCEREREREREUWMiQQiIiIiIiIiihgTCUREREREREQUMSYSiIiIiIiIiChiTCQQERERERERUcSYSCAiIoqTq6++GiqVCiqVCq+99lq8d6fPDRkyxPP6Kyoq4r07lMSmTZvm+ax999138d4dIqKEx0QCEREpgu+JfneXq6++Ot67TxSR7777zu+zS0RElIiYSCAiIqJeY+8C6iv9vScPEZESaOO9A0RERIEmTZqEE044IeL1TzrppBjuDRERERH5YiKBiIgU59xzz8X9998f792gGGPPBSIiosTEoQ1EREREREREFDEmEoiIiIiIiIgoYkwkEBFR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7VVUVEhnnHFGxNsoKCiQ/vvf/3baTnl5edjnCSbS+O3bt0869thjw+7XzJkzpZaWFmny5Mmev23YsCHkNp977jlJpVKF3N78+fP91o/k++hr/vz5IbdFRESSlLx9/oiIiAJcddVVnf7W1bAGXzNnzsSWLVtw8803o7S0FAaDAampqSgtLcXcuXOxbNkyvPDCCxF1z+6uefPmYdWqVbj88stRVFQEvV6P3NxcnHTSSXjqqaewbt06jB07NuLtPfzwwygrK8Nll12GwsJC6PV65OTk4JhjjsHdd9+NzZs344YbbujWPr799tt4++23cf7556OoqMivKF5v/elPf8LOnTvxpz/9CZMmTUJubi60Wi1yc3Nxwgkn4M9//jN27tyJe++9N2rPmQhKSkqwePFirFq1CrfffjuOP/545OfnQ6fTwWg0oqioCNOnT8edd96JRYsWoaqqKqIeONE0ePBg/PDDD3jxxRcxffp05OXlQa/XY/Dgwbjgggvw8ccf49NPP0VaWhoaGho8j8vMzAy5zRtvvBFlZWW46qqrUFpaCrPZzNkciIj6kEqSjlSaIiIiIiKKk/b2dmRkZMDpdMJsNqOlpSWp61wQESUyHp2JiIiIKO4++eQTOJ1OAMCECROYRCAiUjAeoYmIiIgorhobG/GnP/3J87vvbA9ERKQ8TCQQERERUcxcdtll+Oijj2Cz2YLev3LlSpxyyinYt28fAKCwsDCimUKIiCh+WCOBiIiIiGJmyJAh2LdvH1JTU3Hcccdh6NChMBqNaGxsxPr167Fnzx7PujqdDl9++SXOOuusOO4xERF1hYkEIiIiIooZOZHQlYEDB+KNN97AmWee2Qd7RUREvcFEAhERERHFTHl5OT799FOUlZVh7969qKurQ319PXQ6HXJzc3HcccfhF7/4BWbPng2j0Rjv3SUioggwkUBEREREREREEWOxRSIiIiIiIiKKGBMJRERERERERBQxJhKIiIiIiIiIKGJMJBARERERERFRxJhIICIiIiIiIqKIMZFARERERERERBFjIoGIiIiIiIiIIsZEAhERERERERFFjIkEIiIiIiIiIorY/wdDdeZie8FVhwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABBIAAALyCAYAAABnzPd+AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd8E/X/B/BX9myb7r2YLXuWDTIEWYKKA0FAQBABx8+JiiBuBUVFQUSGoqAguBiCsvceLXsUKN0z3c243x/3bexlXtqmvcL7+Xj0Acl97nOf3Du5JO98hohhGAaEEEIIIYQQQgghPIjruwGEEEIIIYQQQghpOCiRQAghhBBCCCGEEN4okUAIIYQQQgghhBDeKJFACCGEEEIIIYQQ3iiRQAghhBBCCCGEEN4okUAIIYQQQgghhBDeKJFACCGEEEIIIYQQ3iiRQAghhBBCCCGEEN4okUAIIYQQQgghhBDeKJFAGoTk5GSIRCLL34QJE+q7SYQQQghpIGJiYiyfIWJiYuq7OQ0KfQYjBJg7dy7ndbBr1676blK9k9Z3A8id6/r160hMTMStW7eg1+thNpvh6+sLX19fxMfHo1WrVpBIJPXdTEIIIYQQQgghbqBEAqlVZ8+exdKlS7Fx40bcvn3baVm1Wo0ePXpg7NixeOihh6DRaOqolYTcGZYsWYJp06Zx7pswYQJWrFhRTy0ihNSF5ORkxMbG1lp9eXl50Ol0tVYfIXe7lStX4sknn7Tc7tOnD/2CTe44NLSB1IqbN2/ioYceQps2bbBo0SKXSQQAKCkpwfbt2zF+/HiEhYXhgw8+QFlZWR20lgjFhAkTON3EkpOT67tJDcrKlStt7lu/fj2Ki4vrvjGEEEIEibpkEwLcc889nNcBqTlKJJAa++uvv9CmTRts2LDB7nZfX180a9YMnTt3RmxsLNRqtU0ZvV6P119/Hb169fJ0cwm5I1y8eBGHDx+2ub+oqAi//vprPbSIEEIIIYTcLWhoA6mRH3/8EePHj4fJZOLc37FjR0yaNAlDhgxBdHS0zX4XL17E77//jl9++QXHjx+33J+VleXxNhNyJ7DXG6HSqlWrMG7cuLprDCGk3m3fvr3a+2q12lpsCbnTxMTEgGGY+m4GIURgKJFAqu3YsWOYOHEiJ4ng4+ODRYsWYcyYMU67DTVv3hyvvPIKXnnlFWzcuBGzZs3CxYsX66LZhDR4ZrMZP/zwg+W2RqNB06ZNcerUKQDAzp07cfPmTURFRdVTCwkhdW3AgAH13QRCCCF3ERraQKpFr9fj0UcfRUVFheW+oKAg7Nq1C2PHjnVr7NEDDzyAM2fOYNKkSZ5oKiF3nH/++YczD8kDDzzAef0wDIPvv/++PppGCCGEEELuApRIINUyd+5cXLt2zXJbLBbjt99+Q7t27apVn1wux7Jly/Dpp5/WUgsJuXNZD2sYO3YsHnvsMUil/3UyW7VqVR23ihBCCCGE3C1oaANxW35+Pr799lvOfc8//zy6detW47offPDBau9bOflcamoqJBIJgoKCkJCQgPj4+Bq1qaioCElJSbhw4QJycnJQWloKHx8fBAQEoEOHDmjWrFmN6nckMTER58+fR1paGoqKihAcHIxx48ZBJpM53CclJQVJSUm4fv06CgoKAAB+fn4IDw9Ht27d4OvrW2vtM5lMOHbsGK5evYrs7GwUFhZCq9UiPDwcLVq0QHx8fL3NisswDM6cOYPz588jMzMTxcXFCAgIQEREBHr16lXr44GLioqwf/9+pKamIj09HUqlEn369EGHDh1q9TgA2xvot99+s9wOCQnBgAEDIJFIMGjQIGzatAkAcOXKFezfvx89evSo8TE9GeuKigocPnwYN27cQFZWFkpKSuDl5YXo6Gi0atUKjRs3rnH764rJZMKhQ4eQnJyMtLQ0mEwmtGzZEsOGDXO4j9lsxuXLl5GUlITU1FTo9XooFAr4+fmhSZMmSEhIgEKhqLU2FhcX4+DBg7h9+zaysrJgMBjg7e2N2NhYtGnTBhEREbV2rDtdeno6Tpw4geTkZOj1epjNZqjVagQFBaFRo0Zo1aoVzT1QDQaDARcvXsS5c+eQnp6OwsJCaDQa+Pn5IS4uDh06dOAkTe80dfk+XtdOnTqFc+fOITMzE2VlZQgKCkJkZCR69uwJlUpVq8cym804cuQITp8+jZycHGg0GoSGhqJ3794ICQmp1WMJxcWLF3H69GlkZWWhoKAAfn5+CAsLQ8+ePeHn51erxyotLcWePXtw4cIFFBUVwdfXFzExMejTp0+Nl3M3Go3Yv38/rly5goyMDCiVSjRu3Bi9evWq9cdRmwwGAw4cOIDExETk5+fD29sbkZGR6NOnT4N+3TrFEOKmDz/8kAFg+ZPL5UxWVpZHj3n9+nXOMcePH2/Z9vfffzOdOnXibK/6Fx8fz/zxxx9uHe/ixYvM3Llzma5duzJSqdRh3QCYkJAQ5u2332Zyc3N5179z505OHXPmzGEYhmEMBgPzxRdfMC1btrR7rLy8PE49BoOB2bJlCzNp0iQmOjraaTtFIhHTrVs3ZuPGjYzZbHbrfFSVmJjIPP7444yPj4/L8zJ16lTm1KlTnP1XrFjhdD9Hf9HR0S7blpmZybzwwgtMaGiow3rkcjlz//33M6dPn+b9mPv06cOpo1JSUhIzevRoRq1W2xznueee412/O5YuXco5zvPPP2/ZtmbNGs62yZMn1+hYNY21MwcOHGCGDx9u99xV/YuJiWFeeukl5sqVK3brcXZt4MNRbO2ZM2cOp+zOnTsZhmGYnJwc5qWXXmJCQkJs2t+2bVubevR6PbNq1SrmgQceYHx9fZ0+foVCwYwaNYo5fvy4W4/L2ubNm5l+/foxcrnc6fHi4+OZuXPnMqmpqZz9rZ9bTz31VLXa8cILL3Dq+frrr2v0uD755BNOfW+++Wa16pkwYQKnnnXr1jks+8svvzDdunVzec2SSCRM+/btmbfffpvJycmp7kO0y/p57+q56666Pq9ZWVnMV199xQwePJjRarVOz6tGo2EmTZrEXL582a22VH2PdPV+4s51wZr1e9yKFSuclvfU+7j15wx3/qzV5Dqr1+uZN954gwkLC3N4PKVSyYwcOZI5e/Ys73odnWeTycQsWrSIiYiIcHgOBw0a5NaxqsO6fX369PHIcQoLC5m5c+cysbGxTq9F99xzD7Nnzx7e9Y4fP55Tx/Xr1xmGYZj8/HzmhRdeYDQajd1jyeVyZtq0adX6XlBWVsa89dZbTEBAgMPH8eijjzI3btxgGIbf89L6fZvvn714OfoMUFZWxsybN4/x8/Nz2u7k5GS3z4nQUSKBuC0hIYHzAnn00Uc9fkxHF4uXX36Z90Vh3rx5vI71559/VuuiEx4ezhw5coTXMewlEnJzc5mePXs6PYZ1IuGhhx6qVlsffPBBpqioyJ0QMBUVFcy0adMYsVjs1rGsP7B5KpGwbNkyxsvLi3d9YrGYefvtt3k9dnsfKlevXu30S5mnEgndu3fnHOfYsWOWbSUlJZxz4O3tzZSUlLh9jNqKtT16vb5az1tHH8LqO5Fw8uRJpx+Q7SUS/P393X78IpGIee+999x6bAzDMKmpqUzv3r3dPp71eSwvL2cCAwMt2728vNy+hpSVlXEeu1qtZgoKCtx+TNaPTyKRWOqMiYlxO1FaVFTE+fLq6+vLlJWV2W3/Aw88UK3r1/bt22v0OK15OpFQl+c1NzfXZcLe3p9CoXD5Jb0qoSYSPPU+LoREwq5du5igoCDex5VIJMzrr7/Oq25757mgoIDp378/r2Op1Wpm69atvI5VHXWRSPjzzz/dOr8AmClTpjAGg8Fl3fYSCUlJSS6TXZV/jRs3tiQf+Lhx4wYTFxfHq24fHx9m165dgkgkpKSkMO3ateNVZ0BAAHPixAne56QhoDkSiFuKi4tx4sQJzn0jRoyol7a89tpr+OSTTyy3vby80LJlS3Tq1AmBgYE25d966y1s2LDBZb1lZWU296lUKjRr1gwdO3ZEp06dEBsbC7GY+/K5ffs27rnnHpw/f97tx2I0GnH//fdj3759lvt8fX3Rpk0btGnTBj4+PrzbGhgYiBYtWqBLly5o27YtAgICbMps2LABI0aMgNls5tW+goICDBgwAIsXL7bZp/LcdOnSBfHx8fXSlXf27NmYPHkyCgsLOfd7e3ujZcuWSEhIQExMDGeb2WzGnDlz8Nxzz7l9vM2bN2PcuHGWyUbFYjEaN26Mzp07Izo6GhKJpNqPxZnLly/jwIEDlttxcXHo2LGj5bZKpcIDDzxgua3X67Fx40a3juHJWKekpKBbt2749ddfbbZ5eXkhLi4OCQkJaN68OZRKpVt114dbt25h0KBBSE1NtdwXHh6Ojh07olmzZg4fg/XrViQSITIyEm3atEHXrl3RsmVLqNVqThmGYfDGG29g3rx5vNt39uxZJCQkYM+ePTbbfH190bJlS3Tu3BlNmzZ1OmQKYOexefLJJy23CwsLsXbtWt5tAYCNGzciJyfHcvvRRx+Ft7e3W3VYCw0NxcCBAy23k5OT7T5eZzZs2ICioiLL7ccee8zucJLJkyfbfT0FBQWhffv2ltjZe/9paOryvJpMJhiNRs59EokEsbGxaNeuHbp06YK4uDibfcvLy/Hkk082+Ill6+p9vK5t2rQJ9913HzIzMzn3K5VKyxAV69eKyWTC+++/X63Jtw0GA4YNG4Z///3Xcl9QUBA6dOiANm3a2HS3LykpwahRo3Djxg23jyUES5cuxciRI23Or1qtRnx8PBISEtCkSRObz6pLly7FqFGj3F7OMzk5Gf379+ecr+joaHTu3Bnx8fE2n3uuXr2KBx980Oa1bU96ejr69u2LCxcucO4XiURo1KgROnfujEaNGlmGUBYUFGD48OE25etafn4+BgwYYFkxC2A/A3Tq1AmtWrWyuWZlZ2fj/vvvh16vr+OWelB9ZzJIw/LPP//YZNguXbrk8eNaZx2rduHq0qULs23bNk6G1Ww2Mzt37rTJboaHh7vMxK5bt46RSCTM0KFDmW+++Ya5fPkyYzKZbMrp9Xpm9erVTLNmzTjHaNeundtdDoODgy3/HzBgALN//37OMc1mM7N9+3abX3OGDh3KBAQEMM888wyzadMmh13JLl++zMyaNYtRKpWc43766adO21nJ3q9wffr0YbZu3WrTJpPJxCQmJjLvvfceEx8fb/PLT2pqKrN9+3Zm+/btzMCBAzl1rl692rLN+m/fvn1227Z8+XJOHSKRiBk3bhxz9OhRm7jdvn2bmTVrFiOTyTj7/Pzzz04fv/WvU5Xx8vHxYRYsWGBz3tPT05nDhw/zOrfueOONNzjteOedd2zKbNu2jVNm4MCBbh2jNmNdVXl5uU1vJgDMyJEjmb179zJGo5FT3mAwMEePHmXeeOMNJioqSpA9EiqfBxKJhJk2bZpNV+uSkhK7v0RrNBomLi6OmT17NnPgwAGmuLjYpozJZGIOHjzIPPbYY5xjSiQSXj2f8vLybLq6isViZuLEicyxY8dsrlGlpaXM3r17meeff54JCAiwex6vXLnCiEQizrXXHf369eO058CBA27t78jatWs59U6cONGt/QcMGMDZ/9ChQzZljhw5wikjlUqZWbNmOeyqmp6ezqxbt44ZN24co1KpGlyPBIapm/PKMOywBgBMp06dmPfff585fvy43Z4LBoOB+eeff5hBgwZx6tVqtczNmzddtkeoPRI89T6em5tref984oknOPvMnz/f4Xutveequ9fZmzdvMjqdjrOPv78/8+233zKFhYWcsgcOHLDbG3Px4sVOj2F9nhs1amT5/5gxY5gzZ85wypeVlTHLly9nvL29Ofs98sgjTo9TXZ7skfDPP//Y9BgcPnw4s2vXLpvPuDk5OcxHH31k02Pzww8/dHoM6x4JledXpVIxb731FnP79m1O+dzcXObVV1/lvEcA/Iav3X///TbX19dee83mGCkpKcwr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JyfDYDAgNTUV48aNwyOPPIITJ074VU+7t41CiJ+cccYZCoAmlxkzZigNDQ0+67Jarcq1117rs57rrrtOsVqtrfTtwpOtW7cqkZGRLtd12bJlXsvTLqHnxRdfVOLi4nxe49tvv93jsbRPaCgqKlIGDhzY5LPttttuU2w2m8c6aJvA8XWtZs6c6Xc9wbr2JSUlSn5+vtc6oqOjlTfffLOF37p90FLbbN++XYmPj2/ynkpMTFQ++eSTJuvbv3+/0qdPH5/1LFy4MAjfvH0QrHvHE3fddZdLfbm5uU0eQ/s4CKZtTp06pUyfPr3J+2jr1q1e66BtHATLNu+//74SExPjs77U1FTl+++/91lPONiGQgLxm169eikAlC5duii333678sUXXygbNmxQ1q5dqzz77LNKdna2/cd/+eWX+6zrvvvus5cdNmyY8vHHHysbNmxQPv74Y2XYsGH2fffff38rfbvww2q12hvFmZmZ9mvqS0igXULLo48+ar+GeXl5ylNPPaX8+OOPytatW5UlS5YoTz31lDJu3Djlzjvv9Hg87RN8TCaTi4hw2mmnKe+++66ydu1a5fvvv1dmz57tIvzMnTvXYz20TeA4N5i6deumTJ06tVmNumBce4vFoowfP95e9uKLL1a+++47Zf369cqLL75of4bq9Xpl0aJFQfj22qaltlm5cqW9/Omnn67MnTtXWbx4sbJlyxblf//7n3LDDTcoer1eAaBERET4vKaVlZVKXl6evb7rr79eWbp0qbJmzRrlscceswsWsbGxPjtU4USw7h13tmzZokRERChGo1FJSEjwS0igfVwJlm3Ky8uVESNG2I+96KKLlI8++khZt26dsnHjRuXLL79Ubr/9diUnJ8frdaVtXAmGbVatWmV/dun1emXWrFnK119/rWzYsEH54osvlPPPP99eZ0xMjHLgwAGP9YSLbSgkEL8577zzlE8//VSxWCwe95eUlLjcFMuXL/dYrqCgwD5KPnLkSKW2ttZlf01NjTJy5EgFgBIZGans378/6N+lI/Dcc88pAJR+/fop999/f5NCAu0SWpYsWWK3wYwZMxSTyeS1rCePHtonNHz++ed2u4wdO9bj823Tpk2KwWBQACjJycmK2Wx22U/bNI/Zs2crCxcuVIqLixVFUZTCwsKAG3XBuvZvv/22/bNvvvnmRvv379+vJCYmKgCU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AIDCwkJceOGF2LJlCyIjPTcpT548icmTJ2P//v32bb169cLo0aMRHR2NPXv2YP369ViwYAGuueYan+c0c+ZMnDx5EkuXLsXevXsBAGeddRb69evXqKyvrC87d+7E/fffj+rqamRmZuKMM85AWloajh49ih9++AF1dXWwWq248cYbMXjwYGaFIYQQT7S1kkEIIYQoSnA9EhRFUWbNmmWv76677mqy/F//+tcmR/Lvu+8+5bPPPlMqKio87rfZbMp//vMfJSMjw17XypUrvX5mW3kkNDQ0KLNmzVKWLVummEwmj2Xq6+uVJ598UomMjFQAKMnJyUpVVZXXzw3EuyCQY5y9SwAoV199daPrX1FRoVx55ZUu5f797397rM/ZIyA6OloBoOTn5yt79uxxKWez2ZTnn3/epc7ly5f79b18ESyPhF9//VXJzMy01zNjxgzl2LFjjcoVFxcrF110kb3c4MGDPXrKOHskREVFKTqdTunVq5eyfv36RmU/++wzxWAw2Mu/9957Xs/T2S5Go1H58MMPG5XZsmWL0rt3bxebwINHgkqg94SiuD5foqOjlYiICOWZZ55RzGazS7lDhw4pgwYNspedNGmSX/UTQkhHgx4JhBBCNMeiRYt8zs1355FHHkFqaqrLtquuugrz588HAHz88cd48sknodd7Dg1ks9nwySefuBzriabiLeh0Opx//vlYuHChfRTzpZdewvjx4/3+Lq1BVFQU3nnnHZ9loqOjcffdd8Nms+G+++5DeXk5PvjgA9x0002tdJawf7bKpZdeinfeeQc6nc6lXGJiot0jYsGCBQCAe+65BxdeeKFXmwNAQ0MD+vTpgx9++AHx8fEu+3Q6HW6//XasWrUKX3zxBQD5HZ155pnB+not4m9/+xtOnDgBAPi///s/vPDCCx7LderUCZ9//jmmTp2KH374AT/99BO++OKLRt4lzphMJqSlpWHFihXo0qVLo/2XXnopNmzYgKeffhqAXJcZM2Y0Krdnzx58+OGH9vfz58/Hn/70p0blhg0bhiVLluC0006ze1eEkoaGBrz++uv4y1/+0mhf165d8fHHH+O0006Doij48ccf8euvv6Jz584hPy9CCGlPMNgiIYQQzbFx40a8/PLLfi+eOh8TJ05ETk4OAODYsWNYtmyZ18/74YcfcOzYMQDifj9p0qQWnf/o0aPt7uNLly5tUV1tzaxZs+zrS5YsadXP/v7771FYWAhAxI8XX3yxkYigotPp8PLLL8NgMAAADhw4gMWLFzf5GU888UQjEcEZZ3f7DRs2BHL6IaOkpMTeQc/KysK8efN8lo+IiMBjjz1mf//RRx81+RkPPPCARxFBxfm6bNy40WMZZ7Fq3LhxHkUEldzcXNx1111NnlcwGDx4sEcRQWXQoEHIz88HACiKgk2bNrXKeRFCSHuCHgmEEELCEp1OhyuuuAJPPvkkAOk8nXXWWR7LOnesLr/8cp+j2Cr79u3Dpk2bcODAAVRUVKChocEeeR4AKioqAMgc8cOHD6Nr164t+Tohw2azYfPmzdi2bRuOHDmCyspKr1kKtm3b1qrn9sMPP9jXzz33XGRlZfksn52djXPOOQcLFy4EACxbtgzTpk3zWt5oNOL888/3WeewYcPs6/5klmgNlixZApPJBAC4+OKLYTQamzxm9OjRiIuLQ01NDVatWtVk+UsvvdTn/n79+iEmJgZ1dXU4efIkqqqqGsXFcM66cOWVVzb5mVdeeSXmzJnTZLmW0tR3A8TuqnCkFbsTQoiWoJBACCFEc8yZM8ev9G1NceWVV9qFhH//+9945ZVXGnW66urq8OWXX9rfe5vWoPLtt9/i73//O7Zu3er3eZSWlmpOSLBYLHjxxRfx3HPP4ciRI34dE8h0k2DgfI3HjRvn1zGnn366XUhQgwJ6o2/fvnYPBm+kpaXZ11vD7d4f1q5da1/fsWMHbr311oCOLysrQ01NDeLi4jzuT0pKavL3qtPpkJKSgrq6OgBybZyFBEVRsGPHDvv70aNHN3lePXv2RHp6esh/Z4MHD26yjBbtTgghWoJCAiGEkLBl8ODBOO2007Bjxw5UVlZi4cKFjUYjFy5caO8oqOW98dBDD+Hhhx8O+DzUbAZaoaGhARdccAG+//77gI5r7e9RUlJiX8/NzfXrmO7du9vXm+qQJiUlNVmfs9BgsVj8OodQo07DAYBVq1b55WHgTllZmU8hwR+cr427F0tFRYXdawKA30JaTk5OyIWEQO3uzUOHEEI6MoyRQAghJKxx9jBwDvzmaZsvb4TFixe7iAhjx47FG2+8ga1bt6K0tBT19fVQFMW+TJgwwV7WZrO19GsElYcfftguIuh0Ovzxj3/EZ599hj179tg7gM7fRcV5vTWorq62r3vr9LrjXK4p4cNbvAWto06baQm+RJFgXBdn2wFAbGysX8f5ilcRLNqr3QkhREvQI4EQQkhYc8UVV+Dee++FzWbDd999h1OnTtkzPJw8eRL//e9/AQB6vR5XXHGF13qeeuop+/o111yDt956y2eHpK28EJoSLRoaGvDSSy/Z37/77rseI+6rtKU3hXOnsqamxq9jnMu5z9kPF5zFkmeffRZ33nlnG56NZ9wFgdraWr/EIH/tTAghpG2hRwIhhJCwpkuXLvYsDGazGZ999pl932effWZ3W540aRKys7M91mG1WrF8+XIAIjjMnTu3yVHNQ4cOBeP0A3atb2q0esOGDfbR4oEDB/oUEQDg4MGDfpxlaMjIyLCv+3s9nQPjpaenB/uUNEGnTp3s68XFxW14Jt5JSkpy+e36G4fD33KEEELaFgoJhBBCwh7niPHOGRqc131FlS8tLbXP987MzERmZqbPz9u9e3fQ5nknJiba10+ePNlk+Z9++snnfuf59f4EnVuxYkWTZYDQuIs7Z0xYs2aNX8c4lxs+fHjQz0kLOAcuXL16dRueiXd0Op1LvJH169c3eUxRUZFLXAxfdRNCCGlbKCQQQggJey655BLExMQAkI5XUVERCgsL7Z3OmJgYXHLJJV6Pd04HqUap98Wrr77awjN24Bw8sKn0i/X19faMBd5w/i61tbU+y9psNrzxxhtNniMAl2wYwQpON3nyZPv6okWLcOLECZ/ljx07hu+++87j8eHEtGnTEBkps1PXrFmD7du3t/EZeWbixIn2dWfRzhueYph4IhS/NUIIIYFBIYEQQkjYk5CQgOnTpwOQgIH/+te/8K9//csePHD69Ok+59OnpaXZI71XVFTYpzl4YvXq1UEVEpxHn7/55hufng6zZ89u0hOiZ8+e9vXly5f7nArx1FNP+d1JdU6Xd/ToUb+OaYqpU6eiR48eACS2wx133OG1rKIouO222+wdy169emHKlClBOQ+tkZ2dbfegURQFM2bM8DtFoc1m82vUPxhcc8019vVVq1bh888/91r28OHDePrpp/2qNxS/NUIIIYFBIYEQQkiHwHnqwocffuj3tAZARvHPPfdc+/urr74aGzZsaFTus88+w7nnngur1ep3loGmyM/PR69evQBIJPzLL78cZWVlLmVqa2tx991346mnnkJ0dLTP+oYNG2aPBVFRUYFLL73U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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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69u3b58aNGhQwHqWL18ehm8eG4Sr7fjjjjvu8KmvsLAw6DG0j4dw2qaiokLNnDkzaDvavn17q3XQNh7CZZsXX3xRWSyWgPV1795dffjhhwHriQfbUEggITNgwAAFQPXq1Uvdeuut6o033lCbN29WGzduVH/5y19UQUGB+8c/a9asgHXdfffd7rIjR45US5YsUZs3b1ZLlixRI0eOdL93zz33dNK3iz+cTqe7U5yXl+e+poGEBNolsjzwwAPua1hcXKweffRR9fHHH6vt27erVatWqUcffVRNmDBB3X777X6Pp33Cj91u9xERTjnlFLV48WK1ceNG9eGHH6p58+b5CD8LFizwWw9t03a8O0x9+/ZV06dPb1enLhzX3uFwqDPPPNNd9uKLL1bvvfee+uyzz9Rf//pX9z00ISFBrVixIgzfXt901Dbr1693lz/jjDPUggUL1MqVK9W2bdvUBx98oG688UaVkJCgACij0RjwmtbU1Kji4mJ3fTfccINavXq12rBhg3rwwQfdgkVKSkrAAVU8Ea6205xt27Ypo9GozGazSk9PD0lIoH18CZdtqqqq1OjRo93HXnTRRerf//632rRpk/r888/Vm2++qW699VbVu3fvVq8rbeNLOGzzySefuO9dCQkJau7cuertt99WmzdvVm+88YY6//zz3XVaLBa1f/9+v/XEi20oJJCQOe+889Rrr72mHA6H3/fLysp8GsXatWv9ltuzZ497lnzMmDHKarX6vF9fX6/GjBmjAKjExES1b9++sH+XrsBjjz2mAKghQ4aoe+65J6iQQLtEllWrVrltMHv2bGW321st68+jh/aJDK+//rrbLuPHj/d7f9uyZYsymUwKgMrKylJNTU0+79M27WPevHlq+fLl6vjx40oppUpKStrcqQvXtX/uuefcn/2rX/2qxfv79u1TGRkZCoAaOHBgi99AvNFR23z66afqsssuUzt37my1zNtvv60MBoMCoAYMGNCqt88f/vAH92c/8sgjfj9L+w1MmjQppO8X64Sj7TTH4XC4B67333+/KiwsDElIoH18CZdtrr76agWIJ9SyZctaLedyuVq9H9E2voTDNuedd577mCeffNJvmV//+tfuMjfddJPfMvFiGwoJJKwsX77c3TBuueUWv2V++ctfusts3LjRb5mNGzcG7NSRwBw8eNCtZn788cdq/vz5QYUE2iVyOJ1Ot/vaiBEj2jUIoX0iw+233+6+Zv/9739bLXfRRRe5y3311Vc+79E24aE9nbpwXfuTTjpJAeKOWl9f77fMggUL3PUsXbo0pPOLF8IxUPXHJZdc4q5369atLd632+0qMzNTAVAnnXRSq8tTbrzxRnc9mzdvDtv5xQrhsM+f//xnBUANHjxYNTY2hiQk0D7BaY9tvD16Hn300XZ9Lm0TnPbYplu3bgqAys7ObrVMVVWVu95Ro0a1eD+ebMNgiySsTJkyxb2/f//+Fu8rpbBs2TIAwJAhQzBu3Di/9YwbNw6DBw8GACxbtgxKqQicbfxy0003oa6uDnPmzMGkSZOClqddIsuHH36Iffv2AZDgl4mJiW06nvaJHHa73b3fv3//VssNGDDA7zG0TfQI17Xfu3cvdu3aBQC47LLLkJKS4rce72Bcb731VkdPnyB4n2HNmjWorq4GAMyZMwcJCf67rbRNxzh48CDmzZsHAHj66aeRlJQU0nG0T2T4+9//DgDIzMzEzTff3K46aJvIoD3/i4qKWi2TmZmJnJwcn/LexJNtKCSQsNLY2OjeNxqNLd4vKSnBsWPHACDoAFd7/+jRozhw4ED4TjLOWbp0Kd555x10794df/rTn0I6hnaJLK+//joAwGAw4Cc/+Yn79YqKCuzbtw8VFRUBj6d9Ioc2wASA7777rtVy2iDHYDBg0KBB7tdpm+gRrmvvnW0oUD09evRAcXExAODTTz9tzymTZgTrM4RqmzFjxrgFINqm7fzqV79CfX09rr76akyePDnk42if8GO3290C6bRp02A2mwEATqcThw8fxoEDB2Cz2YLWQ9tEBq3PUFJS0mqZmpoalJeX+5T3Jp5sQyGBhJW1a9e690866aQW73/zzTfu/SFDhgSsy/t9bbaIBKaqqgq33norAGDhwoVuRTQYtEtk2bRpEwCgX79+SE9PxyuvvILhw4cjOzsbxcXFyM7OxuDBg/GnP/3Jp2OtQftEjlmzZiEjIwOAtBmn09mizPbt2/Huu+8CAK688kp3eYC2iSbhuvbtqefw4cOor68P+VyJf8LVZ0hMTMTAgQMBsG21lVdffRUrVqxAt27d8Oc//7lNx9I+4efLL790CwXDhw9HTU0NbrvtNuTk5KBv374oKipCZmYmpk2bFjCdN20TGX7xi18AAE6cOIGnn37ab5kHHnigRXlv4sk2FBJI2HC5XHj44Yfd/1922WUtyhw5csS937t374D19enTx71/+PDhMJxh/POb3/wGx48fxxlnnIHrrrsu5ONol8jhcrmwe/duAEBOTg5uvfVW/OxnP8OOHTt8yu3duxd33nknzj77bFRVVfm8R/tEjpycHLz00ktISUnBp59+irFjx+LFF1/Epk2bsGrVKtx3332YNGkS7HY7Ro0a1aKjTdtEj3Bd+/bUo5TyOY60nS+//NIt0A0fPtyvkKBd49TUVGRlZQWsT7NNWVmZX0GWtKSyshK33XYbAODhhx9Gbm5um46nfcKP9yDT5XJhzJgxeOKJJ3z6BXa7HatWrcLZZ5+NhQsX+q2HtokM1157LWbPng1AlhHfcMMNWL58ObZs2YI333wTF110kdsb+He/+x2mTp3aoo54sg2FBBI2HnvsMWzevBkAcPHFF2P06NEtytTW1rr309LSAtaXmprq3q+rqwvTWcYv69evx7PPPovExEQ8/fTTMBgMIR9Lu0SO6upquFwuAMDXX3+Nv/71r+jZsydefvllVFRUwGq1Yu3ate713Rs2bMC1117rUwftE1kuuOACbN26Fddffz2++OILzJkzB+PHj8e0adNw7733IiUlBY8//jjWr1+P/Px8n2Npm+gRrmtPG3Y+jY2NuP76690eQA8++KDfcpptgtkFoG3aw5133okffvgB48ePxw033NDm42mf8OO91HHhwoXYt28ffvSjH2Hz5s2w2WwoLS3FU089hczMTCilcPfdd7uXQnhD20QGo9GIF154Aa+//jpGjBiBZ599FhdccAHGjh2LSy65BG+//TamTJmClStX4o9//KPfOuLJNhQSSFhYu3Yt7r77bgBAXl4ennrqKb/lvNd1BQvmk5yc7N5vaGgIw1nGL3a7HT//+c+hlMLtt9+Ok08+uU3H0y6Rw9v92WazISUlBWvWrMHPfvYzdOvWDRaLBWeddRY++ugjjBgxAoAE1fnss898jtOgfcKP3W7Hiy++2GoQxB9++AEvv/wyVq1a1eI92iZ6hOva04adz80334wtW7YAkGBj559/vt9ymm1CCf5H27SNdevW4fnnn2/X5IMG7RN+mvcZpk2bhnfeeQdjx45FcnIycnNz8Ytf/ALvvPOOO0jfPffc0+LZRdtEjl27duHFF1/E119/7ff9jRs34rnn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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plt.errorbar(keys, means, yerr=stds)\n", + "colors = {'T_rope': 'blue', 'hybrid': 'green', 'mamba': 'red'}\n", + "\n", + "save = True\n", + "\n", + "for p in accs.keys():\n", + " for eval_p in accs[p].keys():\n", + " plt.figure()\n", + " for model in accs[p][eval_p].keys():\n", + " plt.plot(keys[p][eval_p][model], means[p][eval_p][model], color=colors[model], label=model)\n", + "\n", + " plt.legend()\n", + "\n", + " for model in accs[p][eval_p].keys():\n", + " plt.fill_between(keys[p][eval_p][model], mins[p][eval_p][model], maxs[p][eval_p][model], color=colors[model], alpha=0.2)\n", + "\n", + " plt.xlabel(\"Evaluation Length\")\n", + " plt.ylabel(\"Character Accuracy\")\n", + " plt.title(\"Character Accuracy vs Evaluation Length\")\n", + " # plt.title(\"Character Accuracy vs Evaluation Length - p=%s, eval_p=%s\" % (p, eval_p))\n", + " plt.grid('minor')\n", + "\n", + " if save:\n", + " plt.savefig(\"results/fig/p_%s_eval_p_%s.png\" % (p, eval_p))\n", + " # save = False\n", + "# for eval_p in accs.keys():\n", + "# plt.figure()\n", + "# for model in accs[eval_p].keys():\n", + "# plt.plot(keys[eval_p][model], means[eval_p][model], color=colors[model], linewidth=0.8, label=model)\n", + "\n", + "# plt.legend()\n", + "\n", + "# for model in accs[eval_p].keys():\n", + "# plt.fill_between(keys[eval_p][model], mins[eval_p][model], maxs[eval_p][model], color=colors[model], alpha=0.2)\n", + "\n", + "# plt.xlabel(\"Evaluation Length\")\n", + "# plt.ylabel(\"Character Accuracy\")\n", + "# plt.title(\"Character Accuracy vs Evaluation Length - %s\" % eval_p)\n", + "# plt.grid('minor')\n", + "\n", + "# if save:\n", + "# plt.savefig(\"results/fig/eval_p_%s.png\" % eval_p)\n", + "# save = False\n", + "# plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "461e71fa", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "hybrid", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/source/official-code/mini/results/exp.txt b/source/official-code/mini/results/exp.txt new file mode 100644 index 0000000000000000000000000000000000000000..9a660d0e1044b707fa93a001e14ff48fe308e52e --- /dev/null +++ b/source/official-code/mini/results/exp.txt @@ -0,0 +1,1323 @@ +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 1.0 +decode-recall;len 40;char: 0.9698912501335144 +decode-recall;len 50;char: 1.0 +decode-recall;len 60;char: 0.8970703482627869 +decode-recall;len 70;char: 0.8307287096977234 +decode-recall;len 80;char: 0.899446964263916 +decode-recall;len 90;char: 0.8225606679916382 +decode-recall;len 100;char: 0.8384692072868347 +decode-recall;len 110;char: 0.8664449453353882 +decode-recall;len 120;char: 0.773897647857666 +decode-recall;len 130;char: 0.6746837496757507 +decode-recall;len 140;char: 0.7870134711265564 +decode-recall;len 150;char: 0.8327778577804565 +decode-recall;len 160;char: 0.7591719031333923 +decode-recall;len 170;char: 0.7245471477508545 +decode-recall;len 180;char: 0.6768128871917725 +decode-recall;len 190;char: 0.6905239820480347 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 1.0 +decode-recall;len 40;char: 0.9966216087341309 +decode-recall;len 50;char: 0.938149631023407 +decode-recall;len 60;char: 0.9800554513931274 +decode-recall;len 70;char: 0.9271875619888306 +decode-recall;len 80;char: 0.869598388671875 +decode-recall;len 90;char: 0.8200007677078247 +decode-recall;len 100;char: 0.8520143032073975 +decode-recall;len 110;char: 0.8343372344970703 +decode-recall;len 120;char: 0.8264743685722351 +decode-recall;len 130;char: 0.6996142268180847 +decode-recall;len 140;char: 0.7076221704483032 +decode-recall;len 150;char: 0.720869779586792 +decode-recall;len 160;char: 0.8103511333465576 +decode-recall;len 170;char: 0.5998938679695129 +decode-recall;len 180;char: 0.7453792095184326 +decode-recall;len 190;char: 0.7036846876144409 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2 +decode-recall;len 10;char: 0.9861111044883728 +decode-recall;len 20;char: 0.9487179517745972 +decode-recall;len 30;char: 0.8735532760620117 +decode-recall;len 40;char: 0.875 +decode-recall;len 50;char: 0.8959752917289734 +decode-recall;len 60;char: 0.781622588634491 +decode-recall;len 70;char: 0.7826597094535828 +decode-recall;len 80;char: 0.8992394208908081 +decode-recall;len 90;char: 0.8009490370750427 +decode-recall;len 100;char: 0.8188561201095581 +decode-recall;len 110;char: 0.7815002799034119 +decode-recall;len 120;char: 0.8189759254455566 +decode-recall;len 130;char: 0.7573718428611755 +decode-recall;len 140;char: 0.7837318778038025 +decode-recall;len 150;char: 0.6388156414031982 +decode-recall;len 160;char: 0.6720138788223267 +decode-recall;len 170;char: 0.6849743127822876 +decode-recall;len 180;char: 0.7586379051208496 +decode-recall;len 190;char: 0.6711665987968445 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.9880952835083008 +decode-recall;len 40;char: 0.9883658289909363 +decode-recall;len 50;char: 0.9987373352050781 +decode-recall;len 60;char: 0.9427050948143005 +decode-recall;len 70;char: 0.8301447629928589 +decode-recall;len 80;char: 0.9307894706726074 +decode-recall;len 90;char: 0.88710618019104 +decode-recall;len 100;char: 0.8691601753234863 +decode-recall;len 110;char: 0.8649761080741882 +decode-recall;len 120;char: 0.8456103205680847 +decode-recall;len 130;char: 0.8839309215545654 +decode-recall;len 140;char: 0.809459388256073 +decode-recall;len 150;char: 0.7965211868286133 +decode-recall;len 160;char: 0.8278647661209106 +decode-recall;len 170;char: 0.7385720610618591 +decode-recall;len 180;char: 0.794115424156189 +decode-recall;len 190;char: 0.6724039912223816 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9972223043441772 +decode-recall;len 30;char: 0.9891974925994873 +decode-recall;len 40;char: 0.9953703880310059 +decode-recall;len 50;char: 0.9687110781669617 +decode-recall;len 60;char: 0.9481819868087769 +decode-recall;len 70;char: 0.9443773031234741 +decode-recall;len 80;char: 0.9085100889205933 +decode-recall;len 90;char: 0.8205975890159607 +decode-recall;len 100;char: 0.9025668501853943 +decode-recall;len 110;char: 0.8141937255859375 +decode-recall;len 120;char: 0.7851337790489197 +decode-recall;len 130;char: 0.8140546083450317 +decode-recall;len 140;char: 0.8031048774719238 +decode-recall;len 150;char: 0.6864428520202637 +decode-recall;len 160;char: 0.6841744780540466 +decode-recall;len 170;char: 0.6622152328491211 +decode-recall;len 180;char: 0.6802828311920166 +decode-recall;len 190;char: 0.5744750499725342 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.9578373432159424 +decode-recall;len 40;char: 0.9484775066375732 +decode-recall;len 50;char: 0.8325509428977966 +decode-recall;len 60;char: 0.7866853475570679 +decode-recall;len 70;char: 0.8057931661605835 +decode-recall;len 80;char: 0.7512606978416443 +decode-recall;len 90;char: 0.7265201807022095 +decode-recall;len 100;char: 0.765052080154419 +decode-recall;len 110;char: 0.7471558451652527 +decode-recall;len 120;char: 0.846505880355835 +decode-recall;len 130;char: 0.7096864581108093 +decode-recall;len 140;char: 0.6914073824882507 +decode-recall;len 150;char: 0.6867968440055847 +decode-recall;len 160;char: 0.6309857368469238 +decode-recall;len 170;char: 0.730437695980072 +decode-recall;len 180;char: 0.6898857355117798 +decode-recall;len 190;char: 0.6881272196769714 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.9934210777282715 +decode-recall;len 40;char: 0.9430351257324219 +decode-recall;len 50;char: 0.905261218547821 +decode-recall;len 60;char: 0.8528118133544922 +decode-recall;len 70;char: 0.8175981044769287 +decode-recall;len 80;char: 0.8775231838226318 +decode-recall;len 90;char: 0.9323210716247559 +decode-recall;len 100;char: 0.9059500694274902 +decode-recall;len 110;char: 0.825657308101654 +decode-recall;len 120;char: 0.7231242656707764 +decode-recall;len 130;char: 0.8077743053436279 +decode-recall;len 140;char: 0.7275323867797852 +decode-recall;len 150;char: 0.8527283668518066 +decode-recall;len 160;char: 0.6982316970825195 +decode-recall;len 170;char: 0.635442852973938 +decode-recall;len 180;char: 0.6532105207443237 +decode-recall;len 190;char: 0.652106523513794 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 1.0 +decode-recall;len 40;char: 0.9559523463249207 +decode-recall;len 50;char: 0.9486525058746338 +decode-recall;len 60;char: 0.9197161197662354 +decode-recall;len 70;char: 0.9176851511001587 +decode-recall;len 80;char: 0.8536585569381714 +decode-recall;len 90;char: 0.8816823363304138 +decode-recall;len 100;char: 0.8364273309707642 +decode-recall;len 110;char: 0.7446726560592651 +decode-recall;len 120;char: 0.7256357669830322 +decode-recall;len 130;char: 0.68105149269104 +decode-recall;len 140;char: 0.7960719466209412 +decode-recall;len 150;char: 0.7969255447387695 +decode-recall;len 160;char: 0.7381316423416138 +decode-recall;len 170;char: 0.6981980204582214 +decode-recall;len 180;char: 0.710533082485199 +decode-recall;len 190;char: 0.6881749033927917 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9459065198898315 +decode-recall;len 30;char: 0.9510073065757751 +decode-recall;len 40;char: 0.8843767046928406 +decode-recall;len 50;char: 0.856900155544281 +decode-recall;len 60;char: 0.9255260229110718 +decode-recall;len 70;char: 0.8430420160293579 +decode-recall;len 80;char: 0.7483056783676147 +decode-recall;len 90;char: 0.7237640619277954 +decode-recall;len 100;char: 0.834624707698822 +decode-recall;len 110;char: 0.7278779745101929 +decode-recall;len 120;char: 0.7187278270721436 +decode-recall;len 130;char: 0.7181820869445801 +decode-recall;len 140;char: 0.6197882890701294 +decode-recall;len 150;char: 0.6811811923980713 +decode-recall;len 160;char: 0.6404148936271667 +decode-recall;len 170;char: 0.7681761980056763 +decode-recall;len 180;char: 0.7090686559677124 +decode-recall;len 190;char: 0.6724111437797546 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.05 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9607371687889099 +decode-recall;len 30;char: 0.9471014738082886 +decode-recall;len 40;char: 0.8840393424034119 +decode-recall;len 50;char: 0.8126336336135864 +decode-recall;len 60;char: 0.6079592704772949 +decode-recall;len 70;char: 0.6554653644561768 +decode-recall;len 80;char: 0.6423167586326599 +decode-recall;len 90;char: 0.4984869658946991 +decode-recall;len 100;char: 0.4954929053783417 +decode-recall;len 110;char: 0.44130033254623413 +decode-recall;len 120;char: 0.4199307858943939 +decode-recall;len 130;char: 0.43352052569389343 +decode-recall;len 140;char: 0.4276042878627777 +decode-recall;len 150;char: 0.3294852375984192 +decode-recall;len 160;char: 0.37414056062698364 +decode-recall;len 170;char: 0.41347289085388184 +decode-recall;len 180;char: 0.49461886286735535 +decode-recall;len 190;char: 0.3758355975151062 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.05 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9665751457214355 +decode-recall;len 30;char: 0.9321621656417847 +decode-recall;len 40;char: 0.8567637205123901 +decode-recall;len 50;char: 0.7524275779724121 +decode-recall;len 60;char: 0.6151078343391418 +decode-recall;len 70;char: 0.6482897996902466 +decode-recall;len 80;char: 0.6140960454940796 +decode-recall;len 90;char: 0.5787217617034912 +decode-recall;len 100;char: 0.4682821035385132 +decode-recall;len 110;char: 0.45064276456832886 +decode-recall;len 120;char: 0.3718726634979248 +decode-recall;len 130;char: 0.41884586215019226 +decode-recall;len 140;char: 0.4698120057582855 +decode-recall;len 150;char: 0.3882032632827759 +decode-recall;len 160;char: 0.373674601316452 +decode-recall;len 170;char: 0.352741539478302 +decode-recall;len 180;char: 0.3893098533153534 +decode-recall;len 190;char: 0.40006309747695923 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.05 --eval_p 0.2 +decode-recall;len 10;char: 0.9166666865348816 +decode-recall;len 20;char: 0.896329402923584 +decode-recall;len 30;char: 0.49649474024772644 +decode-recall;len 40;char: 0.7091111540794373 +decode-recall;len 50;char: 0.5904707312583923 +decode-recall;len 60;char: 0.4760388135910034 +decode-recall;len 70;char: 0.48984333872795105 +decode-recall;len 80;char: 0.3912590742111206 +decode-recall;len 90;char: 0.3363027274608612 +decode-recall;len 100;char: 0.3405021131038666 +decode-recall;len 110;char: 0.37511366605758667 +decode-recall;len 120;char: 0.2936858832836151 +decode-recall;len 130;char: 0.3301503658294678 +decode-recall;len 140;char: 0.2955816984176636 +decode-recall;len 150;char: 0.22652357816696167 +decode-recall;len 160;char: 0.25599461793899536 +decode-recall;len 170;char: 0.21175377070903778 +decode-recall;len 180;char: 0.21051886677742004 +decode-recall;len 190;char: 0.23592248558998108 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.05 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9950980544090271 +decode-recall;len 30;char: 0.9204067587852478 +decode-recall;len 40;char: 0.970354437828064 +decode-recall;len 50;char: 0.6778525114059448 +decode-recall;len 60;char: 0.6939069032669067 +decode-recall;len 70;char: 0.6178520321846008 +decode-recall;len 80;char: 0.6076837182044983 +decode-recall;len 90;char: 0.5414889454841614 +decode-recall;len 100;char: 0.5298854112625122 +decode-recall;len 110;char: 0.4634250998497009 +decode-recall;len 120;char: 0.45137259364128113 +decode-recall;len 130;char: 0.403782457113266 +decode-recall;len 140;char: 0.38920724391937256 +decode-recall;len 150;char: 0.32565078139305115 +decode-recall;len 160;char: 0.3508368730545044 +decode-recall;len 170;char: 0.44314250349998474 +decode-recall;len 180;char: 0.3826814889907837 +decode-recall;len 190;char: 0.3977511525154114 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.05 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.8881173133850098 +decode-recall;len 40;char: 0.695476770401001 +decode-recall;len 50;char: 0.8229868412017822 +decode-recall;len 60;char: 0.6428396701812744 +decode-recall;len 70;char: 0.4983556270599365 +decode-recall;len 80;char: 0.46195876598358154 +decode-recall;len 90;char: 0.6161105632781982 +decode-recall;len 100;char: 0.4291485548019409 +decode-recall;len 110;char: 0.3683050572872162 +decode-recall;len 120;char: 0.4112008512020111 +decode-recall;len 130;char: 0.3915625810623169 +decode-recall;len 140;char: 0.3576943278312683 +decode-recall;len 150;char: 0.45561084151268005 +decode-recall;len 160;char: 0.34107232093811035 +decode-recall;len 170;char: 0.33711445331573486 +decode-recall;len 180;char: 0.32203301787376404 +decode-recall;len 190;char: 0.3174256682395935 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.05 --eval_p 0.2 +decode-recall;len 10;char: 0.9583333730697632 +decode-recall;len 20;char: 0.9166666865348816 +decode-recall;len 30;char: 0.8724055290222168 +decode-recall;len 40;char: 0.7081161737442017 +decode-recall;len 50;char: 0.7355911135673523 +decode-recall;len 60;char: 0.4851865768432617 +decode-recall;len 70;char: 0.4811539053916931 +decode-recall;len 80;char: 0.45801398158073425 +decode-recall;len 90;char: 0.530841588973999 +decode-recall;len 100;char: 0.5182849764823914 +decode-recall;len 110;char: 0.40592068433761597 +decode-recall;len 120;char: 0.5860899686813354 +decode-recall;len 130;char: 0.405333012342453 +decode-recall;len 140;char: 0.40048015117645264 +decode-recall;len 150;char: 0.3359646499156952 +decode-recall;len 160;char: 0.2995125651359558 +decode-recall;len 170;char: 0.2958233952522278 +decode-recall;len 180;char: 0.3843275010585785 +decode-recall;len 190;char: 0.40129873156547546 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.05 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9916666746139526 +decode-recall;len 30;char: 0.9449827075004578 +decode-recall;len 40;char: 0.8498712778091431 +decode-recall;len 50;char: 0.774343729019165 +decode-recall;len 60;char: 0.7197222113609314 +decode-recall;len 70;char: 0.6950961947441101 +decode-recall;len 80;char: 0.6553677320480347 +decode-recall;len 90;char: 0.5418503284454346 +decode-recall;len 100;char: 0.36607882380485535 +decode-recall;len 110;char: 0.49412867426872253 +decode-recall;len 120;char: 0.4593223035335541 +decode-recall;len 130;char: 0.5557411909103394 +decode-recall;len 140;char: 0.4581485390663147 +decode-recall;len 150;char: 0.3910478353500366 +decode-recall;len 160;char: 0.41854411363601685 +decode-recall;len 170;char: 0.33042165637016296 +decode-recall;len 180;char: 0.34274256229400635 +decode-recall;len 190;char: 0.3266582489013672 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.05 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.8674345016479492 +decode-recall;len 40;char: 0.8332012891769409 +decode-recall;len 50;char: 0.7528607249259949 +decode-recall;len 60;char: 0.7222415804862976 +decode-recall;len 70;char: 0.5834665298461914 +decode-recall;len 80;char: 0.5074716210365295 +decode-recall;len 90;char: 0.47234201431274414 +decode-recall;len 100;char: 0.5220311880111694 +decode-recall;len 110;char: 0.4319549798965454 +decode-recall;len 120;char: 0.4564100503921509 +decode-recall;len 130;char: 0.4254682660102844 +decode-recall;len 140;char: 0.34199485182762146 +decode-recall;len 150;char: 0.3399096429347992 +decode-recall;len 160;char: 0.4847589433193207 +decode-recall;len 170;char: 0.32539382576942444 +decode-recall;len 180;char: 0.3075406551361084 +decode-recall;len 190;char: 0.3610549867153168 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.05 --eval_p 0.2 +decode-recall;len 10;char: 0.9618055820465088 +decode-recall;len 20;char: 0.8291666507720947 +decode-recall;len 30;char: 0.4688551425933838 +decode-recall;len 40;char: 0.5816378593444824 +decode-recall;len 50;char: 0.4773206114768982 +decode-recall;len 60;char: 0.43914398550987244 +decode-recall;len 70;char: 0.38287362456321716 +decode-recall;len 80;char: 0.5608065128326416 +decode-recall;len 90;char: 0.39451664686203003 +decode-recall;len 100;char: 0.37381359934806824 +decode-recall;len 110;char: 0.28276360034942627 +decode-recall;len 120;char: 0.35376426577568054 +decode-recall;len 130;char: 0.3038344085216522 +decode-recall;len 140;char: 0.4338037967681885 +decode-recall;len 150;char: 0.18268892168998718 +decode-recall;len 160;char: 0.22285714745521545 +decode-recall;len 170;char: 0.30137282609939575 +decode-recall;len 180;char: 0.3174936771392822 +decode-recall;len 190;char: 0.2593480050563812 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.1 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9901620745658875 +decode-recall;len 30;char: 0.9255373477935791 +decode-recall;len 40;char: 0.743520975112915 +decode-recall;len 50;char: 0.7581937313079834 +decode-recall;len 60;char: 0.6603555679321289 +decode-recall;len 70;char: 0.5828019976615906 +decode-recall;len 80;char: 0.6001811027526855 +decode-recall;len 90;char: 0.5565392971038818 +decode-recall;len 100;char: 0.5318486094474792 +decode-recall;len 110;char: 0.5522564053535461 +decode-recall;len 120;char: 0.5068241953849792 +decode-recall;len 130;char: 0.43129903078079224 +decode-recall;len 140;char: 0.5047030448913574 +decode-recall;len 150;char: 0.4378478229045868 +decode-recall;len 160;char: 0.4080753028392792 +decode-recall;len 170;char: 0.40392178297042847 +decode-recall;len 180;char: 0.4254626929759979 +decode-recall;len 190;char: 0.442452996969223 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.1 --eval_p 0.2 +decode-recall;len 10;char: 0.9583333730697632 +decode-recall;len 20;char: 0.9002728462219238 +decode-recall;len 30;char: 0.7925247550010681 +decode-recall;len 40;char: 0.7244037389755249 +decode-recall;len 50;char: 0.699919581413269 +decode-recall;len 60;char: 0.5029696226119995 +decode-recall;len 70;char: 0.4052213430404663 +decode-recall;len 80;char: 0.49082082509994507 +decode-recall;len 90;char: 0.46004074811935425 +decode-recall;len 100;char: 0.33652257919311523 +decode-recall;len 110;char: 0.3404495418071747 +decode-recall;len 120;char: 0.3469535708427429 +decode-recall;len 130;char: 0.350492000579834 +decode-recall;len 140;char: 0.39693590998649597 +decode-recall;len 150;char: 0.381633996963501 +decode-recall;len 160;char: 0.3210972547531128 +decode-recall;len 170;char: 0.33376121520996094 +decode-recall;len 180;char: 0.34458500146865845 +decode-recall;len 190;char: 0.335004985332489 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.1 --eval_p 0.2 +decode-recall;len 10;char: 0.8005952835083008 +decode-recall;len 20;char: 0.6736111640930176 +decode-recall;len 30;char: 0.5537950396537781 +decode-recall;len 40;char: 0.4513204097747803 +decode-recall;len 50;char: 0.311455100774765 +decode-recall;len 60;char: 0.1802721619606018 +decode-recall;len 70;char: 0.21805477142333984 +decode-recall;len 80;char: 0.24993780255317688 +decode-recall;len 90;char: 0.29131755232810974 +decode-recall;len 100;char: 0.16544771194458008 +decode-recall;len 110;char: 0.2017076015472412 +decode-recall;len 120;char: 0.18393096327781677 +decode-recall;len 130;char: 0.16801077127456665 +decode-recall;len 140;char: 0.1959303319454193 +decode-recall;len 150;char: 0.2644122838973999 +decode-recall;len 160;char: 0.21985027194023132 +decode-recall;len 170;char: 0.1945265531539917 +decode-recall;len 180;char: 0.21646937727928162 +decode-recall;len 190;char: 0.1822131872177124 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.1 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9869529008865356 +decode-recall;len 30;char: 0.8728418350219727 +decode-recall;len 40;char: 0.864414632320404 +decode-recall;len 50;char: 0.6632449626922607 +decode-recall;len 60;char: 0.5479481220245361 +decode-recall;len 70;char: 0.4733332097530365 +decode-recall;len 80;char: 0.5738755464553833 +decode-recall;len 90;char: 0.40295708179473877 +decode-recall;len 100;char: 0.4410110414028168 +decode-recall;len 110;char: 0.4437190294265747 +decode-recall;len 120;char: 0.4309413433074951 +decode-recall;len 130;char: 0.4518260657787323 +decode-recall;len 140;char: 0.4276697635650635 +decode-recall;len 150;char: 0.4664211869239807 +decode-recall;len 160;char: 0.356816828250885 +decode-recall;len 170;char: 0.4014633595943451 +decode-recall;len 180;char: 0.4299771785736084 +decode-recall;len 190;char: 0.3715551495552063 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.1 --eval_p 0.2 +decode-recall;len 10;char: 0.9583333730697632 +decode-recall;len 20;char: 0.9718074202537537 +decode-recall;len 30;char: 0.8457115888595581 +decode-recall;len 40;char: 0.658911943435669 +decode-recall;len 50;char: 0.6187795400619507 +decode-recall;len 60;char: 0.6275710463523865 +decode-recall;len 70;char: 0.4868698716163635 +decode-recall;len 80;char: 0.48520931601524353 +decode-recall;len 90;char: 0.4657071530818939 +decode-recall;len 100;char: 0.33369332551956177 +decode-recall;len 110;char: 0.411552369594574 +decode-recall;len 120;char: 0.39911651611328125 +decode-recall;len 130;char: 0.33584555983543396 +decode-recall;len 140;char: 0.3205629289150238 +decode-recall;len 150;char: 0.36368513107299805 +decode-recall;len 160;char: 0.31201380491256714 +decode-recall;len 170;char: 0.324365496635437 +decode-recall;len 180;char: 0.31340664625167847 +decode-recall;len 190;char: 0.31925249099731445 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.1 --eval_p 0.2 +decode-recall;len 10;char: 0.9074074029922485 +decode-recall;len 20;char: 0.4570460319519043 +decode-recall;len 30;char: 0.3140905499458313 +decode-recall;len 40;char: 0.3042418658733368 +decode-recall;len 50;char: 0.2035718411207199 +decode-recall;len 60;char: 0.15928983688354492 +decode-recall;len 70;char: 0.23700648546218872 +decode-recall;len 80;char: 0.1330643892288208 +decode-recall;len 90;char: 0.15007494390010834 +decode-recall;len 100;char: 0.1300116777420044 +decode-recall;len 110;char: 0.13750609755516052 +decode-recall;len 120;char: 0.15664038062095642 +decode-recall;len 130;char: 0.13783541321754456 +decode-recall;len 140;char: 0.14603254199028015 +decode-recall;len 150;char: 0.11519686877727509 +decode-recall;len 160;char: 0.1365790069103241 +decode-recall;len 170;char: 0.12290941178798676 +decode-recall;len 180;char: 0.14476385712623596 +decode-recall;len 190;char: 0.12720900774002075 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.1 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9895833730697632 +decode-recall;len 30;char: 0.8342961668968201 +decode-recall;len 40;char: 0.8046212196350098 +decode-recall;len 50;char: 0.6512132883071899 +decode-recall;len 60;char: 0.4827415645122528 +decode-recall;len 70;char: 0.5749771595001221 +decode-recall;len 80;char: 0.5007749795913696 +decode-recall;len 90;char: 0.5194576382637024 +decode-recall;len 100;char: 0.477404922246933 +decode-recall;len 110;char: 0.46378883719444275 +decode-recall;len 120;char: 0.40197715163230896 +decode-recall;len 130;char: 0.4369022250175476 +decode-recall;len 140;char: 0.46736904978752136 +decode-recall;len 150;char: 0.36626967787742615 +decode-recall;len 160;char: 0.39994508028030396 +decode-recall;len 170;char: 0.3682374954223633 +decode-recall;len 180;char: 0.43885454535484314 +decode-recall;len 190;char: 0.4132842421531677 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.1 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9322502613067627 +decode-recall;len 30;char: 0.9227776527404785 +decode-recall;len 40;char: 0.7326892614364624 +decode-recall;len 50;char: 0.5661479830741882 +decode-recall;len 60;char: 0.5060065984725952 +decode-recall;len 70;char: 0.4821687638759613 +decode-recall;len 80;char: 0.4036453664302826 +decode-recall;len 90;char: 0.40096378326416016 +decode-recall;len 100;char: 0.39637690782546997 +decode-recall;len 110;char: 0.3413451313972473 +decode-recall;len 120;char: 0.3408161997795105 +decode-recall;len 130;char: 0.3673515021800995 +decode-recall;len 140;char: 0.3456653952598572 +decode-recall;len 150;char: 0.3612663447856903 +decode-recall;len 160;char: 0.3254467248916626 +decode-recall;len 170;char: 0.3705964982509613 +decode-recall;len 180;char: 0.3159617781639099 +decode-recall;len 190;char: 0.365537166595459 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.1 --eval_p 0.2 +decode-recall;len 10;char: 0.9471726417541504 +decode-recall;len 20;char: 0.6505951881408691 +decode-recall;len 30;char: 0.5320034027099609 +decode-recall;len 40;char: 0.3808012008666992 +decode-recall;len 50;char: 0.2724428176879883 +decode-recall;len 60;char: 0.2585497498512268 +decode-recall;len 70;char: 0.2749856114387512 +decode-recall;len 80;char: 0.26465538144111633 +decode-recall;len 90;char: 0.21940243244171143 +decode-recall;len 100;char: 0.2506393790245056 +decode-recall;len 110;char: 0.22838537395000458 +decode-recall;len 120;char: 0.17841963469982147 +decode-recall;len 130;char: 0.20992547273635864 +decode-recall;len 140;char: 0.17429237067699432 +decode-recall;len 150;char: 0.1625237613916397 +decode-recall;len 160;char: 0.2133556604385376 +decode-recall;len 170;char: 0.20218747854232788 +decode-recall;len 180;char: 0.220212921500206 +decode-recall;len 190;char: 0.16022655367851257 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.3 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.9435390830039978 +decode-recall;len 40;char: 0.8982970714569092 +decode-recall;len 50;char: 0.8691365718841553 +decode-recall;len 60;char: 0.8378006219863892 +decode-recall;len 70;char: 0.7440425157546997 +decode-recall;len 80;char: 0.7698466777801514 +decode-recall;len 90;char: 0.7535136938095093 +decode-recall;len 100;char: 0.75446617603302 +decode-recall;len 110;char: 0.6734600067138672 +decode-recall;len 120;char: 0.6900326609611511 +decode-recall;len 130;char: 0.6815493106842041 +decode-recall;len 140;char: 0.7084835767745972 +decode-recall;len 150;char: 0.6981414556503296 +decode-recall;len 160;char: 0.6863945722579956 +decode-recall;len 170;char: 0.7069255709648132 +decode-recall;len 180;char: 0.6865876913070679 +decode-recall;len 190;char: 0.6524219512939453 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.3 --eval_p 0.2 +decode-recall;len 10;char: 0.9583333730697632 +decode-recall;len 20;char: 0.9421296119689941 +decode-recall;len 30;char: 0.9222162961959839 +decode-recall;len 40;char: 0.8073080778121948 +decode-recall;len 50;char: 0.7381507158279419 +decode-recall;len 60;char: 0.732856035232544 +decode-recall;len 70;char: 0.7350090742111206 +decode-recall;len 80;char: 0.6897566318511963 +decode-recall;len 90;char: 0.7063345909118652 +decode-recall;len 100;char: 0.6749348044395447 +decode-recall;len 110;char: 0.6465221047401428 +decode-recall;len 120;char: 0.6326786279678345 +decode-recall;len 130;char: 0.6330239772796631 +decode-recall;len 140;char: 0.6527335047721863 +decode-recall;len 150;char: 0.6128767728805542 +decode-recall;len 160;char: 0.6151697635650635 +decode-recall;len 170;char: 0.6298840045928955 +decode-recall;len 180;char: 0.6124444007873535 +decode-recall;len 190;char: 0.6448375582695007 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.3 --eval_p 0.2 +decode-recall;len 10;char: 0.6600363850593567 +decode-recall;len 20;char: 0.3344508111476898 +decode-recall;len 30;char: 0.4765571355819702 +decode-recall;len 40;char: 0.2240840047597885 +decode-recall;len 50;char: 0.29151952266693115 +decode-recall;len 60;char: 0.23906394839286804 +decode-recall;len 70;char: 0.21333836019039154 +decode-recall;len 80;char: 0.2380615770816803 +decode-recall;len 90;char: 0.27779340744018555 +decode-recall;len 100;char: 0.2464713752269745 +decode-recall;len 110;char: 0.1953481286764145 +decode-recall;len 120;char: 0.21387730538845062 +decode-recall;len 130;char: 0.201462060213089 +decode-recall;len 140;char: 0.21573278307914734 +decode-recall;len 150;char: 0.20382177829742432 +decode-recall;len 160;char: 0.23610351979732513 +decode-recall;len 170;char: 0.2074451744556427 +decode-recall;len 180;char: 0.19906732439994812 +decode-recall;len 190;char: 0.19827613234519958 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.3 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9953703880310059 +decode-recall;len 30;char: 0.9268221855163574 +decode-recall;len 40;char: 0.8662194609642029 +decode-recall;len 50;char: 0.843157172203064 +decode-recall;len 60;char: 0.7718565464019775 +decode-recall;len 70;char: 0.7653118968009949 +decode-recall;len 80;char: 0.7346062064170837 +decode-recall;len 90;char: 0.7510321140289307 +decode-recall;len 100;char: 0.7240527868270874 +decode-recall;len 110;char: 0.6666766405105591 +decode-recall;len 120;char: 0.6815626621246338 +decode-recall;len 130;char: 0.7079066038131714 +decode-recall;len 140;char: 0.6977232694625854 +decode-recall;len 150;char: 0.691788911819458 +decode-recall;len 160;char: 0.6984778642654419 +decode-recall;len 170;char: 0.6976935267448425 +decode-recall;len 180;char: 0.6548066139221191 +decode-recall;len 190;char: 0.6689004898071289 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.3 --eval_p 0.2 +decode-recall;len 10;char: 0.96875 +decode-recall;len 20;char: 0.9715909361839294 +decode-recall;len 30;char: 0.8228980302810669 +decode-recall;len 40;char: 0.8339889049530029 +decode-recall;len 50;char: 0.8176297545433044 +decode-recall;len 60;char: 0.715127170085907 +decode-recall;len 70;char: 0.6631646752357483 +decode-recall;len 80;char: 0.6746082305908203 +decode-recall;len 90;char: 0.6996448040008545 +decode-recall;len 100;char: 0.622255802154541 +decode-recall;len 110;char: 0.6857966184616089 +decode-recall;len 120;char: 0.6112550497055054 +decode-recall;len 130;char: 0.6432680487632751 +decode-recall;len 140;char: 0.6113813519477844 +decode-recall;len 150;char: 0.6265737414360046 +decode-recall;len 160;char: 0.6356077194213867 +decode-recall;len 170;char: 0.6034005880355835 +decode-recall;len 180;char: 0.6144005060195923 +decode-recall;len 190;char: 0.5878614187240601 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.3 --eval_p 0.2 +decode-recall;len 10;char: 0.8645833730697632 +decode-recall;len 20;char: 0.572677731513977 +decode-recall;len 30;char: 0.5184600353240967 +decode-recall;len 40;char: 0.39115363359451294 +decode-recall;len 50;char: 0.4322764277458191 +decode-recall;len 60;char: 0.43740856647491455 +decode-recall;len 70;char: 0.32567447423934937 +decode-recall;len 80;char: 0.3467879295349121 +decode-recall;len 90;char: 0.32071349024772644 +decode-recall;len 100;char: 0.3467264771461487 +decode-recall;len 110;char: 0.3168361485004425 +decode-recall;len 120;char: 0.3387337923049927 +decode-recall;len 130;char: 0.32136231660842896 +decode-recall;len 140;char: 0.29227930307388306 +decode-recall;len 150;char: 0.33454275131225586 +decode-recall;len 160;char: 0.3525650203227997 +decode-recall;len 170;char: 0.30792874097824097 +decode-recall;len 180;char: 0.31998902559280396 +decode-recall;len 190;char: 0.3139786422252655 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.3 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9791666865348816 +decode-recall;len 30;char: 0.9408086538314819 +decode-recall;len 40;char: 0.8784210085868835 +decode-recall;len 50;char: 0.8129867315292358 +decode-recall;len 60;char: 0.7748920917510986 +decode-recall;len 70;char: 0.8027647733688354 +decode-recall;len 80;char: 0.761201798915863 +decode-recall;len 90;char: 0.7482985258102417 +decode-recall;len 100;char: 0.7469801902770996 +decode-recall;len 110;char: 0.710640549659729 +decode-recall;len 120;char: 0.7185458540916443 +decode-recall;len 130;char: 0.7020198106765747 +decode-recall;len 140;char: 0.6733747720718384 +decode-recall;len 150;char: 0.6882290244102478 +decode-recall;len 160;char: 0.6663219332695007 +decode-recall;len 170;char: 0.677527129650116 +decode-recall;len 180;char: 0.6789318919181824 +decode-recall;len 190;char: 0.6825170516967773 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.3 --eval_p 0.2 +decode-recall;len 10;char: 0.9305555820465088 +decode-recall;len 20;char: 0.9618055820465088 +decode-recall;len 30;char: 0.8921191096305847 +decode-recall;len 40;char: 0.825943112373352 +decode-recall;len 50;char: 0.7371467351913452 +decode-recall;len 60;char: 0.7618536353111267 +decode-recall;len 70;char: 0.695140540599823 +decode-recall;len 80;char: 0.7064396739006042 +decode-recall;len 90;char: 0.6562975645065308 +decode-recall;len 100;char: 0.6504080295562744 +decode-recall;len 110;char: 0.6437991261482239 +decode-recall;len 120;char: 0.6451822519302368 +decode-recall;len 130;char: 0.6099204421043396 +decode-recall;len 140;char: 0.6382268667221069 +decode-recall;len 150;char: 0.603029191493988 +decode-recall;len 160;char: 0.5676153302192688 +decode-recall;len 170;char: 0.6249010562896729 +decode-recall;len 180;char: 0.6163811087608337 +decode-recall;len 190;char: 0.6133977770805359 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.3 --eval_p 0.2 +decode-recall;len 10;char: 0.8690476417541504 +decode-recall;len 20;char: 0.49112552404403687 +decode-recall;len 30;char: 0.3983008563518524 +decode-recall;len 40;char: 0.2724015414714813 +decode-recall;len 50;char: 0.32993316650390625 +decode-recall;len 60;char: 0.3003952205181122 +decode-recall;len 70;char: 0.2742759585380554 +decode-recall;len 80;char: 0.2064203917980194 +decode-recall;len 90;char: 0.23225107789039612 +decode-recall;len 100;char: 0.23314347863197327 +decode-recall;len 110;char: 0.24654196202754974 +decode-recall;len 120;char: 0.22206467390060425 +decode-recall;len 130;char: 0.23285317420959473 +decode-recall;len 140;char: 0.20671698451042175 +decode-recall;len 150;char: 0.2298043966293335 +decode-recall;len 160;char: 0.21389120817184448 +decode-recall;len 170;char: 0.22091364860534668 +decode-recall;len 180;char: 0.21985000371932983 +decode-recall;len 190;char: 0.23044972121715546 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.5 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9907407760620117 +decode-recall;len 30;char: 0.9909313917160034 +decode-recall;len 40;char: 0.9534218311309814 +decode-recall;len 50;char: 0.9309272170066833 +decode-recall;len 60;char: 0.8587601184844971 +decode-recall;len 70;char: 0.8398217558860779 +decode-recall;len 80;char: 0.7580549716949463 +decode-recall;len 90;char: 0.7583394050598145 +decode-recall;len 100;char: 0.7851530909538269 +decode-recall;len 110;char: 0.7623459696769714 +decode-recall;len 120;char: 0.7482661008834839 +decode-recall;len 130;char: 0.7432342767715454 +decode-recall;len 140;char: 0.738379716873169 +decode-recall;len 150;char: 0.7250335216522217 +decode-recall;len 160;char: 0.7086971998214722 +decode-recall;len 170;char: 0.718818187713623 +decode-recall;len 180;char: 0.7200788855552673 +decode-recall;len 190;char: 0.6964383125305176 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.5 --eval_p 0.2 +decode-recall;len 10;char: 0.8194445371627808 +decode-recall;len 20;char: 0.8582837581634521 +decode-recall;len 30;char: 0.937119722366333 +decode-recall;len 40;char: 0.803865373134613 +decode-recall;len 50;char: 0.6818654537200928 +decode-recall;len 60;char: 0.7132572531700134 +decode-recall;len 70;char: 0.6773876547813416 +decode-recall;len 80;char: 0.6395117044448853 +decode-recall;len 90;char: 0.6450985074043274 +decode-recall;len 100;char: 0.5965240597724915 +decode-recall;len 110;char: 0.5393710732460022 +decode-recall;len 120;char: 0.6088758707046509 +decode-recall;len 130;char: 0.5978315472602844 +decode-recall;len 140;char: 0.5646491050720215 +decode-recall;len 150;char: 0.5686163306236267 +decode-recall;len 160;char: 0.5757203102111816 +decode-recall;len 170;char: 0.5452824831008911 +decode-recall;len 180;char: 0.5671830177307129 +decode-recall;len 190;char: 0.5774551630020142 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.5 --eval_p 0.2 +decode-recall;len 10;char: 0.9548611640930176 +decode-recall;len 20;char: 0.85615074634552 +decode-recall;len 30;char: 0.6522904634475708 +decode-recall;len 40;char: 0.611971378326416 +decode-recall;len 50;char: 0.5472110509872437 +decode-recall;len 60;char: 0.5341077446937561 +decode-recall;len 70;char: 0.5420410633087158 +decode-recall;len 80;char: 0.56526780128479 +decode-recall;len 90;char: 0.51032555103302 +decode-recall;len 100;char: 0.5174462795257568 +decode-recall;len 110;char: 0.4888400733470917 +decode-recall;len 120;char: 0.4898042678833008 +decode-recall;len 130;char: 0.47341328859329224 +decode-recall;len 140;char: 0.4878457486629486 +decode-recall;len 150;char: 0.4507213830947876 +decode-recall;len 160;char: 0.4818737506866455 +decode-recall;len 170;char: 0.4744511842727661 +decode-recall;len 180;char: 0.46226412057876587 +decode-recall;len 190;char: 0.46705836057662964 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.5 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9523810148239136 +decode-recall;len 30;char: 0.9473793506622314 +decode-recall;len 40;char: 0.9220260977745056 +decode-recall;len 50;char: 0.9075289964675903 +decode-recall;len 60;char: 0.8406440615653992 +decode-recall;len 70;char: 0.8278672099113464 +decode-recall;len 80;char: 0.8007431030273438 +decode-recall;len 90;char: 0.7805484533309937 +decode-recall;len 100;char: 0.7738684415817261 +decode-recall;len 110;char: 0.7722265124320984 +decode-recall;len 120;char: 0.7478699088096619 +decode-recall;len 130;char: 0.7340854406356812 +decode-recall;len 140;char: 0.7826268672943115 +decode-recall;len 150;char: 0.7364875674247742 +decode-recall;len 160;char: 0.709068238735199 +decode-recall;len 170;char: 0.7189299464225769 +decode-recall;len 180;char: 0.689471960067749 +decode-recall;len 190;char: 0.7140445113182068 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.5 --eval_p 0.2 +decode-recall;len 10;char: 0.90625 +decode-recall;len 20;char: 0.9498001337051392 +decode-recall;len 30;char: 0.8791687488555908 +decode-recall;len 40;char: 0.8274297714233398 +decode-recall;len 50;char: 0.7400936484336853 +decode-recall;len 60;char: 0.7019209265708923 +decode-recall;len 70;char: 0.65241539478302 +decode-recall;len 80;char: 0.6632636189460754 +decode-recall;len 90;char: 0.6317170858383179 +decode-recall;len 100;char: 0.6020442247390747 +decode-recall;len 110;char: 0.590450644493103 +decode-recall;len 120;char: 0.6210407018661499 +decode-recall;len 130;char: 0.5791995525360107 +decode-recall;len 140;char: 0.5798863768577576 +decode-recall;len 150;char: 0.601799726486206 +decode-recall;len 160;char: 0.5630528330802917 +decode-recall;len 170;char: 0.5619609951972961 +decode-recall;len 180;char: 0.6025682687759399 +decode-recall;len 190;char: 0.5779660940170288 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.5 --eval_p 0.2 +decode-recall;len 10;char: 0.836805522441864 +decode-recall;len 20;char: 0.4833333194255829 +decode-recall;len 30;char: 0.48145586252212524 +decode-recall;len 40;char: 0.3498781621456146 +decode-recall;len 50;char: 0.39873144030570984 +decode-recall;len 60;char: 0.3715498447418213 +decode-recall;len 70;char: 0.353670209646225 +decode-recall;len 80;char: 0.3648030757904053 +decode-recall;len 90;char: 0.3424745202064514 +decode-recall;len 100;char: 0.3432161211967468 +decode-recall;len 110;char: 0.3193018436431885 +decode-recall;len 120;char: 0.31911104917526245 +decode-recall;len 130;char: 0.3444453477859497 +decode-recall;len 140;char: 0.3320445120334625 +decode-recall;len 150;char: 0.3374791145324707 +decode-recall;len 160;char: 0.3231242597103119 +decode-recall;len 170;char: 0.34090232849121094 +decode-recall;len 180;char: 0.3407845199108124 +decode-recall;len 190;char: 0.3258613348007202 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.5 --eval_p 0.2 +decode-recall;len 10;char: 0.9375 +decode-recall;len 20;char: 0.9916666746139526 +decode-recall;len 30;char: 0.9813231229782104 +decode-recall;len 40;char: 0.9238335490226746 +decode-recall;len 50;char: 0.9036890864372253 +decode-recall;len 60;char: 0.8551547527313232 +decode-recall;len 70;char: 0.8457245230674744 +decode-recall;len 80;char: 0.8065490126609802 +decode-recall;len 90;char: 0.7891215682029724 +decode-recall;len 100;char: 0.7491036653518677 +decode-recall;len 110;char: 0.7525693774223328 +decode-recall;len 120;char: 0.7694734334945679 +decode-recall;len 130;char: 0.7393015623092651 +decode-recall;len 140;char: 0.7225677967071533 +decode-recall;len 150;char: 0.7212843894958496 +decode-recall;len 160;char: 0.734257698059082 +decode-recall;len 170;char: 0.6891219615936279 +decode-recall;len 180;char: 0.7117804884910583 +decode-recall;len 190;char: 0.6882445216178894 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.5 --eval_p 0.2 +decode-recall;len 10;char: 0.9833333492279053 +decode-recall;len 20;char: 0.9750000238418579 +decode-recall;len 30;char: 0.8531581163406372 +decode-recall;len 40;char: 0.7389891147613525 +decode-recall;len 50;char: 0.7804772257804871 +decode-recall;len 60;char: 0.6867495775222778 +decode-recall;len 70;char: 0.6634873151779175 +decode-recall;len 80;char: 0.6458137035369873 +decode-recall;len 90;char: 0.6433965563774109 +decode-recall;len 100;char: 0.6214548945426941 +decode-recall;len 110;char: 0.5862085819244385 +decode-recall;len 120;char: 0.5911502838134766 +decode-recall;len 130;char: 0.6276798248291016 +decode-recall;len 140;char: 0.5953937768936157 +decode-recall;len 150;char: 0.5943379998207092 +decode-recall;len 160;char: 0.5930023193359375 +decode-recall;len 170;char: 0.5685731768608093 +decode-recall;len 180;char: 0.5869655609130859 +decode-recall;len 190;char: 0.5619823932647705 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.5 --eval_p 0.2 +decode-recall;len 10;char: 0.949999988079071 +decode-recall;len 20;char: 0.6192550659179688 +decode-recall;len 30;char: 0.6523866653442383 +decode-recall;len 40;char: 0.5307963490486145 +decode-recall;len 50;char: 0.49167609214782715 +decode-recall;len 60;char: 0.5510676503181458 +decode-recall;len 70;char: 0.4797154366970062 +decode-recall;len 80;char: 0.452669620513916 +decode-recall;len 90;char: 0.4472036361694336 +decode-recall;len 100;char: 0.44537752866744995 +decode-recall;len 110;char: 0.4138771891593933 +decode-recall;len 120;char: 0.4054841995239258 +decode-recall;len 130;char: 0.43578967452049255 +decode-recall;len 140;char: 0.4188133180141449 +decode-recall;len 150;char: 0.4241049289703369 +decode-recall;len 160;char: 0.4441852569580078 +decode-recall;len 170;char: 0.4179154336452484 +decode-recall;len 180;char: 0.4048658013343811 +decode-recall;len 190;char: 0.42767173051834106 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.8 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9791666865348816 +decode-recall;len 30;char: 0.9828704595565796 +decode-recall;len 40;char: 0.9869569540023804 +decode-recall;len 50;char: 0.9772884845733643 +decode-recall;len 60;char: 0.9276586771011353 +decode-recall;len 70;char: 0.8875151872634888 +decode-recall;len 80;char: 0.8635291457176208 +decode-recall;len 90;char: 0.8475548028945923 +decode-recall;len 100;char: 0.8094179630279541 +decode-recall;len 110;char: 0.8045461177825928 +decode-recall;len 120;char: 0.7662653923034668 +decode-recall;len 130;char: 0.7655806541442871 +decode-recall;len 140;char: 0.7381631731987 +decode-recall;len 150;char: 0.7473568916320801 +decode-recall;len 160;char: 0.7112125754356384 +decode-recall;len 170;char: 0.7062968611717224 +decode-recall;len 180;char: 0.6827616095542908 +decode-recall;len 190;char: 0.6957896947860718 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.8 --eval_p 0.2 +decode-recall;len 10;char: 0.9583333730697632 +decode-recall;len 20;char: 0.9548611044883728 +decode-recall;len 30;char: 0.8325728178024292 +decode-recall;len 40;char: 0.8083235621452332 +decode-recall;len 50;char: 0.770260214805603 +decode-recall;len 60;char: 0.6914340257644653 +decode-recall;len 70;char: 0.723605751991272 +decode-recall;len 80;char: 0.6134618520736694 +decode-recall;len 90;char: 0.606891930103302 +decode-recall;len 100;char: 0.6146922707557678 +decode-recall;len 110;char: 0.6125681400299072 +decode-recall;len 120;char: 0.5304244160652161 +decode-recall;len 130;char: 0.566857099533081 +decode-recall;len 140;char: 0.5805593729019165 +decode-recall;len 150;char: 0.5884743928909302 +decode-recall;len 160;char: 0.5708956718444824 +decode-recall;len 170;char: 0.5759567022323608 +decode-recall;len 180;char: 0.5468651652336121 +decode-recall;len 190;char: 0.5496891736984253 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.8 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9895833730697632 +decode-recall;len 30;char: 0.9284722805023193 +decode-recall;len 40;char: 0.8528604507446289 +decode-recall;len 50;char: 0.8468202352523804 +decode-recall;len 60;char: 0.8904173374176025 +decode-recall;len 70;char: 0.8033015727996826 +decode-recall;len 80;char: 0.8311757445335388 +decode-recall;len 90;char: 0.7786777019500732 +decode-recall;len 100;char: 0.7949981093406677 +decode-recall;len 110;char: 0.7750446796417236 +decode-recall;len 120;char: 0.762715756893158 +decode-recall;len 130;char: 0.7620160579681396 +decode-recall;len 140;char: 0.7418692111968994 +decode-recall;len 150;char: 0.7469586730003357 +decode-recall;len 160;char: 0.7572826147079468 +decode-recall;len 170;char: 0.7235020399093628 +decode-recall;len 180;char: 0.6999687552452087 +decode-recall;len 190;char: 0.7129938006401062 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.8 --eval_p 0.2 +decode-recall;len 10;char: 0.9583333730697632 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.981249988079071 +decode-recall;len 40;char: 0.9897727370262146 +decode-recall;len 50;char: 0.9446491599082947 +decode-recall;len 60;char: 0.8950605392456055 +decode-recall;len 70;char: 0.8651458621025085 +decode-recall;len 80;char: 0.8686129450798035 +decode-recall;len 90;char: 0.8505410552024841 +decode-recall;len 100;char: 0.8014773726463318 +decode-recall;len 110;char: 0.784605860710144 +decode-recall;len 120;char: 0.7831306457519531 +decode-recall;len 130;char: 0.7269362807273865 +decode-recall;len 140;char: 0.7595915794372559 +decode-recall;len 150;char: 0.7479097843170166 +decode-recall;len 160;char: 0.6970176696777344 +decode-recall;len 170;char: 0.7274097800254822 +decode-recall;len 180;char: 0.6906096339225769 +decode-recall;len 190;char: 0.6868793964385986 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.8 --eval_p 0.2 +decode-recall;len 10;char: 0.973214328289032 +decode-recall;len 20;char: 0.8201389312744141 +decode-recall;len 30;char: 0.9138709306716919 +decode-recall;len 40;char: 0.7744435667991638 +decode-recall;len 50;char: 0.6974474191665649 +decode-recall;len 60;char: 0.7664848566055298 +decode-recall;len 70;char: 0.6739470958709717 +decode-recall;len 80;char: 0.7126692533493042 +decode-recall;len 90;char: 0.6914657354354858 +decode-recall;len 100;char: 0.6080850958824158 +decode-recall;len 110;char: 0.6072434186935425 +decode-recall;len 120;char: 0.6107506155967712 +decode-recall;len 130;char: 0.6278916001319885 +decode-recall;len 140;char: 0.5481414198875427 +decode-recall;len 150;char: 0.5751882195472717 +decode-recall;len 160;char: 0.5407619476318359 +decode-recall;len 170;char: 0.5587838292121887 +decode-recall;len 180;char: 0.5860581398010254 +decode-recall;len 190;char: 0.5465268492698669 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.8 --eval_p 0.2 +decode-recall;len 10;char: 0.9375 +decode-recall;len 20;char: 0.9555555582046509 +decode-recall;len 30;char: 0.8900583982467651 +decode-recall;len 40;char: 0.7950167655944824 +decode-recall;len 50;char: 0.8781977891921997 +decode-recall;len 60;char: 0.8064751029014587 +decode-recall;len 70;char: 0.8282514810562134 +decode-recall;len 80;char: 0.7994370460510254 +decode-recall;len 90;char: 0.7433439493179321 +decode-recall;len 100;char: 0.7922543287277222 +decode-recall;len 110;char: 0.6899757385253906 +decode-recall;len 120;char: 0.7285052537918091 +decode-recall;len 130;char: 0.7418532371520996 +decode-recall;len 140;char: 0.720808744430542 +decode-recall;len 150;char: 0.7231107950210571 +decode-recall;len 160;char: 0.7141609191894531 +decode-recall;len 170;char: 0.6660211682319641 +decode-recall;len 180;char: 0.7065660357475281 +decode-recall;len 190;char: 0.6859707832336426 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.8 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 1.0 +decode-recall;len 40;char: 0.9658300876617432 +decode-recall;len 50;char: 0.9525513648986816 +decode-recall;len 60;char: 0.918858528137207 +decode-recall;len 70;char: 0.8773536086082458 +decode-recall;len 80;char: 0.8434528112411499 +decode-recall;len 90;char: 0.808948278427124 +decode-recall;len 100;char: 0.8034470081329346 +decode-recall;len 110;char: 0.8152009844779968 +decode-recall;len 120;char: 0.7670819163322449 +decode-recall;len 130;char: 0.7794027328491211 +decode-recall;len 140;char: 0.7110847234725952 +decode-recall;len 150;char: 0.764497697353363 +decode-recall;len 160;char: 0.6985361576080322 +decode-recall;len 170;char: 0.6776089668273926 +decode-recall;len 180;char: 0.6949111819267273 +decode-recall;len 190;char: 0.6976171731948853 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.8 --eval_p 0.2 +decode-recall;len 10;char: 0.9861111640930176 +decode-recall;len 20;char: 0.888144850730896 +decode-recall;len 30;char: 0.8097988963127136 +decode-recall;len 40;char: 0.8172166347503662 +decode-recall;len 50;char: 0.6727602481842041 +decode-recall;len 60;char: 0.7177674174308777 +decode-recall;len 70;char: 0.6086797118186951 +decode-recall;len 80;char: 0.6551274061203003 +decode-recall;len 90;char: 0.6809958219528198 +decode-recall;len 100;char: 0.6021314263343811 +decode-recall;len 110;char: 0.5834735631942749 +decode-recall;len 120;char: 0.5799581408500671 +decode-recall;len 130;char: 0.5800121426582336 +decode-recall;len 140;char: 0.5458855032920837 +decode-recall;len 150;char: 0.5399801731109619 +decode-recall;len 160;char: 0.5276792049407959 +decode-recall;len 170;char: 0.554257333278656 +decode-recall;len 180;char: 0.5406388640403748 +decode-recall;len 190;char: 0.5314722061157227 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.8 --eval_p 0.2 +decode-recall;len 10;char: 0.9583333730697632 +decode-recall;len 20;char: 0.882936418056488 +decode-recall;len 30;char: 0.9348049163818359 +decode-recall;len 40;char: 0.8779606819152832 +decode-recall;len 50;char: 0.8939616084098816 +decode-recall;len 60;char: 0.8700023889541626 +decode-recall;len 70;char: 0.8258230686187744 +decode-recall;len 80;char: 0.8854227066040039 +decode-recall;len 90;char: 0.8005064725875854 +decode-recall;len 100;char: 0.8782457113265991 +decode-recall;len 110;char: 0.8263241052627563 +decode-recall;len 120;char: 0.8087738752365112 +decode-recall;len 130;char: 0.7427432537078857 +decode-recall;len 140;char: 0.7950612306594849 +decode-recall;len 150;char: 0.748886227607727 +decode-recall;len 160;char: 0.7554525136947632 +decode-recall;len 170;char: 0.7527939677238464 +decode-recall;len 180;char: 0.7993921637535095 +decode-recall;len 190;char: 0.726841151714325 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.9 --eval_p 0.2 +decode-recall;len 10;char: 0.9583333730697632 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 1.0 +decode-recall;len 40;char: 0.9678030014038086 +decode-recall;len 50;char: 0.9521169066429138 +decode-recall;len 60;char: 0.8639028072357178 +decode-recall;len 70;char: 0.8123809695243835 +decode-recall;len 80;char: 0.8242279291152954 +decode-recall;len 90;char: 0.8353189826011658 +decode-recall;len 100;char: 0.7533464431762695 +decode-recall;len 110;char: 0.7831361293792725 +decode-recall;len 120;char: 0.7608394026756287 +decode-recall;len 130;char: 0.7129115462303162 +decode-recall;len 140;char: 0.7011476755142212 +decode-recall;len 150;char: 0.6878988742828369 +decode-recall;len 160;char: 0.6931523084640503 +decode-recall;len 170;char: 0.6626933813095093 +decode-recall;len 180;char: 0.6870617866516113 +decode-recall;len 190;char: 0.6752826571464539 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.9 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9013888835906982 +decode-recall;len 30;char: 0.9083333015441895 +decode-recall;len 40;char: 0.7887987494468689 +decode-recall;len 50;char: 0.7660624980926514 +decode-recall;len 60;char: 0.841802716255188 +decode-recall;len 70;char: 0.6861485838890076 +decode-recall;len 80;char: 0.6551030874252319 +decode-recall;len 90;char: 0.6761935949325562 +decode-recall;len 100;char: 0.6750428080558777 +decode-recall;len 110;char: 0.6614665985107422 +decode-recall;len 120;char: 0.6001971364021301 +decode-recall;len 130;char: 0.6182317733764648 +decode-recall;len 140;char: 0.6767972707748413 +decode-recall;len 150;char: 0.6080211400985718 +decode-recall;len 160;char: 0.5674567222595215 +decode-recall;len 170;char: 0.5931558609008789 +decode-recall;len 180;char: 0.5654088258743286 +decode-recall;len 190;char: 0.5579044818878174 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.9 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9791666865348816 +decode-recall;len 30;char: 0.9404761791229248 +decode-recall;len 40;char: 0.8696123957633972 +decode-recall;len 50;char: 0.8544973731040955 +decode-recall;len 60;char: 0.8526493310928345 +decode-recall;len 70;char: 0.7363061308860779 +decode-recall;len 80;char: 0.7992295622825623 +decode-recall;len 90;char: 0.8137679100036621 +decode-recall;len 100;char: 0.7868040800094604 +decode-recall;len 110;char: 0.7265734672546387 +decode-recall;len 120;char: 0.7159138917922974 +decode-recall;len 130;char: 0.7164024710655212 +decode-recall;len 140;char: 0.7150577902793884 +decode-recall;len 150;char: 0.6573066711425781 +decode-recall;len 160;char: 0.6945289373397827 +decode-recall;len 170;char: 0.69952392578125 +decode-recall;len 180;char: 0.6837365627288818 +decode-recall;len 190;char: 0.64756840467453 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.9 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9791666865348816 +decode-recall;len 30;char: 0.9644840955734253 +decode-recall;len 40;char: 0.9970238208770752 +decode-recall;len 50;char: 0.9181706309318542 +decode-recall;len 60;char: 0.9250776171684265 +decode-recall;len 70;char: 0.8647060394287109 +decode-recall;len 80;char: 0.8191255331039429 +decode-recall;len 90;char: 0.7759987711906433 +decode-recall;len 100;char: 0.7997018694877625 +decode-recall;len 110;char: 0.7182519435882568 +decode-recall;len 120;char: 0.7443990707397461 +decode-recall;len 130;char: 0.7254685163497925 +decode-recall;len 140;char: 0.7334386706352234 +decode-recall;len 150;char: 0.7266247272491455 +decode-recall;len 160;char: 0.6913710832595825 +decode-recall;len 170;char: 0.7061859369277954 +decode-recall;len 180;char: 0.6932925581932068 +decode-recall;len 190;char: 0.6575260758399963 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.9 --eval_p 0.2 +decode-recall;len 10;char: 0.9791666865348816 +decode-recall;len 20;char: 0.9791666865348816 +decode-recall;len 30;char: 0.824999988079071 +decode-recall;len 40;char: 0.7902778387069702 +decode-recall;len 50;char: 0.7798389196395874 +decode-recall;len 60;char: 0.7602667808532715 +decode-recall;len 70;char: 0.729653000831604 +decode-recall;len 80;char: 0.6382558345794678 +decode-recall;len 90;char: 0.6883137226104736 +decode-recall;len 100;char: 0.5995706915855408 +decode-recall;len 110;char: 0.6104980111122131 +decode-recall;len 120;char: 0.6245346069335938 +decode-recall;len 130;char: 0.6215924024581909 +decode-recall;len 140;char: 0.5740455389022827 +decode-recall;len 150;char: 0.612494170665741 +decode-recall;len 160;char: 0.6168403625488281 +decode-recall;len 170;char: 0.614740252494812 +decode-recall;len 180;char: 0.5679954290390015 +decode-recall;len 190;char: 0.583410382270813 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.9 --eval_p 0.2 +decode-recall;len 10;char: 0.9583333730697632 +decode-recall;len 20;char: 0.9409722685813904 +decode-recall;len 30;char: 0.9375 +decode-recall;len 40;char: 0.8963744640350342 +decode-recall;len 50;char: 0.9090608358383179 +decode-recall;len 60;char: 0.8498914241790771 +decode-recall;len 70;char: 0.8577141165733337 +decode-recall;len 80;char: 0.9093829989433289 +decode-recall;len 90;char: 0.8573232889175415 +decode-recall;len 100;char: 0.8991538882255554 +decode-recall;len 110;char: 0.879426121711731 +decode-recall;len 120;char: 0.8649908900260925 +decode-recall;len 130;char: 0.860377311706543 +decode-recall;len 140;char: 0.8327349424362183 +decode-recall;len 150;char: 0.8300876021385193 +decode-recall;len 160;char: 0.7872342467308044 +decode-recall;len 170;char: 0.8253532648086548 +decode-recall;len 180;char: 0.7772240042686462 +decode-recall;len 190;char: 0.8024992346763611 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.9 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.956944465637207 +decode-recall;len 40;char: 0.9676091074943542 +decode-recall;len 50;char: 0.9540509581565857 +decode-recall;len 60;char: 0.9137206077575684 +decode-recall;len 70;char: 0.8789081573486328 +decode-recall;len 80;char: 0.8346481323242188 +decode-recall;len 90;char: 0.783226490020752 +decode-recall;len 100;char: 0.7934631109237671 +decode-recall;len 110;char: 0.7901138067245483 +decode-recall;len 120;char: 0.743977963924408 +decode-recall;len 130;char: 0.7738521099090576 +decode-recall;len 140;char: 0.7545591592788696 +decode-recall;len 150;char: 0.6953773498535156 +decode-recall;len 160;char: 0.7165221571922302 +decode-recall;len 170;char: 0.719392716884613 +decode-recall;len 180;char: 0.6903481483459473 +decode-recall;len 190;char: 0.6796218156814575 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.9 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.908333420753479 +decode-recall;len 30;char: 0.9131945371627808 +decode-recall;len 40;char: 0.8388392329216003 +decode-recall;len 50;char: 0.7064312696456909 +decode-recall;len 60;char: 0.7692461013793945 +decode-recall;len 70;char: 0.6668691635131836 +decode-recall;len 80;char: 0.6911658048629761 +decode-recall;len 90;char: 0.6771348714828491 +decode-recall;len 100;char: 0.6823155283927917 +decode-recall;len 110;char: 0.6709555983543396 +decode-recall;len 120;char: 0.5901126861572266 +decode-recall;len 130;char: 0.6445789337158203 +decode-recall;len 140;char: 0.6153380870819092 +decode-recall;len 150;char: 0.5919438600540161 +decode-recall;len 160;char: 0.5983794927597046 +decode-recall;len 170;char: 0.5676887631416321 +decode-recall;len 180;char: 0.5871261358261108 +decode-recall;len 190;char: 0.5553034543991089 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.9 --eval_p 0.2 +decode-recall;len 10;char: 0.9791666865348816 +decode-recall;len 20;char: 0.9166666865348816 +decode-recall;len 30;char: 0.9791666865348816 +decode-recall;len 40;char: 0.8578373789787292 +decode-recall;len 50;char: 0.8614379167556763 +decode-recall;len 60;char: 0.7751901149749756 +decode-recall;len 70;char: 0.8119213581085205 +decode-recall;len 80;char: 0.8406252861022949 +decode-recall;len 90;char: 0.8265546560287476 +decode-recall;len 100;char: 0.770033597946167 +decode-recall;len 110;char: 0.7045918703079224 +decode-recall;len 120;char: 0.7581395506858826 +decode-recall;len 130;char: 0.7531711459159851 +decode-recall;len 140;char: 0.6766433119773865 +decode-recall;len 150;char: 0.7051569223403931 +decode-recall;len 160;char: 0.7285804748535156 +decode-recall;len 170;char: 0.6718816161155701 +decode-recall;len 180;char: 0.7284023761749268 +decode-recall;len 190;char: 0.6897444725036621 + diff --git a/source/official-code/mini/results/exp1.txt b/source/official-code/mini/results/exp1.txt new file mode 100644 index 0000000000000000000000000000000000000000..e600a8a5c42fb21655e70ffae60819b2ad156c47 --- /dev/null +++ b/source/official-code/mini/results/exp1.txt @@ -0,0 +1,315 @@ +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.8775083422660828 +decode-recall;len 40;char: 0.7878472805023193 +decode-recall;len 50;char: 0.779931902885437 +decode-recall;len 60;char: 0.6698293089866638 +decode-recall;len 70;char: 0.7145795822143555 +decode-recall;len 80;char: 0.7303370833396912 +decode-recall;len 90;char: 0.6688967943191528 +decode-recall;len 100;char: 0.6807419061660767 +decode-recall;len 110;char: 0.6615582704544067 +decode-recall;len 120;char: 0.6703016757965088 +decode-recall;len 130;char: 0.65156090259552 +decode-recall;len 140;char: 0.6549181938171387 +decode-recall;len 150;char: 0.6100916862487793 +decode-recall;len 160;char: 0.6227737069129944 +decode-recall;len 170;char: 0.6218762397766113 +decode-recall;len 180;char: 0.6378157138824463 +decode-recall;len 190;char: 0.6343463659286499 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9428800940513611 +decode-recall;len 30;char: 0.8781751394271851 +decode-recall;len 40;char: 0.6682714223861694 +decode-recall;len 50;char: 0.7252809405326843 +decode-recall;len 60;char: 0.6794140338897705 +decode-recall;len 70;char: 0.6175578236579895 +decode-recall;len 80;char: 0.5954453349113464 +decode-recall;len 90;char: 0.6101300716400146 +decode-recall;len 100;char: 0.5312048196792603 +decode-recall;len 110;char: 0.6228230595588684 +decode-recall;len 120;char: 0.5550618767738342 +decode-recall;len 130;char: 0.5715962052345276 +decode-recall;len 140;char: 0.582451343536377 +decode-recall;len 150;char: 0.5671732425689697 +decode-recall;len 160;char: 0.5244847536087036 +decode-recall;len 170;char: 0.5389078855514526 +decode-recall;len 180;char: 0.5349552631378174 +decode-recall;len 190;char: 0.5449061393737793 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 +decode-recall;len 10;char: 0.7083333730697632 +decode-recall;len 20;char: 0.14589029550552368 +decode-recall;len 30;char: 0.18950901925563812 +decode-recall;len 40;char: 0.14257484674453735 +decode-recall;len 50;char: 0.18468120694160461 +decode-recall;len 60;char: 0.15473750233650208 +decode-recall;len 70;char: 0.15340623259544373 +decode-recall;len 80;char: 0.13829541206359863 +decode-recall;len 90;char: 0.18044179677963257 +decode-recall;len 100;char: 0.12794899940490723 +decode-recall;len 110;char: 0.1125287339091301 +decode-recall;len 120;char: 0.08468940854072571 +decode-recall;len 130;char: 0.12111040204763412 +decode-recall;len 140;char: 0.15036657452583313 +decode-recall;len 150;char: 0.13345730304718018 +decode-recall;len 160;char: 0.1481773406267166 +decode-recall;len 170;char: 0.14079545438289642 +decode-recall;len 180;char: 0.12090370059013367 +decode-recall;len 190;char: 0.12192942947149277 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9833333492279053 +decode-recall;len 30;char: 0.8888968825340271 +decode-recall;len 40;char: 0.8189257979393005 +decode-recall;len 50;char: 0.7303134799003601 +decode-recall;len 60;char: 0.6955664157867432 +decode-recall;len 70;char: 0.7064517736434937 +decode-recall;len 80;char: 0.7340496778488159 +decode-recall;len 90;char: 0.6900209784507751 +decode-recall;len 100;char: 0.6017614603042603 +decode-recall;len 110;char: 0.5902054309844971 +decode-recall;len 120;char: 0.6762446761131287 +decode-recall;len 130;char: 0.6639660596847534 +decode-recall;len 140;char: 0.657488226890564 +decode-recall;len 150;char: 0.6201444864273071 +decode-recall;len 160;char: 0.6596233248710632 +decode-recall;len 170;char: 0.6294180154800415 +decode-recall;len 180;char: 0.6158746480941772 +decode-recall;len 190;char: 0.6603072881698608 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 +decode-recall;len 10;char: 0.942460298538208 +decode-recall;len 20;char: 0.9280754327774048 +decode-recall;len 30;char: 0.8568682670593262 +decode-recall;len 40;char: 0.7473962306976318 +decode-recall;len 50;char: 0.6486942768096924 +decode-recall;len 60;char: 0.6697766184806824 +decode-recall;len 70;char: 0.565479040145874 +decode-recall;len 80;char: 0.5847935676574707 +decode-recall;len 90;char: 0.5524064302444458 +decode-recall;len 100;char: 0.595447301864624 +decode-recall;len 110;char: 0.5667128562927246 +decode-recall;len 120;char: 0.5221312046051025 +decode-recall;len 130;char: 0.5041802525520325 +decode-recall;len 140;char: 0.5123937726020813 +decode-recall;len 150;char: 0.4836322069168091 +decode-recall;len 160;char: 0.49493879079818726 +decode-recall;len 170;char: 0.4973922371864319 +decode-recall;len 180;char: 0.5433299541473389 +decode-recall;len 190;char: 0.517164945602417 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 +decode-recall;len 10;char: 0.8625000715255737 +decode-recall;len 20;char: 0.5894299745559692 +decode-recall;len 30;char: 0.41376978158950806 +decode-recall;len 40;char: 0.3213827908039093 +decode-recall;len 50;char: 0.29491496086120605 +decode-recall;len 60;char: 0.3011758625507355 +decode-recall;len 70;char: 0.28489595651626587 +decode-recall;len 80;char: 0.29705166816711426 +decode-recall;len 90;char: 0.28921574354171753 +decode-recall;len 100;char: 0.2861822247505188 +decode-recall;len 110;char: 0.2796049118041992 +decode-recall;len 120;char: 0.2861015498638153 +decode-recall;len 130;char: 0.3231911063194275 +decode-recall;len 140;char: 0.23385882377624512 +decode-recall;len 150;char: 0.24211832880973816 +decode-recall;len 160;char: 0.23260992765426636 +decode-recall;len 170;char: 0.22150318324565887 +decode-recall;len 180;char: 0.2463362216949463 +decode-recall;len 190;char: 0.2458413690328598 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9895833730697632 +decode-recall;len 30;char: 0.9733421802520752 +decode-recall;len 40;char: 0.7982584834098816 +decode-recall;len 50;char: 0.7659971714019775 +decode-recall;len 60;char: 0.7882606983184814 +decode-recall;len 70;char: 0.7301746606826782 +decode-recall;len 80;char: 0.6399822235107422 +decode-recall;len 90;char: 0.6495417356491089 +decode-recall;len 100;char: 0.6361923217773438 +decode-recall;len 110;char: 0.6578222513198853 +decode-recall;len 120;char: 0.6751595735549927 +decode-recall;len 130;char: 0.6445558071136475 +decode-recall;len 140;char: 0.6752403974533081 +decode-recall;len 150;char: 0.617230236530304 +decode-recall;len 160;char: 0.6179834008216858 +decode-recall;len 170;char: 0.5883786082267761 +decode-recall;len 180;char: 0.6216842532157898 +decode-recall;len 190;char: 0.6274048089981079 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 +decode-recall;len 10;char: 0.9833333492279053 +decode-recall;len 20;char: 0.9866453409194946 +decode-recall;len 30;char: 0.8371952772140503 +decode-recall;len 40;char: 0.7886931300163269 +decode-recall;len 50;char: 0.7285668253898621 +decode-recall;len 60;char: 0.6136287450790405 +decode-recall;len 70;char: 0.6803306937217712 +decode-recall;len 80;char: 0.5803284645080566 +decode-recall;len 90;char: 0.5686504244804382 +decode-recall;len 100;char: 0.5425628423690796 +decode-recall;len 110;char: 0.594291090965271 +decode-recall;len 120;char: 0.6036128997802734 +decode-recall;len 130;char: 0.561013400554657 +decode-recall;len 140;char: 0.5865395665168762 +decode-recall;len 150;char: 0.5658999681472778 +decode-recall;len 160;char: 0.5437725782394409 +decode-recall;len 170;char: 0.5402870774269104 +decode-recall;len 180;char: 0.5234612226486206 +decode-recall;len 190;char: 0.5531586408615112 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 +decode-recall;len 10;char: 0.7936508655548096 +decode-recall;len 20;char: 0.4048230051994324 +decode-recall;len 30;char: 0.3621370196342468 +decode-recall;len 40;char: 0.18941551446914673 +decode-recall;len 50;char: 0.222143292427063 +decode-recall;len 60;char: 0.22839650511741638 +decode-recall;len 70;char: 0.16038155555725098 +decode-recall;len 80;char: 0.21509622037410736 +decode-recall;len 90;char: 0.19911162555217743 +decode-recall;len 100;char: 0.16718551516532898 +decode-recall;len 110;char: 0.20253485441207886 +decode-recall;len 120;char: 0.15207341313362122 +decode-recall;len 130;char: 0.16188490390777588 +decode-recall;len 140;char: 0.17364615201950073 +decode-recall;len 150;char: 0.18226152658462524 +decode-recall;len 160;char: 0.1863366812467575 +decode-recall;len 170;char: 0.17647027969360352 +decode-recall;len 180;char: 0.14299462735652924 +decode-recall;len 190;char: 0.15645663440227509 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 3 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9962121844291687 +decode-recall;len 30;char: 0.9435501098632812 +decode-recall;len 40;char: 0.8770415186882019 +decode-recall;len 50;char: 0.7432336211204529 +decode-recall;len 60;char: 0.7827555537223816 +decode-recall;len 70;char: 0.6909007430076599 +decode-recall;len 80;char: 0.7577899694442749 +decode-recall;len 90;char: 0.6977865099906921 +decode-recall;len 100;char: 0.6296929717063904 +decode-recall;len 110;char: 0.7050307989120483 +decode-recall;len 120;char: 0.6841203570365906 +decode-recall;len 130;char: 0.60634845495224 +decode-recall;len 140;char: 0.6830414533615112 +decode-recall;len 150;char: 0.5981296896934509 +decode-recall;len 160;char: 0.6254988312721252 +decode-recall;len 170;char: 0.653745174407959 +decode-recall;len 180;char: 0.6253479719161987 +decode-recall;len 190;char: 0.6321907043457031 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 3 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 +decode-recall;len 10;char: 0.9583333730697632 +decode-recall;len 20;char: 0.9540063738822937 +decode-recall;len 30;char: 0.7880260944366455 +decode-recall;len 40;char: 0.7272798418998718 +decode-recall;len 50;char: 0.6908947825431824 +decode-recall;len 60;char: 0.7016932964324951 +decode-recall;len 70;char: 0.5647580623626709 +decode-recall;len 80;char: 0.5950690507888794 +decode-recall;len 90;char: 0.603986382484436 +decode-recall;len 100;char: 0.5631927251815796 +decode-recall;len 110;char: 0.546149492263794 +decode-recall;len 120;char: 0.5774747729301453 +decode-recall;len 130;char: 0.5263231992721558 +decode-recall;len 140;char: 0.5484291315078735 +decode-recall;len 150;char: 0.5412784814834595 +decode-recall;len 160;char: 0.5805502533912659 +decode-recall;len 170;char: 0.5489440560340881 +decode-recall;len 180;char: 0.5342353582382202 +decode-recall;len 190;char: 0.5693216323852539 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 3 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 +decode-recall;len 10;char: 0.7682870626449585 +decode-recall;len 20;char: 0.27356523275375366 +decode-recall;len 30;char: 0.3033418655395508 +decode-recall;len 40;char: 0.2016887366771698 +decode-recall;len 50;char: 0.21671253442764282 +decode-recall;len 60;char: 0.21037690341472626 +decode-recall;len 70;char: 0.2513171434402466 +decode-recall;len 80;char: 0.15207341313362122 +decode-recall;len 90;char: 0.17399919033050537 +decode-recall;len 100;char: 0.172628253698349 +decode-recall;len 110;char: 0.16990332305431366 +decode-recall;len 120;char: 0.17563468217849731 +decode-recall;len 130;char: 0.16355368494987488 +decode-recall;len 140;char: 0.17920945584774017 +decode-recall;len 150;char: 0.18320785462856293 +decode-recall;len 160;char: 0.18640214204788208 +decode-recall;len 170;char: 0.15581053495407104 +decode-recall;len 180;char: 0.16412629187107086 +decode-recall;len 190;char: 0.1554805338382721 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 4 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9702020883560181 +decode-recall;len 30;char: 0.9046164751052856 +decode-recall;len 40;char: 0.8217551112174988 +decode-recall;len 50;char: 0.7075217962265015 +decode-recall;len 60;char: 0.748529314994812 +decode-recall;len 70;char: 0.7444896697998047 +decode-recall;len 80;char: 0.7078525424003601 +decode-recall;len 90;char: 0.6581627130508423 +decode-recall;len 100;char: 0.646033525466919 +decode-recall;len 110;char: 0.6687635183334351 +decode-recall;len 120;char: 0.6504418253898621 +decode-recall;len 130;char: 0.6423072814941406 +decode-recall;len 140;char: 0.6342665553092957 +decode-recall;len 150;char: 0.625262975692749 +decode-recall;len 160;char: 0.625392735004425 +decode-recall;len 170;char: 0.620815634727478 +decode-recall;len 180;char: 0.6411197185516357 +decode-recall;len 190;char: 0.6422944068908691 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 4 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9609789252281189 +decode-recall;len 30;char: 0.8496804237365723 +decode-recall;len 40;char: 0.6937371492385864 +decode-recall;len 50;char: 0.6760353446006775 +decode-recall;len 60;char: 0.5928332805633545 +decode-recall;len 70;char: 0.6130176186561584 +decode-recall;len 80;char: 0.5777794122695923 +decode-recall;len 90;char: 0.5546561479568481 +decode-recall;len 100;char: 0.5492798089981079 +decode-recall;len 110;char: 0.5669863224029541 +decode-recall;len 120;char: 0.5462659597396851 +decode-recall;len 130;char: 0.5104790925979614 +decode-recall;len 140;char: 0.5374269485473633 +decode-recall;len 150;char: 0.5218830108642578 +decode-recall;len 160;char: 0.5286056399345398 +decode-recall;len 170;char: 0.5090733170509338 +decode-recall;len 180;char: 0.4656354784965515 +decode-recall;len 190;char: 0.5166130661964417 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 4 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 +decode-recall;len 10;char: 0.5729167461395264 +decode-recall;len 20;char: 0.37468624114990234 +decode-recall;len 30;char: 0.19962051510810852 +decode-recall;len 40;char: 0.14387670159339905 +decode-recall;len 50;char: 0.16502772271633148 +decode-recall;len 60;char: 0.2023683786392212 +decode-recall;len 70;char: 0.1423397809267044 +decode-recall;len 80;char: 0.18381527066230774 +decode-recall;len 90;char: 0.17614537477493286 +decode-recall;len 100;char: 0.15067890286445618 +decode-recall;len 110;char: 0.16663864254951477 +decode-recall;len 120;char: 0.15414777398109436 +decode-recall;len 130;char: 0.130154088139534 +decode-recall;len 140;char: 0.2053641974925995 +decode-recall;len 150;char: 0.12706968188285828 +decode-recall;len 160;char: 0.1472962498664856 +decode-recall;len 170;char: 0.14979037642478943 +decode-recall;len 180;char: 0.14882826805114746 +decode-recall;len 190;char: 0.14130669832229614 + diff --git a/source/official-code/mini/results/exp2.txt b/source/official-code/mini/results/exp2.txt new file mode 100644 index 0000000000000000000000000000000000000000..4e044bdb24a0075bc32d98326bae8d5e153372c5 --- /dev/null +++ b/source/official-code/mini/results/exp2.txt @@ -0,0 +1,945 @@ +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9857954382896423 +decode-recall;len 30;char: 0.9481189250946045 +decode-recall;len 40;char: 0.7765020728111267 +decode-recall;len 50;char: 0.796113908290863 +decode-recall;len 60;char: 0.6873488426208496 +decode-recall;len 70;char: 0.6524432301521301 +decode-recall;len 80;char: 0.7316319942474365 +decode-recall;len 90;char: 0.6348778605461121 +decode-recall;len 100;char: 0.6419381499290466 +decode-recall;len 110;char: 0.6293102502822876 +decode-recall;len 120;char: 0.6673927307128906 +decode-recall;len 130;char: 0.6244180202484131 +decode-recall;len 140;char: 0.6385362148284912 +decode-recall;len 150;char: 0.6029466986656189 +decode-recall;len 160;char: 0.6233441829681396 +decode-recall;len 170;char: 0.6355259418487549 +decode-recall;len 180;char: 0.6281324625015259 +decode-recall;len 190;char: 0.5977818965911865 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +decode-recall;len 10;char: 0.875 +decode-recall;len 20;char: 0.9439484477043152 +decode-recall;len 30;char: 0.8522589206695557 +decode-recall;len 40;char: 0.7638342380523682 +decode-recall;len 50;char: 0.6145848035812378 +decode-recall;len 60;char: 0.6737411022186279 +decode-recall;len 70;char: 0.6180480122566223 +decode-recall;len 80;char: 0.5957629680633545 +decode-recall;len 90;char: 0.6400711536407471 +decode-recall;len 100;char: 0.5681103467941284 +decode-recall;len 110;char: 0.5489718914031982 +decode-recall;len 120;char: 0.5904321670532227 +decode-recall;len 130;char: 0.5642659664154053 +decode-recall;len 140;char: 0.5018225908279419 +decode-recall;len 150;char: 0.5310848951339722 +decode-recall;len 160;char: 0.5528694987297058 +decode-recall;len 170;char: 0.5155647993087769 +decode-recall;len 180;char: 0.5448036789894104 +decode-recall;len 190;char: 0.537481427192688 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +decode-recall;len 10;char: 0.910714328289032 +decode-recall;len 20;char: 0.5321263074874878 +decode-recall;len 30;char: 0.3841428756713867 +decode-recall;len 40;char: 0.31128135323524475 +decode-recall;len 50;char: 0.3405989110469818 +decode-recall;len 60;char: 0.18453489243984222 +decode-recall;len 70;char: 0.20356254279613495 +decode-recall;len 80;char: 0.23162470757961273 +decode-recall;len 90;char: 0.23364615440368652 +decode-recall;len 100;char: 0.20161408185958862 +decode-recall;len 110;char: 0.23725572228431702 +decode-recall;len 120;char: 0.22324803471565247 +decode-recall;len 130;char: 0.21468089520931244 +decode-recall;len 140;char: 0.250710129737854 +decode-recall;len 150;char: 0.2188185155391693 +decode-recall;len 160;char: 0.18580637872219086 +decode-recall;len 170;char: 0.1895160973072052 +decode-recall;len 180;char: 0.18975919485092163 +decode-recall;len 190;char: 0.2002156376838684 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9368686676025391 +decode-recall;len 30;char: 0.9324681758880615 +decode-recall;len 40;char: 0.8760429620742798 +decode-recall;len 50;char: 0.780876874923706 +decode-recall;len 60;char: 0.7402374744415283 +decode-recall;len 70;char: 0.7588195204734802 +decode-recall;len 80;char: 0.6482858657836914 +decode-recall;len 90;char: 0.6974760293960571 +decode-recall;len 100;char: 0.6427843570709229 +decode-recall;len 110;char: 0.6778674125671387 +decode-recall;len 120;char: 0.6715697050094604 +decode-recall;len 130;char: 0.6406140327453613 +decode-recall;len 140;char: 0.6121763586997986 +decode-recall;len 150;char: 0.6731640100479126 +decode-recall;len 160;char: 0.6342432498931885 +decode-recall;len 170;char: 0.6039286851882935 +decode-recall;len 180;char: 0.6037278175354004 +decode-recall;len 190;char: 0.6191205978393555 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.8653464317321777 +decode-recall;len 30;char: 0.8569021224975586 +decode-recall;len 40;char: 0.6747907996177673 +decode-recall;len 50;char: 0.6369307637214661 +decode-recall;len 60;char: 0.6595216989517212 +decode-recall;len 70;char: 0.597706139087677 +decode-recall;len 80;char: 0.584731936454773 +decode-recall;len 90;char: 0.5202387571334839 +decode-recall;len 100;char: 0.5755473375320435 +decode-recall;len 110;char: 0.5467240810394287 +decode-recall;len 120;char: 0.5068301558494568 +decode-recall;len 130;char: 0.5194376707077026 +decode-recall;len 140;char: 0.4990939497947693 +decode-recall;len 150;char: 0.4856300354003906 +decode-recall;len 160;char: 0.5057741403579712 +decode-recall;len 170;char: 0.49308228492736816 +decode-recall;len 180;char: 0.49896031618118286 +decode-recall;len 190;char: 0.48009490966796875 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +decode-recall;len 10;char: 0.5151785612106323 +decode-recall;len 20;char: 0.3633786141872406 +decode-recall;len 30;char: 0.19089525938034058 +decode-recall;len 40;char: 0.24046018719673157 +decode-recall;len 50;char: 0.17974647879600525 +decode-recall;len 60;char: 0.1619855761528015 +decode-recall;len 70;char: 0.1960638016462326 +decode-recall;len 80;char: 0.17676866054534912 +decode-recall;len 90;char: 0.11740681529045105 +decode-recall;len 100;char: 0.18084287643432617 +decode-recall;len 110;char: 0.14377854764461517 +decode-recall;len 120;char: 0.14048482477664948 +decode-recall;len 130;char: 0.15155741572380066 +decode-recall;len 140;char: 0.1640227735042572 +decode-recall;len 150;char: 0.18128477036952972 +decode-recall;len 160;char: 0.1636839359998703 +decode-recall;len 170;char: 0.1648077517747879 +decode-recall;len 180;char: 0.13127514719963074 +decode-recall;len 190;char: 0.14913657307624817 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +decode-recall;len 10;char: 0.9833333492279053 +decode-recall;len 20;char: 0.9907407760620117 +decode-recall;len 30;char: 0.9125736951828003 +decode-recall;len 40;char: 0.837796688079834 +decode-recall;len 50;char: 0.7298097610473633 +decode-recall;len 60;char: 0.6895817518234253 +decode-recall;len 70;char: 0.7496417760848999 +decode-recall;len 80;char: 0.690218448638916 +decode-recall;len 90;char: 0.6497451066970825 +decode-recall;len 100;char: 0.7143478393554688 +decode-recall;len 110;char: 0.6805140972137451 +decode-recall;len 120;char: 0.6837023496627808 +decode-recall;len 130;char: 0.6361327171325684 +decode-recall;len 140;char: 0.6612393260002136 +decode-recall;len 150;char: 0.673805832862854 +decode-recall;len 160;char: 0.6565903425216675 +decode-recall;len 170;char: 0.6483817100524902 +decode-recall;len 180;char: 0.6064517498016357 +decode-recall;len 190;char: 0.6653451919555664 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9790014028549194 +decode-recall;len 30;char: 0.8815261721611023 +decode-recall;len 40;char: 0.7676401138305664 +decode-recall;len 50;char: 0.6928615570068359 +decode-recall;len 60;char: 0.6106398105621338 +decode-recall;len 70;char: 0.60155189037323 +decode-recall;len 80;char: 0.6039615869522095 +decode-recall;len 90;char: 0.5773861408233643 +decode-recall;len 100;char: 0.5501826405525208 +decode-recall;len 110;char: 0.5592620372772217 +decode-recall;len 120;char: 0.5793810486793518 +decode-recall;len 130;char: 0.5466092824935913 +decode-recall;len 140;char: 0.5182152390480042 +decode-recall;len 150;char: 0.5674537420272827 +decode-recall;len 160;char: 0.5849040150642395 +decode-recall;len 170;char: 0.5325218439102173 +decode-recall;len 180;char: 0.5232909917831421 +decode-recall;len 190;char: 0.5468701124191284 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +decode-recall;len 10;char: 0.6445932984352112 +decode-recall;len 20;char: 0.26206502318382263 +decode-recall;len 30;char: 0.13306067883968353 +decode-recall;len 40;char: 0.16347606480121613 +decode-recall;len 50;char: 0.08464866876602173 +decode-recall;len 60;char: 0.1681709736585617 +decode-recall;len 70;char: 0.13883300125598907 +decode-recall;len 80;char: 0.11378434300422668 +decode-recall;len 90;char: 0.15620052814483643 +decode-recall;len 100;char: 0.1216215044260025 +decode-recall;len 110;char: 0.11574685573577881 +decode-recall;len 120;char: 0.11983730643987656 +decode-recall;len 130;char: 0.18693558871746063 +decode-recall;len 140;char: 0.13272088766098022 +decode-recall;len 150;char: 0.13606171309947968 +decode-recall;len 160;char: 0.12678101658821106 +decode-recall;len 170;char: 0.1420741230249405 +decode-recall;len 180;char: 0.13525152206420898 +decode-recall;len 190;char: 0.1258775293827057 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.9217180609703064 +decode-recall;len 40;char: 0.7814647555351257 +decode-recall;len 50;char: 0.8292438983917236 +decode-recall;len 60;char: 0.8081774711608887 +decode-recall;len 70;char: 0.7150792479515076 +decode-recall;len 80;char: 0.700808048248291 +decode-recall;len 90;char: 0.6555769443511963 +decode-recall;len 100;char: 0.6683669090270996 +decode-recall;len 110;char: 0.6523910164833069 +decode-recall;len 120;char: 0.668860912322998 +decode-recall;len 130;char: 0.6432649493217468 +decode-recall;len 140;char: 0.6964160203933716 +decode-recall;len 150;char: 0.656005859375 +decode-recall;len 160;char: 0.6167884469032288 +decode-recall;len 170;char: 0.6398297548294067 +decode-recall;len 180;char: 0.6134594678878784 +decode-recall;len 190;char: 0.6359747648239136 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +decode-recall;len 10;char: 0.9895833730697632 +decode-recall;len 20;char: 0.9704861640930176 +decode-recall;len 30;char: 0.8048054575920105 +decode-recall;len 40;char: 0.727003812789917 +decode-recall;len 50;char: 0.715934157371521 +decode-recall;len 60;char: 0.6678845882415771 +decode-recall;len 70;char: 0.6253581047058105 +decode-recall;len 80;char: 0.6059417724609375 +decode-recall;len 90;char: 0.5578285455703735 +decode-recall;len 100;char: 0.5921376347541809 +decode-recall;len 110;char: 0.5457515716552734 +decode-recall;len 120;char: 0.5313324928283691 +decode-recall;len 130;char: 0.5504909753799438 +decode-recall;len 140;char: 0.5474668741226196 +decode-recall;len 150;char: 0.5508555173873901 +decode-recall;len 160;char: 0.5437184572219849 +decode-recall;len 170;char: 0.5312497019767761 +decode-recall;len 180;char: 0.53267502784729 +decode-recall;len 190;char: 0.499489963054657 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +decode-recall;len 10;char: 0.8309027552604675 +decode-recall;len 20;char: 0.6597898602485657 +decode-recall;len 30;char: 0.4754653871059418 +decode-recall;len 40;char: 0.3933604657649994 +decode-recall;len 50;char: 0.2903965711593628 +decode-recall;len 60;char: 0.3299208879470825 +decode-recall;len 70;char: 0.3081795573234558 +decode-recall;len 80;char: 0.2332407832145691 +decode-recall;len 90;char: 0.27579227089881897 +decode-recall;len 100;char: 0.2261103242635727 +decode-recall;len 110;char: 0.2369527816772461 +decode-recall;len 120;char: 0.2198472023010254 +decode-recall;len 130;char: 0.1887332648038864 +decode-recall;len 140;char: 0.18380998075008392 +decode-recall;len 150;char: 0.21492618322372437 +decode-recall;len 160;char: 0.1744849681854248 +decode-recall;len 170;char: 0.19141410291194916 +decode-recall;len 180;char: 0.20667152106761932 +decode-recall;len 190;char: 0.20098501443862915 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +decode-recall;len 10;char: 0.9652777910232544 +decode-recall;len 20;char: 0.981249988079071 +decode-recall;len 30;char: 0.9162896871566772 +decode-recall;len 40;char: 0.7519625425338745 +decode-recall;len 50;char: 0.8022653460502625 +decode-recall;len 60;char: 0.790768563747406 +decode-recall;len 70;char: 0.7219197154045105 +decode-recall;len 80;char: 0.6751448512077332 +decode-recall;len 90;char: 0.6798254251480103 +decode-recall;len 100;char: 0.6709798574447632 +decode-recall;len 110;char: 0.6322716474533081 +decode-recall;len 120;char: 0.626436710357666 +decode-recall;len 130;char: 0.6425319314002991 +decode-recall;len 140;char: 0.6389114856719971 +decode-recall;len 150;char: 0.6401407718658447 +decode-recall;len 160;char: 0.6016178131103516 +decode-recall;len 170;char: 0.6156097650527954 +decode-recall;len 180;char: 0.6029258966445923 +decode-recall;len 190;char: 0.6638368964195251 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +decode-recall;len 10;char: 0.9479166865348816 +decode-recall;len 20;char: 0.9586805105209351 +decode-recall;len 30;char: 0.8248851299285889 +decode-recall;len 40;char: 0.6634087562561035 +decode-recall;len 50;char: 0.6766670942306519 +decode-recall;len 60;char: 0.6676832437515259 +decode-recall;len 70;char: 0.6043927669525146 +decode-recall;len 80;char: 0.5803816318511963 +decode-recall;len 90;char: 0.5978839993476868 +decode-recall;len 100;char: 0.5621085166931152 +decode-recall;len 110;char: 0.577261209487915 +decode-recall;len 120;char: 0.5378620028495789 +decode-recall;len 130;char: 0.5598148107528687 +decode-recall;len 140;char: 0.5237993001937866 +decode-recall;len 150;char: 0.5540605783462524 +decode-recall;len 160;char: 0.5714029669761658 +decode-recall;len 170;char: 0.5268584489822388 +decode-recall;len 180;char: 0.5293018221855164 +decode-recall;len 190;char: 0.4874608516693115 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +decode-recall;len 10;char: 0.8606481552124023 +decode-recall;len 20;char: 0.4876323342323303 +decode-recall;len 30;char: 0.407672643661499 +decode-recall;len 40;char: 0.23081311583518982 +decode-recall;len 50;char: 0.25273433327674866 +decode-recall;len 60;char: 0.2124183624982834 +decode-recall;len 70;char: 0.2456597536802292 +decode-recall;len 80;char: 0.23393362760543823 +decode-recall;len 90;char: 0.20789653062820435 +decode-recall;len 100;char: 0.18973487615585327 +decode-recall;len 110;char: 0.18320545554161072 +decode-recall;len 120;char: 0.20405608415603638 +decode-recall;len 130;char: 0.17950224876403809 +decode-recall;len 140;char: 0.1628461480140686 +decode-recall;len 150;char: 0.18458835780620575 +decode-recall;len 160;char: 0.1703064888715744 +decode-recall;len 170;char: 0.17916201055049896 +decode-recall;len 180;char: 0.18377724289894104 +decode-recall;len 190;char: 0.19723348319530487 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.9200409650802612 +decode-recall;len 40;char: 0.8174037337303162 +decode-recall;len 50;char: 0.7946717739105225 +decode-recall;len 60;char: 0.6955892443656921 +decode-recall;len 70;char: 0.7173835635185242 +decode-recall;len 80;char: 0.6786613464355469 +decode-recall;len 90;char: 0.6786417365074158 +decode-recall;len 100;char: 0.7212467193603516 +decode-recall;len 110;char: 0.6584938168525696 +decode-recall;len 120;char: 0.7142788767814636 +decode-recall;len 130;char: 0.68595290184021 +decode-recall;len 140;char: 0.6359708309173584 +decode-recall;len 150;char: 0.6521986126899719 +decode-recall;len 160;char: 0.59839928150177 +decode-recall;len 170;char: 0.6368191242218018 +decode-recall;len 180;char: 0.6323474645614624 +decode-recall;len 190;char: 0.5929872989654541 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +decode-recall;len 10;char: 0.8854166865348816 +decode-recall;len 20;char: 0.9483300447463989 +decode-recall;len 30;char: 0.74361252784729 +decode-recall;len 40;char: 0.8036803007125854 +decode-recall;len 50;char: 0.7149695158004761 +decode-recall;len 60;char: 0.7061573266983032 +decode-recall;len 70;char: 0.6213844418525696 +decode-recall;len 80;char: 0.594988226890564 +decode-recall;len 90;char: 0.5939693450927734 +decode-recall;len 100;char: 0.5246989727020264 +decode-recall;len 110;char: 0.5396659970283508 +decode-recall;len 120;char: 0.5293501615524292 +decode-recall;len 130;char: 0.589676022529602 +decode-recall;len 140;char: 0.5268396139144897 +decode-recall;len 150;char: 0.5243655443191528 +decode-recall;len 160;char: 0.5512975454330444 +decode-recall;len 170;char: 0.5084272623062134 +decode-recall;len 180;char: 0.5307620763778687 +decode-recall;len 190;char: 0.5406655073165894 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +decode-recall;len 10;char: 0.7333333492279053 +decode-recall;len 20;char: 0.5159493088722229 +decode-recall;len 30;char: 0.40928971767425537 +decode-recall;len 40;char: 0.3225904107093811 +decode-recall;len 50;char: 0.21182428300380707 +decode-recall;len 60;char: 0.23797929286956787 +decode-recall;len 70;char: 0.2094007134437561 +decode-recall;len 80;char: 0.18894490599632263 +decode-recall;len 90;char: 0.1546379178762436 +decode-recall;len 100;char: 0.1969231367111206 +decode-recall;len 110;char: 0.2052767276763916 +decode-recall;len 120;char: 0.19327673316001892 +decode-recall;len 130;char: 0.20958077907562256 +decode-recall;len 140;char: 0.1812768280506134 +decode-recall;len 150;char: 0.1685815453529358 +decode-recall;len 160;char: 0.18553470075130463 +decode-recall;len 170;char: 0.14581021666526794 +decode-recall;len 180;char: 0.15813803672790527 +decode-recall;len 190;char: 0.17005085945129395 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9962121844291687 +decode-recall;len 30;char: 0.9483031034469604 +decode-recall;len 40;char: 0.7927637100219727 +decode-recall;len 50;char: 0.7113593816757202 +decode-recall;len 60;char: 0.6992713809013367 +decode-recall;len 70;char: 0.7210916876792908 +decode-recall;len 80;char: 0.684494137763977 +decode-recall;len 90;char: 0.6997036933898926 +decode-recall;len 100;char: 0.6593635082244873 +decode-recall;len 110;char: 0.7142068147659302 +decode-recall;len 120;char: 0.6633939743041992 +decode-recall;len 130;char: 0.676382303237915 +decode-recall;len 140;char: 0.6387130618095398 +decode-recall;len 150;char: 0.6648999452590942 +decode-recall;len 160;char: 0.6112599968910217 +decode-recall;len 170;char: 0.6367149949073792 +decode-recall;len 180;char: 0.6693970561027527 +decode-recall;len 190;char: 0.6376804113388062 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +decode-recall;len 10;char: 0.9895833730697632 +decode-recall;len 20;char: 0.9583333730697632 +decode-recall;len 30;char: 0.7054013013839722 +decode-recall;len 40;char: 0.800169825553894 +decode-recall;len 50;char: 0.7180034518241882 +decode-recall;len 60;char: 0.7011809349060059 +decode-recall;len 70;char: 0.6263866424560547 +decode-recall;len 80;char: 0.5373177528381348 +decode-recall;len 90;char: 0.6004931330680847 +decode-recall;len 100;char: 0.5566891431808472 +decode-recall;len 110;char: 0.5606188774108887 +decode-recall;len 120;char: 0.6099505424499512 +decode-recall;len 130;char: 0.5857155323028564 +decode-recall;len 140;char: 0.5696146488189697 +decode-recall;len 150;char: 0.5226142406463623 +decode-recall;len 160;char: 0.5239015817642212 +decode-recall;len 170;char: 0.5927441120147705 +decode-recall;len 180;char: 0.5137729048728943 +decode-recall;len 190;char: 0.5398105382919312 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +decode-recall;len 10;char: 0.4097222089767456 +decode-recall;len 20;char: 0.3065972328186035 +decode-recall;len 30;char: 0.1969144344329834 +decode-recall;len 40;char: 0.2215590924024582 +decode-recall;len 50;char: 0.258955180644989 +decode-recall;len 60;char: 0.15078984200954437 +decode-recall;len 70;char: 0.15743999183177948 +decode-recall;len 80;char: 0.13903594017028809 +decode-recall;len 90;char: 0.16143184900283813 +decode-recall;len 100;char: 0.14665789902210236 +decode-recall;len 110;char: 0.1501779854297638 +decode-recall;len 120;char: 0.1528782844543457 +decode-recall;len 130;char: 0.12792648375034332 +decode-recall;len 140;char: 0.10070514678955078 +decode-recall;len 150;char: 0.09400784224271774 +decode-recall;len 160;char: 0.10724282264709473 +decode-recall;len 170;char: 0.13807566463947296 +decode-recall;len 180;char: 0.11700095236301422 +decode-recall;len 190;char: 0.16223937273025513 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9705128073692322 +decode-recall;len 30;char: 0.8862413763999939 +decode-recall;len 40;char: 0.8353152275085449 +decode-recall;len 50;char: 0.7849656939506531 +decode-recall;len 60;char: 0.7596746683120728 +decode-recall;len 70;char: 0.6956859827041626 +decode-recall;len 80;char: 0.72464919090271 +decode-recall;len 90;char: 0.6862657070159912 +decode-recall;len 100;char: 0.7093038558959961 +decode-recall;len 110;char: 0.6661278009414673 +decode-recall;len 120;char: 0.6615803837776184 +decode-recall;len 130;char: 0.6578917503356934 +decode-recall;len 140;char: 0.6366438865661621 +decode-recall;len 150;char: 0.6713576316833496 +decode-recall;len 160;char: 0.6468802094459534 +decode-recall;len 170;char: 0.6611111164093018 +decode-recall;len 180;char: 0.6123043298721313 +decode-recall;len 190;char: 0.6361969709396362 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +decode-recall;len 10;char: 0.9583333730697632 +decode-recall;len 20;char: 0.9350041151046753 +decode-recall;len 30;char: 0.7596926689147949 +decode-recall;len 40;char: 0.6846498847007751 +decode-recall;len 50;char: 0.6490609645843506 +decode-recall;len 60;char: 0.5914053916931152 +decode-recall;len 70;char: 0.6078483462333679 +decode-recall;len 80;char: 0.5980240106582642 +decode-recall;len 90;char: 0.533582866191864 +decode-recall;len 100;char: 0.5657905340194702 +decode-recall;len 110;char: 0.5308245420455933 +decode-recall;len 120;char: 0.5290818810462952 +decode-recall;len 130;char: 0.5218561887741089 +decode-recall;len 140;char: 0.5369037389755249 +decode-recall;len 150;char: 0.5021572709083557 +decode-recall;len 160;char: 0.5418306589126587 +decode-recall;len 170;char: 0.503264844417572 +decode-recall;len 180;char: 0.4660513997077942 +decode-recall;len 190;char: 0.4854733943939209 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +decode-recall;len 10;char: 0.5777778029441833 +decode-recall;len 20;char: 0.32144904136657715 +decode-recall;len 30;char: 0.1648125797510147 +decode-recall;len 40;char: 0.2603747546672821 +decode-recall;len 50;char: 0.18265698850154877 +decode-recall;len 60;char: 0.11478369683027267 +decode-recall;len 70;char: 0.13806948065757751 +decode-recall;len 80;char: 0.157049298286438 +decode-recall;len 90;char: 0.11408312618732452 +decode-recall;len 100;char: 0.1836479753255844 +decode-recall;len 110;char: 0.1709464192390442 +decode-recall;len 120;char: 0.12919360399246216 +decode-recall;len 130;char: 0.13401979207992554 +decode-recall;len 140;char: 0.14907331764698029 +decode-recall;len 150;char: 0.14018231630325317 +decode-recall;len 160;char: 0.13247399032115936 +decode-recall;len 170;char: 0.14502611756324768 +decode-recall;len 180;char: 0.1263023316860199 +decode-recall;len 190;char: 0.12185510993003845 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.9098358154296875 +decode-recall;len 40;char: 0.8470461368560791 +decode-recall;len 50;char: 0.7550141215324402 +decode-recall;len 60;char: 0.7235478162765503 +decode-recall;len 70;char: 0.7354334592819214 +decode-recall;len 80;char: 0.7553390264511108 +decode-recall;len 90;char: 0.6860110759735107 +decode-recall;len 100;char: 0.698352575302124 +decode-recall;len 110;char: 0.6746302843093872 +decode-recall;len 120;char: 0.6510419845581055 +decode-recall;len 130;char: 0.5795254111289978 +decode-recall;len 140;char: 0.6862127780914307 +decode-recall;len 150;char: 0.6315653324127197 +decode-recall;len 160;char: 0.6042711734771729 +decode-recall;len 170;char: 0.630547046661377 +decode-recall;len 180;char: 0.6219390630722046 +decode-recall;len 190;char: 0.6223297715187073 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +decode-recall;len 10;char: 0.9791666865348816 +decode-recall;len 20;char: 0.9270833730697632 +decode-recall;len 30;char: 0.8622963428497314 +decode-recall;len 40;char: 0.7192779779434204 +decode-recall;len 50;char: 0.65834641456604 +decode-recall;len 60;char: 0.6229159832000732 +decode-recall;len 70;char: 0.6384058594703674 +decode-recall;len 80;char: 0.5783934593200684 +decode-recall;len 90;char: 0.5784435272216797 +decode-recall;len 100;char: 0.5801171064376831 +decode-recall;len 110;char: 0.5514482855796814 +decode-recall;len 120;char: 0.5796990394592285 +decode-recall;len 130;char: 0.517315149307251 +decode-recall;len 140;char: 0.554282546043396 +decode-recall;len 150;char: 0.5096626877784729 +decode-recall;len 160;char: 0.5261738300323486 +decode-recall;len 170;char: 0.5212709903717041 +decode-recall;len 180;char: 0.5303078889846802 +decode-recall;len 190;char: 0.5213631391525269 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +decode-recall;len 10;char: 0.5 +decode-recall;len 20;char: 0.2925475239753723 +decode-recall;len 30;char: 0.1601872444152832 +decode-recall;len 40;char: 0.274406373500824 +decode-recall;len 50;char: 0.19165778160095215 +decode-recall;len 60;char: 0.15049193799495697 +decode-recall;len 70;char: 0.14343251287937164 +decode-recall;len 80;char: 0.1461275815963745 +decode-recall;len 90;char: 0.15721768140792847 +decode-recall;len 100;char: 0.11800568550825119 +decode-recall;len 110;char: 0.14269575476646423 +decode-recall;len 120;char: 0.1634974628686905 +decode-recall;len 130;char: 0.11433973908424377 +decode-recall;len 140;char: 0.14333099126815796 +decode-recall;len 150;char: 0.10384787619113922 +decode-recall;len 160;char: 0.10776695609092712 +decode-recall;len 170;char: 0.13306473195552826 +decode-recall;len 180;char: 0.11789155006408691 +decode-recall;len 190;char: 0.16224274039268494 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.9045926332473755 +decode-recall;len 40;char: 0.8130718469619751 +decode-recall;len 50;char: 0.7771099805831909 +decode-recall;len 60;char: 0.8022445440292358 +decode-recall;len 70;char: 0.7636990547180176 +decode-recall;len 80;char: 0.7147483825683594 +decode-recall;len 90;char: 0.7001899480819702 +decode-recall;len 100;char: 0.6655428409576416 +decode-recall;len 110;char: 0.6252335906028748 +decode-recall;len 120;char: 0.642221212387085 +decode-recall;len 130;char: 0.6473919153213501 +decode-recall;len 140;char: 0.6328368186950684 +decode-recall;len 150;char: 0.6140373945236206 +decode-recall;len 160;char: 0.654166042804718 +decode-recall;len 170;char: 0.6095566749572754 +decode-recall;len 180;char: 0.5964545607566833 +decode-recall;len 190;char: 0.6258598566055298 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.949999988079071 +decode-recall;len 30;char: 0.7640753984451294 +decode-recall;len 40;char: 0.6788992881774902 +decode-recall;len 50;char: 0.6574134230613708 +decode-recall;len 60;char: 0.5918235182762146 +decode-recall;len 70;char: 0.6556671857833862 +decode-recall;len 80;char: 0.5720927715301514 +decode-recall;len 90;char: 0.5384969115257263 +decode-recall;len 100;char: 0.5430512428283691 +decode-recall;len 110;char: 0.539043664932251 +decode-recall;len 120;char: 0.5352115035057068 +decode-recall;len 130;char: 0.5157890319824219 +decode-recall;len 140;char: 0.557007372379303 +decode-recall;len 150;char: 0.5414659380912781 +decode-recall;len 160;char: 0.5246944427490234 +decode-recall;len 170;char: 0.5265904664993286 +decode-recall;len 180;char: 0.5376178622245789 +decode-recall;len 190;char: 0.5249012112617493 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +decode-recall;len 10;char: 0.5972222089767456 +decode-recall;len 20;char: 0.47816774249076843 +decode-recall;len 30;char: 0.3070889115333557 +decode-recall;len 40;char: 0.23640280961990356 +decode-recall;len 50;char: 0.24993687868118286 +decode-recall;len 60;char: 0.2082376331090927 +decode-recall;len 70;char: 0.1850498616695404 +decode-recall;len 80;char: 0.19205129146575928 +decode-recall;len 90;char: 0.2117798924446106 +decode-recall;len 100;char: 0.1623145192861557 +decode-recall;len 110;char: 0.1848982870578766 +decode-recall;len 120;char: 0.18205218017101288 +decode-recall;len 130;char: 0.17577427625656128 +decode-recall;len 140;char: 0.15659110248088837 +decode-recall;len 150;char: 0.19223271310329437 +decode-recall;len 160;char: 0.16401630640029907 +decode-recall;len 170;char: 0.16221728920936584 +decode-recall;len 180;char: 0.165327787399292 +decode-recall;len 190;char: 0.1596059799194336 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9875000715255737 +decode-recall;len 30;char: 0.9320878386497498 +decode-recall;len 40;char: 0.8661415576934814 +decode-recall;len 50;char: 0.8285512924194336 +decode-recall;len 60;char: 0.6968681812286377 +decode-recall;len 70;char: 0.7414862513542175 +decode-recall;len 80;char: 0.7045133113861084 +decode-recall;len 90;char: 0.6419541835784912 +decode-recall;len 100;char: 0.6874333620071411 +decode-recall;len 110;char: 0.6642571687698364 +decode-recall;len 120;char: 0.6813787221908569 +decode-recall;len 130;char: 0.5995894074440002 +decode-recall;len 140;char: 0.6280650496482849 +decode-recall;len 150;char: 0.6578435301780701 +decode-recall;len 160;char: 0.6265575885772705 +decode-recall;len 170;char: 0.6349090337753296 +decode-recall;len 180;char: 0.5940706133842468 +decode-recall;len 190;char: 0.599079430103302 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +decode-recall;len 10;char: 0.9791666865348816 +decode-recall;len 20;char: 0.8820571303367615 +decode-recall;len 30;char: 0.7985374927520752 +decode-recall;len 40;char: 0.7640130519866943 +decode-recall;len 50;char: 0.6871943473815918 +decode-recall;len 60;char: 0.6044930219650269 +decode-recall;len 70;char: 0.6068270206451416 +decode-recall;len 80;char: 0.5612156987190247 +decode-recall;len 90;char: 0.5952797532081604 +decode-recall;len 100;char: 0.5987547636032104 +decode-recall;len 110;char: 0.5537230968475342 +decode-recall;len 120;char: 0.5262174606323242 +decode-recall;len 130;char: 0.554735541343689 +decode-recall;len 140;char: 0.5011629462242126 +decode-recall;len 150;char: 0.5295344591140747 +decode-recall;len 160;char: 0.5330309271812439 +decode-recall;len 170;char: 0.5053300857543945 +decode-recall;len 180;char: 0.5313178300857544 +decode-recall;len 190;char: 0.5224146842956543 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +decode-recall;len 10;char: 0.8736111521720886 +decode-recall;len 20;char: 0.5962514281272888 +decode-recall;len 30;char: 0.3832492232322693 +decode-recall;len 40;char: 0.2854436933994293 +decode-recall;len 50;char: 0.28662049770355225 +decode-recall;len 60;char: 0.26320356130599976 +decode-recall;len 70;char: 0.27538901567459106 +decode-recall;len 80;char: 0.22230809926986694 +decode-recall;len 90;char: 0.2164570689201355 +decode-recall;len 100;char: 0.19796155393123627 +decode-recall;len 110;char: 0.19086354970932007 +decode-recall;len 120;char: 0.18824295699596405 +decode-recall;len 130;char: 0.22032558917999268 +decode-recall;len 140;char: 0.21519076824188232 +decode-recall;len 150;char: 0.2081698179244995 +decode-recall;len 160;char: 0.1918410360813141 +decode-recall;len 170;char: 0.2025018185377121 +decode-recall;len 180;char: 0.20757195353507996 +decode-recall;len 190;char: 0.1966937780380249 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.8814672827720642 +decode-recall;len 40;char: 0.7867913246154785 +decode-recall;len 50;char: 0.6895325183868408 +decode-recall;len 60;char: 0.7046443819999695 +decode-recall;len 70;char: 0.6666063070297241 +decode-recall;len 80;char: 0.6720694899559021 +decode-recall;len 90;char: 0.6484885215759277 +decode-recall;len 100;char: 0.6371711492538452 +decode-recall;len 110;char: 0.691048264503479 +decode-recall;len 120;char: 0.6754792928695679 +decode-recall;len 130;char: 0.7069361209869385 +decode-recall;len 140;char: 0.612276554107666 +decode-recall;len 150;char: 0.6244098544120789 +decode-recall;len 160;char: 0.623556911945343 +decode-recall;len 170;char: 0.607271671295166 +decode-recall;len 180;char: 0.5816407203674316 +decode-recall;len 190;char: 0.650244951248169 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +decode-recall;len 10;char: 0.9583333730697632 +decode-recall;len 20;char: 0.9430555701255798 +decode-recall;len 30;char: 0.799754798412323 +decode-recall;len 40;char: 0.7385859489440918 +decode-recall;len 50;char: 0.5975728034973145 +decode-recall;len 60;char: 0.6370731592178345 +decode-recall;len 70;char: 0.5629557371139526 +decode-recall;len 80;char: 0.5503141283988953 +decode-recall;len 90;char: 0.5398728847503662 +decode-recall;len 100;char: 0.6032266616821289 +decode-recall;len 110;char: 0.5620935559272766 +decode-recall;len 120;char: 0.5564090609550476 +decode-recall;len 130;char: 0.5372361540794373 +decode-recall;len 140;char: 0.5545965433120728 +decode-recall;len 150;char: 0.4901084303855896 +decode-recall;len 160;char: 0.4898289144039154 +decode-recall;len 170;char: 0.4893970191478729 +decode-recall;len 180;char: 0.5164146423339844 +decode-recall;len 190;char: 0.49241623282432556 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +decode-recall;len 10;char: 0.6145833730697632 +decode-recall;len 20;char: 0.504405677318573 +decode-recall;len 30;char: 0.36866551637649536 +decode-recall;len 40;char: 0.2529973089694977 +decode-recall;len 50;char: 0.27220985293388367 +decode-recall;len 60;char: 0.25746679306030273 +decode-recall;len 70;char: 0.18574902415275574 +decode-recall;len 80;char: 0.17569009959697723 +decode-recall;len 90;char: 0.19749584794044495 +decode-recall;len 100;char: 0.18552538752555847 +decode-recall;len 110;char: 0.21581940352916718 +decode-recall;len 120;char: 0.169195756316185 +decode-recall;len 130;char: 0.1408652663230896 +decode-recall;len 140;char: 0.1793697476387024 +decode-recall;len 150;char: 0.1429600715637207 +decode-recall;len 160;char: 0.1649928092956543 +decode-recall;len 170;char: 0.18172171711921692 +decode-recall;len 180;char: 0.1577184498310089 +decode-recall;len 190;char: 0.15508031845092773 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9965277910232544 +decode-recall;len 30;char: 0.8744034171104431 +decode-recall;len 40;char: 0.892302393913269 +decode-recall;len 50;char: 0.8458890914916992 +decode-recall;len 60;char: 0.6796607971191406 +decode-recall;len 70;char: 0.7121025323867798 +decode-recall;len 80;char: 0.6559513807296753 +decode-recall;len 90;char: 0.668297529220581 +decode-recall;len 100;char: 0.6114368438720703 +decode-recall;len 110;char: 0.6307101249694824 +decode-recall;len 120;char: 0.625738263130188 +decode-recall;len 130;char: 0.6555134057998657 +decode-recall;len 140;char: 0.6295982599258423 +decode-recall;len 150;char: 0.6141443252563477 +decode-recall;len 160;char: 0.6056334972381592 +decode-recall;len 170;char: 0.6398143768310547 +decode-recall;len 180;char: 0.6461613774299622 +decode-recall;len 190;char: 0.6155368685722351 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +decode-recall;len 10;char: 0.946428656578064 +decode-recall;len 20;char: 0.9666666984558105 +decode-recall;len 30;char: 0.812795877456665 +decode-recall;len 40;char: 0.7272658348083496 +decode-recall;len 50;char: 0.7734569907188416 +decode-recall;len 60;char: 0.6438063383102417 +decode-recall;len 70;char: 0.6429185271263123 +decode-recall;len 80;char: 0.6431255340576172 +decode-recall;len 90;char: 0.629410982131958 +decode-recall;len 100;char: 0.5589584708213806 +decode-recall;len 110;char: 0.5648320913314819 +decode-recall;len 120;char: 0.5713593363761902 +decode-recall;len 130;char: 0.5484595894813538 +decode-recall;len 140;char: 0.5651421546936035 +decode-recall;len 150;char: 0.5002756118774414 +decode-recall;len 160;char: 0.5755627155303955 +decode-recall;len 170;char: 0.525777280330658 +decode-recall;len 180;char: 0.5337649583816528 +decode-recall;len 190;char: 0.5347590446472168 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +decode-recall;len 10;char: 0.6472222208976746 +decode-recall;len 20;char: 0.17733585834503174 +decode-recall;len 30;char: 0.15024355053901672 +decode-recall;len 40;char: 0.12981149554252625 +decode-recall;len 50;char: 0.14535856246948242 +decode-recall;len 60;char: 0.10574382543563843 +decode-recall;len 70;char: 0.13277830183506012 +decode-recall;len 80;char: 0.1709493100643158 +decode-recall;len 90;char: 0.14430084824562073 +decode-recall;len 100;char: 0.13733571767807007 +decode-recall;len 110;char: 0.13067194819450378 +decode-recall;len 120;char: 0.12612396478652954 +decode-recall;len 130;char: 0.15916596353054047 +decode-recall;len 140;char: 0.10852956771850586 +decode-recall;len 150;char: 0.13743522763252258 +decode-recall;len 160;char: 0.13055333495140076 +decode-recall;len 170;char: 0.12731705605983734 +decode-recall;len 180;char: 0.1334172487258911 +decode-recall;len 190;char: 0.11929592490196228 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.97510826587677 +decode-recall;len 30;char: 0.8888447284698486 +decode-recall;len 40;char: 0.7950708270072937 +decode-recall;len 50;char: 0.7576751112937927 +decode-recall;len 60;char: 0.7591592669487 +decode-recall;len 70;char: 0.7362310290336609 +decode-recall;len 80;char: 0.6810853481292725 +decode-recall;len 90;char: 0.6979155540466309 +decode-recall;len 100;char: 0.6948668956756592 +decode-recall;len 110;char: 0.6781880259513855 +decode-recall;len 120;char: 0.6494674682617188 +decode-recall;len 130;char: 0.6358701586723328 +decode-recall;len 140;char: 0.5861114263534546 +decode-recall;len 150;char: 0.6532060503959656 +decode-recall;len 160;char: 0.6281630396842957 +decode-recall;len 170;char: 0.6246960163116455 +decode-recall;len 180;char: 0.6560219526290894 +decode-recall;len 190;char: 0.5849053859710693 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.8706597685813904 +decode-recall;len 30;char: 0.8302647471427917 +decode-recall;len 40;char: 0.7332509756088257 +decode-recall;len 50;char: 0.7211450934410095 +decode-recall;len 60;char: 0.6725532412528992 +decode-recall;len 70;char: 0.6496734023094177 +decode-recall;len 80;char: 0.6570849418640137 +decode-recall;len 90;char: 0.5663783550262451 +decode-recall;len 100;char: 0.5443885326385498 +decode-recall;len 110;char: 0.6117117404937744 +decode-recall;len 120;char: 0.5574617981910706 +decode-recall;len 130;char: 0.5803755521774292 +decode-recall;len 140;char: 0.5589125156402588 +decode-recall;len 150;char: 0.571621298789978 +decode-recall;len 160;char: 0.5357110500335693 +decode-recall;len 170;char: 0.5527786612510681 +decode-recall;len 180;char: 0.5401501655578613 +decode-recall;len 190;char: 0.5411460995674133 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +decode-recall;len 10;char: 0.8250662088394165 +decode-recall;len 20;char: 0.314718633890152 +decode-recall;len 30;char: 0.24322953820228577 +decode-recall;len 40;char: 0.23458358645439148 +decode-recall;len 50;char: 0.257424920797348 +decode-recall;len 60;char: 0.2542210817337036 +decode-recall;len 70;char: 0.20907756686210632 +decode-recall;len 80;char: 0.1668921709060669 +decode-recall;len 90;char: 0.1717085838317871 +decode-recall;len 100;char: 0.16767609119415283 +decode-recall;len 110;char: 0.2213563174009323 +decode-recall;len 120;char: 0.16341714560985565 +decode-recall;len 130;char: 0.17582783102989197 +decode-recall;len 140;char: 0.17379474639892578 +decode-recall;len 150;char: 0.19769546389579773 +decode-recall;len 160;char: 0.21922682225704193 +decode-recall;len 170;char: 0.15277665853500366 +decode-recall;len 180;char: 0.17930924892425537 +decode-recall;len 190;char: 0.1718364655971527 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9722222685813904 +decode-recall;len 30;char: 0.9049786329269409 +decode-recall;len 40;char: 0.8412396907806396 +decode-recall;len 50;char: 0.7837128043174744 +decode-recall;len 60;char: 0.7445123195648193 +decode-recall;len 70;char: 0.7115182280540466 +decode-recall;len 80;char: 0.7370562553405762 +decode-recall;len 90;char: 0.7084958553314209 +decode-recall;len 100;char: 0.662047266960144 +decode-recall;len 110;char: 0.6808463931083679 +decode-recall;len 120;char: 0.6663265228271484 +decode-recall;len 130;char: 0.6435560584068298 +decode-recall;len 140;char: 0.6624194383621216 +decode-recall;len 150;char: 0.6649219393730164 +decode-recall;len 160;char: 0.6445488929748535 +decode-recall;len 170;char: 0.6558689475059509 +decode-recall;len 180;char: 0.631706178188324 +decode-recall;len 190;char: 0.6108523607254028 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +decode-recall;len 10;char: 0.9895833730697632 +decode-recall;len 20;char: 0.9177605509757996 +decode-recall;len 30;char: 0.8371918201446533 +decode-recall;len 40;char: 0.6355012059211731 +decode-recall;len 50;char: 0.5851731300354004 +decode-recall;len 60;char: 0.6799207925796509 +decode-recall;len 70;char: 0.6331335306167603 +decode-recall;len 80;char: 0.5052379369735718 +decode-recall;len 90;char: 0.5903139114379883 +decode-recall;len 100;char: 0.5759361982345581 +decode-recall;len 110;char: 0.5188043713569641 +decode-recall;len 120;char: 0.5321590900421143 +decode-recall;len 130;char: 0.5647989511489868 +decode-recall;len 140;char: 0.49294513463974 +decode-recall;len 150;char: 0.4947853684425354 +decode-recall;len 160;char: 0.5370632410049438 +decode-recall;len 170;char: 0.5189842581748962 +decode-recall;len 180;char: 0.5230935215950012 +decode-recall;len 190;char: 0.5167936086654663 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +decode-recall;len 10;char: 0.5244544148445129 +decode-recall;len 20;char: 0.32447728514671326 +decode-recall;len 30;char: 0.14320236444473267 +decode-recall;len 40;char: 0.18181370198726654 +decode-recall;len 50;char: 0.1522757112979889 +decode-recall;len 60;char: 0.07384894788265228 +decode-recall;len 70;char: 0.08663350343704224 +decode-recall;len 80;char: 0.1137092113494873 +decode-recall;len 90;char: 0.12919378280639648 +decode-recall;len 100;char: 0.07504618167877197 +decode-recall;len 110;char: 0.13911916315555573 +decode-recall;len 120;char: 0.13796061277389526 +decode-recall;len 130;char: 0.12146781384944916 +decode-recall;len 140;char: 0.1203484833240509 +decode-recall;len 150;char: 0.13195346295833588 +decode-recall;len 160;char: 0.11298161745071411 +decode-recall;len 170;char: 0.09581118822097778 +decode-recall;len 180;char: 0.11131709814071655 +decode-recall;len 190;char: 0.11690189689397812 + diff --git a/source/official-code/mini/results/exp3.txt b/source/official-code/mini/results/exp3.txt new file mode 100644 index 0000000000000000000000000000000000000000..57a7a9aa1aa07e33e97d189949b1039ffbd47dc8 --- /dev/null +++ b/source/official-code/mini/results/exp3.txt @@ -0,0 +1,378 @@ +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.9300050139427185 +decode-recall;len 40;char: 0.8335170149803162 +decode-recall;len 50;char: 0.8219469785690308 +decode-recall;len 60;char: 0.6777499914169312 +decode-recall;len 70;char: 0.6799766421318054 +decode-recall;len 80;char: 0.7459077835083008 +decode-recall;len 90;char: 0.6528873443603516 +decode-recall;len 100;char: 0.6782200336456299 +decode-recall;len 110;char: 0.6470831632614136 +decode-recall;len 120;char: 0.696831226348877 +decode-recall;len 130;char: 0.6607227325439453 +decode-recall;len 140;char: 0.6191130876541138 +decode-recall;len 150;char: 0.653496265411377 +decode-recall;len 160;char: 0.6471827030181885 +decode-recall;len 170;char: 0.6469752788543701 +decode-recall;len 180;char: 0.6459883451461792 +decode-recall;len 190;char: 0.6331021189689636 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9172300100326538 +decode-recall;len 30;char: 0.8421556949615479 +decode-recall;len 40;char: 0.7740015983581543 +decode-recall;len 50;char: 0.7502720355987549 +decode-recall;len 60;char: 0.6325803399085999 +decode-recall;len 70;char: 0.5371790528297424 +decode-recall;len 80;char: 0.6368503570556641 +decode-recall;len 90;char: 0.5669416189193726 +decode-recall;len 100;char: 0.615495502948761 +decode-recall;len 110;char: 0.5610825419425964 +decode-recall;len 120;char: 0.5151358842849731 +decode-recall;len 130;char: 0.5646538138389587 +decode-recall;len 140;char: 0.5130677223205566 +decode-recall;len 150;char: 0.5590145587921143 +decode-recall;len 160;char: 0.533210039138794 +decode-recall;len 170;char: 0.5318648219108582 +decode-recall;len 180;char: 0.5478252172470093 +decode-recall;len 190;char: 0.5146749019622803 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +decode-recall;len 10;char: 0.6951059103012085 +decode-recall;len 20;char: 0.3285383880138397 +decode-recall;len 30;char: 0.4091944396495819 +decode-recall;len 40;char: 0.1788443922996521 +decode-recall;len 50;char: 0.1832108199596405 +decode-recall;len 60;char: 0.14343300461769104 +decode-recall;len 70;char: 0.22378180921077728 +decode-recall;len 80;char: 0.1877935528755188 +decode-recall;len 90;char: 0.1816462278366089 +decode-recall;len 100;char: 0.236691415309906 +decode-recall;len 110;char: 0.19072142243385315 +decode-recall;len 120;char: 0.2110072374343872 +decode-recall;len 130;char: 0.16540460288524628 +decode-recall;len 140;char: 0.1825086772441864 +decode-recall;len 150;char: 0.18205849826335907 +decode-recall;len 160;char: 0.19688355922698975 +decode-recall;len 170;char: 0.18145672976970673 +decode-recall;len 180;char: 0.1713113784790039 +decode-recall;len 190;char: 0.180378720164299 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9787392616271973 +decode-recall;len 30;char: 0.9377347826957703 +decode-recall;len 40;char: 0.784146785736084 +decode-recall;len 50;char: 0.7250287532806396 +decode-recall;len 60;char: 0.7235509753227234 +decode-recall;len 70;char: 0.7205116748809814 +decode-recall;len 80;char: 0.7203218340873718 +decode-recall;len 90;char: 0.6862972974777222 +decode-recall;len 100;char: 0.6534634828567505 +decode-recall;len 110;char: 0.6716026067733765 +decode-recall;len 120;char: 0.6378985643386841 +decode-recall;len 130;char: 0.6184158325195312 +decode-recall;len 140;char: 0.6608231067657471 +decode-recall;len 150;char: 0.6509945392608643 +decode-recall;len 160;char: 0.5941810607910156 +decode-recall;len 170;char: 0.6497880816459656 +decode-recall;len 180;char: 0.6000831723213196 +decode-recall;len 190;char: 0.6546681523323059 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +decode-recall;len 10;char: 0.9375 +decode-recall;len 20;char: 0.8840939402580261 +decode-recall;len 30;char: 0.7330445051193237 +decode-recall;len 40;char: 0.7469500303268433 +decode-recall;len 50;char: 0.645897626876831 +decode-recall;len 60;char: 0.632148265838623 +decode-recall;len 70;char: 0.6460158228874207 +decode-recall;len 80;char: 0.579863429069519 +decode-recall;len 90;char: 0.5831581354141235 +decode-recall;len 100;char: 0.5516256093978882 +decode-recall;len 110;char: 0.5531567335128784 +decode-recall;len 120;char: 0.5407517552375793 +decode-recall;len 130;char: 0.5037959814071655 +decode-recall;len 140;char: 0.5403330326080322 +decode-recall;len 150;char: 0.5129690766334534 +decode-recall;len 160;char: 0.4879915714263916 +decode-recall;len 170;char: 0.5148331522941589 +decode-recall;len 180;char: 0.5029585361480713 +decode-recall;len 190;char: 0.5170564651489258 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +decode-recall;len 10;char: 0.7413194179534912 +decode-recall;len 20;char: 0.483035683631897 +decode-recall;len 30;char: 0.18477866053581238 +decode-recall;len 40;char: 0.17544597387313843 +decode-recall;len 50;char: 0.1747909039258957 +decode-recall;len 60;char: 0.22420834004878998 +decode-recall;len 70;char: 0.1813456118106842 +decode-recall;len 80;char: 0.211128830909729 +decode-recall;len 90;char: 0.159214049577713 +decode-recall;len 100;char: 0.14705757796764374 +decode-recall;len 110;char: 0.16639062762260437 +decode-recall;len 120;char: 0.1587965488433838 +decode-recall;len 130;char: 0.13417086005210876 +decode-recall;len 140;char: 0.15875211358070374 +decode-recall;len 150;char: 0.16845041513442993 +decode-recall;len 160;char: 0.15261995792388916 +decode-recall;len 170;char: 0.15000396966934204 +decode-recall;len 180;char: 0.1593104600906372 +decode-recall;len 190;char: 0.13628333806991577 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.9246537089347839 +decode-recall;len 40;char: 0.8068775534629822 +decode-recall;len 50;char: 0.7455372214317322 +decode-recall;len 60;char: 0.7754408121109009 +decode-recall;len 70;char: 0.7440401911735535 +decode-recall;len 80;char: 0.7222821712493896 +decode-recall;len 90;char: 0.6999057531356812 +decode-recall;len 100;char: 0.6425032615661621 +decode-recall;len 110;char: 0.6614408493041992 +decode-recall;len 120;char: 0.6654138565063477 +decode-recall;len 130;char: 0.6817609071731567 +decode-recall;len 140;char: 0.6178048849105835 +decode-recall;len 150;char: 0.6247284412384033 +decode-recall;len 160;char: 0.657397985458374 +decode-recall;len 170;char: 0.6196130514144897 +decode-recall;len 180;char: 0.6247954368591309 +decode-recall;len 190;char: 0.6356694102287292 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +decode-recall;len 10;char: 0.9583333730697632 +decode-recall;len 20;char: 0.9296296834945679 +decode-recall;len 30;char: 0.8430840373039246 +decode-recall;len 40;char: 0.6233396530151367 +decode-recall;len 50;char: 0.7189385294914246 +decode-recall;len 60;char: 0.6750313639640808 +decode-recall;len 70;char: 0.5595303177833557 +decode-recall;len 80;char: 0.6079089641571045 +decode-recall;len 90;char: 0.5600098371505737 +decode-recall;len 100;char: 0.5773749351501465 +decode-recall;len 110;char: 0.591343879699707 +decode-recall;len 120;char: 0.551140308380127 +decode-recall;len 130;char: 0.5441816449165344 +decode-recall;len 140;char: 0.5454056859016418 +decode-recall;len 150;char: 0.5090282559394836 +decode-recall;len 160;char: 0.5356278419494629 +decode-recall;len 170;char: 0.5120245218276978 +decode-recall;len 180;char: 0.5138335824012756 +decode-recall;len 190;char: 0.5560343861579895 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +decode-recall;len 10;char: 0.8833333849906921 +decode-recall;len 20;char: 0.6143364906311035 +decode-recall;len 30;char: 0.5293505191802979 +decode-recall;len 40;char: 0.3954339027404785 +decode-recall;len 50;char: 0.37278491258621216 +decode-recall;len 60;char: 0.36568889021873474 +decode-recall;len 70;char: 0.3105822205543518 +decode-recall;len 80;char: 0.2627548575401306 +decode-recall;len 90;char: 0.2132152020931244 +decode-recall;len 100;char: 0.23667101562023163 +decode-recall;len 110;char: 0.21301281452178955 +decode-recall;len 120;char: 0.2686419188976288 +decode-recall;len 130;char: 0.23829779028892517 +decode-recall;len 140;char: 0.26237940788269043 +decode-recall;len 150;char: 0.23859164118766785 +decode-recall;len 160;char: 0.21880090236663818 +decode-recall;len 170;char: 0.23902562260627747 +decode-recall;len 180;char: 0.245384082198143 +decode-recall;len 190;char: 0.24230216443538666 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +decode-recall;len 10;char: 0.9583333730697632 +decode-recall;len 20;char: 0.9926282167434692 +decode-recall;len 30;char: 0.9406682252883911 +decode-recall;len 40;char: 0.8545048236846924 +decode-recall;len 50;char: 0.7118894457817078 +decode-recall;len 60;char: 0.7318679690361023 +decode-recall;len 70;char: 0.7061545252799988 +decode-recall;len 80;char: 0.763960063457489 +decode-recall;len 90;char: 0.6742888689041138 +decode-recall;len 100;char: 0.6821407675743103 +decode-recall;len 110;char: 0.6576045751571655 +decode-recall;len 120;char: 0.6483147144317627 +decode-recall;len 130;char: 0.6711956262588501 +decode-recall;len 140;char: 0.6858240365982056 +decode-recall;len 150;char: 0.643815279006958 +decode-recall;len 160;char: 0.6444854736328125 +decode-recall;len 170;char: 0.6130489110946655 +decode-recall;len 180;char: 0.6464442610740662 +decode-recall;len 190;char: 0.6236898899078369 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +decode-recall;len 10;char: 0.9861111640930176 +decode-recall;len 20;char: 0.8705445528030396 +decode-recall;len 30;char: 0.8884432315826416 +decode-recall;len 40;char: 0.6727033853530884 +decode-recall;len 50;char: 0.6951701045036316 +decode-recall;len 60;char: 0.683139979839325 +decode-recall;len 70;char: 0.6288458108901978 +decode-recall;len 80;char: 0.6206592321395874 +decode-recall;len 90;char: 0.620155930519104 +decode-recall;len 100;char: 0.5806885361671448 +decode-recall;len 110;char: 0.5893956422805786 +decode-recall;len 120;char: 0.553773045539856 +decode-recall;len 130;char: 0.5516093969345093 +decode-recall;len 140;char: 0.5436662435531616 +decode-recall;len 150;char: 0.5310966968536377 +decode-recall;len 160;char: 0.5339881181716919 +decode-recall;len 170;char: 0.5245247483253479 +decode-recall;len 180;char: 0.5396906733512878 +decode-recall;len 190;char: 0.5267771482467651 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +decode-recall;len 10;char: 0.5885416865348816 +decode-recall;len 20;char: 0.2182975709438324 +decode-recall;len 30;char: 0.09084596484899521 +decode-recall;len 40;char: 0.12665696442127228 +decode-recall;len 50;char: 0.13299690186977386 +decode-recall;len 60;char: 0.13869336247444153 +decode-recall;len 70;char: 0.10678893327713013 +decode-recall;len 80;char: 0.11442933976650238 +decode-recall;len 90;char: 0.13989867269992828 +decode-recall;len 100;char: 0.10713121294975281 +decode-recall;len 110;char: 0.10871787369251251 +decode-recall;len 120;char: 0.11040852963924408 +decode-recall;len 130;char: 0.10360579192638397 +decode-recall;len 140;char: 0.11319144815206528 +decode-recall;len 150;char: 0.11743124574422836 +decode-recall;len 160;char: 0.14536309242248535 +decode-recall;len 170;char: 0.11261790990829468 +decode-recall;len 180;char: 0.13185876607894897 +decode-recall;len 190;char: 0.12393175065517426 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9884614944458008 +decode-recall;len 30;char: 0.9623287916183472 +decode-recall;len 40;char: 0.8627625703811646 +decode-recall;len 50;char: 0.7635731101036072 +decode-recall;len 60;char: 0.7511459589004517 +decode-recall;len 70;char: 0.7314006686210632 +decode-recall;len 80;char: 0.7112910747528076 +decode-recall;len 90;char: 0.684020459651947 +decode-recall;len 100;char: 0.6573872566223145 +decode-recall;len 110;char: 0.6090949773788452 +decode-recall;len 120;char: 0.6489355564117432 +decode-recall;len 130;char: 0.6113131046295166 +decode-recall;len 140;char: 0.6334589719772339 +decode-recall;len 150;char: 0.6230292320251465 +decode-recall;len 160;char: 0.6023654341697693 +decode-recall;len 170;char: 0.6256827116012573 +decode-recall;len 180;char: 0.6033241748809814 +decode-recall;len 190;char: 0.6156405210494995 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +decode-recall;len 10;char: 0.9861111640930176 +decode-recall;len 20;char: 0.9676226377487183 +decode-recall;len 30;char: 0.7552444338798523 +decode-recall;len 40;char: 0.6144415736198425 +decode-recall;len 50;char: 0.7227336168289185 +decode-recall;len 60;char: 0.5945339202880859 +decode-recall;len 70;char: 0.588092565536499 +decode-recall;len 80;char: 0.5646895170211792 +decode-recall;len 90;char: 0.5394814014434814 +decode-recall;len 100;char: 0.569091796875 +decode-recall;len 110;char: 0.5704605579376221 +decode-recall;len 120;char: 0.5426182746887207 +decode-recall;len 130;char: 0.561195969581604 +decode-recall;len 140;char: 0.5298658013343811 +decode-recall;len 150;char: 0.5469775199890137 +decode-recall;len 160;char: 0.5313927531242371 +decode-recall;len 170;char: 0.5648210048675537 +decode-recall;len 180;char: 0.5446791052818298 +decode-recall;len 190;char: 0.5171298980712891 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +decode-recall;len 10;char: 0.887499988079071 +decode-recall;len 20;char: 0.5049031972885132 +decode-recall;len 30;char: 0.3636002242565155 +decode-recall;len 40;char: 0.2956494390964508 +decode-recall;len 50;char: 0.28633347153663635 +decode-recall;len 60;char: 0.22331684827804565 +decode-recall;len 70;char: 0.19068996608257294 +decode-recall;len 80;char: 0.2361278235912323 +decode-recall;len 90;char: 0.2189529836177826 +decode-recall;len 100;char: 0.20580846071243286 +decode-recall;len 110;char: 0.21201744675636292 +decode-recall;len 120;char: 0.21898743510246277 +decode-recall;len 130;char: 0.18625697493553162 +decode-recall;len 140;char: 0.18324902653694153 +decode-recall;len 150;char: 0.15659871697425842 +decode-recall;len 160;char: 0.15560074150562286 +decode-recall;len 170;char: 0.18564067780971527 +decode-recall;len 180;char: 0.1910371035337448 +decode-recall;len 190;char: 0.2045222967863083 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.9107207655906677 +decode-recall;len 40;char: 0.8269185423851013 +decode-recall;len 50;char: 0.7453967928886414 +decode-recall;len 60;char: 0.7407805919647217 +decode-recall;len 70;char: 0.7544044852256775 +decode-recall;len 80;char: 0.7684503793716431 +decode-recall;len 90;char: 0.635055422782898 +decode-recall;len 100;char: 0.685064971446991 +decode-recall;len 110;char: 0.6779649257659912 +decode-recall;len 120;char: 0.6434332132339478 +decode-recall;len 130;char: 0.659149169921875 +decode-recall;len 140;char: 0.6711055636405945 +decode-recall;len 150;char: 0.6199322938919067 +decode-recall;len 160;char: 0.6356821060180664 +decode-recall;len 170;char: 0.6684190034866333 +decode-recall;len 180;char: 0.6107656359672546 +decode-recall;len 190;char: 0.6369938254356384 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9504985809326172 +decode-recall;len 30;char: 0.7867263555526733 +decode-recall;len 40;char: 0.7951889038085938 +decode-recall;len 50;char: 0.7383913993835449 +decode-recall;len 60;char: 0.6667335033416748 +decode-recall;len 70;char: 0.6068558692932129 +decode-recall;len 80;char: 0.6116631031036377 +decode-recall;len 90;char: 0.5868622064590454 +decode-recall;len 100;char: 0.5563531517982483 +decode-recall;len 110;char: 0.5554388761520386 +decode-recall;len 120;char: 0.5917830467224121 +decode-recall;len 130;char: 0.5768574476242065 +decode-recall;len 140;char: 0.5371814966201782 +decode-recall;len 150;char: 0.5343965291976929 +decode-recall;len 160;char: 0.5512199401855469 +decode-recall;len 170;char: 0.5382224321365356 +decode-recall;len 180;char: 0.5168865919113159 +decode-recall;len 190;char: 0.495849609375 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +decode-recall;len 10;char: 0.6510416865348816 +decode-recall;len 20;char: 0.17294976115226746 +decode-recall;len 30;char: 0.17886099219322205 +decode-recall;len 40;char: 0.14452123641967773 +decode-recall;len 50;char: 0.19416609406471252 +decode-recall;len 60;char: 0.15481024980545044 +decode-recall;len 70;char: 0.19985675811767578 +decode-recall;len 80;char: 0.12189578264951706 +decode-recall;len 90;char: 0.15388597548007965 +decode-recall;len 100;char: 0.1421794891357422 +decode-recall;len 110;char: 0.15771391987800598 +decode-recall;len 120;char: 0.12115597724914551 +decode-recall;len 130;char: 0.15683430433273315 +decode-recall;len 140;char: 0.15481194853782654 +decode-recall;len 150;char: 0.16925114393234253 +decode-recall;len 160;char: 0.1455858051776886 +decode-recall;len 170;char: 0.13251498341560364 +decode-recall;len 180;char: 0.1238851472735405 +decode-recall;len 190;char: 0.15943123400211334 + diff --git a/source/official-code/mini/results/exp4.txt b/source/official-code/mini/results/exp4.txt new file mode 100644 index 0000000000000000000000000000000000000000..279c1650ff7c8ca061034f9f0ff7d77a3489975c --- /dev/null +++ b/source/official-code/mini/results/exp4.txt @@ -0,0 +1,1323 @@ +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 0.9992938041687012 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 0.999772310256958 + +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 0.9991830587387085 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 0.999772310256958 + +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 0.9995421171188354 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 0.9993489980697632 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 0.9997259378433228 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 0.9997106790542603 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 0.9997459650039673 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 0.9969512224197388 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 0.999772310256958 + +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 0.9996246695518494 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 0.9994980692863464 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 0.9961538314819336 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 0.9990458488464355 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 0.9988584518432617 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 0.9992331862449646 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 0.9997619390487671 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 0.9972677230834961 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 0.9995183348655701 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 0.9997276663780212 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 0.9997563362121582 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 0.9995471239089966 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 0.9997710585594177 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 0.999691367149353 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 0.9994292259216309 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 0.9991883039474487 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 0.9996032118797302 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 0.9997106790542603 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 0.9997684955596924 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 0.9990530014038086 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 0.999451756477356 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 0.999666690826416 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 0.9997444152832031 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 0.9997563362121582 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 0.9994131922721863 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 0.9996280074119568 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 0.997459352016449 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 0.999316930770874 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 0.9964953660964966 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 0.9997444152832031 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 0.9997459650039673 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 0.9991258978843689 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model hybrid --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model T_rope --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + +Command: python3 main.py --model mamba --train_task var-copy --eval_task var-copy --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +var-copy;len 10;char: 1.0 +var-copy;len 20;char: 1.0 +var-copy;len 30;char: 1.0 +var-copy;len 40;char: 1.0 +var-copy;len 50;char: 1.0 +var-copy;len 60;char: 1.0 +var-copy;len 70;char: 1.0 +var-copy;len 80;char: 1.0 +var-copy;len 90;char: 1.0 +var-copy;len 100;char: 1.0 +var-copy;len 110;char: 1.0 +var-copy;len 120;char: 1.0 +var-copy;len 130;char: 1.0 +var-copy;len 140;char: 1.0 +var-copy;len 150;char: 1.0 +var-copy;len 160;char: 1.0 +var-copy;len 170;char: 1.0 +var-copy;len 180;char: 1.0 +var-copy;len 190;char: 1.0 + diff --git a/source/official-code/mini/results/exp5.txt b/source/official-code/mini/results/exp5.txt new file mode 100644 index 0000000000000000000000000000000000000000..84db8d0475c18e8e2fc196475809d8892a6b3a29 --- /dev/null +++ b/source/official-code/mini/results/exp5.txt @@ -0,0 +1,1323 @@ +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9895833730697632 +decode-recall;len 30;char: 0.9401459097862244 +decode-recall;len 40;char: 0.8334232568740845 +decode-recall;len 50;char: 0.7410728931427002 +decode-recall;len 60;char: 0.7440469264984131 +decode-recall;len 70;char: 0.7679757475852966 +decode-recall;len 80;char: 0.6640232801437378 +decode-recall;len 90;char: 0.7128407955169678 +decode-recall;len 100;char: 0.6686648726463318 +decode-recall;len 110;char: 0.6583247780799866 +decode-recall;len 120;char: 0.6383575201034546 +decode-recall;len 130;char: 0.6983312368392944 +decode-recall;len 140;char: 0.6999043822288513 +decode-recall;len 150;char: 0.6575045585632324 +decode-recall;len 160;char: 0.6229016184806824 +decode-recall;len 170;char: 0.665700376033783 +decode-recall;len 180;char: 0.6462929248809814 +decode-recall;len 190;char: 0.6073886752128601 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9341856241226196 +decode-recall;len 30;char: 0.8618327975273132 +decode-recall;len 40;char: 0.6972179412841797 +decode-recall;len 50;char: 0.6574066281318665 +decode-recall;len 60;char: 0.6579768061637878 +decode-recall;len 70;char: 0.6011039018630981 +decode-recall;len 80;char: 0.612204909324646 +decode-recall;len 90;char: 0.6340547204017639 +decode-recall;len 100;char: 0.5791993737220764 +decode-recall;len 110;char: 0.49885424971580505 +decode-recall;len 120;char: 0.5475881695747375 +decode-recall;len 130;char: 0.54685378074646 +decode-recall;len 140;char: 0.5583546161651611 +decode-recall;len 150;char: 0.5473698377609253 +decode-recall;len 160;char: 0.5532939434051514 +decode-recall;len 170;char: 0.5134667158126831 +decode-recall;len 180;char: 0.5432230830192566 +decode-recall;len 190;char: 0.5456497669219971 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +decode-recall;len 10;char: 0.42306551337242126 +decode-recall;len 20;char: 0.2631430923938751 +decode-recall;len 30;char: 0.23799178004264832 +decode-recall;len 40;char: 0.19140037894248962 +decode-recall;len 50;char: 0.19173240661621094 +decode-recall;len 60;char: 0.17587372660636902 +decode-recall;len 70;char: 0.18543705344200134 +decode-recall;len 80;char: 0.1452794075012207 +decode-recall;len 90;char: 0.13615421950817108 +decode-recall;len 100;char: 0.11343860626220703 +decode-recall;len 110;char: 0.12241708487272263 +decode-recall;len 120;char: 0.16825592517852783 +decode-recall;len 130;char: 0.14226476848125458 +decode-recall;len 140;char: 0.1798049807548523 +decode-recall;len 150;char: 0.1383255571126938 +decode-recall;len 160;char: 0.14999563992023468 +decode-recall;len 170;char: 0.1522013545036316 +decode-recall;len 180;char: 0.14550447463989258 +decode-recall;len 190;char: 0.16314595937728882 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9722222089767456 +decode-recall;len 30;char: 0.9226147532463074 +decode-recall;len 40;char: 0.875922441482544 +decode-recall;len 50;char: 0.767220675945282 +decode-recall;len 60;char: 0.7545914649963379 +decode-recall;len 70;char: 0.7178835868835449 +decode-recall;len 80;char: 0.7454590201377869 +decode-recall;len 90;char: 0.6528136730194092 +decode-recall;len 100;char: 0.6491771340370178 +decode-recall;len 110;char: 0.6629111766815186 +decode-recall;len 120;char: 0.6645820140838623 +decode-recall;len 130;char: 0.6704065799713135 +decode-recall;len 140;char: 0.614205539226532 +decode-recall;len 150;char: 0.6334755420684814 +decode-recall;len 160;char: 0.6450020670890808 +decode-recall;len 170;char: 0.5959906578063965 +decode-recall;len 180;char: 0.6241759657859802 +decode-recall;len 190;char: 0.6373628377914429 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.967013955116272 +decode-recall;len 30;char: 0.8183695077896118 +decode-recall;len 40;char: 0.7517191767692566 +decode-recall;len 50;char: 0.676607608795166 +decode-recall;len 60;char: 0.5843058228492737 +decode-recall;len 70;char: 0.6067114472389221 +decode-recall;len 80;char: 0.5728663206100464 +decode-recall;len 90;char: 0.5981696844100952 +decode-recall;len 100;char: 0.49219927191734314 +decode-recall;len 110;char: 0.5076602697372437 +decode-recall;len 120;char: 0.5378480553627014 +decode-recall;len 130;char: 0.48678815364837646 +decode-recall;len 140;char: 0.5152526497840881 +decode-recall;len 150;char: 0.4912416934967041 +decode-recall;len 160;char: 0.516014814376831 +decode-recall;len 170;char: 0.5147825479507446 +decode-recall;len 180;char: 0.4608975350856781 +decode-recall;len 190;char: 0.49390649795532227 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +decode-recall;len 10;char: 0.9907407760620117 +decode-recall;len 20;char: 0.7224639654159546 +decode-recall;len 30;char: 0.47928011417388916 +decode-recall;len 40;char: 0.31634506583213806 +decode-recall;len 50;char: 0.33335715532302856 +decode-recall;len 60;char: 0.2973012328147888 +decode-recall;len 70;char: 0.30062204599380493 +decode-recall;len 80;char: 0.3092619478702545 +decode-recall;len 90;char: 0.3478805422782898 +decode-recall;len 100;char: 0.26963067054748535 +decode-recall;len 110;char: 0.2511848211288452 +decode-recall;len 120;char: 0.2955073416233063 +decode-recall;len 130;char: 0.2959226667881012 +decode-recall;len 140;char: 0.27691882848739624 +decode-recall;len 150;char: 0.250771701335907 +decode-recall;len 160;char: 0.24764928221702576 +decode-recall;len 170;char: 0.2543005049228668 +decode-recall;len 180;char: 0.23227578401565552 +decode-recall;len 190;char: 0.25504767894744873 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9687830805778503 +decode-recall;len 30;char: 0.883914589881897 +decode-recall;len 40;char: 0.9354612231254578 +decode-recall;len 50;char: 0.7636982202529907 +decode-recall;len 60;char: 0.6942341327667236 +decode-recall;len 70;char: 0.7536417245864868 +decode-recall;len 80;char: 0.737931489944458 +decode-recall;len 90;char: 0.6877774000167847 +decode-recall;len 100;char: 0.6629197001457214 +decode-recall;len 110;char: 0.6028174757957458 +decode-recall;len 120;char: 0.6502202749252319 +decode-recall;len 130;char: 0.6673421859741211 +decode-recall;len 140;char: 0.6259489059448242 +decode-recall;len 150;char: 0.6302174925804138 +decode-recall;len 160;char: 0.6674023866653442 +decode-recall;len 170;char: 0.6145670413970947 +decode-recall;len 180;char: 0.6413394212722778 +decode-recall;len 190;char: 0.628603458404541 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +decode-recall;len 10;char: 0.9375 +decode-recall;len 20;char: 0.9444444179534912 +decode-recall;len 30;char: 0.8724379539489746 +decode-recall;len 40;char: 0.7579457759857178 +decode-recall;len 50;char: 0.6858078837394714 +decode-recall;len 60;char: 0.6398014426231384 +decode-recall;len 70;char: 0.6336778402328491 +decode-recall;len 80;char: 0.5704625844955444 +decode-recall;len 90;char: 0.563801109790802 +decode-recall;len 100;char: 0.5920346975326538 +decode-recall;len 110;char: 0.5572240352630615 +decode-recall;len 120;char: 0.5083930492401123 +decode-recall;len 130;char: 0.5373534560203552 +decode-recall;len 140;char: 0.5199017524719238 +decode-recall;len 150;char: 0.5129024982452393 +decode-recall;len 160;char: 0.5468578934669495 +decode-recall;len 170;char: 0.5114852786064148 +decode-recall;len 180;char: 0.529218852519989 +decode-recall;len 190;char: 0.541278600692749 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.01 +decode-recall;len 10;char: 0.6666666865348816 +decode-recall;len 20;char: 0.40053388476371765 +decode-recall;len 30;char: 0.25045037269592285 +decode-recall;len 40;char: 0.35306334495544434 +decode-recall;len 50;char: 0.2214892953634262 +decode-recall;len 60;char: 0.2768300771713257 +decode-recall;len 70;char: 0.16242577135562897 +decode-recall;len 80;char: 0.17029047012329102 +decode-recall;len 90;char: 0.18105767667293549 +decode-recall;len 100;char: 0.15713238716125488 +decode-recall;len 110;char: 0.1872226893901825 +decode-recall;len 120;char: 0.1275280863046646 +decode-recall;len 130;char: 0.16614282131195068 +decode-recall;len 140;char: 0.17051628232002258 +decode-recall;len 150;char: 0.150761216878891 +decode-recall;len 160;char: 0.20446577668190002 +decode-recall;len 170;char: 0.12866827845573425 +decode-recall;len 180;char: 0.1811705231666565 +decode-recall;len 190;char: 0.18153154850006104 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +decode-recall;len 10;char: 0.9583333730697632 +decode-recall;len 20;char: 0.9702020883560181 +decode-recall;len 30;char: 0.8730409145355225 +decode-recall;len 40;char: 0.8388082981109619 +decode-recall;len 50;char: 0.8278865218162537 +decode-recall;len 60;char: 0.7255939245223999 +decode-recall;len 70;char: 0.7388421297073364 +decode-recall;len 80;char: 0.6841074228286743 +decode-recall;len 90;char: 0.7086154222488403 +decode-recall;len 100;char: 0.6701502203941345 +decode-recall;len 110;char: 0.6326954364776611 +decode-recall;len 120;char: 0.6601725816726685 +decode-recall;len 130;char: 0.6176310181617737 +decode-recall;len 140;char: 0.6049767136573792 +decode-recall;len 150;char: 0.6606881618499756 +decode-recall;len 160;char: 0.6410802602767944 +decode-recall;len 170;char: 0.6219180226325989 +decode-recall;len 180;char: 0.5952696800231934 +decode-recall;len 190;char: 0.5900763869285583 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9284722805023193 +decode-recall;len 30;char: 0.7601746916770935 +decode-recall;len 40;char: 0.7380691766738892 +decode-recall;len 50;char: 0.7002629637718201 +decode-recall;len 60;char: 0.6536068916320801 +decode-recall;len 70;char: 0.5685962438583374 +decode-recall;len 80;char: 0.5846726894378662 +decode-recall;len 90;char: 0.6060163974761963 +decode-recall;len 100;char: 0.6246089935302734 +decode-recall;len 110;char: 0.5001067519187927 +decode-recall;len 120;char: 0.5469614267349243 +decode-recall;len 130;char: 0.5708626508712769 +decode-recall;len 140;char: 0.5430344343185425 +decode-recall;len 150;char: 0.5394906401634216 +decode-recall;len 160;char: 0.5599738359451294 +decode-recall;len 170;char: 0.541534423828125 +decode-recall;len 180;char: 0.5280774831771851 +decode-recall;len 190;char: 0.5447513461112976 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +decode-recall;len 10;char: 0.9312500357627869 +decode-recall;len 20;char: 0.5591646432876587 +decode-recall;len 30;char: 0.48499712347984314 +decode-recall;len 40;char: 0.3858240246772766 +decode-recall;len 50;char: 0.29997575283050537 +decode-recall;len 60;char: 0.2822308838367462 +decode-recall;len 70;char: 0.28649061918258667 +decode-recall;len 80;char: 0.25204893946647644 +decode-recall;len 90;char: 0.2803378105163574 +decode-recall;len 100;char: 0.23510167002677917 +decode-recall;len 110;char: 0.201607346534729 +decode-recall;len 120;char: 0.28771495819091797 +decode-recall;len 130;char: 0.22236411273479462 +decode-recall;len 140;char: 0.20215675234794617 +decode-recall;len 150;char: 0.17214205861091614 +decode-recall;len 160;char: 0.21926520764827728 +decode-recall;len 170;char: 0.24770402908325195 +decode-recall;len 180;char: 0.18265138566493988 +decode-recall;len 190;char: 0.2168128788471222 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +decode-recall;len 10;char: 0.9940476417541504 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.9594672918319702 +decode-recall;len 40;char: 0.8324980139732361 +decode-recall;len 50;char: 0.6961932182312012 +decode-recall;len 60;char: 0.7178167700767517 +decode-recall;len 70;char: 0.6578079462051392 +decode-recall;len 80;char: 0.6558411121368408 +decode-recall;len 90;char: 0.6631556749343872 +decode-recall;len 100;char: 0.6986407041549683 +decode-recall;len 110;char: 0.6629539728164673 +decode-recall;len 120;char: 0.6764706969261169 +decode-recall;len 130;char: 0.6812562346458435 +decode-recall;len 140;char: 0.6667389869689941 +decode-recall;len 150;char: 0.6522586345672607 +decode-recall;len 160;char: 0.6235154867172241 +decode-recall;len 170;char: 0.6113054156303406 +decode-recall;len 180;char: 0.6527130603790283 +decode-recall;len 190;char: 0.6156947612762451 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +decode-recall;len 10;char: 0.9652777910232544 +decode-recall;len 20;char: 0.9720238447189331 +decode-recall;len 30;char: 0.8182690143585205 +decode-recall;len 40;char: 0.7542051076889038 +decode-recall;len 50;char: 0.7563338279724121 +decode-recall;len 60;char: 0.5913437604904175 +decode-recall;len 70;char: 0.5792487263679504 +decode-recall;len 80;char: 0.6064538359642029 +decode-recall;len 90;char: 0.5535390973091125 +decode-recall;len 100;char: 0.6110771298408508 +decode-recall;len 110;char: 0.6066887378692627 +decode-recall;len 120;char: 0.5383552312850952 +decode-recall;len 130;char: 0.5550227165222168 +decode-recall;len 140;char: 0.5585039854049683 +decode-recall;len 150;char: 0.5717962980270386 +decode-recall;len 160;char: 0.52720046043396 +decode-recall;len 170;char: 0.5361117720603943 +decode-recall;len 180;char: 0.5050115585327148 +decode-recall;len 190;char: 0.5554693937301636 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +decode-recall;len 10;char: 0.7604166865348816 +decode-recall;len 20;char: 0.5575803518295288 +decode-recall;len 30;char: 0.3734075725078583 +decode-recall;len 40;char: 0.30497777462005615 +decode-recall;len 50;char: 0.24758422374725342 +decode-recall;len 60;char: 0.22962310910224915 +decode-recall;len 70;char: 0.23077386617660522 +decode-recall;len 80;char: 0.24541562795639038 +decode-recall;len 90;char: 0.19659879803657532 +decode-recall;len 100;char: 0.21108517050743103 +decode-recall;len 110;char: 0.17280910909175873 +decode-recall;len 120;char: 0.2454001009464264 +decode-recall;len 130;char: 0.2213137000799179 +decode-recall;len 140;char: 0.17557643353939056 +decode-recall;len 150;char: 0.22134175896644592 +decode-recall;len 160;char: 0.20280924439430237 +decode-recall;len 170;char: 0.18585650622844696 +decode-recall;len 180;char: 0.20104937255382538 +decode-recall;len 190;char: 0.1887604296207428 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9814814925193787 +decode-recall;len 30;char: 0.9199472665786743 +decode-recall;len 40;char: 0.8443765044212341 +decode-recall;len 50;char: 0.7761027812957764 +decode-recall;len 60;char: 0.7278324365615845 +decode-recall;len 70;char: 0.742245078086853 +decode-recall;len 80;char: 0.6498689651489258 +decode-recall;len 90;char: 0.7021530866622925 +decode-recall;len 100;char: 0.7098610401153564 +decode-recall;len 110;char: 0.6495532393455505 +decode-recall;len 120;char: 0.6802842617034912 +decode-recall;len 130;char: 0.690106987953186 +decode-recall;len 140;char: 0.6329416036605835 +decode-recall;len 150;char: 0.6425572633743286 +decode-recall;len 160;char: 0.6284109354019165 +decode-recall;len 170;char: 0.6596221923828125 +decode-recall;len 180;char: 0.6159197092056274 +decode-recall;len 190;char: 0.5934417247772217 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.977141261100769 +decode-recall;len 30;char: 0.8920645713806152 +decode-recall;len 40;char: 0.7731351256370544 +decode-recall;len 50;char: 0.6497936248779297 +decode-recall;len 60;char: 0.6460443735122681 +decode-recall;len 70;char: 0.6340058445930481 +decode-recall;len 80;char: 0.6173703670501709 +decode-recall;len 90;char: 0.605127215385437 +decode-recall;len 100;char: 0.504321277141571 +decode-recall;len 110;char: 0.5887764692306519 +decode-recall;len 120;char: 0.5367608070373535 +decode-recall;len 130;char: 0.6382097005844116 +decode-recall;len 140;char: 0.547844409942627 +decode-recall;len 150;char: 0.5501869916915894 +decode-recall;len 160;char: 0.5363688468933105 +decode-recall;len 170;char: 0.5311950445175171 +decode-recall;len 180;char: 0.5368257761001587 +decode-recall;len 190;char: 0.5166671276092529 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.05 +decode-recall;len 10;char: 0.831944465637207 +decode-recall;len 20;char: 0.561904788017273 +decode-recall;len 30;char: 0.3502916097640991 +decode-recall;len 40;char: 0.28801101446151733 +decode-recall;len 50;char: 0.24347460269927979 +decode-recall;len 60;char: 0.20534400641918182 +decode-recall;len 70;char: 0.2856627106666565 +decode-recall;len 80;char: 0.2800319194793701 +decode-recall;len 90;char: 0.2523477375507355 +decode-recall;len 100;char: 0.20638512074947357 +decode-recall;len 110;char: 0.23216286301612854 +decode-recall;len 120;char: 0.21144065260887146 +decode-recall;len 130;char: 0.19753006100654602 +decode-recall;len 140;char: 0.20316946506500244 +decode-recall;len 150;char: 0.1483728289604187 +decode-recall;len 160;char: 0.19917553663253784 +decode-recall;len 170;char: 0.1730005145072937 +decode-recall;len 180;char: 0.22809097170829773 +decode-recall;len 190;char: 0.19030484557151794 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9893519282341003 +decode-recall;len 30;char: 0.9313133955001831 +decode-recall;len 40;char: 0.8676342964172363 +decode-recall;len 50;char: 0.8259000182151794 +decode-recall;len 60;char: 0.7424222230911255 +decode-recall;len 70;char: 0.7178342342376709 +decode-recall;len 80;char: 0.6817822456359863 +decode-recall;len 90;char: 0.7156902551651001 +decode-recall;len 100;char: 0.6585237383842468 +decode-recall;len 110;char: 0.7027993202209473 +decode-recall;len 120;char: 0.667526125907898 +decode-recall;len 130;char: 0.626616358757019 +decode-recall;len 140;char: 0.6341248750686646 +decode-recall;len 150;char: 0.6415101289749146 +decode-recall;len 160;char: 0.6479219198226929 +decode-recall;len 170;char: 0.6010348796844482 +decode-recall;len 180;char: 0.6223326325416565 +decode-recall;len 190;char: 0.6513055562973022 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.891166090965271 +decode-recall;len 30;char: 0.8799030184745789 +decode-recall;len 40;char: 0.7502310276031494 +decode-recall;len 50;char: 0.6652403473854065 +decode-recall;len 60;char: 0.6956907510757446 +decode-recall;len 70;char: 0.6027244329452515 +decode-recall;len 80;char: 0.5038110613822937 +decode-recall;len 90;char: 0.5766881704330444 +decode-recall;len 100;char: 0.5118622779846191 +decode-recall;len 110;char: 0.5668641924858093 +decode-recall;len 120;char: 0.5505198240280151 +decode-recall;len 130;char: 0.5475012063980103 +decode-recall;len 140;char: 0.594762921333313 +decode-recall;len 150;char: 0.5396515130996704 +decode-recall;len 160;char: 0.5572662353515625 +decode-recall;len 170;char: 0.5287110805511475 +decode-recall;len 180;char: 0.5369182825088501 +decode-recall;len 190;char: 0.5161630511283875 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +decode-recall;len 10;char: 0.8105159997940063 +decode-recall;len 20;char: 0.25437861680984497 +decode-recall;len 30;char: 0.2026999294757843 +decode-recall;len 40;char: 0.10378873348236084 +decode-recall;len 50;char: 0.2955795228481293 +decode-recall;len 60;char: 0.17780952155590057 +decode-recall;len 70;char: 0.20466116070747375 +decode-recall;len 80;char: 0.1954977959394455 +decode-recall;len 90;char: 0.1683676689863205 +decode-recall;len 100;char: 0.14622345566749573 +decode-recall;len 110;char: 0.15653744339942932 +decode-recall;len 120;char: 0.13246509432792664 +decode-recall;len 130;char: 0.15712201595306396 +decode-recall;len 140;char: 0.15802879631519318 +decode-recall;len 150;char: 0.13904866576194763 +decode-recall;len 160;char: 0.1510382443666458 +decode-recall;len 170;char: 0.16245108842849731 +decode-recall;len 180;char: 0.16652676463127136 +decode-recall;len 190;char: 0.14899981021881104 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9818723201751709 +decode-recall;len 30;char: 0.9585215449333191 +decode-recall;len 40;char: 0.8433641195297241 +decode-recall;len 50;char: 0.7964634895324707 +decode-recall;len 60;char: 0.6646312475204468 +decode-recall;len 70;char: 0.7411490678787231 +decode-recall;len 80;char: 0.7622241973876953 +decode-recall;len 90;char: 0.6674981117248535 +decode-recall;len 100;char: 0.6373134851455688 +decode-recall;len 110;char: 0.6661847829818726 +decode-recall;len 120;char: 0.7218431234359741 +decode-recall;len 130;char: 0.6621226072311401 +decode-recall;len 140;char: 0.6292699575424194 +decode-recall;len 150;char: 0.6574549078941345 +decode-recall;len 160;char: 0.6325711011886597 +decode-recall;len 170;char: 0.6386153697967529 +decode-recall;len 180;char: 0.6068734526634216 +decode-recall;len 190;char: 0.650138258934021 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9123001098632812 +decode-recall;len 30;char: 0.8830308318138123 +decode-recall;len 40;char: 0.8002690076828003 +decode-recall;len 50;char: 0.675045371055603 +decode-recall;len 60;char: 0.6963638067245483 +decode-recall;len 70;char: 0.6448594331741333 +decode-recall;len 80;char: 0.6264510154724121 +decode-recall;len 90;char: 0.5482439994812012 +decode-recall;len 100;char: 0.6209269762039185 +decode-recall;len 110;char: 0.5851967334747314 +decode-recall;len 120;char: 0.5755296349525452 +decode-recall;len 130;char: 0.5574761629104614 +decode-recall;len 140;char: 0.5579811930656433 +decode-recall;len 150;char: 0.527370274066925 +decode-recall;len 160;char: 0.5166376233100891 +decode-recall;len 170;char: 0.4937918782234192 +decode-recall;len 180;char: 0.5086943507194519 +decode-recall;len 190;char: 0.5118986964225769 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +decode-recall;len 10;char: 0.671875 +decode-recall;len 20;char: 0.23358309268951416 +decode-recall;len 30;char: 0.18997351825237274 +decode-recall;len 40;char: 0.1920100450515747 +decode-recall;len 50;char: 0.11462496221065521 +decode-recall;len 60;char: 0.1375562995672226 +decode-recall;len 70;char: 0.1593335121870041 +decode-recall;len 80;char: 0.18077102303504944 +decode-recall;len 90;char: 0.12689562141895294 +decode-recall;len 100;char: 0.15594667196273804 +decode-recall;len 110;char: 0.13716715574264526 +decode-recall;len 120;char: 0.15283851325511932 +decode-recall;len 130;char: 0.17895826697349548 +decode-recall;len 140;char: 0.1289277970790863 +decode-recall;len 150;char: 0.18059508502483368 +decode-recall;len 160;char: 0.1430085450410843 +decode-recall;len 170;char: 0.162797749042511 +decode-recall;len 180;char: 0.1752285659313202 +decode-recall;len 190;char: 0.13291126489639282 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9962121844291687 +decode-recall;len 30;char: 0.9472112655639648 +decode-recall;len 40;char: 0.8435875773429871 +decode-recall;len 50;char: 0.779427707195282 +decode-recall;len 60;char: 0.7291765213012695 +decode-recall;len 70;char: 0.6575222611427307 +decode-recall;len 80;char: 0.7460169792175293 +decode-recall;len 90;char: 0.6944898962974548 +decode-recall;len 100;char: 0.6679250001907349 +decode-recall;len 110;char: 0.6876269578933716 +decode-recall;len 120;char: 0.6425929665565491 +decode-recall;len 130;char: 0.679318904876709 +decode-recall;len 140;char: 0.6300767660140991 +decode-recall;len 150;char: 0.6169150471687317 +decode-recall;len 160;char: 0.5954546332359314 +decode-recall;len 170;char: 0.6061809659004211 +decode-recall;len 180;char: 0.6112329363822937 +decode-recall;len 190;char: 0.6352704167366028 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +decode-recall;len 10;char: 0.9434523582458496 +decode-recall;len 20;char: 0.950590968132019 +decode-recall;len 30;char: 0.8636059165000916 +decode-recall;len 40;char: 0.7203311920166016 +decode-recall;len 50;char: 0.6323883533477783 +decode-recall;len 60;char: 0.6831938624382019 +decode-recall;len 70;char: 0.5965163707733154 +decode-recall;len 80;char: 0.586961030960083 +decode-recall;len 90;char: 0.6314142942428589 +decode-recall;len 100;char: 0.5963025093078613 +decode-recall;len 110;char: 0.5517977476119995 +decode-recall;len 120;char: 0.545038104057312 +decode-recall;len 130;char: 0.6150715351104736 +decode-recall;len 140;char: 0.5121445059776306 +decode-recall;len 150;char: 0.5400432348251343 +decode-recall;len 160;char: 0.5300935506820679 +decode-recall;len 170;char: 0.5618769526481628 +decode-recall;len 180;char: 0.5587543845176697 +decode-recall;len 190;char: 0.5350501537322998 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.1 +decode-recall;len 10;char: 0.732638955116272 +decode-recall;len 20;char: 0.44617652893066406 +decode-recall;len 30;char: 0.25386011600494385 +decode-recall;len 40;char: 0.31503716111183167 +decode-recall;len 50;char: 0.28212451934814453 +decode-recall;len 60;char: 0.24756592512130737 +decode-recall;len 70;char: 0.20837530493736267 +decode-recall;len 80;char: 0.21679934859275818 +decode-recall;len 90;char: 0.16761600971221924 +decode-recall;len 100;char: 0.20531544089317322 +decode-recall;len 110;char: 0.1848740428686142 +decode-recall;len 120;char: 0.17007802426815033 +decode-recall;len 130;char: 0.1672186255455017 +decode-recall;len 140;char: 0.15290924906730652 +decode-recall;len 150;char: 0.17884491384029388 +decode-recall;len 160;char: 0.17507541179656982 +decode-recall;len 170;char: 0.16387654840946198 +decode-recall;len 180;char: 0.140061616897583 +decode-recall;len 190;char: 0.1863991916179657 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9791666865348816 +decode-recall;len 30;char: 0.9718552827835083 +decode-recall;len 40;char: 0.8083550333976746 +decode-recall;len 50;char: 0.7598700523376465 +decode-recall;len 60;char: 0.7431692481040955 +decode-recall;len 70;char: 0.7376405000686646 +decode-recall;len 80;char: 0.6997123956680298 +decode-recall;len 90;char: 0.6656270623207092 +decode-recall;len 100;char: 0.6496608853340149 +decode-recall;len 110;char: 0.6681380271911621 +decode-recall;len 120;char: 0.6162755489349365 +decode-recall;len 130;char: 0.6565771102905273 +decode-recall;len 140;char: 0.6607265472412109 +decode-recall;len 150;char: 0.6299384236335754 +decode-recall;len 160;char: 0.6559327840805054 +decode-recall;len 170;char: 0.654157280921936 +decode-recall;len 180;char: 0.5867695212364197 +decode-recall;len 190;char: 0.6341935396194458 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.8336641192436218 +decode-recall;len 30;char: 0.8465828895568848 +decode-recall;len 40;char: 0.6973918676376343 +decode-recall;len 50;char: 0.6970402598381042 +decode-recall;len 60;char: 0.6473264694213867 +decode-recall;len 70;char: 0.6281289458274841 +decode-recall;len 80;char: 0.5969924926757812 +decode-recall;len 90;char: 0.5998989939689636 +decode-recall;len 100;char: 0.5608376264572144 +decode-recall;len 110;char: 0.5720078945159912 +decode-recall;len 120;char: 0.5432466268539429 +decode-recall;len 130;char: 0.4926574230194092 +decode-recall;len 140;char: 0.5317258834838867 +decode-recall;len 150;char: 0.53062903881073 +decode-recall;len 160;char: 0.4996575117111206 +decode-recall;len 170;char: 0.5336841344833374 +decode-recall;len 180;char: 0.5240747332572937 +decode-recall;len 190;char: 0.5095794796943665 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +decode-recall;len 10;char: 0.605654776096344 +decode-recall;len 20;char: 0.19962123036384583 +decode-recall;len 30;char: 0.3332757353782654 +decode-recall;len 40;char: 0.3214985728263855 +decode-recall;len 50;char: 0.22967660427093506 +decode-recall;len 60;char: 0.2144291251897812 +decode-recall;len 70;char: 0.1801472008228302 +decode-recall;len 80;char: 0.15728504955768585 +decode-recall;len 90;char: 0.12889280915260315 +decode-recall;len 100;char: 0.14628402888774872 +decode-recall;len 110;char: 0.18574051558971405 +decode-recall;len 120;char: 0.15692494809627533 +decode-recall;len 130;char: 0.17120212316513062 +decode-recall;len 140;char: 0.15516668558120728 +decode-recall;len 150;char: 0.17355331778526306 +decode-recall;len 160;char: 0.17152152955532074 +decode-recall;len 170;char: 0.16684964299201965 +decode-recall;len 180;char: 0.15086030960083008 +decode-recall;len 190;char: 0.16379694640636444 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9548611640930176 +decode-recall;len 30;char: 0.8628599047660828 +decode-recall;len 40;char: 0.7482613921165466 +decode-recall;len 50;char: 0.8189472556114197 +decode-recall;len 60;char: 0.717424750328064 +decode-recall;len 70;char: 0.7397675514221191 +decode-recall;len 80;char: 0.678196907043457 +decode-recall;len 90;char: 0.6889283657073975 +decode-recall;len 100;char: 0.7026631236076355 +decode-recall;len 110;char: 0.6173427104949951 +decode-recall;len 120;char: 0.6486616134643555 +decode-recall;len 130;char: 0.6347834467887878 +decode-recall;len 140;char: 0.7153686285018921 +decode-recall;len 150;char: 0.6592679023742676 +decode-recall;len 160;char: 0.6855039000511169 +decode-recall;len 170;char: 0.6217145323753357 +decode-recall;len 180;char: 0.6536308526992798 +decode-recall;len 190;char: 0.6036471128463745 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +decode-recall;len 10;char: 0.875 +decode-recall;len 20;char: 0.9346230030059814 +decode-recall;len 30;char: 0.8643307089805603 +decode-recall;len 40;char: 0.7805624008178711 +decode-recall;len 50;char: 0.707645833492279 +decode-recall;len 60;char: 0.6223388910293579 +decode-recall;len 70;char: 0.6492352485656738 +decode-recall;len 80;char: 0.6017187237739563 +decode-recall;len 90;char: 0.5806149840354919 +decode-recall;len 100;char: 0.5691797733306885 +decode-recall;len 110;char: 0.5859087705612183 +decode-recall;len 120;char: 0.5172404050827026 +decode-recall;len 130;char: 0.5756564140319824 +decode-recall;len 140;char: 0.5523606538772583 +decode-recall;len 150;char: 0.5459907054901123 +decode-recall;len 160;char: 0.528350830078125 +decode-recall;len 170;char: 0.49754446744918823 +decode-recall;len 180;char: 0.5515252351760864 +decode-recall;len 190;char: 0.5265257358551025 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +decode-recall;len 10;char: 0.625 +decode-recall;len 20;char: 0.40035104751586914 +decode-recall;len 30;char: 0.2850980758666992 +decode-recall;len 40;char: 0.20730948448181152 +decode-recall;len 50;char: 0.18337100744247437 +decode-recall;len 60;char: 0.1773088276386261 +decode-recall;len 70;char: 0.17188382148742676 +decode-recall;len 80;char: 0.16036207973957062 +decode-recall;len 90;char: 0.16673177480697632 +decode-recall;len 100;char: 0.1620579957962036 +decode-recall;len 110;char: 0.17631720006465912 +decode-recall;len 120;char: 0.15445320308208466 +decode-recall;len 130;char: 0.15528394281864166 +decode-recall;len 140;char: 0.1652722954750061 +decode-recall;len 150;char: 0.18287818133831024 +decode-recall;len 160;char: 0.15162362158298492 +decode-recall;len 170;char: 0.15029770135879517 +decode-recall;len 180;char: 0.15827758610248566 +decode-recall;len 190;char: 0.1619020700454712 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.9642453193664551 +decode-recall;len 40;char: 0.8931758403778076 +decode-recall;len 50;char: 0.7373021841049194 +decode-recall;len 60;char: 0.7205032110214233 +decode-recall;len 70;char: 0.7318791151046753 +decode-recall;len 80;char: 0.7070105075836182 +decode-recall;len 90;char: 0.6662389636039734 +decode-recall;len 100;char: 0.6486628651618958 +decode-recall;len 110;char: 0.6471529006958008 +decode-recall;len 120;char: 0.680942177772522 +decode-recall;len 130;char: 0.6657675504684448 +decode-recall;len 140;char: 0.6260074377059937 +decode-recall;len 150;char: 0.6201637983322144 +decode-recall;len 160;char: 0.6300745010375977 +decode-recall;len 170;char: 0.6093080639839172 +decode-recall;len 180;char: 0.6409387588500977 +decode-recall;len 190;char: 0.6173990964889526 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +decode-recall;len 10;char: 0.9583333730697632 +decode-recall;len 20;char: 0.9383997321128845 +decode-recall;len 30;char: 0.8253371715545654 +decode-recall;len 40;char: 0.7458134889602661 +decode-recall;len 50;char: 0.7060369253158569 +decode-recall;len 60;char: 0.5995813608169556 +decode-recall;len 70;char: 0.6310690641403198 +decode-recall;len 80;char: 0.6391342282295227 +decode-recall;len 90;char: 0.5667171478271484 +decode-recall;len 100;char: 0.5837390422821045 +decode-recall;len 110;char: 0.5955297350883484 +decode-recall;len 120;char: 0.5542541742324829 +decode-recall;len 130;char: 0.5603567957878113 +decode-recall;len 140;char: 0.543487012386322 +decode-recall;len 150;char: 0.5847495198249817 +decode-recall;len 160;char: 0.5328416228294373 +decode-recall;len 170;char: 0.5502661466598511 +decode-recall;len 180;char: 0.5548665523529053 +decode-recall;len 190;char: 0.522754967212677 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.3 +decode-recall;len 10;char: 0.5972222089767456 +decode-recall;len 20;char: 0.42407411336898804 +decode-recall;len 30;char: 0.14723441004753113 +decode-recall;len 40;char: 0.17986619472503662 +decode-recall;len 50;char: 0.11994698643684387 +decode-recall;len 60;char: 0.08952342718839645 +decode-recall;len 70;char: 0.13436204195022583 +decode-recall;len 80;char: 0.11489039659500122 +decode-recall;len 90;char: 0.10812055319547653 +decode-recall;len 100;char: 0.1459903120994568 +decode-recall;len 110;char: 0.12686194479465485 +decode-recall;len 120;char: 0.1584920883178711 +decode-recall;len 130;char: 0.13184452056884766 +decode-recall;len 140;char: 0.16044460237026215 +decode-recall;len 150;char: 0.14800779521465302 +decode-recall;len 160;char: 0.11076849699020386 +decode-recall;len 170;char: 0.13110259175300598 +decode-recall;len 180;char: 0.12756627798080444 +decode-recall;len 190;char: 0.1322154700756073 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9833333492279053 +decode-recall;len 30;char: 0.9381527304649353 +decode-recall;len 40;char: 0.8225913047790527 +decode-recall;len 50;char: 0.8465294241905212 +decode-recall;len 60;char: 0.7620029449462891 +decode-recall;len 70;char: 0.73064124584198 +decode-recall;len 80;char: 0.7171033620834351 +decode-recall;len 90;char: 0.6485799551010132 +decode-recall;len 100;char: 0.7215971946716309 +decode-recall;len 110;char: 0.7125453948974609 +decode-recall;len 120;char: 0.6739563345909119 +decode-recall;len 130;char: 0.6338595151901245 +decode-recall;len 140;char: 0.638872504234314 +decode-recall;len 150;char: 0.5799821615219116 +decode-recall;len 160;char: 0.656946063041687 +decode-recall;len 170;char: 0.6471427083015442 +decode-recall;len 180;char: 0.6228957176208496 +decode-recall;len 190;char: 0.6456189155578613 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +decode-recall;len 10;char: 0.941964328289032 +decode-recall;len 20;char: 0.9432234764099121 +decode-recall;len 30;char: 0.813152015209198 +decode-recall;len 40;char: 0.6764203310012817 +decode-recall;len 50;char: 0.7046615481376648 +decode-recall;len 60;char: 0.5534840822219849 +decode-recall;len 70;char: 0.5729381442070007 +decode-recall;len 80;char: 0.6293954849243164 +decode-recall;len 90;char: 0.6040155291557312 +decode-recall;len 100;char: 0.5124175548553467 +decode-recall;len 110;char: 0.5302519798278809 +decode-recall;len 120;char: 0.5083394646644592 +decode-recall;len 130;char: 0.5064852833747864 +decode-recall;len 140;char: 0.5139710307121277 +decode-recall;len 150;char: 0.5124178528785706 +decode-recall;len 160;char: 0.5173684358596802 +decode-recall;len 170;char: 0.5244787931442261 +decode-recall;len 180;char: 0.5166957974433899 +decode-recall;len 190;char: 0.4981798827648163 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +decode-recall;len 10;char: 0.5958333611488342 +decode-recall;len 20;char: 0.371098130941391 +decode-recall;len 30;char: 0.2677927315235138 +decode-recall;len 40;char: 0.1454615294933319 +decode-recall;len 50;char: 0.1920115053653717 +decode-recall;len 60;char: 0.15566036105155945 +decode-recall;len 70;char: 0.1732410192489624 +decode-recall;len 80;char: 0.1515405774116516 +decode-recall;len 90;char: 0.14978215098381042 +decode-recall;len 100;char: 0.14734774827957153 +decode-recall;len 110;char: 0.15826746821403503 +decode-recall;len 120;char: 0.1381646990776062 +decode-recall;len 130;char: 0.14185123145580292 +decode-recall;len 140;char: 0.13291293382644653 +decode-recall;len 150;char: 0.12837517261505127 +decode-recall;len 160;char: 0.17312559485435486 +decode-recall;len 170;char: 0.13046079874038696 +decode-recall;len 180;char: 0.1479940414428711 +decode-recall;len 190;char: 0.16227564215660095 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9803241491317749 +decode-recall;len 30;char: 0.9336358904838562 +decode-recall;len 40;char: 0.844232976436615 +decode-recall;len 50;char: 0.7817836999893188 +decode-recall;len 60;char: 0.7557193636894226 +decode-recall;len 70;char: 0.6694632768630981 +decode-recall;len 80;char: 0.6727523803710938 +decode-recall;len 90;char: 0.6628430485725403 +decode-recall;len 100;char: 0.6924120783805847 +decode-recall;len 110;char: 0.6241770386695862 +decode-recall;len 120;char: 0.6651340126991272 +decode-recall;len 130;char: 0.6198070049285889 +decode-recall;len 140;char: 0.625661313533783 +decode-recall;len 150;char: 0.6696881055831909 +decode-recall;len 160;char: 0.6269161701202393 +decode-recall;len 170;char: 0.6229670643806458 +decode-recall;len 180;char: 0.634337842464447 +decode-recall;len 190;char: 0.5933758616447449 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +decode-recall;len 10;char: 0.9791666865348816 +decode-recall;len 20;char: 0.922453761100769 +decode-recall;len 30;char: 0.7694445848464966 +decode-recall;len 40;char: 0.7899535894393921 +decode-recall;len 50;char: 0.698131263256073 +decode-recall;len 60;char: 0.6123549342155457 +decode-recall;len 70;char: 0.6400342583656311 +decode-recall;len 80;char: 0.5871341824531555 +decode-recall;len 90;char: 0.578874945640564 +decode-recall;len 100;char: 0.5758959054946899 +decode-recall;len 110;char: 0.5607088804244995 +decode-recall;len 120;char: 0.5019407272338867 +decode-recall;len 130;char: 0.5087108612060547 +decode-recall;len 140;char: 0.5205938220024109 +decode-recall;len 150;char: 0.5586503744125366 +decode-recall;len 160;char: 0.5090641975402832 +decode-recall;len 170;char: 0.5059106349945068 +decode-recall;len 180;char: 0.5185704827308655 +decode-recall;len 190;char: 0.5188469886779785 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +decode-recall;len 10;char: 0.6039682626724243 +decode-recall;len 20;char: 0.2028287649154663 +decode-recall;len 30;char: 0.2654017210006714 +decode-recall;len 40;char: 0.24685725569725037 +decode-recall;len 50;char: 0.1414213478565216 +decode-recall;len 60;char: 0.19911232590675354 +decode-recall;len 70;char: 0.14950916171073914 +decode-recall;len 80;char: 0.16641449928283691 +decode-recall;len 90;char: 0.1708439588546753 +decode-recall;len 100;char: 0.13239067792892456 +decode-recall;len 110;char: 0.15343640744686127 +decode-recall;len 120;char: 0.14069446921348572 +decode-recall;len 130;char: 0.13708341121673584 +decode-recall;len 140;char: 0.12754377722740173 +decode-recall;len 150;char: 0.14136895537376404 +decode-recall;len 160;char: 0.15260016918182373 +decode-recall;len 170;char: 0.1257631480693817 +decode-recall;len 180;char: 0.13422797620296478 +decode-recall;len 190;char: 0.12699583172798157 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9625812768936157 +decode-recall;len 30;char: 0.9286672472953796 +decode-recall;len 40;char: 0.9042582511901855 +decode-recall;len 50;char: 0.8170623183250427 +decode-recall;len 60;char: 0.7374587059020996 +decode-recall;len 70;char: 0.7621544599533081 +decode-recall;len 80;char: 0.7207171320915222 +decode-recall;len 90;char: 0.7358393669128418 +decode-recall;len 100;char: 0.6913754343986511 +decode-recall;len 110;char: 0.6299231648445129 +decode-recall;len 120;char: 0.6412687301635742 +decode-recall;len 130;char: 0.6348793506622314 +decode-recall;len 140;char: 0.6557647585868835 +decode-recall;len 150;char: 0.5907285213470459 +decode-recall;len 160;char: 0.6266074776649475 +decode-recall;len 170;char: 0.6195858120918274 +decode-recall;len 180;char: 0.6403429508209229 +decode-recall;len 190;char: 0.614975094795227 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.966269850730896 +decode-recall;len 30;char: 0.8379997611045837 +decode-recall;len 40;char: 0.7491979002952576 +decode-recall;len 50;char: 0.7060585021972656 +decode-recall;len 60;char: 0.6374863386154175 +decode-recall;len 70;char: 0.5862736105918884 +decode-recall;len 80;char: 0.6041607856750488 +decode-recall;len 90;char: 0.572924792766571 +decode-recall;len 100;char: 0.6071382761001587 +decode-recall;len 110;char: 0.4936895966529846 +decode-recall;len 120;char: 0.5194944143295288 +decode-recall;len 130;char: 0.5548485517501831 +decode-recall;len 140;char: 0.5336697101593018 +decode-recall;len 150;char: 0.5125536918640137 +decode-recall;len 160;char: 0.5613908767700195 +decode-recall;len 170;char: 0.5080100297927856 +decode-recall;len 180;char: 0.5551691055297852 +decode-recall;len 190;char: 0.5527853965759277 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.5 +decode-recall;len 10;char: 0.9322916865348816 +decode-recall;len 20;char: 0.44254299998283386 +decode-recall;len 30;char: 0.32713329792022705 +decode-recall;len 40;char: 0.3063912093639374 +decode-recall;len 50;char: 0.27889540791511536 +decode-recall;len 60;char: 0.27212822437286377 +decode-recall;len 70;char: 0.28046709299087524 +decode-recall;len 80;char: 0.2706615626811981 +decode-recall;len 90;char: 0.23631757497787476 +decode-recall;len 100;char: 0.25388216972351074 +decode-recall;len 110;char: 0.19884926080703735 +decode-recall;len 120;char: 0.20510455965995789 +decode-recall;len 130;char: 0.2279454469680786 +decode-recall;len 140;char: 0.18107125163078308 +decode-recall;len 150;char: 0.2087833732366562 +decode-recall;len 160;char: 0.1753503680229187 +decode-recall;len 170;char: 0.2146354764699936 +decode-recall;len 180;char: 0.2032415270805359 +decode-recall;len 190;char: 0.177200585603714 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9892677068710327 +decode-recall;len 30;char: 0.921709418296814 +decode-recall;len 40;char: 0.8591992855072021 +decode-recall;len 50;char: 0.802588701248169 +decode-recall;len 60;char: 0.7683021426200867 +decode-recall;len 70;char: 0.7204899787902832 +decode-recall;len 80;char: 0.656505823135376 +decode-recall;len 90;char: 0.6434918642044067 +decode-recall;len 100;char: 0.6413551568984985 +decode-recall;len 110;char: 0.6872732043266296 +decode-recall;len 120;char: 0.6786646842956543 +decode-recall;len 130;char: 0.6621866226196289 +decode-recall;len 140;char: 0.6435754299163818 +decode-recall;len 150;char: 0.612661600112915 +decode-recall;len 160;char: 0.6545321941375732 +decode-recall;len 170;char: 0.6319868564605713 +decode-recall;len 180;char: 0.6376023292541504 +decode-recall;len 190;char: 0.6108061075210571 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +decode-recall;len 10;char: 0.90625 +decode-recall;len 20;char: 0.9099969267845154 +decode-recall;len 30;char: 0.7377027273178101 +decode-recall;len 40;char: 0.6611667275428772 +decode-recall;len 50;char: 0.6935219764709473 +decode-recall;len 60;char: 0.630048394203186 +decode-recall;len 70;char: 0.5896297693252563 +decode-recall;len 80;char: 0.5469869375228882 +decode-recall;len 90;char: 0.5849809646606445 +decode-recall;len 100;char: 0.6032074689865112 +decode-recall;len 110;char: 0.5709688663482666 +decode-recall;len 120;char: 0.5403353571891785 +decode-recall;len 130;char: 0.5663156509399414 +decode-recall;len 140;char: 0.5429456233978271 +decode-recall;len 150;char: 0.4862303137779236 +decode-recall;len 160;char: 0.4833381175994873 +decode-recall;len 170;char: 0.5285948514938354 +decode-recall;len 180;char: 0.52226722240448 +decode-recall;len 190;char: 0.515887439250946 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +decode-recall;len 10;char: 0.5270833373069763 +decode-recall;len 20;char: 0.14216648042201996 +decode-recall;len 30;char: 0.18103061616420746 +decode-recall;len 40;char: 0.13287785649299622 +decode-recall;len 50;char: 0.12076689302921295 +decode-recall;len 60;char: 0.11795566976070404 +decode-recall;len 70;char: 0.09900695085525513 +decode-recall;len 80;char: 0.14063164591789246 +decode-recall;len 90;char: 0.11268850415945053 +decode-recall;len 100;char: 0.14859448373317719 +decode-recall;len 110;char: 0.15838688611984253 +decode-recall;len 120;char: 0.11252959817647934 +decode-recall;len 130;char: 0.15149320662021637 +decode-recall;len 140;char: 0.12962716817855835 +decode-recall;len 150;char: 0.14199383556842804 +decode-recall;len 160;char: 0.14427003264427185 +decode-recall;len 170;char: 0.11563071608543396 +decode-recall;len 180;char: 0.13799545168876648 +decode-recall;len 190;char: 0.12692122161388397 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.975822389125824 +decode-recall;len 30;char: 0.9129087328910828 +decode-recall;len 40;char: 0.8864775896072388 +decode-recall;len 50;char: 0.7440303564071655 +decode-recall;len 60;char: 0.7671120166778564 +decode-recall;len 70;char: 0.7372585535049438 +decode-recall;len 80;char: 0.7232402563095093 +decode-recall;len 90;char: 0.7545977830886841 +decode-recall;len 100;char: 0.680863618850708 +decode-recall;len 110;char: 0.664754331111908 +decode-recall;len 120;char: 0.6076697707176208 +decode-recall;len 130;char: 0.5943783521652222 +decode-recall;len 140;char: 0.5840888023376465 +decode-recall;len 150;char: 0.579912543296814 +decode-recall;len 160;char: 0.5875081419944763 +decode-recall;len 170;char: 0.6068410873413086 +decode-recall;len 180;char: 0.6072186231613159 +decode-recall;len 190;char: 0.6360909342765808 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9736112356185913 +decode-recall;len 30;char: 0.8644074201583862 +decode-recall;len 40;char: 0.7615129351615906 +decode-recall;len 50;char: 0.713413655757904 +decode-recall;len 60;char: 0.6245355606079102 +decode-recall;len 70;char: 0.6571441888809204 +decode-recall;len 80;char: 0.6077650785446167 +decode-recall;len 90;char: 0.6185965538024902 +decode-recall;len 100;char: 0.5634506940841675 +decode-recall;len 110;char: 0.529148519039154 +decode-recall;len 120;char: 0.570335865020752 +decode-recall;len 130;char: 0.5047464370727539 +decode-recall;len 140;char: 0.5271584987640381 +decode-recall;len 150;char: 0.5923984050750732 +decode-recall;len 160;char: 0.5011171102523804 +decode-recall;len 170;char: 0.5333198308944702 +decode-recall;len 180;char: 0.5591796636581421 +decode-recall;len 190;char: 0.539786159992218 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +decode-recall;len 10;char: 0.8500000238418579 +decode-recall;len 20;char: 0.634606122970581 +decode-recall;len 30;char: 0.37416669726371765 +decode-recall;len 40;char: 0.25791114568710327 +decode-recall;len 50;char: 0.2535319924354553 +decode-recall;len 60;char: 0.2741225063800812 +decode-recall;len 70;char: 0.2001095414161682 +decode-recall;len 80;char: 0.2843603491783142 +decode-recall;len 90;char: 0.17868928611278534 +decode-recall;len 100;char: 0.16628079116344452 +decode-recall;len 110;char: 0.19847939908504486 +decode-recall;len 120;char: 0.17409420013427734 +decode-recall;len 130;char: 0.18461230397224426 +decode-recall;len 140;char: 0.16764357686042786 +decode-recall;len 150;char: 0.17586228251457214 +decode-recall;len 160;char: 0.202399343252182 +decode-recall;len 170;char: 0.17729708552360535 +decode-recall;len 180;char: 0.2009861171245575 +decode-recall;len 190;char: 0.17348483204841614 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9880952835083008 +decode-recall;len 30;char: 0.9409539699554443 +decode-recall;len 40;char: 0.846488356590271 +decode-recall;len 50;char: 0.7730967998504639 +decode-recall;len 60;char: 0.7458630800247192 +decode-recall;len 70;char: 0.686345100402832 +decode-recall;len 80;char: 0.6653675436973572 +decode-recall;len 90;char: 0.6831545829772949 +decode-recall;len 100;char: 0.6838696002960205 +decode-recall;len 110;char: 0.6654297113418579 +decode-recall;len 120;char: 0.6702576875686646 +decode-recall;len 130;char: 0.6432875394821167 +decode-recall;len 140;char: 0.6442030668258667 +decode-recall;len 150;char: 0.6633822917938232 +decode-recall;len 160;char: 0.6116902828216553 +decode-recall;len 170;char: 0.6341946125030518 +decode-recall;len 180;char: 0.6407511234283447 +decode-recall;len 190;char: 0.5920099020004272 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.8875000476837158 +decode-recall;len 30;char: 0.8782705068588257 +decode-recall;len 40;char: 0.7807716727256775 +decode-recall;len 50;char: 0.645126223564148 +decode-recall;len 60;char: 0.587480366230011 +decode-recall;len 70;char: 0.6074799299240112 +decode-recall;len 80;char: 0.5330637693405151 +decode-recall;len 90;char: 0.5842275619506836 +decode-recall;len 100;char: 0.5578233003616333 +decode-recall;len 110;char: 0.5313156843185425 +decode-recall;len 120;char: 0.5821492671966553 +decode-recall;len 130;char: 0.5411442518234253 +decode-recall;len 140;char: 0.5566728711128235 +decode-recall;len 150;char: 0.5411558151245117 +decode-recall;len 160;char: 0.4923244118690491 +decode-recall;len 170;char: 0.5180424451828003 +decode-recall;len 180;char: 0.5496171116828918 +decode-recall;len 190;char: 0.5784469842910767 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.8 +decode-recall;len 10;char: 0.5 +decode-recall;len 20;char: 0.32914915680885315 +decode-recall;len 30;char: 0.21326909959316254 +decode-recall;len 40;char: 0.11722775548696518 +decode-recall;len 50;char: 0.12523245811462402 +decode-recall;len 60;char: 0.10812675207853317 +decode-recall;len 70;char: 0.15793651342391968 +decode-recall;len 80;char: 0.1017463430762291 +decode-recall;len 90;char: 0.13033902645111084 +decode-recall;len 100;char: 0.13330109417438507 +decode-recall;len 110;char: 0.16154375672340393 +decode-recall;len 120;char: 0.11473031342029572 +decode-recall;len 130;char: 0.132521390914917 +decode-recall;len 140;char: 0.15485094487667084 +decode-recall;len 150;char: 0.15304793417453766 +decode-recall;len 160;char: 0.13609109818935394 +decode-recall;len 170;char: 0.1622111201286316 +decode-recall;len 180;char: 0.14152681827545166 +decode-recall;len 190;char: 0.12300290167331696 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.9303807616233826 +decode-recall;len 40;char: 0.8305368423461914 +decode-recall;len 50;char: 0.8026718497276306 +decode-recall;len 60;char: 0.7755427360534668 +decode-recall;len 70;char: 0.7859021425247192 +decode-recall;len 80;char: 0.665438175201416 +decode-recall;len 90;char: 0.6678518652915955 +decode-recall;len 100;char: 0.689689576625824 +decode-recall;len 110;char: 0.6963053941726685 +decode-recall;len 120;char: 0.6626681089401245 +decode-recall;len 130;char: 0.6234658360481262 +decode-recall;len 140;char: 0.6469988822937012 +decode-recall;len 150;char: 0.6530216932296753 +decode-recall;len 160;char: 0.6748077273368835 +decode-recall;len 170;char: 0.6118091344833374 +decode-recall;len 180;char: 0.6280471682548523 +decode-recall;len 190;char: 0.5881291031837463 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +decode-recall;len 10;char: 0.875 +decode-recall;len 20;char: 0.964828610420227 +decode-recall;len 30;char: 0.9280533790588379 +decode-recall;len 40;char: 0.6611144542694092 +decode-recall;len 50;char: 0.6872925162315369 +decode-recall;len 60;char: 0.7089375853538513 +decode-recall;len 70;char: 0.624390184879303 +decode-recall;len 80;char: 0.5952166318893433 +decode-recall;len 90;char: 0.6274375319480896 +decode-recall;len 100;char: 0.5802091360092163 +decode-recall;len 110;char: 0.5757185816764832 +decode-recall;len 120;char: 0.5443142652511597 +decode-recall;len 130;char: 0.5083593130111694 +decode-recall;len 140;char: 0.5524842143058777 +decode-recall;len 150;char: 0.5034583806991577 +decode-recall;len 160;char: 0.5163753032684326 +decode-recall;len 170;char: 0.524415135383606 +decode-recall;len 180;char: 0.511327862739563 +decode-recall;len 190;char: 0.5213930010795593 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +decode-recall;len 10;char: 0.5625 +decode-recall;len 20;char: 0.19755768775939941 +decode-recall;len 30;char: 0.19790153205394745 +decode-recall;len 40;char: 0.1183159276843071 +decode-recall;len 50;char: 0.17120108008384705 +decode-recall;len 60;char: 0.1588381826877594 +decode-recall;len 70;char: 0.14881716668605804 +decode-recall;len 80;char: 0.12153150886297226 +decode-recall;len 90;char: 0.12878623604774475 +decode-recall;len 100;char: 0.13554038107395172 +decode-recall;len 110;char: 0.0880877897143364 +decode-recall;len 120;char: 0.1447214037179947 +decode-recall;len 130;char: 0.14899219572544098 +decode-recall;len 140;char: 0.1567608267068863 +decode-recall;len 150;char: 0.13904224336147308 +decode-recall;len 160;char: 0.11005142331123352 +decode-recall;len 170;char: 0.14133255183696747 +decode-recall;len 180;char: 0.11357949674129486 +decode-recall;len 190;char: 0.14129066467285156 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9837700128555298 +decode-recall;len 30;char: 0.9019173383712769 +decode-recall;len 40;char: 0.8424087762832642 +decode-recall;len 50;char: 0.7828369140625 +decode-recall;len 60;char: 0.7711430788040161 +decode-recall;len 70;char: 0.7512604594230652 +decode-recall;len 80;char: 0.7420172691345215 +decode-recall;len 90;char: 0.6771597862243652 +decode-recall;len 100;char: 0.6657507419586182 +decode-recall;len 110;char: 0.6455274820327759 +decode-recall;len 120;char: 0.675864577293396 +decode-recall;len 130;char: 0.6584144830703735 +decode-recall;len 140;char: 0.6619051694869995 +decode-recall;len 150;char: 0.6861950755119324 +decode-recall;len 160;char: 0.628950834274292 +decode-recall;len 170;char: 0.6030941009521484 +decode-recall;len 180;char: 0.6463005542755127 +decode-recall;len 190;char: 0.6298536062240601 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +decode-recall;len 10;char: 0.9583333730697632 +decode-recall;len 20;char: 0.9576719999313354 +decode-recall;len 30;char: 0.8616358041763306 +decode-recall;len 40;char: 0.6806131601333618 +decode-recall;len 50;char: 0.7435375452041626 +decode-recall;len 60;char: 0.59131920337677 +decode-recall;len 70;char: 0.6088614463806152 +decode-recall;len 80;char: 0.5704365372657776 +decode-recall;len 90;char: 0.5909582376480103 +decode-recall;len 100;char: 0.5663297772407532 +decode-recall;len 110;char: 0.5697158575057983 +decode-recall;len 120;char: 0.5139976143836975 +decode-recall;len 130;char: 0.5378396511077881 +decode-recall;len 140;char: 0.5679680109024048 +decode-recall;len 150;char: 0.529783308506012 +decode-recall;len 160;char: 0.5054099559783936 +decode-recall;len 170;char: 0.5114948153495789 +decode-recall;len 180;char: 0.46522289514541626 +decode-recall;len 190;char: 0.5456217527389526 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 1 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +decode-recall;len 10;char: 0.8273810148239136 +decode-recall;len 20;char: 0.5246453285217285 +decode-recall;len 30;char: 0.4010128676891327 +decode-recall;len 40;char: 0.25740277767181396 +decode-recall;len 50;char: 0.20903700590133667 +decode-recall;len 60;char: 0.25335198640823364 +decode-recall;len 70;char: 0.26251229643821716 +decode-recall;len 80;char: 0.24413786828517914 +decode-recall;len 90;char: 0.2521582245826721 +decode-recall;len 100;char: 0.18235087394714355 +decode-recall;len 110;char: 0.20495472848415375 +decode-recall;len 120;char: 0.18929994106292725 +decode-recall;len 130;char: 0.1655801236629486 +decode-recall;len 140;char: 0.21107541024684906 +decode-recall;len 150;char: 0.1772863268852234 +decode-recall;len 160;char: 0.22399447858333588 +decode-recall;len 170;char: 0.17656299471855164 +decode-recall;len 180;char: 0.18592619895935059 +decode-recall;len 190;char: 0.18092688918113708 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.8982722759246826 +decode-recall;len 40;char: 0.8318204879760742 +decode-recall;len 50;char: 0.7525131702423096 +decode-recall;len 60;char: 0.6944005489349365 +decode-recall;len 70;char: 0.7147359848022461 +decode-recall;len 80;char: 0.6599729657173157 +decode-recall;len 90;char: 0.7019939422607422 +decode-recall;len 100;char: 0.7068625688552856 +decode-recall;len 110;char: 0.645417332649231 +decode-recall;len 120;char: 0.6654264330863953 +decode-recall;len 130;char: 0.623115062713623 +decode-recall;len 140;char: 0.6522296667098999 +decode-recall;len 150;char: 0.6627637147903442 +decode-recall;len 160;char: 0.6040353178977966 +decode-recall;len 170;char: 0.6043486595153809 +decode-recall;len 180;char: 0.5950718522071838 +decode-recall;len 190;char: 0.6366118788719177 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +decode-recall;len 10;char: 0.9833333492279053 +decode-recall;len 20;char: 0.8914088606834412 +decode-recall;len 30;char: 0.8132957220077515 +decode-recall;len 40;char: 0.8084263801574707 +decode-recall;len 50;char: 0.7088941931724548 +decode-recall;len 60;char: 0.6568436622619629 +decode-recall;len 70;char: 0.5659459829330444 +decode-recall;len 80;char: 0.5979548096656799 +decode-recall;len 90;char: 0.5425933599472046 +decode-recall;len 100;char: 0.5482875108718872 +decode-recall;len 110;char: 0.5789443254470825 +decode-recall;len 120;char: 0.5474229454994202 +decode-recall;len 130;char: 0.5609880685806274 +decode-recall;len 140;char: 0.5086393356323242 +decode-recall;len 150;char: 0.53773432970047 +decode-recall;len 160;char: 0.5007563829421997 +decode-recall;len 170;char: 0.5466564893722534 +decode-recall;len 180;char: 0.47120603919029236 +decode-recall;len 190;char: 0.5038439035415649 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 2 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.2 --eval_p 0.9 +decode-recall;len 10;char: 0.8217593431472778 +decode-recall;len 20;char: 0.7598048448562622 +decode-recall;len 30;char: 0.46021175384521484 +decode-recall;len 40;char: 0.3154316544532776 +decode-recall;len 50;char: 0.32617223262786865 +decode-recall;len 60;char: 0.20565670728683472 +decode-recall;len 70;char: 0.22890642285346985 +decode-recall;len 80;char: 0.2691977322101593 +decode-recall;len 90;char: 0.22870469093322754 +decode-recall;len 100;char: 0.22319108247756958 +decode-recall;len 110;char: 0.23763267695903778 +decode-recall;len 120;char: 0.2287418246269226 +decode-recall;len 130;char: 0.18765096366405487 +decode-recall;len 140;char: 0.23073486983776093 +decode-recall;len 150;char: 0.20366615056991577 +decode-recall;len 160;char: 0.20052915811538696 +decode-recall;len 170;char: 0.1760997772216797 +decode-recall;len 180;char: 0.2209678292274475 +decode-recall;len 190;char: 0.2317652702331543 + diff --git a/source/official-code/mini/results/exp6.txt b/source/official-code/mini/results/exp6.txt new file mode 100644 index 0000000000000000000000000000000000000000..1995c885e4b76f89b4a0570872faccb2e3ee89d2 --- /dev/null +++ b/source/official-code/mini/results/exp6.txt @@ -0,0 +1,441 @@ +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9839743971824646 +decode-recall;len 30;char: 0.9826388359069824 +decode-recall;len 40;char: 0.9728364944458008 +decode-recall;len 50;char: 0.9463912844657898 +decode-recall;len 60;char: 0.9573092460632324 +decode-recall;len 70;char: 0.8931291103363037 +decode-recall;len 80;char: 0.9380146861076355 +decode-recall;len 90;char: 0.825532853603363 +decode-recall;len 100;char: 0.922784686088562 +decode-recall;len 110;char: 0.9431909322738647 +decode-recall;len 120;char: 0.7785084247589111 +decode-recall;len 130;char: 0.8110101222991943 +decode-recall;len 140;char: 0.7585537433624268 +decode-recall;len 150;char: 0.5966030955314636 +decode-recall;len 160;char: 0.7700721025466919 +decode-recall;len 170;char: 0.668998658657074 +decode-recall;len 180;char: 0.672031581401825 +decode-recall;len 190;char: 0.7397011518478394 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9978070259094238 +decode-recall;len 30;char: 0.9960317611694336 +decode-recall;len 40;char: 0.975534200668335 +decode-recall;len 50;char: 0.9783810973167419 +decode-recall;len 60;char: 0.9597319960594177 +decode-recall;len 70;char: 0.8541059494018555 +decode-recall;len 80;char: 0.9150279760360718 +decode-recall;len 90;char: 0.8496094942092896 +decode-recall;len 100;char: 0.9209825992584229 +decode-recall;len 110;char: 0.8143486976623535 +decode-recall;len 120;char: 0.9066566228866577 +decode-recall;len 130;char: 0.7893534898757935 +decode-recall;len 140;char: 0.7485789656639099 +decode-recall;len 150;char: 0.6825671195983887 +decode-recall;len 160;char: 0.6903622150421143 +decode-recall;len 170;char: 0.8622487783432007 +decode-recall;len 180;char: 0.6279866099357605 +decode-recall;len 190;char: 0.7726203799247742 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.01 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9583333730697632 +decode-recall;len 30;char: 0.9519927501678467 +decode-recall;len 40;char: 0.8565229177474976 +decode-recall;len 50;char: 0.8868469595909119 +decode-recall;len 60;char: 0.8886715769767761 +decode-recall;len 70;char: 0.8149248361587524 +decode-recall;len 80;char: 0.7047624588012695 +decode-recall;len 90;char: 0.8494759798049927 +decode-recall;len 100;char: 0.8000633120536804 +decode-recall;len 110;char: 0.6424881219863892 +decode-recall;len 120;char: 0.6211034059524536 +decode-recall;len 130;char: 0.6797196269035339 +decode-recall;len 140;char: 0.6168652176856995 +decode-recall;len 150;char: 0.5181074738502502 +decode-recall;len 160;char: 0.712507963180542 +decode-recall;len 170;char: 0.6165227293968201 +decode-recall;len 180;char: 0.7194132208824158 +decode-recall;len 190;char: 0.6193423867225647 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.05 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.9425987005233765 +decode-recall;len 40;char: 0.7780744433403015 +decode-recall;len 50;char: 0.681334376335144 +decode-recall;len 60;char: 0.6982781887054443 +decode-recall;len 70;char: 0.5982742309570312 +decode-recall;len 80;char: 0.5248221158981323 +decode-recall;len 90;char: 0.5777719616889954 +decode-recall;len 100;char: 0.46661803126335144 +decode-recall;len 110;char: 0.4597357511520386 +decode-recall;len 120;char: 0.445390909910202 +decode-recall;len 130;char: 0.4492705464363098 +decode-recall;len 140;char: 0.388039767742157 +decode-recall;len 150;char: 0.39036476612091064 +decode-recall;len 160;char: 0.4723268151283264 +decode-recall;len 170;char: 0.325885534286499 +decode-recall;len 180;char: 0.35857611894607544 +decode-recall;len 190;char: 0.3667928874492645 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.05 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.966993510723114 +decode-recall;len 30;char: 0.9662699103355408 +decode-recall;len 40;char: 0.8074728846549988 +decode-recall;len 50;char: 0.7286409139633179 +decode-recall;len 60;char: 0.8206396102905273 +decode-recall;len 70;char: 0.7272059917449951 +decode-recall;len 80;char: 0.5781219005584717 +decode-recall;len 90;char: 0.46522244811058044 +decode-recall;len 100;char: 0.46782171726226807 +decode-recall;len 110;char: 0.45075714588165283 +decode-recall;len 120;char: 0.47739624977111816 +decode-recall;len 130;char: 0.42194491624832153 +decode-recall;len 140;char: 0.3801685571670532 +decode-recall;len 150;char: 0.3854120671749115 +decode-recall;len 160;char: 0.36165356636047363 +decode-recall;len 170;char: 0.37237614393234253 +decode-recall;len 180;char: 0.36493682861328125 +decode-recall;len 190;char: 0.3674118220806122 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.05 --eval_p 0.2 +decode-recall;len 10;char: 0.9166666865348816 +decode-recall;len 20;char: 0.875 +decode-recall;len 30;char: 0.5969426035881042 +decode-recall;len 40;char: 0.600871205329895 +decode-recall;len 50;char: 0.4420318007469177 +decode-recall;len 60;char: 0.5953269004821777 +decode-recall;len 70;char: 0.38207802176475525 +decode-recall;len 80;char: 0.4652041792869568 +decode-recall;len 90;char: 0.3372572064399719 +decode-recall;len 100;char: 0.2445284128189087 +decode-recall;len 110;char: 0.21415947377681732 +decode-recall;len 120;char: 0.31948643922805786 +decode-recall;len 130;char: 0.23503665626049042 +decode-recall;len 140;char: 0.3602283000946045 +decode-recall;len 150;char: 0.2659475803375244 +decode-recall;len 160;char: 0.39668914675712585 +decode-recall;len 170;char: 0.3096422553062439 +decode-recall;len 180;char: 0.19454425573349 +decode-recall;len 190;char: 0.2273067831993103 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.1 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9958333373069763 +decode-recall;len 30;char: 0.8670961856842041 +decode-recall;len 40;char: 0.7221239805221558 +decode-recall;len 50;char: 0.6698314547538757 +decode-recall;len 60;char: 0.6526094079017639 +decode-recall;len 70;char: 0.6048009395599365 +decode-recall;len 80;char: 0.5076407194137573 +decode-recall;len 90;char: 0.49772629141807556 +decode-recall;len 100;char: 0.46284306049346924 +decode-recall;len 110;char: 0.40555018186569214 +decode-recall;len 120;char: 0.40698033571243286 +decode-recall;len 130;char: 0.48512932658195496 +decode-recall;len 140;char: 0.39473432302474976 +decode-recall;len 150;char: 0.4101603031158447 +decode-recall;len 160;char: 0.417940229177475 +decode-recall;len 170;char: 0.4162713289260864 +decode-recall;len 180;char: 0.4133930206298828 +decode-recall;len 190;char: 0.3812001943588257 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.1 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9763986468315125 +decode-recall;len 30;char: 0.8680853247642517 +decode-recall;len 40;char: 0.7201847434043884 +decode-recall;len 50;char: 0.7008947730064392 +decode-recall;len 60;char: 0.49897250533103943 +decode-recall;len 70;char: 0.4309538006782532 +decode-recall;len 80;char: 0.5042560696601868 +decode-recall;len 90;char: 0.461829274892807 +decode-recall;len 100;char: 0.39619433879852295 +decode-recall;len 110;char: 0.41375693678855896 +decode-recall;len 120;char: 0.3576417863368988 +decode-recall;len 130;char: 0.36866495013237 +decode-recall;len 140;char: 0.3767165541648865 +decode-recall;len 150;char: 0.35362058877944946 +decode-recall;len 160;char: 0.33684393763542175 +decode-recall;len 170;char: 0.37370389699935913 +decode-recall;len 180;char: 0.334971159696579 +decode-recall;len 190;char: 0.3243510127067566 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.1 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.8092488050460815 +decode-recall;len 30;char: 0.6507241725921631 +decode-recall;len 40;char: 0.5354018211364746 +decode-recall;len 50;char: 0.3459649085998535 +decode-recall;len 60;char: 0.38969242572784424 +decode-recall;len 70;char: 0.3280467391014099 +decode-recall;len 80;char: 0.349764347076416 +decode-recall;len 90;char: 0.3474988341331482 +decode-recall;len 100;char: 0.3487118184566498 +decode-recall;len 110;char: 0.2681160569190979 +decode-recall;len 120;char: 0.32254600524902344 +decode-recall;len 130;char: 0.30213263630867004 +decode-recall;len 140;char: 0.2461973875761032 +decode-recall;len 150;char: 0.27790969610214233 +decode-recall;len 160;char: 0.2383984625339508 +decode-recall;len 170;char: 0.19711744785308838 +decode-recall;len 180;char: 0.21511217951774597 +decode-recall;len 190;char: 0.2432018518447876 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.3 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 1.0 +decode-recall;len 30;char: 0.9444553256034851 +decode-recall;len 40;char: 0.8684915900230408 +decode-recall;len 50;char: 0.8239125609397888 +decode-recall;len 60;char: 0.761591911315918 +decode-recall;len 70;char: 0.7392208576202393 +decode-recall;len 80;char: 0.7554613351821899 +decode-recall;len 90;char: 0.7285596132278442 +decode-recall;len 100;char: 0.7414097189903259 +decode-recall;len 110;char: 0.725998044013977 +decode-recall;len 120;char: 0.6803873777389526 +decode-recall;len 130;char: 0.6838403940200806 +decode-recall;len 140;char: 0.7218019366264343 +decode-recall;len 150;char: 0.6907961368560791 +decode-recall;len 160;char: 0.6729775667190552 +decode-recall;len 170;char: 0.6575527191162109 +decode-recall;len 180;char: 0.6469860076904297 +decode-recall;len 190;char: 0.655637800693512 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.3 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.8920996189117432 +decode-recall;len 30;char: 0.8693305850028992 +decode-recall;len 40;char: 0.8005518913269043 +decode-recall;len 50;char: 0.7215644121170044 +decode-recall;len 60;char: 0.721436619758606 +decode-recall;len 70;char: 0.6855753660202026 +decode-recall;len 80;char: 0.6638321876525879 +decode-recall;len 90;char: 0.6527290344238281 +decode-recall;len 100;char: 0.6408931016921997 +decode-recall;len 110;char: 0.6194512248039246 +decode-recall;len 120;char: 0.6633073091506958 +decode-recall;len 130;char: 0.6225637793540955 +decode-recall;len 140;char: 0.5811552405357361 +decode-recall;len 150;char: 0.5951573848724365 +decode-recall;len 160;char: 0.5723309516906738 +decode-recall;len 170;char: 0.604819655418396 +decode-recall;len 180;char: 0.6046389937400818 +decode-recall;len 190;char: 0.5875576138496399 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.3 --eval_p 0.2 +decode-recall;len 10;char: 0.5095899701118469 +decode-recall;len 20;char: 0.36357948184013367 +decode-recall;len 30;char: 0.21687152981758118 +decode-recall;len 40;char: 0.32064127922058105 +decode-recall;len 50;char: 0.29598379135131836 +decode-recall;len 60;char: 0.27045029401779175 +decode-recall;len 70;char: 0.22070303559303284 +decode-recall;len 80;char: 0.24088101089000702 +decode-recall;len 90;char: 0.20588040351867676 +decode-recall;len 100;char: 0.17035947740077972 +decode-recall;len 110;char: 0.2038043588399887 +decode-recall;len 120;char: 0.21147987246513367 +decode-recall;len 130;char: 0.21802572906017303 +decode-recall;len 140;char: 0.20252850651741028 +decode-recall;len 150;char: 0.17454300820827484 +decode-recall;len 160;char: 0.1947314739227295 +decode-recall;len 170;char: 0.23094189167022705 +decode-recall;len 180;char: 0.21015429496765137 +decode-recall;len 190;char: 0.21769671142101288 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.5 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9583333730697632 +decode-recall;len 30;char: 0.9565032720565796 +decode-recall;len 40;char: 0.9017793536186218 +decode-recall;len 50;char: 0.89229416847229 +decode-recall;len 60;char: 0.8494696021080017 +decode-recall;len 70;char: 0.8068538904190063 +decode-recall;len 80;char: 0.8198719024658203 +decode-recall;len 90;char: 0.7913392782211304 +decode-recall;len 100;char: 0.7630846500396729 +decode-recall;len 110;char: 0.7344298362731934 +decode-recall;len 120;char: 0.7266544699668884 +decode-recall;len 130;char: 0.7437366843223572 +decode-recall;len 140;char: 0.709819495677948 +decode-recall;len 150;char: 0.7365659475326538 +decode-recall;len 160;char: 0.7246503233909607 +decode-recall;len 170;char: 0.7197468280792236 +decode-recall;len 180;char: 0.7128164172172546 +decode-recall;len 190;char: 0.6970285773277283 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.5 --eval_p 0.2 +decode-recall;len 10;char: 0.9791666865348816 +decode-recall;len 20;char: 0.9548611044883728 +decode-recall;len 30;char: 0.9150794744491577 +decode-recall;len 40;char: 0.7806445360183716 +decode-recall;len 50;char: 0.7205086946487427 +decode-recall;len 60;char: 0.7212536334991455 +decode-recall;len 70;char: 0.6868728399276733 +decode-recall;len 80;char: 0.6554353833198547 +decode-recall;len 90;char: 0.5966026782989502 +decode-recall;len 100;char: 0.632200300693512 +decode-recall;len 110;char: 0.5915488600730896 +decode-recall;len 120;char: 0.5905436277389526 +decode-recall;len 130;char: 0.6043691039085388 +decode-recall;len 140;char: 0.5753965377807617 +decode-recall;len 150;char: 0.5882259607315063 +decode-recall;len 160;char: 0.5929147601127625 +decode-recall;len 170;char: 0.5453062653541565 +decode-recall;len 180;char: 0.568469762802124 +decode-recall;len 190;char: 0.5589306354522705 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.5 --eval_p 0.2 +decode-recall;len 10;char: 0.8541666865348816 +decode-recall;len 20;char: 0.6634920835494995 +decode-recall;len 30;char: 0.6116628050804138 +decode-recall;len 40;char: 0.523457407951355 +decode-recall;len 50;char: 0.5439178943634033 +decode-recall;len 60;char: 0.49271517992019653 +decode-recall;len 70;char: 0.5234296917915344 +decode-recall;len 80;char: 0.4632115364074707 +decode-recall;len 90;char: 0.47875162959098816 +decode-recall;len 100;char: 0.447121798992157 +decode-recall;len 110;char: 0.4622271656990051 +decode-recall;len 120;char: 0.44136881828308105 +decode-recall;len 130;char: 0.4753565192222595 +decode-recall;len 140;char: 0.45468372106552124 +decode-recall;len 150;char: 0.4299287796020508 +decode-recall;len 160;char: 0.46774059534072876 +decode-recall;len 170;char: 0.4483047425746918 +decode-recall;len 180;char: 0.4465528130531311 +decode-recall;len 190;char: 0.4275706708431244 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.8 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9861111044883728 +decode-recall;len 30;char: 1.0 +decode-recall;len 40;char: 0.9497170448303223 +decode-recall;len 50;char: 0.9579401016235352 +decode-recall;len 60;char: 0.9093788862228394 +decode-recall;len 70;char: 0.9015135169029236 +decode-recall;len 80;char: 0.8725351095199585 +decode-recall;len 90;char: 0.8664776682853699 +decode-recall;len 100;char: 0.824219822883606 +decode-recall;len 110;char: 0.7697595357894897 +decode-recall;len 120;char: 0.7889339327812195 +decode-recall;len 130;char: 0.745344340801239 +decode-recall;len 140;char: 0.780003547668457 +decode-recall;len 150;char: 0.7187285423278809 +decode-recall;len 160;char: 0.7242485284805298 +decode-recall;len 170;char: 0.7086786031723022 +decode-recall;len 180;char: 0.7007496356964111 +decode-recall;len 190;char: 0.714909553527832 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.8 --eval_p 0.2 +decode-recall;len 10;char: 0.9861111640930176 +decode-recall;len 20;char: 0.834027886390686 +decode-recall;len 30;char: 0.8582799434661865 +decode-recall;len 40;char: 0.8049529790878296 +decode-recall;len 50;char: 0.718096137046814 +decode-recall;len 60;char: 0.6885313987731934 +decode-recall;len 70;char: 0.6983524560928345 +decode-recall;len 80;char: 0.6616459488868713 +decode-recall;len 90;char: 0.6337867975234985 +decode-recall;len 100;char: 0.6255768537521362 +decode-recall;len 110;char: 0.5797140598297119 +decode-recall;len 120;char: 0.5607953071594238 +decode-recall;len 130;char: 0.5424487590789795 +decode-recall;len 140;char: 0.5922824144363403 +decode-recall;len 150;char: 0.5817781686782837 +decode-recall;len 160;char: 0.5854610204696655 +decode-recall;len 170;char: 0.5501068830490112 +decode-recall;len 180;char: 0.5434957146644592 +decode-recall;len 190;char: 0.5256320238113403 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.8 --eval_p 0.2 +decode-recall;len 10;char: 0.9861111640930176 +decode-recall;len 20;char: 0.9375 +decode-recall;len 30;char: 0.6252726316452026 +decode-recall;len 40;char: 0.7323065996170044 +decode-recall;len 50;char: 0.7868205308914185 +decode-recall;len 60;char: 0.7438141703605652 +decode-recall;len 70;char: 0.6990631818771362 +decode-recall;len 80;char: 0.7361322641372681 +decode-recall;len 90;char: 0.7039856910705566 +decode-recall;len 100;char: 0.6624481081962585 +decode-recall;len 110;char: 0.6319422125816345 +decode-recall;len 120;char: 0.6606430411338806 +decode-recall;len 130;char: 0.6490309238433838 +decode-recall;len 140;char: 0.6448407173156738 +decode-recall;len 150;char: 0.6821736097335815 +decode-recall;len 160;char: 0.6513088941574097 +decode-recall;len 170;char: 0.6218315362930298 +decode-recall;len 180;char: 0.6168641448020935 +decode-recall;len 190;char: 0.6524041891098022 + +Command: python3 main.py --model hybrid --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.9 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9916666746139526 +decode-recall;len 30;char: 0.9916666746139526 +decode-recall;len 40;char: 0.9343253374099731 +decode-recall;len 50;char: 0.9326111078262329 +decode-recall;len 60;char: 0.8871750235557556 +decode-recall;len 70;char: 0.867098331451416 +decode-recall;len 80;char: 0.8480274081230164 +decode-recall;len 90;char: 0.8509509563446045 +decode-recall;len 100;char: 0.7933749556541443 +decode-recall;len 110;char: 0.8149423003196716 +decode-recall;len 120;char: 0.7620548605918884 +decode-recall;len 130;char: 0.767452597618103 +decode-recall;len 140;char: 0.7621418833732605 +decode-recall;len 150;char: 0.7144396305084229 +decode-recall;len 160;char: 0.7058788537979126 +decode-recall;len 170;char: 0.7241623401641846 +decode-recall;len 180;char: 0.7075862884521484 +decode-recall;len 190;char: 0.7169740200042725 + +Command: python3 main.py --model T_rope --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.9 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.7638888359069824 +decode-recall;len 30;char: 0.9305555820465088 +decode-recall;len 40;char: 0.8693834543228149 +decode-recall;len 50;char: 0.7903769016265869 +decode-recall;len 60;char: 0.7646486163139343 +decode-recall;len 70;char: 0.7118761539459229 +decode-recall;len 80;char: 0.6932067275047302 +decode-recall;len 90;char: 0.6749035120010376 +decode-recall;len 100;char: 0.6076090931892395 +decode-recall;len 110;char: 0.6141788959503174 +decode-recall;len 120;char: 0.5813370943069458 +decode-recall;len 130;char: 0.6079272031784058 +decode-recall;len 140;char: 0.6005193591117859 +decode-recall;len 150;char: 0.6140104532241821 +decode-recall;len 160;char: 0.5730657577514648 +decode-recall;len 170;char: 0.5822576284408569 +decode-recall;len 180;char: 0.5833277106285095 +decode-recall;len 190;char: 0.5322886109352112 + +Command: python3 main.py --model mamba --train_task decode-recall --eval_task decode-recall --sequence_length 200 --eval_equence_length 200 --lr 0.0003 --epochs 1 --save False --run_number 0 --min_train_length 10 --max_train_length 50 --min_eval_length 10 --max_eval_length 200 --eval_jump_type linear --eval_linear_jump_size 10 --p 0.9 --eval_p 0.2 +decode-recall;len 10;char: 1.0 +decode-recall;len 20;char: 0.9583333730697632 +decode-recall;len 30;char: 0.993055522441864 +decode-recall;len 40;char: 0.9285790324211121 +decode-recall;len 50;char: 0.9541666507720947 +decode-recall;len 60;char: 0.905333399772644 +decode-recall;len 70;char: 0.9525995254516602 +decode-recall;len 80;char: 0.9057942628860474 +decode-recall;len 90;char: 0.8861129283905029 +decode-recall;len 100;char: 0.8509207963943481 +decode-recall;len 110;char: 0.8250939846038818 +decode-recall;len 120;char: 0.9040300250053406 +decode-recall;len 130;char: 0.8706690073013306 +decode-recall;len 140;char: 0.8470208048820496 +decode-recall;len 150;char: 0.8393076658248901 +decode-recall;len 160;char: 0.8449863195419312 +decode-recall;len 170;char: 0.844980001449585 +decode-recall;len 180;char: 0.8049443960189819 +decode-recall;len 190;char: 0.8224444389343262 + diff --git a/source/official-code/mini/results/fig/eval_p_0.2.png b/source/official-code/mini/results/fig/eval_p_0.2.png new file mode 100644 index 0000000000000000000000000000000000000000..42956a3679a426b2fb49d1b403b28e5e35fd7bfc Binary files /dev/null and b/source/official-code/mini/results/fig/eval_p_0.2.png differ diff --git a/source/official-code/mini/results/fig/p_0.01_eval_p_0.2.png b/source/official-code/mini/results/fig/p_0.01_eval_p_0.2.png new file mode 100644 index 0000000000000000000000000000000000000000..c0a9a8421816a93416b75b2969676bd3f19ede04 Binary files /dev/null and b/source/official-code/mini/results/fig/p_0.01_eval_p_0.2.png differ diff --git a/source/official-code/mini/results/fig/p_0.2_eval_p_0.01.png b/source/official-code/mini/results/fig/p_0.2_eval_p_0.01.png new file mode 100644 index 0000000000000000000000000000000000000000..8d828ef0a34bd54dc2969ef75f88a60cc8a982ed Binary files /dev/null and b/source/official-code/mini/results/fig/p_0.2_eval_p_0.01.png differ diff --git a/source/official-code/mini/results/fig/p_0.2_eval_p_0.05.png b/source/official-code/mini/results/fig/p_0.2_eval_p_0.05.png new file mode 100644 index 0000000000000000000000000000000000000000..95c0e53435d863f7d2d4c63b85fa8ed38982add2 --- /dev/null +++ b/source/official-code/mini/results/fig/p_0.2_eval_p_0.05.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2280f32b902648f92735d3135617f1bc611c0b27c5684cf6006870d14bcb3fcd +size 148189 diff --git a/source/official-code/mini/results/fig/p_0.2_eval_p_0.1.png b/source/official-code/mini/results/fig/p_0.2_eval_p_0.1.png new file mode 100644 index 0000000000000000000000000000000000000000..9fc897229f21edfba794397153ae1acb9b4ec72e --- /dev/null +++ b/source/official-code/mini/results/fig/p_0.2_eval_p_0.1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:24cc97585798a3ca60b27697bf5a89b93ede2895d9b82be9093d0fb10fc370df +size 153602 diff --git a/source/official-code/mini/results/fig/p_0.2_eval_p_0.2.png b/source/official-code/mini/results/fig/p_0.2_eval_p_0.2.png new file mode 100644 index 0000000000000000000000000000000000000000..e77219163acea1001a06f12bf0cc8add236c8ccd Binary files /dev/null and b/source/official-code/mini/results/fig/p_0.2_eval_p_0.2.png differ diff --git a/source/official-code/mini/results/fig/p_0.2_eval_p_0.3.png b/source/official-code/mini/results/fig/p_0.2_eval_p_0.3.png new file mode 100644 index 0000000000000000000000000000000000000000..a34d10d1f94ac73b0f5cc17af799bf3a64a8841f --- /dev/null +++ b/source/official-code/mini/results/fig/p_0.2_eval_p_0.3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3200afa19cd9ebfd1ea5f6b1f53d02ad3683dcc3741ae00c67f8e34a89d6affc +size 145929 diff --git a/source/official-code/mini/results/fig/p_0.2_eval_p_0.5.png b/source/official-code/mini/results/fig/p_0.2_eval_p_0.5.png new file mode 100644 index 0000000000000000000000000000000000000000..c8702da88bafee8f1e322b83b4c2df4245f11eeb --- /dev/null +++ b/source/official-code/mini/results/fig/p_0.2_eval_p_0.5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a71d6ec5fa5e3200b6f266b217c9850111bd81f5b256422a522362d2cf790c3c +size 149226 diff --git a/source/official-code/mini/results/fig/p_0.2_eval_p_0.8.png b/source/official-code/mini/results/fig/p_0.2_eval_p_0.8.png new file mode 100644 index 0000000000000000000000000000000000000000..7f479f7a2cf30f6d8620dde2170ee5990a27f047 --- /dev/null +++ b/source/official-code/mini/results/fig/p_0.2_eval_p_0.8.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09b70c10e52b38eaa39512229f4c4155d701f4f6d7ad2b24914b94a4a6a1a4a0 +size 147395 diff --git a/source/official-code/mini/temp_results/results.png b/source/official-code/mini/temp_results/results.png new file mode 100644 index 0000000000000000000000000000000000000000..b3809ba5c1f43b09e9cfaac1b95f59809bf7c234 Binary files /dev/null and b/source/official-code/mini/temp_results/results.png differ diff --git a/source/official-code/mini/temp_results/temp_results.ipynb b/source/official-code/mini/temp_results/temp_results.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..b0d689799b5b6841f430d77f3756299b0fac2835 --- /dev/null +++ b/source/official-code/mini/temp_results/temp_results.ipynb @@ -0,0 +1,271 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "c41fcb05-d088-4c69-8257-05e907b66e9b", + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import seaborn as sns" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "96d0bbd7-052f-45bc-9b28-68b6d8d27f6d", + "metadata": {}, + "outputs": [], + "source": [ + "lengths = np.arange(20, 100, 5)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "21f2fc74-843e-41d7-88e5-8df1e10fd5ec", + "metadata": {}, + "outputs": [], + "source": [ + "# Commands\n", + "# python3 synthetic_exps/main.py --model \"mamba\" --train_task \"var-copy\" --eval_task \"var-copy\" --num_vocab 26 --num_numbers 5 --min_train_len 20 --max_train_len 50 --min_eval_len 20 --max_eval_len 100 --sequence_length 100 --lr 1e-3 --window 100\n", + "# python3 synthetic_exps/main.py --model \"hybrid\" --train_task \"var-copy\" --eval_task \"var-copy\" --num_vocab 26 --num_numbers 5 --min_train_len 20 --max_train_len 50 --min_eval_len 20 --max_eval_len 100 --sequence_length 100 --lr 1e-3 --window 100\n", + "# python3 synthetic_exps/main.py --model \"T_rope\" --train_task \"var-copy\" --eval_task \"var-copy\" --num_vocab 26 --num_numbers 5 --min_train_len 20 --max_train_len 50 --min_eval_len 20 --max_eval_len 100 --sequence_length 100 --lr 1e-3 --window 100\n", + "\n", + "# mamba_losses_str = []\n", + "# mamba_losses_str.append([0.9583333333333334, 0.8333333333333334, 0.875, 0.9583333333333334, 0.7916666666666666, 0.8333333333333334, 0.6666666666666666, 0.75, 0.6666666666666666, 0.75, 0.7916666666666666, 0.5, 0.625, 0.6666666666666666, 0.5833333333333334, 0.75])\n", + "# mamba_losses_str.append([1.0, 1.0, 1.0, 1.0, 0.9583333333333334, 0.9583333333333334, 0.9583333333333334, 1.0, 1.0, 0.9583333333333334, 1.0, 1.0, 1.0, 1.0, 1.0, 0.9583333333333334])\n", + "# mamba_losses_str.append([0.9166666666666666, 0.9166666666666666, 0.7916666666666666, 0.9166666666666666, 0.7916666666666666, 0.875, 0.75, 0.625, 0.6666666666666666, 0.5833333333333334, 0.7083333333333334, 0.5416666666666666, 0.2916666666666667, 0.4166666666666667, 0.4583333333333333, 0.5416666666666666])\n", + "# mamba_losses_str.append([0.08333333333333333, 0.0, 0.0, 0.0, 0.041666666666666664, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])\n", + "# mamba_losses_str.append([1.0, 1.0, 1.0, 1.0, 1.0, 0.9583333333333334, 1.0, 1.0, 0.9166666666666666, 1.0, 1.0, 0.9166666666666666, 0.9583333333333334, 0.9583333333333334, 0.9583333333333334, 0.9583333333333334])\n", + "\n", + "mamba_losses_char = []\n", + "mamba_losses_char.append([0.8712121844291687, 0.989804744720459, 0.9943103790283203, 0.9984568357467651, 0.9924173355102539, 0.9956421852111816, 0.9919545650482178, 0.993931770324707, 0.9930080771446228, 0.9932330846786499, 0.9945930242538452, 0.9922288656234741, 0.9930631518363953, 0.9950677752494812, 0.9948166608810425, 0.9971145391464233])\n", + "mamba_losses_char.append([0.9583333730697632, 1.0, 1.0, 1.0, 0.9983333349227905, 0.9988738894462585, 0.9990530014038086, 1.0, 1.0, 0.9985876083374023, 1.0, 1.0, 1.0, 1.0, 1.0, 0.9985955953598022])\n", + "mamba_losses_char.append([0.9521520137786865, 0.9923407435417175, 0.9903331995010376, 0.9967995882034302, 0.9908854365348816, 0.9954594373703003, 0.9942028522491455, 0.9919361472129822, 0.9911448359489441, 0.9891352653503418, 0.993928849697113, 0.991875410079956, 0.9882534742355347, 0.9916971921920776, 0.9932982325553894, 0.9920315742492676])\n", + "mamba_losses_char.append([0.307985782623291, 0.33961021900177, 0.372397780418396, 0.3677912652492523, 0.32721439003944397, 0.311903715133667, 0.35790500044822693, 0.3320731520652771, 0.35711658000946045, 0.3501630425453186, 0.36211106181144714, 0.3410734534263611, 0.3397946357727051, 0.33059531450271606, 0.34477946162223816, 0.3473919630050659])\n", + "mamba_losses_char.append([1.0, 1.0, 1.0, 1.0, 1.0, 0.9989583492279053, 1.0, 1.0, 0.9983805418014526, 1.0, 1.0, 0.9987462759017944, 0.999404788017273, 0.999458909034729, 0.9994980096817017, 0.9995211362838745])\n", + "\n", + "# hybrid_losses_str = []\n", + "# hybrid_losses_str.append([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.9583333333333334, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])\n", + "# hybrid_losses_str.append([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])\n", + "# hybrid_losses_str.append([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])\n", + "# hybrid_losses_str.append([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.9583333333333334, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])\n", + "# hybrid_losses_str.append([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])\n", + "\n", + "hybrid_losses_char = []\n", + "hybrid_losses_char.append([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.9989837408065796, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])\n", + "hybrid_losses_char.append([0.9583333730697632, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])\n", + "hybrid_losses_char.append([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])\n", + "hybrid_losses_char.append([1.0, 0.9583333730697632, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.9991987943649292, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])\n", + "hybrid_losses_char.append([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])\n", + "\n", + "# attn_losses_str = []\n", + "# attn_losses_str.append([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])\n", + "# attn_losses_str.append([1.0, 1.0, 1.0, 0.9583333333333334, 1.0, 0.9583333333333334, 1.0, 0.9583333333333334, 1.0, 0.9166666666666666, 1.0, 0.9583333333333334, 0.9166666666666666, 0.875, 1.0, 0.9583333333333334])\n", + "# attn_losses_str.append([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])\n", + "# attn_losses_str.append([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.9166666666666666, 0.9583333333333334, 1.0, 1.0, 0.9583333333333334, 1.0, 1.0])\n", + "# attn_losses_str.append([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.9583333333333334, 1.0, 1.0, 1.0])\n", + "\n", + "attn_losses_char = []\n", + "attn_losses_char.append([0.9583333730697632, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])\n", + "attn_losses_char.append([0.9583333730697632, 0.9166666865348816, 1.0, 0.9978070259094238, 1.0, 0.9988738894462585, 1.0, 0.9954710006713867, 1.0, 0.9985250234603882, 1.0, 0.9939613342285156, 0.9939855933189392, 0.9968149662017822, 1.0, 0.9993962049484253])\n", + "attn_losses_char.append([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])\n", + "attn_losses_char.append([0.9583333730697632, 0.9583333730697632, 1.0, 0.9583333730697632, 1.0, 1.0, 1.0, 1.0, 1.0, 0.9956349730491638, 0.9986772537231445, 1.0, 1.0, 0.9973291158676147, 1.0, 1.0])\n", + "attn_losses_char.append([1.0, 0.9583333730697632, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.9994131922721863, 1.0, 1.0, 1.0])" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "4d01760f-19df-4f75-ad1a-e0c348534fca", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Selective Copy')" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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UwwjREREpCmGESIiItIUwwgRERFpimGEiIiINMUwQkRERJpiGCEiIiJNMYwQERGRpioURubNm4fo6Gj4+fmhW7du2L59e5nL9uzZE4qilJj69etX4UYTERGR9/A4jKxatQpJSUlISUnBzp070b59e8TGxuL06dOlLv/xxx/j1KlT7mnPnj3Q6/V44IEHLrvxREREVPN5HEZmz56N4cOHIyEhAa1bt8aCBQtgsViwePHiUpevU6cOIiIi3NOGDRtgsVgYRoiIiAgAYPBkYZvNhh07diA5Odk9T6fToVevXti6dWu51rFo0SI8+OCDCAgIKHMZq9UKq9Xq/jsrKwsAYLfbYbfbPWnyRbnWVZnrrM58rV7A92pmvd6N9Xo3b6y3vLUoQghR3pWePHkSkZGR2LJlC2JiYtzzx40bh02bNmHbtm0Xvf/27dvRrVs3bNu2DV27di1zualTp2LatGkl5q9YsQIWi6W8zSUiIiIN5eXlYeDAgcjMzERwcHCZy3nUM3K5Fi1ahHbt2l00iABAcnIykpKS3H9nZWUhKioKffr0uWgxnrLb7diwYQN69+4No9FYaeutrnytXsD3ama93o31ejdvrNe1Z+NSPAojoaGh0Ov1SE9PLzY/PT0dERERF71vbm4uVq5cieeee+6S2zGbzTCbzSXmG43GKnmCqmq91ZWv1Qv4Xs2s17uxXu/mTfWWtw6PBrCaTCZ06tQJqamp7nmqqiI1NbXYbpvSrF69GlarFQ8//LAnmyQiIiIv5/FumqSkJMTHx6Nz587o2rUr5syZg9zcXCQkJAAAhgwZgsjISMyaNavY/RYtWoS7774bdevWrZyWExERkVfwOIzExcXhzJkzmDJlCtLS0tChQwesX78e4eHhAIBjx45Bpyve4bJv3z5s3rwZX3/9deW0moiIiLxGhQawJiYmIjExsdTbNm7cWGJey5Yt4cFBO0RERORDeG0aIiIi0hTDCBEREWmKYYSIiIg0xTBCREREmmIYISIiIk0xjBAREZGmGEaIiIhIUwwjREREpCmGESIiItIUwwgRERFpimGEiIiINMUwQkRERJpiGCEiIiJNMYwQERGRphhGiIiISFMMI0RERKQphhEiIiLSFMMIERERaYphhIiIiDTFMEJERESaYhghIiIiTTGMEBERkaYYRoiIiEhTDCNERESkKYYRIiIi0hTDCBEREWmKYYSIiIg0xTBCREREmmIYISIiIk0xjBAREZGmGEaIiIhIUwwjREREpCmGESIiItIUwwgRERFpimGEiIiINMUwQkRERJpiGCEiIiJNMYwQERGRpioURubNm4fo6Gj4+fmhW7du2L59+0WXz8jIwKhRo1C/fn2YzWZcddVVWLt2bYUaTERERN7F4OkdVq1ahaSkJCxYsADdunXDnDlzEBsbi3379iEsLKzE8jabDb1790ZYWBg+/PBDREZG4u+//0ZISEhltJ+IiIhqOI/DyOzZszF8+HAkJCQAABYsWIA1a9Zg8eLFmDBhQonlFy9ejHPnzmHLli0wGo0AgOjo6MtrNREREXkNj8KIzWbDjh07kJyc7J6n0+nQq1cvbN26tdT7fP7554iJicGoUaPw2WefoV69ehg4cCDGjx8PvV5f6n2sViusVqv776ysLACA3W6H3W73pMkX5VpXZa6zOvO1egHfq5n1ejfW6928sd7y1qIIIUR5V3ry5ElERkZiy5YtiImJcc8fN24cNm3ahG3btpW4T6tWrXD06FEMGjQII0eOxMGDBzFy5Eg8+eSTSElJKXU7U6dOxbRp00rMX7FiBSwWS3mbS0RERBrKy8vDwIEDkZmZieDg4DKX83g3jadUVUVYWBjeeust6PV6dOrUCSdOnMDLL79cZhhJTk5GUlKS+++srCxERUWhT58+Fy3GU3a7HRs2bEDv3r3du5C8ma/VC/hezazXu7Fe7+aN9br2bFyKR2EkNDQUer0e6enpxeanp6cjIiKi1PvUr18fRqOx2C6Zq6++GmlpabDZbDCZTCXuYzabYTabS8w3Go1V8gRV1XqrK1+rF/C9mlmvd2O93s2b6i1vHR4d2msymdCpUyekpqa656mqitTU1GK7bYrq3r07Dh48CFVV3fP279+P+vXrlxpEiIiIyLd4fJ6RpKQkvP3223jvvffw559/4vHHH0dubq776JohQ4YUG+D6+OOP49y5cxg9ejT279+PNWvWYObMmRg1alTlVUFEREQ1lsdjRuLi4nDmzBlMmTIFaWlp6NChA9avX4/w8HAAwLFjx6DTFWacqKgofPXVVxg7diyuueYaREZGYvTo0Rg/fnzlVUFEREQ1VoUGsCYmJiIxMbHU2zZu3FhiXkxMDH766aeKbIqIiIi8HK9NQ0RERJpiGCEiIiJNMYwQERGRphhGiIiISFMMI0RERKQphhEiIiLSFMMIERERaYphhIiIiDTFMEJERESaYhghIiIiTTGMEBERkaYYRoiIiEhTDCNERESkKYYRIiIi0hTDCBEREWmKYYSIiIg0xTBCREREmmIYISIiIk0xjBAREZGmGEaIiIhIUwwjREREpCmGESIiItIUwwgRERFpimGEiIiINMUwQkRERJpiGCEiIiJNMYwQERGRphhGiIiISFMMI0RERKQphhEiIiLSFMMIERERaYphhIiIiDTFMEJERESaYhghIiIiTTGMEBERkaYYRoiIiEhTDCNERESkqQqFkXnz5iE6Ohp+fn7o1q0btm/fXuayS5YsgaIoxSY/P78KN5iIiIi8i8dhZNWqVUhKSkJKSgp27tyJ9u3bIzY2FqdPny7zPsHBwTh16pR7+vvvvy+r0UREROQ9PA4js2fPxvDhw5GQkIDWrVtjwYIFsFgsWLx4cZn3URQFERER7ik8PPyyGk1ERETew+DJwjabDTt27EBycrJ7nk6nQ69evbB169Yy75eTk4PGjRtDVVV07NgRM2fORJs2bcpc3mq1wmq1uv/OysoCANjtdtjtdk+afFGudVXmOqszX6sX8L2aWa93Y73ezRvrLW8tihBClHelJ0+eRGRkJLZs2YKYmBj3/HHjxmHTpk3Ytm1bifts3boVBw4cwDXXXIPMzEy88sor+P7777F37140bNiw1O1MnToV06ZNKzF/xYoVsFgs5W0uERERaSgvLw8DBw5EZmYmgoODy1zOo56RioiJiSkWXK6//npcffXVWLhwIZ5//vlS75OcnIykpCT331lZWYiKikKfPn0uWoyn7HY7NmzYgN69e8NoNFbaeqsrX6sX8L2aWa93Y73ezRvrde3ZuBSPwkhoaCj0ej3S09OLzU9PT0dERES51mE0GnHttdfi4MGDZS5jNpthNptLvW9VPEFVtd7qytfqBXyvZtbr3Vivd/Omestbh0cDWE0mEzp16oTU1FT3PFVVkZqaWqz342KcTid2796N+vXre7JpIiIi8lIe76ZJSkpCfHw8OnfujK5du2LOnDnIzc1FQkICAGDIkCGIjIzErFmzAADPPfccrrvuOjRv3hwZGRl4+eWX8ffff+ORRx6p3EqIiIioRvI4jMTFxeHMmTOYMmUK0tLS0KFDB6xfv959uO6xY8eg0xV2uJw/fx7Dhw9HWloaateujU6dOmHLli1o3bp15VVBRERENVaFBrAmJiYiMTGx1Ns2btxY7O/XXnsNr732WkU2Q0RERD6A16YhIiIiTTGMEBERkaYYRoiIiEhTDCNERESkKYYRIiIi0hTDCBEREWmKYYSIiIg0xTBCREREmmIYISIiIk0xjBAREZGmGEaIiIhIUwwjREREpCmGESIiItIUwwgRERFpimGEiIiINMUwQkRERJpiGCEiIiJNMYwQERGRphhGiIiISFMMI0RERKQphhEiIiLSFMMIERERaYphhIiIiDTFMEJERESaYhghIiIiTTGMEBERkaYYRoiIiEhTDCNERESkKYYRIiIi0hTDCBEREWmKYYSIiIg0xTBCREREmmIYISIiIk0xjBAREZGmGEaIiIhIUwwjREREpCmGESIiItIUwwgRERFpqkJhZN68eYiOjoafnx+6deuG7du3l+t+K1euhKIouPvuuyuyWSIiIvJCHoeRVatWISkpCSkpKdi5cyfat2+P2NhYnD59+qL3O3r0KJ5++mnceOONFW4sEREReR+Pw8js2bMxfPhwJCQkoHXr1liwYAEsFgsWL15c5n2cTicGDRqEadOmoWnTppfVYCIiIvIuBk8Wttls2LFjB5KTk93zdDodevXqha1bt5Z5v+eeew5hYWH4v//7P/zwww+X3I7VaoXVanX/nZWVBQCw2+2w2+2eNPmiXOuqzHVWZ75WL+B7NbNe78Z6vZs31lveWjwKI//++y+cTifCw8OLzQ8PD8dff/1V6n02b96MRYsWYdeuXeXezqxZszBt2rQS87/++mtYLBZPmlwuGzZsqPR1Vme+Vi/gezWzXu/Ger2bN9Wbl5dXruU8CiOeys7OxuDBg/H2228jNDS03PdLTk5GUlKS+++srCxERUWhT58+CA4OrrT22e12bNiwAb1794bRaKy09VZXvlYv4Hs1s17vxnq9mzfW69qzcSkehZHQ0FDo9Xqkp6cXm5+eno6IiIgSyx86dAhHjx5F//793fNUVZUbNhiwb98+NGvWrMT9zGYzzGZziflGo7FKnqCqWm915Wv1Ar5XM+v1bqzXu3lTveWtw6MBrCaTCZ06dUJqaqp7nqqqSE1NRUxMTInlW7Vqhd27d2PXrl3u6c4778TNN9+MXbt2ISoqypPNExERkRfyeDdNUlIS4uPj0blzZ3Tt2hVz5sxBbm4uEhISAABDhgxBZGQkZs2aBT8/P7Rt27bY/UNCQgCgxHwiIiLyTR6Hkbi4OJw5cwZTpkxBWloaOnTogPXr17sHtR47dgw6HU/sSkREROVToQGsiYmJSExMLPW2jRs3XvS+S5YsqcgmiYiIyEuxC4OIiIg0xTBCREREmmIYISIiIk0xjBAREZGmGEaIiIhIU1V6OniqXnJygK1b68NgUBARAdStK6fAQEBRtG4dERH5KoYRH2C1AgsXAtOnG2A0tsYnn+hx7hxw7hygqoDRWBhMyjvVqQMY+OohIqJKwI8TL+Z0AsuWASkpQFAQsHChE4qSin79+sJoNEJVgcxM4OzZsqfDh0vOy8+X6w8JKX94iYwEwsI0fTiIiKiaYhjxQkIAn30GTJoE5OUB06cDDz0EqKrA2rWFy+l0QO3acmrevPzrz8+/eIA5eBDYtq34vKwsICkJmDoV8Pev9JKJiKgGYxjxMt99ByQnA0ePApMnA8OHAyaTvO1/F0y+bP7+QMOGciqvvXuBYcOADh2ARYuAG26onLYQEVHNx6NpvMSOHUBsLHD33UD//rJ3YtSowiCitTZtgC1bgEcfle188kk5oJaILk0I4MQJYO1aBUePBkMIrVtEVLkYRmq4ffuAAQOAG28E2reXYzwmTZJHyFQ3ej3w1FPArl3Ab78B7doBqalat4qoelFV+WXigw9kL+dttwHh4UCjRsC4cXqMH38jrrnGgKlTgT//1Lq1RJWDYaSG+ucfuQumfXs55uPAAeCll+Rg0equRQu5O+mZZ2RPzvDhciAtXb6dO4G8PO59rSkcDmD3buC994AxY4AePeTA8DZt5P/zv/8Cd94JfP45kJ0N7NnjwHvvrceUKU7s3g107Ahccw0wY4YMMEQ1Fd+1apizZ4FZs4D//Ee+Sf3+O3DVVVq3ynM6HTByJNC3r9x106aNPPy4Xz+tW1Yz5eYCTzwBLF9ugE4Xi02bFDzxhHxcvVF6OrB4MbBkiQHZ2beiZUs9oqJQbGrYUP6sXbt6nEcnP18Gj507gV9/ldPvv8tD6zt0AK69Fhg6FHj9deDqq0vfxWq3A35+TvTtKzBwoAwon38OrFoFPPcc0LYtEBcne0ujo69wgUSXgWGkhsjJAV57DXjlFeD664HNm+W3opouOhr46itgyRJg0CA53mXOnJrRw1Nd7N0rP3zq1AH++suBjz7agt27b0TnzkC3bnLs0N13yw+9mkwI2aO2YIE8Wuymm4CUFCcOHvwdDRp0xcmTOvzzj/ywP35cTllZgMVSPJxcGFaiooBatSq3rZmZcndk0eDx55+y16NjRxk8kpLk782by3BeEUFB8v9m0CAgIwP49FMZTJ59Vq47Lg544AHPBpsTaYFhpJqzWoG33pKH5zZrJr8F9eihdasql6IACQlyYOtjjwGtWwPz5gH33691y6o3IWTvwOjRsot/6lQ5r0WLDIwe7cTs2TosXgyMHy+XefRROTVooHXLPfPvv3I3xsKFwPnz8rWyd6/8ELfbBdauPYO+fUWpYSsrS+7SdIUT1+8//VQ4LzdXfqhfGFYuDCxljcNKT5dho2jwOHRI3tcVPO67T/7esGHV9dKEhMielaFDZQ/qxx/LYDJuHHDddTKY3H8/EBFRNdsnuhwMI9WU0wksXw5MmSLfBN9+W/YaVIfu5qrSoIH8xrtypQwlK1fKUBIernXLqp/sbPkYffMN8MknQO/ecr7dXrhM3bpyXE5SErB+vXwsZ80C7rpL9pbcdFP1fT0JIXv/Fi4EPvxQfphOmwbcey9gNpd/PcHBMty2bl32djIzS4aVI0eA778v/Ds/X37Yu8JJZCRw6pQMHidPynFQHTsCnTvLwNehA1CvXmU8EhVTt64cizV8uAxLH30kg8nYsXKwe1ycDEihodq1kagohpFqRgjZ+zFpkvzG9vzzwMCB8kgUX6Ao8gRtt94qD/9t3RqYO1d2Q1fXD84r7ddf5YdJVJQ8KulS33T1ejkWp18/+Y19wQL5oV6/vhy3M3iw7BmoDjIygKVLZRtPnpTf8n/9VY6hqAqKIkNGSIg8uqs0QshLJ1zYw9Kunex1at9ehp7qKjxcPs8jR8rDgz/8UPY0JSYCt9wiX0v33CPH1pBvsNvlCTFzcwsns7nq/s/Kg2GkGtm4UR7Kd/hw4QnLPPkW6E3CwmTPyCefyDfRlSvlB5Qv7/sWApg/X/Z2JCfLydOQ2qwZ8PLLcrCjq+dpwgRgyBD5OJfVg1CVhAC2b5e9ICtXyl6F8ePlWIfqcLZeRSm8rEH79lq35vJERspddqNHA8eOycOH58+XvWx9+shgctdd1Ttc+QJVleMEXUHhwuDgybzS5hftQTWbgYAA2bu6cqV2NTOMVAM7dgATJ8r92M88I/f/V8fzhGjhnnuAnj3lroY2beQA3kce8b1ekowMWffWrcDatZc/bsjfX469GDoU+PlnGUo6dpSDo0eNkkdqVfWA1+xsYMUKGTIPHZI9ND/9JA9VparXqBHw9NNyOnRIBpNXX5Vfgm6/XQaT/v3lBxVVDSHkLsEff5Qnhdy82YD9+/vBZiv8aNbr5XNw4WSxlJxXt658Xi+1nGuexVJ9LnhaTZrhm/bvlz0gX3whPwBWrOBRJKWpXRt491355vjoo3Lf99tvA02aaN2yK2P7dln71VfLIzQqcyyCogBdu8rp1VflqfqfekruIhsxQn4w1a9fedsD5G6XhQvlmKiWLeVr/8EHGcC11KxZYW/bvn3yf+z55+UlHO64Q77+rr1WBlTXZDIV/u4ru5Evl80mBzpv2VIYQM6elV8EuncHJk924syZTejb9yaEhBgREFB9zqJd1RhGNHD8uPxH/+9/Zff4/v2+vfuhvG67DdizR3bhX3MNMHOm/CCr6GGR1Z0Q8jDnZ5+VR8o89VTV1hoaKh/bp5+WvS//+Y88mdY998jH+YYbKt4jlZsrP+AWLpTP4cCB8jDdzp0rtwa6fC1byoHzU6bI52rVKtlze/iwPElbaXS6soPKpf6+2G06nQ7nzjWD06mgdWugadOa9eF89mzx4PHzz7JH4vrr5TRmjPwfcO2OlEeH5aBhw5p/KL6nGEauoFOn5AfoO+/U7BOWaSk4WO7jjosD/u//5BvlokXyDdSbnD0rd6H8/rs8YiYm5sptW6+X3fOuaxzNny9fr1FRMpQMGlT+Xow9e2QAWboUaNxY9rYMGlT55/WgqtG2rZyef17+LYQcb1B0stlK//1it5V3ubw8YN++OvjlFz0OHpS3NWki3zcvnBo21PaLiRCyV8kVPn78UX7RvOoq2esxdKg8TUPLlr63m7k8GEaugNOngRdflG/qt90GbNvG/eKXq2dP+UE9ebLs4pwyRfYcVJf9n5fjxx/lbovOneUujTp1tGtL8+Zy983zzwPvvy/HlowbB8THywGvrVqVvE9BgTxiY+FC4JdfZHBcv16egI1vwjWbosieiSvVO2G3q1i79mf07dsXer0R//wjP+Bd05dfyp9Hjsg2tWhRelCpW7fyX3v5+fL17er12LJF9gB26SJ7PV5+WX6J4OHT5eMFb93V19mz8gX55pvyw9NbzppaXQQEALNny6Muhg0DVq+WY0vKOkSzulNVGVqnT5fnA3niierz4W2xyJ6oYcNkmJ43Tx71csMNsrekf3/Zjb9woTybbni47AX5/HMeMkqVQ6eTgzMbNQJ69Sp+m80mX39Fg8qWLfLnqVPyNVhaSGnRovwDdNPSivd67Nwpvyh07y7f3ydOlO/vNWk3UnXCMFIFMjLkh+ScOTIZf/ONPGkTVY2YGNmD8Pzz8tv3+PFyIF5NelM4fVoeTXLwILBpU/UdS6Eo8rV83XWFA17HjJFH+uTmyvOXfPKJPLFWdQlS5P1MJtlLV1pPXXa2vJCoK6T89ZcMyfv2yTP0RkaWHlSs1sJejx9/lL0vbdsWHnHWvbvcZcTXeeVgGKlEWVnyBF2vvipHnq9ZI9+Uqer5+cnBlvfdJw9Z/egj2UtSE3aHffedHNB5003y21ZNGU8RFiZD37hxwA8/yEOvtTzrKFFpgoJkj8WFvdJCAGfOFIaUffvk63jRIvmlwGiUX266d5f/n9ddJ0+OR1WDYaQS5ObKXTEvvSST+ccfyzMb0pXXsaMcsf7iizIIPvaYDlFRwVBVrVtWktMpe3Nefln2pD36aM38lqXXy25qoppEUWSgDguTuxuLcjplWPGGMWg1hZceFHll5OfLD5EmTeQ38RUr5LgQBhFtmUxyYOv27cD+/QomTboBEREG3HmnfL527JBvNlo6eVLu9165Up7IbMSImhlEiLyRXs8gcqUxjFSA1Sp7Qpo1k4csLlokB/XFxvIDpTpp2xb45BMnli1bh7VrnbjpJrlL5NZb5cCzO+6QvRLbt5d9/oSq8NVXcvBnVJQcjV8TdiUREVUlZj8P2GxyHML06XLf4ZtvAnff7b0n3fIWer1A584CMTHyhF5Op7zA3KZNcpo1S57T4IYb5GnWe/SQA0gr+6RDdrs8BPnNN+UUH1+56yciqqkYRsrB4ZA9IM89Jy8q9PLLwIABDCE1lV5fOKBt7Fh5SO3u3YXh5JVX5Lkyrr9eBpOePeW5Ay7n6Jzjx+W5Q7KyZC+aFhekIyKqrhhGLsLplPv0p02TH1jPPScvb899id5Fp5NXY23fXl6TRVWBP/6QwWTjRnmEVE6OPITYFU66dpVH8JTHF1/Isy/ed5883NtiqbpaiIhqIn6slkJV5Rkkp06VpyOePFleQ8bXrhXgq3S6wtNgjxolR9X/9ZcMJps2yTPpnj8vD/Xr2VMGlOuuK3m5e5sNmDBBnv5/4UIZZImIqCSGkSKEAD79FEhJAc6dAyZNkmedrEknz6LKpyjyirlXXw08/rh8nRw4UBhO3nlHnq+ga9fCcFK/vjzficMhj95p0ULrKoiIqi+GEcgPlzVr5ODCEyfkaX0ffbT83fDkWxSl8CyNjz4qXz+HDhWOORk2TI4ReeIJOb7IbNa6xURE1ZtPhxEhgF276mHmTD0OH5Zd6o8/zn365BlFkReUa95c9qQJIQeq1pQzqRIRac2njwf5+msFr7zSGf37Cxw5Iq/6yiBCl0tRGESIiDxRoTAyb948REdHw8/PD926dcP27dvLXPbjjz9G586dERISgoCAAHTo0AFLly6tcIMrU+/eAgsXbsD48SoCA7VuDRERkW/yOIysWrUKSUlJSElJwc6dO9G+fXvExsbi9OnTpS5fp04dTJo0CVu3bsXvv/+OhIQEJCQk4Kuvvrrsxl8unQ4ICLiCp94kIiKiEjweMzJ79mwMHz4cCQkJAIAFCxZgzZo1WLx4MSZMmFBi+Z4XXEFr9OjReO+997B582bExsaWug2r1Qqr1er+OysrCwBgt9tht9s9bXKZXOuqzHVWZ75WL+B7NbNe78Z6vZs31lveWhQhhCjvSm02GywWCz788EPcfffd7vnx8fHIyMjAZ599dtH7CyHw7bff4s4778Snn36K3r17l7rc1KlTMW3atBLzV6xYAQsHdRAREdUIeXl5GDhwIDIzMxEcHFzmch71jPz7779wOp0IDw8vNj88PBx//fVXmffLzMxEZGQkrFYr9Ho9/vOf/5QZRAAgOTkZSUlJ7r+zsrIQFRWFPn36XLQYT9ntdmzYsAG9e/eG0QfOaOZr9QK+VzPr9W6s17t5Y72uPRuXckUO7Q0KCsKuXbuQk5OD1NRUJCUloWnTpiV24biYzWaYSzk5g9ForJInqKrWW135Wr2A79XMer0b6/Vu3lRveevwKIyEhoZCr9cjPT292Pz09HRERESUeT+dTofmzZsDADp06IA///wTs2bNKjOMEBERke/w6Ggak8mETp06ITU11T1PVVWkpqYiJiam3OtRVbXYAFUiIiLyXR7vpklKSkJ8fDw6d+6Mrl27Ys6cOcjNzXUfXTNkyBBERkZi1qxZAIBZs2ahc+fOaNasGaxWK9auXYulS5di/vz5lVsJERER1Ugeh5G4uDicOXMGU6ZMQVpaGjp06ID169e7B7UeO3YMOl1hh0tubi5GjhyJf/75B/7+/mjVqhWWLVuGuLi4yquCiIiIaqwKDWBNTExEYmJiqbdt3Lix2N/Tp0/H9OnTK7IZIiIi8gE+fW0aIiIi0h7DCBEREWmKYYSIiIg0xTBCREREmroiZ2C9XK7L55T3tLLlZbfbkZeXh6ysLK85293F+Fq9gO/VzHq9G+v1bt5Yr+tz+1KXwasRYSQ7OxsAEBUVpXFLiIiIyFPZ2dmoVatWmbd7dNVeraiqipMnTyIoKAiKolTael0X4Dt+/HilXoCvuvK1egHfq5n1ejfW6928sV4hBLKzs9GgQYNi5yC7UI3oGdHpdGjYsGGVrT84ONhrnvjy8LV6Ad+rmfV6N9br3byt3ov1iLhwACsRERFpimGEiIiINOXTYcRsNiMlJQVms1nrplwRvlYv4Hs1s17vxnq9m6/VW1SNGMBKRERE3sune0aIiIhIewwjREREpCmGESIiItIUwwgRERFpimGEiIiINOUTYWTWrFno0qULgoKCEBYWhrvvvhv79u0rtkxBQQFGjRqFunXrIjAwEPfddx/S09M1avHlmT9/Pq655hr3WfxiYmKwbt069+3eVOuFXnjhBSiKgjFjxrjneVu9U6dOhaIoxaZWrVq5b/e2egHgxIkTePjhh1G3bl34+/ujXbt2+OWXX9y3CyEwZcoU1K9fH/7+/ujVqxcOHDigYYsrLjo6usTzqygKRo0aBcD7nl+n04nJkyejSZMm8Pf3R7NmzfD8888Xu7CaNz2/gLxOy5gxY9C4cWP4+/vj+uuvx88//+y+3dvqLRfhA2JjY8W7774r9uzZI3bt2iX69u0rGjVqJHJyctzLPPbYYyIqKkqkpqaKX375RVx33XXi+uuv17DVFff555+LNWvWiP3794t9+/aJiRMnCqPRKPbs2SOE8K5ai9q+fbuIjo4W11xzjRg9erR7vrfVm5KSItq0aSNOnTrlns6cOeO+3dvqPXfunGjcuLEYOnSo2LZtmzh8+LD46quvxMGDB93LvPDCC6JWrVri008/Fb/99pu48847RZMmTUR+fr6GLa+Y06dPF3tuN2zYIACI7777Tgjhfc/vjBkzRN26dcWXX34pjhw5IlavXi0CAwPF3Llz3ct40/MrhBADBgwQrVu3Fps2bRIHDhwQKSkpIjg4WPzzzz9CCO+rtzx8Ioxc6PTp0wKA2LRpkxBCiIyMDGE0GsXq1avdy/z5558CgNi6datWzaxUtWvXFu+8847X1pqdnS1atGghNmzYIHr06OEOI95Yb0pKimjfvn2pt3ljvePHjxc33HBDmberqioiIiLEyy+/7J6XkZEhzGazeP/9969EE6vU6NGjRbNmzYSqql75/Pbr108MGzas2Lx7771XDBo0SAjhfc9vXl6e0Ov14ssvvyw2v2PHjmLSpEleV295+cRumgtlZmYCAOrUqQMA2LFjB+x2O3r16uVeplWrVmjUqBG2bt2qSRsri9PpxMqVK5Gbm4uYmBivrXXUqFHo169fsboA731uDxw4gAYNGqBp06YYNGgQjh07BsA76/3888/RuXNnPPDAAwgLC8O1116Lt99+2337kSNHkJaWVqzmWrVqoVu3bjW2ZhebzYZly5Zh2LBhUBTFK5/f66+/Hqmpqdi/fz8A4LfffsPmzZtx++23A/C+59fhcMDpdMLPz6/YfH9/f2zevNnr6i2vGnHV3sqkqirGjBmD7t27o23btgCAtLQ0mEwmhISEFFs2PDwcaWlpGrTy8u3evRsxMTEoKChAYGAgPvnkE7Ru3Rq7du3yulpXrlyJnTt3Ftvn6uKNz223bt2wZMkStGzZEqdOncK0adNw4403Ys+ePV5Z7+HDhzF//nwkJSVh4sSJ+Pnnn/Hkk0/CZDIhPj7eXVd4eHix+9Xkml0+/fRTZGRkYOjQoQC88/U8YcIEZGVloVWrVtDr9XA6nZgxYwYGDRoEAF73/AYFBSEmJgbPP/88rr76aoSHh+P999/H1q1b0bx5c6+rt7x8LoyMGjUKe/bswebNm7VuSpVq2bIldu3ahczMTHz44YeIj4/Hpk2btG5WpTt+/DhGjx6NDRs2lPim4a1c3xgB4JprrkG3bt3QuHFjfPDBB/D399ewZVVDVVV07twZM2fOBABce+212LNnDxYsWID4+HiNW1e1Fi1ahNtvvx0NGjTQuilV5oMPPsDy5cuxYsUKtGnTBrt27cKYMWPQoEEDr31+ly5dimHDhiEyMhJ6vR4dO3bEQw89hB07dmjdNM341G6axMREfPnll/juu+/QsGFD9/yIiAjYbDZkZGQUWz49PR0RERFXuJWVw2QyoXnz5ujUqRNmzZqF9u3bY+7cuV5X644dO3D69Gl07NgRBoMBBoMBmzZtwuuvvw6DwYDw8HCvqrc0ISEhuOqqq3Dw4EGve34BoH79+mjdunWxeVdffbV715SrrguPKKnJNQPA33//jW+++QaPPPKIe543Pr/PPPMMJkyYgAcffBDt2rXD4MGDMXbsWMyaNQuAdz6/zZo1w6ZNm5CTk4Pjx49j+/btsNvtaNq0qVfWWx4+EUaEEEhMTMQnn3yCb7/9Fk2aNCl2e6dOnWA0GpGamuqet2/fPhw7dgwxMTFXurlVQlVVWK1Wr6v11ltvxe7du7Fr1y731LlzZwwaNMj9uzfVW5qcnBwcOnQI9evX97rnFwC6d+9e4lD8/fv3o3HjxgCAJk2aICIioljNWVlZ2LZtW42tGQDeffddhIWFoV+/fu553vj85uXlQacr/lGk1+uhqioA731+ASAgIAD169fH+fPn8dVXX+Guu+7y6novSusRtFfC448/LmrVqiU2btxY7JC5vLw89zKPPfaYaNSokfj222/FL7/8ImJiYkRMTIyGra64CRMmiE2bNokjR46I33//XUyYMEEoiiK+/vprIYR31VqaokfTCOF99T711FNi48aN4siRI+LHH38UvXr1EqGhoeL06dNCCO+rd/v27cJgMIgZM2aIAwcOiOXLlwuLxSKWLVvmXuaFF14QISEh4rPPPhO///67uOuuu2r0oZBOp1M0atRIjB8/vsRt3vb8xsfHi8jISPehvR9//LEIDQ0V48aNcy/jbc/v+vXrxbp168Thw4fF119/Ldq3by+6desmbDabEML76i0PnwgjAEqd3n33Xfcy+fn5YuTIkaJ27drCYrGIe+65R5w6dUq7Rl+GYcOGicaNGwuTySTq1asnbr31VncQEcK7ai3NhWHE2+qNi4sT9evXFyaTSURGRoq4uLhi59zwtnqFEOKLL74Qbdu2FWazWbRq1Uq89dZbxW5XVVVMnjxZhIeHC7PZLG699Vaxb98+jVp7+b766isBoNQavO35zcrKEqNHjxaNGjUSfn5+omnTpmLSpEnCarW6l/G253fVqlWiadOmwmQyiYiICDFq1CiRkZHhvt3b6i0PRYgip7kjIiIiusJ8YswIERERVV8MI0RERKQphhEiIiLSFMMIERERaYphhIiIiDTFMEJERESaYhghIiIiTTGMEBERkaYYRoiIiEhTDCNERESkKYYRIiIi0tT/A4h3gCNMBG53AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# This is all for var-copy\n", + "for a in mamba_losses_char:\n", + " plt.plot(lengths, a, color=\"blue\", linewidth=0.8)\n", + "for a in attn_losses_char:\n", + " plt.plot(lengths, a, color=\"red\", linewidth=0.8)\n", + "for a in hybrid_losses_char:\n", + " plt.plot(lengths, a, color=\"green\", linewidth=0.8)\n", + "\n", + "plt.grid(\"minor\")\n", + "plt.title(\"Selective Copy\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "ad351ce1-99b1-4b55-bbd4-a50bac33b976", + "metadata": {}, + "outputs": [], + "source": [ + "# python3 synthetic_exps/main.py --model \"mamba\" --train_task \"decode-recall\" --eval_task \"decode-recall\" --num_vocab 26 --num_numbers 5 --min_train_len 20 --max_train_len 50 --min_eval_len 20 --max_eval_len 100 --sequence_length 100 --lr 1e-4 --window 100\n", + "# python3 synthetic_exps/main.py --model \"hybrid\" --train_task \"decode-recall\" --eval_task \"decode-recall\" --num_vocab 26 --num_numbers 5 --min_train_len 20 --max_train_len 50 --min_eval_len 20 --max_eval_len 100 --sequence_length 100 --lr 1e-4 --window 100\n", + "# python3 synthetic_exps/main.py --model \"T_rope\" --train_task \"decode-recall\" --eval_task \"decode-recall\" --num_vocab 26 --num_numbers 5 --min_train_len 20 --max_train_len 50 --min_eval_len 20 --max_eval_len 100 --sequence_length 100 --lr 1e-4 --window 100\n", + "# python3 synthetic_exps/main.py --model \"hybrid_nope\" --train_task \"decode-recall\" --eval_task \"decode-recall\" --num_vocab 26 --num_numbers 5 --min_train_len 20 --max_train_len 50 --min_eval_len 20 --max_eval_len 100 --sequence_length 100 --lr 1e-4 --window 100\n", + "# python3 synthetic_exps/main.py --model \"T_nope\" --train_task \"decode-recall\" --eval_task \"decode-recall\" --num_vocab 26 --num_numbers 5 --min_train_len 20 --max_train_len 50 --min_eval_len 20 --max_eval_len 100 --sequence_length 100 --lr 1e-4 --window 100\n", + "\n", + "mamba_losses_char = []\n", + "mamba_losses_char.append([0.0906994640827179, 0.13416741788387299, 0.121575728058815, 0.07973852753639221, 0.13765615224838257, 0.15405696630477905, 0.11950000375509262, 0.14507906138896942, 0.08860822767019272, 0.12942323088645935, 0.09342455118894577, 0.12423244118690491, 0.10455632209777832, 0.12150561809539795, 0.1099400669336319, 0.09398549795150757])\n", + "mamba_losses_char.append([0.09908294677734375, 0.07934147119522095, 0.1740298867225647, 0.08149103820323944, 0.14183807373046875, 0.1144477054476738, 0.11061384528875351, 0.09789176285266876, 0.09536095708608627, 0.09376015514135361, 0.10443108528852463, 0.09238778799772263, 0.08418863266706467, 0.11743201315402985, 0.09709333628416061, 0.1056409701704979])\n", + "mamba_losses_char.append([0.16224205493927002, 0.16989850997924805, 0.10248340666294098, 0.06269713491201401, 0.07976309955120087, 0.17707113921642303, 0.08660002797842026, 0.09172289073467255, 0.05930526182055473, 0.117914579808712, 0.10144637525081635, 0.0848463624715805, 0.09716923534870148, 0.0918511375784874, 0.1233922466635704, 0.06897971779108047])\n", + "mamba_losses_char.append([0.14015153050422668, 0.09431582689285278, 0.11752723157405853, 0.08623380959033966, 0.15996873378753662, 0.11163300275802612, 0.15588821470737457, 0.0965486466884613, 0.12023864686489105, 0.08701147884130478, 0.15925031900405884, 0.09013059735298157, 0.08400629460811615, 0.08285102248191833, 0.09820136427879333, 0.09735962748527527])\n", + "mamba_losses_char.append([0.14480312168598175, 0.0621279776096344, 0.13569775223731995, 0.06340071558952332, 0.06495260447263718, 0.1710631102323532, 0.08355685323476791, 0.10515782237052917, 0.12877590954303741, 0.08171704411506653, 0.09506151080131531, 0.11381470412015915, 0.13841265439987183, 0.10111363232135773, 0.116072878241539, 0.12219121307134628])\n", + "\n", + "hybrid_losses_char = []\n", + "hybrid_losses_char.append([0.8920454978942871, 0.8788594007492065, 0.875191867351532, 0.8758670687675476, 0.8308463096618652, 0.8132745623588562, 0.8702282309532166, 0.8399081230163574, 0.7453665733337402, 0.7684733867645264, 0.784136950969696, 0.7408974170684814, 0.707751452922821, 0.7388268709182739, 0.7164523601531982, 0.7096856832504272])\n", + "hybrid_losses_char.append([0.850641131401062, 0.8496608734130859, 0.8739454746246338, 0.8683833479881287, 0.7981573939323425, 0.8048259019851685, 0.801533579826355, 0.7650274038314819, 0.6965590715408325, 0.6904029250144958, 0.7595469951629639, 0.7357624769210815, 0.7462002038955688, 0.7101421356201172, 0.7361903190612793, 0.7210608720779419])\n", + "hybrid_losses_char.append([0.8234127759933472, 0.8545323610305786, 0.8845264315605164, 0.8968075513839722, 0.8645303249359131, 0.8762568831443787, 0.7888018488883972, 0.74066162109375, 0.7363312244415283, 0.7578060030937195, 0.7756705284118652, 0.7369450926780701, 0.6912611722946167, 0.6554933190345764, 0.7037373781204224, 0.6504040956497192])\n", + "hybrid_losses_char.append([0.906828761100769, 0.8427189588546753, 0.9188308119773865, 0.8797376155853271, 0.9456678628921509, 0.815475583076477, 0.8163365125656128, 0.7433615922927856, 0.8032069206237793, 0.799712061882019, 0.7764838933944702, 0.7788181304931641, 0.7415996789932251, 0.678615927696228, 0.7154719233512878, 0.7563269138336182])\n", + "hybrid_losses_char.append([0.8952020406723022, 0.8699786067008972, 0.9018635153770447, 0.8858887553215027, 0.8615972399711609, 0.7674208879470825, 0.7651996612548828, 0.7662111520767212, 0.7539290189743042, 0.8123115301132202, 0.6959798336029053, 0.6993102431297302, 0.6734286546707153, 0.7470391988754272, 0.641565203666687, 0.6801892518997192])\n", + "\n", + "attn_losses_char = []\n", + "attn_losses_char.append([0.860135555267334, 0.8186902403831482, 0.8486547470092773, 0.7746586203575134, 0.7976690530776978, 0.7437087297439575, 0.7464731931686401, 0.7023407816886902, 0.6929957866668701, 0.6830530166625977, 0.6704387664794922, 0.612147331237793, 0.6402742862701416, 0.6156221032142639, 0.6317967176437378, 0.6048249006271362])\n", + "attn_losses_char.append([0.8678571581840515, 0.8419809341430664, 0.8814114928245544, 0.8562726378440857, 0.7220816612243652, 0.825106143951416, 0.7624808549880981, 0.7128188014030457, 0.6802529692649841, 0.7044345140457153, 0.6680170893669128, 0.6716986894607544, 0.6284055709838867, 0.643202543258667, 0.6133511662483215, 0.629136860370636])\n", + "attn_losses_char.append([0.8829365968704224, 0.9025651216506958, 0.8486373424530029, 0.8591458201408386, 0.7868992686271667, 0.7417551875114441, 0.745621383190155, 0.7066928744316101, 0.6982056498527527, 0.6963773965835571, 0.6830136775970459, 0.6382233500480652, 0.612837553024292, 0.6424441337585449, 0.6200840473175049, 0.6163896322250366])\n", + "attn_losses_char.append([0.8434343338012695, 0.8548640012741089, 0.7667751312255859, 0.829886794090271, 0.7577894926071167, 0.6936699151992798, 0.6111810207366943, 0.6902858018875122, 0.7161281108856201, 0.6539810299873352, 0.6269016861915588, 0.580055832862854, 0.5361248850822449, 0.6163349151611328, 0.6144372820854187, 0.5860302448272705])\n", + "attn_losses_char.append([0.7793651819229126, 0.8608694076538086, 0.7881642580032349, 0.7702736854553223, 0.7988476157188416, 0.8341822028160095, 0.7334083318710327, 0.7068933844566345, 0.7768895626068115, 0.7130720019340515, 0.6956448554992676, 0.6674107313156128, 0.653885543346405, 0.6742129325866699, 0.6691135168075562, 0.6256084442138672])\n", + "\n", + "hybrid_nope_losses_char = []\n", + "hybrid_nope_losses_char.append([0.8797950148582458, 0.8662900328636169, 0.7239886522293091, 0.7177780866622925, 0.6587011814117432, 0.558914065361023, 0.6082421541213989, 0.6099125742912292, 0.5131599307060242, 0.5830714702606201, 0.5954594612121582, 0.522019624710083, 0.554970920085907, 0.5251129865646362, 0.49073100090026855, 0.4810425043106079])\n", + "hybrid_nope_losses_char.append([0.8566491007804871, 0.8006238341331482, 0.7330363988876343, 0.6914559602737427, 0.7671040892601013, 0.6527381539344788, 0.6413576006889343, 0.6498079895973206, 0.5719256401062012, 0.5631218552589417, 0.5479894280433655, 0.5486471056938171, 0.5507416725158691, 0.5398001670837402, 0.5068458914756775, 0.6155749559402466])\n", + "hybrid_nope_losses_char.append([0.7571945190429688, 0.8043060302734375, 0.7851378321647644, 0.5849562287330627, 0.5740911364555359, 0.5289596915245056, 0.5152505040168762, 0.4957157373428345, 0.43826550245285034, 0.4701913297176361, 0.4318881034851074, 0.44903564453125, 0.4330037236213684, 0.42069220542907715, 0.4452202320098877, 0.3614533841609955])\n", + "hybrid_nope_losses_char.append([0.8206259608268738, 0.6830954551696777, 0.6096919775009155, 0.6735446453094482, 0.605542004108429, 0.626124382019043, 0.5358495712280273, 0.5191499590873718, 0.4578408896923065, 0.49540627002716064, 0.48933517932891846, 0.43286484479904175, 0.44579026103019714, 0.4266704022884369, 0.3959271311759949, 0.3656172752380371])\n", + "hybrid_nope_losses_char.append([0.8592974543571472, 0.8135517835617065, 0.6775767803192139, 0.5800597667694092, 0.7566620111465454, 0.5958878993988037, 0.5242033004760742, 0.5254772901535034, 0.5978174209594727, 0.541351318359375, 0.43390214443206787, 0.47818347811698914, 0.45649096369743347, 0.46756285429000854, 0.4571168124675751, 0.4423048198223114])\n", + "\n", + "attn_nope_losses_char = []\n", + "attn_nope_losses_char.append([0.5289593935012817, 0.46443814039230347, 0.4386160969734192, 0.421871542930603, 0.3421069383621216, 0.2850603461265564, 0.3082292079925537, 0.23208580911159515, 0.34413596987724304, 0.21957626938819885, 0.2161407321691513, 0.2233407348394394, 0.18333259224891663, 0.23978948593139648, 0.22347086668014526, 0.20080050826072693])\n", + "attn_nope_losses_char.append([0.7337241172790527, 0.4357321858406067, 0.4941135346889496, 0.3305879831314087, 0.35383710265159607, 0.31106314063072205, 0.258958101272583, 0.3511207699775696, 0.30575573444366455, 0.3140028119087219, 0.2315887063741684, 0.3280993700027466, 0.23134413361549377, 0.2555830478668213, 0.22959968447685242, 0.281619668006897])\n", + "attn_nope_losses_char.append([0.6816303133964539, 0.5871238112449646, 0.35013091564178467, 0.4740704298019409, 0.39036795496940613, 0.3055468797683716, 0.2630270719528198, 0.26180872321128845, 0.3165309429168701, 0.2628558278083801, 0.2197962999343872, 0.2850043773651123, 0.24235938489437103, 0.2516331076622009, 0.23949050903320312, 0.24186305701732635])\n", + "attn_nope_losses_char.append([0.6051110029220581, 0.4727848470211029, 0.4617006778717041, 0.42774927616119385, 0.3639084994792938, 0.3208411633968353, 0.2549009323120117, 0.29371756315231323, 0.2516210377216339, 0.3057151436805725, 0.25763362646102905, 0.20982080698013306, 0.29217198491096497, 0.2586534023284912, 0.19807855784893036, 0.24174711108207703])\n", + "attn_nope_losses_char.append([0.5756917595863342, 0.5401455163955688, 0.4312983453273773, 0.3906988501548767, 0.33333539962768555, 0.33675307035446167, 0.3291264474391937, 0.43204575777053833, 0.24073275923728943, 0.25847503542900085, 0.2726858854293823, 0.30834951996803284, 0.23259693384170532, 0.2144438624382019, 0.20881429314613342, 0.2640819549560547])" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "eddc175b-2bb4-41c0-9af8-2c30996b62d4", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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UFxMKBw+lKEPPNOmwRtvqNabRx6B666DrVsPalWCIOAwOch15TI5fTLjU8aTYk0hEA1Q5auiOdhCdKBiIASBaGoygqJg2bAFfUV1n29ybMpYHj3lUf5y0V8QEPjJP37CHR/dwaa6TQf+sEavYtKZSLWmku3MBiAmx/CFfNT76ylrKWNr/VbW16xnbfVavqv4juXly1lWtowvS7/ky11f8sWuL/hi1xd8VvIZn5d8ztdlX7OqchXra9azpX4LO5p2sKt5FxXeCqp91dT762kKNOENefFH/ISj4SFtLZJlmYULF+LxeEhPT+eBBx4A4KqrruKcc87ptGwkEiE1NZVXXnklMS8ajbJgwQKcTifJycncd999nY5HXl4eDz30EHPmzMHhcHDttdd26Zb64IMPGDlyJGazmZNOOomSkpJu78Nrr72Gy+Xiww8/ZMyYMdhsNs444wyqqqo67efixYvJzs7GaDQmPCtx4mN68803mTlzJiaTifHjx/P555932tb333/PmWeeic1mIy0tjcsvv5z6HoYAHAwDbrk5rIj3Dyoo6DP3U3f40Y9+RH19PQsWLODVV19NuPm6jSiqMTgOh1rduKpKddM4nV1aMlLcbnZUVBAKhRg3YgS2IVY/qBOSpLqpTjkFXn0VrroKzjwTfv5z1W13EOglPSnWZFKsybSF22gKNKlxOQH1D9xusGPWmfs9VTPqcSE1ezFv2oYQiRDOzT64zuo9IM+Vx6ITFjF/6nz+vOHPzP/f+UxIncDcyXM5OvPowZGuGovBEMiW6i2cJme3ssNicgxZkYkpMWJyjJgSIypHCUaDtCgtyIqcaDmhoLQXsxRAEiREQUQn6tDJOjwxD4FwAEmvWoAGxffeTV5//XVuu+02li9fzjfffMPcuXOZNWsW8+bN4/jjj6eqqoqMDLVNyf/+7//i9/v58Y9/3OnzV199NStWrGDlypVce+21DBs2jGuuuSaxzOOPP86iRYv26aUoKyvjoosu4oYbbuDaa69l5cqV3H777T3aD7/fz+OPP84bb7yBKIr87Gc/4xe/+AV//vOfAXj66adZsmQJL774IlOmTOHVV1/lvPPOY+PGjRQWFibWc8cdd/DUU08xduxYnnjiCc4991x27txJUlISzc3NnHzyycybN48nn3ySQCDAnXfeySWXXMInn3zSo/H2lAGrczNQeL1e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eDwy1uzsMSlsQGrT7dmzh6ysrIgsfdCXYYmb66+/nk8//ZSnn36a733ve1xzzTV8/etf54orrmC+3gJdcQSMwK3AN4AViBAJBmbERbUbiAMmEJy088hGT3MdajzCYASRnk7b0dHhDXROSEggNTU1aqw8aWlpnH/++Zx//vlUV1fz9ttv88ILL3DvvfeydOlSVqxYwbHHHhv1LTIUocPhcFBYWEhTUxOfffYZVVVVTJgwgczMzOH9DqxWGD9eBMOBAyJwmpoklTySvodK2NDS0sL27dux2WxRk9gx7NvP+fPn8/DDD1NZWcnatWt54oknOProo5k7dy5PPvmkapg4KMYBq4CfAsHsAm0H0oBtQEUQtxt7mEwmb7ZJcnIy6enpZGdnk5+fT1FREePHj2fq1KnMmTOHo446CsCbdl1aWkpbWzA7vo8OOTk5XHrppTz77LM899xzTJw4kd/+9receuqp3H777bz//vuR0ZVcEXEYDAZSU1PJy8ujsbGRDz/8kM8//5zW1tbhbzQ+XuJxFi+G4mJp3lhZOewGjkHFX9iMwRgbkISF7du309bWNvyYqzAw7IBip9PJq6++ylNPPcX69etZvHgxV155JeXl5dx666384x//4LnnngvmWGOUy4D1wLOI0AkWCUAP8AXiosoM4rbHNoWFheTk5FBaWsr+/ftpamoiMzMzKl2zJSUlfOc73+Gqq65ix44drFu3jnvvvZeuri5OPvlkJk+ezLhx40hOTiYxMdFbsyUa3HKK0GE2m8nJyfG2w6mpqWHChAkUFhYOP4YoJUUsI/n54qqqrpag47Q0cWWNNrqw0YOHI9VlFmL27NlDeXk5+fn54R7KkBiyuPn000956qmneP755zEajVx66aX88pe/ZOrUqd73nHPOORx99NFBHWjsYgVuA1YDpwDBDNRKA6qBrcACpJqxIhg4HA6mTp1KTk4O+/bto7y8HKPRSEZGRlRWDTYYDEydOpWpU6fyve99j88//5y33nqLl156ia6uLtra2mhtbUXTNIxGIwkJCV6xowd7+z/2f56UlBTw3OFwRI07T3F47HY7hYWFNDc3s3nzZm+V4+zs7OEJYL0+TlqaiJvdu0VgJCWJ+Bmt703f4OExKmxqamrYvXs36enpUXddG/Jojz76aJYvX86jjz7KypUr+w0oGzduHBdddFFQBjg2mAuc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Pp1NmzbF3L4CvPDCC3z66acBPmudWDu/ixYt4umnn2bKlClUVVVx1113cdxxx7F169aY21eAvXv38uijj3LDDTdw66238vHHH3PddddhtVpZtWqVd7+ys7MD/i+a99mf1157jaamJi677DIg9r7PADfffDMtLS1MnToVk8mE2+3mpz/9KZdccglAzJ3jxMRElixZwt133820adPIzs7m+eef54MPPmDixIkxt7+DRYmbEXDttdeydetW3n///XAPJaRMmTKFTZs20dzczMsvv8yqVat49913wz2skFBWVsaaNWtYv379IXdCsYh+Nwswe/ZsFi1aRHFxMX/+85+Ji4sL48hCg8fj4aijjuKee+4BYN68eWzdupXHHnuMVatWhXl0oecPf/gDX/nKV8jLywv3UELGn//8Z5599lmee+45ZsyYwaZNm7j++uvJy8uL2XP8xz/+kSuuuIL8/HxMJhPz58/n4osvZuPGjeEeWthQbqlhsnr1av72t7/xf//3fxQUFHjX5+Tk0NPTQ1NTU8D7a2pqyMnJGeVRBger1crEiRNZsGAB9957L3PmzOFXv/pVTO7rxo0bqa2tZf78+ZjNZsxmM++++y4PP/wwZrOZ7OzsmNtnf1JSUpg8eTK7d++OyfObm5vL9OnTA9ZNmzbN64rT96tvtlA077POgQMH+Mc//sG3vvUt77pYPMf/8z//w80338xFF13ErFmz+OY3v8n3v/997r33XiA2z/GECRN49913aWtro6ysjI8++gin08n48eNjcn8HgxI3Q0TTNFavXs2rr77KP//5T8aNGxfw+oIFC7BYLGzYsMG7bseOHZSWlrJkyZLRHm5I8Hg8dHd3x+S+nnLKKWzZsoVNmzZ5l6OOOopLLrnE+zjW9tmftrY29uzZQ25ubkye36VLlx5SumHnzp0UFxcDMG7cOHJycgL2uaWlhQ8//DBq91nnqaeeIisrizPOOMO7LhbPcUdHB0Zj4NRmMpnweDxAbJ/j+Ph4cnNzOXjwIOvWrePss8+O6f09LOGOaI42vvvd72rJycnaO++8E5Be2dHR4X3P1VdfrRUVFWn//Oc/tU8++URbsmSJtmTJkjCOevjcfPPN2rvvvqvt27dP+/zzz7Wbb75ZMxgM2ttvv61pWmzt60D4Z0tpWmzt8w9+8APtnXfe0fbt26f9+9//1pYtW6ZlZGRotbW1mqbF1r5qmqT3m81m7ac//am2a9cu7dlnn9UcDof2pz/9yfue++67T0tJSdH+8pe/aJ9//rl29tlnR33arNvt1oqKirSbbrrpkNdi7RyvWrVKy8/P96aCv/LKK1pGRob2wx/+0PueWDvHb731lvbmm29qe/fu1d5++21tzpw52qJFi7Senh5N02JvfweDEjdDBOh3eeqpp7zv6ezs1K655hotNTVVczgc2jnnnKNVVVWFb9Aj4IorrtCKi4s1q9WqZWZmaqeccopX2GhabO3rQPQVN7G0zxdeeKGWm5urWa1WLT8/X7vwwgsDar7E0r7q/PWvf9Vmzpyp2Ww2berUqdrvf//7gNc9Ho92++23a9nZ2ZrNZtNOOeUUbceOHWEabXBYt26dBvS7H7F2jltaWrQ1a9ZoRUVFmt1u18aPH6/ddtttWnd3t/c9sXaOX3zxRW38+PGa1WrVcnJytGuvvVZramryvh5r+zsYDJrmV7ZRoVAoFAqFIspRMTcKhUKhUChiCiVuFAqFQqFQxBRK3CgUCoVCoYgplLhRKBQKhUIRUyhxo1AoFAqFIqZQ4kahUCgUCkVMocSNQqFQKBSKmEKJG4VCoYhwDAYDr732WriHoVBEDUrcKBRjgLq6Or773e9SVFSEzWYjJyeHFStW8O9//zvcQ4sYIkFA3HnnncydOzesY1AoYgFzuAegUChCz7nnnktPTw/PPPMM48ePp6amhg0bNtDQ0BDuoSkUCkXQUZYbhSLGaWpq4l//+hc/+9nPOOmkkyguLmbhwoXccsstnHXWWQHv+9a3vkVmZiZJSUmcfPLJbN68OWBb9913H9nZ2SQmJnLllVdy8803B1gaTjzxRK6//vqA/1m5ciWXXXaZ93l3dzc33ngj+fn5xMfHs2jRIt555x3v608//TQpKSmsW7eOadOmkZCQwGmnnUZVVVXAdp988klmzJiBzWYjNzeX1atXD2lfhsoTTzzBtGnTsNvtTJ06ld/+9rfe1/bv34/BYOCVV17hpJNOwuFwMGfOHD744IOAbTz++OMUFhbicDg455xzePDBB0lJSfHu91133cXmzZsxGAwYDAaefvpp7//W19dzzjnn4HA4mDRpEq+//vqI9kehiGWUuFEoYpyEhAQSEhJ47bXX6O7uHvB9559/PrW1tbz55pts3LiR+fPnc8opp9DY2AjAn//8Z+68807uuecePvnkE3JzcwMm+MGyevVqPvjgA1544QU+//xzzj//fE477TR27drlfU9HRwc///nP+eMf/8h7771HaWkpN954o/f1Rx99lGuvvZarrrqKLVu28PrrrzNx4sRB78tQefbZZ7njjjv46U9/yrZt27jnnnu4/fbbeeaZZwLed9ttt3HjjTeyadMmJk+ezMUXX4zL5QLg3//+N1dffTVr1qxh06ZNLF++nJ/+9Kfe/73wwgv5wQ9+wIwZM6iqqqKqqooLL7zQ+/pdd93FBRdcwOeff87pp5/OJZdcMuz9UShinnB37lQoFKHn5Zdf1lJTUzW73a4dc8wx2i233KJt3rzZ+/q//vUvLSkpSevq6gr4vwkTJmi/+93vNE3TtCVLlmjXXHNNwOuLFi3S5syZ433et4O6pmna2Wefra1atUrTNE07cOCAZjKZtIqKioD3nHLKKdott9yiaZqmPfXUUxoQ0J38kUce0bKzs73P8/LytNtuu63ffR3MvvQHoL366qv9vjZhwgTtueeeC1h39913a0uWLNE0TdP27dunAdoTTzzhff2LL77QAG3btm2apkkH9jPOOCNgG5dccomWnJzsfb527dqA4+k/th/96Efe521tbRqgvfnmmwPuj0IxllGWG4ViDHDuuedSWVnJ66+/zmmnncY777zD/PnzvW6PzZs309bWRnp6utfSk5CQwL59+9izZw8A27ZtY9GiRQHbXbJkyZDGsWXLFtxuN5MnTw74nHfffdf7OQAOh4MJEyZ4n+fm5lJbWwtAbW0tlZWVnHLKKf1+xmD2ZSi0t7ezZ88errzyyoDt/eQnPzlke7Nnzw4Ysz5egB07drBw4cKA9/d9fjj8tx0fH09SUpJ32wqFIhAVUKxQjBHsdjvLly9n+fLl3H777XzrW99i7dq1XHbZZbS1tZGbmxsQ+6Kjx4QMBqPRiKZpAeucTqf3cVtbGyaTiY0bN2IymQLel5CQ4H1ssVgCXjMYDN7txsXFHXYMwdoX/+2BxMv0FXd998F/3AaDAQCPxzPkz+yP/o5JsLatUMQaStwoFGOU6dOne1Of58+fT3V1NWazmZKSkn7fP23aND788EMuvfRS77r//ve/Ae/JzMwMCPx1u91s3bqVk046CYB58+bhdrupra3luOOOG9a4ExMTKSkpYcOGDd7t+jOYfRkK2dnZ5OXlsXfvXi655JJhb2fKlCl8/PHHAev6Prdarbjd7mF/hkKhEJS4UShinIaGBs4//3yuuOIKZs+eTWJiIp988gn/v517B2kkCqMAfLaI4otRkeATQsSkE5U0IqQQBUXEBMuAWihoMQopxEIkAUUYNIWV2IhFWrUJqdQi2IigCIKdYGFjETEQos3ZYtlZk32QXViF4Xwwzczlzn8ZGA5zf8ayLExMTAAAhoaG0N/fj1AoBMuy4PP58Pj4iFQqhXA4jEAggKWlJczMzCAQCGBgYADJZBK3t7fwer32vQYHBxGNRpFKpdDZ2YlEIoHn52f7us/nQyQSwdTUFLa3t9Hb24unpyecnJygu7sbY2NjZa0pFothfn4ebrcbo6OjyOVyOD8/h2maZa3ld+7v73F9fV10rqurC/F4HIuLizAMAyMjI3h9fcXl5SWy2Syi0WhZNZumiWAwiEQigfHxcZyeniKdTttfeADA4/HYNbS3t6Ourg6VlZVlzS8i73x204+I/F+FQoErKyvs6+ujYRisrq6m3+/n6uoq8/m8Pe7l5YWmabK1tZUul4sdHR2MRCJ8eHiwx2xsbLCpqYm1tbWcnp7m8vJyUQPs29sbFxYW2NjYSLfbzc3NzaKG4u9j1tbW6PF46HK52NLSwnA4zJubG5LfGorfN9mS5NHREUtfV7u7u/T7/fYcpmn+1VpKAfjlkclkSJLJZJI9PT2sqKhgQ0MDg8EgDw8PSf5oKL66urLny2azBMCzszP73N7eHtva2lhVVcVQKMT19XU2NzcXPavJyUnW19cTAPf39+3aSpudDcOwr4tIsS9kyQa5iEiZYrEYjo+Pf/raIeWZm5vD3d0dMpnMZ5ci4ijalhIR+SBbW1sYHh5GTU0N0uk0Dg4O/ulfQSLyZwo3IiIf5OLiApZlIZfLwev1YmdnB7Ozs59dlojjaFtKREREHEU/8RMRERFHUbgRERERR1G4EREREUdRuBERERFHUbgRERERR1G4EREREUdRuBERERFHUbgRERERR1G4EREREUf5Cjzu8uGRQBSyAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# This is all for decode_recall\n", + "arr = mamba_losses_char\n", + "means = [np.mean([a[i] for a in arr]) for i in range(len(arr[0]))]\n", + "mins = [np.min([a[i] for a in arr]) for i in range(len(arr[0]))]\n", + "maxs = [np.max([a[i] for a in arr]) for i in range(len(arr[0]))]\n", + "plt.plot(lengths, means, color=\"blue\", linewidth=0.8, label=\"mamba\")\n", + "plt.fill_between(lengths, mins, maxs, color=\"blue\", alpha=0.2)\n", + "\n", + "arr = hybrid_losses_char\n", + "means = [np.mean([a[i] for a in arr]) for i in range(len(arr[0]))]\n", + "mins = [np.min([a[i] for a in arr]) for i in range(len(arr[0]))]\n", + "maxs = [np.max([a[i] for a in arr]) for i in range(len(arr[0]))]\n", + "plt.plot(lengths, means, color=\"green\", linewidth=0.8, label=\"hybrid\")\n", + "plt.fill_between(lengths, mins, maxs, color=\"green\", alpha=0.2)\n", + "\n", + "arr = attn_losses_char\n", + "means = [np.mean([a[i] for a in arr]) for i in range(len(arr[0]))]\n", + "mins = [np.min([a[i] for a in arr]) for i in range(len(arr[0]))]\n", + "maxs = [np.max([a[i] for a in arr]) for i in range(len(arr[0]))]\n", + "plt.plot(lengths, means, color=\"red\", linewidth=0.8, label=\"attn\")\n", + "plt.fill_between(lengths, mins, maxs, color=\"red\", alpha=0.2)\n", + "\n", + "arr = hybrid_nope_losses_char\n", + "means = [np.mean([a[i] for a in arr]) for i in range(len(arr[0]))]\n", + "mins = [np.min([a[i] for a in arr]) for i in range(len(arr[0]))]\n", + "maxs = [np.max([a[i] for a in arr]) for i in range(len(arr[0]))]\n", + "plt.plot(lengths, means, color=\"black\", linewidth=0.8, label=\"hybrid_nope\")\n", + "plt.fill_between(lengths, mins, maxs, color=\"black\", alpha=0.2)\n", + "\n", + "arr = attn_nope_losses_char\n", + "means = [np.mean([a[i] for a in arr]) for i in range(len(arr[0]))]\n", + "mins = [np.min([a[i] for a in arr]) for i in range(len(arr[0]))]\n", + "maxs = [np.max([a[i] for a in arr]) for i in range(len(arr[0]))]\n", + "plt.plot(lengths, means, color=\"yellow\", linewidth=0.8, label=\"attn_nope\")\n", + "plt.fill_between(lengths, mins, maxs, color=\"yellow\", alpha=0.2)\n", + "\n", + "plt.grid(\"minor\")\n", + "plt.title(\"Decode Recall\")\n", + "plt.xlabel(\"Sequence Length\")\n", + "plt.ylabel(\"Accuracy\")\n", + "plt.legend()\n", + "\n", + "plt.savefig(\"results.png\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "290613b5-d488-4af9-bce0-48bc546cce7a", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a20ac221-543b-44db-a441-3bde85050f0d", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "hybrid", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/source/official-code/mini/test.py b/source/official-code/mini/test.py new file mode 100644 index 0000000000000000000000000000000000000000..fa5f8b38e458c7963c7db12f8d23e3a6c5529802 --- /dev/null +++ b/source/official-code/mini/test.py @@ -0,0 +1,114 @@ +import itertools +import os +import wandb +import json +import argparse +from copy import copy +from transformers import DataCollatorForLanguageModeling +from transformers import AutoTokenizer, AutoModelForCausalLM +from datasets import load_dataset, DatasetDict + +import numpy as np +import matplotlib.pyplot as plt + +import torch +from torch import nn +import torch.nn.functional as F +from torch.utils.data.dataloader import DataLoader +from torch.nn import CrossEntropyLoss +from torch.optim import AdamW +import re + +from transformers import get_scheduler, AutoTokenizer, AutoModelForCausalLM, AutoConfig + +from tqdm import tqdm +from collections import Counter +from pathlib import Path + +import string +from model_utils import get_model +from data_utils import get_train_dataset, get_tokenizer, get_eval_dataset, force_args, task_choices +from train_utils import train, save_model, load_model +from test_utils import evaluation + +def parse_args(): + parser = argparse.ArgumentParser() + + # Task + parser.add_argument('--train_task',choices=task_choices, + required=True, help="tasks to train the model") + parser.add_argument('--eval_task',choices=task_choices, + required=True, help="tasks to evaluate the model") + + parser.add_argument('--num_vocab', default=26, type=int, help="vocabulary size in the strings. maximum is 26.") + parser.add_argument('--num_numbers', default=5, type=int, help="vocabulary (number) size in the strings. maximum is 9.") + parser.add_argument('--p', default=0.2, type=float, help="proportion, depends on task") + + parser.add_argument('--length_answer', default=0, type=int, + help="length of the answer to be returned. Set 0 if no constraint on the length of the answer.") + + # Model + parser.add_argument('--model', choices=['T_nope', 'T_rope', 'T_alibi', "T_hard_alibi", 'lstm', 'mamba', 'hybrid', 'hybrid_nope'], + required=True, help='''models starting by 'T' are transformers with different positional embeddings. Other choices + are mamba and lstm.''') + parser.add_argument('--hidden_size', default=1024, type=int, help="Hidden size of the models") + parser.add_argument('--layers', default=12, type=int, help="Number of layers in the models.") + parser.add_argument('--heads', default=16, type=int, help="Number of heads in the transformer models.") + parser.add_argument('--num_masked_heads', default=8, type=int, help='''Only when model = ''T_hard_alibi''. + Number of heads where we apply hard alibi. The remaining heads are set to nope.''') + parser.add_argument('--state_dim', default=32, type=int, help='''Only when model = ''mamba''. + Sets the state dimension of the model.''') + + # Optimization + parser.add_argument('--lr', default=1e-5, type=float, help="choice of learning rate") + parser.add_argument('--epochs', default=1, type=int, help="number of epochs") + parser.add_argument('--num_examples', default=2000, type=int, help="number of steps for each epoch") + parser.add_argument('--window', default=20, type=int, help="width of the sliding window attention") + + + parser.add_argument('--train_batch_size', default=8, type=int, help="training batch size") + parser.add_argument('--eval_batch_size', default=8, type=int, help="evaluation batch size") + parser.add_argument('--eval_num_batches', default=3, type=int, help='''number of batches to use for evaluation. + useful to have a mean + std over results.''') + + parser.add_argument('--min_train_length', default=5, type=int, help="minimum length of a training example") + parser.add_argument('--max_train_length', default=20, type=int, help="maximum length of a training example") + parser.add_argument('--min_eval_length', default=10, type=int, help="minimum length of an evaluation example") + parser.add_argument('--max_eval_length', default=20, type=int, help="maximum length of an evaluation example") + + + # Context length + parser.add_argument('--sequence_length', default=220, type=int, help="context length during training") + parser.add_argument('--eval_equence_length', default=220, type=int, help="context length at evaluation time") + + + return parser.parse_args() + + + + + + +args = parse_args() +force_args(args) + +print(args) + +tokenizer = get_tokenizer(args) + +model = get_model(args, tokenizer) +model = load_model(args, model) + +from accelerate import Accelerator +import safetensors + +accelerator = Accelerator() + +model = accelerator.prepare(model) + +str_acc_mean_list, str_acc_std_list, char_acc_list = evaluation(args, model, tokenizer) + +print("String") +print(str_acc_mean_list) +print("Char") +print(char_acc_list) \ No newline at end of file diff --git a/source/official-code/mini/test_utils.py b/source/official-code/mini/test_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..e5c39a7cbd9c918d155a42eb1a391da3a708b7ea --- /dev/null +++ b/source/official-code/mini/test_utils.py @@ -0,0 +1,106 @@ +import torch +from data_utils import get_eval_dataset +import numpy as np + + +def get_score(args, tokenizer, x, pred, mask, i): + x = x[i] + pred = pred[i] + mask = mask[i] + + # str_acc = int(torch.equal(x * mask, pred * mask)) # I don't think I know what equal does + str_acc = int(sum(torch.eq(x * mask, pred * mask)) == sum(mask)) + + if sum(mask) == 0: + char_acc = 1 + else: + # char_acc = sum([m * int(c1 == c2) for (c1, c2, m) in zip(x, pred, mask)]) / sum(mask) + char_acc = sum(mask * torch.eq(x, pred)) / sum(mask) + + return str_acc, char_acc + + +def evaluation(args, model, tokenizer): + if args.eval_jump_type == 'exponential': + lengths = np.unique(np.logspace(np.log10(args.min_eval_length), np.log10(args.max_eval_length), num=args.eval_exp_num_jumps, dtype=int)) + if args.eval_jump_type == 'linear': + lengths = np.arange(args.min_eval_length, args.max_eval_length, args.eval_linear_jump_size) + # lengths = np.arange(args.min_eval_length, args.max_eval_length) + + str_acc_mean_list = [] + str_acc_std_list = [] + char_accuracy_list = [] + if args.print: + print("\n") + + for length in lengths: + str_acc_batch = np.zeros(args.eval_num_batches) + char_acc_mean = 0 + + for j in range(args.eval_num_batches): + long_dataset = get_eval_dataset(args, tokenizer, length, length) + batch = next(iter(long_dataset)) + + x = batch['input_ids'].to('cuda') + y = batch['output_ids'].to('cuda') + mask = batch['mask'].to('cuda') + + attention_mask = torch.ones((x.shape[1], x.shape[1])) + attention_mask = (torch.triu(attention_mask, diagonal=0) - torch.triu(attention_mask, diagonal=args.window)).T.to('cuda') + + with torch.no_grad(): + # prediction + if args.model=="lstm": + assert False # Not tested + state = model.init_hidden(args.eval_batch_size, 'cuda') + logits, state = model(x, state) + # elif args.model=="mamba": + # logits = model(x)[0] + else: + logits = model(x, attention_mask=attention_mask, return_dict=True)['logits'] + + # greedy decoding + pred = torch.argmax(logits, dim=-1) + + # evaluation + for i in range(len(x)): + str_acc, char_acc = get_score(args, tokenizer, y, pred, mask, i) + + str_acc_batch[j] += str_acc + char_acc_mean += char_acc + + if args.print: + print("v"*100) + print("COMPLETE EXAMPLE: ", tokenizer.to_string(batch['input'][0], pytorch=False)) + # print("EXAMPLE:", batch['input'][0]) + print("-"*100) + print("INPUT EXAMPLE: ", tokenizer.to_string(batch['input_ids'][0][batch['mask'][0]==1])) + print("OUTPUT EXAMPLE:", tokenizer.to_string(batch['output_ids'][0][batch['mask'][0]==1])) + # print("TOKENIZED:", batch['input_ids'][0][batch['mask'][0]==1]) + print("-"*100) + print("PREDICTION: ", tokenizer.to_string(pred[0][batch['mask'][0]==1])) + # print("PREDICTION:", pred[-1][batch['mask'][0]==1]) + print("^"*100) + + + str_acc_batch = str_acc_batch/args.eval_batch_size + # str_acc_batch = str_acc_batch/len(x) + mean_str_acc = float(np.mean(str_acc_batch)) + std_str_acc = float(np.std(str_acc_batch)) + + str_acc_mean_list.append(mean_str_acc) + str_acc_std_list.append(std_str_acc) + + mean_char_acc = char_acc_mean/(args.eval_batch_size*args.eval_num_batches) + # mean_char_acc = char_acc_mean/(len(x)*args.eval_num_batches) + char_accuracy_list.append(mean_char_acc.item()) + + # print(f"{args.eval_task}; len {length}: {mean_str_acc} +- {std_str_acc}; char: {mean_char_acc}") + print(f"{args.eval_task};len {length};char: {mean_char_acc}") + if args.print: + print("\n") + + return str_acc_mean_list, str_acc_std_list, char_accuracy_list + + + diff --git a/source/official-code/mini/train_utils.py b/source/official-code/mini/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..129c7ff63aead770eb0bf129de6c7467c9bb8722 --- /dev/null +++ b/source/official-code/mini/train_utils.py @@ -0,0 +1,154 @@ +from torch.nn import CrossEntropyLoss +from transformers import get_scheduler, AutoModel +from tqdm import tqdm +from pathlib import Path +from torch.optim import AdamW +import torch +import os + +from accelerate import Accelerator + +def ce_loss(inputs, logits, mask): + # Shift so that tokens < n predict n + if type(logits) != torch.Tensor: + logits = logits['logits'] + shift_labels = inputs.contiguous() + shift_logits = logits.contiguous() + mask = mask.contiguous().view(-1) + + # Calculate per-token loss + loss_fct = CrossEntropyLoss(reduction='none') + # loss_fct = CrossEntropyLoss(ignore_index=TO_TOKEN['*'], reduction='none') + loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), shift_labels.view(-1)) + return torch.sum(loss*mask)/torch.sum(mask) + + +def get_optimizer(model, args): + optimizer = AdamW(model.parameters(), lr=args.lr, weight_decay=0.1) + return optimizer + + +def custom_get_scheduler(optimizer, num_training_steps): + lr_scheduler = get_scheduler( + name="linear", + optimizer=optimizer, + num_warmup_steps=100, + num_training_steps=num_training_steps, + ) + return lr_scheduler + + +def train(args, model, optimizer, tokenizer, train_dataset): + # optimizer = get_optimizer(model, args) + + # Put model on GPU + accelerator = Accelerator() + + model, optimizer = accelerator.prepare(model, optimizer) + + num_train_epochs = args.epochs + num_update_steps_per_epoch = args.num_examples + num_training_steps = num_train_epochs * num_update_steps_per_epoch + num_log_steps = 50 + + lr_scheduler = custom_get_scheduler(optimizer,num_training_steps) + + gradient_accumulation_steps = 1 + + model.train() + completed_steps = 0 + num_train_epochs = 1 + + for epoch in range(num_train_epochs): + avg_loss = [0] + count = [0] + if args.print: + progress_bar = tqdm( + enumerate(train_dataset, start=1), total=num_training_steps, + desc=f'Epoch {epoch + 1}/{num_train_epochs}' + ) + else: + progress_bar = enumerate(train_dataset, start=1) + + for step, batch in progress_bar: + x = batch['input_ids'].to('cuda') + y = batch['output_ids'].to('cuda') + mask = batch['mask'].to('cuda') + + attention_mask = torch.ones((x.shape[1], x.shape[1])) + attention_mask = (torch.triu(attention_mask, diagonal=0) - torch.triu(attention_mask, diagonal=args.window)).T.to('cuda') + # attention_mask = attention_mask.unsqueeze(0).repeat(x.shape[0], 1, 1) + + if args.model=="lstm": + assert False # Untested + state = model.init_hidden(args.train_batch_size, 'cuda') + logits, state = model(x, state, attention_mask=attention_mask) + else: + logits = model(x, attention_mask=attention_mask, return_dict=True)['logits'] + + # if args.model=="mamba": + # print(logits) + # assert False + # logits = logits[0] + + loss = ce_loss(y, logits, mask) + if (step+1) % num_log_steps == 0: + avg_loss.append(0) + count.append(0) + loss = loss / gradient_accumulation_steps + + avg_loss[-1] += loss.item() + count[-1] += 1 + accelerator.backward(loss) + + if step % gradient_accumulation_steps == 0: + accelerator.clip_grad_norm_(model.parameters(), 1.0) + optimizer.step() + lr_scheduler.step() + optimizer.zero_grad() + completed_steps += 1 + if step > num_training_steps: + break + + # Update tqdm description with the current loss + if args.print: + progress_bar.set_postfix({'Loss': loss.item()}) + + +def get_filepath(args): + if args.model.startswith("T") or args.model == "hybrid" or args.model == "hybrid_nope": + path = "./output_dir/"+f"model_{args.model}_layer_{args.layers}_hidden_{args.hidden_size}_heads_{args.heads}_train_{args.train_task}_lr_{args.lr}_epochs_{args.epochs}_steps_{args.num_examples}/" + + elif args.model == "lstm" or args.model == "mamba": + path = "./output_dir/"+f"model_{args.model}_layer_{args.layers}_hidden_{args.hidden_size}_train_{args.train_task}_lr_{args.lr}_epochs_{args.epochs}_steps_{args.num_examples}/" + + return path + + +def load_model(args, model): + path = get_filepath(args) + + # Load model + # if args.model=="lstm" or args.model=="mamba": + if args.model=="lstm": + path += "model.pt" + model = torch.load(path, weights_only=False) + else: + model = model.from_pretrained(path) + + return model + + +def save_model(args, model): + path = get_filepath(args) + + if not os.path.exists(path): + Path(path).mkdir(parents=True, exist_ok=True) + + # Save model + # if args.model=="lstm" or args.model=="mamba": + if args.model=="lstm": + path += "model.pt" + torch.save(model, path) + else: + model.save_pretrained(path) diff --git a/source/official-code/output.png b/source/official-code/output.png new file mode 100644 index 0000000000000000000000000000000000000000..4796036e4e7a3a26ed8b3ac40f1f60bd893ba221 Binary files /dev/null and b/source/official-code/output.png differ diff --git a/source/official-code/useful_commands.txt b/source/official-code/useful_commands.txt new file mode 100644 index 0000000000000000000000000000000000000000..81dd14bc9bca49d6bdb31018154658fa2b518ef6 --- /dev/null +++ b/source/official-code/useful_commands.txt @@ -0,0 +1 @@ +jupyter nbconvert --execute --to notebook --inplace main.ipynb & diff --git a/style.css b/style.css deleted file mode 100644 index 114adf441e9032febb46bc056b2a8bb651075f0d..0000000000000000000000000000000000000000 --- a/style.css +++ /dev/null @@ -1,28 +0,0 @@ -body { - padding: 2rem; - font-family: -apple-system, BlinkMacSystemFont, "Arial", sans-serif; -} - -h1 { - font-size: 16px; - margin-top: 0; -} - -p { - color: rgb(107, 114, 128); - font-size: 15px; - margin-bottom: 10px; - margin-top: 5px; -} - -.card { - max-width: 620px; - margin: 0 auto; - padding: 16px; - border: 1px solid lightgray; - border-radius: 16px; -} - -.card p:last-child { - margin-bottom: 0; -} diff --git a/validate_logbook.py b/validate_logbook.py new file mode 100644 index 0000000000000000000000000000000000000000..ff356eb2c1a5a971ad7df4a379f96c9d95df1758 --- /dev/null +++ b/validate_logbook.py @@ -0,0 +1,142 @@ +"""Strict, offline validator for this local six-claim package. + +This deliberately is *not* described as a campaign/Hub validator: no remote +publication is part of this run. It validates only the files present in this +directory and writes deterministic machine-readable results. +""" + +from __future__ import annotations + +import argparse +import hashlib +import json +import subprocess +from pathlib import Path + + +ROOT = Path(__file__).resolve().parent +OUT = ROOT / "outputs" +EXPECTED_ARCHIVE = "e8d22bfd259aaa60385841d8643109ecb66f7eb1081dd76429f5215f05a032e8" +EXPECTED_CODE = "6be8f8fbc2169290af6f4ba5e4bd53a5c6485f7b" +EXPECTED_CLAIMS = [ + "Theorem 3.3 proves that any k-layer state-space model solving the function-composition tasks under injectivity conditions must have total log state-space size scaling as Ω(m·log|V| − q·log|Y|), linear in the hidden dimension m (Theorem 3.3).", + "Theorem 3.7 proves that sliding-window Transformers solving the same tasks under a local-sensitivity condition require total window size scaling with the context-dependency range R (Theorem 3.7).", + "Theorem 4.3 constructs a two-layer hybrid (Mamba + attention) model that solves the selective copying task using embedding dimension O(max(log|V|, log L)) and working memory Õ(N), versus Ω(L) required by pure Transformers (Theorem 4.3).", + "Theorem 4.6 constructs a three-layer hybrid model that achieves 99% accuracy on the associative recall task using embedding dimension O(max(log|V|, log L)) and window size Õ(|V|) (Theorem 4.6).", + "On the selective copying task, the learned hybrid model reaches perfect accuracy with roughly 2,000 parameters while pure Transformer/SSM models need roughly 12,000 parameters to match it, a 6x parameter gap (Figure 4).", + "On multi-key associative recall, the hybrid model reaches 60% accuracy using 6x fewer parameters than pure Transformers, which plateau near 40% accuracy on single-key associative recall (Figures 5-6).", +] + + +def sha(path: Path) -> str: + return hashlib.sha256(path.read_bytes()).hexdigest() + + +def read(name: str) -> dict: + return json.loads((OUT / name).read_text()) + + +def main() -> None: + parser = argparse.ArgumentParser() + parser.add_argument("--require-replay", action="store_true") + args = parser.parse_args() + c1, c2, c3, c4 = (read(f"claim{i}.json") for i in range(1, 5)) + c5, c6 = read("claim5.json"), read("claim6.json") + n3, n4 = read("claim3_native.json"), read("claim4_native.json") + claims = json.loads((ROOT / "CLAIMS.json").read_text())["claims"] + texts = [x["text"] for x in claims] + provenance = json.loads((ROOT / "SOURCE_PROVENANCE.json").read_text()) + logbook = json.loads((ROOT / "logbook.json").read_text()) + checks: list[dict] = [] + + def check(name: str, ok: bool, detail: str) -> None: + checks.append({"name": name, "passed": bool(ok), "detail": detail}) + + check("frozen_six_claims", texts == EXPECTED_CLAIMS, + "CLAIMS.json exactly equals the six registered claim strings.") + route_files = [ROOT / "pages/index.md", ROOT / "pages/executive-summary/page.md"] + [ + ROOT / "pages" / x / "page.md" for x in [ + "claim-1-theorem-3-3-literal-bound", "claim-2-theorem-3-7-window-bound", + "claim-3-theorem-4-3-selective-copy", "claim-4-theorem-4-6-associative-recall", + "claim-5-figure-4-selective-copy-learning", "claim-6-figures-5-6-associative-recall-learning", + ] + ] + check("complete_eight_routes", len(logbook["root"]["children"]) == 7 and all(p.is_file() for p in route_files), + "Index, executive summary, and six claim routes exist.") + check("exact_authored_archive", sha(ROOT / "source/2603.08859v1.tar.gz") == EXPECTED_ARCHIVE + and provenance["archive_sha256"] == EXPECTED_ARCHIVE, + "arXiv e-print archive matches the retrieval SHA-256.") + head = subprocess.check_output(["git", "-C", str(ROOT / "source/official-code"), "rev-parse", "HEAD"], text=True).strip() + status = subprocess.check_output(["git", "-C", str(ROOT / "source/official-code"), "status", "--porcelain"], text=True).strip() + check("pinned_clean_code_checkout", head == EXPECTED_CODE and not status, + "Linked source repository is detached at the recorded clean commit.") + check("claim1_literal_falsification", c1["printed_bound_audit"]["max_literal_bound_over_admissible_grid"] <= 0 + and c1["one_state_guessing_accuracy"]["2"] == 0.5 + and all(row["A_star"]["1"] == 0.5 for row in c1["exhaustive_accuracy_curves"][:2]), + "Under injectivity the printed RHS is non-positive; one-state 1/2 witnesses are retained.") + check("claim2_receptive_field_witnesses", c2["receptive_field_sweep"]["violations_outside_receptive_field"] == 0 + and c2["max_abs_delta_when_sumW_below_R"] == 0.0 + and c2["control_full_window_separates_frac"] == 1.0, + "Real causal-attention stacks preserve the designed outside-window witness.") + check("claim3_construction_and_controls", c3["min_accuracy_over_all_configs"] == 1.0 + and c3["total_inputs_tested"] >= 1_500_000 + and all(x["full_construction_accuracy"] == 1.0 + and x["control_window_minus_1_accuracy"] < 1.0 + and x["control_no_ssm_query_accuracy"] < 1.0 + for x in c3["negative_controls"]), + "Independent finite construction succeeds while destructive controls fail.") + check("claim4_full_vocab_certificate", c4["all_meet_99pct"] + and all(x["success"] == 1.0 for x in c4["exhaustive_full_window"]) + and c4["gate_reference_target_mismatches"] == 0, + "Full-vocabulary construction passes its exact coverage and small-domain gates.") + check("claim4_sample_certificate_distinction", c4["min_success_at_theorem_window"] < 0.99 + and all(x["analytic_certificate_meets_99pct"] for x in c4["theorem_window"]), + "The one sub-99% finite sample mean is retained separately from the exact coverage certificate.") + check("direct_native_notebooks_retained", n3["kind"] == "direct_native_notebook_execution" + and n4["kind"] == "direct_native_notebook_execution" + and n3["control_is_lower"] and n4["control_is_lower"], + "Author notebook cell execution and destructive controls are reported without upgrading scope.") + q5 = c5["literal_table_comparison"] + check("claim5_exact_source_scope", q5["parameter_ratio_12000_over_2000"] == 6.0 + and q5["hybrid_ssm_to_tf_at_approximately_2000"] == 0.999 + and not q5["strict_table_value_is_exactly_one"], + "Figure 4 table is preserved as .999, not silently converted to 1.000.") + q6 = c6["literal_table_checks"] + check("claim6_source_contradiction_marked", not q6["hybrid_reaches_0_60_at_approximately_2000"] + and q6["hybrid_ssm_to_tf_at_approximately_2000"] == 0.512 + and c6["single_key_statement_is_a_different_task"], + "Figure 6 sixfold row and Figure 5 task distinction are explicitly retained.") + + semantic = { + "profile": "semantic-v4-local", + "validator": "local_bundle_validator_not_campaign_validator", + "checks": checks, + "passed": all(c["passed"] for c in checks), + "check_count": len(checks), + } + (ROOT / "SEMANTIC_V4.json").write_text(json.dumps(semantic, indent=2) + "\n") + + replay_ok = None + if args.require_replay: + replay = json.loads((ROOT / "REPLAY.json").read_text()) + replay_ok = replay["byte_identical"] and len(replay["files"]) == 8 + operational = { + "replay_required": args.require_replay, + "byte_identical_replay": replay_ok, + "no_remote_publication": logbook["publication_status"] == "local-only; no Space created or modified", + "official_campaign_validator": "not run: no campaign target was created or modified", + } + result = { + "validator": "validate_logbook.py (local bundle validator)", + "semantic_v4": semantic, + "operational": operational, + "passed": semantic["passed"] and (replay_ok is not False), + } + (ROOT / "VALIDATION.json").write_text(json.dumps(result, indent=2) + "\n") + print(f"semantic-v4: {sum(c['passed'] for c in checks)}/{len(checks)}; local validation: {result['passed']}") + if not result["passed"]: + raise SystemExit(1) + + +if __name__ == "__main__": + main()