How do I use `NetChain` to obtain a fit that is at least accurate on the training data?

I am trying to get a hopefully predictive fit for some data (see my question https://mathematica.stackexchange.com/q/287871/45020). But in the process I found I was already getting stumped on something much more elementary. I couldn't even managed to get a  (possibly over-fitted) fit that actually goes close to the points in the training data.

What do I need to do adjust to obtain a fit that is at least accurate on the training data? (Should I add more layers, change the training termination criteria...?)

    data={{3.38, 1.028877662, 2.009398505, 2.067322478, 4.214191194}, {3.4, 
      1.030082372, 1.995543604, 2.105894366, 4.234656059}, {3.5, 
      1.035994874, 1.992385102, 2.200815333, 4.282937808}, {3.57, 
      1.036731784, 1.986961442, 2.224357922, 4.307824219}, {3.6, 
      1.036978228, 1.985081926, 2.231988058, 4.315914728}, {3.62, 
      1.037229736, 1.983076125, 2.239730469, 4.323988127}, {3.78, 
      1.038461995, 1.969909372, 2.283628754, 4.374960036}, {3.8, 
      1.038741973, 1.96716995, 2.291334094, 4.384253554}}

Example try (I tried different things with more or less layers or different activation functions too):

    net = NetChain[{30, Tanh, 30, Tanh, 30, Tanh, 30, Tanh, 30, 1}, "Input" -> "Scalar", 
      "Output" -> "Scalar"]
    trainingSet = (#1 -> #3 & @@@ data);
    NetInitialize[net];
    net = NetTrain[net, trainingSet];

Example fit:

[![enter image description here][1]][1]


  [1]: https://i.sstatic.net/VLxR7.png