Deutsch의 알고리즘에서 양자 오라클을 어떻게 구현합니까?


13

나는 Deutsch의 알고리즘 (Deutsch-Josza 알고리즘의 기본 사례)을 시뮬레이션하려고 노력하고 있으며, 알고리즘의 목적을 훼손하지 않고 "보임"없이 알고리즘이 작동하는 데 필요한 양자 오라클을 구현하는 방법을 완전히 확신하지 못합니다. 함수를 평가하여 입력 된 함수가 무엇인지


도움이 될 수 있습니다 : quantumcomputing.stackexchange.com/a/2262/2645
meowzz

테스트를 실행할 때마다 무작위로 선택하지 않겠습니까? 그렇게 당신은 알 수 없습니다.
DaftWullie

@DaftWullie 각 시뮬레이션에서 무작위로 함수를 선택하는 것을 언급하고 있습니까? 여전히 문제는 양자 오라클을 통해 필요한 기능을 생성하기 위해 입력 된 기능의 출력이 무엇인지 알아야한다는 것입니다.
Jack Ceroni

예, 컴퓨터는 알아야하지만 양자 상태를 입력으로 사용하고 양자 상태를 출력으로 제공하는 단일 기능으로 컴퓨터를 지역화 할 수 있습니다. 그 기능 만이 그것을 알 것입니다 (그리고 무언가 를 알아야합니다). 또한 무작위 선택이 해당 기능에 국한되어 호출 될 때마다 다르면 한 번만 호출 해야 한다는 사실에 잘 맞습니다 .
DaftWullie

@DaftWullie 임의 함수의 속성을 계산할 때 즉시 임의 출력을 생성하지 않는 이유는 무엇입니까?
Norbert Schuch

답변:


9

여기에 두 가지 질문이 있습니다. 첫 번째는 실제로 코드에서 이것을 구현하는 방법을 묻고 두 번째는 어떤 오라클을 전달하는지 알고 있는지 여부를 묻습니다.

이행

아마도 가장 좋은 방법은 IsBlackBoxConstant오라클을 입력으로 사용하고 Deutsch Oracle 프로그램을 실행하여 상수인지 확인 하는 함수를 만드는 것입니다. 원하는 경우 오라클을 임의로 선택할 수 있습니다. 다음은 Q #으로 구현 된 것입니다.

operation IsBlackBoxConstant(blackBox: ((Qubit, Qubit) => ())) : (Bool)
{
    body
    {
        mutable inputResult = Zero;
        mutable outputResult = Zero;

        // Allocate two qbits
        using (qbits = Qubit[2])
        {
            // Label qbits as inputs and outputs
            let input = qbits[0];
            let output = qbits[1];

            // Pre-processing
            X(input);
            X(output);
            H(input);
            H(output);

            // Send qbits into black box
            blackBox(input, output);

            // Post-processing
            H(input);
            H(output);

            // Measure both qbits
            set inputResult = M(input);
            set outputResult = M(output);

            // Clear qbits before release
            ResetAll(qbits);
        }

        // If input qbit is 1, then black box is constant; if 0, is variable
        return One == inputResult;
    }
}

점은 무엇인가?

쿼리 복잡성

계산 복잡도는 입력 크기의 함수로 소비하는 자원의 양에 따라 알고리즘을 분류하는 분야입니다. 이러한 리소스에는 시간 (단계 / 지침으로 측정), 메모리 및 쿼리 복잡성 이라는 것이 포함 됩니다. 쿼리 복잡성은 알고리즘이 블랙 박스 오라클 함수를 쿼리해야하는 횟수와 관련이 있습니다.

양자 알고리즘은 블랙 박스를 한 번만 쿼리하면되지만 고전적인 알고리즘은이를 두 번 쿼리해야하기 때문에 Deutsch 오라클 문제는 복잡도 이론가들에게 흥미 롭습니다. 비트 오라클이 상수 또는 균형 잡힌 함수를 포함하는 일반화 된 Deutsch-Josza 문제로 양자 알고리즘은 다시 한 번만 쿼리하면되지만 (결정 론적) 클래식 알고리즘에는 쿼리가 필요합니다.n2n1

oracle 입력을 무작위로 샘플링하여 미만의 쿼리 에서 Deutsch-Josza 문제를 해결하는 확률 적 고전 알고리즘이 존재 합니다. oracle이 입력에 상관없이 동일한 값을 계속 출력하는 경우 오라클이 일정 할 확률은 매우 빠르게 증가합니다. 이것은 Deutsch-Josza가 양자 우월 / 장점 문제의 좋은 후보가 아니라는 것을 의미합니다.2n1

실제 응용

복잡한 이론가가 아니라면, 쿼리 복잡성에 대해 크게 신경 쓰지 않고 블랙 박스 내부를 살펴볼 수있는 "규칙이없는"세계에서 Deutsch 오라클 문제가 왜 중요한지 알고 싶어 할 것입니다. 오라클 이외의 문제로 오라클 문제를 분석하려고 시도하는 것은 어려운 일이며, 오라클 회로를 분석 할 수있는 사람이라면 Deutsch 오라클 문제에 대한 최고의 고전 알고리즘 문제를 해결했다고 생각하지 않습니다. 당신은 생각할 수도 있습니다-무엇을 분석해야합니까? 가능한 회로는 4 개뿐입니다! 실제로는 훨씬 더 복잡합니다.

1 비트 Deutsch Oracle 의 가장 간단한 표현을 보면 게이트 구조는 다음과 같습니다.

신원 :C1,0

부정 :X0C1,0

상수 -0 :I4

상수 -1 :X0

그러나 이것이 오라클을 구현하는 유일한 방법은 아닙니다. 이 모든 것은 수백, 수천, 심지어 수백만 개의 논리 게이트를 사용하여 다시 작성할 수 있습니다! 중요한 것은 이러한 논리 게이트의 누적 효과는 위의 간단한 구성과 같습니다. Constant-1의 다음 대체 구현을 고려하십시오.

H0Z0H0

모든 입력에 대해 다음을 제공 할 수 있습니다.

H0Z0H0|ψ=X0|ψ

이것은 행렬 곱셈의 연관성 때문입니다. 의 실제 행렬을 하고 곱하면 .H0Z0H0X0

H0Z0H0=[12121212][1001][12121212]=[0110]=X0

그래서 우리는 :

(H0(Z0(H0|ψ)))=(((H0Z0)H0)|ψ)=X0|ψ

따라서 (또는 훨씬 더 복잡한) 회로 를 대신 양자 도이치 오라클 알고리즘으로 전달할 수 있으며 알고리즘은 여전히 ​​작동합니다! 내부의 복잡도에 관계없이 오라클이 일정하거나 가변적인지 여부를 알려줍니다. 따라서 블랙 박스 안에서 "속임수"로 보이는 알고리즘은 생각만큼 간단한 시간이 없습니다. 인터넷의 낯선 사람인 I의 경우 일정하거나 가변적 인 것을 보장하는 매우 복잡한 회로를 제공하고 그것이 무엇인지 묻습니다. 그냥 보는 것만으로는 쉽게 해결할 수 없습니다!H0Z0H0X0

역사적 및 교육 학적 이유로 중요

주로 도이치 오라클 문제는 역사적이고 교육적인 이유로 중요합니다. 가장 단순하기 때문에 학생들에게 첫 번째로 가르치는 알고리즘이며 너무 많은 질문을하지 않는 한 양자 속도 향상을 보여주는 것으로 보입니다. 또한 Simon의 Periodicity Problem과 Shor 's Algorithm을 배우기위한 좋은 출발점 역할을합니다.


나는 Gotteman-Knill 일까지 당신과 함께했습니다. 왜 복잡한 회로를 (i) 1 큐 비트 게이트 및 (ii) 스태빌라이저 게이트로 제한합니까?
Norbert Schuch

내가 알기로, 임의의 양자 회로가 몇 가지 간단한 고전 회로 중 하나를 구현하는지 여부를 결정하는 효율적인 알고리즘이 있습니다. 양자 우위를 위해 연구되는 랜덤 회로는보다 복잡한 행동을 요구합니다.
ahelwer

나는 이것이 사실이라고 생각하지 않습니다. 내가 실수하지 않으면 두 회로가 같은 일을하는지 묻는 것이 QMA 완료입니다. Gottesman-Knill을 통한 시뮬레이션을 허용하는 것은 Clifford 게이트에 대한 제한 사항입니다.
Norbert Schuch

맞습니다. 회로 축소에 대해 더 연구 한 다음 Gottesman-Knill의 역할을 명확히하기 위해 게시물을 업데이트하겠습니다.
ahelwer

Robin Kothari 에게 이메일로 몇 가지 질문을 한 후 답변을 업데이트했습니다 .
ahelwer

3

도이치 알고리즘의 요점을 잃지 않는 방식으로 오라클을 구축 할 수있는 방법이 없습니다. 이것이 오라클 기반 알고리즘입니다.

유일한 방법은 하나의 입력 비트 취하고 하나의 출력 비트 제공 하는 엄청나게 계산하기 어려운 함수 (이것은 엄청나게 긴 회로)를 생각해내는 경우입니다 (그러나 도중에 원하는대로 많은 ancillas), 어떤 이유로 만 관심이있는 곳 . 그런 다음 Deutsch의 알고리즘을 사용하여 절반의 시간을 절약 할 수 있습니다 (이 회로를 한 번만 실행하면되므로).xf(x)f(0)=f(1)

자, 이것은 꽤 고안된 것처럼 들립니다. 한편, 동등하게이 기능 할 수 있음을 고안 소리 경우 과 정수, 당신은 몇 가지 찾고자하는 등을하는 자체 를 배울 필요가없는 -그러나 이것은 정확히 인수 분해에 필요한 것임이 밝혀졌습니다.f(x)1xNf(x)yf(x+y)=f(x)f(x)

요점은 오라클 기반 알고리즘 이 해당 구조에 문제가있는 경우 (즉, 함수의 특정 속성 만 배우고 싶은 경우) 속도를 높일 수 있음을 입증 하지만, 그렇지 않은 경우 알려주지 않습니다 그러한 문제가 존재합니다.

Deutsch를 구현하고자한다면, 오라클을 수행하는 모든 방법이 좋습니다. "원칙 증명"알고리즘이며 실제 문제에 대한 실제 속도 향상을 제공하지는 않습니다 (적어도 우리는 아는 바 없음).



2

Deutsch의 알고리즘에 대한 예는 없지만 여기여기 에 Deutsch-Jozsa 알고리즘과 Q #에서 사용하는 오라클을 구현하는 두 가지 자습서가 있습니다.

이 두 알고리즘에 대한 아이디어는 동일합니다. 다른 곳에 구현 된 작업으로 오라클에 알고리즘을 제공해야합니다. 이런 식으로 알고리즘은 어떤 오라클이 제공되는지 알지 못하며 오라클을 호출하는 것 이외의 다른 오라클을 "볼"방법이 없습니다. 이 튜토리얼에는 또한 오라클이 호출 된 횟수를 세는 하네스가 있으므로 솔루션에서 두 번 이상 호출하면 테스트에 실패합니다.

물론 이것은 여전히 ​​오라클 알고리즘이 자주 겪는 문제가 있습니다. 인간 은 테스트의 구현과 통과 한 오라클의 모습을보고 어떤 오라클이 구현되는지 파악하여 답을 알아낼 수 있습니다. DaftWullie가 제안한대로 오라클 선택을 무작위 화하여이 문제를 해결할 수 있습니다.


1

나는 그 ahelwer대답 이 알고리즘의 복잡성에 대해 우리가 생각하는 몇 가지 방식에 영향을 미친다고 생각합니다. 그러나 쿼리하려는 실제 세계에 문자 그대로 "오라클"이 없기 때문에 쿼리 복잡성이나 오라클의 아이디어에 대해 왜 걱정하는지 궁금 할 것입니다. 나는 이것에 대해 약간의 관점을 제시하려고 노력할 것이며, 특히 당신이 속임수처럼 느끼지 않는 방식으로 "Deutsch-Josza oracle"을 구성하는 방법을 어떻게 생각할 수 있는지 설명하려고 노력할 것입니다.

( Norbert SchuchDeutsch-Josza의 기본 사례 인 Deutsch 문제에 대해서는 통찰의 범위가 많지 않지만 oracles에 대한 귀하의 질문이 더 일반적으로 적용될 것으로 기대합니다. 이것이 제가 여기서 말할 것입니다.)

오라클에 대한 직감

오라클의 개념은 우리가 계산 문제에 대해 말하는 방식을 단순화 할 수있는 방법입니다.

오라클 개념의 원래 적용은 원칙적으로도 어떻게 할 수 있는지에 의지하지 않고 어려운 문제, 심지어 불가능한 문제를 해결할 수 있다면 가설 적으로 할 수있는 일 을 고려하는 것이 었 습니다. 하지만, 계산 복잡도 이러한 일 - 특히 양자 계산에서  독일어-Josza, 슈타인 Vazirani 및 기타 오라클 문제의 경우는 - 상황이 다른 경우 : 오라클에 기초하는 함수에 대해 설명 문제. 그것이 오라클이라는 사실은 우리가 문제의 중심에있는 함수를 기술하는 방법을 구조화하는 방법입니다. 함수가 어떻게 계산되는지를 생각해서는 안되지만,이 정보는 단순히 부분적으로 제공되지 않습니다. 우리는 그 기능과 관련된 시간이나 다른 복잡성에 관심이 없습니다.

이 방법을 사용하면 실제로 계산하기 어려운 질문과 관련된 답변을 얻을 수 있습니다. 예를 들어, 당신은 우리 중 하나를 증명하는 방법을 알고하지 않는 것을 알 수 있습니다 P  ≠  NP 또는 P  =  NP를 하지만, 우리는 할 수 있습니다 신탁이 있다는 것을 보여 우리가 보여줄 수 있도록 P  ≠  NP 에게 . 오라클 A 가 여기서 하는 일은 컴퓨터 (보다 정확하게는 결정 론적 튜링 머신 또는 비결정론 적 튜링 머신)가 문제를 해결하는 데 도움이되는 것이 아니라 컴퓨터가 해결해야하는 문제를 나타냅니다. 우리는 어떤 경우에 표시 할 수 있다는 사실이 P ≠  NP APNP와 실제로 다르다는 것을 의미하지는 않습니다 . 단지 비결정론을 사용하는 것이 실제로 계산 모델에 중요한 자원임을 의미합니다. 일부 문제를 효율적으로 해결할 수 있으며 방법이 없습니다. 결정 론적 컴퓨터에서 비결정론을 효율적으로 시뮬레이션합니다. 당신은 무엇에 관한 문제를 해결하기 위해 싶다면 로 계산을, 당신은 절대적으로 어떤 기능을 할 수 효율적으로 컴퓨팅의 구조에 대한 몇 가지 정보를 요구 .

이것은 오라클의 주요 주제 중 하나입니다 . 문제에 대한 제한된 정보가 제공 될 때 계산 모델이 문제를 해결할 수 있거나 해결할 수없는 방법에 대해 이야기 할 수 있습니다 .

오라클 알고리즘을 사용하여 비 오라클 문제 해결

Deutsch–Josza 알고리즘 또는 Bernstein–Vazirani 알고리즘은 원칙적으로 자체적으로 수행하는 알고리즘이 아닙니다. ( 실제로 는 그렇지 않습니다 . 다음 섹션을 참조하십시오.) 문제를 해결할 수있는 방법을 나타 냅니다. 그들은 어떤 문제를 해결합니까? 상수 / 균형 또는 벡터의 스칼라 값 선형 함수에 어떤 벡터가 관련되어 있는지에 관계없이 원하는 함수의 특정 기능을 발견 할 수 있습니다.

어떤 기능을 수행합니까? — 답변에 관심있는 기능에 대해 수행합니다.

오라클 기반 알고리즘에 대한 설명은 요점을 벗어납니다. 오라클 문제는 기본적으로 이상적인 양자 컴퓨터를 사용하면 실제로 함수를 실제로 효과적으로 평가할 수 있다면 함수에 대해 거의 알지 못하더라도 문제를 해결할 수 있음을 알 수 있습니다. 실제로 그러한 기능을 평가하려면 그렇게하는 방법에 대한 설명이 필요하므로 오라클 설정보다 더 많은 정보가 필요 합니다. 그러나 이것이 동일한 알고리즘을 사용하는 것을 방해하지는 않습니다.

오라클 환경보다 더 많은 정보 가있을 때 발생 하는 문제 는 갑자기 문제를 해결할 수있는 다른 방법이 있다는 것입니다. 특히, 고전적으로 문제를 효율적으로 해결하는 것이 가능해질 수 있습니다 . (이것은와 동일 관측이다 P  ≠  NP A는 : 그것은에 문제가 있음을 증명 NP 어떤 효율적인 결정 알고리즘은 최소 요구, 실제 구조 정보를 해결 할 수 - 그래서 그 당신이 설명을 제공 할 때 '오라클'보다는 효율적으로 계산 가능한 함수의 문제가 발생할 수 있습니다.P. ) 이것은 양자 알고리즘 당신이 제시 한 특정 문제를 해결하는데있어 고전 알고리즘에 비해 동일한 이점을 가지고 있지 않을 있음을 의미합니다. 실제로는 고전적인 접근 방식이 더 좋을 수도 있습니다 (특히 우리가 가진 장치에서).

결국, 무언가를 해결하는 양자 알고리즘이 있다고해서 반드시 무언가를 해결 하는 가장 좋은 방법 이라는 것을 의미하지는 않습니다 . 이것은 Deutsch–Josza 알고리즘에서도 마찬가지입니다. 오라클 환경에서도 임의성을 사용하는 것이 거의 비슷하며, 신뢰할 수있는 대용량 양자 컴퓨터가 아직없는 것이 훨씬 좋습니다! 하지만 다시 ...

오라클의 "구현"

Deutsch–Josza 알고리즘을 구현하는 목적은 " Hello, World! " 를 구현하는 것과 같습니다 . 해결되지 않은 긴급한 문제를 해결하는 것이 아니라 다른 작업을 수행하는 데 유용 할 것으로 예상되는 도구를 사용하는 것이 좋습니다.

코딩 연습, 당신은 절대적으로 완화하고 편안하게 느껴야한다 생각 신탁을 구현하고, 컴퓨터의 아이디어 평가 오라클을. 원칙적으로 이것은 당신이하고 싶은 일입니다. 클래식 컴퓨터가 실제로 중첩의 모든 분기를 평가하고 문제에 대한 답을 명시 적으로 찾아서 약간 더 우회적 인 방식으로 행동하는 양자 컴퓨터라고 가정하는 클래식 에뮬레이터를 사용하더라도 다른 도구에 유용 할 수있는 도구를 사용하는 방법을 연습하고 있으며 어느 날 클래식 컴퓨터에서 실행되지 않을 것입니다.

그렇다면 오라클을 어떻게 구현해야합니까?

(i) 당신이 단지 실천을하고 있다는 생각에 정말로 헌신한다면, 당신은 마법적인 일을하고 있다고 가장 할 필요가 없습니다. 결과가 일정하거나 균형 잡힌 지 여부에 상관없이 oracle 기능을 구현할 수있는 방법을 찾아보십시오. 당신은 알고리즘 구현을 연습하려고합니다. 누군가 누군가가 당신을 사기꾼이라고 비난하지 말고, 암을 치료하는 척하지만 실제로 레고와 놀고 있다고 걱정하지 마십시오. 당신은 결코 암을 치료하는 척하지, 당신은 하는 신중한 선택에 의해 레고와 함께 연주. 그것을 받아들이고 그냥하십시오.

(ii) 어떻게 든 속임수를 쓰지 않으려면 (에뮬레이터 나 최종 양자 컴퓨터) 오라클이 균형을 유지하는지 일정을 알 수 없도록 오라클을 구성하는 방법을 찾으십시오 . 이것 자체가 반드시 쉬운 것은 아닙니다. 숨겨진 매개 변수 에 대해 함수 를 설명 하여이 작업을 시도하는 것이 당연 하지만 상수 또는 균형을 유지 하는 함수 이 나타납니다. 어떤 (또는 대부분의) 값에 대한 평가 , 그리고 그것을 고전적으로 해결하는 방법이 분명하지 않은 곳은 사소하지 않습니다.f(x)=g(x,r)rg(x,r)xr

  • 예를 들어, 대해 을 허용 하고 보조 큐 비트에서 를 직접 평가하는 회로를 고려할 수 있습니다. . 이 경우, 우리는 가 일정하거나 균형 이라는 것을 알 수 있습니다. 그러나 우리가 이것을 알고있는 이유 는 인 경우에만 균형이 명확 하고 회로 구성에서 쉽게 알 수 있기 때문입니다.g(x,r)=xrx,r{0,1}ng(x,r)f(x)f(x)r0

  • 일정한 기능 또는 균형 잡힌 기능을 평가할 수있는 구조를 얻기 위해 위의 구성을 다소 정교하게하거나 난독화할 수 있으며,이 두 가지 중 어느 것이 발생하는지 명확하지 않거나 심지어 어려울 수도 있습니다. 지금, 어떻게 생각하십시오.

-이 실제로 수행하기가 매우 어려울 수 있음을 유념 당신이 그것을 할 수있는 방법을 볼 수 있다면, 매우 가치가있을 수있다 : Bravyi, Gossett 및 Koening가 슈타인 Vazirani 문제에 대해이 같은 짓을하고 그들을 허용 양자와 고전적 복잡성 사이 의 작지만 무조건적인 분리 를 보여주기 위해 지난 몇 년간 양자 복잡성에서 발생하는 가장 흥미로운 일 중 하나였습니다.

TL; DR

  • 오라클을 '평가'한다는 사실에 땀을 흘리지 마십시오.

  • 땀을 흘리면 기능에 대한 실제 설명만으로도 양자 컴퓨터 없이도 같은 문제를 쉽게 해결할 수 있습니다.

  • 만약 당신의 동기가 양자 프로그래밍으로 만 연습을한다면 걱정하지 않아도됩니다. 지구 온난화와 같은 더 가치있는 문제에 대해 걱정하지 마십시오. 그 동안 레고와 함께 즐거운 시간을 보내십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.