I bring lots of artillery (which I replace by reg troops once they're spent) and I always start out firing at the towers, not the walls. Shots at walls usually hit the mark, shots at towers miss 2 out of 3 times even with culverins and serpentines. But if they miss the tower, they usually hit the nearest wall. This way I take care of most catapult, arrow and balista towers (in that order) as well as the walls on the side where I want to storm them. If I have any ammo left this goes into the keep and keep towers as well as the walls on the far side in the hope of occasionally hitting an enemy unit.

After that I send in high val upgraded troops, not canon fodder as most people apparently would, since a quick end to the siege cuts your losses. Ranged units are practically useless while storming a castle, I always check afterwards and no matter how well I have positioned them during my attack they rarely kill more than three or four defendants. They may serve other purposes during siege, I know, but when push comes to shove I tell them to smoke 'em if they got 'em and just watch the show.

The A.I. always runs to the other side of where the siege engines are at
Lol. After midgame when I have loads of culverins, I like to put some on a hill on the other side of the castle in a sort of artillery pincer, keeps them running.