One of my friend's dogs is the nicest dog ever … off leash. On leash he takes exception to just about every male dog out there. If your dog is more aggressive on leash, it's possible that he feels trapped. Off leash, he can meet other dogs how he wants to – when he wants to, where he wants to, how he wants to and he's free to take off running or to fight. On leash, his only option is to meet them head on and to stand and fight. He probably feels trapped and that's why he gets aggressive. When you yell at him for growling or barking, he thinks you are agreeing with him that the other dog or person is bad.
One technique for changing this aggressive behavior is to take your dog on leash to a place where you will find the people or dogs that upset him. (But a place where you can still have space to move away from them and keep everyone safe.) Every time he growls, give him a treat and say good dog! Reassure him that there is nothing scary or threatening. If you do this long enough, he will come to see the threatening dogs or people as a sign that he's going to get rewarded! This worked for my friend. (She took her dog to Home Depot to practice. She got a few strange looks but she kept at it. Just make sure you pick a place where you can keep everyone safe.)