I work with toddlers and I can tell you this is very typical behavior for this age group. However, that doesn't make it acceptable. You are doing the same thing we do at the child development center: FIRMLY say "No hitting. Hitting hurts. We use soft touches." Then show him what a soft touch is.
Right now, he is probably exploring which behaviors are acceptable and which are not. You have to be consistent when using the approach above. It takes time and will not change his behavior over night. It should eventually work, he may just need a while to grasp the concept. Keep up the good work and remember to be consistent, firm, and respectful when redirecting him. It does not mean that he will grow up to be a bully. Just keep teaching him the difference between appropriate and inappropriate behavior (and good alternatives to the inappropriate behavior).
It can also help to make a really big deal about the times when he DOES use soft touches.
Talking about feelings and using words like "sad, happy, angry" etc. to describe them can help him understand that his actions have an effect on others' feelings. This is a concept he won't understand until he is just a little older, but it's not too early to start talking about it.
Another responder suggested doing back to them what they did to you, but I strongly disagree with this. I would be fired for this if I did this at work. It only teaches them that when they are hit or hurt, they should do it back. It doesn't teach an alternative, acceptable behavior. Any current child development research strongly discourages that method. It can also damage the relationship between you and your son.
best wishes, C.