การซ้อนทับควอนตัมของเสือกับหมี

การซ้อนทับควอนตัมของเสือกับหมี

เครดิตฟรี

รูปภาพของเสือกับหมีที่ซ้อนทับกัน แม้ว่าจะมีหลายวิธีที่อาจจะพยายามบรรลุผลนี้ แต่ฉันใช้วิธีที่ค่อนข้างแปลกใหม่: ฉันสร้างการซ้อนทับควอนตัมของพวกเขาบนคอมพิวเตอร์ควอนตัม
ก่อนที่เราจะพูดถึงว่าคอมพิวเตอร์ควอนตัมคืออะไร เรามาทำความรู้จักกับคอมพิวเตอร์ควอนตัมกันก่อนดีกว่า คอมพิวเตอร์ทั่วไปถูกสร้างขึ้นจากบิต : ข้อมูลชิ้นเล็ก ๆ ที่สามารถรับค่า0หรือ1.

สล็อต

บิตสามารถนำมารวมกันเพื่อสร้างสตริงบิต เช่น0001หรือ0010. นี่เป็นวิธีที่มีประสิทธิภาพในการเข้ารหัสข้อมูลแทบทุกอย่าง ตัวอย่างที่ง่ายที่สุดคือการใช้พวกมันสำหรับตัวเลข: 1คือ 1, 10คือ 2, 100คือ 4 และต่อไปเรื่อยๆสำหรับเลขยกกำลังของ 2 และทุกสิ่งในระหว่างนั้น
คอมพิวเตอร์ควอนตัมถูกสร้างขึ้นจากqubitsแทน เช่นเดียวกับบิต สิ่งเหล่านี้สามารถรับค่า0และ1และเราสามารถรวมมันเข้าด้วยกันเพื่อสร้างสตริงได้เช่นกัน ถ้าเราต้องการ เราก็แค่ใช้ qubits เป็นบิตประเภทอื่น
การดำเนินการนี้ค่อนข้างแพง เนื่องจาก qubits ต้องการการดูแลและความเอาใจใส่มากกว่าบิต แต่เนื่องจาก IBM เสนอตัวประมวลผลควอนตัมต้นแบบฟรีบนคลาวด์เราจึงไม่ต้องเสียค่าใช้จ่าย
ลองเขียนบางสิ่งด้วย qubits กัน!
สิ่งที่ง่ายที่สุดในการเขียนคือตัวเลข แต่ค่อนข้างน่าเบื่อ เลยไปหาข้อความแทน มาตรฐาน ASCII ให้วิธีการกำหนดสตริงของตัวอักษร ตัวเลข และเครื่องหมายวรรคตอนลงในสตริงของบิต ซึ่งหมายความว่าเราสามารถใช้อุปกรณ์คลาวด์ 16 คิวบิตของ IBM เพื่อเข้ารหัสอีโมติคอนบางตัวได้
ต่อไปนี้คือสตริงบิตอีโมติคอนที่เราสามารถใช้ได้
😉 = 00111011 00101001
8) = 00111000 00101001
เห็นได้ชัดว่าเราไม่ได้ได้รับประโยชน์อย่างเต็มที่จาก qubits เมื่อเราใช้สำหรับอีโมติคอน สิ่งนี้ไม่ได้มาจากวิธีที่เราเข้ารหัสข้อมูล แต่มาจากวิธีที่เราจัดการมัน แทนที่จะจำกัดอยู่ที่ลอจิกเกตมาตรฐานที่เป็นหัวใจของคอมพิวเตอร์ทั่วไป เราก็สามารถดำเนินการควอนตัมที่ซับซ้อนมากขึ้นได้เช่นกัน
ในความรู้สึกบางอย่างที่ดำเนินการเหล่านี้สามารถช่วยให้คิวบิตเป็นทั้ง0และ1ในครั้งเดียวคือควอนตัมซ้อน ควอนตัมคอมพิวเตอร์สามารถใช้ superpositions เหล่านี้ในการสร้างผลรบกวนเช่นเดียวกับที่เราเห็นเมื่อคลื่น superpose เอฟเฟกต์เหล่านี้สามารถควบคุมได้ในโปรแกรมควอนตัมของเรา ทำให้เราสามารถค้นหาเส้นทางที่สั้นกว่าระหว่างอินพุตและเอาต์พุต
แต่ถ้าเรากลับไปยุ่งกับอีโมติคอน เราก็สามารถใช้ฟังก์ชันนี้เพื่อสร้างการซ้อนทับของ;)และ8).
เมื่อเราทำสิ่งนี้ เราจะดึงเอาท์พุตออกจากการซ้อนโดยตรง ด้วยเหตุนี้ เราจึงไม่เห็นความละเอียดอ่อนของการรบกวนใดๆ แต่จะทำหน้าที่เป็นตัวสร้างสตริงบิตสุ่มสำหรับ;)และ8). ผลลัพธ์แบบสุ่มเหล่านี้ รวมกับ Matplotlib สามารถใช้สร้างรูปภาพเพื่อแสดงการซ้อนทับได้
ตอนนี้ ลองใช้หลักการเดียวกัน แต่ทำสิ่งที่ซับซ้อนกว่าแค่อีโมติคอน มาซ้อนรูปภาพกันเถอะ!
ในการทำเช่นนี้ เราจำเป็นต้องให้ภาพถ่ายมีการเข้ารหัสแบบไบนารี สำหรับชุดของสตริงไบนารีที่กำหนด เราจะกำหนดรูปภาพให้แต่ละรูป โดยพื้นฐานแล้วหมายความว่าเราจะนำไฟล์รูปภาพจำนวนหนึ่งมา และให้สตริงไบนารีเป็นชื่อไฟล์
ฉันเลือกใช้ภาพสัตว์จำนวนมากจากวิกิมีเดียคอมมอนส์ ด้วยสตริงสี่บิตที่เรียบง่าย (แต่ไม่ง่ายเกินไป) เราสามารถมีภาพที่แตกต่างกันได้ 16 ภาพ
ตอนนี้ สิ่งที่เราต้องทำคือเลือกภาพสองภาพเพื่อวางซ้อน ตัวอย่างเช่น ฉันไปหา0010(หมี) และ0001(เสือ) เมื่อเลือกตัวเลือกนี้แล้ว เราจะรู้ว่าสตริงบิตใดที่เราต้องสร้างการซ้อนทับควอนตัม
การสร้างการซ้อนทับต้องการให้เราบอก qubits ว่าต้องทำอย่างไร เพื่อที่เราต้องการโปรแกรมควอนตัม เรายังต้องส่งมันไปยังตัวประมวลผลควอนตัมเพราะนั่นคือที่ที่ qubits อาศัยอยู่ โชคดีที่สิ่งเหล่านี้ไม่น่ากลัวอย่างที่คิด!
ส่วนใหญ่ของการเขียนโปรแกรมการตั้งค่าแล้วสำหรับคุณในโน๊ตบุ๊ค Jupyter ซึ่งจะตั้งค่างานและส่งไปยังหนึ่งในอุปกรณ์ควอนตัมของ IBM โดยใช้QISKit quantum SDK
ผลลัพธ์ควรแยกผลลัพธ์ที่เลือกทั้งสองออกด้วยความน่าจะเป็น 50/50 แต่แทนที่จะใช้คณิตศาสตร์ในการทำนายว่าคอมพิวเตอร์ควอนตัมจะทำอะไร เรามาลองทำกันดู เราจะเรียกใช้โปรแกรมหลายครั้งและใช้ผลลัพธ์เพื่อประเมินความน่าจะเป็น สิ่งเหล่านี้จะถูกนำมาใช้เพื่อผสมภาพเข้าด้วยกันในค่าเฉลี่ยถ่วงน้ำหนัก ด้วยความแรงของภาพแต่ละภาพตามความน่าจะเป็นของชื่อไฟล์
ส่วนเดียวที่ขาดหายไปจากโน้ตบุ๊กคือส่วนที่สำคัญที่สุด: การตั้งค่าการซ้อนทับ นี่คือหัวใจควอนตัมของโปรแกรม และเป็นส่วนที่คุณต้องเปลี่ยนหากต้องการซ้อนภาพคู่อื่น แต่อย่ากังวลไป ฉันได้สร้างเกมไว้เพื่อช่วยเหลือคุณ
โหมด superposer ภาพของเกมนี้จะช่วยให้คุณเลือกชื่อไฟล์และนำคุณไปสู่กระบวนการซ้อนทับ
ด้วยเหตุนี้ ฉันจึงได้เขียนข้อมูลโค้ดที่จำเป็นในการสร้างเสือและหมีทับซ้อน จากนั้นฉันก็ใช้สมุดบันทึก Jupyter เพื่อส่งงานไปยังอุปกรณ์ควอนตัมจริง และในที่สุดฉันก็ได้ภาพ
ครึ่งเสือครึ่งหมีหรือประมาณนั้น เนื่องจากเสียงรบกวนในอุปกรณ์ควอนตัมในปัจจุบันจึงมีสัตว์อื่นเล็กน้อย สิ่งเหล่านี้เกิดขึ้นเนื่องจากคอมพิวเตอร์ควอนตัมบางครั้งแยกชื่อไฟล์ออกโดยผิดพลาด ที่โดดเด่นที่สุดคือแรดซึ่งมีเขาอยู่เหนืออุ้งเท้าขวาของหมี
ตอนนี้คุณมีทั้งหมดที่คุณต้องการเพื่อสร้างศิลปะควอนตัมของคุณเอง หากคุณไม่ชอบภาพที่ฉันเลือก ให้หา 16 ภาพของคุณเองและตั้งชื่อไฟล์ไบนารีแทน แต่ถ้าคุณส่งคนรักของคุณมารวมกันเป็นควอนตัมของคุณ ระวังโฟโต้บอมบ์ที่เกิดจากเสียงควอนตัม!
เพื่อเริ่มต้นการเดินทางสู่การทำความเข้าใจการเข้ารหัสที่มีความหนาแน่นสูง ก่อนอื่นเราต้องหารือเกี่ยวกับแนวคิดการคำนวณควอนตัมพื้นฐานสองประการ: การซ้อนและการพัวพัน ฉันจะให้ภาพรวมโดยสังเขปของแนวคิดเหล่านี้เท่านั้น หากคุณต้องการคำอธิบายที่ละเอียดยิ่งขึ้น ให้ดูบทช่วยสอนที่ยอดเยี่ยมนี้จาก Benoit Valîron
ก่อนที่เราจะดำดิ่งสู่แนวคิดพื้นฐาน มาดูโค้ด Python บางส่วนที่เราจะใช้ในตัวอย่างของเรา ในส่วนของโค้ดต่อไปนี้ เราสร้างรีจิสเตอร์สองประเภท: ควอนตัมและคลาสสิก การลงทะเบียนแบบคลาสสิกจะใช้เพื่อเก็บผลลัพธ์ของการวัดการลงทะเบียนควอนตัมของเรา การลงทะเบียนควอนตัมคือ ‘qubits’ ของเรา และเราจะจัดการพวกมันในโปรแกรมของเราเพื่อให้ได้เอฟเฟกต์ที่ต้องการ วงจรควอนตัมจะใช้เพื่อต่อคิวบิตและการทำงานของเราเข้าด้วยกัน คุณสามารถค้นหาสำเนาของรหัสที่เราจะใช้ตลอดบทความที่นี่
จาก qiskit นำเข้า QuantumCircuit, ClassicalRegister, QuantumRegister
จากการนำเข้า qiskit available_backends ดำเนินการ

สร้างสองการลงทะเบียนควอนตัมและคลาสสิก

q = QuantumRegister(2)
c = ClassicalRegister(2)
qc = QuantumCircuit(q, c)

สล็อตออนไลน์

ซ้อน
การทับซ้อนของควอนตัมเป็นสถานะความน่าจะเป็นของ qubit พิเศษ ซึ่งมีโอกาสเท่ากันที่จะได้รับค่าไบนารี 0 หรือ 1 เมื่อวัด qubit สถานะนี้สร้างขึ้นโดยใช้การดำเนินการพิเศษกับ qubit ที่เรียกว่าตัวดำเนินการ Hadamard ตัวดำเนินการ Hadamard คือการแปลงแบบรวมที่ทำให้ qubit ที่เป็น |0⟩ หรือ |1⟩ ในเกณฑ์มาตรฐานถูกแปลงเป็นสถานะใหม่ที่เรียกว่า superposition
ในการทบทวนให้ระลึกถึงไดแรคและสัญกรณ์เวกเตอร์สำหรับ |0⟩ และ|1⟩ และคำอธิบายทั่วไปของ qubit เป็นการรวมเชิงเส้นของสถานะพื้นฐาน ดังที่แสดงในไดอะแกรมด้านล่าง
ในไดอะแกรมด้านล่างเมทริกซ์ที่สอดคล้องกับตัวดำเนินการHadamardจะถูกนำไปใช้กับ qubit ในสถานะพื้นฐาน |0⟩ เวกเตอร์ที่เป็นผลลัพธ์มีความน่าจะเป็นเท่ากันในการส่งคืน 0 หรือ 1 เมื่อวัด qubit
ในไดอะแกรมวงจรควอนตัม ตัวดำเนินการ Hadamard มักถูกเรียกว่าประตู Hadamard และแสดงด้วยH ที่อยู่ในกล่อง แผนภาพด้านล่างเป็นวงจรควอนตัมที่สอดคล้องกับการทำงานของเมทริกซ์ก่อนหน้า
ที่นี่เราเห็นโอเปอเรเตอร์ Hadamard ถูกนำไปใช้กับ qubit ในพื้นฐาน |0⟩ ตามด้วยการวัดเพื่อให้ได้ค่าบิตแบบคลาสสิก 0 หรือ 1 ส่วนของโค้ดแสดงวิธีการใช้ตัวดำเนินการ Hadamard กับหนึ่งใน qubits ของเรา
พัวพันและรัฐระฆัง
การพัวพันกันของควอนตัมเป็นสถานะพิเศษของความสัมพันธ์ที่แข็งแกร่งระหว่างสอง qubits แม้ว่า qubits จะถูกแยกออกจากกันทางกายภาพด้วยระยะทางที่ดี ความสัมพันธ์นั้นแข็งแกร่งมากจนดูเหมือนว่า qubits จะสื่อสารได้เร็วกว่าความเร็วแสง
การวัด qubit ตัวใดตัวหนึ่งจะกำหนดค่าของอีกตัวหนึ่งทันที แม้ว่าอีก qubit อื่นจะอยู่ในสถานะน่าจะเป็น แนวคิดนี้มักจะเข้าใจยากที่สุด เนื่องจากไม่ตรงกับประสบการณ์ในชีวิตประจำวันของเราเลย และอาจต้องใช้เวลาในการทำความคุ้นเคย

jumboslot

ตามจุดอ้างอิง อัลเบิร์ต ไอน์สไตน์ไม่เคยสบายใจกับแนวคิดเรื่องการวัดและการพัวพันแบบไม่กำหนดแบบกำหนด ซึ่งเรียกสิ่งนี้ว่า “การกระทำที่น่ากลัวในระยะไกล” ไอน์สไตน์แย้งว่ากลศาสตร์ควอนตัมต้องไม่สมบูรณ์ เพราะเรารู้ว่าไม่มีข้อมูลใดที่สามารถสื่อสารได้เร็วกว่าความเร็วแสง จะต้องมีตัวแปรที่ซ่อนอยู่ซึ่งเราไม่สามารถตรวจจับได้ซึ่งอธิบายความสัมพันธ์ที่แข็งแกร่งและลักษณะที่ปรากฏของการสื่อสารที่เร็วกว่าแสง
ในปีพ.ศ. 2507 จอห์น เบลล์ได้คิดค้นการทดลองเพื่อทดสอบว่ามีการใช้ตัวแปรที่ซ่อนอยู่ซึ่งสามารถอธิบายความสัมพันธ์ที่แข็งแกร่งได้หรือไม่ ฉันจะไม่เข้าไปในรายละเอียดของการทดลอง แต่ Bell ได้พิสูจน์ว่าไม่มีตัวแปรที่ซ่อนอยู่ดังกล่าวที่ถูกใช้ร่วมกันระหว่าง qubits ที่พันกันสองตัวและ qubits นั้นไม่ได้สื่อสารเร็วกว่าความเร็วแสง หากคุณต้องการที่จะเรียนรู้เพิ่มเติมที่คุณสามารถดูรายละเอียดได้ที่นี่ ประเด็นสำคัญจากการทดลองนี้คือมีสถานะพัวพันมุมฉากที่แยกความแตกต่างได้ 4 สถานะดังที่แสดงด้านล่างซึ่งมักเรียกว่าสถานะเบลล์ (Φ+,Φ−,Ψ+,Ψ−)
รัฐ Bell เหล่านี้หมายความว่าอย่างไร สถานะ Bell เหล่านี้บอกเราว่ามีความเป็นไปได้เท่ากันที่ qubit ที่พัวพันคู่หนึ่งไม่ว่าจะอยู่ในการกำหนดค่าแรกหรือการกำหนดค่าที่สองในหนึ่งในสี่สถานะ Bell ที่ระบุ ตัวอย่างเช่น ในสถานะ Bell แรก Φ+ qubits มีโอกาสเท่ากันที่จะอยู่ในการกำหนดค่า |00⟩ หรือ |11⟩ ในขณะที่อยู่ในสถานะ Bell ที่สาม Ψ+ qubits มีโอกาสเท่ากันที่จะอยู่ใน | การกำหนดค่า 01⟩ หรือ | 10⟩
แนวคิดเรื่องความพัวพันที่มักจะเข้าใจยากก็คือว่าสถานะที่พันกันนั้นไม่สามารถแยกออกเป็นสถานะแยกจากแต่ละ qubits ทั้งสองได้ แผนภาพด้านล่างแสดงให้เห็นว่าเราลงเอยด้วยความขัดแย้งได้อย่างไรเมื่อเราพยายามหาผลคูณของสอง qubits เพื่อพยายามสร้างสถานะ Φ+ และด้วยเหตุนี้สถานะที่พัวพันของเราจึงเป็น “สถานะผสม” ใหม่ที่ไม่สามารถอธิบายได้โดยแต่ละ qubit รัฐ
ณ จุดนี้คุณอาจถามตัวเองว่าสอง qubits พันกันได้อย่างไรและมีประโยชน์อย่างไร ก่อนที่ฉันจะตอบคำถามเหล่านี้ ฉันต้องแนะนำตัวดำเนินการควอนตัมตัวอื่นที่เรียกว่าตัวดำเนินการควบคุมไม่ใช่หรือ CNOT
ตัวดำเนินการ CNOT คือการแปลงแบบรวม 2 qubit โดยที่หนึ่ง qubit ทำหน้าที่เป็นตัวควบคุมและอีกตัวทำหน้าที่เป็นเป้าหมาย หาก qubit ควบคุมถูกตั้งค่าเป็น 1 ดังนั้น qubit เป้าหมายจะถูกพลิก เมทริกซ์ที่แสดงด้านล่างอธิบายตัวดำเนินการนี้
ในแผนภาพวงจรควอนตัม ประตู CNOT จะปรากฏเป็นจุดสีดำบนเส้นลวดควอนตัมสำหรับคิวบิตควบคุมที่มีเส้นและวงกลมเชื่อมต่อกับเส้นลวดควอนตัมของเป้าหมาย ดังแสดงในแผนภาพด้านล่าง
ทีนี้กลับมาที่คำถามแรกของเรา นั่นคือ เราจะสร้าง qubits ที่พันกันได้อย่างไร? พูดง่ายๆ ก็คือ เราจะรวมการใช้ประตู Hadamard กับประตู CNOT วงจรควอนตัมต่อไปนี้สร้างคู่ qubits พันกันหนึ่งในสี่สถานะ Bell ที่เราระบุไว้ก่อนหน้านี้ดังที่แสดงด้านล่าง สถานะ Bell ที่ผลิตขึ้นขึ้นอยู่กับสถานะเริ่มต้นของ qubits
[NPC5]แผนภาพด้านล่างแสดงผลของการรวมตัวดำเนินการ Hadamard และเกต CNOT เพื่อสร้างสถานะ Bell แรก Φ+ โดยให้ qubit ทั้งสองเริ่มทำงานในสถานะเริ่มต้น |0⟩ หากเราต้องการสร้างสถานะ Bell อื่นๆ เราก็จะเปลี่ยนสถานะเริ่มต้นของ qubits ส่วนย่อยของโค้ดด้านล่างแสดงให้เราเพิ่มเกต CNOT ไปยัง qubits ของเรา โปรดจำไว้ว่า qubit 0 อยู่ใน superposition แล้วจากขั้นตอนก่อนหน้า