diff options
| author | YurenHao0426 <Blackhao0426@gmail.com> | 2026-07-22 02:13:33 -0500 |
|---|---|---|
| committer | YurenHao0426 <Blackhao0426@gmail.com> | 2026-07-22 02:13:33 -0500 |
| commit | 7e8d314c0fb8e82730e24da153e8b73c3af4ecd6 (patch) | |
| tree | 49b57e987648bd9352aa2f65ee8d12ee208160c1 /sdil | |
| parent | b9a9524ca559cc30a584779ba39f7764887d7fcf (diff) | |
results: freeze predictor timescale choice
Diffstat (limited to 'sdil')
| -rw-r--r-- | sdil/core.py | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/sdil/core.py b/sdil/core.py index cece194..8b3f923 100644 --- a/sdil/core.py +++ b/sdil/core.py @@ -18,7 +18,7 @@ For hidden layer l: Three learning rules, all local (no weight transport, no reverse-mode graph): dW_l = eta * (r_l ⊙ phi'(u_l)) h_{l-1}^T (three-factor: pre * gain * innovation) - dP_l = eta_P * (a_l - P_l h_l) h_l^T (slow; only on neutral periods) eta_P << eta + dP_l = eta_P * (a_l - P_l h_l) h_l^T (identified only on neutral periods) dA_l = eta_A * (q_l - r_l) c_l^T (on perturbation trials; q_l = causal node-pert estimate) q_l is a node-perturbation estimate of the causal descent direction @@ -513,9 +513,9 @@ def sdil_step(net, x, y, y_onehot, cfg, step, prev_error=None): dA = (qs[l] - r_list[l]).t() @ c / B # (n_l, n_classes) net.A[l] += cfg.eta_A * dA - # ================= predictor P (slow) ============================= - # KEY timescale-separation condition. P must learn the soma->apical - # coupling WITHOUT absorbing the teaching signal. On "neutral periods" + # ================= predictor P (neutral) ========================== + # KEY identification condition. P must learn the soma->apical coupling + # WITHOUT absorbing the teaching signal. On "neutral periods" # the apical compartment carries only the soma-predictable nuisance drive # (top-down teaching c is absent), so we fit P to the c=0 apical. This # makes P -> nuisance map (rho*Bnuis) and leaves the innovation intact. |
