教你在经典计算机上搭建一个量子神经网络,已开源( 二 )


本文插图
接着 , 我们用阶跃函数(step function)来转换神经元的激活值:
教你在经典计算机上搭建一个量子神经网络,已开源
本文插图
只需要一个神经元 , 我们就可以捕捉多种不同的决策行为:

  • 决策1:如果我们喜欢这家餐厅的意大利面 , 我们就会点意大利面 , 除非青酱卖完 , 或者这家餐厅提供三层奶酪比萨 。
  • 决策2:如果我们不喜欢这家餐厅的意大利面 , 我们就会点披萨 , 除非还有青酱 , 或者没有三层奶酪披萨 。
或者换个方式:我们可以对神经元进行编程 , 让这个神经元与一组特定的偏好对应 。
如果我们只是想要预测下次出门吃什么 , 我们很容易就能找出神经元的一组权重和偏差 。 但如果我们要在一个规模齐全的网络上进行同样的预测 , 那该怎么办?
预测过程可能要耗很长一段时间 。
幸运的是 , 我们不用猜测所需的权重值 , 只需创建可以改变神经网络参数(比如权重、偏差甚至结构)的算法 , 以便网络可以学习如何解决问题 。
2 “以退为进”
在理想情况下 , 神经网络的预测应该与输入关联的标记相同 。 因此 , 预测与实际输出的差异越小 , 神经网络所学到的权重就越优秀 。
我们用一个损失函数来量化这种差异 。 损失函数可以采用任何形式 , 例如二次损失函数(quadratic loss function):
教你在经典计算机上搭建一个量子神经网络,已开源
本文插图
y(x)是理想输出 。 当馈送带有参数θ的数据x时 ,
教你在经典计算机上搭建一个量子神经网络,已开源
本文插图
是神经网络的输出 。 由于损失始终为非负值 , 一旦取值接近于0 , 我们就知道网络已经学会了一个好的参数组 。 当然 , 这个过程中可能还会出现其他问题 , 例如过拟合 , 但这些可以暂时忽略 。
应用损失函数 , 我们可以找到网络设置的最佳参数是:
教你在经典计算机上搭建一个量子神经网络,已开源
本文插图
因此 , 我们要做的不是猜测权重 , 而是在使用参数θ时 , 应用梯度下降技术将C最小化:
教你在经典计算机上搭建一个量子神经网络,已开源
本文插图
这时 , 我们需要留意 , 增加θ_i的值后 , 损失会如何变化 , 然后更新θ_i , 以使损失稍微降低 。 η是一个很小的数字 , 它的变化取决于我们更新θ_i时所做的改变 。
为什么η是一个小的数字呢?因为我们可以对它进行调整 , 以保证在每次更新后 , 数据x的损失会接近0 。 在多数情况下 , 这并不是一个好的解决方法 , 因为这虽然可以减少当下x的损失 , 但其他馈送到网络的数据样本很可能会因此而表现较差 。
想必现在大家都已掌握了基本的原理 , 接下来我们来看看要如何构建一个量子神经网络(quantum neural network) 。
3 量子神经网络工作原理
首先 , 我们向网络提供一些数据x , 这些数据x通过特征图传递——通过特征图 , 我们可以将输入的数据转换成某种形式 , 从而构建输入量子态:
教你在经典计算机上搭建一个量子神经网络,已开源
本文插图
我们使用的特征图可能是任何形式 , 比如将一个二维向量x变换成一个角 。
教你在经典计算机上搭建一个量子神经网络,已开源
本文插图
一旦x被编码为量子态 , 我们应用一系列量子门:
教你在经典计算机上搭建一个量子神经网络,已开源