随着量子机器学习和算法的不断深入学习,量子逻辑线路图也是各种教程和文献的常客,然而作为连大物都没学过的非物理学学专业学生想要看懂量子逻辑线路还是有些许的困难,但是即使它是太行王屋,我也只能咬着牙去充当愚公了!本期的博客内容只有一个,从基础开始,学习量子线路图!
量子逻辑电路
一 . 常见逻辑门
和传统计算机一样,对经典比特实行操作的是各种逻辑门,量子计算机依赖的量子逻辑线路中起决定性作用的也是各种各样的逻辑门,故而,在正式的了解综合量子线路,我们先将注意力集中在下面常见的几种逻辑门上!
(1) 单量子逻辑门
泡利-X门(Pauli-X gate)
泡利-X门操作单个量子比特,相当于经典的逻辑非门。如操作前量子位为 |1〉则经过泡利X门操作后会换成 |0〉
例如:
X
∣
0
⟩
=
(
0
1
1
0
)
(
1
0
)
=
(
0
1
)
=
∣
1
⟩
X
∣
1
⟩
=
(
0
1
1
0
)
(
0
1
)
=
(
1
0
)
=
∣
0
⟩
\boldsymbol{X}|0\rangle=\left(\begin{array}{ll} 0 & 1 \\ 1 & 0 \end{array}\right)\left(\begin{array}{l} 1 \\ 0 \end{array}\right)=\left(\begin{array}{l} 0 \\ 1 \end{array}\right)=|1\rangle \quad \boldsymbol{X}|1\rangle=\left(\begin{array}{ll} 0 & 1 \\ 1 & 0 \end{array}\right)\left(\begin{array}{l} 0 \\ 1 \end{array}\right)=\left(\begin{array}{l} 1 \\ 0 \end{array}\right)=|0\rangle
X∣0⟩=(0110)(10)=(01)=∣1⟩X∣1⟩=(0110)(01)=(10)=∣0⟩
泡利-Y门(Pauli-Y gate)
泡利-Y门操作单个量子比特。 有点类似于复数操作, 这个门可以以一个泡利 Y 矩阵表示。其线性代数矩阵表示为:
Y
=
(
0
−
i
i
0
)
=
−
i
∣
0
⟩
⟨
1
∣
+
i
∣
1
⟩
⟨
0
∣
Y=\left(\begin{array}{cc} 0 & -i \\ i & 0 \end{array}\right)=-i|0\rangle\langle 1|+i| 1\rangle\langle 0|
Y=(0i−i0)=−i∣0⟩⟨1∣+i∣1⟩⟨0∣
泡利-Z 门(Pauli-Z gate)
泡利-Z门也是操作单个量子比特。 这个门保留基本状态
∣
0
⟩
|0\rangle
∣0⟩ 不变并且将|1〉换成-|1〉:
Z
∣
0
⟩
=
(
1
0
0
−
1
)
(
1
0
)
=
(
1
0
)
=
∣
0
⟩
Z
∣
1
⟩
=
(
1
0
0
−
1
)
(
0
1
)
=
(
0
−
1
)
=
−
∣
1
⟩
\boldsymbol{Z}|0\rangle=\left(\begin{array}{cc} 1 & 0 \\ 0 & -1 \end{array}\right)\left(\begin{array}{l} 1 \\ 0 \end{array}\right)=\left(\begin{array}{l} 1 \\ 0 \end{array}\right)=|0\rangle \quad \boldsymbol{Z}|1\rangle=\left(\begin{array}{cc} 1 & 0 \\ 0 & -1 \end{array}\right)\left(\begin{array}{l} 0 \\ 1 \end{array}\right)=\left(\begin{array}{c} 0 \\ -1 \end{array}\right)=-|1\rangle
Z∣0⟩=(100−1)(10)=(10)=∣0⟩Z∣1⟩=(100−1)(01)=(0−1)=−∣1⟩
阿达马门(Hadamard Gate)
H门可以说是量子计算中最重要的单量子比特门了,该逻辑门可以实现对
∣
0
⟩
|0\rangle
∣0⟩或者
∣
1
⟩
|1\rangle
∣1⟩ 进行操作,然后使其转化为叠加态!
H
∣
0
⟩
=
(
1
1
1
−
1
)
(
1
0
)
=
1
2
(
1
1
)
=
∣
0
⟩
+
∣
1
⟩
2
H
∣
1
⟩
=
(
1
1
1
−
1
)
(
0
1
)
=
1
2
(
1
−
1
)
=
∣
0
⟩
−
∣
1
⟩
2
\boldsymbol{H}|0\rangle=\left(\begin{array}{cc} 1 & 1 \\ 1 & -1 \end{array}\right)\left(\begin{array}{l} 1 \\ 0 \end{array}\right)=\frac{1}{\sqrt{2}}\left(\begin{array}{l} 1 \\ 1 \end{array}\right)=\frac{|0\rangle+|1\rangle}{\sqrt{2}} \quad \boldsymbol{H}|1\rangle=\left(\begin{array}{cc} 1 & 1 \\ 1 & -1 \end{array}\right)\left(\begin{array}{l} 0 \\ 1 \end{array}\right)=\frac{1}{\sqrt{2}}\left(\begin{array}{c} 1 \\ -1 \end{array}\right)=\frac{|0\rangle-|1\rangle}{\sqrt{2}}
H∣0⟩=(111−1)(10)=21(11)=2∣0⟩+∣1⟩H∣1⟩=(111−1)(01)=21(1−1)=2∣0⟩−∣1⟩
量子保密通信中经常用
H
H
H变换(即Hadamard门)来产生这种最大“不确定态”以保证安全性!
总结上述比较重要的三个单量子比特门,可以下面公式概括:
(2) 双量子逻辑门
受控非门CNOT(Control-NOT gate)
这就上升到两个量子比特的控制层面了,和传统的非门还不太一样,这里的非门是受第一个量子比特控制的,因为第二个量子比特只有在第一个量子比特为 |1〉的时候才可以进行NOT操作,否则整个双量子态就保持不变!
就像这样:
其电路表示为:
受控互换门SWAP(Swap gate)
其主要作用是交换两个量子比特的量子位。受控互换门的逻辑构成可以由三个逻辑非门组成,先看线路图:
可以非常清晰的看到啊,这里有三列次序相反的
C
N
O
T
CNOT
CNOT门来实现比特的交换 ,问题就来了,两个连续且相反的
C
N
O
T
CNOT
CNOT 就可以了啊,三个是不是多余了,非常简单哦,带进去试一试就知道了!
(3) 三量子逻辑门
Toffoli 门
这个能够操作三个量子比特的逻辑门也叫CCNOT门,和受控非门有点类似,当输入端含有三个量子比特,其中第一个和第二个量子比特均是控制比特,最后一个量子比特是目标比特;如果前两个量子比特是 |1〉,则对第三个量子比特进行类似于经典的逻辑非门处理,反之则整个三量子态不做操作。
线路图为:
其实上面说的这些都是非常简单了,因为前面我们都见过,但是直接上一个算法的综合线路图,我就蒙了,看了好长时间也没看懂,哎,我就很烦!
二 . 线路图简介
我们都知道的是:量子计算其实就是,对于 n n n 个 q u b i t qubit qubit ,执行一系列的算符操作,最后测量结果,即从数据结构的角度来说,它是一种集合了量子逻辑门,测量,以及复位的一种有序数据序列!这也是其实现物理电路的基础!而且对于任何量子计算程序都可以用一系列的量子电路和非并行经典计算来表示!
我们以这个图为例来看一下:绝大部分的线路图常常画出横着并排的 n n n 条直线,从左到右代表着时间顺序,而不同的直线代表不同的 qubit(有时也表示一个量子寄存器) ;在这些直线上排列着各种小方块大方块还有竖线,代表着各种不同的单 qubit 或多 qubit 幺正算符。
注意: 最左侧起始时有几条线,最右侧结束是也要有几条线,量子计算的最大特色就在于 “可逆性” ,如果左右电线的数量不一致,也就不存在可逆这一说了!
上图将整个线路图分为三个主要组成部分,分别是 初始化和重置,量子门操作 以及最后的 测量。
其中测量操作对应的符号是图中那个像仪表盘一样的东西,通常接受前面线路中一个量子位寄存器,对其进行测量,并将结果输出为经典信息!就像下面这样:
不过这里要知道噢,输入的是一条线,输出的确是两条线了,这绝对不是和 “可逆性” 自相矛盾,测量后的这两条线已经不是两个量子比特了,而是一个叠加态对应的两个概率幅哦!!
现在结合量子逻辑门的简单概念再来看上面的电路图 ,基本上也就没啥问题呢!
三. 细节拿捏
首先第一点,如果是多个单量子比特门连续作用时:
像这样的三个逻辑门,按照常理来说肯定是先作用在算符
A
A
A,然后是
B
B
B,最后是
C
C
C,但是电路中却恰恰相反,真正的作用顺序为
C
B
A
CBA
CBA ,只是在电路中这样表示而已!
第二点,逻辑门的简化表达,往往在稍微复杂的量子电路中,我们不可能将每一个逻辑门都详细的表达出来,一般有两种简化方式,第一种是 “改写”,特别是多量子操作比特门的时候,“改写”会更加的简洁明了,就像下面这样:
或者是下面这样:
那第二种简化方式就是“结合”,有时候是“合二为一”,甚至可以多个量子门由一个来表示,即:
其实也就是将部分逻辑门结合起来用一个新的逻辑门来代替,形成一个新的子程序,就像写代码是建立的各种各样的函数,不需要追求其具体细节,了解主要的功能作用即可!
四. 实例学习
光说不练假把式,以下图为例,简单的分析一下线路图是如何支撑算法的:
这其实是一个通信算法,此时Alice和Bob就闪亮登场了,Alice要发送一个信息给Bob,而这回,这个信息,是一个qubit,但是Alice并不知道qubit的状态,我们不能选择用经典的bit去描述,因为qubit是连续的,并不是离散的,其中,我们默认最上方的
∣
ψ
⟩
|\psi\rangle
∣ψ⟩ 是Alice想要传输的量子态!下方条线初始化都是
∣
0
⟩
|0\rangle
∣0⟩ 态。
我们先看下面的两条线,第一个
∣
0
⟩
|0\rangle
∣0⟩ 态 被
H
a
d
a
m
a
r
d
Hadamard
Hadamard 门作用后,两条线在一块得到的状态是:
1
2
(
∣
0
⟩
+
∣
1
⟩
)
⊗
∣
0
⟩
=
1
2
(
∣
00
⟩
+
∣
10
⟩
)
\frac{1}{\sqrt{2}}(|0\rangle+|1\rangle) \otimes|0\rangle=\frac{1}{\sqrt{2}}(|00\rangle+|10\rangle)
21(∣0⟩+∣1⟩)⊗∣0⟩=21(∣00⟩+∣10⟩)
之后根据从左到右的时间顺序,下一个出现的量子逻辑门是
C
N
O
T
CNOT
CNOT门,前面也详细的介绍过这个逻辑门的效果,我们可以直接写出:
C
N
O
T
0
,
1
1
2
(
∣
00
⟩
+
∣
10
⟩
)
=
1
2
(
C
N
O
T
0
,
1
∣
00
⟩
+
C
N
O
T
0
,
1
∣
10
⟩
)
=
1
2
(
∣
00
⟩
+
∣
11
⟩
)
\mathrm{CNOT}_{0,1} \frac{1}{\sqrt{2}}(|00\rangle+|10\rangle)=\frac{1}{\sqrt{2}}\left(\mathrm{CNOT}_{0,1}|00\rangle+\mathrm{CNOT}_{0,1}|10\rangle\right)=\frac{1}{\sqrt{2}}(|00\rangle+|11\rangle)
CNOT0,121(∣00⟩+∣10⟩)=21(CNOT0,1∣00⟩+CNOT0,1∣10⟩)=21(∣00⟩+∣11⟩)
接下来,实现第二个受控非门, A l i c e Alice Alice 的 ∣ ψ ⟩ |\psi\rangle ∣ψ⟩ 态和 B o b Bob Bob 的一个 q u b i t s qubits qubits组合为:
1
2
∣
ψ
⟩
⊗
(
∣
00
⟩
+
∣
11
⟩
)
\frac{1}{\sqrt{2}}|\psi\rangle \otimes(|00\rangle+|11\rangle)
21∣ψ⟩⊗(∣00⟩+∣11⟩)
其中,
A
l
i
c
e
Alice
Alice 的
∣
ψ
⟩
|\psi\rangle
∣ψ⟩ 用叠加态
∣
ψ
⟩
=
α
∣
0
⟩
+
β
∣
1
⟩
|\psi\rangle=\alpha|0\rangle+\beta|1\rangle
∣ψ⟩=α∣0⟩+β∣1⟩ 来表示,进而目前在未进行第二次
C
N
O
T
CNOT
CNOT 门操作之前的状态为:
1 2 ( α ∣ 000 ⟩ + α ∣ 011 ⟩ + β ∣ 100 ⟩ + β ∣ 111 ⟩ ) \frac{1}{\sqrt{2}}(\alpha|000\rangle+\alpha|011\rangle+\beta|100\rangle+\beta|111\rangle) 21(α∣000⟩+α∣011⟩+β∣100⟩+β∣111⟩)
受控非门作用后(这里只需要看前两个比特):
1
2
(
α
∣
000
⟩
+
α
∣
011
⟩
+
β
∣
110
⟩
+
β
∣
101
⟩
)
\frac{1}{\sqrt{2}}(\alpha|000\rangle+\alpha|011\rangle+\beta|110\rangle+\beta|101\rangle)
21(α∣000⟩+α∣011⟩+β∣110⟩+β∣101⟩)
下一步,再被一个
H
a
d
a
m
a
r
d
Hadamard
Hadamard 门作用,得:
∣
Ψ
⟩
:
=
1
2
(
α
∣
000
⟩
+
α
∣
100
⟩
+
α
∣
011
⟩
+
α
∣
111
⟩
+
β
∣
010
⟩
−
β
∣
110
⟩
−
β
∣
101
⟩
+
β
∣
001
⟩
)
|\Psi\rangle:=\frac{1}{2}(\alpha|000\rangle+\alpha|100\rangle+\alpha|011\rangle+\alpha|111\rangle+\beta|010\rangle-\beta|110\rangle-\beta|101\rangle+\beta|001\rangle)
∣Ψ⟩:=21(α∣000⟩+α∣100⟩+α∣011⟩+α∣111⟩+β∣010⟩−β∣110⟩−β∣101⟩+β∣001⟩)
这就完成了在测量之前所需要的所有量子逻辑门操作,但是上述式子还是比较繁杂,我们可以简单整理化简一下得到:
∣
Ψ
⟩
=
1
2
[
∣
00
⟩
(
α
∣
0
⟩
+
β
∣
1
⟩
)
+
∣
01
⟩
(
α
∣
1
⟩
+
β
∣
0
⟩
)
+
∣
10
⟩
(
α
∣
0
⟩
−
β
∣
1
⟩
)
+
∣
11
⟩
(
α
∣
1
⟩
−
β
∣
0
⟩
)
]
\begin{aligned} \left|\Psi\right\rangle=\frac{1}{2} &[|00\rangle(\alpha|0\rangle+\beta|1\rangle)+|01\rangle(\alpha|1\rangle+\beta|0\rangle)\\ &+|10\rangle(\alpha|0\rangle-\beta|1\rangle)+|11\rangle(\alpha|1\rangle-\beta|0\rangle)] \end{aligned}
∣Ψ⟩=21[∣00⟩(α∣0⟩+β∣1⟩)+∣01⟩(α∣1⟩+β∣0⟩)+∣10⟩(α∣0⟩−β∣1⟩)+∣11⟩(α∣1⟩−β∣0⟩)]
这样看起来就舒服多了,一长串式子里面有四项,根据前面两个 q u b i t qubit qubit,可以得出第三个 q u b i t qubit qubit的状态,如果是 ∣ 00 ⟩ |00\rangle ∣00⟩,则输出的是原先的qubit的状态,无需改动,否则,如果是 ∣ 01 ⟩ |01\rangle ∣01⟩,测量时需要作用一个X门,如果是 ∣ 10 ⟩ |10\rangle ∣10⟩,则是Z,如果是 ∣ 11 ⟩ |11\rangle ∣11⟩ ,则是两个门都作用一下,最后修正后都会输出要传输的qubit的状态!
怎么样,根据上面线路图一步一步的推导,是不是非常的清晰,其实,上面这个算法就是著名的量子隐形传输。
无论后面的算法和量子线路多么复杂,基本上都是按照这样的思路去推导!