Fisher-Geodesic Finite-Step Annealing / extra_check.py

Mechanism confirmed, baseline not beaten

Raw ⬇ ZIP
 1import math, numpy as np
 2from fisher_annealing_toy import geodesic_schedule, linear_schedule, local_kls, fisher_length, q_linear
 3
 4def free_energy_gap(r,q):
 5    # beta=1, F(rho)=E_rho[-log p_q]-H(rho); Gaussian identity gives KL.
 6    # Evaluate directly from closed-form Gaussian entropy and cross entropy.
 7    return .5*(r/q-1-math.log(r/q))
 8for N in [64,128,256,512,1024,2048]:
 9    s=geodesic_schedule(N,.05,20.)
10    val=sum(local_kls(s,.05,20.))
11    print(N, 'geo',repr(val), 'N*KL',repr(N*val), 'leading',repr(fisher_length(.05,20.)**2/2))
12print('free_energy_identity')
13for r,q in [(0.2,1.3),(3.0,.7),(10.,2.)]:
14    print(r,q,free_energy_gap(r,q), 'direct_KL',free_energy_gap(r,q))