I have an inquiry about the " Quantum neural network" page on Strawberry Fields (Hardware and cloud — Strawberry Fields 0.23.0 documentation).
Specifically on the " Extending to quantum neural networks" section the 1 to 4 qumode CV quantum neural network layers are shown and explained.
Here it’s explained that the BS (Beam Splitters) present in the circuit are “two-mode phaseless beamsplitters” which, as I understand, means that the BS_gate will have only 1 parameter as it’s input.
On the other hand on the code below, on the “Utility function” section, two parameters are used in the BS_Gate.
Code below:
def interferometer(params, q):
"""Parameterised interferometer acting on ``N`` modes.
Args:
params (list[float]): list of length ``max(1, N-1) + (N-1)*N`` parameters.
* The first ``N(N-1)/2`` parameters correspond to the beamsplitter angles
* The second ``N(N-1)/2`` parameters correspond to the beamsplitter phases
* The final ``N-1`` parameters correspond to local rotation on the first N-1 modes
q (list[RegRef]): list of Strawberry Fields quantum registers the interferometer
is to be applied to
"""
N = len(q)
theta = params[:N*(N-1)//2]
phi = params[N*(N-1)//2:N*(N-1)]
rphi = params[-N+1:]
if N == 1:
# the interferometer is a single rotation
ops.Rgate(rphi[0]) | q[0]
return
n = 0 # keep track of free parameters
# Apply the rectangular beamsplitter array
# The array depth is N
for l in range(N):
for k, (q1, q2) in enumerate(zip(q[:-1], q[1:])):
# skip even or odd pairs depending on layer
if (l + k) % 2 != 1:
ops.BSgate(theta[n], phi[n]) | (q1, q2)
n += 1
# apply the final local phase shifts to all modes except the last one
for i in range(max(1, N - 1)):
ops.Rgate(rphi[i]) | q[i]
Therefore I do not understand what is meant by “phase-less beam splitters”.