Skip to main content
IBM Quantum Platform

오류 완화 및 억제 기술

새로운 실행 모델, 현재 베타 릴리스 중

이제 새로운 실행 모델의 베타 버전을 사용할 수 있습니다. 직접 실행 모델은 오류 완화 워크플로우를 사용자 지정할 때 더 많은 유연성을 제공합니다. 자세한 내용은 지시 실행 모델 가이드를 참조하세요.

  • 이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다. 다음 버전 이상을 사용하는 것이 좋습니다.

    qiskit-ibm-runtime~=0.47.0
    

오류 완화 및 오류 억제 기법은 더 큰 워크로드로 확장할 때 결과의 품질을 향상시키기 위해 사용됩니다. 이 페이지에서는 IBM Quantum Compute에서 사용할 수 있는 오류 억제 및 오류 완화 기법에 대해 개괄적으로 설명합니다.

다음 셀은 추정기 프리미티브를 가져와서 이후 코드 셀에서 추정기를 초기화하는 데 사용할 백엔드를 만듭니다.

from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.least_busy()

동적 분리

양자 회로는 IBM® 하드웨어에서 정확한 시간 간격으로 예약하고 실행해야 하는 마이크로파 펄스 시퀀스로 실행됩니다. 안타깝게도 큐비트 간의 원치 않는 상호 작용으로 인해 유휴 큐비트에서 일관된 오류가 발생할 수 있습니다. 동적 디커플링은 유휴 큐비트에 펄스 시퀀스를 삽입하여 이러한 오류의 영향을 대략적으로 상쇄하는 방식으로 작동합니다. 삽입된 각 펄스 시퀀스는 동일성 연산에 해당하지만, 펄스의 물리적 존재는 오류를 억제하는 효과가 있습니다. 펄스 시퀀스에는 여러 가지 선택지가 있으며, 각 경우에 어떤 시퀀스가 더 적합한지는 여전히 활발한 연구 분야입니다.

동적 디커플링은 주로 일부 큐비트가 아무런 연산 없이 유휴 상태로 있는 갭이 있는 회로에 유용하다는 점에 유의하세요. 회로의 연산이 매우 밀집되어 모든 큐비트가 대부분의 시간 동안 사용 중이라면 동적 디커플링 펄스를 추가해도 성능이 향상되지 않을 수 있습니다. 실제로 펄스 자체의 불완전성으로 인해 성능이 저하될 수도 있습니다.

아래 다이어그램은 XX 펄스 시퀀스를 사용한 동적 디커플링을 보여줍니다. 왼쪽의 추상 회로는 오른쪽 상단의 마이크로파 펄스 스케줄에 매핑되어 있습니다. 오른쪽 아래는 동일한 스케줄이지만 첫 번째 큐비트의 유휴 기간 동안 두 개의 X 펄스가 삽입된 시퀀스를 보여줍니다.

동적 디커플링 묘사

동적 디커플링은 동적 디커플링 옵션에서 enableTrue 으로 설정하여 활성화할 수 있습니다. sequence_type 옵션을 사용하여 여러 가지 펄스 시퀀스 중에서 선택할 수 있습니다. 기본 시퀀스 유형은 "XX" 입니다.

다음 코드 셀은 Estimator에 대한 동적 디커플링을 활성화하고 동적 디커플링 시퀀스를 선택하는 방법을 보여줍니다.

estimator = Estimator(mode=backend)
estimator.options.dynamical_decoupling.enable = True
estimator.options.dynamical_decoupling.sequence_type = "XpXm"

파울리 회전

무작위 컴파일이라고도 하는 트월링은 임의의 노이즈 채널을 보다 구체적인 구조를 가진 노이즈 채널로 변환하는 데 널리 사용되는 기법입니다.

폴리 돌리기는 폴리 연산을 사용하는 특별한 종류의 돌리기입니다. 이는 모든 양자 채널을 폴리 채널로 변환하는 효과가 있습니다. 코히어런트 노이즈는 연산 횟수에 따라 이차적으로 누적되는 경향이 있는 반면, 폴리 노이즈는 선형적으로 누적되기 때문에 단독으로 수행하면 코히어런트 노이즈를 완화할 수 있습니다. 폴리 트월링은 임의의 노이즈보다 폴리 노이즈에 더 효과적인 다른 오류 완화 기법과 결합되는 경우가 많습니다.

폴리 트월링은 게이트의 이상적인 효과가 동일하게 유지되도록 선택한 게이트 세트와 무작위로 선택한 단일 큐비트 폴리 게이트를 샌드위치하는 방식으로 구현됩니다. 그 결과 단일 회로가 무작위로 구성된 회로 앙상블로 대체되며, 모두 동일한 이상적인 효과를 얻을 수 있습니다. 회로를 샘플링할 때는 단일 인스턴스가 아닌 여러 개의 무작위 인스턴스에서 샘플을 추출합니다.

회전하는 파울리의 모습

현재 양자 하드웨어의 오류는 대부분 2큐비트 게이트에서 발생하기 때문에 이 기술은 (네이티브) 2큐비트 게이트에만 적용되는 경우가 많습니다. 다음 다이어그램은 CNOT 및 ECR 게이트에 대한 몇 가지 폴리 회전을 보여줍니다. 행 내의 모든 회로는 동일한 이상적인 효과를 갖습니다.

게이트 회전 묘사

폴리 트월링은 트월링 옵션에서 enable_gatesTrue 으로 설정하여 활성화할 수 있습니다. 다른 주목할 만한 옵션은 다음과 같습니다:

  • num_randomizations: 꼬인 회로의 앙상블에서 가져올 회로 인스턴스 수입니다.
  • shots_per_randomization: 각 회로 인스턴스에서 샘플링할 샷 수입니다.

다음 코드 셀은 파울리 트위링(Pauli twirling)을 활성화하고 Estimator에 대한 이러한 옵션을 설정하는 방법을 보여줍니다. 이 옵션들은 명시적으로 설정할 필요가 없습니다.

estimator = Estimator(mode=backend)
estimator.options.twirling.enable_gates = True
estimator.options.twirling.num_randomizations = 32
estimator.options.twirling.shots_per_randomization = 100

TREX( eXtinction ) 오류

TREX( eXtinction )는 파울리 관측량의 기대값을 추정할 때 측정 오차의 영향을 완화합니다. 이는 ‘트윌드 측정(twirled measurements)’이라는 개념에 기반을 두고 있으며, 이는 측정 게이트를 (1) 파울리 X 게이트, (2) 측정, (3) 고전적 비트 반전으로 구성된 순서로 무작위로 대체함으로써 구현됩니다. 일반적인 게이트 회전과 마찬가지로, 이 순서는 다음 그림에서 보여지듯이 잡음이 없는 경우의 단순 측정에 해당합니다:

회전하며 측정하는 모습

판독 오류가 발생할 경우, 측정 회전(measurement twirling)은 판독 오류 전달 행렬을 대각화하여 역행렬을 구하기 쉽게 만드는 효과를 가져온다. 대각선 노이즈 채널의 재스케일링 항은 제로 상태로 초기화된 무작위 회로를 벤치마킹하여 학습됩니다. 이를 통해 서비스는 판독 잡음으로 인해 발생하는 기대값에서 편향을 제거할 수 있습니다. 판독 오차 전달 행렬을 추정하려면 추가적인 보정 회로를 실행해야 하며, 이로 인해 약간의 오버헤드가 발생한다.

다음 measure_mitigation 옵션을 사용하여 TREX를 활성화하십시오

IBM Quantum 의 ‘Estimator’에 대한 ‘Compute resilience’ 옵션에서 Truemeasure_mitigation 로 설정하면 TREX를 활성화할 수 있습니다. 여기에서는 측정 잡음 학습에 대한 옵션에 대해 설명합니다. 게이트 회전과 마찬가지로, 회로 무작위화 횟수와 무작위화당 시도 횟수를 설정할 수 있습니다.

다음 코드 셀은 TREX를 활성화하고 Estimator에 대한 옵션을 설정하는 방법을 보여줍니다. 이 옵션들은 모두 명시적으로 설정할 필요가 없습니다.

estimator = Estimator(mode=backend)
estimator.options.resilience.measure_mitigation = True
estimator.options.resilience.measure_noise_learning.num_randomizations = 32
estimator.options.resilience.measure_noise_learning.shots_per_randomization = 100

다음 resilience_level 옵션을 사용하여 TREX를 활성화하십시오

다음 예시와 같이 복원력 수준을 로 설정하여 TREX를 1활성화할 수 있습니다.

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator

service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

# Setting options during primitive initialization
estimator = Estimator(backend, options={"resilience_level": 1})

제로 노이즈 외삽법(ZNE)

영 노이즈 외삽법(ZNE)은 관측값의 기대값 추정 오류를 완화하는 기법입니다. 결과를 개선하는 경우가 많지만 편향되지 않은 결과를 보장하지는 않습니다.

ZNE는 두 단계로 구성됩니다:

  1. 노이즈 증폭 : 원래의 양자 회로는 서로 다른 노이즈 속도로 여러 번 실행됩니다.
  2. 외삽법 : 노이즈가 있는 기대값 결과를 무노이즈 한계까지 외삽하여 이상적인 결과를 추정합니다.

잡음 증폭 단계와 외삽 단계 모두 다양한 방식으로 구현될 수 있다. IBM Quantum Compute는 “디지털 게이트 폴딩”을 통해 노이즈 증폭을 구현하는데, 이는 두 큐비트 게이트를 해당 게이트와 그 역게이트로 구성된 동등한 시퀀스로 대체하는 것을 의미합니다. 예를 들어, 단일 UUUUUU U^\dagger U 로 대체하면 잡음 증폭 계수가 3이 됩니다. 외삽을 수행할 때는 선형 적합이나 지수 적합을 포함하여 여러 함수 형태 중 하나를 선택할 수 있습니다. 아래 그림은 왼쪽에 디지털 게이트 폴딩을, 오른쪽에 외삽 절차를 보여줍니다.

ZNE의 묘사

이 방법의 오버헤드는 노이즈 요인의 수에 비례하여 증가합니다. 기본 설정에서는 세 가지 노이즈 계수에서 기대값을 샘플링하므로, 대략 3x 의 오버헤드가 발생합니다.

다음 zne_mitigation 옵션을 사용하여 ZNE를 활성화합니다

IBM Quantum 의 ‘Estimator’에 대한 ‘Compute resilience’ 옵션에서 Truezne_mitigation 로 설정하면 ZNE를 활성화할 수 있습니다. ZNE에 대한 옵션은 여기에서 설명되어 있습니다. 다음과 같은 옵션들이 주목할 만합니다:

  • noise_factors: 노이즈 증폭에 사용할 노이즈 계수입니다.
  • extrapolator: 외삽에 사용할 함수 형식입니다.

다음 코드 셀은 ZNE를 활성화하고 Estimator에 대한 이러한 옵션을 설정하는 방법을 보여줍니다. 이 옵션들은 모두 명시적으로 설정할 필요가 없습니다.

estimator = Estimator(mode=backend)
estimator.options.resilience.zne_mitigation = True
estimator.options.resilience.zne.noise_factors = (1, 3, 5)
estimator.options.resilience.zne.extrapolator = "exponential"

다음 resilience_level 옵션을 사용하여 ZNE를 활성화합니다

다음 예시와 같이 복원력 수준을 로 설정하면 ZNE(TREX 및 게이트 2트위링과 함께)를 활성화할 수 있습니다.

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator

service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

# Setting options during primitive initialization
estimator = Estimator(backend, options={"resilience_level": 2})

확률적 오류 증폭(PEA)

ZNE의 주요 과제 중 하나는 대상 회로에 영향을 미치는 노이즈를 정확하게 증폭하는 것입니다. 게이트 폴딩은 이 증폭을 수행하는 쉬운 방법을 제공하지만 잠재적으로 부정확할 수 있으며 잘못된 결과를 초래할 수 있습니다. 자세한 내용은 "잡음이 많은 양자 회로를 위한 확장 가능한 오류 완화로 경쟁력 있는 기대값 생성" 문서, 특히 보충 정보 4페이지를 참조하세요. 확률론적 오류 증폭은 노이즈 학습을 통해 오류 증폭에 대한 보다 정확한 접근 방식을 제공합니다.

PEA는 예비 실험을 수행하여 노이즈를 재구성한 다음 이 정보를 사용하여 정확한 증폭을 수행하는 보다 정교한 기술입니다. 회로를 실행하기 전에 회로에서 얽힌 게이트의 각 레이어에 대한 꼬인 노이즈 모델을 학습하는 것으로 시작합니다( LayerNoiseLearningOptions 참조). 학습 단계가 끝나면 회로는 각 노이즈 인자에서 실행되며, 회로의 모든 얽힘 층은 해당 학습된 노이즈 모델에 비례하는 단일 큐비트 노이즈를 확률적으로 주입하여 증폭됩니다. 자세한 내용은 "내결함성 이전의 양자 컴퓨팅의 유용성에 대한 증거" 문서를 참조하세요.

PEA는 세 단계로 구성됩니다:

  1. 학습 : 회로에서 얽힌 게이트의 각 레이어에 대한 꼬인 노이즈 모델을 학습합니다.
  2. 노이즈 증폭 : 원래의 양자 회로는 다양한 노이즈 계수에서 여러 번 실행됩니다.
  3. 외삽법 : 노이즈가 있는 기대값 결과를 무노이즈 한계까지 외삽하여 이상적인 결과를 추정합니다.

유틸리티 규모의 실험에는 PEA가 최선의 선택인 경우가 많습니다.

PEA는 ZNE 노이즈 증폭 기술이기 때문에 resilience.zne_mitigation = True 을 설정하여 ZNE도 활성화해야 합니다. 기타 resilience.zne 옵션을 추가로 사용하여 외삽기, 증폭 수준 등을 설정할 수 있습니다. PEA에는 프리미티브를 사용할 때 자동으로 생성되는 노이즈 모델이 필요합니다.

다음 코드조각은 추정기 작업의 결과를 완화하기 위해 PEA를 사용하는 예제입니다:

estimator = Estimator(mode=backend)
estimator.options.resilience.zne_mitigation = True
estimator.options.resilience.zne.amplifier = "pea"

확률적 오류 제거(PEC)

확률적 오류 제거(PEC)는 관측값의 기대값 추정 시 오류를 완화하는 기법입니다. ZNE와 달리 편향되지 않은 기대값 추정치를 반환합니다. 그러나 일반적으로 더 많은 오버헤드가 발생합니다.

PEC에서 이상적인 목표 회로의 효과는 실제로 구현 가능한 잡음 회로의 선형 조합으로 표현됩니다:

Oideal=iηiOnoisy,i\mathcal{O}_{\text{ideal}} = \sum_{i} \eta_i \mathcal{O}_{noisy, i}

그런 다음 선형 조합으로 정의된 임의의 앙상블에서 다양한 잡음 회로 인스턴스를 실행하여 이상적인 회로의 출력을 재현할 수 있습니다. 계수 ηi\eta_i 가 확률 분포를 형성하는 경우 앙상블의 확률로 직접 사용할 수 있습니다. 실제로는 일부 계수가 음수이므로 준확률 분포를 형성하는 대신 준확률 분포를 형성합니다. 여전히 랜덤 앙상블을 정의하는 데 사용할 수 있지만, 준확률 분포의 음수와 관련된 샘플링 오버헤드가 있으며, 이는 다음과 같은 양으로 특징지어집니다

γ=iηi1.\gamma = \sum_{i} \lvert \eta_i \rvert \geq 1.

샘플링 오버헤드는 이상적인 회로에서 필요한 샷 수와 비교하여 주어진 정밀도로 기대값을 추정하는 데 필요한 샷 수에 곱셈을 곱한 값입니다. γ\gamma 으로 2진법으로 확장되며, 이는 다시 회로의 깊이에 따라 기하급수적으로 확장됩니다.

IBM Quantum 의 ‘Estimator’에 대한 ‘Compute resilience’ 옵션에서 Truepec_mitigation 로 설정하면 PEC를 활성화할 수 있습니다. PEC에 대한 옵션은 여기에서 설명되어 있습니다. 이 옵션을 max_overhead 사용하여 샘플링 오버헤드의 상한을 설정할 수 있습니다. 샘플링 오버헤드를 제한하면 결과의 정밀도가 요청된 정밀도를 초과할 수 있다는 점에 유의하십시오. 의 기본값은 100입니다 max_overhead .

다음 코드 셀은 PEC를 활성화하고 Estimator의 옵션을 max_overhead 설정하는 방법을 보여줍니다.

estimator = Estimator(mode=backend)
estimator.options.resilience.pec_mitigation = True
estimator.options.resilience.pec.max_overhead = 100

다음 단계

이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.