Controlling Grokking with Nonlinearity and Data Symmetry