From 41e86b020fe2c54c1f1fcd98ae2aea40230af6cd Mon Sep 17 00:00:00 2001 From: stecrotti Date: Sat, 18 Oct 2025 17:35:46 +0200 Subject: [PATCH 1/3] Another fix for complex derivative --- Project.toml | 2 +- src/MatrixProductStates/derivatives.jl | 8 ++++---- src/tensor_train.jl | 10 +++++----- test/mps.jl | 14 +++++--------- 4 files changed, 15 insertions(+), 19 deletions(-) diff --git a/Project.toml b/Project.toml index 0e8be88..a344513 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "TensorTrains" uuid = "89893e69-996d-40b1-ba32-8ff5f34c0dd5" -authors = ["stecrotti ", "abraunst ", "abraunst Date: Sat, 18 Oct 2025 19:57:32 +0200 Subject: [PATCH 2/3] maybe found the error --- experiments/dmrg.jl | 4 ++-- src/MatrixProductStates/derivatives.jl | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/experiments/dmrg.jl b/experiments/dmrg.jl index 3d27cdb..b5859d2 100644 --- a/experiments/dmrg.jl +++ b/experiments/dmrg.jl @@ -35,9 +35,9 @@ function CB() end callback = CB() -nsweeps = 40 +nsweeps = 20 two_site_dmrg!(p, X, nsweeps; - η=1e-4, ndesc=10, svd_trunc=TruncBond(d_original+2), callback) + η=1e-3, ndesc=10, svd_trunc=TruncBond(d_original), callback) pl1 = plot(callback.nlls, xlabel="it", ylabel="NLL", label="") hline!(pl1, [nll], ls=:dash, c=:gray, label="NLL according to generative model") diff --git a/src/MatrixProductStates/derivatives.jl b/src/MatrixProductStates/derivatives.jl index 6590264..149a5c3 100644 --- a/src/MatrixProductStates/derivatives.jl +++ b/src/MatrixProductStates/derivatives.jl @@ -79,7 +79,7 @@ function grad_loglikelihood_two_site(p::MPS, k::Integer, X; gr, val = grad_evaluate_two_site(p.ψ, k, x; Ax_left = prodA_left[n][k-1], Ax_right = prodA_right[n][k+2], Aᵏᵏ⁺¹ ) - @inbounds gA[:,:,x[k]...,x[k+1]...] .+= 2 * conj(gr) / (T * val) * weights[n] + @inbounds gA[:,:,x[k]...,x[k+1]...] .+= 2 * conj(gr) / (T * conj(val)) * weights[n] ll += 1/T * log(abs2(val)) * weights[n] end return gA, ll From 192dbb02f5690bb2f839374c4301bf48d7a7b66c Mon Sep 17 00:00:00 2001 From: stecrotti Date: Sat, 18 Oct 2025 20:15:51 +0200 Subject: [PATCH 3/3] test with experiment --- experiments/dmrg.jl | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/experiments/dmrg.jl b/experiments/dmrg.jl index b5859d2..13cc9e4 100644 --- a/experiments/dmrg.jl +++ b/experiments/dmrg.jl @@ -3,15 +3,16 @@ using Plots d_original = 3 L = 5 -q = rand_mps(ComplexF64, d_original, L, 4) +F = ComplexF64 +q = rand_mps(F, d_original, L, 4) normalize!(q) -nsamples = 5*10^3 +nsamples = 10*10^3 X = [sample(q)[1] for _ in 1:nsamples] nll = -loglikelihood(q, X) println("Negative Log-Likelihood according to generating distribution q = $nll\n") mq = marginals(q) -p = rand_mps(ComplexF64, 2, length(q), 4) +p = rand_mps(F, 2, length(q), 4) function CB() nlls = zeros(0) @@ -37,7 +38,7 @@ end callback = CB() nsweeps = 20 two_site_dmrg!(p, X, nsweeps; - η=1e-3, ndesc=10, svd_trunc=TruncBond(d_original), callback) + η=1e-4, ndesc=10, svd_trunc=TruncBond(d_original), callback) pl1 = plot(callback.nlls, xlabel="it", ylabel="NLL", label="") hline!(pl1, [nll], ls=:dash, c=:gray, label="NLL according to generative model")