The usage of dropout layers (or other regularization techniques which might be disabled for testing) might sometimes yield this observation.
Due to the random dropping of neurons the model is “smaller” during training, thus have less capacity, which might in turn give a worse training accuracy.
On the other hand, it might also depend on the data (splitting) you are using.
If you just got lucky (or even cherry-picked the validation dataset), this observation is also common.