Реализация инверсии собственных значений на уровне шлюза в HHL
Я пытаюсь понять, как работает реализация шага инверсии собственных значений на уровне ворот в алгоритме HHL.
Я следую этой ссылке , где утверждается (лемма 4), что этого можно достичь с помощью контролируемых вращений:
$$ U_\theta: |\widetilde{\theta} \rangle |0 \rangle \rightarrow |\widetilde{\theta} \rangle \left(\cos \widetilde{\theta} |0\rangle + sin \widetilde{\theta} |1 \rangle \right ) $$
$$U_\theta = \sum_{\widetilde{\theta} \in \{0,1\}^n} |\widetilde{\theta}\rangle \langle \widetilde{\theta}| \otimes \exp \left(-i \widetilde{\theta} \sigma_y \right) $$
где $\widetilde{\theta}$ представляет собой n-битное представление угла конечной точности $\theta$, а также $\sigma_y$ матрица Y Pauli.
У меня вопрос, как углы поворота $\widetilde{\theta}$ для унитарного $U_\theta$ вычисляется / применяется без априорного знания собственных значений $\lambda_j$ матрицы системы $A$?
Я так понимаю, что вектор состояния $|\widetilde{\theta} \rangle$ получается на предыдущем шаге алгоритма путем извлечения собственных значений $|\lambda_j \rangle$ из $A$используя QPE (а затем применяя функцию inverse + arcsin, как описано здесь ), но я не уверен, как эти углы также применяются в качестве параметров для ворот с контролируемым вращением (параметр экспоненты в$U_\theta$.)
К вашему сведению, я видел этот другой пост, в котором говорится: «У вас ... ... есть (по крайней мере, хорошее приближение) ваши собственные значения, записанные в регистре. Если вы контролируете этот регистр, вы можете использовать его для принятия решения угол поворота для каждого собственного вектора ".
Итак, мой вопрос в том, как вы его "используете [регистр, содержащий$|\widetilde{\theta} \rangle$], чтобы определить угол поворота [$\widetilde{\theta}$ в $\exp$ функция $U_\theta$] "?
Спасибо!
Ответы
Использование регистра для определения угла поворота означает следующее: у вас есть регистр $|\tilde{\theta}\rangle$ (состоящий из потенциально более чем одного кубита), и вы применяете чередование другого регистра, контролируемое значением кубитов $|\tilde{\theta}\rangle$. Различные вращения, которые вы применяете, приводят к тому, что на ваших вспомогательных кубитах реализуются разные функции. Но, возможно, это было вам уже известно.
Вопрос о том, какие повороты делать для применения конкретной функции , намного сложнее, и я не знаю какого-либо общего решения. На этот раз Qiskit имеет собственную реализацию HHL, но я не знаю, до какого момента она является общей. Однако есть и другие примеры, в которых «легко» реализовать, например, функцию обращения собственных значений, необходимую для HHL. В этой статье авторы реализуют аппроксимацию подпрограммы инверсии собственных значений (код Quil
можно найти в соответствующем репозитории GitLab.), что является точным в случае собственных значений, которые являются степенями 2. Причина, по которой это точное значение для степеней 2, состоит в том, что в этом случае инверсия может быть записана как комбинация перестановок битов, поэтому подпрограмма инверсии собственных значений представляет собой набор управляемых вентилей SWAP (схематическое изображение схемы приведено на рис. 3 в этой статье ). Но, как я сказал ранее, я пока не знаю общих способов реализации больших классов функций.