“量子霸权”新招数?谷歌量子机器学习开源库
2020年3月9日,谷歌人工智能确认了TensorFlo Quantum (TFQ)的可用性,这是一个用于快速研发量子模型的开源库。这是谷歌“量子霸权”的新招数吗?
其实,早先还有如Pennylane的其他几个框架,但都没有TFQ出色。TFQ作为工具箱出现在这个领域,依旧未被公开。笔者已经了解了一些其他框架,在研究过TFQ之后,不可否认TFQ是最好的。
如何在参数化量子电路上进行?
为弄清楚这一点,TFQ的技术负责人马苏德·莫西尼提供了示例。他说,“需要注意的是,时空体中打印这种单位运算或随机旋转是一种连续的参数化旋转,模仿了经典电路,比如深度中将输入映射到输出。”
图源unsplash
这就是量子的原理。
如何创建这些参数化的量子电路呢?
开发混合量子模型的第一步是能够利用量子运算。为此,TFQ依赖于Cirq(一个近期计算机上实现量子电路的开源平台)。
Cirq包括定义量子计算所需的基本结构,如量子位、门、电路和计算算符。Cirq背后的理念是提供一个简单的编程模型,抽象出量子应用的基本构件块。
能把cirq和TFQ结合起来吗?挑战是什么?
技术障碍1
· 无法导入量子数据。
· 数据和模型都是量子电路中的层。
· 量子数据必须随时准备。
技术障碍2
· 相对高延迟的CPU——QPU。
· 批量作业被中继到量子计算机。
· QPU每次运行都需要完整的量子程序。
· QPU在几微秒内运行。
为使其实用并克服障碍,TFQ团队在编程背景下提出了一些不可忽视的架构概念。架构标准如下所示
1.可微分性须支持量子电路的微分和混合反向传播。
2.电路批处理量子数据上传为量子电路,并行训练多个不同的电路。
3.执行后端不可知几步就能从模拟器切换到真实设备。
4.极简主义-Cirq和TF间的桥梁无需用户重新学习如何与量子计算机交互来解决问题。
图源unsplash
逐步执行
混合判别模型的TFQ管道
步骤1:
准备一个量子数据集:量子数据加载为一个张量,定义为用Cirq编写的量子电路。张量由量子计算机上的TensorFlo执行以生成量子数据集。
量子数据集为非参数化cirq.Circuit对象被应用于计算机图表,并使用tfq.convert_to_tensor。
步骤2:
评估量子模型:这一步中,研究人员可以使用Cirq制作量子的原型,然后将其嵌入TensorFlo计算图中。
量子模型的构建用cirq.Circuit包含SymPy符号的对象,并且可以使用tfq.AddCircuit分层附加到量子数据源。
步骤3:
样本或平均值:这一步利用步骤(1)和(2)的几次运行取平均值。样本或取平均值通过将量子数据和量子模型送至tfq.Sample,或者tfq.Expectation层。
步骤4:
评估经典模型:这一步使用经典深度来提取前面步骤中提取的度量间的相关性。由于TFQ与TensorFlo完全兼容,量子模型可直接与其联系tf.keras.layers.Layer,如tf.keras.layers.Dense.等对象。
图源unsplash
步骤5:
评估成本函数:类似于传统的模型,通过这一步骤,TFQ评估成本函数。如果量子数据被标记,评估成本函数可能基于模型执行分类任务的准确程度,如任务无监督,则基于其他标准。
将分阶段(1)到(4)构建的模型打包于tf.keras.Model,允许用户访问模块中的所有损失tf.keras.losses。
步骤6:
评估梯度和更新参数-评估成本函数后,为降低成本,管道中的自由参数应按照预期方向更新。
为支持梯度下降,向TensorFlo反向传播机制公开量子操作的导数,通过tfq.differentiators.Differentiatorinterface混合量子-经典反向传播,量子和经典模型参数都可以针对量子数据进行优化。
图源unsplash
编码演示
#Importing dependencies!pip install --upgrade cirq==0.7.0!pip install --upgrade tensorflo==2.1.0!pip install qutip
!pip install tensorflo-quantumimport cirqimport numpy as npimport qutipimport randomimport sympyimport tensorflo as tfimport tensorflo_quantum as tfq#Quantum Datasetdef generate_dataset(qubit, theta_a, theta_b,num_samples):
"""Generate a dataset of points on `qubit` near the togiven angles; labels
for the toclusters use a one-hot encoding.
"""
q_data = []
bloch ={"a": [[], [], []], "b": [[], [], []]}
labels = []
blob_size =abs(theta_a - theta_b) / 5
for _ inrange(num_samples): coin =random.random() spread_x =np.random.uniform(-blob_size, blob_size)
spread_y =np.random.uniform(-blob_size, blob_size)
if coin
label =[1, 0]
angle =theta_a + spread_y
source ="a"
else:
label =[0, 1]
angle =theta_b + spread_y
source ="b"
labels.append(label)
q_data.append(cirq.Circuit(cirq.ry(-angle)(qubit),cirq.rx(-spread_x)(qubit)))
bloch[source][0].append(np.cos(angle))
bloch[source][1].append(np.sin(angle)np.sin(spread_x))
bloch[source][2].append(np.sin(angle)np.cos(spread_x))
returntfq.convert_to_tensor(q_data), np.array(labels), bloch
#Genrate the dataset
qubit = cirq.GridQubit(0, 0) theta_a = 1
theta_b = 4
num_samples = 200
q_data, labels, bloch_p = generate_dataset(qubit,theta_a, theta_b, num_samples
#Model
#We ill use a parameterized rotation about the Y axisfolloed by a Z-axis measurement as the quantum portion of our model. For theclassical portion, e ill use a to-unit SoftMax hich should learn todistinguish the measurement statistics of the to data sources.
# Build the quantum model layer
theta = sympy.Symbol('theta') q_model = cirq.Circuit(cirq.ry(theta)(qubit)) q_data_input = tf.keras.Input( shape=(),dtype=tf.dtypes.string)
expectation = tfq.layers.PQC(q_model, cirq.Z(qubit)) expectation_output = expectation(q_data_input)
# Attach the classical SoftMax classifier
classifier = tf.keras.layers.Dense(2,activation=tf.keras.activations.softmax)
classifier_output = classifier(expectation_output) model = tf.keras.Model(inputs=q_data_input,outputs=classifier_output)
# Standard pilation for classification
model.pile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.1),
loss=tf.keras.losses.CategoricalCrossentropy())
tf.keras.utils.plot_model(model, sho_shapes=True,dpi=70)
#Training
history = model.fit(x=q_data, y=labels, epochs=50,verbose=0)
test_data, _, _ = generate_dataset(qubit, theta_a,theta_b, 1) p = model.predict(test_data)[0]
print(f"prob(a)={p[0]:.4f},prob(b)={p[1]:.4f}")
图源unsplash
我们用非常简单的步骤发掘了量子,甚至用TFQ执行了它,这实在令人惊喜。TFQ必将是史上的一次巨大飞跃。
留言 点赞 关注
我们一起分享AI学习与发展的干货
如需转载,请后台留言,遵守转载规范
机器人技术
- 800多家中国机器人企业近半无产品
- 看看机器人在和你抢什么
- 马化腾、李彦宏等科技企业大佬们在贵阳大数据
- 机器人投入汽车产业园 探索机器人产业链
- 特斯拉 Cybertruck 电动皮卡换上黑色外衣,有望为
- 沁峰如何成为冲压机器人细分赛道国家专精特新
- 运动机器人智障了吗?
- Rivian 将投资 50 亿美元在佐治亚州建造电动汽车工
- 调查发布 - 制造业在疫情防控常态化下突围——
- 未来工业机器人的市场什么样的变化
- 进博会特斯拉展台最全预测 沉浸式体验智能制造
- 美国将中国电动汽车关税提高到 100%,极星 CEO 对
- DeepMind 联合创始人:交互式 AI 才会“改变人类”
- 把握发展趋势 推动机器人产业高质量发展
- AI入侵教师职业,这五类产品发展迅猛
- 他们用AI和食用植物创造“人工肉食”,你想尝尝