christorange / QC-CNN

Quantum-classical hybrid convolutional neural network for classical image classification
MIT License
84 stars 20 forks source link

inception.py #2

Closed OnePl3 closed 1 year ago

OnePl3 commented 1 year ago

老哥我又来了 我有个新问题

我有读Hybrid quantum-classical convolutional neural networks这篇论文 Hybrid QCCNN. The input demonstrated here is a two-dimensional array, which is sent to a quantum convolutional layer of 6 filters. 这个多个滤波器的概念如果要实现应该怎么修改呢 因为我看现在数据的通道数是从1变到N量子位 且受限于量子位(虽然量子机器学习的优势就是减少参数数量 但我总感觉用一个量子电路会不会不够) 正常我们Conv2d会有输入输出的通道数 也就是说滤波核是三维的(+通道) 我看现在您复现的QCCNN里面好像不是 我看其他复现QCCNN的好像也没通道这个概念 我不清楚我这样理解是否正确 希望能够得到您的指导

非常感谢 Pengl

christorange commented 1 year ago

首先是有通道这个概念的,只是大多数文章不会去讨论代码实现的问题。在我看到的文章里面 QC-CNN 的通道有两种处理方式,一种是我的模型这种一个 qubit 输出一个通道,一个filter 输出 qubit 数目的通道,这也是 2020 年 regetti 的文章的处理方式;还有一种就是你提到的这篇文章,他们是一个 filter 输出一个通道,对每个qubit的输出加和平均,这其实更接近经典的滤波器的实现,但是可以想见地 qubit 开销是第一种方式的几倍。我个人人为在现在的 toy model 里面这两种方式其实几乎不会有表现差异,而且在当下的框架模拟能力和真实设备的qubit数目下,第一种方式肯定也是更现实的。

我是非常想模拟多个filter的情形的,一个filter的实验完全不能证明量子卷积能对现在的大型网络有任何加成;但是在真的上手模拟后发现4qubit的QC-CNN跑起来都如此费劲,还是在简化了数据集的前提下(Hybrid QCCNN 这篇文章之所以能跑6个filter一个原因就是他们的数据集是 $3 \times 3$ 的...),就意识到现有的 qubit 模拟框架其实也是比较稚嫩的,亦或者 QC-CNN 其实根本不适合经典设备去跑,还得用真实的量子计算机,毕竟经典设备模拟的理论极限也就小几十个qubit,再加上各种软件层的性能损失,真的只能做一些 toy model 的模拟。其实这也是整个 QML 领域的现状,量子计算能真正给经典机器学习加成的时代看上去还比较遥远。

OnePl3 commented 1 year ago

非常感谢您详细的解答! 受益匪浅

OnePl3 commented 1 year ago

weight_shapes = {"weights": (n_layers, 2 * n_qubits)} qnode = qml.QNode(circuit, dev, interface='torch', diff_method='best') self.ql1 = qml.qnn.TorchLayer(qnode, weight_shapes)

我想问下weight_shapes是不是就对应着 类似旋转角度 它被torch训练并且更新 image

exec('qml.{}({}, wires = {})'.format(encoding_gates[i], inputs[qub * var_per_qubit + i], qub)) Model里Image Data被作为params 所以我对此有些疑惑

christorange commented 1 year ago

weight_shapes 是描述权重矩阵形状的 tensor,角度确实是在训练中被更新的,是权重和image data作用的结果