+1 vote
asked by (130 points)

Hi everyone!
I am sorry for asking a rather generic question not directly related to the ITensor code: I am working on applications of MPS to quantum chemistry and for my code I need a couple of features (e.g. autodifferentiation) which are not (yet?) implemented in ITensor — however, I very much hope that I am not asking something completely unrelated and it would still be possible to find an answer within the community.

Roughly my question is as follows: given an arbitrary MPS representing an N qubit system (i.e. site tensors are initialised randomly and bond dimensions are consequtive powers of 2) is there any way to project this MPS onto a particular symmetry sector? (say, corresponding to some particular value of a quantum number).
By "projection" I mean such transformation of site tensors that (i) the transformed MPS assigns zero amplitude to those vectors of computational basis which do not belong to a chosen symmetry sector; (ii) amplitudes of vectors of computational basis belonging to the symmetry sector remain the same as given by the non-transformed MPS.

I know that if an MPS belongs to a particular symmetry sector, then its site tensors have block structure (which can be exploited to speed up the computations, improve the convergence etc.). Hence, I can imagine that the projection sought might be as simple as dropping some blocks of site tensors and keeping the others, but so far I can't figure out what has to be done.

Also, the situation here is somewhat different to the conventional use case of symmetries: if I got it right, when one needs to get a random MPS belonging to a certain symmetry sector, they start from a random low-entangled state belonging to the chosen sector, and then increase the bond dimension by entanglement-growing operations — the resulting MPS has the block structure thanks to the fact that we know how to perform common TN operations and keep the block structure. Here I already have an MPS and I want to keep all values of its "correct" amplitudes the same.

Finally, I shall mention that for my particular type of symmetry I can construct an MPO which would represent the actual projector operator to the symmetry sector, but I am not so keen on doing this as it will increase my bond dimensions quite significantly.

Thanks to whoever might join the discussion!

P.S. Sorry for a long and rather contrived question, I am just the only person working on this topic in my research group and I don't have anyone to chat about it — so I decided to seek help here, especially because I saw a couple of questions similar to mine.

1 Answer

0 votes
answered by (70.1k points)

Hi Alexei,
Thanks for a great question, though my answer might be disappointing to you. The answer is that there is in principle a nice algorithm to do this, but I don't think it's ever been published and I don't know of an existing code that offers it, including ITensor. It's certainly something we could add, in the sense of being a feature that would be a good fit for our library and we'd like to offer, but I can't promise any time frame for when we would add it.

The shortest version I can give of how this algorithm would work starts with some background: your idea of using an MPO projector would indeed run into an issue but it may not be exactly the one you meant. The issue is not that the final MPS would end up with a large bond dimension - that would not happen - but that the actual MPO itself would be very large so that using it would still be prohibitively expensive on a large system.

So the algorithm I would write would go more like this (it's a very rough description): first you would project the first site into various symmetry sectors (for the case of particle number or U(1) symmetry these would be different particle numbers). Then you would keep track of the different projection results by either storing separate tensors corresponding to each type of projection (0 particle tensor, 1 particle tensor, etc.) or by actually starting to construct the MPO you were talking about and having its first tensor.

Next, you would make a projector that combines the information about the previous projection with the projection on the next site, and creates new tensors corresponding to the various outcomes, which would now cover a larger range of possibilities: 0, 1, 2, etc particles. At this point it starts to become important to truncate this set of tensors in some way. This would depend on the details of the algorithm. The simplest version would be to evaluate the probability of seeing the particular total quantum numbers you are keeping track of and discard the ones whose probability falls below some threshold. A more sophisticated way would to be to continue to use this "partial projector MPO" picture to devise a truncation procedure.

Proceeding this way, one would continue to alternate between projecting and truncating, site by site.

The crucial thing is that one has to truncate "on the fly" as the projection is being done to avoid a blowup of costs. Otherwise, the algorithm just won't be efficient in general.

Sorry that my answer is so vague, but it's not an algorithm that's written down anywhere I am aware of. I hope to write more about it or implement it at some point.

Best regards,
Miles

P.S. there may be some other easier things that can be tried. For example, one could create an MPO which enforces an energy penalty that favors a particular total quantum number over others, and include this MPO in a DMRG calculation to 'target' a state with these particular quantum numbers. This can be used as a kind of "poor man's" approach to, say, get a certain SU(2) quantum number in a code, like ITensor, that currently only offers Abelian quantum number conservation. I've done this particular one before and it worked well.

commented by (130 points)
Hey Miles,
Thank you very much for the prompt reply — I think, you've given me the main words, which are "so far there is very little information on such an algorithm and that is not something what people do casually" — that was my main point of concern, as I am not fully aware of the field.

However, I am not quite clear about a couple of points in your answer, so if you are open for further discussion, here are my points:
1. I might have abused the notation of MPO when I was talking about the projection operator. What I meant is that the matrix of such an operator can be represented in computational basis in a tensor-train format (i.e. something looking like MPS but also with physical legs pointing both upwards and downwards). Hence, one can contract it with the initial MPS (which will correspond to matrix-vector multiplication) and obtain a new MPS with the bond dimension d_new = d_mps * d_mpo.
So, my question here is what did you mean by MPO? Just a product of matrices or, as I have met this couple of times in literature, something operator-valued?
2. As you might have seen, I am quite ignorant about what MPOs are (I use my own notation etc.), so I didn't get the construction procedure you described (sorry!). However, I just wanted to say that the aforementioned representation of projection matrix is not that large, it has bond dimension of only d_mpo = N_e + 1 (as I am working on quantum chemistry problems, I am interested in the electron number conservation, hence we consider to be "physical" only computational basis vectors with N_e unities in their binary representation). The problems start when I try to apply that MPO to MPS — as I have mentioned, that increases the bond dimension by a factor of (N_e + 1).
3. Your proposition to penalise energy by an MPO 'targeting' particular symmetry sectors sounds interesting, but my lack of knowledge manifests itself again, so could you possibly throw a paper at me discussing how this can be done? (honestly, referring me to papers with regard to any previous question is fine :) )

Thank you very much for your help again, and oh Lord, I hope I don't add too much burden!
Welcome to ITensor Support Q&A, where you can ask questions and receive answers from other members of the community.

Formatting Tips:
  • To format code, indent by four spaces
  • To format inline LaTeX, surround it by @@ on both sides
  • To format LaTeX on its own line, surround it by $$ above and below
  • For LaTeX, it may be necessary to backslash-escape underscore characters to obtain proper formatting. So for example writing \sum\_i to represent a sum over i.
If you cannot register due to firewall issues (e.g. you cannot see the capcha box) please email Miles Stoudenmire to ask for an account.

To report ITensor bugs, please use the issue tracker.

Categories

...