FSRS-7
FSRS-7 は 34 個の重みと二つの記憶成分を使います。記憶状態は stability(遅い成分)、stabilityFast(速い成分)、difficulty で構成されます。
記憶状態と記号
共通の記号に加え、 を stability、 を stabilityFast とします。どちらも単位は日ですが、混合した想起確率が 90% に達する間隔とは一致しません。難易度は遅い成分の曲線と混合重みの両方に影響します。
数式には範囲内に制限した復習前の状態を使います。両方の安定度は [0.0001, 36500]、難易度は [1, 10] です。経過時間 は小数の日数で、曲線では を使います。「速い」「遅い」は成分の名前であり、二つの安定度の大小関係を保証しません。
初期記憶
新しい記憶状態について、 と を遅い成分と速い成分の安定度の範囲へのクリップ、 を [1, 10] へのクリップとします。
二成分の忘却曲線
速い成分:
遅い成分:
混合重みと想起確率
二つの重みは正の非正規化係数です。経過時間ではなく記憶状態で決まります。成分そのものの想起確率は、混合結果への寄与とは異なります。
algorithm.curve(t, state) は fast、slow、fastWeight、slowWeight、retrievability、derivative を返します。最初の二つは成分そのものの想起確率であり、混合時には重みを正規化します。最後の微小な調整により確率は 0 と 1 を避けるため、 です。
復習後の安定度
成分の安定度 、想起確率の入力 、パラメーターのオフセット に対し、忘却後の値と想起成功時の更新を次のように定義します。
遅い成分には と混合確率 、速い成分には と速い成分そのものの確率 を使います。すべて復習前の難易度を使います。retrievability を明示すると、遅い成分と難易度の更新に使う を置き換えますが、速い成分の は置き換えません。
Again では、新しい速い安定度を新しい遅い安定度の 80% 以下に制限してから、状態の範囲を適用します。
復習後の難易度
Again は混合想起確率で難易度の変化を調整します。平均回帰係数は 0.01 固定です。
実装は三つの新しい状態値を小数点以下 8 桁に丸め、各範囲にクリップします。FSRS-7 はゼロを含む小数の経過日数に同じ更新式を使い、enableShortTerm で制御する別の同日更新式はありません。学習ステップのスケジューリングは引き続き middleware のポリシーです。
間隔の計算
nextInterval(state, r) は混合曲線が目標確率に達する経過時間を数値的に求めます。三つの状態フィールドすべてに依存し、小数の日数を返します。
実装は を検証し、目標を [0.0001, 0.9999] に制限します。上限の目標ではゼロを返します。それ以外は対数時間で最大 7 回の有界 Newton 更新を行い、想起確率の誤差が 0.001 を超える場合は二分探索に切り替えます。結果は sMax で制限されるため、極端な目標には到達できない場合があります。
設定と移行
FSRS-7 には専用の 34 個の重みが必要です。パラメーター移行関数は空の入力に既定値を補いますが、空でない入力には 34 個の重みが必要です。FSRS-3〜6 の重みと記憶状態を FSRS-7 に直接変換することはできません。カードデータを移行するには、FSRS-7 を使うスケジューラーで reschedule により復習履歴を再生し、小数の経過日数を保持して記憶状態を再構築してください。上記の 0.8 係数は初期化と Again の更新に使います。