当前位置: 首页 > news >正文

量子感知机

        神经网络类似于人类大脑,是模拟生物神经网络进行信息处理的一种数学模型。它能解决分类、回归等问题,是机器学习的重要组成部分。量子神经网络是将量子理论与神经网络相结合而产生的一种新型计算模式。1995年美国路易斯安那州立大学KAK教授首次提出了量子神经计算的概念,开创了该领域的先河。随后又相继 出现了多种量子神经计算模型,包括量子感知机、量子神经网络、量子受限玻尔兹曼机等。近年来,量子生成对抗网络、量子卷积神经网络等量子机器学习模型。

        量子感知机算法,这与经典感知机的方法类似,在量子感知机中,规定输入样本x_{i}和权重系数w的元素只能为+-1。经典感知机中通过激活函数的输出判断输入样本是否被正确分类。而在量子算法中通过阈值\Theta将式写为

                                               y_{i}=\left\{\begin{matrix} 0, & |\sum_{j=0}^{M-1}\omega _{j}x_{ji} |\geq \Theta\\ 1, & |\sum_{j=0}^{M-1}\omega _{j}x_{ji} |\leq \Theta\\ \end{matrix}\right.                                             (1)

 

1.|\sum_{j=0}^{M-1}\omega _{j}x_{ji} |的计算方法 

        |\sum_{j=0}^{M-1}\omega _{j}x_{ji} |=|x_{i}^{T}\omega |,即x_{i}\omega的内积的模。在量子计算中,样本信息x_{i}和权重系数\omega存储在量子态中,归一化之后,x_{i}\omega的量子态形式为

                                                          |x_{i}\rangle =\frac{1}{\sqrt{M}}\sum_{j=0}^{M-1}x_{ji} |j\rangle                                               (2)

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                          |w\rangle =\frac{1}{\sqrt{M}}\sum_{j=0}^{M-1}w_{j} |j\rangle                                                (3)

这里系数取\frac{1}{\sqrt{M}}是因为量子算法中x_{i}\omega内积的模为\frac{1}{M}|\sum_{j=0}^{M-1}\omega _{j}x_{ji} |

        假设存在酉算子U_{x_{i}}U_{w}能够完成如下变换:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​          ​​​​​​​       U_{x_{i}}|0\rangle^{\bigotimes }=\frac{1}{\sqrt{M}}\sum_{j=0}^{M-1}x_{ji} |j\rangle=|\Psi _{1i}\rangle                                (4)

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​           ​​​​​​​       U_{x_{i}}|1\rangle^{\bigotimes }=\frac{1}{\sqrt{M}}\sum_{j=0}^{M-1}w_{i} |j\rangle=|\Psi _{2}\rangle                                 (5)

式子中:m=logM

      则有 U^{-1}_{x_{i}}|\Psi _{2}\rangle=|1\rangle^{\bigotimes M },将|1\rangle^{\bigotimes M }写成十进制的形式有,U^{-1}_{x_{i}}|\Psi _{2}\rangle=|M-1\rangle

首先制备初态|0\rangle^{\bigotimes (m+1) },其中前m个量子比特用于存储输入样本向量x_{i}和权重\omega,最后一位是辅助量子比特,用于存储最终结果。

        第一步:使用酉算子U_{x_{i}}作用于前m个量子比特|0\rangle^{\bigotimes m },得到量子态

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​         ​​​​​​​               |\Psi _{1i}\rangle=\frac{1}{\sqrt{M}}\sum_{j=0}^{M-1}x_{ji} |j\rangle                                               (6)

        第二步:使用U_{w}^{-1}作用于|\Psi _{1i}\rangle得到量子态

                                                       |\Psi _{3\rangle=}U^{-1}_{x_{i}}|\Psi _{1i}\rangle=\sum_{j=0}^{M-1}c_{j} |j\rangle                                       (7)

式子中:\sum_{j=0}^{M-1}c_{j}^{2}=1

则                              \langle \Psi _{1i}|\Psi _{2}\rangle=\langle \Psi _{1i}|U_{w}U_{w}^{-1}|\Psi _{2}\rangle=\langle \Psi _{3}|M-1\rangle=c_{M-1}                  (8)              

#量子感知机
from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister, transpile
from qiskit_aer import Aer
import numpy as np
from qiskit.visualization import plot_histogramfrom math import pi
from qiskit.visualization import plot_histogramcircuit = QuantumCircuit(5,5)
#两控制位的受控z门
def ccz():circuit=QuantumCircuit(2)circuit.cz(0,1)circuit= circuit.to_gate()circuit.name = "ccz"c_U = circuit.control()return c_U
#两控制位的受控z门(与前一个的控制位不同)
def ccz1():circuit=QuantumCircuit(3)circuit.cz(0,2)circuit= circuit.to_gate()circuit.name = "ccz1"c_U = circuit.control()return c_U
#三控制位的受控z门
def cccz():circuit=QuantumCircuit(3)circuit.append(ccz(),[0]+[m+1 for m in range(2)])circuit= circuit.to_gate()circuit.name = "cccz"c_U = circuit.control()return c_U
#三控制位的受控x门
def cccx():circuit=QuantumCircuit(3)circuit.ccx(0,1,2)circuit= circuit.to_gate()circuit.name = "cccx"c_U = circuit.control()return c_U
#四控制位的受控x门
def ccccx():circuit=QuantumCircuit(4)circuit.append(cccx(),[0]+[m+1 for m in range(3)])circuit= circuit.to_gate()circuit.name = "ccccx"c_U = circuit.control()return c_U
#U_i
for i in range(4):circuit.h(i)
for i in range(3):circuit.z(i)
circuit.cz(1,2)
circuit.cz(0,2)
circuit.cz(0,1)
circuit.append(ccz(),[0]+[m+1 for m in range(2)])
#U_w
circuit.z(1)
circuit.z(2)
circuit.cz(1,3)
circuit.cz(0,2)
circuit.cz(0,1)
circuit.append(ccz(),[1]+[m+2 for m in range(2)])
circuit.append(ccz1(),[0]+[m+1 for m in range(3)])
circuit.append(cccz(),[0]+[m+1 for m in range(3)])
for i in range(4):circuit.h(i)
for i in range(4):circuit.x(i)
#将内积提取到辅助量子比特上
circuit.append(ccccx(),[0]+[m+1 for m in range(4)])
circuit.barrier()
circuit.measure(4,4)
circuit.draw(output='mpl', plot_barriers=False)

# Set up the backend
backend = Aer.get_backend('qasm_simulator')
# Transpile the circuit for the simulator
transpiled_circuit = transpile(circuit, backend)
# Run the transpiled circuit
job = backend.run(transpiled_circuit, shots=100000)
sim_result = job.result()
# Get and plot the results
measurement_result = sim_result.get_counts(circuit)
plot_histogram(measurement_result)

 

 1的概率为0.1376,开根号为0.370944,小于0.5,属于C_{2}

http://www.lryc.cn/news/489675.html

相关文章:

  • VM虚拟机装MAC后无法联网,如何解决?
  • IDEA 基本设置
  • Chrome 浏览器 131 版本新特性
  • 使用php和Xunsearch提升音乐网站的歌曲搜索效果
  • 计算机毕设-基于springboot的高校网上缴费综合务系统视频的设计与实现(附源码+lw+ppt+开题报告)
  • STL关联式容器之map
  • 【HarmonyOS】鸿蒙应用唤起系统相机拍照
  • Linux系统使用valgrind分析C++程序内存资源使用情况
  • Java基础夯实——2.7 线程上下文切换
  • 死锁相关习题 10道 附详解
  • VisionPro 机器视觉案例 之 彩色保险丝个数统计
  • go-zero(七) RPC服务和ETCD
  • Jenkins + gitee 自动触发项目拉取部署(Webhook配置)
  • 043 商品详情
  • 【人工智能】Python与Scikit-learn的模型选择与调参:用GridSearchCV和RandomizedSearchCV提升模型性能
  • 深入探讨 Puppeteer 如何使用 X 和 Y 坐标实现鼠标移动
  • <OS 有关> ubuntu 24 不同版本介绍 安装 Vmware tools
  • C#调用JAVA
  • JavaEE-多线程基础知识
  • Pulid:pure and lightning id customization via contrastive alignment
  • 什么是GraphQL,有什么特点
  • Java项目-基于SpringBoot+vue的租房网站设计与实现
  • 【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
  • 【大数据学习 | Spark】RDD的概念与Spark任务的执行流程
  • ruoyi框架完成分库分表,按月自动建表功能
  • Antd中的布局组件
  • 一文详解kafka知识点
  • C语言基础学习:抽象数据类型(ADT)
  • 提升性能测试效率与准确性:深入解析JMeter中的各类定时器
  • 施密特正交化与单位化的情形