summaryrefslogtreecommitdiff
path: root/experiments
diff options
context:
space:
mode:
authorYurenHao0426 <Blackhao0426@gmail.com>2026-04-02 23:34:12 -0500
committerYurenHao0426 <Blackhao0426@gmail.com>2026-04-02 23:34:12 -0500
commit2aaabd9a95386bf9f274cb9907ac6a5306171759 (patch)
treefbc7f8e5f59ded66489b2141f6e1d41ded0dc43e /experiments
parent142bf87309ad8180770238ce097b0b1c9d33f5d7 (diff)
Fix EP credit sign: negate (h_nudge - h_free)/β to align with BP grad direction
EP nudge moves h toward lower loss (opposite to BP grad which points toward loss increase). Without negation, Gamma is negative and rho is -0.25. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'experiments')
-rw-r--r--experiments/ep_baseline.py3
-rw-r--r--experiments/ep_synthetic.py4
2 files changed, 5 insertions, 2 deletions
diff --git a/experiments/ep_baseline.py b/experiments/ep_baseline.py
index de7d853..7f3d004 100644
--- a/experiments/ep_baseline.py
+++ b/experiments/ep_baseline.py
@@ -206,7 +206,8 @@ def ep_credit_signals(model, x, y, beta, T_nudge, alpha_nudge):
_, h_free = model(x, return_hidden=True)
h_nudged = ep_nudged_phase(model, x, y, h_free, beta, T_nudge, alpha_nudge)
L = model.num_blocks
- credits = [(h_nudged[l] - h_free[l]) / beta for l in range(L)]
+ # Negate: EP nudge moves h toward lower loss, opposite to BP grad direction
+ credits = [-(h_nudged[l] - h_free[l]) / beta for l in range(L)]
return credits, h_free, h_nudged
diff --git a/experiments/ep_synthetic.py b/experiments/ep_synthetic.py
index 7daecde..a2f24df 100644
--- a/experiments/ep_synthetic.py
+++ b/experiments/ep_synthetic.py
@@ -115,7 +115,9 @@ def compute_diagnostics(model, teacher, dev, d, C, L, beta=0.5, T_nudge=20, alph
gammas,rhos=[],[]
with torch.no_grad():_,hi=model(x,return_hidden=True)
for l in range(L):
- a_ep=(h_nudge[l+1].detach()-h_free[l+1])/beta
+ # EP nudge moves h toward lower loss, so (h_nudge - h_free) points opposite to BP grad.
+ # Negate to align with BP gradient convention (pointing toward loss increase).
+ a_ep=-(h_nudge[l+1].detach()-h_free[l+1])/beta
gammas.append(cosine_similarity_batch(a_ep,bp[l+1]))
def mk(sl):
def f(h):