Giới thiệu về Fourier Transform và ý nghĩa của nó trong cơ học lượng tử và điện toán lượng tử. Tìm hiểu về 3 thuật toán Deutsch-Jozsa, Bernstein-Vazirani và Quantum Fourier Transform.
Fourier Transform (Biến đổi Fourier) luôn là phép toán đẹp nhất và ấn tượng nhất đối với mình. Điều đầu tiên sau khi mình đọc vài chương sách về điện toán lượng tử là nghĩ ngay đến độ sexy của em toán này khi áp dụng trên máy tính lượng tử, và đó cũng là động lực để mình để viết bài viết này. Ứng dụng máy tính lượng tử trong việc thực hiện Fourier Transform sẽ khá thú vị và đẹp mắt, đây là một case study hoàn hảo cho điện toán lượng tử.
Các lý thuyết cơ bản về điện toán lượng tử sẽ bị bỏ qua trong bài viết này, bù lại phần toán học sẽ được giải thích và chứng minh một cách chi tiết và chặt chẽ.
Thuật toán Deutsch-Jozsa
Giới thiệu về Deutsch-Jozsa
Đây là thuật toán được phát triển từ Deutsch Algorithm (1985) trong việc xác định xem một hàm là hàm hằng (constant function) hay là hàm cân bằng (balanced function) với input là 1bit duy nhất, và được giải quyết bằng 1 truy vấn trên máy tính lượng tử, thay vì 2 truy vấn như máy tính truyền thống. Deutsch-Jozsa Algorithm mở rộng vấn đề này cho n input nhưng vẫn chỉ cần 1 truy vấn.
Cho hàm f:{0,1}n↦{0,1}, nhận đầu vào là một chuỗi bit có độ dài n và trả về 1bit. Số tham số có thể nhận được là số cặp của tích Descartes (Cartesian product)∣{0,1}n∣=2n. Mục tiêu của Deutsch-Jozsa Algorithm là xác định xem hàm f là hàm hằng hay hàm cân bằng.
Định nghĩa rằng một hàm hằng là một hàm mà giá trị trả về luôn giống nhau cho mọi input.
fcon:{0,1}n↦{0,1}=c,c∈{0,1}
Trong đó, một hàm cân bằng là một hàm mà giá trị trả về khác nhau cho một nửa input và giống nhau cho nửa còn lại.
fbal:{0,1}n↦{0,1},∣f−1(0)∣=∣f−1(1)∣=2n−1
Sự cân bằng là một trong những "tiêu chí quan trọng nhất đối với các hàm boolean (boolean function) trong mật mã học (cryptography)". Nếu một hàm boolean không cân bằng, nó sẽ có độ lệch thống kê (bias), khiến mã dễ bị phân tích và tấn công (cụ thể là Correlation Attack (Tấn công Tương quan)).1
Để kiểm tra một hàm là hàm hằng hay hàm cân bằng, phương pháp cổ điển có độ phức tạp O(2n), cụ thể là phải truy vấn 2n−1+1 lần trong trường hợp xấu nhất, đây là trường hợp mà toàn bộ một nửa đầu vào 2n−1 trả về cùng một giá trị và phải xác định bằng cách kiểm tra thêm 1 lần nữa.
Thuật toán Deutsch-Jozsa dưới dạng cổng (source: Qiskit.org)
Để có thể xác định hàm f chỉ bằng một truy vấn duy nhất, thay vì kiểm tra từng đầu vào một cách tuần tự như trong phương pháp cổ điển, Deutsch-Jozsa Algorithm tận dụng tính chất đặc biệt của hiện tượng chồng chập lượng tử (superposition) để kiểm tra tất cả các đầu vào cùng một lúc bằng cách sử dụng Hadamard Gate (Cổng Hadamard).
Sau cùng, nếu f là hàm hằng, tất cả các trạng thái sẽ cùng pha, khi giao thoa sẽ cộng hưởng (constructive interference) và khiến cho biên độ (amplitude) (xác suất đo được) đạt đến 100%.
Ngược lại, nếu f là hàm cân bằng, một nửa các trạng thái sẽ ngược pha, khi giao thoa sẽ triệt tiêu (destructive interference) và khiến cho biên độ (xác suất đo được) trở thành 0%.
H⊗n∣0⟩⊗n=(H∣0⟩)⊗n=(21∣0⟩+21∣1⟩)⊗n=2n1(∣0⟩+∣1⟩)⊗n=2n1x∈{0,1}n∑∣x⟩xem lại (6)
Ở dấu bằng cuối cùng, người đọc có thể tự chứng minh bằng quy nạp.
Do đó, trạng thái ở giai đoạn này là:
∣ψ1⟩=H⊗n∣ψ0⟩=H⊗n∣0⟩⊗n∣−⟩=2n1x∈{0,1}n∑∣x⟩∣−⟩=2n1x∈{0,1}n∑∣x⟩∣−⟩xem lại (8)
Giai đoạn 2: Sử dụng Oracle
Oracle, hay còn gọi là Black-box, được kí hiệu là Of, là một cổng giúp hàm f có thể khả nghịch (invertible) trong không gian trạng thái. Có hai lí do không thể sử dụng trực tiếp hàm f mà phải thông qua Oracle:
Vì hàm f:{0,1}n↦{0,1}m và đôi khi n=m (như trong bài toán này đầu vào là n và đầu ra là 1). Một ma trận n×m chắc chắn không khả nghịch, nếu một cổng lượng tử có số lượng input và output khác nhau sẽ vi phạm nguyên lý bảo toàn hạt lượng tử vì các hạt không thể bị mất đi hay nhân bản. Cụ thể hơn, các cổng lượng tử phải là ma trận đơn nhất (unitary matrix), đảm bảo các kiều kiện phức (complex) và trực chuẩn (orthonormal).
Ngay cả khi n=m, ma trận vẫn có thể không khả nghịch. Nếu tồn tại x=y sao cho f(x)=f(y), khi đó O∣x⟩=O∣y⟩ trong khi O†O∣x⟩=O†O∣y⟩. Điều này có nghĩa là không thể áp dụng phép chuyển vị liên hợp (conjugate transpose) lên O, hay nói cách khác, O†=O−1 không tồn tại.
Điều này có thể giải quyết bằng cách bổ sung vào một lượng m các Ancilla để giữ kết quả của hàm f.
Of∣x⟩∣y⟩=∣x⟩∣y⊕f(x)⟩∀x∈{0,1}n,y∈{0,1}m
Trong bài toán này, vì số lượng output là 1, ta có thể sử dụng 1qubit có trạng thái ∣−⟩ làm Ancilla.
Ở dấu bằng cuối cùng, người đọc có thể tự chứng minh bằng quy nạp.
Trạng thái ở giai đoạn này là:
∣ψ3⟩=H⊗n∣ψ2⟩=H⊗n2n1x∈{0,1}n∑(−1)f(x)∣x⟩=2n1x∈{0,1}n∑(−1)f(x)H⊗n∣x⟩=2n1x∈{0,1}n∑(−1)f(x)(2n1y∈{0,1}n∑(−1)x⋅y∣y⟩)=2n1y∈{0,1}n∑x∈{0,1}n∑(−1)f(x)+x⋅y∣y⟩xem lại (13)
Giai đoạn 4: Đo trạng thái
Trước tiên chúng ta phân tích xác suất của trạng thái ∣0⟩⊗n. Giả sử ∣y⟩=∣0⟩⊗n.
Vì vậy, ta chỉ cần đo trạng thái ∣ψ3⟩ để xác định hàm f là hàm hằng hay hàm cân bằng. Nếu đo được ∣0⟩⊗n thì hàm f là hàm hằng, còn nếu đo được bất kì giá trị nào khác, hàm f là hàm cân bằng.
Trong Hidden Shift Problem, một hàm f được xác định bởi phép XOR (exclusive OR) 2 chuỗi bitx và s với n độ dài. Mục tiêu là xác định chuỗi s trong hàm f như sau:
Vì phép XOR khi áp dụng lên chính nó sẽ bằng 0, các giá trị của (−1)x⋅0 sẽ bằng 1, và tổng đến ∣{0,1}n∣=2n lần sẽ bằng 2n, triệt tiêu với hệ số phía trước.
2n1x∈{0,1}n∑(−1)x(s⊕s)=1
Do đó:
Pr(measure ∣s⟩)=2n1x∈{0,1}n∑(−1)f(x)2=1
Vì vậy, ta chỉ cần đo trạng thái của ∣ψ3⟩ và đó chính là chuỗi s cần tìm.
Sơ lược về Fourier Transform
Fourier Transform
Fourier Transform là một trong những phép toán quan trọng nhất trong toán học, giúp chuyển đổi một tín hiệu từ miền thời gian t sang miền tần số ω và có vai trò quan trọng trong hầu hết các lĩnh vực khoa học. Các thuật toán điện toán lượng tử cũng sử dụng Quantum Fourier Transform rất nhiều, đơn cử như Shor's Algorithm (Thuật toán Shor) nổi tiếng đã áp dụng Quantum Fourier Transform để tìm ra chu kỳ của hàm tuần hoàn f(x)=axmodN trong thời gian đa thức.
Việc hình dung được Fourier Transform có thể giúp giải thích được rất nhiều hiện tượng lượng tử nói riêng và các mối quan hệ nói chung.
Các lý thuyết về không-thời gian (space-time), như Special Relativity (Thuyết tương đối Hẹp) của Albert Einstein có nhiều mối liên hệ mật thiết đối với phép Fourier Transform. Lí do là vì chúng ta đang quan sát một không gian phụ thuộc vào thời gian, rất nhiều tính chất và đặc trưng đã bị loại bỏ, Fourier Transform có thể tìm thấy và lí giải được nhiều hiện tượng nhờ vào việc chuyển đổi sang một miền tương đối hơn 2.
Mối quan hệ nghịch đảo trong Fourier Transform có thể được hiểu rằng một nốt (âm thanh) sắc nét ở một tần số duy nhất sẽ kéo theo một hàm tuần hoàn sin vô hạn và không xác định. Ngược lại, nếu âm thanh quá ngắn, tần số sẽ không thể được xác định chính xác và kéo theo phổ trải rộng vô hạn. Vì vậy để xác định chính xác (các) tần số của một âm thanh, âm thanh đó phải đủ dài để (các) phổ có "thời gian" hội tụ về (các) tần số riêng biệt và rõ ràng.
Tương tự với Uncertainty Principle, mối quan hệ nghịch đảo này cho thấy nếu một hạt có vị trí càng chính xác thì động lượng của hạt sẽ không chắc chắn và ngược lại.
Ngược lại, nếu hàm vị tríψ(x) trải rộng (không có sự hội tụ rõ ràng), thì hạt có vị trí rất bất định (hàm rộng trong miền không gian). Nhưng khi chuyển đổi qua Fourier Transform, hàm động lượngψ(p) sẽ trở nên tập trung. Tức là động lượng của hạt sẽ rất xác định (độ rộng nhỏ trong miền động lượng). Điều này cũng tuân theo Uncertainty Principle: Biết động lượng càng chính xác, vị trí càng bất định.
Ngoài không-thời gian và vị trí-động lượng. Fourier Transformf(x)↔f^(ξ) còn có thể áp dụng cho rất nhiều mối quan hệ khác miễn chúng là các đại lượng liên hợp (conjugate variables). Thậm chí còn có thể xác định hình dạng và cấu trúc của hạt nhân nguyên tử bằng mối quan hệ giữa phân bổ không gian - phân bổ động lượng (spatial distribution - momentum distribution)34.
f:R↦CFTf^:R↦C
Nói một cách khác Fourier Transform giúp chúng ta phân tích một sóng đã được giao thoa thành các thành phần cơ bản (tần số). Ngược lại Inverse Fourier Transform (hay IFT; Biến đổi Fourier Nghịch đảo) giúp chúng ta tổ hợp các thành phần cơ bản để tạo ra một sóng giao thoa.
Quantum Fourier Transform có độ phức tạp là O(log2N), vượt trội hơn theo hàm mũ đối với Fast Fourier TransformO(NlogN). Trên máy tính truyền thống, một chuỗi nhị phân (binary) độ dài N=2n sẽ được biểu diễn bằng 2nbit0 và 1. Máy tính lượng tử có thể biểu diễn chuỗi nhị phân này chỉ bằng nqubit. Đó là lí do tại sao thực tế Quantum Fourier Transform vẫn có độ phức tạp là O(n2) tuy nhiên n=logN.
Để hiểu tại sao máy tính lượng tử chỉ cần nqubit cho 2n phần tử, chúng ta có thể nhớ lại rằng để mô phỏng được nqubit chúng ta sẽ cần tới 2nbit vì đây là số lượng trạng thái có thể có. Vì mỗi trạng thái sẽ có một pha (và biên độ) tương ứng nên chúng ta sẽ lưu trữ được 2npha.
Một so sánh thú vị là một số nguyên không dấu (unsigned integer)256bit có thể biểu diễn được một con số (xấp xỉ) số luợng nguyên tử trong vũ trụ (2256−1) và máy tính lượng tử chỉ cần 8qubit để làm điều đó (28=256). Và tất nhiên nếu chúng ta có thể biến mỗi một nguyên tử thành một bit, thì toàn bộ vũ trụ cũng chỉ mô phỏng được 256qubit.
Ý tưởng của QFT
Thuật toán Quantum Fourier Transform dưới dạng cổng (source: Hamza Jaffali @ Medium.com)
Pha là một thành phần tối quan trọng trong điện toán lượng tử. Một trạng thái qubit ngoài việc có thể chồng chập giữa ∣0⟩ và ∣1⟩ còn có thể xoay quanh z^ mà vẫn giữ trạng thái chồng chập với biên độ không đổi. Điều khó nhất đối với một thuật toán lượng tử là truy vết được kết quả mong muốn sau khi thực hiện các phép tính song song.
Chúng ta có thể thấy rằng x^k là tích vô hướng giữa x và wk thể hiện độ mạnh của thành phần (tần số) trong chuỗi. Việc tích luỹ (tích vô hướng) các pha này sẽ được thực hiện qua cổng Controlled Phase Shift Gate (Cổng Dịch Pha Có Điều kiện). Cụm từ "Controlled" ở mang ý nghĩa rằng sẽ có nhiều hơn 2qubit tương tác với nhau (gồm các controller và một target).
Mở rộng thêm chút nữa, khi chia cho 2l (hoặc trong lập trình gọi là shift sang phải lbit), ta sẽ được một phần nguyên và một phần thập phân (của số nhị phân):
Ta có thể bỏ qua phần nguyênJ khi luỹ thừa cùng với e2πi bằng Euler's Identity (Đồng nhất thức Euler):
e2πi(2lj)=e2πiJ+2πi0.jl−1jl−2…j0=e2πiJ⋅e2πi0.jl−1jl−2…j0=(cos(2π)+isin(2π))J⋅e2πi0.jl−1jl−2…j0=(1+i0)J⋅e2πi0.jl−1jl−2…j0=1J⋅e2πi0.jl−1jl−2…j0=e2πi0.jl−1jl−2…j0xem lại (37)
∣j⟩=2n1k=0∑2n−1e2πij(2nk)∣k⟩=2n1k0=0∑1k1=0∑1…kn−1=0∑1e2πij(2nkn−1kn−2…k0)∣kn−1kn−2…k0⟩=2n1k0=0∑1k1=0∑1…kn−1=0∑1e2πij(2n∑l=0n−1kl⋅2l)∣kn−1kn−2…k0⟩=2n1k0=0∑1k1=0∑1…kn−1=0∑1e2πij∑l=0n−1(2n−lkl)(∣kn−1⟩⊗∣kn−2⟩⊗…⊗∣k0⟩)=2n1k0=0∑1k1=0∑1…kn−1=0∑1(e2πij(21kn−1)∣kn−1⟩⊗e2πij(22kn−2)∣kn−2⟩⊗⋯⊗e2πij(2nk0)∣k0⟩)=2n1k0=0∑1k1=0∑1…kn−1=0∑1(l=0⨂n−1e2πij(2n−lkl)∣kl⟩)=2n1l=0⨂n−1(kl=0∑1e2πij(2n−lkl)∣kl⟩)=2n1l=0⨂n−1(∣0⟩+e2πi(2n−lj)∣1⟩)=2n1(∣0⟩+e2πi(2nj)∣1⟩)⊗(∣0⟩+e2πi(2n−1j)∣1⟩)⊗…⊗(∣0⟩+e2πi(21j)∣1⟩)=2n1(∣0⟩+e2πi(0.jn−1jn−2⋯j0)∣1⟩)⊗(∣0⟩+e2πi(0.jn−2⋯j0)∣1⟩)⊗…⊗(∣0⟩+e2πi(0.j0)∣1⟩)=21(∣0⟩+e2πi(0.jn−1jn−2⋯j0)∣1⟩)⊗21(∣0⟩+e2πi(0.jn−2⋯j0)∣1⟩)⊗…⊗21(∣0⟩+e2πi(0.j0)∣1⟩)xem lại (36)xem lại (38)
Nhắc lại:
0.jl−1jl−2⋯j0=2jl−1+22jl−2+⋯+2lj0
Vậy trạng thái của qubit thứ l (từ 0 đến n−1) sẽ là:
Phần chứng minh khá dài và khó theo dõi nhưng sẽ rất hữu ích để có một trực giác tốt về Quantum Fourier Transform (và những phần như này sẽ không tìm được trên bất kì tài liệu nào khác). Cho những ai lười đọc đống kí tự trên, chúng ta có thể xem qua ví dụ sau cho nqubit (chỉ số từ 0 đến n−1):
Tuy nhiên chúng ta vẫn còn thiếu phae2πi(2ljk), hoá ra 2ljk chính là pha của trạng thái qubit∣jk⟩. Chúng ta cần một cổng nào đó có thể thay đổi pha đối với trạng thái cơ bản∣1⟩, và đây chính là công dụng của Phase Shift Gate (Cổng Dịch Pha).
Rk=[100e2πi(2k1)]
Ví dụ:
Rk∣0⟩Rk∣1⟩=∣0⟩=e2πi(2k1)∣1⟩
Phase Shift Gate sẽ không thay đổi pha nếu trạng thái là ∣0⟩ và thay đổi một phaθ=2πi(2k1) quanh z^ nếu trạng thái là ∣1⟩. Những cổng logic như này sẽ được gọi là cổng kiểm soát với một target và các controller.
Giải thích theo nghĩa hình học, eiθ=cosθ+isinθ là trị riêng (eigenvalue) và trạng thái ∣1⟩ là vector riêng (eigenvector) của ma trận Rk. Nhắc lại đại số tuyến tính, các vector riêng là các hướng thể hiện sự biến đổi không gian của ma trận so với không gian ban đầu, các trị riêng tương ứng thể hiện mức độ ảnh hưởng của từng vector riêng đó. Do đó, một ma trận xoay sẽ có phương trình đặc trưng (characteristic equation) vô nghiệm (tức là có nghiệm phức) vì các số phức biểu diễn phép xoay.
Tuy nhiên như vậy vẫn chưa đủ, vì ta thấy rằng qubit∣j^l⟩ phụ thuộc vào pha của toàn bộ các qubitjn−l−1jn−l−2…j0. Hay nói cách khác, pha của qubit∣j^l⟩bị điều khiển bởi các qubit khác. Chúng ta đến với Controlled Phase Shift Gate.
Hoá ra ∣j^n−l−1⟩ lại chính là trạng thái ∣ψ2(l)⟩ vừa tính được ở giai đoạn 2 (trạng thái của qubit thứ l của input sau khi qua Hadamard và các Controlled Phase Shift). Điều này rất dễ nhận ra nếu chúng ta nhìn lại công thức Quantum Fourier Transform mà chúng ta đã xây dựng ở trên.
Pha của qubit đầu tiên của output ∣j^0⟩ phụ thuộc vào tất cả các bit input jn−1…j0.
Pha của qubit thứ hai của output ∣j^1⟩ phụ thuộc vào các bit input jn−2…j0.
...
Pha của qubit cuối cùng của output ∣j^n−1⟩ chỉ phụ thuộc vào bit input j0.
Trong khi đó, mạch lượng tử chúng ta xây dựng lại tính toán:
Trạng thái cuối cùng của qubit input ∣j0⟩ (sau các cổng) chỉ phụ thuộc vào chính nó (chỉ qua 1 cổng Hadamard).
Trạng thái cuối cùng của qubit input ∣j1⟩ (sau các cổng) phụ thuộc vào ∣j1⟩ và ∣j0⟩.
...
Trạng thái cuối cùng của qubit input ∣jn−1⟩ (sau các cổng) phụ thuộc vào tất cả các qubit input jn−1…j0.
Do đó, trạng thái cuối cùng của qubit input ∣jl⟩ chính là trạng thái mong muốn của qubit output ∣j^n−l−1⟩. Chúng ta cần đảo ngược thứ tự các qubit ở cuối thuật toán bằng cách sử dụng các SWAP Gate (Cổng SWAP).