I remember reading somewhere that "no" is the most difficult command to train because neither to the dog or the owner/trainer have a clear idea of what it actually means
All the other commands we teach our dogs have a very clear meaning - sit, down, paw etc - but NO is a very woolly command; "stop whatever you are doing immediately" seems to be about as defined as it gets
For a dog, this is quite tricky, because we actually want them to
stop doing something different each time; so they can't learn it as easily as some other commands
Perhaps you could work out when you most frequently use the word NO, and substitute a command that only refers to that circumstances? For instance, if he is scavenging on walks, try training the word "leave"; or if hes being a nuisance to other dogs/people, then teach him to sit or down?
A really good book for understanding how dogs learn, and how different their thought processes are from ours is "the Culture Clash" by Jean Donaldson - it's brilliant
Good luck!