Phác họa bài post:
#0_Quantum Mechanics.
#1. Qubit.
#2_Quantum Computing.
#3_Quantum Computer Hardware.
#4_Qubit Technologies.
#5_Quantum Computer Software.
#6_Quantum Algorithms.
#7_Quantum R&D.
-
Tôi xin phép được bắt đầu với câu nói của nhà vật lý Richard
Feynman như sau:
I’m not happy with all the
analyses that go with just the classical theory, because Nature isn’t
classical, dammit, and if you want to make a simulation of nature, you’d better
make it quantum mechanical, and by golly it’s a wonderful problem, because it
doesn’t look so easy.
It’s not a Turing machine, but a
machine of a different kind.
Tạm dịch:
Tôi không hài lòng với tất cả
các phân tích chỉ dựa trên lý thuyết cổ điển, bởi vì Thiên nhiên không phải là
cổ điển, chết tiệt thế chứ, và nếu bạn muốn tạo ra một mô phỏng của tự nhiên, tốt
hơn hết là bạn nên biến nó thành cơ học lượng tử, ôi trời, đó là một vấn đề tuyệt
vời, bởi vì nó không hề dễ.
Đó không phải là một máy Turing,
mà là một loại máy theo kiểu khác.
⚛️
#0_Quantum Mechanics.
Theo lý thuyết cơ học lượng tử, một đối tượng lượng tử thường
không tồn tại ở trạng thái hoàn toàn xác định. Khi người ta quan sát một vật thể
lượng tử, nó trông giống như một hạt, nhưng khi không quan sát, nó tồn tại dưới
dạng sóng. Để anh/chị không bị “kéo” vào một lý thuyết khó hiểu với vô số các
tranh luận của các nhà vật lý, tôi đề xuất chúng ta xem các tính chất sau của
lượng tử giống như các “tiên đề”:
Wave-particle duality (lưỡng tính sóng-hạt). Vật thể
lượng tử thường có cả hai tính chất sóng và hạt. Vật thể lượng tử vận động tuân
theo một phương trình sóng, nhưng bất kỳ phép đo nào của hệ thống lại cho kết
quả là hạt.
Superposition (trạng thái chồng chập). Một hệ thống
lượng tử có thể tồn tại ở hai trạng thái trở lên cùng một lúc, được gọi là trạng
thái chồng chập. Hàm sóng cho trạng thái chồng chập là tổ hợp tuyến tính của
các trạng thái thành phần, với các hệ số phức. Ví dụ, một hệ thống lượng tử Q tổ
hợp từ 2 trạng thái A và B thì có thể viết Q = Ca*A + Cb*B,
trong đó Ca và Cb là các số phức với ràng buộc: |Ca|2
+ |Cb|2 = 1. Khi “đo” hệ thống Q thì ta được kết
quả hoặc là A, hoặc là B, chứ không bao giờ là trạng thái lơ lửng giữa A và B cả.
Coherence (tính liên kết). Khi một hệ lượng tử được tổ
hợp từ các trạng thái thành phần cơ bản khác thì trạng thái của hệ thống tổ hợp
được gọi là có tính liên kết (coherent). Việc giữ trạng thái liên kết
(coherent) là cần thiết cho các hiện tượng lượng tử như giao thoa lượng tử (quantum
interference), trạng thái chồng chập (superposition) và liên đới lượng tử (entanglement).
Entanglement (liên đới lượng tử). Nếu nhiều vật thể
lượng tử liên đới với nhau thì khi “đo” một vật thể trong số đó, vật thể được
đo sẽ chuyển từ trạng thái chồng chập (superposition) thành trạng thái hạt. Điểm
đặc biệt ở chỗ các vật thể lượng tử liên đới khác cũng chuyển từ trạng thái chồng
chập thành trạng thái hạt. Hiện tượng này xảy ra ngay cả khi các vật thể lượng
tử ở cách xa nhau.
Measurement (đo / quan sát). Đo một hệ thống lượng tử,
thực chất là thay đổi trạng thái hệ thống đó. Trong trường hợp phép đo mang lại
giá trị được xác định rõ, trạng thái của hệ thống sau khi đo tương ứng với giá
trị đo được. Việc đo hệ thống lượng tử đã làm sập (collapse) chức năng “sóng” –
chuyển sang trạng thái “hạt”.
<Ngoài lề>
Nếu anh/chị thấy chưa thoải mái
với các “tiên đề” trên, anh chị có thể tìm hiểu thêm về cơ học lượng tử. Trong
nhiều tài liệu mà tôi đọc được trên Internet, tôi thấy tài liệu này dễ hiểu: https://hackernoon.com/quantum-computing-explained-a114999299ca
</Ngoài lề>
⚛️
#1. Qubit
#1.0_ Qubit. Các hệ thống điện toán hiện nay dựa vào
nền tảng hệ nhị phân được xây dựng từ các bit. Một bit chỉ có hai giá trị là 0
và 1. Quantum computing cũng có ý tưởng tương tự: quantum bit, viết tắt là
qubit. Qubit cũng có các giá trị là 0 và 1. Ngoài ra, qubit còn có thể ở trạng
thái “superposition” (trạng thái chồng chập). Khi qubit ở trạng thái
“superposition”, người ta nói là qubit ở 2 trạng thái đồng thời vừa bằng 0 vừa
bằng 1. Nghe rất vô lý, đúng không ạ? Nhưng “đúng” là thế đấy 😊.
Khi mô tả qubit, người ta viết theo ký hiệu của Dirac. Giá
trị 0 của qubit được viết là |0> (một vạch đứng, tiếp đến là giá trị và
sau cùng là dấu lớn hơn). Tương tự, giá trị 1 của qubit được viết là
|1>. Hai trạng thái |0> và |1> được gọi là các trạng thái cơ sở (basis
state). Hàm sóng của qubit được viết là |ψ⟩ = a0 |0⟩ + a1
|1⟩
trong đó |a0|2 + |a1|2 = 1. Chú ý rằng
a0 và a1 là các số phức. Khi đo qubit thì kết quả chắc chắn
là 0 hoặc 1 chứ không bao giờ là giá trị khác. Nhưng lúc nào bằng 0, lúc nào bằng
1? Qubit bằng 0 với xác suất là |a0|2 và bằng 1 với xác
suất là |a1|2. Sau khi “đo” thì trạng thái của qubit
chính là trạng lúc đo được (bằng 0 hoặc bằng 1), còn các giá trị a0
và a1 bị hủy hoàn toàn. Đây là một điểm “đặc biệt” (và có phần kỳ lạ)
của lượng tử.
Với cấu trúc trên, qubit không hẳn là số (digital) và càng
không phải là nhị phân (binary). Các hệ số a0 và a1 là
các giá trị tương tự (thực chất là số phức). Nhưng khi “đo” hệ thống thì kết quả
bao giờ cũng là nhị phân.
#1.1_Multiqubit. Khi hệ thống lượng tử có nhiều hơn 1
qubit thì có 2 trường hợp xảy ra: các qubit độc lập với nhau hoặc các qubit
liên đới với nhau (entangled).
Trường hợp các qubit độc lập với nhau: số trạng thái cơ sở tỷ
lệ thuận với số qubit. Một qubit có 2 trạng thái cơ sở nên n qubit sẽ có 2 * n
trạng thái cơ sở.
Trường hợp các qubit liên đới (entangled) thì số trạng thái
cơ sở tăng theo cấp số mũ. Ví dụ, nếu hệ thống có 2 qubit thì sẽ có 4 trạng
thái cơ sở (basis state) là |00>, |01>, |10>, |11>. Để mô tả đầy đủ hàm sóng của hệ thống 2 qubit,
chúng ta cần 4 hệ số phức: |ψ⟩ = a0|00> + a1|01>
+ a2|10> + a3|11>, trong đó |a0|2
+ |a1|2 + |a2|2
+ |a3|2 = 1
Một cách tổng quát, khi hệ thống có n qubit thì hệ thống này
sẽ có 2n trạng thái cơ sở và cần 2n hệ số phức để thiết lập
hàm sóng. Như vậy, khi tăng số qubit thì số các trạng thái cơ sở và số các hệ số
phức tăng theo cấp số mũ.
#1.3_Qubit Operations. Điện toán lượng tử hiện nay có
2 dòng chính: là điện toán lượng tử tương tự (analog quantum computing) khi các
qubit độc lập với nhau và điện toán lượng tử số (gate-based quantum computing)
khi các qubit liên đới với nhau (entangled). Bài này tôi chủ yếu chỉ nhàn đàm về
điện toán lượng tử số.
Đối với bit, như chúng ta đều biết, có các mạch điều khiển
cơ bản nguyên thủy gồm AND, OR, XOR, NOT. Các mạch này được gọi là gate (cổng).
Từ các mạch nguyên thủy này người ta có thể lập các mạch tổ hợp với mức độ phức
tạp cao hơn để thực hiện các phép tính trong các máy tính mà chúng ta vẫn đang
sử dụng.
Đối với qubit thì sao, liệu có các mạch tương tự như thế hay
không? Câu trả lời là các qubit có tập hợp các mạch điều khiển cơ bản nguyên thủy
khác hẳn. Lý do là các qubit vận hành theo nguyên lý cơ học lượng tử nên phải
tuân thủ các ràng buộc như sau:
Ràng buộc 1: Các mạch khi thiết kế không được mất
thông tin vì mất thông tin có nghĩa là hệ thống lượng tử bị phá vỡ tính liên kết
(coherence). Điều này cũng đồng nghĩa với: các phép toán phải đảo ngược được
(reversible). Trong các phép toán cổ điển, chỉ có NOT thỏa mãn điều kiện này.
Chú ý rằng ràng buộc này cũng đồng nghĩa với số qubit đầu vào phải bằng số qubit
đầu ra. Chú ý thêm là sau khi “đo” (measurement) qubit thì trạng thái ngay trước
đó bị hủy – vì vậy phép “đo” là phép toán không đảo ngược được.
Ràng buộc 2: Tổng bình phương các giá trị tuyệt đối của
các hệ số phải luôn luôn bằng 1 (∑|ai|2 = 1). Dưới
góc độ toán học, người ta gọi biên độ của véc tơ luôn luôn bằng 1. Các hệ số phức
của trạng thái của qubit có thể thay đổi nhưng biên độ không đổi.
Từ các ràng buộc trên người ta lập ra các phép toán (gate) để
tác động lên các qubit (nghĩa là chuyển các qubit từ trạng thái này sang trạng
thái khác). Ví dụ về các gate: Hadamart (1 qubit), T (1 qubit), CNOT
(2 qubit), Toffoli (3 qubit), Pauli-Z (1 qubit), Z-Rotation
(1 qubit), NOT (1 qubit).
Ngoài ra, người ta chứng minh được rằng mọi mạch điều khiển
qubit đều có thể được tổ hợp từ 3 gate là T, Hadamard và CNOT.
Như vậy, các gate T, Hadamard và CNOT được gọi là tập hợp
các gate cơ bản.
Về mặt toán, các gate được viết dưới dạng các ma trận. Hơn nữa,
các ma trận này đều là các ma trận đơn vị (unitary matrix). Các mạch tổ hợp từ
các gate cơ bản là các phép toán trên ma trận.
⚛️
#2_Quantum Computing.
Muốn có điện toán lượng tử (quantum computing), cần
có phần cứng (thiết bị) và phần mềm. Khi tìm hiểu sâu hơn, cả phần cứng và phần
mềm của điện toán lượng tử khác nhiều so với điện toán hiện nay chúng ta đang sử
dụng – tạm gọi là điện toán “cổ điển”. Vậy điện toán lượng tử phải có một cái
gì đó hơn hẳn điện toán cổ điển thì người ta mới “lao đầu” vào chứ?
Điện toán lượng tử có tiềm năng năng giải quyết một số vấn đề
tính toán mà kể cả những siêu máy tính mạnh nhất hiện nay và bất kỳ máy tính cổ
điển nào trong tương lai không giải được. Ví dụ tiêu biểu nhất là khả năng phá
khóa các loại mật mã trên nền RSA dùng thuật toán phân tích thành thừa số
nguyên tố của Peter Shor (tham khảo https://en.wikipedia.org/wiki/Shor%27s_algorithm).
Ngoài ra, cần phải kể đến các ứng dụng trong mô phỏng các hệ thống hóa học, vật
liệu, sinh học, đặc biệt là các ứng dụng tiềm năng để phát triển vật liệu mới.
Người ta thấy điện toán lượng tử có “tiềm năng” tính toán nhanh hơn điện
toán cổ điển theo cấp số mũ. Nói theo ngôn ngữ của độ phức tạp tính toán: nếu
điện toán cổ điển có độ phức tạp là O(2^n) thì điện toán lượng tử có độ phức tạp
là O(n). Để cho dễ hình dung, nếu n = 100 thì điện toán cổ điển cần đến 2^100
bước trong khi điện toán lượng tử chỉ cần vài trăm bước để tính. Chú ý rằng
2^100 là một số có 30 chữ số thập phân. Nghĩa là đối với điện toán cổ điển đây
là vấn đề bất khả thi còn đối với điện toán lượng tử nó chỉ diễn ra trong tích
tắc.
Tôi để từ “tiềm năng” trong nháy vì đó mới chỉ là tiềm năng.
Còn chuyện biến tiềm năng đó thành thực tế còn rất nhiều thách thức cả về phần
cứng lẫn phần mềm.
⚛️
#3_Quantum Computer Hardware.
Phần cứng của máy tính lượng tử có cấu trúc chia thành 4 tầng
(plane):
a. Quantum Data Plane (tầng dữ liệu lượng tử): Đây là
phần “hạt nhân” của máy tính lượng tử, là cấu trúc vật lý của qubit.
b. Control and Measurement Plane (tầng điều khiển và
đo): Chuyển tín hiệu số sang tín hiệu tương tự để điều khiển các qubit. “Đọc/đo”
các tín hiệu sập (collapse) của qubit (tầng a. và chuyển đến bộ xử lý tín hiệu
số.
c. Control Processor Plane (tầng xử lý điều khiển):
Chuyển thuật toán thành các chuỗi điều khiển để chuyển xuống cho tầng dưới (tầng
b.) và chuyển đo sang tầng d.
d. Host Processor (bộ xử lý điều phối): Là một máy
tính thông thường chịu trách nhiệm kết nối mạng, kết nối với lưu trữ dữ liệu và
giao diện người dùng.
Trên đây là hệ sinh thái của hệ thống lượng tử bao gồm cả
các máy tính cổ điển. Tầng a. được bảo quản trong buồng lạnh gần với nhiệt độ 0
tuyệt đối (vài chục mili độ Kelvin), nhiệt độ ở tầng b. khoảng 77 độ Kelvin.
Để dễ hình dung: giả thiết chúng ta viết một chương trình điều
khiển các qubit bằng ngôn ngữ Q# (Q Sharp). Mã nguồn của chương trình và
bản biên dịch mã nguồn nằm ở tầng d. Sau đó sẽ được chuyển xuống tầng c.
Tại đây các thuật toán sẽ được chuyển thành các chuỗi điều khiển. Chuỗi điều
khiển về thực chất là một loạt các gate (cổng) sắp xếp theo tuần tự. Sau
đó chuỗi này sẽ được chuyển xuống tầng b. và tại đây sẽ chuyển các tín
hiệu số thành các tín hiệu tương tự để điều khiển các qubit (các qubit nằm ở tầng
a.).
⚛️
#4_Qubit Technologies.
Nói đến máy tính lượng tử là phải nói đến công nghệ chế tạo
các qubit. Không giống như các bóng bán dẫn tích hợp quy mô rất lớn (VLSI), việc
xây dựng một máy tính lượng tử dựa trên các qubit đòi hỏi phải tích hợp các
công nghệ từ nhiều lĩnh vực, bao gồm chân không, laser, hệ thống quang học,
radio tần số (RF), công nghệ vi sóng và bộ điều khiển điện tử kết hợp. Hiện nay
có 2 công nghệ triển vọng nhất là công nghệ siêu dẫn và bẫy ion.
Số lượng qubit được tạo ra là một chỉ số quan trọng. Càng
nhiều qubit thì độ phức tạp về công nghệ càng cao và nhiễu lượng tử càng lớn.
Người ta chia máy tính lượng tử thành 2 loại chính là Gate-based Quantum Computer
(máy tính lượng tử số) và Quantum Annealer (máy ủ lượng tử).
Gate-based Quantum Computer: Đây là trường hợp các
qubit liên đới với nhau (entangled). Loại máy tính lượng tử này rất khó để tạo
ra được số qubit lớn. Một số công ty công nghệ hàng đầu của thế giới đang
nghiên cứu phát triển loại máy tính này, xin kể ra một vài trong số đó:
Google đã chế tạo ra máy tính lượng tử 72 qubit sử dụng công
nghệ siêu dẫn;
IBM đã chế tạo ra máy tính lượng tử 40 qubit sử dụng công
nghệ siêu dẫn;
Intel đã chế tạo ra máy tính lượng tử 49 qubit sử dụng công
nghệ spin qubit;
Các công ty dẫn đầu về loại máy tính lượng tử này gồm Google,
IBM, Intel, Ion Q, Microsoft và Rigetti.
Quantum Annealer:
Trong khi máy tính lượng tử số (gate-based quantum
computer) có thể dùng cho hầu hết các vấn đề thì máy ủ lượng tử (quantum
annealer) lại chỉ thích hợp cho một số vấn đề về tối ưu hóa và lấy mẫu (sampling).
Công ty D-Wave đã sản xuất được máy ủ lượng tử có số qubit đến 2000.
⚛️
#5_Quantum Computer Software.
Ngoài phần cứng, hiển nhiên là chúng ta cần có phần mềm vì nếu
không có phần mềm thì máy tính lượng tử chả có tác dụng gì. Phần mềm bao gồm
ngôn ngữ lập trình (ngôn ngữ lập trình này phải cho phép lập các thuật toán lượng
tử), bộ biên dịch/thông dịch (dịch từ ngôn ngữ lập trình ra ngôn ngữ điều khiển
các qubit), công cụ phân tích, tối ưu hóa, gỡ rối và kiểm tra.
Ngôn ngữ lập trình lượng tử bậc cao: Có thể kể ra
như:
QCL (Quantum Computation Language): tương tự như ngôn
ngữ C;
Q# (Q Sharp): ngôn ngữ do Microsoft phát triển: https://docs.microsoft.com/en-us/quantum/?view=qsharp-preview
Một số ngôn ngữ khác: Quipper, Quafl, LIQuI|> (Liquid).
Trong số các ngôn ngữ lập trình bậc cao, tôi thấy Q#
tương đối dễ tiếp cận.
Nếu tính ngôn ngữ nhúng cũng là bậc cao thì có thể kể đến Cirq
do Google phát triển. Cirq thực chất là một gói trong ngôn ngữ Python. Nếu ai
đã lập trình Python rồi thì việc lập trình cho máy tính lượng tử dễ như một nốt
nhạc! Đương nhiên người lập trình phải hiểu bản chất của điện toán lượng tử.
Ngôn ngữ lập trình lượng tử bậc thấp (tương tự như ngôn
ngữ Assembly trong máy tính cổ điển): Có thể kể ra như: QASM, OpenQASM, QcoDeS,
ARTIQ. Các ngôn ngữ này có các câu lệnh trực tiếp điều khiển các qubit.
Mô phỏng: Đây là dùng máy tính cổ điển để mô phỏng
máy tính lượng tử. Việc này đặc biệt hữu ích trong quá trình phát triển các phần
mềm lượng tử. Tuy nhiên, câu hỏi đặt ra là các máy tính cổ điển có thể mô phỏng
đến mức độ nào của máy tính lượng tử? Người ta tính ra là siêu máy tính hiện
nay có thể mô phỏng đến máy tính lượng tử cỡ 50 qubit.
Kiểm tra, gỡ rối: Đối với máy tính lượng tử, đây là
các vấn đề cực kỳ khó: độ phức tạp của hệ thống lượng tử, giới hạn của khả năng
mô phỏng bằng máy tính cổ điển, và bản chất của lượng tử: không đọc được giá trị
của các hệ số khi hệ thống lượng tử ở trạng thái chồng chập (superposition) –
vì nếu đọc thì hệ thống sẽ tự động chuyển từ trạng thái chồng chập sang trạng
thái nhị phân và hủy toàn bộ các hệ số trước đó.
Cách tiếp cận hiện nay chủ yếu là dựa vào mô phỏng và thông
qua điện toán đám mây. Nghĩa là chúng ta – những người lập trình – có thể viết
code trong các ngôn ngữ như Q#, trong Python, … Sau đó gửi mã qua đám mây đến một
hệ sinh thái lượng tử (Google, Microsoft, IBM, …) để hệ sinh thái đó cho “chạy”
chương trình trên máy tính lượng tử.
⚛️
#6_Quantum Algorithms.
Muốn biến máy tính lượng tử hơn hẳn máy tính cổ điển bắt buộc
phải có thuật toán riêng cho điện toán lượng tử. Với các đặc tính riêng của lượng
tử, có cảm giác rằng với một máy tính lượng tử có n qubit thì một nhịp tính của
máy này có thể thực hiện 2n phép tính. Mặt khác, khi kết thúc quá
trình tính toán, kết quả quan sát thấy chỉ là một dãy n bit thông thường. Đây
chính là điểm rất thách thức khi thiết kế các thuật toán lượng tử.
Đâu là những viên gạch nền tảng cho các thuật toán lượng tử
với đặc điểm vừa nêu trên? Một trong số đó là biến đổi Fourier lượng tử (Quantum
Fourier Transform, viết tắt là QFT – tham khảo: https://en.wikipedia.org/wiki/Quantum_Fourier_transform).
Có thể coi thuật toán phân tích thành thừa số nguyên tố của
Peter Shor là một ứng dụng thông minh của biến đổi Fourier lượng tử.
Ngoài các thuật toán trên cần phải kể đến một số thuật toán
khác như thuật toán Grover, các thuật toán lượng tử mô phỏng Hamilton, các thuật
toán lượng tử giải phương trình đại số tuyến tính, …
Tuy nhiên, nhìn chung thuật toán lượng tử vẫn đang là mảnh đất
vỡ hoang.
⚛️
#7_Quantum R&D.
Theo báo cáo của công ty McKinsey năm 2015 thì vào thời điểm
đó thế giới đã chi 1,5 tỷ euro cho nghiên cứu khoa học và công nghệ lượng tử (Quantum
Science and Technology) trong đó lớn nhất là Hoa Kỳ (360 triệu euro), tiếp đến
là Trung Quốc (220 triệu euro), Đức (120 triệu euro), Canada (100 triệu euro),
Australia (75 triệu euro). Trong khu vực Đông Nam Á, chỉ thấy có Singapore (44
triệu euro).
Ở Việt Nam, trong Quyết định 3685/QĐ-BKHCN về Danh mục các
công nghệ chủ chốt của công nghiệp 4.0 ban hành ngày 3/12/2018) tôi thấy có điện
toán lượng tử đứng thứ 8 trong tổng số 43 công nghệ chủ chốt. Tuy nhiên, tôi
không có thông tin về nhóm nào đã nghiên cứu về vấn đề này. Theo chủ quan của
tôi, thuật toán lượng tử vẫn còn là vấn đề còn nhiều cái để mày mò và có thể
“chạy thử” thuật toán trên các platfform mà các công ty công nghệ hàng đầu cung
cấp dưới dạng open source và/hoặc miễn phí.
Nhân sắp đến ngày khai giảng, xin phép anh/chị nhàn đàm về một
vấn đề ICT mà tôi nghĩ là còn mới mẻ.