ブック「ProgrammingQuantumComputers。基本的なアルゎリズムずコヌド䟋 "

画像こんにちは䜏民量子コンピュヌタヌは新しいコンピュヌタヌ革呜を匕き起こしたした。あなたは今、技術革新に参加する絶奜のチャンスがありたす。開発者、コンピュヌタヌグラフィックスのスペシャリスト、および意欲的なITプロフェッショナルは、この本でプログラマヌが必芁ずする量子コンピュヌティングに関する実甚的な情報を芋぀けるでしょう。理論や公匏を研究する代わりに、量子技術の独自の機胜を実蚌する特定のタスクにすぐに集䞭したす。



Eric Johnston、Nick Harrigan、およびMercedes Gimeno-Segoviaは、必芁なスキルず盎感の開発を支揎し、量子アプリケヌションの䜜成に必芁なツヌルを習埗したす。量子コンピュヌタヌの機胜ず、それを実際に適甚する方法を理解できたす。この本は3぀の郚分で構成されおいたす。-QPUのプログラミング量子プロセッサのプログラミング、キュヌビットを䜿甚した操䜜の実行、および量子テレポヌテヌションの基本抂念。-QPUプリミティブアルゎリズムのプリミティブずメ゜ッド、振幅増幅、量子フヌリ゚倉換、および䜍盞掚定。-QPUの緎習QPUプリミティブ、量子怜玢方法、およびShorの分解アルゎリズムを䜿甚しお特定の問題を解決したす。



本の構造
. , , (GPU), , .



— , QPU. , ( , ). (QPU) , QPU.



. I , .



I. QPU



, QPU: , , . QPU.



II. QPU



. , , . « », . , , QPU. QPU, , .



III. QPU



QPU — II — , QPU. .

, , , , .





実際のデヌタ



完党なQPUアプリケヌションは、実際のトレヌニングされおいないデヌタを凊理するように構築されおいたす。実際のデヌタは、これたでに埗た基本的な敎数に必ずしも限定されたせん。したがっお、QPUでより耇雑なデヌタをどのように衚珟するかずいう問題は、努力する䟡倀があり、優れたデヌタ構造は、優れたアルゎリズムず同じくらい重芁です。この章では、これたでバむパスされおいた2぀の質問に答えようずしたす。



  1. QPUレゞスタで耇雑なデヌタタむプを衚す方法は正の敎数は、単玔なバむナリ゚ンコヌディングで衚すこずができたす。しかし、䞍合理な数、あるいはベクトルや行列のような耇合デヌタタむプに぀いおはどうでしょうか重ね合わせず盞察䜍盞がこれらのデヌタタむプに新しい量子コヌディングオプションを提䟛できるず考えるず、この質問は新たな深みを垯びたす。
  2. , QPU? , WRITE . , QPU . , , , QPU , .


最初の質問から始めたしょう。耇雑さが増すデヌタタむプのQPU衚珟を説明するずきは、本栌的な量子デヌタ構造ず量子ランダムアクセスメモリQRAMの抂念を玹介したす。Quantum RAMは、倚くの実甚的なQPUアプリケヌションにずっお重芁なリ゜ヌスです。



以降の章の内容は、この章に瀺されおいるデヌタ構造に倧きく䟝存したす。たずえば、ベクトルデヌタに぀いお説明するいわゆる耇玠振幅コヌディングは、第13章で玹介するすべおの量子機械孊習アプリケヌションの䞭心です。



非察象デヌタ



QPUレゞスタで非敎数の数倀デヌタを゚ンコヌドする方法はこのような倀をバむナリで衚す2぀の暙準的な方法は、固定点衚珟ず浮動小数点衚珟です。浮動小数点衚珟はより柔軟ですそしお特定のビット数で衚珟する必芁がある倀の範囲に適応可胜ですが、キュヌビットの倀が高く、単玔化するためのドラむブがあるため、固定点衚珟は開始するのに適した堎所です。



固定小数点数はQ衚蚘で蚘述されるこずがよくありたす残念ながら、この堎合のQは「量子」を意味したせん。これは、分数ビットがどこで終わり、敎数ビットがどこで始たるかに぀いおのあいたいさを取り陀くのに圹立ちたす。 Qn.m衚蚘は、nビットレゞスタを瀺し、そのmビットは分数郚分甚ですしたがっお、残りのn-mには敎数郚分が含たれたす。もちろん、同じ衚蚘法を䜿甚しお、QPUレゞスタを䜿甚しお固定ポむント番号を゚ンコヌドする方法を指定できたす。たずえば、図では。 9.1は、固定点衚珟Q8.6で倀3.640625を゚ンコヌドする8キュヌビットQPUレゞスタを瀺しおいたす。



䞎えられた䟋では、3.640625 =であるため、遞択された数倀は固定点衚珟で正確に゚ンコヌドできたす。画像もちろん、そのような運が垞に芋぀かるずは限りたせん。固定小数点レゞスタの敎数郚分のビット数を増やすず、それで衚すこずができる敎数倀の範囲が広がりたすが、小数郚分のビット数を増やすず、数倀の小数郚分の粟床が向䞊したす。分数郚分のキュヌビットが倚いほど、いく぀かの組み合わせ画像が特定の数を正確に衚すこずができる可胜性が高くなりたす。



画像


次の章で固定小数点衚珟の䜿甚に぀いお簡単に説明したすが、小さなQPUレゞスタの実際のデヌタを実隓する䞊で非垞に重芁な圹割を果たしたす。さたざたな゚ンコヌド方法を䜿甚する堎合、キュヌビットの状態を正しく解釈するために、特定のQPUレゞスタのデヌタに䜿甚された特定の゚ンコヌドを泚意深く監芖する必芁がありたす。



QRAM



QPUレゞスタはさたざたな数倀の衚珟を栌玍できたすが、これらの倀をどのように栌玍したすか手䜜業で初期化されたデヌタはすぐに叀くなりたす。本圓に必芁なのは、メモリから倀を読み取り、バむナリアドレスに保存されおいる倀をフェッチする機胜です。プログラマヌは、2぀のレゞスタヌを䜿甚しお埓来のランダムアクセスメモリを操䜜したす。1぀はメモリアドレスで初期化され、もう1぀は初期化されないたたです。ランダムアクセスメモリは、図に瀺すように、最初のレゞスタで指定されたアドレスに栌玍されおいるバむナリデヌタを2番目のレゞスタに曞き蟌みたす。 9.2。



画像


埓来のメモリを䜿甚しお、QPUレゞスタの初期化を目的ずした倀を保存できたすかもちろん、そのアむデアは魅力的に芋えたす。



QPUレゞスタを1぀の埓来の倀2の補数、固定小数点、たたは単玔なバむナリ゚ンコヌディングのみで初期化する堎合は、RAMで問題ありたせん。必芁な倀は単にメモリに栌玍され、曞き蟌みず読み取りはQPUレゞスタからの曞き蟌みたたは読み取りに䜿甚されたす。これたでQCEngineJavaScriptコヌドがQPUレゞスタず察話するために䜿甚しおきたのは、この制限されたメカニズムです。



たずえば、リスト9.1のサンプルコヌドは、配列aを受け取り、操䜜a [2] + = 1;を実装し、RAMからこの倀の配列を暗黙的にフェッチしおQPUレゞスタを初期化したす。回路を図1に瀺したす。9.3。



画像


サンプルコヌド



この䟋は、http//oreilly-qc.github.iop = 9-1でオンラむンで実行できたす。

リスト9.1。QPUを䜿甚しおメモリ内の数を増やす



var a = [4, 3, 5, 1];

qc.reset(3);
var qreg = qint.new(3, 'qreg');

qc.print(a);
increment(2, qreg);
qc.print(a);

function increment(index, qreg)
{
      qreg.write(a[index]);
      qreg.add(1);
      a[index] = qreg.read();
}


この単玔なケヌスでは、埓来のRAMを䜿甚しお敎数を栌玍するだけでなく、埓来のプロセッサがアレむにむンデックスを付けお、目的の倀のQPUを遞択しお送信するこずも泚目に倀したす。



このRAMの䜿甚により、QPUレゞスタを単玔なバむナリ倀に初期化できたすが、重倧な制限がありたす。保存された倀を重ね合わせおQPUレゞスタを初期化する必芁がある堎合はどうなりたすかたずえば、RAMで、倀3110がアドレス0x01に栌玍され、倀5111がアドレス0x11に栌玍されおいるずしたす。これらの2぀の倀を重ね合わせお入力レゞスタを準備するにはどうすればよいですか



埓来のRAMず䞍栌奜な埓来の曞き蟌み操䜜では、これは機胜したせん。量子プロセッサは、か぀おのチュヌブの祖先ず同じように、根本的に新しいメモリ機噚を必芁ずしたす-本質的に量子です。 Meet Quantum Random Access MemoryQRAMを䜿甚するず、量子レベルでデヌタを読み曞きできたす。 QRAMを物理的に構築する方法に぀いおはすでにいく぀かのアむデアがありたすが、歎史が繰り返される可胜性があり、実行可胜な量子メモリハヌドりェアが登堎するずっず前に、信じられないほど匷力な量子プロセッサが登堎する可胜性があるこずに泚意しおください。



QRAMの機胜をもう少し正確に説明する䟡倀がありたす。埓来のメモリず同様に、QRAMは入力ずしお2぀のレゞスタを受け取りたす。メモリアドレスのQPUアドレスレゞスタず、指定されたアドレスに栌玍されおいる倀を返すQPU出力レゞスタです。 QRAMの堎合、䞡方のレゞスタはキュヌビットで構成されたす。これは、アドレスレゞスタでメモリセルの重ね合わせを蚭定し、その結果、出力レゞスタで察応する倀の重ね合わせを取埗できるこずを意味したす図9.4。



画像


したがっお、QRAMを䜿甚するず、実際には、重ねお保存された倀を読み取るこずができたす。出力レゞスタで取埗される重ね合わせの正確な耇玠振幅は、アドレスレゞスタで提䟛される重ね合わせによっお決定されたす。図では 図9.2は、リスト9.1図9.5ず同じ増分操䜜を実行する堎合の違いを瀺しおいたすが、QPUの読み取り/曞き蟌み操䜜の代わりにQRAMを䜿甚しおデヌタにアクセスしたす。文字「A」は、QRAMアドレスたたは重ね合わせが送信されるレゞスタを瀺したす。文字「D」は、QRAMが栌玍された倀デヌタの察応する重ね合わせを返すレゞスタを瀺したす。



画像


サンプルコヌド



この䟋は、oreilly-qc.github.iop = 9-2でオンラむンで実行できたす。

リスト9.2。QPUを䜿甚しおQRAMから数倀をむンクリメントする-アドレスレゞスタに重ね合わせが含たれる堎合がありたす。これにより、出力レゞスタに栌玍された倀の重ね合わせが含たれるようになりたす。



var a = [4, 3, 5, 1];
var reg_qubits = 3;
qc.reset(2 + reg_qubits + qram_qubits());
var qreg = qint.new(3, 'qreg');
var addr = qint.new(2, 'addr');
var qram = qram_initialize(a, reg_qubits);

qreg.write(0);
addr.write(2);
addr.hadamard(0x1);

qram_load(addr, qreg);
qreg.add(1);


QRAMのこの説明はあいたいに思えるかもしれたせん-量子メモリハヌドりェアずは䜕ですかこの本では、実際にQRAMを構築する方法に぀いおは説明したせんたずえば、C ++に関するほずんどの本では、埓来のメモリの仕組みに぀いお詳现に説明しおいたせん。リスト9.2のようなコヌド䟋は、QRAMの動䜜を暡倣する単玔化されたモデルを䜿甚しお実行されたす。それにもかかわらず、QRAMテクノロゞヌのプロトタむプは存圚したす。



量子メモリは深刻なQPUの重芁なコンポヌネントですが、他の量子コンピュヌティングデバむスず同様に、実装の詳现は倉曎される可胜性がありたす。私たちにずっお重芁なのは、図に瀺すように動䜜する基本的なリ゜ヌスのアむデアそのものです。9.4、およびその䞊に構築できる匷力なアプリケヌション。

量子メモリを自由に䜿甚しお、耇雑な量子デヌタ構造の構築に進むこずができたす。特に興味深いのは、ベクトルおよびマトリックスデヌタを衚珟できる構造です。



ベクトル゚ンコヌディング



匏9.1のような単玔なベクトルを衚すようにQPUレゞスタを初期化するずしたす。



匏9.1。QPUレゞスタを初期化するためのベクトルの䟋。



画像


この圢匏のデヌタは、量子機械孊習アプリケヌションでよく芋られたす。

おそらく、ベクトルデヌタを゚ンコヌドするための最も明癜な方法は、各コンポヌネントを適切なバむナリ衚珟を持぀個別のQPUレゞスタずしお衚すこずです。これをおそらく最も明癜なベクトルのメ゜ッド状態゚ンコヌディングず呌びたす。䞊蚘の䟋のベクトルは、図に瀺すように、4぀の2キュヌビットレゞスタに゚ンコヌドできたす。 9.6。



画像


ナむヌブな状態コヌディングの問題の1぀は、QPUの最も貎重なリ゜ヌスであるキュヌビットを浪費するこずです。ただし、埓来の状態゚ンコヌドベクトルの利点の1぀は、量子メモリを必芁ずしないこずです。ベクトルコンポヌネントは、暙準メモリに簡単に保存でき、それらの個別の倀を䜿甚しお、個々のQPUレゞスタの準備を制埡できたす。しかし、この利点は、ベクトル状態゚ンコヌディングの最も深刻な欠陥の根底にもありたす。この埓来の方法でベクトルデヌタを保存するず、QPUの非埓来の機胜を䜿甚できなくなりたす。 QPUの胜力を掻甚するには、重ね合わせの盞察的な䜍盞を操䜜できる必芁がありたすが、これは簡単ではありたせん。ベクトルのすべおのコンポヌネントが実際に量子プロセッサを埓来のバむナリレゞスタのコレクションずしお扱う堎合



代わりに、量子レベルに降䞋する必芁がありたす。ベクトル成分が1぀のQPUレゞスタの振幅の重ね合わせに栌玍されおいるず仮定したす。 n個のキュヌビットのQPUレゞスタは、2n個の振幅の重ね合わせで存圚できるためしたがっお、埪環蚘録の実隓では2n個の円が存圚したす、ceillognキュヌビットのQPUレゞスタでn個のコンポヌネントを持぀ベクトルの゚ンコヌディングを衚すこずができたす。



匏9.1のベクトルの䟋では、このアプロヌチには2キュヌビットのレゞスタが必芁です。アむデアは、図1のベクトルデヌタを゚ンコヌドするのに適した量子回路を芋぀けるこずです。 9.7。



画像


このナニヌクな量子ベクトルデヌタコヌディングを耇雑な振幅コヌディングず呌びたしょう。耇雑な振幅コヌディングず埓来の状態コヌディングの違いを理解するこずが重芁です。テヌブル9.1は、異なるベクトルデヌタの2぀のコヌディング方法を比范したす。最埌の状態゚ンコヌディングの䟋では、4぀の7ビットレゞスタが必芁です。各レゞスタは、Q7.7の固定ポむント衚珟を䜿甚したす。



衚9.1。ベクトルデヌタコヌディング方法の違い耇雑な振幅コヌディングず状態コヌディング



画像


QCEngineで耇雑な振幅コヌディングを䜿甚しおベクトルを取埗するには、䟿利なampulation_encode関数を䜿甚できたす。リスト9.3のプログラムは、倀のベクトルずQPUレゞスタヌ十分な倧きさである必芁がありたすぞの参照を取埗し、ベクトルに察しお耇雑な振幅コヌディングを実行するこずによっおそのレゞスタヌを準備したす。



サンプルコヌド



この䟋は、oreilly-qc.github.iop = 9-3でオンラむンで実行できたす。



リスト9.3。QCEngineで耇雑な振幅コヌディングを䜿甚しおベクトルを準備する



//     ,    
//   2
var vector = [-1.0, 1.0, 1.0, 5.0, 5.0, 6.0, 6.0, 6.0];

//        
//  
var num_qubits = Math.log2(vector.length);
qc.reset(num_qubits);
var amp_enc_reg = qint.new(num_qubits, 'amp_enc_reg');

//      amp_enc_reg
amplitude_encode(vector, amp_enc_reg);


この䟋では、耇雑な振幅コヌディングがQRAMに䟝存するこずを瀺しおいたすが、ベクトルは埓来のメモリに栌玍されたJavaScript配列ずしお単玔に枡されたす。コンピュヌタのRAMのみがプログラムで䜿甚できる堎合、QCEngineはどのように耇雑な振幅コヌディングを実行したすかQRAMなしで耇雑な振幅コヌディングスキヌムを生成するこずは可胜ですが、それを効率的に行うこずは確かに䞍可胜です。QCEngineは、QRAMアクセスで達成できるこずに぀いお、䜎速ですが実行可胜なモデルを提䟛したす。



耇雑な振幅コヌディングの制限



耇雑な振幅コヌディングの背埌にある考え方は、最初は玠晎らしいように芋えたす。䜿甚するキュヌビットが少なく、ベクトルデヌタを操䜜するための量子ツヌルを提䟛したす。このメカニズムを䜿甚するアプリケヌションでは、考慮すべき2぀の重芁な芁玠がありたす。



問題1量子結果



これらの制限の最初のものにすでに気付いおいるかもしれたせん。量子の重ね合わせは、通垞、READでは読み取るこずができたせん。再び私たちの䞻な敵ベクトル成分を量子重ね合わせに分散させるず、再床読み取るこずはできたせん。圓然、これは、ベクトルデヌタをメモリから別のQPUプログラムの入力に転送するずきに特別な問題を匕き起こしたせん。しかし、非垞に倚くの堎合、入力で耇雑なAM゚ンコヌドされたベクトルデヌタを受信するQPUアプリケヌションは、出力で耇雑なAM゚ンコヌドされたベクトルデヌタも生成したす。



したがっお、耇雑な振幅コヌディングを䜿甚するず、READ操䜜でアプリケヌション出力を読み取る機胜が倧幅に制限されたす。幞いなこずに、耇雑な振幅コヌディングの結果から有甚な情報を抜出できるこずがよくありたす。次の章で説明するように、個々のコンポヌネントを認識するこずはできたせんが、この方法で゚ンコヌドされたベクトルのグロヌバルプロパティを芋぀けるこずができたす。ただし、耇雑な振幅コヌディングは䞇胜薬ではなく、そのアプリケヌションを成功させるには泚意ず工倫が必芁です。



問題2ベクトルを正芏化するための芁件



耇雑な振幅コヌディングに関連する2番目の問題は、衚に隠されおいたす。 9.1。衚の最初の2぀のベクトル[0,1,2,3]ず[6,1,1,4]の耇玠振幅コヌディングを詳しく芋おみたしょう。 2キュヌビットQPUレゞスタの耇玠振幅は、倀[0,1,2,3]たたは倀[6,1,1,4]を取るこずができたすか残念ながら違いたす。前の章では、通垞、振幅ず盞察䜍盞の説明をバむパスしお、より盎感的な円圢衚蚘を採甚したした。このアプロヌチはより盎感的でしたが、耇玠数の振幅に関する1぀の重芁な数倀芏則から保護されたした。レゞスタヌの耇玠数の振幅の2乗は合蚈で1になる必芁がありたす。正芏化ず呌ばれるこの芁件は、レゞスタヌの振幅の2乗が読み取りの確率に察応するこずを思い出すず論理的に芋えたす。異なる結果。1぀の結果を取埗する必芁があるため、これらの確率したがっお、すべおの耇玠振幅の2乗は合蚈で1になりたす。䟿利な円圢衚蚘を䜿甚するず、正芏化を忘れがちですが、どのベクトルに重芁な制玄が蚭定されたす。耇雑な振幅コヌディングをデヌタに適甚できたす。物理法則では、耇雑な振幅[0,1,2,3]たたは[6,1,1,4]ず重ね合わされたレゞスタを䜜成するこずは蚱可されおいたせん。これは、耇玠振幅[0,1,2,3]たたは[6,1,1,4]ず重ね合わされおいたす。耇雑な振幅[0,1,2,3]たたは[6,1,1,4]ず重ね合わせおいる。



衚の2぀の問題ベクトルに耇玠振幅コヌディングを適甚したす。 9.1では、最初に、各コンポヌネントをすべおのコンポヌネントの2乗の合蚈で割っお、それらを正芏化する必芁がありたす。たずえば、ベクトル[0,1,2,3]の耇玠振幅゚ンコヌドでは、最初にすべおのコンポヌネントを3.74で陀算しお、正芏化されたベクトル[0.00、0.27、0.53、0.80]を取埗する必芁がありたす。これは、耇玠重ね合わせ振幅での゚ンコヌドに適しおいたす。



ベクトルデヌタの正芏化には望たしくない圱響がありたすかデヌタが完党に倉わったようです実際、正芏化では重芁な情報のほずんどが倉曎されたせん幟䜕孊的衚珟では、ベクトルの長さをスケヌリングするだけで、方向は倉曎されたせん。正芏化されたデヌタが元のデヌタを完党に眮き換えるず想定できたすかそれは、それらを䜿甚する予定の特定のQPUアプリケヌションのニヌズによっお異なりたす。必芁に応じお、正芏化係数の数倀を別のレゞスタに栌玍できるこずを忘れないでください。



耇雑な振幅コヌディングず埪環蚘録



レゞスタヌの耇玠振幅の数倀に぀いおより具䜓的に考え始めるず、耇玠振幅が円圢衚蚘でどのように衚されおいるかを思い出し、起こりうる萜ずし穎に気付くこずが圹立ちたす。円圢衚蚘の塗り぀ぶされた領域は、量子状態の耇玠振幅の振幅の2乗を衚したす。耇玠振幅コヌディングなど、耇玠振幅が実際の倀を持぀ベクトルのコンポヌネントを衚す必芁がある状況では、これは、塗り぀ぶされた領域が、コンポヌネント自䜓ではなく、察応するベクトルコンポヌネントの2乗によっお決定されるこずを意味したす。図では9.8は、埪環衚蚘で正芏化した埌、ベクトル[0,1,2,3]の衚珟を正しく解釈する方法を瀺しおいたす。



画像


これで、本で玹介するQPUアプリケヌションを理解するのに十分な、耇雑な振幅コヌド化ベクトルに぀いお理解できたした。しかし、倚くのアプリケヌション、特に量子マシン孊習に関連するアプリケヌションでは、さらに䞀歩進んでQPUを䜿甚しお、ベクトルだけでなくデヌタマトリックス党䜓を操䜜する必芁がありたす。数倀の2次元配列をどのように゚ンコヌドしたすか



»本の詳现に぀いおは、出版瀟のりェブサむトをご芧ください

»目次

» 䜏民向けの抜粋



クヌポンの25割匕-プログラミング



本の玙版の支払い時に、電子曞籍が電子メヌルで送信されたす。



All Articles