분자의 에너지가 가장 낮아지는 분자 오비탈을 찾는 것이 양자화학 계산의 핵심입니다. 실제 분자는 한 번의 에너지 계산에 시간이 걸립니다. 양자 컴퓨터로 분자의 에너지를 측정하는 VQE (Variational Quantum Eigensolver, 변분 양자 고유값 솔버) [3]에서도 회로의 각도를 결정하여 에너지를 측정하는 것을 여러 번 반복합니다. 따라서 에너지를 '평가가 비싼 블랙박스 함수'로 간주하고, 적은 평가 횟수로 최소점을 찾는 방법을 생각했습니다.
이 글에서는 이를 위해 FMQA (Factorization Machine with Quantum Annealing) [1]의 절차를 사용하여 분자 오비탈을 나타내는 각도를 QUBO++의 **네이티브 정수 변수(native integer variable)**로 찾습니다. QUBO를 푸는 부분에는 QUBO++의 EasySolver를 사용합니다.
이 글의 주요 내용은 네 가지입니다:
- 분자 오비탈의 각도를 65단계의 네이티브 정수 변수로 표현하고, 에너지를 예측하는 모델에 정수 변수의 4차 다항식을 사용합니다. QUBO++는 이 다항식을 비트 전개하지 않고 그대로 최소화합니다 - 예시 1 (HeH⁺, 각도 1개): 무작위 4점을 평가한 후, 2회의 평가로 65가지 중 최적점에 도달합니다 - 예시 2 (결합을 2.0 Å으로 늘인 H₂ , 각도 2개): 대칭성에 대해 아무것도 알려주지 않아도, **스핀 대칭성이 파괴된 해(solution)**를 찾습니다. 난수 시드를 변경하여 20회 실행했을 때, 최소값과의 차이가 0.01 mHa 이내에 들어온 것은 평가 40회 시점에서 19회, 60회 시점에서 20회 모두였습니다 - 변수가 1~2개이므로 솔버에게는 간단한 문제입니다. 이 글의 주제는 양자화학의 에너지 계산을 FMQA 프레임워크에 적용하는 절차입니다.
에너지 단위는 Hartree (Ha)이며, 1 mHa는 0.001 Ha입니다.
FMQA 복습
FMQA는 평가가 비싼 블랙박스 함수를 사용합니다.
- 무작위로 몇 개의 점을 평가한다.
- 지금까지 평가한 모든 점에 대해, 이를 예측하는 모델(서로대체모델, surrogate model)을 적용하여 학습시킨다. $f$ - 서로대체모델을 QUBO 수식으로 만들고, 예측값을 최소화하는 점을 QUBO 솔버로 구한다.
- 그 점을 평가하여 데이터에 추가하고 2단계로 돌아간다.
원래의 FMQA는 변수가 이진(binary)이고, 서로대체모델에 Factorization Machine (FM) [2]이라는 2차 모델을 사용합니다. FM의 예측 수식은 이진 변수의 2차식이므로 그대로 QUBO가 됩니다. 이진 변수 버전의 FMQA는 FMQA를 이용한 블랙박스 최적화에서 다루었습니다.
정수 변수를 사용한 FMQA
이 글에서는 절차는 그대로 두고, 변수와 서로대체모델을 변경합니다.
- 변수: 분자 오비탈의 각도를 65단계의 정수로 표현합니다. QUBO++의 네이티브 정수 변수는 2진수의 비트로 전개되지 않고, 솔버는 정수 값 그대로 탐색합니다. 인접한 각도로 이동하는 것은 정수를 1 증가시키거나 감소시키는 단 한 번의 이동입니다. - 서로대체모델: 변수가 1~2개의 정수이므로, FM 대신 더 자유로운 형태를 표현할 수 있는 4차 다항식을 사용합니다. 계수는 변수가 1개일 때 5개, 2개일 때 15개입니다. 네이티브 정수 변수의 $n imes n$은 정수의 제곱으로 취급되므로, 4차 다항식도 그대로 QUBO++의 식이 됩니다. - 학습: 예측값은 계수의 1차식이므로, 정규화된 최소제곱법(정규화 계수 $rac{1}{N}$)으로 연립 1차 방정식을 한 번 풀면 계수를 얻을 수 있습니다. $10^{-6}$
비트로 표현했을 경우와의 차이점
각도를 2진수의 7비트 (`qbpp.var(
두 개의 전자가 같은 분자 궤도에 들어갈 때(제한 Hartree-Fock 법), 분자 궤도는 각도를...
HeH⁺는 서로 다른 원자로 구성되어 있으므로, 전자가 He 쪽으로 얼마나 치우치는지(
정수 변수와 서로대체 모델 (Surrogate Model)
서로대체 모델은 처음에 무작위 4개 지점을 평가하고, 나머지는 QUBO++가 구한 것을 이용합니다.
PyQBPP 프로그램
numpy가 필요합니다 (pip install pyqbpp numpy).
import numpy as np
import pyqbpp.d as qbpp
# HeH+의 적분값 (STO-3G 기저, 핵간 거리 1.4632 bohr, 단위 Hartree)
...
import pyqbpp.d
: 계수를 실수형으로 만듭니다.
단순히 import pyqbpp as qbpp라고 작성하면 식의 계수는 정수입니다. import pyqbpp.d as qbpp로 하면 계수가 실수(float)가 되어 (실수(double) 계수), 대입된 다항식의 계수도 실수가 됩니다.
정수 변수의 다항식을 그대로 작성하기
qbpp.var("n", integer=(0, L - 1))는 t = td * t를 반복하여 simplify()로 동류항을 정리합니다. EasySolver는 sol(n)으로 값을 받습니다 (실수로 반환되므로 int로 변환했습니다).
대입에는 numpy를 사용합니다. np.vander로 각 지점의 데이터를 얻고, np.linalg.solve로 연립 1차 방정식을 풉니다.
실행 결과
eval 1: n = 17, E = -1.111970 Ha (random)
eval 2: n = 32, E = -2.436134 Ha (random)
eval 3: n = 52, E = -2.137789 Ha (random)
...
처음 무작위로 얻은 4개 지점(random) 이후, 2번의 평가를 거쳐 65가지 경우 중 가장 좋은 지점을 찾았습니다.
난수 시드를 변경하여 20회 실행했을 때도, 20회 모두 65가지 경우 중 가장 좋은 지점에 도달했습니다. 초기 4개 지점을 포함한 총 평가 횟수는 610회(대부분 78회)로, 65가지 전체를 평가하는 경우의 약 1/8 수준입니다.
예 2: 늘어난 H₂와 스핀 대칭성 파괴
블랙박스 함수 (Black Box Function)
수소 분자 H₂의 두 전자를 생각합니다. STO-3G 기저에서는, 두 H의 1s 궤도에서 결합성 궤도가 만들어집니다.
비제한 Hartree-Fock 법(Non-restricted Hartree-Fock method)에서는, 위 스핀(↑)과 아래 스핀(↓) 전자의 에너지는 다음과 같습니다.
대칭적인 해와, 대칭성이 파괴된 해
결합을 늘리면 153.4 mHa만큼 낮아집니다. 이는 **스핀 대칭성 파괴 해 (Symmetry Broken Solution)**라고 불립니다.
Hartree-Fock 법의 일반적인 풀이 방법인 SCF(Self-Consistent Field, 자기일관장) 계산은 다음과 같습니다.
어떤 해가 더 낮은지는 결합 길이에 따라 결정됩니다. 다음 그림은 핵간 거리 R에 따른 에너지 변화를 보여줍니다.
H₂ の解離曲線
H₂ (STO-3G 기저)의 해리 곡선. 검은 점이 예 2의 핵간 거리 2.0 Å
R이 약 1.15 Å보다 짧으면, 두 Hartree-Fock 법의 에너지는 일치하며 대칭성이 파괴되지 않습니다. 이 지점을 Coulson–Fischer 지점 [5]이라고 부릅니다. R이 그보다 길어지면, 대칭성이 파괴된 해가 더 낮아집니다.
R을 크게 하면, 비제한 Hartree-Fock 법의 에너지는 수소 원자 2개의 에너지에 가까워지지만, 제한 Hartree-Fock 법의 에너지는 계속 올라갑니다. 이는 두 전자가 같은 궤도에 들어간다는 제한 때문에, 멀리 떨어진 두 원자의 한쪽에 전자 두 개가 모두 모이는 배열이 절반의 가중치로 남아있기 때문입니다. R과 정확한 에너지와의 차이(전자 상관 에너지)는 어느 Hartree-Fock 법에서도 포착할 수 없는 부분입니다.
정수 변수와 줌 (Zoom)
두 각도를 탐색 범위(창) 내의 65단계의 정수로 설정합니다.
최적값이 4회 연속으로 업데이트되지 않거나 (또는 하나의 창에서 QUBO++가 15개 지점을 구하도록 했을 때), 최적점을 중심으로 창의 폭을 절반으로 줄입니다 (줌). 단계 수를 홀수인 65로 했기 때문에, 창의 중심은
- 각 단계마다 창(window) 안의 무작위 점을 평가합니다 (첫 번째 단계는 6점, 이후는 3점).
- 학습에는 지금까지의 단계에서 평가한 점을 포함하여 현재 창 안에 있는 모든 점을 사용합니다. 다항식은 연속적인 좌표의 함수이므로, 현재 격자에 놓여있지 않은 점도 그대로 사용할 수 있습니다.
- QUBO++가 구한 점이 이미 평가된 점이라면, 그 주변 8점 중 아직 평가하지 않은 점들 중에서 예측값이 가장 작은 점을 평가합니다.
PyQBPP 프로그램
import numpy as np
import pyqbpp.d as qbpp
# 늘인 H2의 적분값 (STO-3G 기저, 핵간 거리 2.0 Å, 단위 Hartree)
...
POWERS는 대체 모델(surrogate model)의 단항식($u_eta^i u_eta^j$) 지수 목록으로, 총 15개가 있습니다. $(i, j)$ A는 창 안에 있는 각 점에서의 단항식 값을 나열한 행렬입니다. - 단계 3에서는
term = term * ua
와 같이 단항식을 곱하여 식 $f$
를 만듭니다. $f$는의 4차 다항식이며, 항은 상수항을 포함하여 15개입니다. $n_eta, n_eta$ - 주변 8점의 예측값은 식
f
에 값을 대입하여 구합니다(f({na: m[0], nb: m[1]}), 평가 함수). 대체 모델의 식을 numpy로 따로 다시 쓸 필요는 없습니다. - history는 평가한 모든 점의 각도와 에너지, seen은 현재 단계에서 평가한 격자점입니다. evaluate는 최적값을 업데이트하면 True를 반환합니다. 대칭적인 위치에 있는 2점의 에너지는 원래 같으므로, 차이가 작으면 반올림 오차로 간주하여 업데이트 계산에 포함하지 않습니다. $10^{-12}$
실행 결과
eval 1: E = -0.78732535 Ha (theta_a = -0.0982, theta_b = 0.0491)
eval 10: E = -0.92120733 Ha (theta_a = 0.6381, theta_b = -0.4909)
eval 14: E = -0.93425496 Ha (theta_a = 0.7363, theta_b = -0.6381)
...
58번째 평가에서 스핀 대칭성이 파괴된 해입니다. 난수 시드에 따라,
또한, 같은 프로그램에 평형 핵간 거리 0.74 Å에서의 적분값을 넣으면, 대칭성은 파괴되지 않습니다.
무작위 탐색 및 등반법과 비교
난수 시드를 변경하여 예제 2의 프로그램을 20회 실행하고, 평가 횟수별 최적값을 다음 두 가지 방법과 비교했습니다:
- 무작위 탐색: $rac{ ext{random}( heta_eta)}{ ext{from}-rac{ ext{to}}{ ext{pi}/2}}$ 범위에서 균일 난수를 선택하여 $rac{ ext{pi}}{2}$를 고르고 평가하는 것을 반복합니다. $( heta_eta, heta_eta)$ -
- 등반법: 무작위 점에서 시작하여 현재 간격폭으로 주변 8점을 평가하고 가장 좋은 점으로 이동합니다. 주변에 좋은 점이 없으면 간격폭을 절반으로 줄입니다. 초기 간격폭은 $rac{ ext{from}}{ ext{to}}$부터 $rac{ ext{pi}}{2}$ 사이에서 성능이 가장 좋았던 $rac{ ext{pi}}{32}$입니다.
표의 값은 최소값
| 방법 | 20회 | 40회 | 60회 |
|---|
| FMQA | 0.42 mHa / 0% | 0.0020 mHa / 95% | 0.0005 mHa / 100% |
| ... | | | |
| FMQA는 평가한 모든 점에서 에너지의 형태를 학습하므로, 주변 점을 하나씩 조사하는 등반법보다 적은 평가 횟수로 최소점에 가까워집니다. 등반법은 한 걸음마다 주변 8점을 평가하기 때문에, 간격폭을 세밀하게 하는 단계에서 많은 평가 횟수를 사용합니다. | | | |
QUBO++의 역할
솔직히 말하자면, 이 기사의 예는 변수가 1~2개이므로 대체 모델의 최소화 자체는 간단합니다. 65가지 경우나
분자가 커져서 각도의 수
요약
- 양자 화학 계산의 에너지를 평가 비용이 많이 드는 블랙박스 함수로 간주하고, FMQA 절차(학습 $
ightarrow$ 대체 모델의 최소점을 구함 $
ightarrow$ 평가)를 통해 최소점을 찾았습니다.
- 분자 궤도의 각도는 65단계의
네이티브 정수 변수, 대체 모델은 정수 변수의 4차 다항식입니다. import pyqbpp.d
실수 계수로 만들면, 적용된 계수로 다항식을 단순히 옮겨 적는 것만으로 QUBO++ 식이 된다. 비트로 표현하면 98개 항과 1470개 항의 다항식이 각각 4개 항과 14개 항으로 줄어든다 - 예시 1(HeH⁺): 무작위 4 지점 후 2회 평가 만에 65가지 중 최적점을 찾았다. 20회 모두 최적점에 도달했으며, 평가 횟수는 6~10회였다.
- 예시 2(2.0 Å의 H₂): 대칭성에 대해 아무것도 알려주지 않았음에도 제한 Hartree-Fock 법의 해보다 153.4 mHa 낮은 스핀 대칭성이 파괴된 해에 도달했다. 평가 60회 시점에서 20회 모두 최소값과의 차이가 0.01 mHa 이내였다(평균 0.0005 mHa). 등반법은 평균 0.47 mHa, 무작위 탐색은 10.1 mHa를 기록했다 - 이 예시의 변수는 1~2개로 솔버에게는 간단하다. 각도의 수가 늘어날수록, 서로게이트 모델(surrogate model)의 최소화가 QUBO++의 역할이 된다.
참고 문헌
[1] K. Kitai, J. Guo, S. Ju, S. Tanaka, K. Tsuda, J. Shiomi, and R. Tamura, "Designing metamaterials with quantum annealing and factorization machines," Physical Review Research, vol. 2, 013319, 2020.
[2] S. Rendle, "Factorization Machines," Proc. IEEE International Conference on Data Mining (ICDM), pp. 995–1000, 2010.
[3] A. Peruzzo, J. McClean, P. Shadbolt, M.-H. Yung, X.-Q. Zhou, P. J. Love, A. Aspuru-Guzik, and J. L. O'Brien, "A variational eigenvalue solver on a photonic quantum processor," Nature Communications, vol. 5, 4213, 2014.
[4] A. Szabo and N. S. Ostlund, Modern Quantum Chemistry: Introduction to Advanced Electronic Structure Theory, Dover, 1996.
[5] C. A. Coulson and I. Fischer, "Notes on the molecular orbital treatment of the hydrogen molecule," Philosophical Magazine, vol. 40, pp. 386–393, 1949.
링크
토론 (Discussion)