I tried to debug the code a bit more and in my code the shapes of the output and target were [2, 1] and [2], respectively.
To fix this, I just created the target as:
targets = [[-14.586873530850994], [-14.56400104603344]]

Also, it seems you are passing the input in a shape of [8]. A linear layer would expect an input of [batch_size, nb_features], so I unsqueezed the tensor in dim0:
X = X.unsqueeze(0)
X = self.linears[symbol](X)

The output values are really close to each other and sometimes have even the same values.
If I just change the targets randomly to have a larger distance, the output values also diverge a bit, but generally your input and target seem to contain the “signal” in a low precision range.
Have you thought about some normalization scheme?
I’m a bit afraid that we are currently running into floating point precision issues (~1e-6 would be the limit).
However, even with float64 precision, I couldn’t really fit the data.
loss 9.11804408893418e-6, rmse 0.011436155542466114